xref: /phasta/phSolver/compressible/e3source.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine e3source  (ri,        rmi,          rlyi,
2*59599516SKenneth E. Jansen     &                        rho,       u1,           u2,
3*59599516SKenneth E. Jansen     &                        u3,        pres,         sforce,
4*59599516SKenneth E. Jansen     &                        dui,       dxidx,        ytargetl,
5*59599516SKenneth E. Jansen     &                        xl,        shpfun,       bcool)
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc----------------------------------------------------------------------
8*59599516SKenneth E. Jansenc
9*59599516SKenneth E. Jansenc This routine calculates the contribution of the bodyforce and surface
10*59599516SKenneth E. Jansenc tension force operator to the RHS vector and LHS tangent matrix. The
11*59599516SKenneth E. Jansenc temporary results are put in ri.
12*59599516SKenneth E. Jansenc
13*59599516SKenneth E. Jansenc  u1    (npro)               : x1-velocity component
14*59599516SKenneth E. Jansenc  u2    (npro)               : x2-velocity component
15*59599516SKenneth E. Jansenc  u3    (npro)               : x3-velocity component
16*59599516SKenneth E. Jansenc  ri     (npro,nflow*(nsd+1)) : partial residual
17*59599516SKenneth E. Jansenc  rmi    (npro,nflow*(nsd+1)) : partial modified residual
18*59599516SKenneth E. Jansenc  rLyi  (npro,nflow)          : least-squares residual vector
19*59599516SKenneth E. Jansenc  shape (npro,nshl)          : element shape functions
20*59599516SKenneth E. Jansenc  g1yti  (npro)                : grad-Sclr in direction 1 at intpt
21*59599516SKenneth E. Jansenc  g2yti  (npro)                : grad-Sclr in direction 2 at intpt
22*59599516SKenneth E. Jansenc  g3yti  (npro)                : grad-Sclr in direction 3 at intpt
23*59599516SKenneth E. Jansenc
24*59599516SKenneth E. Jansen      use turbSA
25*59599516SKenneth E. Jansen      use specialBC
26*59599516SKenneth E. Jansen      include "common.h"
27*59599516SKenneth E. Jansenc
28*59599516SKenneth E. Jansen      dimension ri(npro,nflow*(nsd+1)),     rmi(npro,nflow*(nsd+1)),
29*59599516SKenneth E. Jansen     &            u1(npro),                  u2(npro),
30*59599516SKenneth E. Jansen     &            u3(npro),                  rho(npro),
31*59599516SKenneth E. Jansen     &            pres(npro),
32*59599516SKenneth E. Jansen     &            rLyi(npro,nflow),          sforce(npro,3),
33*59599516SKenneth E. Jansen     &            shpfun(npro,nshl),
34*59599516SKenneth E. Jansen     &            xl(npro,nenl,3),           xx(npro,3)
35*59599516SKenneth E. Jansen
36*59599516SKenneth E. Jansen      real*8 ytargeti(npro,nflow), ytargetl(npro,nshl,nflow)
37*59599516SKenneth E. Jansen
38*59599516SKenneth E. Jansen      real*8 src(npro,nflow), bcool(npro),
39*59599516SKenneth E. Jansen     &       dui(npro,nflow), duitarg(npro,nflow),
40*59599516SKenneth E. Jansen     &       dxidx( npro, nsd, nsd), xfind( npro ), delta(npro), rat
41*59599516SKenneth E. Jansenc
42*59599516SKenneth E. Jansenc......contribution of body force
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansen      bcool=zero
45*59599516SKenneth E. Jansen      src=zero
46*59599516SKenneth E. Jansenc
47*59599516SKenneth E. Jansen
48*59599516SKenneth E. Jansen
49*59599516SKenneth E. Jansen      if(matflg(5,1).eq.1) then ! usual case
50*59599516SKenneth E. Jansen         src(:,1) = zero
51*59599516SKenneth E. Jansen         src(:,2) = rho(:) * datmat(1,5,1)
52*59599516SKenneth E. Jansen         src(:,3) = rho(:) * datmat(2,5,1)
53*59599516SKenneth E. Jansen         src(:,4) = rho(:) * datmat(3,5,1)
54*59599516SKenneth E. Jansen         src(:,5) = u1*src(:,2) + u2*src(:,3) + u3*src(:,4)
55*59599516SKenneth E. Jansen      else if(matflg(5,1).eq.3) then ! user supplied white noise
56*59599516SKenneth E. Jansen
57*59599516SKenneth E. Jansen         xsor = 18
58*59599516SKenneth E. Jansenc            ampl = spamp(lstep+1)
59*59599516SKenneth E. Jansenc            rat = Delt(1)/0.1
60*59599516SKenneth E. Jansen         ampl = 0.002*exp(-(0.1248222*(lstep)-2.9957323)**2)
61*59599516SKenneth E. Jansenc            if((myrank.eq.zero).and.(intp.eq.ngauss)) write(*,*) ampl
62*59599516SKenneth E. Jansen         delta(:) = 0.5*sqrt(dxidx(:,1,1)*dxidx(:,1,1) ! 1/dx
63*59599516SKenneth E. Jansen     .            +dxidx(:,2,1)*dxidx(:,2,1)
64*59599516SKenneth E. Jansen     .            +dxidx(:,3,1)*dxidx(:,3,1))
65*59599516SKenneth E. Jansen         do i=1,npro
66*59599516SKenneth E. Jansen            xfind(i) = (xsor-minval(xl(i,:,1)))
67*59599516SKenneth E. Jansen     &               *(maxval(xl(i,:,1))-xsor)
68*59599516SKenneth E. Jansen         enddo
69*59599516SKenneth E. Jansen
70*59599516SKenneth E. Jansen         where ( xfind .ge. 0. )
71*59599516SKenneth E. Jansen            src(:,2) = rho(:) * ampl * delta
72*59599516SKenneth E. Jansenc             scaling by element size is removed not to mess up
73*59599516SKenneth E. Jansenc             refinement  studies
74*59599516SKenneth E. Jansenc              src(:,2) = rho(:) * ampl
75*59599516SKenneth E. Jansen            src(:,5) = u1*src(:,2)
76*59599516SKenneth E. Jansen         endwhere
77*59599516SKenneth E. Jansen
78*59599516SKenneth E. Jansen      else if(matflg(5,1).ge.4) then ! cool case (sponge outside of a
79*59599516SKenneth E. Jansen                                     ! revolved box defined from zinSponge to
80*59599516SKenneth E. Jansen                                     ! zoutSponge in axial extent and 0
81*59599516SKenneth E. Jansen                                     ! to radSponge in radial extent for
82*59599516SKenneth E. Jansen                                     ! all theta)
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansenc           determine coordinates of quadrature pt
85*59599516SKenneth E. Jansen            xx=zero
86*59599516SKenneth E. Jansen            do n  = 1,nenl
87*59599516SKenneth E. Jansen               xx(:,1) = xx(:,1)  + shpfun(:,n) * xl(:,n,1)
88*59599516SKenneth E. Jansen               xx(:,2) = xx(:,2)  + shpfun(:,n) * xl(:,n,2)
89*59599516SKenneth E. Jansen               xx(:,3) = xx(:,3)  + shpfun(:,n) * xl(:,n,3)
90*59599516SKenneth E. Jansen            enddo
91*59599516SKenneth E. Jansen            ytargeti=zero
92*59599516SKenneth E. Jansen            do j=1,nflow
93*59599516SKenneth E. Jansen               do n=1,nshl
94*59599516SKenneth E. Jansen                  ytargeti(:,j) = ytargeti(:,j)
95*59599516SKenneth E. Jansen     &                          + shpfun(:,n)*ytargetl(:,n,j)
96*59599516SKenneth E. Jansen               enddo
97*59599516SKenneth E. Jansen            enddo
98*59599516SKenneth E. Jansen
99*59599516SKenneth E. Jansen
100*59599516SKenneth E. Jansenc            we=3.0*29./682.
101*59599516SKenneth E. Jansen            rsteep=3.0
102*59599516SKenneth E. Jansen            src=zero
103*59599516SKenneth E. Jansen            radsts=radSponge*radSponge
104*59599516SKenneth E. Jansen            CoefRatioI2O = grthISponge/grthOSponge
105*59599516SKenneth E. Jansen            do id=1,npro
106*59599516SKenneth E. Jansen               radsqr=xx(id,2)**2+xx(id,1)**2
107*59599516SKenneth E. Jansen               if(xx(id,3).lt. zinSponge) then  ! map this into big outflow
108*59599516SKenneth E. Jansen                                                ! sponge to keep logic
109*59599516SKenneth E. Jansen                                                ! below simple
110*59599516SKenneth E. Jansen
111*59599516SKenneth E. Jansen                  xx(id,3)=(zinSponge-xx(id,3))*CoefRatioI2O
112*59599516SKenneth E. Jansen     &                    + zoutSponge
113*59599516SKenneth E. Jansen !
114*59599516SKenneth E. Jansen !    CoefRatioI2O is the ratio of the inlet quadratic coefficient to the
115*59599516SKenneth E. Jansen !    outlet quadratic coeficient (basically how much faster sponge
116*59599516SKenneth E. Jansen !    coefficient grows in inlet region relative to outlet region)
117*59599516SKenneth E. Jansen !
118*59599516SKenneth E. Jansen               endif
119*59599516SKenneth E. Jansen               if((xx(id,3).gt.zoutSponge).or.(radsqr.gt.radsts))  then
120*59599516SKenneth E. Jansen                  rad=sqrt(radsqr)
121*59599516SKenneth E. Jansen                  radc=max(rad,radSponge)
122*59599516SKenneth E. Jansen                  zval=max(xx(id,3),zoutSponge)
123*59599516SKenneth E. Jansen                  bcool(id)=grthOSponge*((zval-zoutSponge)**2
124*59599516SKenneth E. Jansen     &                                   +(radc-radSponge)**2)
125*59599516SKenneth E. Jansen                  bcool(id)=min(bcool(id),betamax)
126*59599516SKenneth E. Jansenc     Determine the resulting density and energies
127*59599516SKenneth E. Jansen               den   = ytargeti(id,1) / (Rgas * ytargeti(id,5))
128*59599516SKenneth E. Jansen               ei    = ytargeti(id,5) * ( Rgas / gamma1 )
129*59599516SKenneth E. Jansen               rk    = pt5 * ( ytargeti(id,2)**2+ytargeti(id,3)**2
130*59599516SKenneth E. Jansen     &                                         +ytargeti(id,4)**2 )
131*59599516SKenneth E. Jansenc     Determine the resulting conservation variables
132*59599516SKenneth E. Jansen               duitarg(id,1) = den
133*59599516SKenneth E. Jansen               duitarg(id,2) = den * ytargeti(id,2)
134*59599516SKenneth E. Jansen               duitarg(id,3) = den * ytargeti(id,3)
135*59599516SKenneth E. Jansen               duitarg(id,4) = den * ytargeti(id,4)
136*59599516SKenneth E. Jansen               duitarg(id,5) = den * (ei + rk)
137*59599516SKenneth E. Jansenc     Apply the sponge
138*59599516SKenneth E. Jansen               if(spongeContinuity.eq.1)
139*59599516SKenneth E. Jansen     &           src(id,1) = -bcool(id)*(dui(id,1) - duitarg(id,1))
140*59599516SKenneth E. Jansen               if(spongeMomentum1.eq.1)
141*59599516SKenneth E. Jansen     &           src(id,2) = -bcool(id)*(dui(id,2) - duitarg(id,2))
142*59599516SKenneth E. Jansen               if(spongeMomentum2.eq.1)
143*59599516SKenneth E. Jansen     &           src(id,3) = -bcool(id)*(dui(id,3) - duitarg(id,3))
144*59599516SKenneth E. Jansen               if(spongeMomentum3.eq.1)
145*59599516SKenneth E. Jansen     &           src(id,4) = -bcool(id)*(dui(id,4) - duitarg(id,4))
146*59599516SKenneth E. Jansen               if(spongeEnergy.eq.1)
147*59599516SKenneth E. Jansen     &           src(id,5) = -bcool(id)*(dui(id,5) - duitarg(id,5))
148*59599516SKenneth E. Jansen            endif
149*59599516SKenneth E. Jansen         enddo
150*59599516SKenneth E. Jansen      else
151*59599516SKenneth E. Jansen         if(isurf .ne. 1) then
152*59599516SKenneth E. Jansen            write(*,*) 'only vector (1) and cooling (4) implemented'
153*59599516SKenneth E. Jansen            stop
154*59599516SKenneth E. Jansen         endif
155*59599516SKenneth E. Jansen      endif
156*59599516SKenneth E. Jansen
157*59599516SKenneth E. Jansen      if (isurf .eq. 1) then    ! add the surface tension force
158*59599516SKenneth E. Jansen         src(:,2) = src(:,2) +  rho(:)*sforce(:,1)
159*59599516SKenneth E. Jansen         src(:,3) = src(:,3) +  rho(:)*sforce(:,2)
160*59599516SKenneth E. Jansen         src(:,4) = src(:,4) +  rho(:)*sforce(:,3)
161*59599516SKenneth E. Jansen         src(:,5) = src(:,5) + (u1*sforce(:,1)+u2*sforce(:,2)
162*59599516SKenneth E. Jansen     &                       + u3*sforce(:,3))*rho(:)
163*59599516SKenneth E. Jansen      endif
164*59599516SKenneth E. Jansen
165*59599516SKenneth E. Jansenc
166*59599516SKenneth E. Jansenc==========================>>  IRES = 1 or 3  <<=======================
167*59599516SKenneth E. Jansenc
168*59599516SKenneth E. Jansen      if (ivart.gt.1) then
169*59599516SKenneth E. Jansen         rLyi(:,1) = rLyi(:,1) - src(:,1)
170*59599516SKenneth E. Jansen         rLyi(:,2) = rLyi(:,2) - src(:,2)
171*59599516SKenneth E. Jansen         rLyi(:,3) = rLyi(:,3) - src(:,3)
172*59599516SKenneth E. Jansen         rLyi(:,4) = rLyi(:,4) - src(:,4)
173*59599516SKenneth E. Jansen         rLyi(:,5) = rLyi(:,5) - src(:,5)
174*59599516SKenneth E. Jansen      endif
175*59599516SKenneth E. Jansen
176*59599516SKenneth E. Jansen      if ((ires .eq. 1) .or. (ires .eq. 3)) then ! we need ri built
177*59599516SKenneth E. Jansen         ri (:,16) = ri (:,16) -  src(:,1)
178*59599516SKenneth E. Jansen         ri (:,17) = ri (:,17) -  src(:,2)
179*59599516SKenneth E. Jansen         ri (:,18) = ri (:,18) -  src(:,3)
180*59599516SKenneth E. Jansen         ri (:,19) = ri (:,19) -  src(:,4)
181*59599516SKenneth E. Jansen         ri (:,20) = ri (:,20) -  src(:,5)
182*59599516SKenneth E. Jansen
183*59599516SKenneth E. Jansen      endif
184*59599516SKenneth E. Jansen
185*59599516SKenneth E. Jansen      if ((ires.eq.2) .or. (ires.eq.3)) then ! we need rmi built
186*59599516SKenneth E. Jansen         rmi (:,16) = rmi (:,16) -  src(:,1)
187*59599516SKenneth E. Jansen         rmi (:,17) = rmi (:,17) -  src(:,2)
188*59599516SKenneth E. Jansen         rmi (:,18) = rmi (:,18) -  src(:,3)
189*59599516SKenneth E. Jansen         rmi (:,19) = rmi (:,19) -  src(:,4)
190*59599516SKenneth E. Jansen         rmi (:,20) = rmi (:,20) -  src(:,5)
191*59599516SKenneth E. Jansen      endif
192*59599516SKenneth E. Jansenc
193*59599516SKenneth E. Jansen      return
194*59599516SKenneth E. Jansen      end
195*59599516SKenneth E. Jansenc
196*59599516SKenneth E. Jansenc
197*59599516SKenneth E. Jansenc
198*59599516SKenneth E. Jansen      subroutine e3sourceSclr(Sclr,    rho,    rmu,
199*59599516SKenneth E. Jansen     &                          dist2w,  vort,   con,
200*59599516SKenneth E. Jansen     &                          g1yti,   g2yti,  g3yti,
201*59599516SKenneth E. Jansen     &                          rti,     rLyti,  srcp,
202*59599516SKenneth E. Jansen     &                          ycl,      shape,  u1,
203*59599516SKenneth E. Jansen     &                          u2,      u3,      xl, elDwl)
204*59599516SKenneth E. Jansenc
205*59599516SKenneth E. Jansenc---------------------------------------------------------------------
206*59599516SKenneth E. Jansenc
207*59599516SKenneth E. Jansenc  This routine calculates the source term indicated in the Spalart-
208*59599516SKenneth E. Jansenc  Allmaras eddy viscosity model.  After term is stored in rti(:,4),
209*59599516SKenneth E. Jansenc  for later use by e3wmltSclr, and in rLyti(:) for later use by e3lsSclr.
210*59599516SKenneth E. Jansenc
211*59599516SKenneth E. Jansenc input:
212*59599516SKenneth E. Jansenc  Sclr   (npro)              : working turbulence variable
213*59599516SKenneth E. Jansenc  rho    (npro)              : density at intpt
214*59599516SKenneth E. Jansenc  rmu    (npro)              : molecular viscosity
215*59599516SKenneth E. Jansenc  dist2w (npro)              : distance from intpt to the nearest wall
216*59599516SKenneth E. Jansenc  vort   (npro)              : magnitude of the vorticity
217*59599516SKenneth E. Jansenc  con    (npro)              : conductivity
218*59599516SKenneth E. Jansenc  g1yti  (npro)              : grad-Sclr in direction 1
219*59599516SKenneth E. Jansenc  g2yti  (npro)              : grad-Sclr in direction 2
220*59599516SKenneth E. Jansenc  g3yti  (npro)              : grad-Sclr in direction 3
221*59599516SKenneth E. Jansenc
222*59599516SKenneth E. Jansenc output:
223*59599516SKenneth E. Jansenc  rti    (npro,4)            : components of residual at intpt
224*59599516SKenneth E. Jansenc  rLyti  (npro)              : GLS stabilization
225*59599516SKenneth E. Jansenc
226*59599516SKenneth E. Jansenc---------------------------------------------------------------------
227*59599516SKenneth E. Jansenc
228*59599516SKenneth E. Jansen      use turbSA
229*59599516SKenneth E. Jansen      include "common.h"
230*59599516SKenneth E. Jansenc
231*59599516SKenneth E. Jansen      dimension Sclr   (npro),        ycl(npro,nshl,ndof),
232*59599516SKenneth E. Jansen     &          dist2w (npro),          shape(npro,nshl),
233*59599516SKenneth E. Jansen     &          vort   (npro),             rho    (npro),
234*59599516SKenneth E. Jansen     &          rmu    (npro),             con    (npro),
235*59599516SKenneth E. Jansen     &          g1yti  (npro),             g2yti  (npro),
236*59599516SKenneth E. Jansen     &          g3yti  (npro),             u1     (npro),
237*59599516SKenneth E. Jansen     &          u2     (npro),             u3     (npro)
238*59599516SKenneth E. Jansenc
239*59599516SKenneth E. Jansen      dimension rti    (npro,4),           rLyti  (npro)
240*59599516SKenneth E. Jansenc
241*59599516SKenneth E. Jansen      dimension ft1    (npro),
242*59599516SKenneth E. Jansenc unfix later -- pieces used in acusim:
243*59599516SKenneth E. Jansen     &          srcrat (npro),             vdgn   (npro),
244*59599516SKenneth E. Jansenc    &          term1  (npro),             term2  (npro),
245*59599516SKenneth E. Jansenc    &          term3  (npro),
246*59599516SKenneth E. Jansenc
247*59599516SKenneth E. Jansen     &          chi    (npro),             fv1    (npro),
248*59599516SKenneth E. Jansen     &          fv2    (npro),             Stilde (npro),
249*59599516SKenneth E. Jansen     &          r      (npro),             g      (npro),
250*59599516SKenneth E. Jansen     &          fw     (npro),             ft2    (npro),
251*59599516SKenneth E. Jansen     &          fv1p   (npro),             fv2p   (npro),
252*59599516SKenneth E. Jansen     &          stp    (npro),             rp     (npro),
253*59599516SKenneth E. Jansen     &          gp     (npro),             fwp    (npro),
254*59599516SKenneth E. Jansen     &          bf     (npro),             srcp   (npro),
255*59599516SKenneth E. Jansen     &          gp6    (npro),             tmp    (npro),
256*59599516SKenneth E. Jansen     &          tmp1   (npro),             fwog   (npro)
257*59599516SKenneth E. Jansen	real*8 elDwl(npro) ! local quadrature point DES dvar
258*59599516SKenneth E. Jansen	real*8 sclrm(npro) ! modified for non-negativity
259*59599516SKenneth E. Jansenc... for levelset
260*59599516SKenneth E. Jansen      real*8  sign_levelset(npro), sclr_ls(npro), mytmp(npro),
261*59599516SKenneth E. Jansen     & 		xl(npro,nenl,nsd)
262*59599516SKenneth E. Jansen
263*59599516SKenneth E. Jansenc
264*59599516SKenneth E. Jansen      if(iRANS.lt.0) then    ! spalart almaras model
265*59599516SKenneth E. Jansen	sclrm=max(rmu/100.0,Sclr)
266*59599516SKenneth E. Jansen	if(iles.lt.0) then
267*59599516SKenneth E. Jansen	do i=1,npro
268*59599516SKenneth E. Jansen         dx=maxval(xl(i,:,1))-minval(xl(i,:,1))
269*59599516SKenneth E. Jansen         dy=maxval(xl(i,:,2))-minval(xl(i,:,2))
270*59599516SKenneth E. Jansen         dz=maxval(xl(i,:,3))-minval(xl(i,:,3))
271*59599516SKenneth E. Jansen         dmax=max(dx,max(dy,dz))
272*59599516SKenneth E. Jansenc....    limit edge length for DES based on SA model
273*59599516SKenneth E. Jansenc....    (only useful when DES_SA_hmin is greater than 0.0 as element lengths are positive)
274*59599516SKenneth E. Jansen         dmax=max(DES_SA_hmin,dmax)
275*59599516SKenneth E. Jansen         dmax=0.65d0*dmax
276*59599516SKenneth E. Jansen         dist2w(i)=min(dmax,dist2w(i))
277*59599516SKenneth E. Jansen        enddo
278*59599516SKenneth E. Jansen	endif
279*59599516SKenneth E. Jansen
280*59599516SKenneth E. Jansen	elDwl(:)=elDwl(:)+dist2w(:)
281*59599516SKenneth E. Jansenc
282*59599516SKenneth E. Jansenc  determine chi
283*59599516SKenneth E. Jansen        chi = rho*sclrm/rmu
284*59599516SKenneth E. Jansenc  determine f_v1
285*59599516SKenneth E. Jansen        fv1 = chi**3/(chi**3+saCv1**3)
286*59599516SKenneth E. Jansenc  determine f_v2
287*59599516SKenneth E. Jansen        fv2 = one - chi/(one+chi*fv1)
288*59599516SKenneth E. Jansenc  determine Stilde
289*59599516SKenneth E. Jansen        Stilde = vort + sclrm*fv2/(saKappa*dist2w)**2!unfix
290*59599516SKenneth E. Jansenc  determine r
291*59599516SKenneth E. Jansen        where(Stilde(:).ne.zero)
292*59599516SKenneth E. Jansen           r(:) = sclrm(:)/Stilde(:)/(saKappa*dist2w(:))**2
293*59599516SKenneth E. Jansen        elsewhere
294*59599516SKenneth E. Jansen           r(:) = 1.0d32
295*59599516SKenneth E. Jansen        endwhere
296*59599516SKenneth E. Jansenc  determine g
297*59599516SKenneth E. Jansen        saCw3l=saCw3
298*59599516SKenneth E. Jansen        g = r + saCw2*(r**6-r)
299*59599516SKenneth E. Jansen        sixth = 1.0/6.0
300*59599516SKenneth E. Jansenc            gp      = rp * (tmp + 5 * saCw2 * rP5)
301*59599516SKenneth E. Jansenc
302*59599516SKenneth E. Jansenc            gP6     = (g * g * g) ** 2
303*59599516SKenneth E. Jansenc            tmp     = 1 / (gP6 + (saCw3*saCw3*saCw3)**2)
304*59599516SKenneth E. Jansenc            tmp1    = ( (1 + (saCw3*saCw3*saCw3)**2) * tmp ) ** sixth
305*59599516SKenneth E. Jansenc            fw      = g * tmp1
306*59599516SKenneth E. Jansenc            fwp     = gp * tmp1 * (saCw3*saCw3*saCw3)**2 * tmp
307*59599516SKenneth E. Jansenc  determine f_w and f_w/g
308*59599516SKenneth E. Jansen        fwog = ((one+saCw3**6)/(g**6+saCw3**6))**sixth
309*59599516SKenneth E. Jansen        fw   = g*fwog
310*59599516SKenneth E. Jansenc  determine f_t2
311*59599516SKenneth E. Jansenc        ft2 = ct3*exp(-ct4*chi**2)
312*59599516SKenneth E. Jansen        ft2 = zero
313*59599516SKenneth E. Jansen
314*59599516SKenneth E. Jansenc        srcrat=saCb1*(one-ft2)*Stilde*sclrm
315*59599516SKenneth E. Jansenc     &      -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2
316*59599516SKenneth E. Jansenc        srcrat=srcrat/sclrm
317*59599516SKenneth E. Jansen
318*59599516SKenneth E. Jansen        srcrat=saCb1*(one-ft2)*Stilde
319*59599516SKenneth E. Jansen     &       -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w/dist2w)
320*59599516SKenneth E. Jansen
321*59599516SKenneth E. Jansenc
322*59599516SKenneth E. Jansenc        term1=saCb1*(one-ft2)*Stilde*sclrm
323*59599516SKenneth E. Jansenc        term2=saCb2*saSigmaInv*(g1yti**2+g2yti**2+g3yti**2)
324*59599516SKenneth E. Jansenc        term3=-(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2
325*59599516SKenneth E. Jansenc determine d()/d(sclrm)
326*59599516SKenneth E. Jansen        fv1p = 3*(saCv1**3)*(chi**2)*rho
327*59599516SKenneth E. Jansen          fv1p = fv1p/(rmu*(chi**3+saCv1**3)**2)
328*59599516SKenneth E. Jansen        fv2p = (chi**2)*fv1p-(one/rmu)
329*59599516SKenneth E. Jansen          fv2p = fv2p/(one+chi*fv1)**2
330*59599516SKenneth E. Jansen        stp = fv2 + sclrm*fv2p
331*59599516SKenneth E. Jansen          stp = stp/(saKappa*dist2w)**2
332*59599516SKenneth E. Jansen        where(Stilde(:).ne.zero)
333*59599516SKenneth E. Jansen             rp(:) = Stilde(:) - sclrm(:)*stp(:)
334*59599516SKenneth E. Jansen             rp(:) = rp(:)/(saKappa*dist2w(:)*Stilde(:))**2
335*59599516SKenneth E. Jansen        elsewhere
336*59599516SKenneth E. Jansen             rp(:) = 1.0d32
337*59599516SKenneth E. Jansen        endwhere
338*59599516SKenneth E. Jansen        gp = one+saCw2*(6*r**5 - one)
339*59599516SKenneth E. Jansen          gp = gp*rp
340*59599516SKenneth E. Jansen        fwp = (saCw3**6)*fwog
341*59599516SKenneth E. Jansen          fwp = fwp*gp/(g**6+saCw3**6)
342*59599516SKenneth E. Jansenc  determine source term
343*59599516SKenneth E. Jansen        bf = saCb2*saSigmaInv*(g1yti**2+g2yti**2+g3yti**2)
344*59599516SKenneth E. Jansen     &      +saCb1*(one-ft2)*Stilde*sclrm
345*59599516SKenneth E. Jansen     &      -(saCw1*fw - saCb1*ft2/saKappa**2)*(sclrm/dist2w)**2
346*59599516SKenneth E. Jansen        bf = bf * rho
347*59599516SKenneth E. Jansenc determine d(source)/d(sclrm)
348*59599516SKenneth E. Jansen        srcp = rho*saCb1*(sclrm*stp+Stilde)
349*59599516SKenneth E. Jansen     &        -rho*saCw1*(fwp*sclrm**2 + 2*sclrm*fw)/dist2w**2
350*59599516SKenneth E. Jansen        do i=1, npro
351*59599516SKenneth E. Jansen          if(srcp(i).le.zero .and. srcp(i).le.srcrat(i)) then
352*59599516SKenneth E. Jansen            srcp(i)=srcp(i)
353*59599516SKenneth E. Jansen          else if(srcrat(i).lt.zero) then
354*59599516SKenneth E. Jansen            srcp(i)=srcrat(i)
355*59599516SKenneth E. Jansen          else
356*59599516SKenneth E. Jansen            srcp(i)=zero
357*59599516SKenneth E. Jansen          endif
358*59599516SKenneth E. Jansen        enddo
359*59599516SKenneth E. Jansenc
360*59599516SKenneth E. Jansenc==========================>>  IRES = 1 or 3  <<=======================
361*59599516SKenneth E. Jansenc
362*59599516SKenneth E. Jansenc          if ((ires .eq. 1) .or. (ires .eq. 3)) then
363*59599516SKenneth E. Jansen             rti (:,4) = rti (:,4) -  bf(:)
364*59599516SKenneth E. Jansenc          endif                 !ires
365*59599516SKenneth E. Jansen
366*59599516SKenneth E. Jansenc          rmti (:,4) = rmti (:,4) - bf(:)
367*59599516SKenneth E. Jansen          rLyti(:) = rLyti(:) - bf(:)
368*59599516SKenneth E. Jansenc
369*59599516SKenneth E. Jansen       elseif (iLSet.ne.0) then
370*59599516SKenneth E. Jansen          if (isclr.eq.1)  then
371*59599516SKenneth E. Jansen             srcp = zero
372*59599516SKenneth E. Jansen
373*59599516SKenneth E. Jansen          elseif (isclr.eq.2) then !we are redistancing level-sets
374*59599516SKenneth E. Jansen
375*59599516SKenneth E. Jansen             sclr_ls = zero     !zero out temp variable
376*59599516SKenneth E. Jansen
377*59599516SKenneth E. Jansen             do ii=1,npro
378*59599516SKenneth E. Jansen
379*59599516SKenneth E. Jansen                do jj = 1, nshl ! first find the value of levelset at point ii
380*59599516SKenneth E. Jansen
381*59599516SKenneth E. Jansen                   sclr_ls(ii) =  sclr_ls(ii)
382*59599516SKenneth E. Jansen     &                  + shape(ii,jj) * ycl(ii,jj,6)
383*59599516SKenneth E. Jansen
384*59599516SKenneth E. Jansen                enddo
385*59599516SKenneth E. Jansen
386*59599516SKenneth E. Jansen                if (sclr_ls(ii) .lt. - epsilon_ls)then
387*59599516SKenneth E. Jansen
388*59599516SKenneth E. Jansen                   sign_levelset(ii) = - one
389*59599516SKenneth E. Jansen
390*59599516SKenneth E. Jansen                elseif  (abs(sclr_ls(ii)) .le. epsilon_ls)then
391*59599516SKenneth E. Jansenc     sign_levelset(ii) = zero
392*59599516SKenneth E. Jansenc
393*59599516SKenneth E. Jansen                   sign_levelset(ii) =sclr_ls(ii)/epsilon_ls
394*59599516SKenneth E. Jansen     &                  + sin(pi*sclr_ls(ii)/epsilon_ls)/pi
395*59599516SKenneth E. Jansen
396*59599516SKenneth E. Jansen
397*59599516SKenneth E. Jansen                elseif (sclr_ls(ii) .gt. epsilon_ls) then
398*59599516SKenneth E. Jansen
399*59599516SKenneth E. Jansen                   sign_levelset(ii) = one
400*59599516SKenneth E. Jansen
401*59599516SKenneth E. Jansen                endif
402*59599516SKenneth E. Jansen                srcp(ii) = sign_levelset(ii)
403*59599516SKenneth E. Jansen
404*59599516SKenneth E. Jansen             enddo
405*59599516SKenneth E. Jansenc
406*59599516SKenneth E. Jansenc     ad   The redistancing equation can be written in the following form
407*59599516SKenneth E. Jansenc     ad
408*59599516SKenneth E. Jansenc     ad   d_{,t} + sign(phi)*( d_{,i}/|d_{,i}| )* d_{,i} = sign(phi)
409*59599516SKenneth E. Jansenc     ad
410*59599516SKenneth E. Jansenc     ad   This is rewritten in the form
411*59599516SKenneth E. Jansenc     ad
412*59599516SKenneth E. Jansenc     ad   d_{,t} + u * d_{,i} = sign(phi)
413*59599516SKenneth E. Jansenc     ad
414*59599516SKenneth E. Jansen
415*59599516SKenneth E. Jansenc$$$  CAD   For the redistancing equation the "pseudo velocity" term is
416*59599516SKenneth E. Jansenc$$$  CAD   calculated as follows
417*59599516SKenneth E. Jansen
418*59599516SKenneth E. Jansen
419*59599516SKenneth E. Jansen
420*59599516SKenneth E. Jansen             mytmp = srcp(:) / sqrt( g1yti(:) * g1yti(:)
421*59599516SKenneth E. Jansen     &            + g2yti(:) * g2yti(:)
422*59599516SKenneth E. Jansen     &            + g3yti(:) * g3yti(:) )
423*59599516SKenneth E. Jansen
424*59599516SKenneth E. Jansen             u1 = mytmp(:) * g1yti(:)
425*59599516SKenneth E. Jansen             u2 = mytmp(:) * g2yti(:)
426*59599516SKenneth E. Jansen             u3 = mytmp(:) * g3yti(:)
427*59599516SKenneth E. Jansenc
428*59599516SKenneth E. Jansenc==========================>>  IRES = 1 or 3  <<=======================
429*59599516SKenneth E. Jansenc
430*59599516SKenneth E. Jansenc     if ((ires .eq. 1) .or. (ires .eq. 3)) then
431*59599516SKenneth E. Jansen             rti (:,4) = rti (:,4) - srcp(:)
432*59599516SKenneth E. Jansenc     endif                 !ires
433*59599516SKenneth E. Jansen
434*59599516SKenneth E. Jansenc     rmti (:,4) = rmti (:,4) -  srcp(:)
435*59599516SKenneth E. Jansen             rLyti(:) = rLyti(:) - srcp(:)
436*59599516SKenneth E. Jansenc
437*59599516SKenneth E. Jansen          endif                 ! close of scalar 2 of level set
438*59599516SKenneth E. Jansen
439*59599516SKenneth E. Jansen       else    ! NOT turbulence and NOT level set so this is a simple
440*59599516SKenneth E. Jansen               ! scalar. If your scalar equation has a source term
441*59599516SKenneth E. Jansen               ! then add your own like the above but leave an unforced case
442*59599516SKenneth E. Jansen               ! as an option like you see here
443*59599516SKenneth E. Jansen
444*59599516SKenneth E. Jansen          srcp = zero
445*59599516SKenneth E. Jansen       endif
446*59599516SKenneth E. Jansen
447*59599516SKenneth E. Jansen
448*59599516SKenneth E. Jansenc
449*59599516SKenneth E. Jansenc.... Return and end
450*59599516SKenneth E. Jansenc
451*59599516SKenneth E. Jansen        return
452*59599516SKenneth E. Jansen        end
453*59599516SKenneth E. Jansen
454