xref: /phasta/phSolver/compressible/e3source.f (revision 38a361e8033072fa0b5376e424dddd3efa5a65d5)
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