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 78*4afff3f1SKenneth E. Jansen else if(matflg(5,1).ge.4) then 7959599516SKenneth E. Jansenc determine coordinates of quadrature pt 8059599516SKenneth E. Jansen xx=zero 8159599516SKenneth E. Jansen do n = 1,nenl 8259599516SKenneth E. Jansen xx(:,1) = xx(:,1) + shpfun(:,n) * xl(:,n,1) 8359599516SKenneth E. Jansen xx(:,2) = xx(:,2) + shpfun(:,n) * xl(:,n,2) 8459599516SKenneth E. Jansen xx(:,3) = xx(:,3) + shpfun(:,n) * xl(:,n,3) 8559599516SKenneth E. Jansen enddo 8659599516SKenneth E. Jansen ytargeti=zero 8759599516SKenneth E. Jansen do j=1,nflow 8859599516SKenneth E. Jansen do n=1,nshl 8959599516SKenneth E. Jansen ytargeti(:,j) = ytargeti(:,j) 9059599516SKenneth E. Jansen & + shpfun(:,n)*ytargetl(:,n,j) 9159599516SKenneth E. Jansen enddo 9259599516SKenneth E. Jansen enddo 9338a361e8SKenneth E. Jansen if (1.eq.1) then ! bringing in x BL sponge 9438a361e8SKenneth E. Jansen do id=1,npro 95*4afff3f1SKenneth E. Jansen rsq=xx(id,1)*xx(id,1) + xx(id,2)*xx(id,2) 96*4afff3f1SKenneth E. Jansen if(rsq.gt.zoutSponge) then 97*4afff3f1SKenneth E. Jansen bcool(id)=grthOSponge*(rsq-zoutSponge)**2 9838a361e8SKenneth E. Jansen bcool(id)=min(bcool(id),betamax) 9938a361e8SKenneth E. Jansenc Determine the resulting density and energies 10038a361e8SKenneth E. Jansen den = ytargeti(id,1) / (Rgas * ytargeti(id,5)) 10138a361e8SKenneth E. Jansen ei = ytargeti(id,5) * ( Rgas / gamma1 ) 10238a361e8SKenneth E. Jansen rk = pt5 * ( ytargeti(id,2)**2+ytargeti(id,3)**2 10338a361e8SKenneth E. Jansen & +ytargeti(id,4)**2 ) 10438a361e8SKenneth E. Jansenc Determine the resulting conservation variables 10538a361e8SKenneth E. Jansen duitarg(id,1) = den 10638a361e8SKenneth E. Jansen duitarg(id,2) = den * ytargeti(id,2) 10738a361e8SKenneth E. Jansen duitarg(id,3) = den * ytargeti(id,3) 10838a361e8SKenneth E. Jansen duitarg(id,4) = den * ytargeti(id,4) 10938a361e8SKenneth E. Jansen duitarg(id,5) = den * (ei + rk) 11038a361e8SKenneth E. Jansenc Apply the sponge 11138a361e8SKenneth E. Jansen if(spongeContinuity.eq.1) 11238a361e8SKenneth E. Jansen & src(id,1) = -bcool(id)*(dui(id,1) - duitarg(id,1)) 11338a361e8SKenneth E. Jansen if(spongeMomentum1.eq.1) 11438a361e8SKenneth E. Jansen & src(id,2) = -bcool(id)*(dui(id,2) - duitarg(id,2)) 11538a361e8SKenneth E. Jansen if(spongeMomentum2.eq.1) 11638a361e8SKenneth E. Jansen & src(id,3) = -bcool(id)*(dui(id,3) - duitarg(id,3)) 11738a361e8SKenneth E. Jansen if(spongeMomentum3.eq.1) 11838a361e8SKenneth E. Jansen & src(id,4) = -bcool(id)*(dui(id,4) - duitarg(id,4)) 11938a361e8SKenneth E. Jansen if(spongeEnergy.eq.1) 12038a361e8SKenneth E. Jansen & src(id,5) = -bcool(id)*(dui(id,5) - duitarg(id,5)) 12138a361e8SKenneth E. Jansen endif 12238a361e8SKenneth E. Jansen enddo 12338a361e8SKenneth E. Jansen else !keep the original sponge below but 12459599516SKenneth E. Jansen 12559599516SKenneth E. Jansen 12659599516SKenneth E. Jansenc we=3.0*29./682. 12759599516SKenneth E. Jansen rsteep=3.0 12859599516SKenneth E. Jansen src=zero 12959599516SKenneth E. Jansen radsts=radSponge*radSponge 13059599516SKenneth E. Jansen CoefRatioI2O = grthISponge/grthOSponge 13159599516SKenneth E. Jansen do id=1,npro 13259599516SKenneth E. Jansen radsqr=xx(id,2)**2+xx(id,1)**2 13359599516SKenneth E. Jansen if(xx(id,3).lt. zinSponge) then ! map this into big outflow 13459599516SKenneth E. Jansen ! sponge to keep logic 13559599516SKenneth E. Jansen ! below simple 13659599516SKenneth E. Jansen 13759599516SKenneth E. Jansen xx(id,3)=(zinSponge-xx(id,3))*CoefRatioI2O 13859599516SKenneth E. Jansen & + zoutSponge 13959599516SKenneth E. Jansen ! 14059599516SKenneth E. Jansen ! CoefRatioI2O is the ratio of the inlet quadratic coefficient to the 14159599516SKenneth E. Jansen ! outlet quadratic coeficient (basically how much faster sponge 14259599516SKenneth E. Jansen ! coefficient grows in inlet region relative to outlet region) 14359599516SKenneth E. Jansen ! 14459599516SKenneth E. Jansen endif 14559599516SKenneth E. Jansen if((xx(id,3).gt.zoutSponge).or.(radsqr.gt.radsts)) then 14659599516SKenneth E. Jansen rad=sqrt(radsqr) 14759599516SKenneth E. Jansen radc=max(rad,radSponge) 14859599516SKenneth E. Jansen zval=max(xx(id,3),zoutSponge) 14959599516SKenneth E. Jansen bcool(id)=grthOSponge*((zval-zoutSponge)**2 15059599516SKenneth E. Jansen & +(radc-radSponge)**2) 15159599516SKenneth E. Jansen bcool(id)=min(bcool(id),betamax) 15259599516SKenneth E. Jansenc Determine the resulting density and energies 15359599516SKenneth E. Jansen den = ytargeti(id,1) / (Rgas * ytargeti(id,5)) 15459599516SKenneth E. Jansen ei = ytargeti(id,5) * ( Rgas / gamma1 ) 15559599516SKenneth E. Jansen rk = pt5 * ( ytargeti(id,2)**2+ytargeti(id,3)**2 15659599516SKenneth E. Jansen & +ytargeti(id,4)**2 ) 15759599516SKenneth E. Jansenc Determine the resulting conservation variables 15859599516SKenneth E. Jansen duitarg(id,1) = den 15959599516SKenneth E. Jansen duitarg(id,2) = den * ytargeti(id,2) 16059599516SKenneth E. Jansen duitarg(id,3) = den * ytargeti(id,3) 16159599516SKenneth E. Jansen duitarg(id,4) = den * ytargeti(id,4) 16259599516SKenneth E. Jansen duitarg(id,5) = den * (ei + rk) 16359599516SKenneth E. Jansenc Apply the sponge 16459599516SKenneth E. Jansen if(spongeContinuity.eq.1) 16559599516SKenneth E. Jansen & src(id,1) = -bcool(id)*(dui(id,1) - duitarg(id,1)) 16659599516SKenneth E. Jansen if(spongeMomentum1.eq.1) 16759599516SKenneth E. Jansen & src(id,2) = -bcool(id)*(dui(id,2) - duitarg(id,2)) 16859599516SKenneth E. Jansen if(spongeMomentum2.eq.1) 16959599516SKenneth E. Jansen & src(id,3) = -bcool(id)*(dui(id,3) - duitarg(id,3)) 17059599516SKenneth E. Jansen if(spongeMomentum3.eq.1) 17159599516SKenneth E. Jansen & src(id,4) = -bcool(id)*(dui(id,4) - duitarg(id,4)) 17259599516SKenneth E. Jansen if(spongeEnergy.eq.1) 17359599516SKenneth E. Jansen & src(id,5) = -bcool(id)*(dui(id,5) - duitarg(id,5)) 17459599516SKenneth E. Jansen endif 17559599516SKenneth E. Jansen enddo 17638a361e8SKenneth E. Jansen endif ! end of initial sponge circumvented for BL 17759599516SKenneth E. Jansen else 17859599516SKenneth E. Jansen if(isurf .ne. 1) then 17959599516SKenneth E. Jansen write(*,*) 'only vector (1) and cooling (4) implemented' 18059599516SKenneth E. Jansen stop 18159599516SKenneth E. Jansen endif 18259599516SKenneth E. Jansen endif 18359599516SKenneth E. Jansen 18459599516SKenneth E. Jansen if (isurf .eq. 1) then ! add the surface tension force 18559599516SKenneth E. Jansen src(:,2) = src(:,2) + rho(:)*sforce(:,1) 18659599516SKenneth E. Jansen src(:,3) = src(:,3) + rho(:)*sforce(:,2) 18759599516SKenneth E. Jansen src(:,4) = src(:,4) + rho(:)*sforce(:,3) 18859599516SKenneth E. Jansen src(:,5) = src(:,5) + (u1*sforce(:,1)+u2*sforce(:,2) 18959599516SKenneth E. Jansen & + u3*sforce(:,3))*rho(:) 19059599516SKenneth E. Jansen endif 19159599516SKenneth E. Jansen 19259599516SKenneth E. Jansenc 19359599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 19459599516SKenneth E. Jansenc 19559599516SKenneth E. Jansen if (ivart.gt.1) then 19659599516SKenneth E. Jansen rLyi(:,1) = rLyi(:,1) - src(:,1) 19759599516SKenneth E. Jansen rLyi(:,2) = rLyi(:,2) - src(:,2) 19859599516SKenneth E. Jansen rLyi(:,3) = rLyi(:,3) - src(:,3) 19959599516SKenneth E. Jansen rLyi(:,4) = rLyi(:,4) - src(:,4) 20059599516SKenneth E. Jansen rLyi(:,5) = rLyi(:,5) - src(:,5) 20159599516SKenneth E. Jansen endif 20259599516SKenneth E. Jansen 20359599516SKenneth E. Jansen if ((ires .eq. 1) .or. (ires .eq. 3)) then ! we need ri built 20459599516SKenneth E. Jansen ri (:,16) = ri (:,16) - src(:,1) 20559599516SKenneth E. Jansen ri (:,17) = ri (:,17) - src(:,2) 20659599516SKenneth E. Jansen ri (:,18) = ri (:,18) - src(:,3) 20759599516SKenneth E. Jansen ri (:,19) = ri (:,19) - src(:,4) 20859599516SKenneth E. Jansen ri (:,20) = ri (:,20) - src(:,5) 20959599516SKenneth E. Jansen 21059599516SKenneth E. Jansen endif 21159599516SKenneth E. Jansen 21259599516SKenneth E. Jansen if ((ires.eq.2) .or. (ires.eq.3)) then ! we need rmi built 21359599516SKenneth E. Jansen rmi (:,16) = rmi (:,16) - src(:,1) 21459599516SKenneth E. Jansen rmi (:,17) = rmi (:,17) - src(:,2) 21559599516SKenneth E. Jansen rmi (:,18) = rmi (:,18) - src(:,3) 21659599516SKenneth E. Jansen rmi (:,19) = rmi (:,19) - src(:,4) 21759599516SKenneth E. Jansen rmi (:,20) = rmi (:,20) - src(:,5) 21859599516SKenneth E. Jansen endif 21959599516SKenneth E. Jansenc 22059599516SKenneth E. Jansen return 22159599516SKenneth E. Jansen end 22259599516SKenneth E. Jansenc 22359599516SKenneth E. Jansenc 22459599516SKenneth E. Jansenc 22559599516SKenneth E. Jansen subroutine e3sourceSclr(Sclr, rho, rmu, 226513954efSKenneth E. Jansen & dist2w, vort, gVnrm, con, 22759599516SKenneth E. Jansen & g1yti, g2yti, g3yti, 22859599516SKenneth E. Jansen & rti, rLyti, srcp, 22959599516SKenneth E. Jansen & ycl, shape, u1, 23059599516SKenneth E. Jansen & u2, u3, xl, elDwl) 23159599516SKenneth E. Jansenc 23259599516SKenneth E. Jansenc--------------------------------------------------------------------- 23359599516SKenneth E. Jansenc 23459599516SKenneth E. Jansenc This routine calculates the source term indicated in the Spalart- 23559599516SKenneth E. Jansenc Allmaras eddy viscosity model. After term is stored in rti(:,4), 23659599516SKenneth E. Jansenc for later use by e3wmltSclr, and in rLyti(:) for later use by e3lsSclr. 23759599516SKenneth E. Jansenc 23859599516SKenneth E. Jansenc input: 23959599516SKenneth E. Jansenc Sclr (npro) : working turbulence variable 24059599516SKenneth E. Jansenc rho (npro) : density at intpt 24159599516SKenneth E. Jansenc rmu (npro) : molecular viscosity 24259599516SKenneth E. Jansenc dist2w (npro) : distance from intpt to the nearest wall 24359599516SKenneth E. Jansenc vort (npro) : magnitude of the vorticity 244513954efSKenneth E. Jansenc gVnrm (npro) : magnitude of the velocity gradient 24559599516SKenneth E. Jansenc con (npro) : conductivity 24659599516SKenneth E. Jansenc g1yti (npro) : grad-Sclr in direction 1 24759599516SKenneth E. Jansenc g2yti (npro) : grad-Sclr in direction 2 24859599516SKenneth E. Jansenc g3yti (npro) : grad-Sclr in direction 3 24959599516SKenneth E. Jansenc 25059599516SKenneth E. Jansenc output: 25159599516SKenneth E. Jansenc rti (npro,4) : components of residual at intpt 25259599516SKenneth E. Jansenc rLyti (npro) : GLS stabilization 25359599516SKenneth E. Jansenc 25459599516SKenneth E. Jansenc--------------------------------------------------------------------- 25559599516SKenneth E. Jansenc 25659599516SKenneth E. Jansen use turbSA 25759599516SKenneth E. Jansen include "common.h" 25859599516SKenneth E. Jansenc 25959599516SKenneth E. Jansen dimension Sclr (npro), ycl(npro,nshl,ndof), 26059599516SKenneth E. Jansen & dist2w (npro), shape(npro,nshl), 261513954efSKenneth E. Jansen & vort (npro), gVnrm(npro), rho (npro), 26259599516SKenneth E. Jansen & rmu (npro), con (npro), 26359599516SKenneth E. Jansen & g1yti (npro), g2yti (npro), 26459599516SKenneth E. Jansen & g3yti (npro), u1 (npro), 265779e4b51SKenneth E. Jansen & u2 (npro), u3 (npro), 266779e4b51SKenneth E. Jansen & rnu (npro) 26759599516SKenneth E. Jansenc 26859599516SKenneth E. Jansen dimension rti (npro,4), rLyti (npro) 26959599516SKenneth E. Jansenc 27059599516SKenneth E. Jansen dimension ft1 (npro), 27159599516SKenneth E. Jansenc unfix later -- pieces used in acusim: 27259599516SKenneth E. Jansen & srcrat (npro), vdgn (npro), 27359599516SKenneth E. Jansenc & term1 (npro), term2 (npro), 27459599516SKenneth E. Jansenc & term3 (npro), 27559599516SKenneth E. Jansenc 27659599516SKenneth E. Jansen & chi (npro), fv1 (npro), 27759599516SKenneth E. Jansen & fv2 (npro), Stilde (npro), 27859599516SKenneth E. Jansen & r (npro), g (npro), 27959599516SKenneth E. Jansen & fw (npro), ft2 (npro), 28059599516SKenneth E. Jansen & fv1p (npro), fv2p (npro), 28159599516SKenneth E. Jansen & stp (npro), rp (npro), 28259599516SKenneth E. Jansen & gp (npro), fwp (npro), 28359599516SKenneth E. Jansen & bf (npro), srcp (npro), 28459599516SKenneth E. Jansen & gp6 (npro), tmp (npro), 28559599516SKenneth E. Jansen & tmp1 (npro), fwog (npro) 28659599516SKenneth E. Jansen real*8 elDwl(npro) ! local quadrature point DES dvar 28759599516SKenneth E. Jansen real*8 sclrm(npro) ! modified for non-negativity 288513954efSKenneth E. Jansen real*8 saCb1Scale(npro) !Hack to change the production term and BL thickness 289513954efSKenneth E. Jansen real*8 xl_xbar(npro) !Hack to store mean x location of element. 29059599516SKenneth E. Jansenc... for levelset 29159599516SKenneth E. Jansen real*8 sign_levelset(npro), sclr_ls(npro), mytmp(npro), 29259599516SKenneth E. Jansen & xl(npro,nenl,nsd) 29359599516SKenneth E. Jansen 29459599516SKenneth E. Jansenc 295779e4b51SKenneth E. Jansen rnu=rmu/rho ! SA variable is nu_til not mu so nu needed in lots of places where xi=nu_til/nu 29659599516SKenneth E. Jansen if(iRANS.lt.0) then ! spalart almaras model 297779e4b51SKenneth E. Jansen sclrm=max(rnu/100.0,Sclr) ! sets a floor on SCLR 29859599516SKenneth E. Jansen if(iles.lt.0) then 29959599516SKenneth E. Jansen do i=1,npro 30059599516SKenneth E. Jansen dx=maxval(xl(i,:,1))-minval(xl(i,:,1)) 30159599516SKenneth E. Jansen dy=maxval(xl(i,:,2))-minval(xl(i,:,2)) 30259599516SKenneth E. Jansen dz=maxval(xl(i,:,3))-minval(xl(i,:,3)) 30359599516SKenneth E. Jansen dmax=max(dx,max(dy,dz)) 30459599516SKenneth E. Jansen dmax=0.65d0*dmax 305513954efSKenneth E. Jansen if( iles.eq.-1) then !original DES97 30659599516SKenneth E. Jansen dist2w(i)=min(dmax,dist2w(i)) 307513954efSKenneth E. Jansen elseif(iles.eq.-2) then ! DDES 308513954efSKenneth E. Jansen rd=sclrm(i)*saKappaP2Inv/(dist2w(i)**2*gVnrm(i)+1.0d-12) 309513954efSKenneth E. Jansen fd=one-tanh((8.0000000000000000d0*rd)**3) 310513954efSKenneth E. Jansen dist2w(i)=dist2w(i)-fd*max(zero,dist2w(i)-dmax) 311513954efSKenneth E. Jansen endif 31259599516SKenneth E. Jansen enddo 31359599516SKenneth E. Jansen endif 31459599516SKenneth E. Jansen 31559599516SKenneth E. Jansen elDwl(:)=elDwl(:)+dist2w(:) 31659599516SKenneth E. Jansenc 31759599516SKenneth E. Jansenc determine chi 318779e4b51SKenneth E. Jansen chi = sclrm/rnu 31959599516SKenneth E. Jansenc determine f_v1 32059599516SKenneth E. Jansen fv1 = chi**3/(chi**3+saCv1**3) 32159599516SKenneth E. Jansenc determine f_v2 32259599516SKenneth E. Jansen fv2 = one - chi/(one+chi*fv1) 32359599516SKenneth E. Jansenc determine Stilde 32459599516SKenneth E. Jansen Stilde = vort + sclrm*fv2/(saKappa*dist2w)**2!unfix 32559599516SKenneth E. Jansenc determine r 32659599516SKenneth E. Jansen where(Stilde(:).ne.zero) 32759599516SKenneth E. Jansen r(:) = sclrm(:)/Stilde(:)/(saKappa*dist2w(:))**2 32859599516SKenneth E. Jansen elsewhere 32959599516SKenneth E. Jansen r(:) = 1.0d32 33059599516SKenneth E. Jansen endwhere 33159599516SKenneth E. Jansenc determine g 33259599516SKenneth E. Jansen saCw3l=saCw3 33359599516SKenneth E. Jansen g = r + saCw2*(r**6-r) 33459599516SKenneth E. Jansen sixth = 1.0/6.0 33559599516SKenneth E. Jansenc gp = rp * (tmp + 5 * saCw2 * rP5) 33659599516SKenneth E. Jansenc 33759599516SKenneth E. Jansenc gP6 = (g * g * g) ** 2 33859599516SKenneth E. Jansenc tmp = 1 / (gP6 + (saCw3*saCw3*saCw3)**2) 33959599516SKenneth E. Jansenc tmp1 = ( (1 + (saCw3*saCw3*saCw3)**2) * tmp ) ** sixth 34059599516SKenneth E. Jansenc fw = g * tmp1 34159599516SKenneth E. Jansenc fwp = gp * tmp1 * (saCw3*saCw3*saCw3)**2 * tmp 34259599516SKenneth E. Jansenc determine f_w and f_w/g 34359599516SKenneth E. Jansen fwog = ((one+saCw3**6)/(g**6+saCw3**6))**sixth 34459599516SKenneth E. Jansen fw = g*fwog 34559599516SKenneth E. Jansenc determine f_t2 34659599516SKenneth E. Jansenc ft2 = ct3*exp(-ct4*chi**2) 34759599516SKenneth E. Jansen ft2 = zero 34859599516SKenneth E. Jansen 34959599516SKenneth E. Jansenc srcrat=saCb1*(one-ft2)*Stilde*sclrm 35059599516SKenneth E. Jansenc & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 35159599516SKenneth E. Jansenc srcrat=srcrat/sclrm 35259599516SKenneth E. Jansen 353513954efSKenneth E. Jansen!---------------------------------------------------------------------------- 354513954efSKenneth E. Jansen!HACK: lower the EV production rate within a region to decrease BL thickness. 355513954efSKenneth E. Jansen! Appear NM was not finished yet if(scrScaleEnable) then 356513954efSKenneth E. Jansen if(one.eq.zero) then 357513954efSKenneth E. Jansen do i = 1,nenl !average the x-locations 358513954efSKenneth E. Jansen xl_xbar(:) = xl_xbar(:) + xl(:,i,1) 359513954efSKenneth E. Jansen enddo 360513954efSKenneth E. Jansen xl_xbar = xl_xbar/nenl 361513954efSKenneth E. Jansen 362513954efSKenneth E. Jansen saCb1Scale = one 363513954efSKenneth E. Jansen where(xl_xbar < saCb1alterXmin .and. xl_xbar > saCb1alterXmax) 364513954efSKenneth E. Jansen saCb1Scale(:) = seCb1alter 365513954efSKenneth E. Jansen endwhere 366513954efSKenneth E. Jansen 367513954efSKenneth E. Jansen srcrat = saCb1Scale*saCb1*(one-ft2)*Stilde 368513954efSKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 369513954efSKenneth E. Jansen else 37059599516SKenneth E. Jansen srcrat=saCb1*(one-ft2)*Stilde 37159599516SKenneth E. Jansen & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 372513954efSKenneth E. Jansen endif 373513954efSKenneth E. Jansen 374513954efSKenneth E. Jansen!Original: 375513954efSKenneth E. Jansen! srcrat=saCb1*(one-ft2)*Stilde 376513954efSKenneth E. Jansen! & -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w) 377513954efSKenneth E. Jansen!End Hack 378513954efSKenneth E. Jansen!---------------------------------------------------------------------------- 37959599516SKenneth E. Jansen 38059599516SKenneth E. Jansenc 38159599516SKenneth E. Jansenc term1=saCb1*(one-ft2)*Stilde*sclrm 38259599516SKenneth E. Jansenc term2=saCb2*saSigmaInv*(g1yti**2+g2yti**2+g3yti**2) 38359599516SKenneth E. Jansenc term3=-(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2 38459599516SKenneth E. Jansenc determine d()/d(sclrm) 385779e4b51SKenneth E. Jansen fv1p = 3*(saCv1**3)*(chi**2) 386779e4b51SKenneth E. Jansen! fv1p = 3*(saCv1**3)*(chi**2) 387779e4b51SKenneth E. Jansen! rho stays as chi=nutil/nu = rho nutil/mu -> dxi/dnutil=rho/rmu 388779e4b51SKenneth E. Jansen fv1p = fv1p/(rnu*(chi**3+saCv1**3)**2) 389779e4b51SKenneth E. Jansen fv2p = (chi**2)*fv1p-(one/rnu) 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. Jansenc determine d(source)/d(sclrm) 408779e4b51SKenneth E. Jansen srcp = saCb1*(sclrm*stp+Stilde) 409779e4b51SKenneth E. Jansen & -saCw1*(fwp*sclrm**2 + 2*sclrm*fw)/dist2w**2 41059599516SKenneth E. Jansen do i=1, npro 41159599516SKenneth E. Jansen if(srcp(i).le.zero .and. srcp(i).le.srcrat(i)) then 41259599516SKenneth E. Jansen srcp(i)=srcp(i) 41359599516SKenneth E. Jansen else if(srcrat(i).lt.zero) then 41459599516SKenneth E. Jansen srcp(i)=srcrat(i) 41559599516SKenneth E. Jansen else 41659599516SKenneth E. Jansen srcp(i)=zero 41759599516SKenneth E. Jansen endif 41859599516SKenneth E. Jansen enddo 41959599516SKenneth E. Jansenc 42059599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 42159599516SKenneth E. Jansenc 42259599516SKenneth E. Jansenc if ((ires .eq. 1) .or. (ires .eq. 3)) then 42359599516SKenneth E. Jansen rti (:,4) = rti (:,4) - bf(:) 42459599516SKenneth E. Jansenc endif !ires 42559599516SKenneth E. Jansen 42659599516SKenneth E. Jansenc rmti (:,4) = rmti (:,4) - bf(:) 42759599516SKenneth E. Jansen rLyti(:) = rLyti(:) - bf(:) 42859599516SKenneth E. Jansenc 42959599516SKenneth E. Jansen elseif (iLSet.ne.0) then 43059599516SKenneth E. Jansen if (isclr.eq.1) then 43159599516SKenneth E. Jansen srcp = zero 43259599516SKenneth E. Jansen 43359599516SKenneth E. Jansen elseif (isclr.eq.2) then !we are redistancing level-sets 43459599516SKenneth E. Jansen 43559599516SKenneth E. Jansen sclr_ls = zero !zero out temp variable 43659599516SKenneth E. Jansen 43759599516SKenneth E. Jansen do ii=1,npro 43859599516SKenneth E. Jansen 43959599516SKenneth E. Jansen do jj = 1, nshl ! first find the value of levelset at point ii 44059599516SKenneth E. Jansen 44159599516SKenneth E. Jansen sclr_ls(ii) = sclr_ls(ii) 44259599516SKenneth E. Jansen & + shape(ii,jj) * ycl(ii,jj,6) 44359599516SKenneth E. Jansen 44459599516SKenneth E. Jansen enddo 44559599516SKenneth E. Jansen 44659599516SKenneth E. Jansen if (sclr_ls(ii) .lt. - epsilon_ls)then 44759599516SKenneth E. Jansen 44859599516SKenneth E. Jansen sign_levelset(ii) = - one 44959599516SKenneth E. Jansen 45059599516SKenneth E. Jansen elseif (abs(sclr_ls(ii)) .le. epsilon_ls)then 45159599516SKenneth E. Jansenc sign_levelset(ii) = zero 45259599516SKenneth E. Jansenc 45359599516SKenneth E. Jansen sign_levelset(ii) =sclr_ls(ii)/epsilon_ls 45459599516SKenneth E. Jansen & + sin(pi*sclr_ls(ii)/epsilon_ls)/pi 45559599516SKenneth E. Jansen 45659599516SKenneth E. Jansen 45759599516SKenneth E. Jansen elseif (sclr_ls(ii) .gt. epsilon_ls) then 45859599516SKenneth E. Jansen 45959599516SKenneth E. Jansen sign_levelset(ii) = one 46059599516SKenneth E. Jansen 46159599516SKenneth E. Jansen endif 46259599516SKenneth E. Jansen srcp(ii) = sign_levelset(ii) 46359599516SKenneth E. Jansen 46459599516SKenneth E. Jansen enddo 46559599516SKenneth E. Jansenc 46659599516SKenneth E. Jansenc ad The redistancing equation can be written in the following form 46759599516SKenneth E. Jansenc ad 46859599516SKenneth E. Jansenc ad d_{,t} + sign(phi)*( d_{,i}/|d_{,i}| )* d_{,i} = sign(phi) 46959599516SKenneth E. Jansenc ad 47059599516SKenneth E. Jansenc ad This is rewritten in the form 47159599516SKenneth E. Jansenc ad 47259599516SKenneth E. Jansenc ad d_{,t} + u * d_{,i} = sign(phi) 47359599516SKenneth E. Jansenc ad 47459599516SKenneth E. Jansen 47559599516SKenneth E. Jansenc$$$ CAD For the redistancing equation the "pseudo velocity" term is 47659599516SKenneth E. Jansenc$$$ CAD calculated as follows 47759599516SKenneth E. Jansen 47859599516SKenneth E. Jansen 47959599516SKenneth E. Jansen 48059599516SKenneth E. Jansen mytmp = srcp(:) / sqrt( g1yti(:) * g1yti(:) 48159599516SKenneth E. Jansen & + g2yti(:) * g2yti(:) 48259599516SKenneth E. Jansen & + g3yti(:) * g3yti(:) ) 48359599516SKenneth E. Jansen 48459599516SKenneth E. Jansen u1 = mytmp(:) * g1yti(:) 48559599516SKenneth E. Jansen u2 = mytmp(:) * g2yti(:) 48659599516SKenneth E. Jansen u3 = mytmp(:) * g3yti(:) 48759599516SKenneth E. Jansenc 48859599516SKenneth E. Jansenc==========================>> IRES = 1 or 3 <<======================= 48959599516SKenneth E. Jansenc 49059599516SKenneth E. Jansenc if ((ires .eq. 1) .or. (ires .eq. 3)) then 49159599516SKenneth E. Jansen rti (:,4) = rti (:,4) - srcp(:) 49259599516SKenneth E. Jansenc endif !ires 49359599516SKenneth E. Jansen 49459599516SKenneth E. Jansenc rmti (:,4) = rmti (:,4) - srcp(:) 49559599516SKenneth E. Jansen rLyti(:) = rLyti(:) - srcp(:) 49659599516SKenneth E. Jansenc 49759599516SKenneth E. Jansen endif ! close of scalar 2 of level set 49859599516SKenneth E. Jansen 49959599516SKenneth E. Jansen else ! NOT turbulence and NOT level set so this is a simple 50059599516SKenneth E. Jansen ! scalar. If your scalar equation has a source term 50159599516SKenneth E. Jansen ! then add your own like the above but leave an unforced case 50259599516SKenneth E. Jansen ! as an option like you see here 50359599516SKenneth E. Jansen 50459599516SKenneth E. Jansen srcp = zero 50559599516SKenneth E. Jansen endif 50659599516SKenneth E. Jansen 50759599516SKenneth E. Jansen 50859599516SKenneth E. Jansenc 50959599516SKenneth E. Jansenc.... Return and end 51059599516SKenneth E. Jansenc 51159599516SKenneth E. Jansen return 51259599516SKenneth E. Jansen end 51359599516SKenneth E. Jansen 514