159599516SKenneth E. Jansen subroutine e3source (ri, rmi, rlyi, 259599516SKenneth E. Jansen & rho, u1, u2, 359599516SKenneth E. Jansen & u3, pres, sforce, 459599516SKenneth E. Jansen & dui, dxidx, ytargetl, 559599516SKenneth E. Jansen & xl, shpfun, bcool) 659599516SKenneth E. Jansenc 759599516SKenneth E. Jansenc---------------------------------------------------------------------- 859599516SKenneth E. Jansenc 959599516SKenneth E. Jansenc This routine calculates the contribution of the bodyforce and surface 1059599516SKenneth E. Jansenc tension force operator to the RHS vector and LHS tangent matrix. The 1159599516SKenneth E. Jansenc temporary results are put in ri. 1259599516SKenneth E. Jansenc 1359599516SKenneth E. Jansenc u1 (npro) : x1-velocity component 1459599516SKenneth E. Jansenc u2 (npro) : x2-velocity component 1559599516SKenneth E. Jansenc u3 (npro) : x3-velocity component 1659599516SKenneth E. Jansenc ri (npro,nflow*(nsd+1)) : partial residual 1759599516SKenneth E. Jansenc rmi (npro,nflow*(nsd+1)) : partial modified residual 1859599516SKenneth E. Jansenc rLyi (npro,nflow) : least-squares residual vector 1959599516SKenneth E. Jansenc shape (npro,nshl) : element shape functions 2059599516SKenneth E. Jansenc g1yti (npro) : grad-Sclr in direction 1 at intpt 2159599516SKenneth E. Jansenc g2yti (npro) : grad-Sclr in direction 2 at intpt 2259599516SKenneth E. Jansenc g3yti (npro) : grad-Sclr in direction 3 at intpt 2359599516SKenneth E. Jansenc 2459599516SKenneth E. Jansen use turbSA 2559599516SKenneth E. Jansen use specialBC 2659599516SKenneth E. Jansen include "common.h" 2759599516SKenneth E. Jansenc 2859599516SKenneth E. Jansen dimension ri(npro,nflow*(nsd+1)), rmi(npro,nflow*(nsd+1)), 2959599516SKenneth E. Jansen & u1(npro), u2(npro), 3059599516SKenneth E. Jansen & u3(npro), rho(npro), 3159599516SKenneth E. Jansen & pres(npro), 3259599516SKenneth E. Jansen & rLyi(npro,nflow), sforce(npro,3), 3359599516SKenneth E. Jansen & shpfun(npro,nshl), 3459599516SKenneth E. Jansen & xl(npro,nenl,3), xx(npro,3) 3559599516SKenneth E. Jansen 3659599516SKenneth E. Jansen real*8 ytargeti(npro,nflow), ytargetl(npro,nshl,nflow) 3759599516SKenneth E. Jansen 3859599516SKenneth E. Jansen real*8 src(npro,nflow), bcool(npro), 3959599516SKenneth E. Jansen & dui(npro,nflow), duitarg(npro,nflow), 4059599516SKenneth E. Jansen & dxidx( npro, nsd, nsd), xfind( npro ), delta(npro), rat 4159599516SKenneth E. Jansenc 4259599516SKenneth E. Jansenc......contribution of body force 4359599516SKenneth E. Jansenc 4459599516SKenneth E. Jansen bcool=zero 4559599516SKenneth E. Jansen src=zero 4659599516SKenneth E. Jansenc 4759599516SKenneth E. Jansen 4859599516SKenneth E. Jansen 4959599516SKenneth E. Jansen if(matflg(5,1).eq.1) then ! usual case 5059599516SKenneth E. Jansen src(:,1) = zero 5159599516SKenneth E. Jansen src(:,2) = rho(:) * datmat(1,5,1) 5259599516SKenneth E. Jansen src(:,3) = rho(:) * datmat(2,5,1) 5359599516SKenneth E. Jansen src(:,4) = rho(:) * datmat(3,5,1) 5459599516SKenneth E. Jansen src(:,5) = u1*src(:,2) + u2*src(:,3) + u3*src(:,4) 5559599516SKenneth E. Jansen else if(matflg(5,1).eq.3) then ! user supplied white noise 5659599516SKenneth E. Jansen 5759599516SKenneth E. Jansen xsor = 18 5859599516SKenneth E. Jansenc ampl = spamp(lstep+1) 5959599516SKenneth E. Jansenc rat = Delt(1)/0.1 6059599516SKenneth E. Jansen ampl = 0.002*exp(-(0.1248222*(lstep)-2.9957323)**2) 6159599516SKenneth E. Jansenc if((myrank.eq.zero).and.(intp.eq.ngauss)) write(*,*) ampl 6259599516SKenneth E. Jansen delta(:) = 0.5*sqrt(dxidx(:,1,1)*dxidx(:,1,1) ! 1/dx 6359599516SKenneth E. Jansen . +dxidx(:,2,1)*dxidx(:,2,1) 6459599516SKenneth E. Jansen . +dxidx(:,3,1)*dxidx(:,3,1)) 6559599516SKenneth E. Jansen do i=1,npro 6659599516SKenneth E. Jansen xfind(i) = (xsor-minval(xl(i,:,1))) 6759599516SKenneth E. Jansen & *(maxval(xl(i,:,1))-xsor) 6859599516SKenneth E. Jansen enddo 6959599516SKenneth E. Jansen 7059599516SKenneth E. Jansen where ( xfind .ge. 0. ) 7159599516SKenneth E. Jansen src(:,2) = rho(:) * ampl * delta 7259599516SKenneth E. Jansenc scaling by element size is removed not to mess up 7359599516SKenneth E. Jansenc refinement studies 7459599516SKenneth E. Jansenc src(:,2) = rho(:) * ampl 7559599516SKenneth E. Jansen src(:,5) = u1*src(:,2) 7659599516SKenneth E. Jansen endwhere 7759599516SKenneth E. Jansen 7859599516SKenneth E. Jansen else if(matflg(5,1).ge.4) then ! cool case (sponge outside of a 7959599516SKenneth E. Jansen ! revolved box defined from zinSponge to 8059599516SKenneth E. Jansen ! zoutSponge in axial extent and 0 8159599516SKenneth E. Jansen ! to radSponge in radial extent for 8259599516SKenneth E. Jansen ! all theta) 8359599516SKenneth E. Jansen 8459599516SKenneth E. Jansenc determine coordinates of quadrature pt 8559599516SKenneth E. Jansen xx=zero 8659599516SKenneth E. Jansen do n = 1,nenl 8759599516SKenneth E. Jansen xx(:,1) = xx(:,1) + shpfun(:,n) * xl(:,n,1) 8859599516SKenneth E. Jansen xx(:,2) = xx(:,2) + shpfun(:,n) * xl(:,n,2) 8959599516SKenneth E. Jansen xx(:,3) = xx(:,3) + shpfun(:,n) * xl(:,n,3) 9059599516SKenneth E. Jansen enddo 9159599516SKenneth E. Jansen ytargeti=zero 9259599516SKenneth E. Jansen do j=1,nflow 9359599516SKenneth E. Jansen do n=1,nshl 9459599516SKenneth E. Jansen ytargeti(:,j) = ytargeti(:,j) 9559599516SKenneth E. Jansen & + shpfun(:,n)*ytargetl(:,n,j) 9659599516SKenneth E. Jansen enddo 9759599516SKenneth E. Jansen enddo 98*38a361e8SKenneth E. Jansen if (1.eq.1) then ! bringing in x BL sponge 99*38a361e8SKenneth E. Jansen do id=1,npro 100*38a361e8SKenneth E. Jansen if((xx(id,1).gt.zoutSponge)) then 101*38a361e8SKenneth E. Jansen bcool(id)=grthOSponge*(xx(id,1)-zoutSponge)**2 102*38a361e8SKenneth E. Jansen bcool(id)=min(bcool(id),betamax) 103*38a361e8SKenneth E. Jansenc Determine the resulting density and energies 104*38a361e8SKenneth E. Jansen den = ytargeti(id,1) / (Rgas * ytargeti(id,5)) 105*38a361e8SKenneth E. Jansen ei = ytargeti(id,5) * ( Rgas / gamma1 ) 106*38a361e8SKenneth E. Jansen rk = pt5 * ( ytargeti(id,2)**2+ytargeti(id,3)**2 107*38a361e8SKenneth E. Jansen & +ytargeti(id,4)**2 ) 108*38a361e8SKenneth E. Jansenc Determine the resulting conservation variables 109*38a361e8SKenneth E. Jansen duitarg(id,1) = den 110*38a361e8SKenneth E. Jansen duitarg(id,2) = den * ytargeti(id,2) 111*38a361e8SKenneth E. Jansen duitarg(id,3) = den * ytargeti(id,3) 112*38a361e8SKenneth E. Jansen duitarg(id,4) = den * ytargeti(id,4) 113*38a361e8SKenneth E. Jansen duitarg(id,5) = den * (ei + rk) 114*38a361e8SKenneth E. Jansenc Apply the sponge 115*38a361e8SKenneth E. Jansen if(spongeContinuity.eq.1) 116*38a361e8SKenneth E. Jansen & src(id,1) = -bcool(id)*(dui(id,1) - duitarg(id,1)) 117*38a361e8SKenneth E. Jansen if(spongeMomentum1.eq.1) 118*38a361e8SKenneth E. Jansen & src(id,2) = -bcool(id)*(dui(id,2) - duitarg(id,2)) 119*38a361e8SKenneth E. Jansen if(spongeMomentum2.eq.1) 120*38a361e8SKenneth E. Jansen & src(id,3) = -bcool(id)*(dui(id,3) - duitarg(id,3)) 121*38a361e8SKenneth E. Jansen if(spongeMomentum3.eq.1) 122*38a361e8SKenneth E. Jansen & src(id,4) = -bcool(id)*(dui(id,4) - duitarg(id,4)) 123*38a361e8SKenneth E. Jansen if(spongeEnergy.eq.1) 124*38a361e8SKenneth E. Jansen & src(id,5) = -bcool(id)*(dui(id,5) - duitarg(id,5)) 125*38a361e8SKenneth E. Jansen endif 126*38a361e8SKenneth E. Jansen enddo 127*38a361e8SKenneth E. Jansen else !keep the original sponge below but 12859599516SKenneth E. Jansen 12959599516SKenneth E. Jansen 13059599516SKenneth E. Jansenc we=3.0*29./682. 13159599516SKenneth E. Jansen rsteep=3.0 13259599516SKenneth E. Jansen src=zero 13359599516SKenneth E. Jansen radsts=radSponge*radSponge 13459599516SKenneth E. Jansen CoefRatioI2O = grthISponge/grthOSponge 13559599516SKenneth E. Jansen do id=1,npro 13659599516SKenneth E. Jansen radsqr=xx(id,2)**2+xx(id,1)**2 13759599516SKenneth E. Jansen if(xx(id,3).lt. zinSponge) then ! map this into big outflow 13859599516SKenneth E. Jansen ! sponge to keep logic 13959599516SKenneth E. Jansen ! below simple 14059599516SKenneth E. Jansen 14159599516SKenneth E. Jansen xx(id,3)=(zinSponge-xx(id,3))*CoefRatioI2O 14259599516SKenneth E. Jansen & + zoutSponge 14359599516SKenneth E. Jansen ! 14459599516SKenneth E. Jansen ! CoefRatioI2O is the ratio of the inlet quadratic coefficient to the 14559599516SKenneth E. Jansen ! outlet quadratic coeficient (basically how much faster sponge 14659599516SKenneth E. Jansen ! coefficient grows in inlet region relative to outlet region) 14759599516SKenneth E. Jansen ! 14859599516SKenneth E. Jansen endif 14959599516SKenneth E. Jansen if((xx(id,3).gt.zoutSponge).or.(radsqr.gt.radsts)) then 15059599516SKenneth E. Jansen rad=sqrt(radsqr) 15159599516SKenneth E. Jansen radc=max(rad,radSponge) 15259599516SKenneth E. Jansen zval=max(xx(id,3),zoutSponge) 15359599516SKenneth E. Jansen bcool(id)=grthOSponge*((zval-zoutSponge)**2 15459599516SKenneth E. Jansen & +(radc-radSponge)**2) 15559599516SKenneth E. Jansen bcool(id)=min(bcool(id),betamax) 15659599516SKenneth E. Jansenc Determine the resulting density and energies 15759599516SKenneth E. Jansen den = ytargeti(id,1) / (Rgas * ytargeti(id,5)) 15859599516SKenneth E. Jansen ei = ytargeti(id,5) * ( Rgas / gamma1 ) 15959599516SKenneth E. Jansen rk = pt5 * ( ytargeti(id,2)**2+ytargeti(id,3)**2 16059599516SKenneth E. Jansen & +ytargeti(id,4)**2 ) 16159599516SKenneth E. Jansenc Determine the resulting conservation variables 16259599516SKenneth E. Jansen duitarg(id,1) = den 16359599516SKenneth E. Jansen duitarg(id,2) = den * ytargeti(id,2) 16459599516SKenneth E. Jansen duitarg(id,3) = den * ytargeti(id,3) 16559599516SKenneth E. Jansen duitarg(id,4) = den * ytargeti(id,4) 16659599516SKenneth E. Jansen duitarg(id,5) = den * (ei + rk) 16759599516SKenneth E. Jansenc Apply the sponge 16859599516SKenneth E. Jansen if(spongeContinuity.eq.1) 16959599516SKenneth E. Jansen & src(id,1) = -bcool(id)*(dui(id,1) - duitarg(id,1)) 17059599516SKenneth E. Jansen if(spongeMomentum1.eq.1) 17159599516SKenneth E. Jansen & src(id,2) = -bcool(id)*(dui(id,2) - duitarg(id,2)) 17259599516SKenneth E. Jansen if(spongeMomentum2.eq.1) 17359599516SKenneth E. Jansen & src(id,3) = -bcool(id)*(dui(id,3) - duitarg(id,3)) 17459599516SKenneth E. Jansen if(spongeMomentum3.eq.1) 17559599516SKenneth E. Jansen & src(id,4) = -bcool(id)*(dui(id,4) - duitarg(id,4)) 17659599516SKenneth E. Jansen if(spongeEnergy.eq.1) 17759599516SKenneth E. Jansen & src(id,5) = -bcool(id)*(dui(id,5) - duitarg(id,5)) 17859599516SKenneth E. Jansen endif 17959599516SKenneth E. Jansen enddo 180*38a361e8SKenneth E. Jansen endif ! end of initial sponge circumvented for BL 18159599516SKenneth E. Jansen else 18259599516SKenneth E. Jansen if(isurf .ne. 1) then 18359599516SKenneth E. Jansen write(*,*) 'only vector (1) and cooling (4) implemented' 18459599516SKenneth E. Jansen stop 18559599516SKenneth E. Jansen endif 18659599516SKenneth E. Jansen endif 18759599516SKenneth E. Jansen 18859599516SKenneth E. Jansen if (isurf .eq. 1) then ! add the surface tension force 18959599516SKenneth E. Jansen src(:,2) = src(:,2) + rho(:)*sforce(:,1) 19059599516SKenneth E. Jansen src(:,3) = src(:,3) + rho(:)*sforce(:,2) 19159599516SKenneth E. Jansen src(:,4) = src(:,4) + rho(:)*sforce(:,3) 19259599516SKenneth E. Jansen src(:,5) = src(:,5) + (u1*sforce(:,1)+u2*sforce(:,2) 19359599516SKenneth E. Jansen & + u3*sforce(:,3))*rho(:) 19459599516SKenneth E. Jansen endif 19559599516SKenneth E. Jansen 19659599516SKenneth E. Jansenc 19759599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 19859599516SKenneth E. Jansenc 19959599516SKenneth E. Jansen if (ivart.gt.1) then 20059599516SKenneth E. Jansen rLyi(:,1) = rLyi(:,1) - src(:,1) 20159599516SKenneth E. Jansen rLyi(:,2) = rLyi(:,2) - src(:,2) 20259599516SKenneth E. Jansen rLyi(:,3) = rLyi(:,3) - src(:,3) 20359599516SKenneth E. Jansen rLyi(:,4) = rLyi(:,4) - src(:,4) 20459599516SKenneth E. Jansen rLyi(:,5) = rLyi(:,5) - src(:,5) 20559599516SKenneth E. Jansen endif 20659599516SKenneth E. Jansen 20759599516SKenneth E. Jansen if ((ires .eq. 1) .or. (ires .eq. 3)) then ! we need ri built 20859599516SKenneth E. Jansen ri (:,16) = ri (:,16) - src(:,1) 20959599516SKenneth E. Jansen ri (:,17) = ri (:,17) - src(:,2) 21059599516SKenneth E. Jansen ri (:,18) = ri (:,18) - src(:,3) 21159599516SKenneth E. Jansen ri (:,19) = ri (:,19) - src(:,4) 21259599516SKenneth E. Jansen ri (:,20) = ri (:,20) - src(:,5) 21359599516SKenneth E. Jansen 21459599516SKenneth E. Jansen endif 21559599516SKenneth E. Jansen 21659599516SKenneth E. Jansen if ((ires.eq.2) .or. (ires.eq.3)) then ! we need rmi built 21759599516SKenneth E. Jansen rmi (:,16) = rmi (:,16) - src(:,1) 21859599516SKenneth E. Jansen rmi (:,17) = rmi (:,17) - src(:,2) 21959599516SKenneth E. Jansen rmi (:,18) = rmi (:,18) - src(:,3) 22059599516SKenneth E. Jansen rmi (:,19) = rmi (:,19) - src(:,4) 22159599516SKenneth E. Jansen rmi (:,20) = rmi (:,20) - src(:,5) 22259599516SKenneth E. Jansen endif 22359599516SKenneth E. Jansenc 22459599516SKenneth E. Jansen return 22559599516SKenneth E. Jansen end 22659599516SKenneth E. Jansenc 22759599516SKenneth E. Jansenc 22859599516SKenneth E. Jansenc 22959599516SKenneth E. Jansen subroutine e3sourceSclr(Sclr, rho, rmu, 230513954efSKenneth E. Jansen & dist2w, vort, gVnrm, con, 23159599516SKenneth E. Jansen & g1yti, g2yti, g3yti, 23259599516SKenneth E. Jansen & rti, rLyti, srcp, 23359599516SKenneth E. Jansen & ycl, shape, u1, 23459599516SKenneth E. Jansen & u2, u3, xl, elDwl) 23559599516SKenneth E. Jansenc 23659599516SKenneth E. Jansenc--------------------------------------------------------------------- 23759599516SKenneth E. Jansenc 23859599516SKenneth E. Jansenc This routine calculates the source term indicated in the Spalart- 23959599516SKenneth E. Jansenc Allmaras eddy viscosity model. After term is stored in rti(:,4), 24059599516SKenneth E. Jansenc for later use by e3wmltSclr, and in rLyti(:) for later use by e3lsSclr. 24159599516SKenneth E. Jansenc 24259599516SKenneth E. Jansenc input: 24359599516SKenneth E. Jansenc Sclr (npro) : working turbulence variable 24459599516SKenneth E. Jansenc rho (npro) : density at intpt 24559599516SKenneth E. Jansenc rmu (npro) : molecular viscosity 24659599516SKenneth E. Jansenc dist2w (npro) : distance from intpt to the nearest wall 24759599516SKenneth E. Jansenc vort (npro) : magnitude of the vorticity 248513954efSKenneth E. Jansenc gVnrm (npro) : magnitude of the velocity gradient 24959599516SKenneth E. Jansenc con (npro) : conductivity 25059599516SKenneth E. Jansenc g1yti (npro) : grad-Sclr in direction 1 25159599516SKenneth E. Jansenc g2yti (npro) : grad-Sclr in direction 2 25259599516SKenneth E. Jansenc g3yti (npro) : grad-Sclr in direction 3 25359599516SKenneth E. Jansenc 25459599516SKenneth E. Jansenc output: 25559599516SKenneth E. Jansenc rti (npro,4) : components of residual at intpt 25659599516SKenneth E. Jansenc rLyti (npro) : GLS stabilization 25759599516SKenneth E. Jansenc 25859599516SKenneth E. Jansenc--------------------------------------------------------------------- 25959599516SKenneth E. Jansenc 26059599516SKenneth E. Jansen use turbSA 26159599516SKenneth E. Jansen include "common.h" 26259599516SKenneth E. Jansenc 26359599516SKenneth E. Jansen dimension Sclr (npro), ycl(npro,nshl,ndof), 26459599516SKenneth E. Jansen & dist2w (npro), shape(npro,nshl), 265513954efSKenneth E. Jansen & vort (npro), gVnrm(npro), rho (npro), 26659599516SKenneth E. Jansen & rmu (npro), con (npro), 26759599516SKenneth E. Jansen & g1yti (npro), g2yti (npro), 26859599516SKenneth E. Jansen & g3yti (npro), u1 (npro), 26959599516SKenneth E. Jansen & u2 (npro), u3 (npro) 27059599516SKenneth E. Jansenc 27159599516SKenneth E. Jansen dimension rti (npro,4), rLyti (npro) 27259599516SKenneth E. Jansenc 27359599516SKenneth E. Jansen dimension ft1 (npro), 27459599516SKenneth E. Jansenc unfix later -- pieces used in acusim: 27559599516SKenneth E. Jansen & srcrat (npro), vdgn (npro), 27659599516SKenneth E. Jansenc & term1 (npro), term2 (npro), 27759599516SKenneth E. Jansenc & term3 (npro), 27859599516SKenneth E. Jansenc 27959599516SKenneth E. Jansen & chi (npro), fv1 (npro), 28059599516SKenneth E. Jansen & fv2 (npro), Stilde (npro), 28159599516SKenneth E. Jansen & r (npro), g (npro), 28259599516SKenneth E. Jansen & fw (npro), ft2 (npro), 28359599516SKenneth E. Jansen & fv1p (npro), fv2p (npro), 28459599516SKenneth E. Jansen & stp (npro), rp (npro), 28559599516SKenneth E. Jansen & gp (npro), fwp (npro), 28659599516SKenneth E. Jansen & bf (npro), srcp (npro), 28759599516SKenneth E. Jansen & gp6 (npro), tmp (npro), 28859599516SKenneth E. Jansen & tmp1 (npro), fwog (npro) 28959599516SKenneth E. Jansen real*8 elDwl(npro) ! local quadrature point DES dvar 29059599516SKenneth E. Jansen real*8 sclrm(npro) ! modified for non-negativity 291513954efSKenneth E. Jansen real*8 saCb1Scale(npro) !Hack to change the production term and BL thickness 292513954efSKenneth E. Jansen real*8 xl_xbar(npro) !Hack to store mean x location of element. 29359599516SKenneth E. Jansenc... for levelset 29459599516SKenneth E. Jansen real*8 sign_levelset(npro), sclr_ls(npro), mytmp(npro), 29559599516SKenneth E. Jansen & xl(npro,nenl,nsd) 29659599516SKenneth E. Jansen 29759599516SKenneth E. Jansenc 29859599516SKenneth E. Jansen if(iRANS.lt.0) then ! spalart almaras model 29959599516SKenneth E. Jansen sclrm=max(rmu/100.0,Sclr) 30059599516SKenneth E. Jansen if(iles.lt.0) then 30159599516SKenneth E. Jansen do i=1,npro 30259599516SKenneth E. Jansen dx=maxval(xl(i,:,1))-minval(xl(i,:,1)) 30359599516SKenneth E. Jansen dy=maxval(xl(i,:,2))-minval(xl(i,:,2)) 30459599516SKenneth E. Jansen dz=maxval(xl(i,:,3))-minval(xl(i,:,3)) 30559599516SKenneth E. Jansen dmax=max(dx,max(dy,dz)) 30659599516SKenneth E. Jansen dmax=0.65d0*dmax 307513954efSKenneth E. Jansen if( iles.eq.-1) then !original DES97 30859599516SKenneth E. Jansen dist2w(i)=min(dmax,dist2w(i)) 309513954efSKenneth E. Jansen elseif(iles.eq.-2) then ! DDES 310513954efSKenneth E. Jansen rd=sclrm(i)*saKappaP2Inv/(dist2w(i)**2*gVnrm(i)+1.0d-12) 311513954efSKenneth E. Jansen fd=one-tanh((8.0000000000000000d0*rd)**3) 312513954efSKenneth E. Jansen dist2w(i)=dist2w(i)-fd*max(zero,dist2w(i)-dmax) 313513954efSKenneth E. Jansen endif 31459599516SKenneth E. Jansen enddo 31559599516SKenneth E. Jansen endif 31659599516SKenneth E. Jansen 31759599516SKenneth E. Jansen elDwl(:)=elDwl(:)+dist2w(:) 31859599516SKenneth E. Jansenc 31959599516SKenneth E. Jansenc determine chi 32059599516SKenneth E. Jansen chi = rho*sclrm/rmu 32159599516SKenneth E. Jansenc determine f_v1 32259599516SKenneth E. Jansen fv1 = chi**3/(chi**3+saCv1**3) 32359599516SKenneth E. Jansenc determine f_v2 32459599516SKenneth E. Jansen fv2 = one - chi/(one+chi*fv1) 32559599516SKenneth E. Jansenc determine Stilde 32659599516SKenneth E. Jansen Stilde = vort + sclrm*fv2/(saKappa*dist2w)**2!unfix 32759599516SKenneth E. Jansenc determine r 32859599516SKenneth E. Jansen where(Stilde(:).ne.zero) 32959599516SKenneth E. Jansen r(:) = sclrm(:)/Stilde(:)/(saKappa*dist2w(:))**2 33059599516SKenneth E. Jansen elsewhere 33159599516SKenneth E. Jansen r(:) = 1.0d32 33259599516SKenneth E. Jansen endwhere 33359599516SKenneth E. Jansenc determine g 33459599516SKenneth E. Jansen saCw3l=saCw3 33559599516SKenneth E. Jansen g = r + saCw2*(r**6-r) 33659599516SKenneth E. Jansen sixth = 1.0/6.0 33759599516SKenneth E. Jansenc gp = rp * (tmp + 5 * saCw2 * rP5) 33859599516SKenneth E. Jansenc 33959599516SKenneth E. Jansenc gP6 = (g * g * g) ** 2 34059599516SKenneth E. Jansenc tmp = 1 / (gP6 + (saCw3*saCw3*saCw3)**2) 34159599516SKenneth E. Jansenc tmp1 = ( (1 + (saCw3*saCw3*saCw3)**2) * tmp ) ** sixth 34259599516SKenneth E. Jansenc fw = g * tmp1 34359599516SKenneth E. Jansenc fwp = gp * tmp1 * (saCw3*saCw3*saCw3)**2 * tmp 34459599516SKenneth E. Jansenc determine f_w and f_w/g 34559599516SKenneth E. Jansen fwog = ((one+saCw3**6)/(g**6+saCw3**6))**sixth 34659599516SKenneth E. Jansen fw = g*fwog 34759599516SKenneth E. Jansenc determine f_t2 34859599516SKenneth E. Jansenc ft2 = ct3*exp(-ct4*chi**2) 34959599516SKenneth E. Jansen ft2 = zero 35059599516SKenneth E. Jansen 35159599516SKenneth E. Jansenc srcrat=saCb1*(one-ft2)*Stilde*sclrm 35259599516SKenneth E. Jansenc & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 35359599516SKenneth E. Jansenc srcrat=srcrat/sclrm 35459599516SKenneth E. Jansen 355513954efSKenneth E. Jansen!---------------------------------------------------------------------------- 356513954efSKenneth E. Jansen!HACK: lower the EV production rate within a region to decrease BL thickness. 357513954efSKenneth E. Jansen! Appear NM was not finished yet if(scrScaleEnable) then 358513954efSKenneth E. Jansen if(one.eq.zero) then 359513954efSKenneth E. Jansen do i = 1,nenl !average the x-locations 360513954efSKenneth E. Jansen xl_xbar(:) = xl_xbar(:) + xl(:,i,1) 361513954efSKenneth E. Jansen enddo 362513954efSKenneth E. Jansen xl_xbar = xl_xbar/nenl 363513954efSKenneth E. Jansen 364513954efSKenneth E. Jansen saCb1Scale = one 365513954efSKenneth E. Jansen where(xl_xbar < saCb1alterXmin .and. xl_xbar > saCb1alterXmax) 366513954efSKenneth E. Jansen saCb1Scale(:) = seCb1alter 367513954efSKenneth E. Jansen endwhere 368513954efSKenneth E. Jansen 369513954efSKenneth E. Jansen srcrat = saCb1Scale*saCb1*(one-ft2)*Stilde 370513954efSKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 371513954efSKenneth E. Jansen else 37259599516SKenneth E. Jansen srcrat=saCb1*(one-ft2)*Stilde 37359599516SKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 374513954efSKenneth E. Jansen endif 375513954efSKenneth E. Jansen 376513954efSKenneth E. Jansen!Original: 377513954efSKenneth E. Jansen! srcrat=saCb1*(one-ft2)*Stilde 378513954efSKenneth E. Jansen! & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 379513954efSKenneth E. Jansen!End Hack 380513954efSKenneth E. Jansen!---------------------------------------------------------------------------- 38159599516SKenneth E. Jansen 38259599516SKenneth E. Jansenc 38359599516SKenneth E. Jansenc term1=saCb1*(one-ft2)*Stilde*sclrm 38459599516SKenneth E. Jansenc term2=saCb2*saSigmaInv*(g1yti**2+g2yti**2+g3yti**2) 38559599516SKenneth E. Jansenc term3=-(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 38659599516SKenneth E. Jansenc determine d()/d(sclrm) 38759599516SKenneth E. Jansen fv1p = 3*(saCv1**3)*(chi**2)*rho 38859599516SKenneth E. Jansen fv1p = fv1p/(rmu*(chi**3+saCv1**3)**2) 38959599516SKenneth E. Jansen fv2p = (chi**2)*fv1p-(one/rmu) 39059599516SKenneth E. Jansen fv2p = fv2p/(one+chi*fv1)**2 39159599516SKenneth E. Jansen stp = fv2 + sclrm*fv2p 39259599516SKenneth E. Jansen stp = stp/(saKappa*dist2w)**2 39359599516SKenneth E. Jansen where(Stilde(:).ne.zero) 39459599516SKenneth E. Jansen rp(:) = Stilde(:) - sclrm(:)*stp(:) 39559599516SKenneth E. Jansen rp(:) = rp(:)/(saKappa*dist2w(:)*Stilde(:))**2 39659599516SKenneth E. Jansen elsewhere 39759599516SKenneth E. Jansen rp(:) = 1.0d32 39859599516SKenneth E. Jansen endwhere 39959599516SKenneth E. Jansen gp = one+saCw2*(6*r**5 - one) 40059599516SKenneth E. Jansen gp = gp*rp 40159599516SKenneth E. Jansen fwp = (saCw3**6)*fwog 40259599516SKenneth E. Jansen fwp = fwp*gp/(g**6+saCw3**6) 40359599516SKenneth E. Jansenc determine source term 40459599516SKenneth E. Jansen bf = saCb2*saSigmaInv*(g1yti**2+g2yti**2+g3yti**2) 40559599516SKenneth E. Jansen & +saCb1*(one-ft2)*Stilde*sclrm 40659599516SKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 40759599516SKenneth E. Jansen bf = bf * rho 40859599516SKenneth E. Jansenc determine d(source)/d(sclrm) 40959599516SKenneth E. Jansen srcp = rho*saCb1*(sclrm*stp+Stilde) 41059599516SKenneth E. Jansen & -rho*saCw1*(fwp*sclrm**2 + 2*sclrm*fw)/dist2w**2 41159599516SKenneth E. Jansen do i=1, npro 41259599516SKenneth E. Jansen if(srcp(i).le.zero .and. srcp(i).le.srcrat(i)) then 41359599516SKenneth E. Jansen srcp(i)=srcp(i) 41459599516SKenneth E. Jansen else if(srcrat(i).lt.zero) then 41559599516SKenneth E. Jansen srcp(i)=srcrat(i) 41659599516SKenneth E. Jansen else 41759599516SKenneth E. Jansen srcp(i)=zero 41859599516SKenneth E. Jansen endif 41959599516SKenneth E. Jansen enddo 42059599516SKenneth E. Jansenc 42159599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 42259599516SKenneth E. Jansenc 42359599516SKenneth E. Jansenc if ((ires .eq. 1) .or. (ires .eq. 3)) then 42459599516SKenneth E. Jansen rti (:,4) = rti (:,4) - bf(:) 42559599516SKenneth E. Jansenc endif !ires 42659599516SKenneth E. Jansen 42759599516SKenneth E. Jansenc rmti (:,4) = rmti (:,4) - bf(:) 42859599516SKenneth E. Jansen rLyti(:) = rLyti(:) - bf(:) 42959599516SKenneth E. Jansenc 43059599516SKenneth E. Jansen elseif (iLSet.ne.0) then 43159599516SKenneth E. Jansen if (isclr.eq.1) then 43259599516SKenneth E. Jansen srcp = zero 43359599516SKenneth E. Jansen 43459599516SKenneth E. Jansen elseif (isclr.eq.2) then !we are redistancing level-sets 43559599516SKenneth E. Jansen 43659599516SKenneth E. Jansen sclr_ls = zero !zero out temp variable 43759599516SKenneth E. Jansen 43859599516SKenneth E. Jansen do ii=1,npro 43959599516SKenneth E. Jansen 44059599516SKenneth E. Jansen do jj = 1, nshl ! first find the value of levelset at point ii 44159599516SKenneth E. Jansen 44259599516SKenneth E. Jansen sclr_ls(ii) = sclr_ls(ii) 44359599516SKenneth E. Jansen & + shape(ii,jj) * ycl(ii,jj,6) 44459599516SKenneth E. Jansen 44559599516SKenneth E. Jansen enddo 44659599516SKenneth E. Jansen 44759599516SKenneth E. Jansen if (sclr_ls(ii) .lt. - epsilon_ls)then 44859599516SKenneth E. Jansen 44959599516SKenneth E. Jansen sign_levelset(ii) = - one 45059599516SKenneth E. Jansen 45159599516SKenneth E. Jansen elseif (abs(sclr_ls(ii)) .le. epsilon_ls)then 45259599516SKenneth E. Jansenc sign_levelset(ii) = zero 45359599516SKenneth E. Jansenc 45459599516SKenneth E. Jansen sign_levelset(ii) =sclr_ls(ii)/epsilon_ls 45559599516SKenneth E. Jansen & + sin(pi*sclr_ls(ii)/epsilon_ls)/pi 45659599516SKenneth E. Jansen 45759599516SKenneth E. Jansen 45859599516SKenneth E. Jansen elseif (sclr_ls(ii) .gt. epsilon_ls) then 45959599516SKenneth E. Jansen 46059599516SKenneth E. Jansen sign_levelset(ii) = one 46159599516SKenneth E. Jansen 46259599516SKenneth E. Jansen endif 46359599516SKenneth E. Jansen srcp(ii) = sign_levelset(ii) 46459599516SKenneth E. Jansen 46559599516SKenneth E. Jansen enddo 46659599516SKenneth E. Jansenc 46759599516SKenneth E. Jansenc ad The redistancing equation can be written in the following form 46859599516SKenneth E. Jansenc ad 46959599516SKenneth E. Jansenc ad d_{,t} + sign(phi)*( d_{,i}/|d_{,i}| )* d_{,i} = sign(phi) 47059599516SKenneth E. Jansenc ad 47159599516SKenneth E. Jansenc ad This is rewritten in the form 47259599516SKenneth E. Jansenc ad 47359599516SKenneth E. Jansenc ad d_{,t} + u * d_{,i} = sign(phi) 47459599516SKenneth E. Jansenc ad 47559599516SKenneth E. Jansen 47659599516SKenneth E. Jansenc$$$ CAD For the redistancing equation the "pseudo velocity" term is 47759599516SKenneth E. Jansenc$$$ CAD calculated as follows 47859599516SKenneth E. Jansen 47959599516SKenneth E. Jansen 48059599516SKenneth E. Jansen 48159599516SKenneth E. Jansen mytmp = srcp(:) / sqrt( g1yti(:) * g1yti(:) 48259599516SKenneth E. Jansen & + g2yti(:) * g2yti(:) 48359599516SKenneth E. Jansen & + g3yti(:) * g3yti(:) ) 48459599516SKenneth E. Jansen 48559599516SKenneth E. Jansen u1 = mytmp(:) * g1yti(:) 48659599516SKenneth E. Jansen u2 = mytmp(:) * g2yti(:) 48759599516SKenneth E. Jansen u3 = mytmp(:) * g3yti(:) 48859599516SKenneth E. Jansenc 48959599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 49059599516SKenneth E. Jansenc 49159599516SKenneth E. Jansenc if ((ires .eq. 1) .or. (ires .eq. 3)) then 49259599516SKenneth E. Jansen rti (:,4) = rti (:,4) - srcp(:) 49359599516SKenneth E. Jansenc endif !ires 49459599516SKenneth E. Jansen 49559599516SKenneth E. Jansenc rmti (:,4) = rmti (:,4) - srcp(:) 49659599516SKenneth E. Jansen rLyti(:) = rLyti(:) - srcp(:) 49759599516SKenneth E. Jansenc 49859599516SKenneth E. Jansen endif ! close of scalar 2 of level set 49959599516SKenneth E. Jansen 50059599516SKenneth E. Jansen else ! NOT turbulence and NOT level set so this is a simple 50159599516SKenneth E. Jansen ! scalar. If your scalar equation has a source term 50259599516SKenneth E. Jansen ! then add your own like the above but leave an unforced case 50359599516SKenneth E. Jansen ! as an option like you see here 50459599516SKenneth E. Jansen 50559599516SKenneth E. Jansen srcp = zero 50659599516SKenneth E. Jansen endif 50759599516SKenneth E. Jansen 50859599516SKenneth E. Jansen 50959599516SKenneth E. Jansenc 51059599516SKenneth E. Jansenc.... Return and end 51159599516SKenneth E. Jansenc 51259599516SKenneth E. Jansen return 51359599516SKenneth E. Jansen end 51459599516SKenneth E. Jansen 515