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