1*59599516SKenneth E. Jansen subroutine e3source (ri, rmi, rlyi, 2*59599516SKenneth E. Jansen & rho, u1, u2, 3*59599516SKenneth E. Jansen & u3, pres, sforce, 4*59599516SKenneth E. Jansen & dui, dxidx, ytargetl, 5*59599516SKenneth E. Jansen & xl, shpfun, bcool) 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 8*59599516SKenneth E. Jansenc 9*59599516SKenneth E. Jansenc This routine calculates the contribution of the bodyforce and surface 10*59599516SKenneth E. Jansenc tension force operator to the RHS vector and LHS tangent matrix. The 11*59599516SKenneth E. Jansenc temporary results are put in ri. 12*59599516SKenneth E. Jansenc 13*59599516SKenneth E. Jansenc u1 (npro) : x1-velocity component 14*59599516SKenneth E. Jansenc u2 (npro) : x2-velocity component 15*59599516SKenneth E. Jansenc u3 (npro) : x3-velocity component 16*59599516SKenneth E. Jansenc ri (npro,nflow*(nsd+1)) : partial residual 17*59599516SKenneth E. Jansenc rmi (npro,nflow*(nsd+1)) : partial modified residual 18*59599516SKenneth E. Jansenc rLyi (npro,nflow) : least-squares residual vector 19*59599516SKenneth E. Jansenc shape (npro,nshl) : element shape functions 20*59599516SKenneth E. Jansenc g1yti (npro) : grad-Sclr in direction 1 at intpt 21*59599516SKenneth E. Jansenc g2yti (npro) : grad-Sclr in direction 2 at intpt 22*59599516SKenneth E. Jansenc g3yti (npro) : grad-Sclr in direction 3 at intpt 23*59599516SKenneth E. Jansenc 24*59599516SKenneth E. Jansen use turbSA 25*59599516SKenneth E. Jansen use specialBC 26*59599516SKenneth E. Jansen include "common.h" 27*59599516SKenneth E. Jansenc 28*59599516SKenneth E. Jansen dimension ri(npro,nflow*(nsd+1)), rmi(npro,nflow*(nsd+1)), 29*59599516SKenneth E. Jansen & u1(npro), u2(npro), 30*59599516SKenneth E. Jansen & u3(npro), rho(npro), 31*59599516SKenneth E. Jansen & pres(npro), 32*59599516SKenneth E. Jansen & rLyi(npro,nflow), sforce(npro,3), 33*59599516SKenneth E. Jansen & shpfun(npro,nshl), 34*59599516SKenneth E. Jansen & xl(npro,nenl,3), xx(npro,3) 35*59599516SKenneth E. Jansen 36*59599516SKenneth E. Jansen real*8 ytargeti(npro,nflow), ytargetl(npro,nshl,nflow) 37*59599516SKenneth E. Jansen 38*59599516SKenneth E. Jansen real*8 src(npro,nflow), bcool(npro), 39*59599516SKenneth E. Jansen & dui(npro,nflow), duitarg(npro,nflow), 40*59599516SKenneth E. Jansen & dxidx( npro, nsd, nsd), xfind( npro ), delta(npro), rat 41*59599516SKenneth E. Jansenc 42*59599516SKenneth E. Jansenc......contribution of body force 43*59599516SKenneth E. Jansenc 44*59599516SKenneth E. Jansen bcool=zero 45*59599516SKenneth E. Jansen src=zero 46*59599516SKenneth E. Jansenc 47*59599516SKenneth E. Jansen 48*59599516SKenneth E. Jansen 49*59599516SKenneth E. Jansen if(matflg(5,1).eq.1) then ! usual case 50*59599516SKenneth E. Jansen src(:,1) = zero 51*59599516SKenneth E. Jansen src(:,2) = rho(:) * datmat(1,5,1) 52*59599516SKenneth E. Jansen src(:,3) = rho(:) * datmat(2,5,1) 53*59599516SKenneth E. Jansen src(:,4) = rho(:) * datmat(3,5,1) 54*59599516SKenneth E. Jansen src(:,5) = u1*src(:,2) + u2*src(:,3) + u3*src(:,4) 55*59599516SKenneth E. Jansen else if(matflg(5,1).eq.3) then ! user supplied white noise 56*59599516SKenneth E. Jansen 57*59599516SKenneth E. Jansen xsor = 18 58*59599516SKenneth E. Jansenc ampl = spamp(lstep+1) 59*59599516SKenneth E. Jansenc rat = Delt(1)/0.1 60*59599516SKenneth E. Jansen ampl = 0.002*exp(-(0.1248222*(lstep)-2.9957323)**2) 61*59599516SKenneth E. Jansenc if((myrank.eq.zero).and.(intp.eq.ngauss)) write(*,*) ampl 62*59599516SKenneth E. Jansen delta(:) = 0.5*sqrt(dxidx(:,1,1)*dxidx(:,1,1) ! 1/dx 63*59599516SKenneth E. Jansen . +dxidx(:,2,1)*dxidx(:,2,1) 64*59599516SKenneth E. Jansen . +dxidx(:,3,1)*dxidx(:,3,1)) 65*59599516SKenneth E. Jansen do i=1,npro 66*59599516SKenneth E. Jansen xfind(i) = (xsor-minval(xl(i,:,1))) 67*59599516SKenneth E. Jansen & *(maxval(xl(i,:,1))-xsor) 68*59599516SKenneth E. Jansen enddo 69*59599516SKenneth E. Jansen 70*59599516SKenneth E. Jansen where ( xfind .ge. 0. ) 71*59599516SKenneth E. Jansen src(:,2) = rho(:) * ampl * delta 72*59599516SKenneth E. Jansenc scaling by element size is removed not to mess up 73*59599516SKenneth E. Jansenc refinement studies 74*59599516SKenneth E. Jansenc src(:,2) = rho(:) * ampl 75*59599516SKenneth E. Jansen src(:,5) = u1*src(:,2) 76*59599516SKenneth E. Jansen endwhere 77*59599516SKenneth E. Jansen 78*59599516SKenneth E. Jansen else if(matflg(5,1).ge.4) then ! cool case (sponge outside of a 79*59599516SKenneth E. Jansen ! revolved box defined from zinSponge to 80*59599516SKenneth E. Jansen ! zoutSponge in axial extent and 0 81*59599516SKenneth E. Jansen ! to radSponge in radial extent for 82*59599516SKenneth E. Jansen ! all theta) 83*59599516SKenneth E. Jansen 84*59599516SKenneth E. Jansenc determine coordinates of quadrature pt 85*59599516SKenneth E. Jansen xx=zero 86*59599516SKenneth E. Jansen do n = 1,nenl 87*59599516SKenneth E. Jansen xx(:,1) = xx(:,1) + shpfun(:,n) * xl(:,n,1) 88*59599516SKenneth E. Jansen xx(:,2) = xx(:,2) + shpfun(:,n) * xl(:,n,2) 89*59599516SKenneth E. Jansen xx(:,3) = xx(:,3) + shpfun(:,n) * xl(:,n,3) 90*59599516SKenneth E. Jansen enddo 91*59599516SKenneth E. Jansen ytargeti=zero 92*59599516SKenneth E. Jansen do j=1,nflow 93*59599516SKenneth E. Jansen do n=1,nshl 94*59599516SKenneth E. Jansen ytargeti(:,j) = ytargeti(:,j) 95*59599516SKenneth E. Jansen & + shpfun(:,n)*ytargetl(:,n,j) 96*59599516SKenneth E. Jansen enddo 97*59599516SKenneth E. Jansen enddo 98*59599516SKenneth E. Jansen 99*59599516SKenneth E. Jansen 100*59599516SKenneth E. Jansenc we=3.0*29./682. 101*59599516SKenneth E. Jansen rsteep=3.0 102*59599516SKenneth E. Jansen src=zero 103*59599516SKenneth E. Jansen radsts=radSponge*radSponge 104*59599516SKenneth E. Jansen CoefRatioI2O = grthISponge/grthOSponge 105*59599516SKenneth E. Jansen do id=1,npro 106*59599516SKenneth E. Jansen radsqr=xx(id,2)**2+xx(id,1)**2 107*59599516SKenneth E. Jansen if(xx(id,3).lt. zinSponge) then ! map this into big outflow 108*59599516SKenneth E. Jansen ! sponge to keep logic 109*59599516SKenneth E. Jansen ! below simple 110*59599516SKenneth E. Jansen 111*59599516SKenneth E. Jansen xx(id,3)=(zinSponge-xx(id,3))*CoefRatioI2O 112*59599516SKenneth E. Jansen & + zoutSponge 113*59599516SKenneth E. Jansen ! 114*59599516SKenneth E. Jansen ! CoefRatioI2O is the ratio of the inlet quadratic coefficient to the 115*59599516SKenneth E. Jansen ! outlet quadratic coeficient (basically how much faster sponge 116*59599516SKenneth E. Jansen ! coefficient grows in inlet region relative to outlet region) 117*59599516SKenneth E. Jansen ! 118*59599516SKenneth E. Jansen endif 119*59599516SKenneth E. Jansen if((xx(id,3).gt.zoutSponge).or.(radsqr.gt.radsts)) then 120*59599516SKenneth E. Jansen rad=sqrt(radsqr) 121*59599516SKenneth E. Jansen radc=max(rad,radSponge) 122*59599516SKenneth E. Jansen zval=max(xx(id,3),zoutSponge) 123*59599516SKenneth E. Jansen bcool(id)=grthOSponge*((zval-zoutSponge)**2 124*59599516SKenneth E. Jansen & +(radc-radSponge)**2) 125*59599516SKenneth E. Jansen bcool(id)=min(bcool(id),betamax) 126*59599516SKenneth E. Jansenc Determine the resulting density and energies 127*59599516SKenneth E. Jansen den = ytargeti(id,1) / (Rgas * ytargeti(id,5)) 128*59599516SKenneth E. Jansen ei = ytargeti(id,5) * ( Rgas / gamma1 ) 129*59599516SKenneth E. Jansen rk = pt5 * ( ytargeti(id,2)**2+ytargeti(id,3)**2 130*59599516SKenneth E. Jansen & +ytargeti(id,4)**2 ) 131*59599516SKenneth E. Jansenc Determine the resulting conservation variables 132*59599516SKenneth E. Jansen duitarg(id,1) = den 133*59599516SKenneth E. Jansen duitarg(id,2) = den * ytargeti(id,2) 134*59599516SKenneth E. Jansen duitarg(id,3) = den * ytargeti(id,3) 135*59599516SKenneth E. Jansen duitarg(id,4) = den * ytargeti(id,4) 136*59599516SKenneth E. Jansen duitarg(id,5) = den * (ei + rk) 137*59599516SKenneth E. Jansenc Apply the sponge 138*59599516SKenneth E. Jansen if(spongeContinuity.eq.1) 139*59599516SKenneth E. Jansen & src(id,1) = -bcool(id)*(dui(id,1) - duitarg(id,1)) 140*59599516SKenneth E. Jansen if(spongeMomentum1.eq.1) 141*59599516SKenneth E. Jansen & src(id,2) = -bcool(id)*(dui(id,2) - duitarg(id,2)) 142*59599516SKenneth E. Jansen if(spongeMomentum2.eq.1) 143*59599516SKenneth E. Jansen & src(id,3) = -bcool(id)*(dui(id,3) - duitarg(id,3)) 144*59599516SKenneth E. Jansen if(spongeMomentum3.eq.1) 145*59599516SKenneth E. Jansen & src(id,4) = -bcool(id)*(dui(id,4) - duitarg(id,4)) 146*59599516SKenneth E. Jansen if(spongeEnergy.eq.1) 147*59599516SKenneth E. Jansen & src(id,5) = -bcool(id)*(dui(id,5) - duitarg(id,5)) 148*59599516SKenneth E. Jansen endif 149*59599516SKenneth E. Jansen enddo 150*59599516SKenneth E. Jansen else 151*59599516SKenneth E. Jansen if(isurf .ne. 1) then 152*59599516SKenneth E. Jansen write(*,*) 'only vector (1) and cooling (4) implemented' 153*59599516SKenneth E. Jansen stop 154*59599516SKenneth E. Jansen endif 155*59599516SKenneth E. Jansen endif 156*59599516SKenneth E. Jansen 157*59599516SKenneth E. Jansen if (isurf .eq. 1) then ! add the surface tension force 158*59599516SKenneth E. Jansen src(:,2) = src(:,2) + rho(:)*sforce(:,1) 159*59599516SKenneth E. Jansen src(:,3) = src(:,3) + rho(:)*sforce(:,2) 160*59599516SKenneth E. Jansen src(:,4) = src(:,4) + rho(:)*sforce(:,3) 161*59599516SKenneth E. Jansen src(:,5) = src(:,5) + (u1*sforce(:,1)+u2*sforce(:,2) 162*59599516SKenneth E. Jansen & + u3*sforce(:,3))*rho(:) 163*59599516SKenneth E. Jansen endif 164*59599516SKenneth E. Jansen 165*59599516SKenneth E. Jansenc 166*59599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 167*59599516SKenneth E. Jansenc 168*59599516SKenneth E. Jansen if (ivart.gt.1) then 169*59599516SKenneth E. Jansen rLyi(:,1) = rLyi(:,1) - src(:,1) 170*59599516SKenneth E. Jansen rLyi(:,2) = rLyi(:,2) - src(:,2) 171*59599516SKenneth E. Jansen rLyi(:,3) = rLyi(:,3) - src(:,3) 172*59599516SKenneth E. Jansen rLyi(:,4) = rLyi(:,4) - src(:,4) 173*59599516SKenneth E. Jansen rLyi(:,5) = rLyi(:,5) - src(:,5) 174*59599516SKenneth E. Jansen endif 175*59599516SKenneth E. Jansen 176*59599516SKenneth E. Jansen if ((ires .eq. 1) .or. (ires .eq. 3)) then ! we need ri built 177*59599516SKenneth E. Jansen ri (:,16) = ri (:,16) - src(:,1) 178*59599516SKenneth E. Jansen ri (:,17) = ri (:,17) - src(:,2) 179*59599516SKenneth E. Jansen ri (:,18) = ri (:,18) - src(:,3) 180*59599516SKenneth E. Jansen ri (:,19) = ri (:,19) - src(:,4) 181*59599516SKenneth E. Jansen ri (:,20) = ri (:,20) - src(:,5) 182*59599516SKenneth E. Jansen 183*59599516SKenneth E. Jansen endif 184*59599516SKenneth E. Jansen 185*59599516SKenneth E. Jansen if ((ires.eq.2) .or. (ires.eq.3)) then ! we need rmi built 186*59599516SKenneth E. Jansen rmi (:,16) = rmi (:,16) - src(:,1) 187*59599516SKenneth E. Jansen rmi (:,17) = rmi (:,17) - src(:,2) 188*59599516SKenneth E. Jansen rmi (:,18) = rmi (:,18) - src(:,3) 189*59599516SKenneth E. Jansen rmi (:,19) = rmi (:,19) - src(:,4) 190*59599516SKenneth E. Jansen rmi (:,20) = rmi (:,20) - src(:,5) 191*59599516SKenneth E. Jansen endif 192*59599516SKenneth E. Jansenc 193*59599516SKenneth E. Jansen return 194*59599516SKenneth E. Jansen end 195*59599516SKenneth E. Jansenc 196*59599516SKenneth E. Jansenc 197*59599516SKenneth E. Jansenc 198*59599516SKenneth E. Jansen subroutine e3sourceSclr(Sclr, rho, rmu, 199*59599516SKenneth E. Jansen & dist2w, vort, con, 200*59599516SKenneth E. Jansen & g1yti, g2yti, g3yti, 201*59599516SKenneth E. Jansen & rti, rLyti, srcp, 202*59599516SKenneth E. Jansen & ycl, shape, u1, 203*59599516SKenneth E. Jansen & u2, u3, xl, elDwl) 204*59599516SKenneth E. Jansenc 205*59599516SKenneth E. Jansenc--------------------------------------------------------------------- 206*59599516SKenneth E. Jansenc 207*59599516SKenneth E. Jansenc This routine calculates the source term indicated in the Spalart- 208*59599516SKenneth E. Jansenc Allmaras eddy viscosity model. After term is stored in rti(:,4), 209*59599516SKenneth E. Jansenc for later use by e3wmltSclr, and in rLyti(:) for later use by e3lsSclr. 210*59599516SKenneth E. Jansenc 211*59599516SKenneth E. Jansenc input: 212*59599516SKenneth E. Jansenc Sclr (npro) : working turbulence variable 213*59599516SKenneth E. Jansenc rho (npro) : density at intpt 214*59599516SKenneth E. Jansenc rmu (npro) : molecular viscosity 215*59599516SKenneth E. Jansenc dist2w (npro) : distance from intpt to the nearest wall 216*59599516SKenneth E. Jansenc vort (npro) : magnitude of the vorticity 217*59599516SKenneth E. Jansenc con (npro) : conductivity 218*59599516SKenneth E. Jansenc g1yti (npro) : grad-Sclr in direction 1 219*59599516SKenneth E. Jansenc g2yti (npro) : grad-Sclr in direction 2 220*59599516SKenneth E. Jansenc g3yti (npro) : grad-Sclr in direction 3 221*59599516SKenneth E. Jansenc 222*59599516SKenneth E. Jansenc output: 223*59599516SKenneth E. Jansenc rti (npro,4) : components of residual at intpt 224*59599516SKenneth E. Jansenc rLyti (npro) : GLS stabilization 225*59599516SKenneth E. Jansenc 226*59599516SKenneth E. Jansenc--------------------------------------------------------------------- 227*59599516SKenneth E. Jansenc 228*59599516SKenneth E. Jansen use turbSA 229*59599516SKenneth E. Jansen include "common.h" 230*59599516SKenneth E. Jansenc 231*59599516SKenneth E. Jansen dimension Sclr (npro), ycl(npro,nshl,ndof), 232*59599516SKenneth E. Jansen & dist2w (npro), shape(npro,nshl), 233*59599516SKenneth E. Jansen & vort (npro), rho (npro), 234*59599516SKenneth E. Jansen & rmu (npro), con (npro), 235*59599516SKenneth E. Jansen & g1yti (npro), g2yti (npro), 236*59599516SKenneth E. Jansen & g3yti (npro), u1 (npro), 237*59599516SKenneth E. Jansen & u2 (npro), u3 (npro) 238*59599516SKenneth E. Jansenc 239*59599516SKenneth E. Jansen dimension rti (npro,4), rLyti (npro) 240*59599516SKenneth E. Jansenc 241*59599516SKenneth E. Jansen dimension ft1 (npro), 242*59599516SKenneth E. Jansenc unfix later -- pieces used in acusim: 243*59599516SKenneth E. Jansen & srcrat (npro), vdgn (npro), 244*59599516SKenneth E. Jansenc & term1 (npro), term2 (npro), 245*59599516SKenneth E. Jansenc & term3 (npro), 246*59599516SKenneth E. Jansenc 247*59599516SKenneth E. Jansen & chi (npro), fv1 (npro), 248*59599516SKenneth E. Jansen & fv2 (npro), Stilde (npro), 249*59599516SKenneth E. Jansen & r (npro), g (npro), 250*59599516SKenneth E. Jansen & fw (npro), ft2 (npro), 251*59599516SKenneth E. Jansen & fv1p (npro), fv2p (npro), 252*59599516SKenneth E. Jansen & stp (npro), rp (npro), 253*59599516SKenneth E. Jansen & gp (npro), fwp (npro), 254*59599516SKenneth E. Jansen & bf (npro), srcp (npro), 255*59599516SKenneth E. Jansen & gp6 (npro), tmp (npro), 256*59599516SKenneth E. Jansen & tmp1 (npro), fwog (npro) 257*59599516SKenneth E. Jansen real*8 elDwl(npro) ! local quadrature point DES dvar 258*59599516SKenneth E. Jansen real*8 sclrm(npro) ! modified for non-negativity 259*59599516SKenneth E. Jansenc... for levelset 260*59599516SKenneth E. Jansen real*8 sign_levelset(npro), sclr_ls(npro), mytmp(npro), 261*59599516SKenneth E. Jansen & xl(npro,nenl,nsd) 262*59599516SKenneth E. Jansen 263*59599516SKenneth E. Jansenc 264*59599516SKenneth E. Jansen if(iRANS.lt.0) then ! spalart almaras model 265*59599516SKenneth E. Jansen sclrm=max(rmu/100.0,Sclr) 266*59599516SKenneth E. Jansen if(iles.lt.0) then 267*59599516SKenneth E. Jansen do i=1,npro 268*59599516SKenneth E. Jansen dx=maxval(xl(i,:,1))-minval(xl(i,:,1)) 269*59599516SKenneth E. Jansen dy=maxval(xl(i,:,2))-minval(xl(i,:,2)) 270*59599516SKenneth E. Jansen dz=maxval(xl(i,:,3))-minval(xl(i,:,3)) 271*59599516SKenneth E. Jansen dmax=max(dx,max(dy,dz)) 272*59599516SKenneth E. Jansenc.... limit edge length for DES based on SA model 273*59599516SKenneth E. Jansenc.... (only useful when DES_SA_hmin is greater than 0.0 as element lengths are positive) 274*59599516SKenneth E. Jansen dmax=max(DES_SA_hmin,dmax) 275*59599516SKenneth E. Jansen dmax=0.65d0*dmax 276*59599516SKenneth E. Jansen dist2w(i)=min(dmax,dist2w(i)) 277*59599516SKenneth E. Jansen enddo 278*59599516SKenneth E. Jansen endif 279*59599516SKenneth E. Jansen 280*59599516SKenneth E. Jansen elDwl(:)=elDwl(:)+dist2w(:) 281*59599516SKenneth E. Jansenc 282*59599516SKenneth E. Jansenc determine chi 283*59599516SKenneth E. Jansen chi = rho*sclrm/rmu 284*59599516SKenneth E. Jansenc determine f_v1 285*59599516SKenneth E. Jansen fv1 = chi**3/(chi**3+saCv1**3) 286*59599516SKenneth E. Jansenc determine f_v2 287*59599516SKenneth E. Jansen fv2 = one - chi/(one+chi*fv1) 288*59599516SKenneth E. Jansenc determine Stilde 289*59599516SKenneth E. Jansen Stilde = vort + sclrm*fv2/(saKappa*dist2w)**2!unfix 290*59599516SKenneth E. Jansenc determine r 291*59599516SKenneth E. Jansen where(Stilde(:).ne.zero) 292*59599516SKenneth E. Jansen r(:) = sclrm(:)/Stilde(:)/(saKappa*dist2w(:))**2 293*59599516SKenneth E. Jansen elsewhere 294*59599516SKenneth E. Jansen r(:) = 1.0d32 295*59599516SKenneth E. Jansen endwhere 296*59599516SKenneth E. Jansenc determine g 297*59599516SKenneth E. Jansen saCw3l=saCw3 298*59599516SKenneth E. Jansen g = r + saCw2*(r**6-r) 299*59599516SKenneth E. Jansen sixth = 1.0/6.0 300*59599516SKenneth E. Jansenc gp = rp * (tmp + 5 * saCw2 * rP5) 301*59599516SKenneth E. Jansenc 302*59599516SKenneth E. Jansenc gP6 = (g * g * g) ** 2 303*59599516SKenneth E. Jansenc tmp = 1 / (gP6 + (saCw3*saCw3*saCw3)**2) 304*59599516SKenneth E. Jansenc tmp1 = ( (1 + (saCw3*saCw3*saCw3)**2) * tmp ) ** sixth 305*59599516SKenneth E. Jansenc fw = g * tmp1 306*59599516SKenneth E. Jansenc fwp = gp * tmp1 * (saCw3*saCw3*saCw3)**2 * tmp 307*59599516SKenneth E. Jansenc determine f_w and f_w/g 308*59599516SKenneth E. Jansen fwog = ((one+saCw3**6)/(g**6+saCw3**6))**sixth 309*59599516SKenneth E. Jansen fw = g*fwog 310*59599516SKenneth E. Jansenc determine f_t2 311*59599516SKenneth E. Jansenc ft2 = ct3*exp(-ct4*chi**2) 312*59599516SKenneth E. Jansen ft2 = zero 313*59599516SKenneth E. Jansen 314*59599516SKenneth E. Jansenc srcrat=saCb1*(one-ft2)*Stilde*sclrm 315*59599516SKenneth E. Jansenc & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 316*59599516SKenneth E. Jansenc srcrat=srcrat/sclrm 317*59599516SKenneth E. Jansen 318*59599516SKenneth E. Jansen srcrat=saCb1*(one-ft2)*Stilde 319*59599516SKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 320*59599516SKenneth E. Jansen 321*59599516SKenneth E. Jansenc 322*59599516SKenneth E. Jansenc term1=saCb1*(one-ft2)*Stilde*sclrm 323*59599516SKenneth E. Jansenc term2=saCb2*saSigmaInv*(g1yti**2+g2yti**2+g3yti**2) 324*59599516SKenneth E. Jansenc term3=-(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 325*59599516SKenneth E. Jansenc determine d()/d(sclrm) 326*59599516SKenneth E. Jansen fv1p = 3*(saCv1**3)*(chi**2)*rho 327*59599516SKenneth E. Jansen fv1p = fv1p/(rmu*(chi**3+saCv1**3)**2) 328*59599516SKenneth E. Jansen fv2p = (chi**2)*fv1p-(one/rmu) 329*59599516SKenneth E. Jansen fv2p = fv2p/(one+chi*fv1)**2 330*59599516SKenneth E. Jansen stp = fv2 + sclrm*fv2p 331*59599516SKenneth E. Jansen stp = stp/(saKappa*dist2w)**2 332*59599516SKenneth E. Jansen where(Stilde(:).ne.zero) 333*59599516SKenneth E. Jansen rp(:) = Stilde(:) - sclrm(:)*stp(:) 334*59599516SKenneth E. Jansen rp(:) = rp(:)/(saKappa*dist2w(:)*Stilde(:))**2 335*59599516SKenneth E. Jansen elsewhere 336*59599516SKenneth E. Jansen rp(:) = 1.0d32 337*59599516SKenneth E. Jansen endwhere 338*59599516SKenneth E. Jansen gp = one+saCw2*(6*r**5 - one) 339*59599516SKenneth E. Jansen gp = gp*rp 340*59599516SKenneth E. Jansen fwp = (saCw3**6)*fwog 341*59599516SKenneth E. Jansen fwp = fwp*gp/(g**6+saCw3**6) 342*59599516SKenneth E. Jansenc determine source term 343*59599516SKenneth E. Jansen bf = saCb2*saSigmaInv*(g1yti**2+g2yti**2+g3yti**2) 344*59599516SKenneth E. Jansen & +saCb1*(one-ft2)*Stilde*sclrm 345*59599516SKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 346*59599516SKenneth E. Jansen bf = bf * rho 347*59599516SKenneth E. Jansenc determine d(source)/d(sclrm) 348*59599516SKenneth E. Jansen srcp = rho*saCb1*(sclrm*stp+Stilde) 349*59599516SKenneth E. Jansen & -rho*saCw1*(fwp*sclrm**2 + 2*sclrm*fw)/dist2w**2 350*59599516SKenneth E. Jansen do i=1, npro 351*59599516SKenneth E. Jansen if(srcp(i).le.zero .and. srcp(i).le.srcrat(i)) then 352*59599516SKenneth E. Jansen srcp(i)=srcp(i) 353*59599516SKenneth E. Jansen else if(srcrat(i).lt.zero) then 354*59599516SKenneth E. Jansen srcp(i)=srcrat(i) 355*59599516SKenneth E. Jansen else 356*59599516SKenneth E. Jansen srcp(i)=zero 357*59599516SKenneth E. Jansen endif 358*59599516SKenneth E. Jansen enddo 359*59599516SKenneth E. Jansenc 360*59599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 361*59599516SKenneth E. Jansenc 362*59599516SKenneth E. Jansenc if ((ires .eq. 1) .or. (ires .eq. 3)) then 363*59599516SKenneth E. Jansen rti (:,4) = rti (:,4) - bf(:) 364*59599516SKenneth E. Jansenc endif !ires 365*59599516SKenneth E. Jansen 366*59599516SKenneth E. Jansenc rmti (:,4) = rmti (:,4) - bf(:) 367*59599516SKenneth E. Jansen rLyti(:) = rLyti(:) - bf(:) 368*59599516SKenneth E. Jansenc 369*59599516SKenneth E. Jansen elseif (iLSet.ne.0) then 370*59599516SKenneth E. Jansen if (isclr.eq.1) then 371*59599516SKenneth E. Jansen srcp = zero 372*59599516SKenneth E. Jansen 373*59599516SKenneth E. Jansen elseif (isclr.eq.2) then !we are redistancing level-sets 374*59599516SKenneth E. Jansen 375*59599516SKenneth E. Jansen sclr_ls = zero !zero out temp variable 376*59599516SKenneth E. Jansen 377*59599516SKenneth E. Jansen do ii=1,npro 378*59599516SKenneth E. Jansen 379*59599516SKenneth E. Jansen do jj = 1, nshl ! first find the value of levelset at point ii 380*59599516SKenneth E. Jansen 381*59599516SKenneth E. Jansen sclr_ls(ii) = sclr_ls(ii) 382*59599516SKenneth E. Jansen & + shape(ii,jj) * ycl(ii,jj,6) 383*59599516SKenneth E. Jansen 384*59599516SKenneth E. Jansen enddo 385*59599516SKenneth E. Jansen 386*59599516SKenneth E. Jansen if (sclr_ls(ii) .lt. - epsilon_ls)then 387*59599516SKenneth E. Jansen 388*59599516SKenneth E. Jansen sign_levelset(ii) = - one 389*59599516SKenneth E. Jansen 390*59599516SKenneth E. Jansen elseif (abs(sclr_ls(ii)) .le. epsilon_ls)then 391*59599516SKenneth E. Jansenc sign_levelset(ii) = zero 392*59599516SKenneth E. Jansenc 393*59599516SKenneth E. Jansen sign_levelset(ii) =sclr_ls(ii)/epsilon_ls 394*59599516SKenneth E. Jansen & + sin(pi*sclr_ls(ii)/epsilon_ls)/pi 395*59599516SKenneth E. Jansen 396*59599516SKenneth E. Jansen 397*59599516SKenneth E. Jansen elseif (sclr_ls(ii) .gt. epsilon_ls) then 398*59599516SKenneth E. Jansen 399*59599516SKenneth E. Jansen sign_levelset(ii) = one 400*59599516SKenneth E. Jansen 401*59599516SKenneth E. Jansen endif 402*59599516SKenneth E. Jansen srcp(ii) = sign_levelset(ii) 403*59599516SKenneth E. Jansen 404*59599516SKenneth E. Jansen enddo 405*59599516SKenneth E. Jansenc 406*59599516SKenneth E. Jansenc ad The redistancing equation can be written in the following form 407*59599516SKenneth E. Jansenc ad 408*59599516SKenneth E. Jansenc ad d_{,t} + sign(phi)*( d_{,i}/|d_{,i}| )* d_{,i} = sign(phi) 409*59599516SKenneth E. Jansenc ad 410*59599516SKenneth E. Jansenc ad This is rewritten in the form 411*59599516SKenneth E. Jansenc ad 412*59599516SKenneth E. Jansenc ad d_{,t} + u * d_{,i} = sign(phi) 413*59599516SKenneth E. Jansenc ad 414*59599516SKenneth E. Jansen 415*59599516SKenneth E. Jansenc$$$ CAD For the redistancing equation the "pseudo velocity" term is 416*59599516SKenneth E. Jansenc$$$ CAD calculated as follows 417*59599516SKenneth E. Jansen 418*59599516SKenneth E. Jansen 419*59599516SKenneth E. Jansen 420*59599516SKenneth E. Jansen mytmp = srcp(:) / sqrt( g1yti(:) * g1yti(:) 421*59599516SKenneth E. Jansen & + g2yti(:) * g2yti(:) 422*59599516SKenneth E. Jansen & + g3yti(:) * g3yti(:) ) 423*59599516SKenneth E. Jansen 424*59599516SKenneth E. Jansen u1 = mytmp(:) * g1yti(:) 425*59599516SKenneth E. Jansen u2 = mytmp(:) * g2yti(:) 426*59599516SKenneth E. Jansen u3 = mytmp(:) * g3yti(:) 427*59599516SKenneth E. Jansenc 428*59599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 429*59599516SKenneth E. Jansenc 430*59599516SKenneth E. Jansenc if ((ires .eq. 1) .or. (ires .eq. 3)) then 431*59599516SKenneth E. Jansen rti (:,4) = rti (:,4) - srcp(:) 432*59599516SKenneth E. Jansenc endif !ires 433*59599516SKenneth E. Jansen 434*59599516SKenneth E. Jansenc rmti (:,4) = rmti (:,4) - srcp(:) 435*59599516SKenneth E. Jansen rLyti(:) = rLyti(:) - srcp(:) 436*59599516SKenneth E. Jansenc 437*59599516SKenneth E. Jansen endif ! close of scalar 2 of level set 438*59599516SKenneth E. Jansen 439*59599516SKenneth E. Jansen else ! NOT turbulence and NOT level set so this is a simple 440*59599516SKenneth E. Jansen ! scalar. If your scalar equation has a source term 441*59599516SKenneth E. Jansen ! then add your own like the above but leave an unforced case 442*59599516SKenneth E. Jansen ! as an option like you see here 443*59599516SKenneth E. Jansen 444*59599516SKenneth E. Jansen srcp = zero 445*59599516SKenneth E. Jansen endif 446*59599516SKenneth E. Jansen 447*59599516SKenneth E. Jansen 448*59599516SKenneth E. Jansenc 449*59599516SKenneth E. Jansenc.... Return and end 450*59599516SKenneth E. Jansenc 451*59599516SKenneth E. Jansen return 452*59599516SKenneth E. Jansen end 453*59599516SKenneth E. Jansen 454