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 9838a361e8SKenneth E. Jansen if (1.eq.1) then ! bringing in x BL sponge 9938a361e8SKenneth E. Jansen do id=1,npro 10038a361e8SKenneth E. Jansen if((xx(id,1).gt.zoutSponge)) then 10138a361e8SKenneth E. Jansen bcool(id)=grthOSponge*(xx(id,1)-zoutSponge)**2 10238a361e8SKenneth E. Jansen bcool(id)=min(bcool(id),betamax) 10338a361e8SKenneth E. Jansenc Determine the resulting density and energies 10438a361e8SKenneth E. Jansen den = ytargeti(id,1) / (Rgas * ytargeti(id,5)) 10538a361e8SKenneth E. Jansen ei = ytargeti(id,5) * ( Rgas / gamma1 ) 10638a361e8SKenneth E. Jansen rk = pt5 * ( ytargeti(id,2)**2+ytargeti(id,3)**2 10738a361e8SKenneth E. Jansen & +ytargeti(id,4)**2 ) 10838a361e8SKenneth E. Jansenc Determine the resulting conservation variables 10938a361e8SKenneth E. Jansen duitarg(id,1) = den 11038a361e8SKenneth E. Jansen duitarg(id,2) = den * ytargeti(id,2) 11138a361e8SKenneth E. Jansen duitarg(id,3) = den * ytargeti(id,3) 11238a361e8SKenneth E. Jansen duitarg(id,4) = den * ytargeti(id,4) 11338a361e8SKenneth E. Jansen duitarg(id,5) = den * (ei + rk) 11438a361e8SKenneth E. Jansenc Apply the sponge 11538a361e8SKenneth E. Jansen if(spongeContinuity.eq.1) 11638a361e8SKenneth E. Jansen & src(id,1) = -bcool(id)*(dui(id,1) - duitarg(id,1)) 11738a361e8SKenneth E. Jansen if(spongeMomentum1.eq.1) 11838a361e8SKenneth E. Jansen & src(id,2) = -bcool(id)*(dui(id,2) - duitarg(id,2)) 11938a361e8SKenneth E. Jansen if(spongeMomentum2.eq.1) 12038a361e8SKenneth E. Jansen & src(id,3) = -bcool(id)*(dui(id,3) - duitarg(id,3)) 12138a361e8SKenneth E. Jansen if(spongeMomentum3.eq.1) 12238a361e8SKenneth E. Jansen & src(id,4) = -bcool(id)*(dui(id,4) - duitarg(id,4)) 12338a361e8SKenneth E. Jansen if(spongeEnergy.eq.1) 12438a361e8SKenneth E. Jansen & src(id,5) = -bcool(id)*(dui(id,5) - duitarg(id,5)) 12538a361e8SKenneth E. Jansen endif 12638a361e8SKenneth E. Jansen enddo 12738a361e8SKenneth 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 18038a361e8SKenneth 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), 269*779e4b51SKenneth E. Jansen & u2 (npro), u3 (npro), 270*779e4b51SKenneth E. Jansen & rnu (npro) 27159599516SKenneth E. Jansenc 27259599516SKenneth E. Jansen dimension rti (npro,4), rLyti (npro) 27359599516SKenneth E. Jansenc 27459599516SKenneth E. Jansen dimension ft1 (npro), 27559599516SKenneth E. Jansenc unfix later -- pieces used in acusim: 27659599516SKenneth E. Jansen & srcrat (npro), vdgn (npro), 27759599516SKenneth E. Jansenc & term1 (npro), term2 (npro), 27859599516SKenneth E. Jansenc & term3 (npro), 27959599516SKenneth E. Jansenc 28059599516SKenneth E. Jansen & chi (npro), fv1 (npro), 28159599516SKenneth E. Jansen & fv2 (npro), Stilde (npro), 28259599516SKenneth E. Jansen & r (npro), g (npro), 28359599516SKenneth E. Jansen & fw (npro), ft2 (npro), 28459599516SKenneth E. Jansen & fv1p (npro), fv2p (npro), 28559599516SKenneth E. Jansen & stp (npro), rp (npro), 28659599516SKenneth E. Jansen & gp (npro), fwp (npro), 28759599516SKenneth E. Jansen & bf (npro), srcp (npro), 28859599516SKenneth E. Jansen & gp6 (npro), tmp (npro), 28959599516SKenneth E. Jansen & tmp1 (npro), fwog (npro) 29059599516SKenneth E. Jansen real*8 elDwl(npro) ! local quadrature point DES dvar 29159599516SKenneth E. Jansen real*8 sclrm(npro) ! modified for non-negativity 292513954efSKenneth E. Jansen real*8 saCb1Scale(npro) !Hack to change the production term and BL thickness 293513954efSKenneth E. Jansen real*8 xl_xbar(npro) !Hack to store mean x location of element. 29459599516SKenneth E. Jansenc... for levelset 29559599516SKenneth E. Jansen real*8 sign_levelset(npro), sclr_ls(npro), mytmp(npro), 29659599516SKenneth E. Jansen & xl(npro,nenl,nsd) 29759599516SKenneth E. Jansen 29859599516SKenneth E. Jansenc 299*779e4b51SKenneth E. Jansen rnu=rmu/rho ! SA variable is nu_til not mu so nu needed in lots of places where xi=nu_til/nu 30059599516SKenneth E. Jansen if(iRANS.lt.0) then ! spalart almaras model 301*779e4b51SKenneth E. Jansen sclrm=max(rnu/100.0,Sclr) ! sets a floor on SCLR 30259599516SKenneth E. Jansen if(iles.lt.0) then 30359599516SKenneth E. Jansen do i=1,npro 30459599516SKenneth E. Jansen dx=maxval(xl(i,:,1))-minval(xl(i,:,1)) 30559599516SKenneth E. Jansen dy=maxval(xl(i,:,2))-minval(xl(i,:,2)) 30659599516SKenneth E. Jansen dz=maxval(xl(i,:,3))-minval(xl(i,:,3)) 30759599516SKenneth E. Jansen dmax=max(dx,max(dy,dz)) 30859599516SKenneth E. Jansen dmax=0.65d0*dmax 309513954efSKenneth E. Jansen if( iles.eq.-1) then !original DES97 31059599516SKenneth E. Jansen dist2w(i)=min(dmax,dist2w(i)) 311513954efSKenneth E. Jansen elseif(iles.eq.-2) then ! DDES 312513954efSKenneth E. Jansen rd=sclrm(i)*saKappaP2Inv/(dist2w(i)**2*gVnrm(i)+1.0d-12) 313513954efSKenneth E. Jansen fd=one-tanh((8.0000000000000000d0*rd)**3) 314513954efSKenneth E. Jansen dist2w(i)=dist2w(i)-fd*max(zero,dist2w(i)-dmax) 315513954efSKenneth E. Jansen endif 31659599516SKenneth E. Jansen enddo 31759599516SKenneth E. Jansen endif 31859599516SKenneth E. Jansen 31959599516SKenneth E. Jansen elDwl(:)=elDwl(:)+dist2w(:) 32059599516SKenneth E. Jansenc 32159599516SKenneth E. Jansenc determine chi 322*779e4b51SKenneth E. Jansen chi = sclrm/rnu 32359599516SKenneth E. Jansenc determine f_v1 32459599516SKenneth E. Jansen fv1 = chi**3/(chi**3+saCv1**3) 32559599516SKenneth E. Jansenc determine f_v2 32659599516SKenneth E. Jansen fv2 = one - chi/(one+chi*fv1) 32759599516SKenneth E. Jansenc determine Stilde 32859599516SKenneth E. Jansen Stilde = vort + sclrm*fv2/(saKappa*dist2w)**2!unfix 32959599516SKenneth E. Jansenc determine r 33059599516SKenneth E. Jansen where(Stilde(:).ne.zero) 33159599516SKenneth E. Jansen r(:) = sclrm(:)/Stilde(:)/(saKappa*dist2w(:))**2 33259599516SKenneth E. Jansen elsewhere 33359599516SKenneth E. Jansen r(:) = 1.0d32 33459599516SKenneth E. Jansen endwhere 33559599516SKenneth E. Jansenc determine g 33659599516SKenneth E. Jansen saCw3l=saCw3 33759599516SKenneth E. Jansen g = r + saCw2*(r**6-r) 33859599516SKenneth E. Jansen sixth = 1.0/6.0 33959599516SKenneth E. Jansenc gp = rp * (tmp + 5 * saCw2 * rP5) 34059599516SKenneth E. Jansenc 34159599516SKenneth E. Jansenc gP6 = (g * g * g) ** 2 34259599516SKenneth E. Jansenc tmp = 1 / (gP6 + (saCw3*saCw3*saCw3)**2) 34359599516SKenneth E. Jansenc tmp1 = ( (1 + (saCw3*saCw3*saCw3)**2) * tmp ) ** sixth 34459599516SKenneth E. Jansenc fw = g * tmp1 34559599516SKenneth E. Jansenc fwp = gp * tmp1 * (saCw3*saCw3*saCw3)**2 * tmp 34659599516SKenneth E. Jansenc determine f_w and f_w/g 34759599516SKenneth E. Jansen fwog = ((one+saCw3**6)/(g**6+saCw3**6))**sixth 34859599516SKenneth E. Jansen fw = g*fwog 34959599516SKenneth E. Jansenc determine f_t2 35059599516SKenneth E. Jansenc ft2 = ct3*exp(-ct4*chi**2) 35159599516SKenneth E. Jansen ft2 = zero 35259599516SKenneth E. Jansen 35359599516SKenneth E. Jansenc srcrat=saCb1*(one-ft2)*Stilde*sclrm 35459599516SKenneth E. Jansenc & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 35559599516SKenneth E. Jansenc srcrat=srcrat/sclrm 35659599516SKenneth E. Jansen 357513954efSKenneth E. Jansen!---------------------------------------------------------------------------- 358513954efSKenneth E. Jansen!HACK: lower the EV production rate within a region to decrease BL thickness. 359513954efSKenneth E. Jansen! Appear NM was not finished yet if(scrScaleEnable) then 360513954efSKenneth E. Jansen if(one.eq.zero) then 361513954efSKenneth E. Jansen do i = 1,nenl !average the x-locations 362513954efSKenneth E. Jansen xl_xbar(:) = xl_xbar(:) + xl(:,i,1) 363513954efSKenneth E. Jansen enddo 364513954efSKenneth E. Jansen xl_xbar = xl_xbar/nenl 365513954efSKenneth E. Jansen 366513954efSKenneth E. Jansen saCb1Scale = one 367513954efSKenneth E. Jansen where(xl_xbar < saCb1alterXmin .and. xl_xbar > saCb1alterXmax) 368513954efSKenneth E. Jansen saCb1Scale(:) = seCb1alter 369513954efSKenneth E. Jansen endwhere 370513954efSKenneth E. Jansen 371513954efSKenneth E. Jansen srcrat = saCb1Scale*saCb1*(one-ft2)*Stilde 372513954efSKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 373513954efSKenneth E. Jansen else 37459599516SKenneth E. Jansen srcrat=saCb1*(one-ft2)*Stilde 37559599516SKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 376513954efSKenneth E. Jansen endif 377513954efSKenneth E. Jansen 378513954efSKenneth E. Jansen!Original: 379513954efSKenneth E. Jansen! srcrat=saCb1*(one-ft2)*Stilde 380513954efSKenneth E. Jansen! & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 381513954efSKenneth E. Jansen!End Hack 382513954efSKenneth E. Jansen!---------------------------------------------------------------------------- 38359599516SKenneth E. Jansen 38459599516SKenneth E. Jansenc 38559599516SKenneth E. Jansenc term1=saCb1*(one-ft2)*Stilde*sclrm 38659599516SKenneth E. Jansenc term2=saCb2*saSigmaInv*(g1yti**2+g2yti**2+g3yti**2) 38759599516SKenneth E. Jansenc term3=-(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 38859599516SKenneth E. Jansenc determine d()/d(sclrm) 389*779e4b51SKenneth E. Jansen fv1p = 3*(saCv1**3)*(chi**2) 390*779e4b51SKenneth E. Jansen! fv1p = 3*(saCv1**3)*(chi**2) 391*779e4b51SKenneth E. Jansen! rho stays as chi=nutil/nu = rho nutil/mu -> dxi/dnutil=rho/rmu 392*779e4b51SKenneth E. Jansen fv1p = fv1p/(rnu*(chi**3+saCv1**3)**2) 393*779e4b51SKenneth E. Jansen fv2p = (chi**2)*fv1p-(one/rnu) 39459599516SKenneth E. Jansen fv2p = fv2p/(one+chi*fv1)**2 39559599516SKenneth E. Jansen stp = fv2 + sclrm*fv2p 39659599516SKenneth E. Jansen stp = stp/(saKappa*dist2w)**2 39759599516SKenneth E. Jansen where(Stilde(:).ne.zero) 39859599516SKenneth E. Jansen rp(:) = Stilde(:) - sclrm(:)*stp(:) 39959599516SKenneth E. Jansen rp(:) = rp(:)/(saKappa*dist2w(:)*Stilde(:))**2 40059599516SKenneth E. Jansen elsewhere 40159599516SKenneth E. Jansen rp(:) = 1.0d32 40259599516SKenneth E. Jansen endwhere 40359599516SKenneth E. Jansen gp = one+saCw2*(6*r**5 - one) 40459599516SKenneth E. Jansen gp = gp*rp 40559599516SKenneth E. Jansen fwp = (saCw3**6)*fwog 40659599516SKenneth E. Jansen fwp = fwp*gp/(g**6+saCw3**6) 40759599516SKenneth E. Jansenc determine source term 40859599516SKenneth E. Jansen bf = saCb2*saSigmaInv*(g1yti**2+g2yti**2+g3yti**2) 40959599516SKenneth E. Jansen & +saCb1*(one-ft2)*Stilde*sclrm 41059599516SKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 41159599516SKenneth E. Jansenc determine d(source)/d(sclrm) 412*779e4b51SKenneth E. Jansen srcp = saCb1*(sclrm*stp+Stilde) 413*779e4b51SKenneth E. Jansen & -saCw1*(fwp*sclrm**2 + 2*sclrm*fw)/dist2w**2 41459599516SKenneth E. Jansen do i=1, npro 41559599516SKenneth E. Jansen if(srcp(i).le.zero .and. srcp(i).le.srcrat(i)) then 41659599516SKenneth E. Jansen srcp(i)=srcp(i) 41759599516SKenneth E. Jansen else if(srcrat(i).lt.zero) then 41859599516SKenneth E. Jansen srcp(i)=srcrat(i) 41959599516SKenneth E. Jansen else 42059599516SKenneth E. Jansen srcp(i)=zero 42159599516SKenneth E. Jansen endif 42259599516SKenneth E. Jansen enddo 42359599516SKenneth E. Jansenc 42459599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 42559599516SKenneth E. Jansenc 42659599516SKenneth E. Jansenc if ((ires .eq. 1) .or. (ires .eq. 3)) then 42759599516SKenneth E. Jansen rti (:,4) = rti (:,4) - bf(:) 42859599516SKenneth E. Jansenc endif !ires 42959599516SKenneth E. Jansen 43059599516SKenneth E. Jansenc rmti (:,4) = rmti (:,4) - bf(:) 43159599516SKenneth E. Jansen rLyti(:) = rLyti(:) - bf(:) 43259599516SKenneth E. Jansenc 43359599516SKenneth E. Jansen elseif (iLSet.ne.0) then 43459599516SKenneth E. Jansen if (isclr.eq.1) then 43559599516SKenneth E. Jansen srcp = zero 43659599516SKenneth E. Jansen 43759599516SKenneth E. Jansen elseif (isclr.eq.2) then !we are redistancing level-sets 43859599516SKenneth E. Jansen 43959599516SKenneth E. Jansen sclr_ls = zero !zero out temp variable 44059599516SKenneth E. Jansen 44159599516SKenneth E. Jansen do ii=1,npro 44259599516SKenneth E. Jansen 44359599516SKenneth E. Jansen do jj = 1, nshl ! first find the value of levelset at point ii 44459599516SKenneth E. Jansen 44559599516SKenneth E. Jansen sclr_ls(ii) = sclr_ls(ii) 44659599516SKenneth E. Jansen & + shape(ii,jj) * ycl(ii,jj,6) 44759599516SKenneth E. Jansen 44859599516SKenneth E. Jansen enddo 44959599516SKenneth E. Jansen 45059599516SKenneth E. Jansen if (sclr_ls(ii) .lt. - epsilon_ls)then 45159599516SKenneth E. Jansen 45259599516SKenneth E. Jansen sign_levelset(ii) = - one 45359599516SKenneth E. Jansen 45459599516SKenneth E. Jansen elseif (abs(sclr_ls(ii)) .le. epsilon_ls)then 45559599516SKenneth E. Jansenc sign_levelset(ii) = zero 45659599516SKenneth E. Jansenc 45759599516SKenneth E. Jansen sign_levelset(ii) =sclr_ls(ii)/epsilon_ls 45859599516SKenneth E. Jansen & + sin(pi*sclr_ls(ii)/epsilon_ls)/pi 45959599516SKenneth E. Jansen 46059599516SKenneth E. Jansen 46159599516SKenneth E. Jansen elseif (sclr_ls(ii) .gt. epsilon_ls) then 46259599516SKenneth E. Jansen 46359599516SKenneth E. Jansen sign_levelset(ii) = one 46459599516SKenneth E. Jansen 46559599516SKenneth E. Jansen endif 46659599516SKenneth E. Jansen srcp(ii) = sign_levelset(ii) 46759599516SKenneth E. Jansen 46859599516SKenneth E. Jansen enddo 46959599516SKenneth E. Jansenc 47059599516SKenneth E. Jansenc ad The redistancing equation can be written in the following form 47159599516SKenneth E. Jansenc ad 47259599516SKenneth E. Jansenc ad d_{,t} + sign(phi)*( d_{,i}/|d_{,i}| )* d_{,i} = sign(phi) 47359599516SKenneth E. Jansenc ad 47459599516SKenneth E. Jansenc ad This is rewritten in the form 47559599516SKenneth E. Jansenc ad 47659599516SKenneth E. Jansenc ad d_{,t} + u * d_{,i} = sign(phi) 47759599516SKenneth E. Jansenc ad 47859599516SKenneth E. Jansen 47959599516SKenneth E. Jansenc$$$ CAD For the redistancing equation the "pseudo velocity" term is 48059599516SKenneth E. Jansenc$$$ CAD calculated as follows 48159599516SKenneth E. Jansen 48259599516SKenneth E. Jansen 48359599516SKenneth E. Jansen 48459599516SKenneth E. Jansen mytmp = srcp(:) / sqrt( g1yti(:) * g1yti(:) 48559599516SKenneth E. Jansen & + g2yti(:) * g2yti(:) 48659599516SKenneth E. Jansen & + g3yti(:) * g3yti(:) ) 48759599516SKenneth E. Jansen 48859599516SKenneth E. Jansen u1 = mytmp(:) * g1yti(:) 48959599516SKenneth E. Jansen u2 = mytmp(:) * g2yti(:) 49059599516SKenneth E. Jansen u3 = mytmp(:) * g3yti(:) 49159599516SKenneth E. Jansenc 49259599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 49359599516SKenneth E. Jansenc 49459599516SKenneth E. Jansenc if ((ires .eq. 1) .or. (ires .eq. 3)) then 49559599516SKenneth E. Jansen rti (:,4) = rti (:,4) - srcp(:) 49659599516SKenneth E. Jansenc endif !ires 49759599516SKenneth E. Jansen 49859599516SKenneth E. Jansenc rmti (:,4) = rmti (:,4) - srcp(:) 49959599516SKenneth E. Jansen rLyti(:) = rLyti(:) - srcp(:) 50059599516SKenneth E. Jansenc 50159599516SKenneth E. Jansen endif ! close of scalar 2 of level set 50259599516SKenneth E. Jansen 50359599516SKenneth E. Jansen else ! NOT turbulence and NOT level set so this is a simple 50459599516SKenneth E. Jansen ! scalar. If your scalar equation has a source term 50559599516SKenneth E. Jansen ! then add your own like the above but leave an unforced case 50659599516SKenneth E. Jansen ! as an option like you see here 50759599516SKenneth E. Jansen 50859599516SKenneth E. Jansen srcp = zero 50959599516SKenneth E. Jansen endif 51059599516SKenneth E. Jansen 51159599516SKenneth E. Jansen 51259599516SKenneth E. Jansenc 51359599516SKenneth E. Jansenc.... Return and end 51459599516SKenneth E. Jansenc 51559599516SKenneth E. Jansen return 51659599516SKenneth E. Jansen end 51759599516SKenneth E. Jansen 518