xref: /phasta/phSolver/compressible/vorticity.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
1*10167291SKenneth E. Jansen        subroutine vortGLB  (y, x, shp, shgl, ilwork, vortG)
2*10167291SKenneth E. Jansen
3*10167291SKenneth E. Jansen        use pointer_data
4*10167291SKenneth E. Jansen        include "common.h"
5*10167291SKenneth E. Jansen        include "mpif.h"
6*10167291SKenneth E. Jansenc
7*10167291SKenneth E. Jansen        real*8  y(nshg,ndof),  x(numnp,nsd)
8*10167291SKenneth E. Jansenc
9*10167291SKenneth E. Jansen        real*8  shp(MAXTOP,maxsh,MAXQPT),
10*10167291SKenneth E. Jansen     &          shgl(MAXTOP,nsd,maxsh,MAXQPT)
11*10167291SKenneth E. Jansen
12*10167291SKenneth E. Jansen        integer ilwork(nlwork)
13*10167291SKenneth E. Jansen        real*8, allocatable :: tmpshp(:,:), tmpshgl(:,:,:)
14*10167291SKenneth E. Jansen        real*8  vortG(nshg,4) ! The first three components are vorticity vector, the 4th one is Q criterion
15*10167291SKenneth E. Jansen        real*8  vortIntG(nshg,4)
16*10167291SKenneth E. Jansen        real*8  lpmassG(nshg)
17*10167291SKenneth E. Jansen        real*8  tmp(nshg)
18*10167291SKenneth E. Jansen
19*10167291SKenneth E. Jansen        vortG=0
20*10167291SKenneth E. Jansen        lpmassG=0
21*10167291SKenneth E. Jansen        vortIntG=0
22*10167291SKenneth E. Jansen
23*10167291SKenneth E. Jansen        do iblk = 1, nelblk
24*10167291SKenneth E. Jansen          nenl   = lcblk(5,iblk) ! no. of vertices per element
25*10167291SKenneth E. Jansen          iel    = lcblk(1,iblk)
26*10167291SKenneth E. Jansen          lelCat = lcblk(2,iblk)
27*10167291SKenneth E. Jansen          lcsyst = lcblk(3,iblk)
28*10167291SKenneth E. Jansen          iorder = lcblk(4,iblk)
29*10167291SKenneth E. Jansen          nenl   = lcblk(5,iblk)   ! no. of vertices per element
30*10167291SKenneth E. Jansen          nshl   = lcblk(10,iblk)
31*10167291SKenneth E. Jansen          mattyp = lcblk(7,iblk)
32*10167291SKenneth E. Jansen          ndofl  = lcblk(8,iblk)
33*10167291SKenneth E. Jansen          nsymdl = lcblk(9,iblk)
34*10167291SKenneth E. Jansen          npro   = lcblk(1,iblk+1) - iel
35*10167291SKenneth E. Jansen          inum   = iel + npro - 1
36*10167291SKenneth E. Jansen          ngauss = nint(lcsyst)
37*10167291SKenneth E. Jansenc
38*10167291SKenneth E. Jansen          allocate (tmpshp(nshl,MAXQPT))
39*10167291SKenneth E. Jansen          allocate (tmpshgl(nsd,nshl,MAXQPT))
40*10167291SKenneth E. Jansen          tmpshp(1:nshl,:) = shp(lcsyst,1:nshl,:)
41*10167291SKenneth E. Jansen          tmpshgl(:,1:nshl,:) = shgl(lcsyst,:,1:nshl,:)
42*10167291SKenneth E. Jansen
43*10167291SKenneth E. Jansen          if(myrank.eq.0)then
44*10167291SKenneth E. Jansen            if(mod(iblk,100).eq.0)then
45*10167291SKenneth E. Jansen               write(*,*)'Compute vortIntG:', real(iblk)/nelblk
46*10167291SKenneth E. Jansen            endif
47*10167291SKenneth E. Jansen          endif
48*10167291SKenneth E. Jansen        call vortELE(y,x,tmpshp,tmpshgl,mien(iblk)%p,vortIntG,lpmassG)
49*10167291SKenneth E. Jansen
50*10167291SKenneth E. Jansen          deallocate(tmpshp)
51*10167291SKenneth E. Jansen          deallocate(tmpshgl)
52*10167291SKenneth E. Jansen        enddo
53*10167291SKenneth E. Jansen
54*10167291SKenneth E. Jansen         if(myrank.eq.0)write(*,*)'Communicating...'
55*10167291SKenneth E. Jansen         call MPI_BARRIER(MPI_COMM_WORLD,ierr)
56*10167291SKenneth E. Jansen         call commu(lpmassG,ilwork,1,'in ')
57*10167291SKenneth E. Jansen         call MPI_BARRIER(MPI_COMM_WORLD,ierr)
58*10167291SKenneth E. Jansen         do i=1,4
59*10167291SKenneth E. Jansen           call MPI_BARRIER(MPI_COMM_WORLD,ierr)
60*10167291SKenneth E. Jansen           tmp(:)=vortIntG(:,i)
61*10167291SKenneth E. Jansen           call commu(tmp,ilwork,1,'in ')
62*10167291SKenneth E. Jansen           vortIntG(:,i)=tmp(:)
63*10167291SKenneth E. Jansen           call MPI_BARRIER(MPI_COMM_WORLD,ierr)
64*10167291SKenneth E. Jansen         enddo
65*10167291SKenneth E. Jansen         call MPI_BARRIER(MPI_COMM_WORLD,ierr)
66*10167291SKenneth E. Jansen
67*10167291SKenneth E. Jansen         do i=1,4
68*10167291SKenneth E. Jansen            vortG(:,i)=vortIntG(:,i)/lpmassG(:)
69*10167291SKenneth E. Jansen         enddo
70*10167291SKenneth E. Jansen
71*10167291SKenneth E. Jansen!         call write_field(myrank,'a'//char(0),'vortG'//char(0),5,
72*10167291SKenneth E. Jansen!     &                    vortG, 'd'//char(0), nshg,4,lstep)
73*10167291SKenneth E. Jansen
74*10167291SKenneth E. Jansen      return
75*10167291SKenneth E. Jansen      end
76*10167291SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
77*10167291SKenneth E. Jansen
78*10167291SKenneth E. Jansen      subroutine vortELE(y,x,shp1,shgl1,ien,vortIntG,lpmassG)
79*10167291SKenneth E. Jansen
80*10167291SKenneth E. Jansen
81*10167291SKenneth E. Jansen       include "common.h"
82*10167291SKenneth E. Jansen
83*10167291SKenneth E. Jansen       real*8 y(nshg,ndof), x(numnp,nsd)
84*10167291SKenneth E. Jansen       real*8 shp1(nshl,MAXQPT), shgl1(nsd,nshl,MAXQPT)
85*10167291SKenneth E. Jansen       real*8 shp2(nshl,ngauss), shgl2(nsd,nshl,ngauss)
86*10167291SKenneth E. Jansen       real*8 shp(npro,nshl), shgl(npro,nsd,nshl)
87*10167291SKenneth E. Jansen       real*8 sgn(npro,nshl)
88*10167291SKenneth E. Jansen       integer ien(npro,nshl)
89*10167291SKenneth E. Jansen       real*8 yl(npro,nshl,ndof)
90*10167291SKenneth E. Jansen       real*8 xl(npro,nenl,nsd)
91*10167291SKenneth E. Jansen       real*8 dxidx(npro,nsd,nsd)
92*10167291SKenneth E. Jansen       real*8 WdetJ(npro)
93*10167291SKenneth E. Jansen       real*8 vortIntL(npro,nshl,4)
94*10167291SKenneth E. Jansen       real*8 lpmass(npro,nshl)
95*10167291SKenneth E. Jansen       real*8 volum(npro)
96*10167291SKenneth E. Jansen       real*8 alph2(npro)
97*10167291SKenneth E. Jansen       real*8 vortIntG(nshg,4)
98*10167291SKenneth E. Jansen       real*8 lpmassG(nshg)
99*10167291SKenneth E. Jansen       real*8 shg(npro,nshl,nsd)
100*10167291SKenneth E. Jansen       real*8 g1yi(npro,nflow)
101*10167291SKenneth E. Jansen       real*8 g2yi(npro,nflow)
102*10167291SKenneth E. Jansen       real*8 g3yi(npro,nflow)
103*10167291SKenneth E. Jansen
104*10167291SKenneth E. Jansen       call getsgn(ien,sgn)
105*10167291SKenneth E. Jansen       shp2(:,1:ngauss)=shp1(:,1:ngauss)
106*10167291SKenneth E. Jansen       shgl2(:,:,1:ngauss)=shgl1(:,:,1:ngauss)
107*10167291SKenneth E. Jansen
108*10167291SKenneth E. Jansen       call localy (y, yl, ien, ndof,  'gather  ')
109*10167291SKenneth E. Jansen       call localx (x, xl, ien, nsd,   'gather  ')
110*10167291SKenneth E. Jansen
111*10167291SKenneth E. Jansen
112*10167291SKenneth E. Jansen       vortIntL=0
113*10167291SKenneth E. Jansen       lpmass=0
114*10167291SKenneth E. Jansen       volum=0
115*10167291SKenneth E. Jansen       alph2=0
116*10167291SKenneth E. Jansen
117*10167291SKenneth E. Jansen
118*10167291SKenneth E. Jansen       do intp=1,ngauss
119*10167291SKenneth E. Jansen
120*10167291SKenneth E. Jansen         call getshp (shp2, shgl2, sgn, shp, shgl )
121*10167291SKenneth E. Jansen
122*10167291SKenneth E. Jansen         call e3metric( xl,         shgl,        dxidx,
123*10167291SKenneth E. Jansen     &                shg,        WdetJ)
124*10167291SKenneth E. Jansen
125*10167291SKenneth E. Jansen         g1yi = zero
126*10167291SKenneth E. Jansen         g2yi = zero
127*10167291SKenneth E. Jansen         g3yi = zero
128*10167291SKenneth E. Jansen
129*10167291SKenneth E. Jansen
130*10167291SKenneth E. Jansen         do n=1,nshl
131*10167291SKenneth E. Jansen           g1yi(:,2) = g1yi(:,2) + shg(:,n,1) * yl(:,n,2) ! du/dx
132*10167291SKenneth E. Jansen           g2yi(:,2) = g2yi(:,2) + shg(:,n,2) * yl(:,n,2) ! du/dy
133*10167291SKenneth E. Jansen           g3yi(:,2) = g3yi(:,2) + shg(:,n,3) * yl(:,n,2) ! du/dz
134*10167291SKenneth E. Jansen
135*10167291SKenneth E. Jansen           g1yi(:,3) = g1yi(:,3) + shg(:,n,1) * yl(:,n,3) ! dv/dx
136*10167291SKenneth E. Jansen           g2yi(:,3) = g2yi(:,3) + shg(:,n,2) * yl(:,n,3) ! dv/dy
137*10167291SKenneth E. Jansen           g3yi(:,3) = g3yi(:,3) + shg(:,n,3) * yl(:,n,3) ! dv/dz
138*10167291SKenneth E. Jansen
139*10167291SKenneth E. Jansen           g1yi(:,4) = g1yi(:,4) + shg(:,n,1) * yl(:,n,4) ! dw/dx
140*10167291SKenneth E. Jansen           g2yi(:,4) = g2yi(:,4) + shg(:,n,2) * yl(:,n,4) ! dw/dy
141*10167291SKenneth E. Jansen           g3yi(:,4) = g3yi(:,4) + shg(:,n,3) * yl(:,n,4) ! dw/dz
142*10167291SKenneth E. Jansen
143*10167291SKenneth E. Jansen           alph2(:) = alph2(:) + shp(:,n)*shp(:,n)*WdetJ(:)
144*10167291SKenneth E. Jansen
145*10167291SKenneth E. Jansen         enddo
146*10167291SKenneth E. Jansen         volum(:)  = volum(:) + WdetJ(:)
147*10167291SKenneth E. Jansen
148*10167291SKenneth E. Jansenc--------- compute vorticity and Q criterion
149*10167291SKenneth E. Jansen         do n=1,nshl
150*10167291SKenneth E. Jansen
151*10167291SKenneth E. Jansen            lpmass(:,n) = lpmass(:,n) + WdetJ(:)*shp(:,n)*shp(:,n)
152*10167291SKenneth E. Jansen
153*10167291SKenneth E. Jansen            vortIntL(:,n,1) = vortIntL(:,n,1) +
154*10167291SKenneth E. Jansen     &              (g2yi(:,4)-g3yi(:,3)) !dw/dy-dv/dz
155*10167291SKenneth E. Jansen     &               *WdetJ(:)*shp(:,n)
156*10167291SKenneth E. Jansen
157*10167291SKenneth E. Jansen            vortIntL(:,n,2) = vortIntL(:,n,2) +
158*10167291SKenneth E. Jansen     &              (g3yi(:,2)-g1yi(:,4)) !du/dz-dw/dx
159*10167291SKenneth E. Jansen     &               *WdetJ(:)*shp(:,n)
160*10167291SKenneth E. Jansen
161*10167291SKenneth E. Jansen            vortIntL(:,n,3) = vortIntL(:,n,3) +
162*10167291SKenneth E. Jansen     &              (g1yi(:,3)-g2yi(:,2)) !dv/dx-du/dy
163*10167291SKenneth E. Jansen     &               *WdetJ(:)*shp(:,n)
164*10167291SKenneth E. Jansen
165*10167291SKenneth E. Jansen
166*10167291SKenneth E. Jansen            vortIntL(:,n,4) = vortIntL(:,n,4) +
167*10167291SKenneth E. Jansen     &              ( 0.5*(g2yi(:,4)-g3yi(:,3))**2 !dw/dy-dv/dz
168*10167291SKenneth E. Jansen     &               +0.5*(g3yi(:,2)-g1yi(:,4))**2 !du/dz-dw/dx
169*10167291SKenneth E. Jansen     &               +0.5*(g1yi(:,3)-g2yi(:,2))**2 !dv/dx-du/dy
170*10167291SKenneth E. Jansen     &               -g1yi(:,2)**2-g2yi(:,3)**2-g3yi(:,4)**2
171*10167291SKenneth E. Jansen     &               -0.5*(g2yi(:,4)+g3yi(:,3))**2
172*10167291SKenneth E. Jansen     &               -0.5*(g3yi(:,2)+g1yi(:,4))**2
173*10167291SKenneth E. Jansen     &               -0.5*(g1yi(:,3)+g2yi(:,2))**2 )*0.5
174*10167291SKenneth E. Jansen     &               *WdetJ(:)*shp(:,n)
175*10167291SKenneth E. Jansen
176*10167291SKenneth E. Jansen         enddo
177*10167291SKenneth E. Jansen
178*10167291SKenneth E. Jansen       enddo  ! end of loop over Gaussian points
179*10167291SKenneth E. Jansen
180*10167291SKenneth E. Jansen       do n=1,nshl
181*10167291SKenneth E. Jansen          lpmass(:,n)=lpmass(:,n)*volum(:)/alph2(:)
182*10167291SKenneth E. Jansen       enddo
183*10167291SKenneth E. Jansen
184*10167291SKenneth E. Jansen       call local(vortIntG,vortIntL,ien,4,'scatter ')
185*10167291SKenneth E. Jansen       call local(lpmassG,lpmass,ien,1,'scatter ')
186*10167291SKenneth E. Jansen
187*10167291SKenneth E. Jansen       return
188*10167291SKenneth E. Jansen       end
189*10167291SKenneth E. Jansen
190*10167291SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
191*10167291SKenneth E. Jansen
192*10167291SKenneth E. Jansen       subroutine PRcalcDuct  (y)
193*10167291SKenneth E. Jansen
194*10167291SKenneth E. Jansen        include "common.h"
195*10167291SKenneth E. Jansen        include "mpif.h"
196*10167291SKenneth E. Jansen
197*10167291SKenneth E. Jansen       real*8 y(nshg,ndof)
198*10167291SKenneth E. Jansen       real*8 Mach(nshg),PresRec(nshg),PresCoeff(nshg),velocity(nshg,3)
199*10167291SKenneth E. Jansen       real*8 Ptotal_contra, Pstatic_throat
200*10167291SKenneth E. Jansen       open(911,file='PresConst.inp')
201*10167291SKenneth E. Jansen       read(911,*) Ptotal_contra
202*10167291SKenneth E. Jansen       read(911,*) Pstatic_throat
203*10167291SKenneth E. Jansen       close(911)
204*10167291SKenneth E. Jansen       write(*,*)'Ptotal_contra=',Ptotal_contra
205*10167291SKenneth E. Jansen       write(*,*)'Pstatic_throat=',Pstatic_throat
206*10167291SKenneth E. Jansenc in y the variables are u v w p T
207*10167291SKenneth E. Jansen       Mach(:)=sqrt(y(:,1)**2+y(:,2)**2+y(:,3)**2)/sqrt(1.4*287*y(:,5))
208*10167291SKenneth E. Jansen       PresRec(:)=y(:,4)*(1+0.2*Mach(:)**2)**3.5/Ptotal_contra
209*10167291SKenneth E. Jansen       PresCoeff(:)=(y(:,4)-Pstatic_throat)/(Ptotal_contra-Pstatic_throat)
210*10167291SKenneth E. Jansen       velocity(:,1:3)=y(:,1:3)
211*10167291SKenneth E. Jansen       write(*,*)'writing Mach, PR and Cp'
212*10167291SKenneth E. Jansen       call write_field(myrank,'a'//char(0),'M'//char(0),1,Mach,
213*10167291SKenneth E. Jansen     &                         'd'//char(0),nshg,1,lstep)
214*10167291SKenneth E. Jansen       call write_field(myrank,'a'//char(0),'PR'//char(0),2,PresRec,
215*10167291SKenneth E. Jansen     &                         'd'//char(0),nshg,1,lstep)
216*10167291SKenneth E. Jansen       call write_field(myrank,'a'//char(0),'Cp'//char(0),2,PresCoeff,
217*10167291SKenneth E. Jansen     &                         'd'//char(0),nshg,1,lstep)
218*10167291SKenneth E. Jansen       call write_field(myrank,'a'//char(0),'V'//char(0),1,velocity,
219*10167291SKenneth E. Jansen     &                         'd'//char(0),nshg,3,lstep)
220*10167291SKenneth E. Jansen      end
221