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