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