xref: /phasta/phSolver/common/elm3keps.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. JansenCC***************************************************************************
2*59599516SKenneth E. JansenCC  Copyright (c) 1994-1999 ACUSIM Software, Inc.
3*59599516SKenneth E. JansenCC  All rights reserved.
4*59599516SKenneth E. JansenCC  This source code is confidential and may not be disclosed.
5*59599516SKenneth E. JansenCC***************************************************************************
6*59599516SKenneth E. Jansen
7*59599516SKenneth E. JansenCC===========================================================================
8*59599516SKenneth E. JansenCC
9*59599516SKenneth E. JansenCC "elm3Keps.f":  3D k-epsiron (LB model) turbulence element formation.
10*59599516SKenneth E. JansenCC
11*59599516SKenneth E. JansenCC Original: Farzin Shakib (Nov 98)
12*59599516SKenneth E. JansenCC K-epsilon modification by Je-Hoon, Kim (Jan 98)
13*59599516SKenneth E. JansenCC Wlicox's book, pp.140, Lam-Bremhorst model
14*59599516SKenneth E. JansenCC
15*59599516SKenneth E. JansenCC Includes k-epsilons stagnation abnormally correction (Feb 99)
16*59599516SKenneth E. JansenCC ( Durbin, P. A., "On the k-3 stagnation point
17*59599516SKenneth E. JansenCC   abnormally", pp.89-90, 1996, Int. J. of Heat and Fluid flow).
18*59599516SKenneth E. JansenCC
19*59599516SKenneth E. Jansen
20*59599516SKenneth E. Jansen
21*59599516SKenneth E. Jansenc... Note
22*59599516SKenneth E. Jansen
23*59599516SKenneth E. Jansenc..  1. K-epsilon model seems more sensitive to grid resolution than one equation models.
24*59599516SKenneth E. Jansenc        It seems good (fine enough) grid seldom get blow-up ('nan' error) while coarse grids
25*59599516SKenneth E. Jansenc        sometimes blow up. It is strongly recommended to have very fine grid near the wall
26*59599516SKenneth E. Jansenc        at least y+ (1st grid off the wall) less than or = 0.5.
27*59599516SKenneth E. Jansen
28*59599516SKenneth E. Jansenc..  2. when it blew up while converging to the solution, alternative srcJac's were
29*59599516SKenneth E. Jansenc..     used to prevent blow up. It eliminated blow up problem, but it does not seem
30*59599516SKenneth E. Jansenc..     to be a good Jacobian to solve the problem from the very beginning (just good
31*59599516SKenneth E. Jansenc..     as a restarter).
32*59599516SKenneth E. Jansenc..     Further numerical test will be done to find a better Jacobian
33*59599516SKenneth E. Jansenc..     which is good for either case, I have not finished it yet.
34*59599516SKenneth E. Jansenc..     I have coded all possible terms to play with and am studying the behavior now.
35*59599516SKenneth E. Jansen
36*59599516SKenneth E. Jansenc..  3. Durbin stated that we could limit the T2nd (second time scale) to control
37*59599516SKenneth E. Jansenc..     the abnormal growth of k , but it does not seem to help much.
38*59599516SKenneth E. Jansen
39*59599516SKenneth E. Jansenc..  4. About good IC's for K-epsilon model,
40*59599516SKenneth E. Jansenc..     K_(O)      =   k+ max(=4.5~6) * (u_tau)^2
41*59599516SKenneth E. Jansenc..     eps_(O)    = eps+ max(=0.1~0.25) * (u_tau)^4 / kinematic_viscosity
42*59599516SKenneth E. Jansenc..     velocity(0)= u_tau *( 1/0.418*Log(y+ max)+5.5 ) or mass velocity if it can be estimated.
43*59599516SKenneth E. Jansenc..     mu_t(0)    = (500~1000) * mu
44*59599516SKenneth E. Jansen
45*59599516SKenneth E. Jansen
46*59599516SKenneth E. Jansen
47*59599516SKenneth E. Jansenc..     (example) for periodic channel problem
48*59599516SKenneth E. Jansen
49*59599516SKenneth E. Jansenc..             when  u_tau=0.707,  k+   max = 6,    k IC   =    3
50*59599516SKenneth E. Jansenc..                                 eps+ max = 0.1,  eps IC = 1250
51*59599516SKenneth E. Jansenc..                                                  vel IC ~   20
52*59599516SKenneth E. Jansen
53*59599516SKenneth E. Jansenc..             when  u_tau=1,       k+   max = 6,    k IC  =    6
54*59599516SKenneth E. Jansenc..                                 eps+ max = 0.1,  eps IC = 5000
55*59599516SKenneth E. Jansenc..                                                  vel IC ~   30
56*59599516SKenneth E. Jansenc..      u_tau=1's IC's works for lower dpdx cases.
57*59599516SKenneth E. Jansen
58*59599516SKenneth E. Jansen
59*59599516SKenneth E. Jansenc..     I used possible maximum for k and epsilon.
60*59599516SKenneth E. Jansenc..     From one of review papers on k-epsilon models, we know approximate k+ max
61*59599516SKenneth E. Jansenc..     and epslon+ max for attached flows.
62*59599516SKenneth E. Jansenc..     Shear velocity (utau) could also be estimated for particular probelm which
63*59599516SKenneth E. Jansenc..     actually set k and epsilon along with another flow properties.
64*59599516SKenneth E. Jansenc..     Too small epsilon or too small mu_t might let k grow unchecked therefore
65*59599516SKenneth E. Jansenc..     make the flow field unstable.
66*59599516SKenneth E. Jansen
67*59599516SKenneth E. Jansenc..  5. Restart works better from higher Reynolds number to lower Reynolds number flows but
68*59599516SKenneth E. Jansenc..     not the other way (Before Durbin's modification, and I haven't check after Durbin's
69*59599516SKenneth E. Jansenc..     modification).
70*59599516SKenneth E. Jansen
71*59599516SKenneth E. Jansenc..  6. In terms of terminology and naming convention, I pretty much followed DR. Shakib's
72*59599516SKenneth E. Jansenc..     way. If there are any confusion, pls let me know.
73*59599516SKenneth E. Jansen
74*59599516SKenneth E. Jansen
75*59599516SKenneth E. Jansenc..  7. Slight modifications are done to Jacobians (basically sign control) to accelerate
76*59599516SKenneth E. Jansenc..     convergence and to prevent a blow-up before the solutions converge
77*59599516SKenneth E. Jansen
78*59599516SKenneth E. Jansen
79*59599516SKenneth E. Jansenc..  8. Periodic channel problem tells :
80*59599516SKenneth E. Jansenc..     The lower bound of y+ of the 1st node is 0.6 and 12 nodes within y+ = 20 (near wall region)
81*59599516SKenneth E. Jansenc..     (STAR-CD recommend y+~1 and 20 nodes within y+=20).
82*59599516SKenneth E. Jansenc..     Our 1st y+ requirement is sligtly more than what STAR-CD recommends.
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansen
85*59599516SKenneth E. Jansenc..  9. Fin tube problem (pls neglect the sample problem. it will not converge) tells :
86*59599516SKenneth E. Jansenc..     By inspecting y+ resolution, when the solver blowed up, there were
87*59599516SKenneth E. Jansenc..     about 6~7 points which had y+ (1st node) more than 0.6 near the stagnation points.
88*59599516SKenneth E. Jansenc..     The GR's also did not go down below GR of 1.e-4.
89*59599516SKenneth E. Jansen
90*59599516SKenneth E. Jansenc..     After fixing y+ resolution near the stagnation points, it converged well (below 1.e-4).
91*59599516SKenneth E. Jansenc..
92*59599516SKenneth E. Jansenc..     (example) IC selection for fin tube
93*59599516SKenneth E. Jansen
94*59599516SKenneth E. Jansenc..              To find out candidiate Initial Condition for k and epsilon, I assumed that
95*59599516SKenneth E. Jansenc..              the wall shear stress could reach upto 10 times the average wall shear stress
96*59599516SKenneth E. Jansenc..              at the stagnation point (I think it will vary of course, depending on the problem).
97*59599516SKenneth E. Jansenc..
98*59599516SKenneth E. Jansenc..               u_tau_average can be estimated from experimaental data.
99*59599516SKenneth E. Jansenc..               u_tau_max = SQRT(10) * u_tau_average
100*59599516SKenneth E. Jansenc..               k+ max ~ 6, epsilon max ~0.25
101*59599516SKenneth E. Jansenc..
102*59599516SKenneth E. JansenCC===========================================================================
103*59599516SKenneth E. Jansen
104*59599516SKenneth E. Jansen
105*59599516SKenneth E. JansenC============================================================================
106*59599516SKenneth E. JansenC
107*59599516SKenneth E. JansenC "fElm3KepsCoef":
108*59599516SKenneth E. JansenC
109*59599516SKenneth E. JansenC============================================================================
110*59599516SKenneth E. Jansen      subroutine elm3keps    (kay,	epsilon,
111*59599516SKenneth E. Jansen     &     dwi,	gradV,
112*59599516SKenneth E. Jansen     &     srcRat1,src1,	srcJac)
113*59599516SKenneth E. Jansenc
114*59599516SKenneth E. Jansenc.... Data declaration
115*59599516SKenneth E. Jansenc
116*59599516SKenneth E. Jansen      include "common.h"
117*59599516SKenneth E. Jansen      real*8	kay(npro),		epsilon(npro),
118*59599516SKenneth E. Jansen     &          dwi(npro)
119*59599516SKenneth E. Jansen      real*8	gradV(npro,3,3)
120*59599516SKenneth E. Jansen
121*59599516SKenneth E. Jansen      real*8	rmu(npro),
122*59599516SKenneth E. Jansen     &          rho(npro)
123*59599516SKenneth E. Jansen      real*8	srcRat(npro,2),
124*59599516SKenneth E. Jansen     &		src(npro,2),		srcJac(npro,4),
125*59599516SKenneth E. Jansen     &          srcRat1(npro),          src1(npro)
126*59599516SKenneth E. Jansenc
127*59599516SKenneth E. Jansen      integer advdiff
128*59599516SKenneth E. Jansen      integer	e
129*59599516SKenneth E. Jansen      real*8  fct1
130*59599516SKenneth E. Jansen      real*8  tmp1,   tmp2  ,  tmp0
131*59599516SKenneth E. Jansenc
132*59599516SKenneth E. Jansen      real*8  k,    kInv,   kq,     eps,   y,    epsInv,   epsP2,
133*59599516SKenneth E. Jansen     &          ss,   mut, mut_k, mut_eps,  rat,      jac
134*59599516SKenneth E. Jansen
135*59599516SKenneth E. Jansen
136*59599516SKenneth E. Jansen      real*8  Ce1,   Ce2,  epsP2Inv,   CmuKE,  sigmaKE,       nu,
137*59599516SKenneth E. Jansen     &          kk,  kqInv,     nuInv,     Rey,     Ret,    Rey_k,
138*59599516SKenneth E. Jansen     &          Ret_k,        Ret_eps,     ff1,      f2,    kkInv,
139*59599516SKenneth E. Jansen     &          RetInv,       fmukeInv,  fmukeP2Inv
140*59599516SKenneth E. Jansen
141*59599516SKenneth E. Jansen      real*8  fmuke,  fmuke_k,  fmuke_eps
142*59599516SKenneth E. Jansen
143*59599516SKenneth E. Jansenc...    Addings due to Durbin's correction
144*59599516SKenneth E. Jansen
145*59599516SKenneth E. Jansen      real*8  T1st, T2nd, T2ndInv, two3rdCmuInv, tri8thq,
146*59599516SKenneth E. Jansen     &          ssq, ssqInv, two3rdq, pk1, pk2,
147*59599516SKenneth E. Jansen     &          pk, pk_k, pk_eps, Tscale,Tinv,
148*59599516SKenneth E. Jansen     &          Tscale_k, Tscale_eps, ff1_k, ff1_eps, f2_k,f2_eps,
149*59599516SKenneth E. Jansen     &          ff1Inv, f2Inv
150*59599516SKenneth E. Jansen
151*59599516SKenneth E. Jansen
152*59599516SKenneth E. Jansen
153*59599516SKenneth E. Jansenc
154*59599516SKenneth E. Jansenc	include "elmf.h"
155*59599516SKenneth E. Jansenc
156*59599516SKenneth E. Jansenc.... Compute src and its jacobians
157*59599516SKenneth E. Jansenc
158*59599516SKenneth E. Jansenc.... set Lam-Bremhorst' k-epsilon Model constants
159*59599516SKenneth E. Jansen      rho(:)=datmat(1,1,1)
160*59599516SKenneth E. Jansen      rmu(:)=datmat(1,2,1)
161*59599516SKenneth E. Jansen      Ce1             = 1.44
162*59599516SKenneth E. Jansen      Ce2             = 1.92
163*59599516SKenneth E. Jansen      CmuKE           = 0.09
164*59599516SKenneth E. Jansen      sigmaKE         = 1.3
165*59599516SKenneth E. Jansen
166*59599516SKenneth E. Jansen      two3rdCmuInv    = 2./3./CmuKE
167*59599516SKenneth E. Jansen      tri8thq         = SQRT(3./8.)
168*59599516SKenneth E. Jansen      two3rdq         = SQRT(2./3.)
169*59599516SKenneth E. Jansenc
170*59599516SKenneth E. Jansen      advdiff = 0
171*59599516SKenneth E. Jansen      if(advdiff.eq.0)then ! not advection-diffusion
172*59599516SKenneth E. Jansen      do e = 1, npro
173*59599516SKenneth E. Jansen
174*59599516SKenneth E. Jansen         nuInv           = rho(e)/rmu(e)
175*59599516SKenneth E. Jansen         k		    = abs(kay(e))
176*59599516SKenneth E. Jansen         if (k.lt.1.e-32) k=0
177*59599516SKenneth E. Jansen         eps		    = abs(epsilon(e))
178*59599516SKenneth E. Jansen         y		    = dwi(e)
179*59599516SKenneth E. Jansen
180*59599516SKenneth E. Jansenc--------------patch
181*59599516SKenneth E. Jansenc            if(k.gt.0.45) k=0.45
182*59599516SKenneth E. Jansenc            if(eps.gt.2158) eps=2158
183*59599516SKenneth E. Jansenc--------------------------------
184*59599516SKenneth E. Jansen
185*59599516SKenneth E. Jansenc
186*59599516SKenneth E. Jansen         kInv	    = 0
187*59599516SKenneth E. Jansen         kq	            = sqrt(k)
188*59599516SKenneth E. Jansen         kqInv           = 0
189*59599516SKenneth E. Jansen         kkInv           = 0
190*59599516SKenneth E. Jansen
191*59599516SKenneth E. Jansenc.... limiting k.  Instead of saying k.ne.0
192*59599516SKenneth E. Jansen
193*59599516SKenneth E. Jansen         if ( k .gt.1.e-32 ) then
194*59599516SKenneth E. Jansen            kInv         = 1. / k
195*59599516SKenneth E. Jansen            kqInv        = 1./sqrt(k)
196*59599516SKenneth E. Jansen            kkInv        = kInv*kInv
197*59599516SKenneth E. Jansen         endif
198*59599516SKenneth E. Jansen
199*59599516SKenneth E. Jansen         kk              =   k * k
200*59599516SKenneth E. Jansen
201*59599516SKenneth E. Jansen         epsP2           = eps * eps
202*59599516SKenneth E. Jansen         epsInv	    = 0
203*59599516SKenneth E. Jansen         epsP2Inv        = 0
204*59599516SKenneth E. Jansen
205*59599516SKenneth E. Jansen
206*59599516SKenneth E. Jansenc.....  limiting epsilon.  Instead of saying eps.ne.0
207*59599516SKenneth E. Jansen
208*59599516SKenneth E. Jansen         if ( eps .gt.1.e-32) then
209*59599516SKenneth E. Jansen            epsInv        = 1. / eps
210*59599516SKenneth E. Jansen            epsP2Inv      = epsInv*epsInv
211*59599516SKenneth E. Jansen         endif
212*59599516SKenneth E. Jansen
213*59599516SKenneth E. Jansenc
214*59599516SKenneth E. Jansen         ss		= gradV(e,1,1) ** 2
215*59599516SKenneth E. Jansen     &			+ gradV(e,2,2) ** 2
216*59599516SKenneth E. Jansen     &			+ gradV(e,3,3) ** 2
217*59599516SKenneth E. Jansen     &			+ 0.5
218*59599516SKenneth E. Jansen     &			* ( (gradV(e,2,3) + gradV(e,3,2)) ** 2
219*59599516SKenneth E. Jansen     &			  + (gradV(e,3,1) + gradV(e,1,3)) ** 2
220*59599516SKenneth E. Jansen     &			  + (gradV(e,1,2) + gradV(e,2,1)) ** 2 )
221*59599516SKenneth E. Jansenc
222*59599516SKenneth E. Jansen         ssq                 = sqrt(ss)
223*59599516SKenneth E. Jansen         ssqInv              = 0
224*59599516SKenneth E. Jansen
225*59599516SKenneth E. Jansen         if(ss.ne.0) ssqInv  = 1./sqrt(ss)
226*59599516SKenneth E. Jansen
227*59599516SKenneth E. Jansen         Rey                 = kq *      y * nuInv
228*59599516SKenneth E. Jansen         Ret                 = kk * epsInv * nuInv
229*59599516SKenneth E. Jansen         RetInv              = 0
230*59599516SKenneth E. Jansen
231*59599516SKenneth E. Jansenc...     limitng Ret so that it does not get 'nan' error
232*59599516SKenneth E. Jansen
233*59599516SKenneth E. Jansen         if(Ret.lt.1.d100.AND.Ret.gt.zero) RetInv=1./Ret
234*59599516SKenneth E. Jansen
235*59599516SKenneth E. Jansen         Rey_k    =  0.5 * y * kqInv  * nuInv
236*59599516SKenneth E. Jansen         Ret_k    =  2.  * k * epsInv * nuInv
237*59599516SKenneth E. Jansen         Ret_eps  = -kk  * epsP2Inv   * nuInv
238*59599516SKenneth E. Jansen
239*59599516SKenneth E. Jansen         tmp1     = exp(-0.0165*Rey)
240*59599516SKenneth E. Jansen
241*59599516SKenneth E. Jansen         fmuKE    = (1. -tmp1) ** 2 * (1.+20.5*RetInv) ! fmu of Lam-Bremhorst
242*59599516SKenneth E. Jansen
243*59599516SKenneth E. Jansen         fmuKEInv = 0.0
244*59599516SKenneth E. Jansen         fmuKEP2Inv = 0.0
245*59599516SKenneth E. Jansenc....   limiting fmuKE.  fmuke max ~ 1, and it could get very small near the wall.
246*59599516SKenneth E. Jansen
247*59599516SKenneth E. Jansen         if(fmuKe.gt.1e-32) then
248*59599516SKenneth E. Jansen            fmuKEInv = 1./fmuke
249*59599516SKenneth E. Jansen            fmuKEP2Inv = fmuKEInv*fmuKEInv
250*59599516SKenneth E. Jansen         endif
251*59599516SKenneth E. Jansen
252*59599516SKenneth E. Jansen         fmuKE_k  = 0.033*(1.-tmp1)*(1.+20.5*RetInv)*Rey_k*tmp1
253*59599516SKenneth E. Jansen     &                -20.5 *(1.-tmp1)**2 * Ret_k*RetInv**2
254*59599516SKenneth E. Jansen
255*59599516SKenneth E. Jansen         fmuKE_eps= -20.5*(1.-tmp1)**2* Ret_eps*RetInv**2
256*59599516SKenneth E. Jansen
257*59599516SKenneth E. Jansen         ff1      =  1. + ( 0.05*fmuKEInv) ** 3 ! f1 as in Lam-Bremhorst
258*59599516SKenneth E. Jansen         f2       =  1. - exp(- Ret ** 2 ) ! f2 as in Lam-Bremhorst
259*59599516SKenneth E. Jansen
260*59599516SKenneth E. Jansen         ff1Inv=zero
261*59599516SKenneth E. Jansen         f2Inv=zero
262*59599516SKenneth E. Jansen         if(ff1.gt.1.0e-32)    ff1Inv=1./ff1
263*59599516SKenneth E. Jansen         if(f2.gt.1.0e-32)     f2Inv =1./f2
264*59599516SKenneth E. Jansen
265*59599516SKenneth E. Jansen
266*59599516SKenneth E. Jansen         ff1_k    = -0.000375*fmuKE_k  *fmuKEInv**4
267*59599516SKenneth E. Jansen         ff1_eps  = -0.000375*fmuKE_eps*fmuKEInv**4
268*59599516SKenneth E. Jansen
269*59599516SKenneth E. Jansen         f2_k     = 2.* Ret * Ret_k   * exp(-Ret**2)
270*59599516SKenneth E. Jansen         f2_eps   = 2.* Ret * Ret_eps * exp(-Ret**2)
271*59599516SKenneth E. Jansen
272*59599516SKenneth E. Jansen         T1st = k * epsInv      ! 1st time scale
273*59599516SKenneth E. Jansen         T2nd = fmuKEInv*two3rdCmuInv*tri8thq*ssqInv ! 2nd time scale
274*59599516SKenneth E. Jansen
275*59599516SKenneth E. Jansenc...     Depending on the choice of T (to limit k growth near stagnation)
276*59599516SKenneth E. Jansen
277*59599516SKenneth E. Jansen         if (T1st.lt.T2nd) then
278*59599516SKenneth E. Jansen
279*59599516SKenneth E. Jansen            Tscale      = T1st
280*59599516SKenneth E. Jansen            Tinv        =  0
281*59599516SKenneth E. Jansen
282*59599516SKenneth E. Jansenc                 if(Tscale.ne.0)  Tinv=1./Tscale
283*59599516SKenneth E. Jansen
284*59599516SKenneth E. Jansenc...       Limiting time scale s.t. Tinv**4 not go over 1.e160
285*59599516SKenneth E. Jansen
286*59599516SKenneth E. Jansen            if(Tscale.gt.1.e-32)  Tinv=1./Tscale
287*59599516SKenneth E. JansencccccTHIS IS WHAT WAS HERE WHEN I GOT IT FROM JE HOON
288*59599516SKenneth E. Jansenccccc                 Tscale_k    = fmuKE_k*k*epsInv+fmuKE*epsInv
289*59599516SKenneth E. Jansenccccc                 Tscale_eps  = fmuKE_eps*k*epsInv -fmuKE*k*epsP2Inv
290*59599516SKenneth E. Jansen            Tscale_k= epsInv ! Acusolve's choice
291*59599516SKenneth E. Jansen            Tscale_eps= -k*epsP2Inv ! AcuSolve's choice
292*59599516SKenneth E. Jansen
293*59599516SKenneth E. Jansen         else
294*59599516SKenneth E. Jansen
295*59599516SKenneth E. Jansen            Tscale      = T2nd
296*59599516SKenneth E. Jansen            Tinv        =  0
297*59599516SKenneth E. Jansen
298*59599516SKenneth E. Jansen            if(Tscale.gt.1.e-32) Tinv=1./Tscale
299*59599516SKenneth E. JansencccccTHIS IS WHAT WAS HERE WHEN I GOT IT FROM JE HOON
300*59599516SKenneth E. Jansenccccc            Tscale_k   = 0
301*59599516SKenneth E. Jansenccccc            Tscale_eps =0
302*59599516SKenneth E. Jansen            Tscale_k= two3rdCmuInv*tri8thq*ssqInv*
303*59599516SKenneth E. Jansen     &                   (-fmuKEP2Inv*fmuKE_k)  ! acusolve's choice
304*59599516SKenneth E. Jansen            Tscale_eps= two3rdCmuInv*tri8thq*ssqInv*
305*59599516SKenneth E. Jansen     &                   (-fmuKEP2Inv*fmuKE_eps)  ! acusolve's choice
306*59599516SKenneth E. Jansen
307*59599516SKenneth E. Jansen         endif
308*59599516SKenneth E. Jansen
309*59599516SKenneth E. Jansenc...      After Limiting all values, i feel it's unnecessary to limit jacobians
310*59599516SKenneth E. Jansenc...      since they are already limited.
311*59599516SKenneth E. Jansenc...      Two other routines which defines these quantities are the same
312*59599516SKenneth E. Jansen
313*59599516SKenneth E. Jansen
314*59599516SKenneth E. Jansen
315*59599516SKenneth E. Jansen
316*59599516SKenneth E. Jansenc...   recall that tmp1= exp(-0.0165*Rey)
317*59599516SKenneth E. Jansen
318*59599516SKenneth E. Jansen
319*59599516SKenneth E. Jansen
320*59599516SKenneth E. Jansen         mut  = rho(e)*CmuKE*fmuKE* k *Tscale
321*59599516SKenneth E. Jansen
322*59599516SKenneth E. Jansen         mut_k = rho(e)*CmuKE*(
323*59599516SKenneth E. Jansen     &                 fmuKE_k*k*Tscale
324*59599516SKenneth E. Jansen     &               + fmuKE    *Tscale
325*59599516SKenneth E. Jansen     &               + fmuKE  *k*Tscale_k
326*59599516SKenneth E. Jansen     &                            )
327*59599516SKenneth E. Jansen
328*59599516SKenneth E. Jansen         mut_eps  = rho(e) * CmuKE *k*(
329*59599516SKenneth E. Jansen     &        fmuKE_eps*Tscale+
330*59599516SKenneth E. Jansen     &        fmuKE    *Tscale_eps
331*59599516SKenneth E. Jansen     &                            )
332*59599516SKenneth E. Jansen
333*59599516SKenneth E. Jansen         tmp0        = 2 * ss
334*59599516SKenneth E. Jansen
335*59599516SKenneth E. Jansen
336*59599516SKenneth E. Jansen         pk1     = mut*tmp0
337*59599516SKenneth E. Jansen         pk2     = rho(e)*two3rdq*k*sqrt(ss)
338*59599516SKenneth E. Jansen
339*59599516SKenneth E. Jansen
340*59599516SKenneth E. Jansen         if (pk1.lt.pk2) then
341*59599516SKenneth E. Jansen            pk     = pk1
342*59599516SKenneth E. Jansen            pk_k   = mut_k  * tmp0
343*59599516SKenneth E. Jansen            pk_eps = mut_eps * tmp0
344*59599516SKenneth E. Jansen         else
345*59599516SKenneth E. Jansen            pk   = pk2
346*59599516SKenneth E. Jansen            pk_k = kInv*pk2
347*59599516SKenneth E. Jansen            pk_eps =0
348*59599516SKenneth E. Jansen         endif
349*59599516SKenneth E. Jansen
350*59599516SKenneth E. Jansen
351*59599516SKenneth E. Jansen         src(e,1)    = pk    - rho(e) * eps
352*59599516SKenneth E. Jansen         src(e,2)    = ff1 * Ce1 * pk * Tinv
353*59599516SKenneth E. Jansen     &                   -rho(e)* Ce2 * f2 * eps * Tinv
354*59599516SKenneth E. Jansen
355*59599516SKenneth E. Jansen         srcRat(e,1) = -kInv*(  pk    - rho(e) * eps   )
356*59599516SKenneth E. Jansen         srcRat(e,2) = -epsInv*(
357*59599516SKenneth E. Jansen     &                    ff1 * Ce1 * pk * Tinv
358*59599516SKenneth E. Jansen     &                   -rho(e)* Ce2 * f2 * eps * Tinv
359*59599516SKenneth E. Jansen     &                         )
360*59599516SKenneth E. Jansen
361*59599516SKenneth E. Jansen         srcJac(e,1) = -(pk_k)  ! jacobian for k PDE alone
362*59599516SKenneth E. Jansen         srcJac(e,3) = -(pk_eps-rho(e)) ! d(Fsrck)/d(epsilon)
363*59599516SKenneth E. Jansen         srcJac(e,2) = -(
364*59599516SKenneth E. Jansen     &            ff1_k * Ce1 * pk    * Tinv
365*59599516SKenneth E. Jansen     &           +ff1   * Ce1 * pk_k  * Tinv
366*59599516SKenneth E. Jansen     &           -ff1   * Ce1 * pk    * Tscale_k * Tinv**2
367*59599516SKenneth E. Jansen     &           -rho(e)  * Ce2 * f2_k  * eps * Tinv
368*59599516SKenneth E. Jansen     &           +rho(e)  * Ce2 * f2    * eps * Tscale_k * Tinv**2 ! do not touch
369*59599516SKenneth E. Jansen     &                      ) ! d(Fsrce)/d(k)
370*59599516SKenneth E. Jansen         srcJac(e,4) = -(
371*59599516SKenneth E. Jansen     &           ff1_eps * Ce1 * pk   * Tinv
372*59599516SKenneth E. Jansen     &           +ff1     * Ce1 * pk_eps * Tinv
373*59599516SKenneth E. Jansen     &        -ff1     * Ce1 * pk   * Tscale_eps * Tinv**2
374*59599516SKenneth E. Jansen     &           -rho(e)    * Ce2 * f2_eps     * eps * Tinv
375*59599516SKenneth E. Jansen     &           -rho(e)    * Ce2 * f2       * Tinv
376*59599516SKenneth E. Jansen     &        +rho(e)    * Ce2 * f2* eps * Tscale_eps * Tinv**2
377*59599516SKenneth E. Jansen     &              ) ! jacobian for epsilon PDE alone
378*59599516SKenneth E. Jansen
379*59599516SKenneth E. Jansen
380*59599516SKenneth E. Jansen
381*59599516SKenneth E. Jansen
382*59599516SKenneth E. Jansen      enddo
383*59599516SKenneth E. Jansenc
384*59599516SKenneth E. Jansenc.... Ensure positivity of srcJac
385*59599516SKenneth E. Jansenc
386*59599516SKenneth E. Jansen      do e = 1, npro
387*59599516SKenneth E. Jansen
388*59599516SKenneth E. Jansen
389*59599516SKenneth E. Jansen         srcJac(e,1)		= max( srcJac(e,1), srcRat(e,1), 0.d0 )
390*59599516SKenneth E. Jansen         srcJac(e,4)		= max( srcJac(e,4), srcRat(e,2), 0.d0 )
391*59599516SKenneth E. Jansen
392*59599516SKenneth E. Jansenc            write(777,*) e,   srcJac(e,1),   srcJac(e,4)
393*59599516SKenneth E. Jansen
394*59599516SKenneth E. Jansenc
395*59599516SKenneth E. Jansen         tmp1		= min( srcJac(e,1) * srcJac(e,4),
396*59599516SKenneth E. Jansen     &				       (srcJac(e,1)-srcRat(e,1)) *
397*59599516SKenneth E. Jansen     &				       (srcJac(e,4)-srcRat(e,2)) )
398*59599516SKenneth E. Jansen         tmp2		= srcJac(e,2) * srcJac(e,3)
399*59599516SKenneth E. Jansen
400*59599516SKenneth E. Jansen
401*59599516SKenneth E. Jansen         if ( tmp2 .gt. tmp1 ) then
402*59599516SKenneth E. Jansen            tmp2		= sqrt(tmp1/tmp2)
403*59599516SKenneth E. Jansen            srcJac(e,2)	= tmp2 * srcJac(e,2)
404*59599516SKenneth E. Jansen            srcJac(e,3)	= tmp2 * srcJac(e,3)
405*59599516SKenneth E. Jansen         endif
406*59599516SKenneth E. JansenC	    srcJac(e,2)	= 0
407*59599516SKenneth E. JansenC	    srcJac(e,3)	= 0
408*59599516SKenneth E. Jansen      enddo
409*59599516SKenneth E. Jansen      if(isclr.eq.1)then        ! kay
410*59599516SKenneth E. Jansen         srcrat1 = srcrat(:,1)
411*59599516SKenneth E. Jansen         src1 = src(:,1)
412*59599516SKenneth E. Jansen      else if (isclr.eq.2) then ! epsilon
413*59599516SKenneth E. Jansen         srcrat1 = srcrat(:,2)
414*59599516SKenneth E. Jansen         src1 = src(:,2)
415*59599516SKenneth E. Jansen      endif
416*59599516SKenneth E. Jansen
417*59599516SKenneth E. Jansen      else ! Advection-diffusion
418*59599516SKenneth E. Jansenc Advection-diffusion case
419*59599516SKenneth E. Jansen      srcrat1 = zero
420*59599516SKenneth E. Jansen      src1 = zero
421*59599516SKenneth E. Jansen      srcjac = zero
422*59599516SKenneth E. Jansen      endif
423*59599516SKenneth E. Jansenc
424*59599516SKenneth E. Jansenc.... Compute viscosity
425*59599516SKenneth E. Jansenc
426*59599516SKenneth E. Jansenc	do e = 1, npro
427*59599516SKenneth E. Jansenc	    viscTot(e,1) = rmu(e) + xmuT(e)
428*59599516SKenneth E. Jansenc
429*59599516SKenneth E. Jansenc	    viscTot(e,2) = rmu(e) + xmuT(e)
430*59599516SKenneth E. Jansenc     &                   / (SigmaKE)
431*59599516SKenneth E. Jansenc	enddo
432*59599516SKenneth E. Jansenc
433*59599516SKenneth E. Jansenc.... Compute PDE residual
434*59599516SKenneth E. Jansenc
435*59599516SKenneth E. Jansenc	do e = 1, nElems
436*59599516SKenneth E. Jansenc	    pdeRes(e,1)	= dens
437*59599516SKenneth E. Jansenc     1			* ( masFct      * tkeTd(e)
438*59599516SKenneth E. Jansenc     2		      	  + velK(e,1)   * gradK(e,1)
439*59599516SKenneth E. Jansenc     3		      	  + velK(e,2)   * gradK(e,2)
440*59599516SKenneth E. Jansenc     4		      	  + velK(e,3)   * gradK(e,3) )
441*59599516SKenneth E. Jansenc     5		      	- src(e,1)
442*59599516SKenneth E. Jansenc     6		      	- diffK(e)
443*59599516SKenneth E. Jansenc	    pdeRes(e,2)	= dens
444*59599516SKenneth E. Jansenc     1			* ( masFct      * tepsTd(e)
445*59599516SKenneth E. Jansenc     2		      	  + veleps(e,1) * gradeps(e,1)
446*59599516SKenneth E. Jansenc     3		      	  + veleps(e,2) * gradeps(e,2)
447*59599516SKenneth E. Jansenc     4		      	  + veleps(e,3) * gradeps(e,3) )
448*59599516SKenneth E. Jansenc     5		      	- src(e,2)
449*59599516SKenneth E. Jansenc     6		      	- diffeps(e)
450*59599516SKenneth E. Jansenc	enddo
451*59599516SKenneth E. Jansenc
452*59599516SKenneth E. Jansenc.... end of fElm3KepsCoef()
453*59599516SKenneth E. Jansenc
454*59599516SKenneth E. Jansen	return
455*59599516SKenneth E. Jansen	end
456