1*59599516SKenneth E. Jansen subroutine getthm (pres, T, Sclr, rk, rho, 2*59599516SKenneth E. Jansen & ei, h, s, cv, cp, 3*59599516SKenneth E. Jansen & alfap, betaT, gamb, c ) 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc----------------------------------------------------------------------- 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansenc This subroutine calculates the thermodynamic properties. 8*59599516SKenneth E. Jansenc 9*59599516SKenneth E. Jansenc The different possibilities are: 10*59599516SKenneth E. Jansenc ipress = 0 : calorifically perfect gas 11*59599516SKenneth E. Jansenc ipress = 1 : thermally perfect gas 12*59599516SKenneth E. Jansenc ipress = 2 : mixture of thermally perfect gases in 13*59599516SKenneth E. Jansenc thermo-chemical equilibrium 14*59599516SKenneth E. Jansenc 15*59599516SKenneth E. Jansenc The options available are: 16*59599516SKenneth E. Jansenc 17*59599516SKenneth E. Jansenc ithm = 2 : given rho and T, compute pres and engBC 18*59599516SKenneth E. Jansenc ithm = 3 : given pres and T 19*59599516SKenneth E. Jansenc ithm = 4 : given pres and T, engBC 20*59599516SKenneth E. Jansenc ithm = 6 : given pres and T, compute rho, ei 21*59599516SKenneth E. Jansenc (also given sclr for levelset) 22*59599516SKenneth E. Jansenc ithm = 7 : given pres and T, compute rho, ei, h, cv, cp, 23*59599516SKenneth E. Jansenc alfap, betaT, gamb, c 24*59599516SKenneth E. Jansenc 25*59599516SKenneth E. Jansenc Variables: 26*59599516SKenneth E. Jansenc 27*59599516SKenneth E. Jansenc pres (npro) : pressure 28*59599516SKenneth E. Jansenc T (npro) : temperature 29*59599516SKenneth E. Jansenc rk (npro) : specific kinetic energy 30*59599516SKenneth E. Jansenc rho (npro) : density 31*59599516SKenneth E. Jansenc ei (npro) : internal energy 32*59599516SKenneth E. Jansenc h (npro) : enthalpy 33*59599516SKenneth E. Jansenc s (npro) : entropy 34*59599516SKenneth E. Jansenc cv (npro) : specific heat at constant volume 35*59599516SKenneth E. Jansenc cp (npro) : specific heat at constant pressure 36*59599516SKenneth E. Jansenc alfap (npro) : expansivity 37*59599516SKenneth E. Jansenc betaT (npro) : isothermal compressibility 38*59599516SKenneth E. Jansenc gamb (npro) : gamma-bar (defined in paper by Chalot et al.) 39*59599516SKenneth E. Jansenc c (npro) : speed of sound 40*59599516SKenneth E. Jansenc 41*59599516SKenneth E. Jansenc 42*59599516SKenneth E. Jansenc Zdenek Johan, Spring 1990. 43*59599516SKenneth E. Jansenc Frederic Chalot, Summer 1990. 44*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 45*59599516SKenneth E. Jansenc----------------------------------------------------------------------- 46*59599516SKenneth E. Jansenc 47*59599516SKenneth E. Jansen include "common.h" 48*59599516SKenneth E. Jansenc 49*59599516SKenneth E. Jansen dimension pres(npro), Sclr(npro), 50*59599516SKenneth E. Jansen & T(npro), rk(npro), 51*59599516SKenneth E. Jansen & rho(npro), ei(npro), 52*59599516SKenneth E. Jansen & h(npro), s(npro), 53*59599516SKenneth E. Jansen & cv(npro), cp(npro), 54*59599516SKenneth E. Jansen & alfap(npro), betaT(npro), 55*59599516SKenneth E. Jansen & gamb(npro), c(npro), 56*59599516SKenneth E. Jansen & rsrhol(npro), rsrhog(npro), 57*59599516SKenneth E. Jansen & tmpg(npro), tmpl(npro) 58*59599516SKenneth E. Jansenc 59*59599516SKenneth E. Jansen dimension Texp1(npro), Texp2(npro) 60*59599516SKenneth E. Jansen real*8 prop_blend(npro),test_it(npro) 61*59599516SKenneth E. Jansen 62*59599516SKenneth E. Jansenc ttim(27) = ttim(27) - secs(0.0) 63*59599516SKenneth E. Jansenc 64*59599516SKenneth E. Jansenc.... get the property type flag 65*59599516SKenneth E. Jansenc 66*59599516SKenneth E. Jansen ipress = matflg(1,1) 67*59599516SKenneth E. Jansenc 68*59599516SKenneth E. Jansenc.... ***********************> IPRESS = 0 <*************************** 69*59599516SKenneth E. Jansenc 70*59599516SKenneth E. Jansen if (ipress .eq. 0) then 71*59599516SKenneth E. Jansenc 72*59599516SKenneth E. Jansenc.... ---------------------> ithm = 1 or 2 <-------------------------- 73*59599516SKenneth E. Jansenc 74*59599516SKenneth E. Jansenc 75*59599516SKenneth E. Jansen if (ithm .eq. 2) then 76*59599516SKenneth E. Jansen pres = Rgas * rho * T 77*59599516SKenneth E. Jansenc 78*59599516SKenneth E. Jansen 79*59599516SKenneth E. Jansenc.... compute engBC (internal energy in this case) 80*59599516SKenneth E. Jansenc 81*59599516SKenneth E. Jansenc engBC = T * (Rgas / gamma1) 82*59599516SKenneth E. Jansenc 83*59599516SKenneth E. Jansen flops = flops + npro 84*59599516SKenneth E. Jansenc 85*59599516SKenneth E. Jansen endif 86*59599516SKenneth E. Jansenc 87*59599516SKenneth E. Jansenc.... ---------------------> ithm = 3 or 4 <-------------------------- 88*59599516SKenneth E. Jansenc 89*59599516SKenneth E. Jansen if ((ithm .eq. 3) .or. (ithm .eq. 4)) then 90*59599516SKenneth E. Jansenc 91*59599516SKenneth E. Jansen endif 92*59599516SKenneth E. Jansenc 93*59599516SKenneth E. Jansenc if (ithm .eq. 4) then 94*59599516SKenneth E. Jansenc 95*59599516SKenneth E. Jansenc.... compute engBC (enthalpy in this case) 96*59599516SKenneth E. Jansenc 97*59599516SKenneth E. Jansenc engBC = T * (Rgas * gamma / gamma1) 98*59599516SKenneth E. Jansenc 99*59599516SKenneth E. Jansen flops = flops + npro 100*59599516SKenneth E. Jansenc 101*59599516SKenneth E. Jansenc endif 102*59599516SKenneth E. Jansenc 103*59599516SKenneth E. Jansenc.... --------------------> ithm = 5, 6 or 7 <------------------------ 104*59599516SKenneth E. Jansenc 105*59599516SKenneth E. Jansenc 106*59599516SKenneth E. Jansen if (ithm .ge. 6) then 107*59599516SKenneth E. Jansenc 108*59599516SKenneth E. Jansenc.... compute density and internal energy 109*59599516SKenneth E. Jansenc 110*59599516SKenneth E. Jansen if (iLSet .eq. 0)then 111*59599516SKenneth E. Jansen rho = pres / ( Rgas * T ) 112*59599516SKenneth E. Jansenc 113*59599516SKenneth E. Jansen else ! two fluid properties used in this model 114*59599516SKenneth E. Jansen 115*59599516SKenneth E. Jansen! Smooth the tranistion of properties for a "distance" of epsilon_ls 116*59599516SKenneth E. Jansen! around the interface. Here "distance" is define as the value of the 117*59599516SKenneth E. Jansen! levelset function. If the levelset function is properly defined, 118*59599516SKenneth E. Jansen! this is the true distance normal from the front. Of course, the 119*59599516SKenneth E. Jansen! distance is in a driection normal to the front. 120*59599516SKenneth E. Jansen 121*59599516SKenneth E. Jansen do i= 1, npro 122*59599516SKenneth E. Jansen if (sclr(i) .lt. - epsilon_ls)then 123*59599516SKenneth E. Jansen prop_blend(i) = zero 124*59599516SKenneth E. Jansen elseif (abs(sclr(i)) .le. epsilon_ls)then 125*59599516SKenneth E. Jansen prop_blend(i) = 0.5*(one + Sclr(i)/epsilon_ls + 126*59599516SKenneth E. Jansen & (sin(pi*Sclr(i)/epsilon_ls))/pi ) 127*59599516SKenneth E. Jansen elseif (sclr(i) .gt. epsilon_ls) then 128*59599516SKenneth E. Jansen prop_blend(i) = one 129*59599516SKenneth E. Jansen endif 130*59599516SKenneth E. Jansen enddo 131*59599516SKenneth E. Jansen fact = datmat(1,1,2)/datmat(1,1,1) 132*59599516SKenneth E. Jansenc call eqs(pres,T,rsrhol) 133*59599516SKenneth E. Jansenc rsrhol(:) = pres(:) / ( Rgas * T(:) ) 134*59599516SKenneth E. Jansenc rsrhog(:) = fact* pres(:) / ( Rgas * T(:)) 135*59599516SKenneth E. Jansen rsrhog(:) = pres(:) / ( Rgas * T(:)) 136*59599516SKenneth E. Jansen rsrhol(:) = datmat(1,1,1)* 137*59599516SKenneth E. Jansen & (1+0.000000000517992*(pres-18.02)) 138*59599516SKenneth E. Jansen rho(:) = rsrhol(:)*prop_blend(:)+rsrhog(:) 139*59599516SKenneth E. Jansen & *(1-prop_blend(:)) 140*59599516SKenneth E. Jansenc ... for the VOF case..just in case if we want to run VOF 141*59599516SKenneth E. Jansenc$$$ prop_blend(:) = min((max(sclr(:),0.0)),1.0) 142*59599516SKenneth E. Jansenc$$$ rho(:)=rsrhol(:) * prop_blend(:) + rsrhog(:) * (1-prop_blend(:)) 143*59599516SKenneth E. Jansenc 144*59599516SKenneth E. Jansenc 145*59599516SKenneth E. Jansen endif 146*59599516SKenneth E. Jansenc Calculate Internal Energy 147*59599516SKenneth E. Jansen if (ilset .eq. 0) then 148*59599516SKenneth E. Jansen ei = T * (Rgas / gamma1) 149*59599516SKenneth E. Jansen else 150*59599516SKenneth E. Jansen tmpg = T * (Rgas / gamma1) !for gas phase 151*59599516SKenneth E. Jansen tmpl = 3.264*1000*T !cv*T for liquid phase 152*59599516SKenneth E. Jansenc tmpl = T* 8.314* 18.0/ ((3.598/3.264) -1.0) 153*59599516SKenneth E. Jansen ei(:) = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 154*59599516SKenneth E. Jansen endif 155*59599516SKenneth E. Jansen flops = flops + 4*npro 156*59599516SKenneth E. Jansen endif ! end if(ithm==6) 157*59599516SKenneth E. Jansenc 158*59599516SKenneth E. Jansen if (ithm .ge. 7) then 159*59599516SKenneth E. Jansenc 160*59599516SKenneth E. Jansenc.... compute enthalpy, cv, cp, alfap, betaT, gamb and c 161*59599516SKenneth E. Jansenc 162*59599516SKenneth E. Jansen if (ilset .eq. 0) then 163*59599516SKenneth E. Jansen h = T * (Rgas * gamma / gamma1) 164*59599516SKenneth E. Jansenc 165*59599516SKenneth E. Jansen cv = Rgas / gamma1 166*59599516SKenneth E. Jansen cp = Rgas * gamma / gamma1 167*59599516SKenneth E. Jansenc 168*59599516SKenneth E. Jansen alfap = one / T 169*59599516SKenneth E. Jansen betaT = one / pres 170*59599516SKenneth E. Jansenc 171*59599516SKenneth E. Jansen gamb = gamma1 172*59599516SKenneth E. Jansen c = sqrt( (gamma * Rgas) * T ) 173*59599516SKenneth E. Jansenc 174*59599516SKenneth E. Jansen else 175*59599516SKenneth E. Jansenc 176*59599516SKenneth E. Jansen do i= 1, npro 177*59599516SKenneth E. Jansen if (sclr(i) .lt. - epsilon_ls)then 178*59599516SKenneth E. Jansen prop_blend(i) = zero 179*59599516SKenneth E. Jansen elseif (abs(sclr(i)) .le. epsilon_ls)then 180*59599516SKenneth E. Jansen prop_blend(i) = 0.5*(one + Sclr(i)/epsilon_ls + 181*59599516SKenneth E. Jansen & (sin(pi*Sclr(i)/epsilon_ls))/pi ) 182*59599516SKenneth E. Jansen elseif (sclr(i) .gt. epsilon_ls) then 183*59599516SKenneth E. Jansen prop_blend(i) = one 184*59599516SKenneth E. Jansen endif 185*59599516SKenneth E. Jansen enddo 186*59599516SKenneth E. Jansen rsrhol(:) = datmat(1,1,1)* 187*59599516SKenneth E. Jansen & (1+0.000000000517992*(pres-18.02)) 188*59599516SKenneth E. Jansen tmpg = T * (Rgas * gamma / gamma1) ! enthalpy of gas phase 189*59599516SKenneth E. Jansen tmpl = T*3.264*1000 + pres/rsrhol ! enthalpy of liquid phase 190*59599516SKenneth E. Jansenc tmpl = T*8.314*18.0*3.598/(3.598-3.264) 191*59599516SKenneth E. Jansen h = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 192*59599516SKenneth E. Jansenc 193*59599516SKenneth E. Jansen tmpg = Rgas / gamma1 ! cv for gas phase 194*59599516SKenneth E. Jansen tmpl = 3.264*1000.0 ! cv=cp for liquid phase 195*59599516SKenneth E. Jansen cv = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 196*59599516SKenneth E. Jansenc 197*59599516SKenneth E. Jansen tmpg = Rgas * gamma / gamma1 ! cp for gas phase 198*59599516SKenneth E. Jansen tmpl = 3.264*1000.0 ! cp=cv for liquid phase 199*59599516SKenneth E. Jansen cp = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 200*59599516SKenneth E. Jansenc 201*59599516SKenneth E. Jansen tmpg = one / T ! alfap for gas phase 202*59599516SKenneth E. Jansen tmpl = zero+epsM ! alfap for nearly incompressible liquid 203*59599516SKenneth E. Jansen alfap = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 204*59599516SKenneth E. Jansenc 205*59599516SKenneth E. Jansen tmpg = one / pres ! betaT for gas phase 206*59599516SKenneth E. Jansen tmpl = 0.000000000517992 ! betaT for nearly incompressible liquid 207*59599516SKenneth E. Jansen betaT = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 208*59599516SKenneth E. Jansenc 209*59599516SKenneth E. Jansen tmpg = gamma1 ! gamb for gas phase 210*59599516SKenneth E. Jansen tmpl = 0.0 ! gamb for liquid phase 211*59599516SKenneth E. Jansen gamb = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 212*59599516SKenneth E. Jansenc 213*59599516SKenneth E. Jansen tmpg = sqrt( (gamma * Rgas) * T ) ! c for gas phase 214*59599516SKenneth E. Jansenc tmpl = sqrt( (3.598/3.264 * 8.314*18) * T ) ! for liquid 215*59599516SKenneth E. Jansen tmpl = sqrt(pres/rsrhol) 216*59599516SKenneth E. Jansen c = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 217*59599516SKenneth E. Jansenc 218*59599516SKenneth E. Jansen 219*59599516SKenneth E. Jansen endif 220*59599516SKenneth E. Jansen flops = flops + 12*npro 221*59599516SKenneth E. Jansenc 222*59599516SKenneth E. Jansen endif 223*59599516SKenneth E. Jansenc 224*59599516SKenneth E. Jansenc 225*59599516SKenneth E. Jansenc.... end of ipress = 0 226*59599516SKenneth E. Jansenc 227*59599516SKenneth E. Jansen endif 228*59599516SKenneth E. Jansenc 229*59599516SKenneth E. Jansenc.... ***********************> IPRESS = 1 <*************************** 230*59599516SKenneth E. Jansenc 231*59599516SKenneth E. Jansen if (ipress .eq. 1) then 232*59599516SKenneth E. Jansenc 233*59599516SKenneth E. Jansenc.... ---------------------> ithm = 1 or 2 <-------------------------- 234*59599516SKenneth E. Jansenc 235*59599516SKenneth E. Jansenc 236*59599516SKenneth E. Jansen if (ithm .eq. 2) then 237*59599516SKenneth E. Jansenc 238*59599516SKenneth E. Jansenc.... compute engBC (internal energy in this case) 239*59599516SKenneth E. Jansenc 240*59599516SKenneth E. Jansenc engBC = Rgas * T / gamma1 241*59599516SKenneth E. Jansenc 242*59599516SKenneth E. Jansen endif 243*59599516SKenneth E. Jansenc 244*59599516SKenneth E. Jansenc.... ---------------------> ithm = 3 or 4 <-------------------------- 245*59599516SKenneth E. Jansenc 246*59599516SKenneth E. Jansenc 247*59599516SKenneth E. Jansenc if (ithm .eq. 4) then 248*59599516SKenneth E. Jansenc 249*59599516SKenneth E. Jansenc.... compute engBC (enthalpy in this case) 250*59599516SKenneth E. Jansenc 251*59599516SKenneth E. Jansenc engBC = Rgas * T * gamma / gamma1 252*59599516SKenneth E. Jansenc 253*59599516SKenneth E. Jansenc endif 254*59599516SKenneth E. Jansenc 255*59599516SKenneth E. Jansenc.... --------------------> ithm = 5, 6 or 7 <------------------------ 256*59599516SKenneth E. Jansenc 257*59599516SKenneth E. Jansenc 258*59599516SKenneth E. Jansen if (ithm .ge. 6) then 259*59599516SKenneth E. Jansenc 260*59599516SKenneth E. Jansenc.... compute density and internal energy 261*59599516SKenneth E. Jansenc 262*59599516SKenneth E. Jansen Texp1 = exp ( - Tvib(1)/T ) 263*59599516SKenneth E. Jansen Texp2 = exp ( - Tvib(2)/T ) 264*59599516SKenneth E. Jansenc 265*59599516SKenneth E. Jansen if (iLSet .eq. 0)then 266*59599516SKenneth E. Jansen rho = pres / ( Rgas * T ) 267*59599516SKenneth E. Jansenc 268*59599516SKenneth E. Jansen else ! two fluid properties used in this model 269*59599516SKenneth E. Jansen 270*59599516SKenneth E. Jansen! Smooth the tranistion of properties for a "distance" of epsilon_ls 271*59599516SKenneth E. Jansen! around the interface. Here "distance" is define as the value of the 272*59599516SKenneth E. Jansen! levelset function. If the levelset function is properly defined, 273*59599516SKenneth E. Jansen! this is the true distance normal from the front. Of course, the 274*59599516SKenneth E. Jansen! distance is in a driection normal to the front. 275*59599516SKenneth E. Jansen do i= 1, npro 276*59599516SKenneth E. Jansen if (sclr(i) .lt. - epsilon_ls)then 277*59599516SKenneth E. Jansen prop_blend(i) = zero 278*59599516SKenneth E. Jansen elseif (abs(sclr(i)) .le. epsilon_ls)then 279*59599516SKenneth E. Jansen prop_blend(i) = 0.5*(one + Sclr(i)/epsilon_ls + 280*59599516SKenneth E. Jansen & (sin(pi*Sclr(i)/epsilon_ls))/pi ) 281*59599516SKenneth E. Jansen elseif (sclr(i) .gt. epsilon_ls) then 282*59599516SKenneth E. Jansen prop_blend(i) = one 283*59599516SKenneth E. Jansen endif 284*59599516SKenneth E. Jansen enddo 285*59599516SKenneth E. Jansen fact = datmat(1,1,2)/datmat(1,1,1) 286*59599516SKenneth E. Jansenc rsrhol(:) = pres(:) / ( Rgas * T(:) ) 287*59599516SKenneth E. Jansenc call eqs(pres,T,rsrhol) 288*59599516SKenneth E. Jansenc rsrhog(:) = fact*pres(:) / ( Rgas * T(:)) 289*59599516SKenneth E. Jansen rsrhog(:) = pres(:) / ( Rgas * T(:)) 290*59599516SKenneth E. Jansen rsrhol(:) = datmat(1,1,1)* 291*59599516SKenneth E. Jansen & (1+0.000000000517992*(pres-18.02)) 292*59599516SKenneth E. Jansen rho(:)=rsrhol(:)*prop_blend(:) 293*59599516SKenneth E. Jansen & +rsrhog(:)*(1-prop_blend(:)) 294*59599516SKenneth E. Jansenc ..... for the VOF case .. in case if we want to run VOF 295*59599516SKenneth E. Jansenc$$$ prop_blend(:) = min((max(sclr(:),0.0)),1.0) 296*59599516SKenneth E. Jansenc$$$ rho(:)=rsrhol(:) * prop_blend(:) + rsrhog(:) * (1-prop_blend(:)) 297*59599516SKenneth E. Jansenc 298*59599516SKenneth E. Jansen endif 299*59599516SKenneth E. Jansenc 300*59599516SKenneth E. Jansen ei = yN2 * ( cvs(1) * T 301*59599516SKenneth E. Jansen & + Rs(1) * Tvib(1) * Texp1 / ( one - Texp1 ) ) 302*59599516SKenneth E. Jansen & + yO2 * ( cvs(2) * T 303*59599516SKenneth E. Jansen & + Rs(2) * Tvib(2) * Texp2 / ( one - Texp2 ) ) 304*59599516SKenneth E. Jansenc 305*59599516SKenneth E. Jansen endif 306*59599516SKenneth E. Jansenc 307*59599516SKenneth E. Jansen if (ithm .ge. 7) then 308*59599516SKenneth E. Jansenc 309*59599516SKenneth E. Jansenc.... compute enthalpy, cp, alfap, betaT, cv, gamb and c 310*59599516SKenneth E. Jansenc 311*59599516SKenneth E. Jansen h = ei + Rgas * T 312*59599516SKenneth E. Jansenc 313*59599516SKenneth E. Jansen alfap = one / T 314*59599516SKenneth E. Jansenc 315*59599516SKenneth E. Jansen betaT = one / pres 316*59599516SKenneth E. Jansenc 317*59599516SKenneth E. Jansen cp = yN2 * ( cps(1) + Rs(1) * Tvib(1)**2 * Texp1 318*59599516SKenneth E. Jansen & / ( ( one - Texp1 ) * T )**2 ) 319*59599516SKenneth E. Jansen & + yO2 * ( cps(2) + Rs(2) * Tvib(2)**2 * Texp2 320*59599516SKenneth E. Jansen & / ( ( one - Texp2 ) * T )**2 ) 321*59599516SKenneth E. Jansenc 322*59599516SKenneth E. Jansen cv = cp - Rgas 323*59599516SKenneth E. Jansenc 324*59599516SKenneth E. Jansen gamb = Rgas / cv 325*59599516SKenneth E. Jansenc 326*59599516SKenneth E. Jansen c = sqrt( cp * gamb * T ) 327*59599516SKenneth E. Jansenc 328*59599516SKenneth E. Jansen endif 329*59599516SKenneth E. Jansenc 330*59599516SKenneth E. Jansenc 331*59599516SKenneth E. Jansenc.... end of ipress = 1 332*59599516SKenneth E. Jansenc 333*59599516SKenneth E. Jansen endif 334*59599516SKenneth E. Jansen 335*59599516SKenneth E. Jansenc ttim(27) = ttim(27) + secs(0.0) 336*59599516SKenneth E. Jansenc 337*59599516SKenneth E. Jansenc.... end 338*59599516SKenneth E. Jansenc 339*59599516SKenneth E. Jansen return 340*59599516SKenneth E. Jansen end 341