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