159599516SKenneth E. Jansen subroutine getthm (pres, T, Sclr, rk, rho, 259599516SKenneth E. Jansen & ei, h, s, cv, cp, 359599516SKenneth E. Jansen & alfap, betaT, gamb, c ) 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc----------------------------------------------------------------------- 659599516SKenneth E. Jansenc 759599516SKenneth E. Jansenc This subroutine calculates the thermodynamic properties. 859599516SKenneth E. Jansenc 959599516SKenneth E. Jansenc The different possibilities are: 1059599516SKenneth E. Jansenc ipress = 0 : calorifically perfect gas 1159599516SKenneth E. Jansenc ipress = 1 : thermally perfect gas 1259599516SKenneth E. Jansenc ipress = 2 : mixture of thermally perfect gases in 1359599516SKenneth E. Jansenc thermo-chemical equilibrium 1459599516SKenneth E. Jansenc 1559599516SKenneth E. Jansenc The options available are: 1659599516SKenneth E. Jansenc 1759599516SKenneth E. Jansenc ithm = 2 : given rho and T, compute pres and engBC 1859599516SKenneth E. Jansenc ithm = 3 : given pres and T 1959599516SKenneth E. Jansenc ithm = 4 : given pres and T, engBC 2059599516SKenneth E. Jansenc ithm = 6 : given pres and T, compute rho, ei 2159599516SKenneth E. Jansenc (also given sclr for levelset) 2259599516SKenneth E. Jansenc ithm = 7 : given pres and T, compute rho, ei, h, cv, cp, 2359599516SKenneth E. Jansenc alfap, betaT, gamb, c 2459599516SKenneth E. Jansenc 2559599516SKenneth E. Jansenc Variables: 2659599516SKenneth E. Jansenc 2759599516SKenneth E. Jansenc pres (npro) : pressure 2859599516SKenneth E. Jansenc T (npro) : temperature 2959599516SKenneth E. Jansenc rk (npro) : specific kinetic energy 3059599516SKenneth E. Jansenc rho (npro) : density 3159599516SKenneth E. Jansenc ei (npro) : internal energy 3259599516SKenneth E. Jansenc h (npro) : enthalpy 3359599516SKenneth E. Jansenc s (npro) : entropy 3459599516SKenneth E. Jansenc cv (npro) : specific heat at constant volume 3559599516SKenneth E. Jansenc cp (npro) : specific heat at constant pressure 3659599516SKenneth E. Jansenc alfap (npro) : expansivity 3759599516SKenneth E. Jansenc betaT (npro) : isothermal compressibility 3859599516SKenneth E. Jansenc gamb (npro) : gamma-bar (defined in paper by Chalot et al.) 3959599516SKenneth E. Jansenc c (npro) : speed of sound 4059599516SKenneth E. Jansenc 4159599516SKenneth E. Jansenc 4259599516SKenneth E. Jansenc Zdenek Johan, Spring 1990. 4359599516SKenneth E. Jansenc Frederic Chalot, Summer 1990. 4459599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 4559599516SKenneth E. Jansenc----------------------------------------------------------------------- 4659599516SKenneth E. Jansenc 4759599516SKenneth E. Jansen include "common.h" 4859599516SKenneth E. Jansenc 4959599516SKenneth E. Jansen dimension pres(npro), Sclr(npro), 5059599516SKenneth E. Jansen & T(npro), rk(npro), 5159599516SKenneth E. Jansen & rho(npro), ei(npro), 5259599516SKenneth E. Jansen & h(npro), s(npro), 5359599516SKenneth E. Jansen & cv(npro), cp(npro), 5459599516SKenneth E. Jansen & alfap(npro), betaT(npro), 5559599516SKenneth E. Jansen & gamb(npro), c(npro), 5659599516SKenneth E. Jansen & rsrhol(npro), rsrhog(npro), 5759599516SKenneth E. Jansen & tmpg(npro), tmpl(npro) 5859599516SKenneth E. Jansenc 5959599516SKenneth E. Jansen dimension Texp1(npro), Texp2(npro) 6059599516SKenneth E. Jansen real*8 prop_blend(npro),test_it(npro) 6159599516SKenneth E. Jansen 6259599516SKenneth E. Jansenc ttim(27) = ttim(27) - secs(0.0) 6359599516SKenneth E. Jansenc 6459599516SKenneth E. Jansenc.... get the property type flag 6559599516SKenneth E. Jansenc 6659599516SKenneth E. Jansen ipress = matflg(1,1) 6759599516SKenneth E. Jansenc 6859599516SKenneth E. Jansenc.... ***********************> IPRESS = 0 <*************************** 6959599516SKenneth E. Jansenc 7059599516SKenneth E. Jansen if (ipress .eq. 0) then 7159599516SKenneth E. Jansenc 7259599516SKenneth E. Jansenc.... ---------------------> ithm = 1 or 2 <-------------------------- 7359599516SKenneth E. Jansenc 7459599516SKenneth E. Jansenc 7559599516SKenneth E. Jansen if (ithm .eq. 2) then 7659599516SKenneth E. Jansen pres = Rgas * rho * T 7759599516SKenneth E. Jansenc 7859599516SKenneth E. Jansen 7959599516SKenneth E. Jansenc.... compute engBC (internal energy in this case) 8059599516SKenneth E. Jansenc 8159599516SKenneth E. Jansenc engBC = T * (Rgas / gamma1) 8259599516SKenneth E. Jansenc 83*f4d0b58bSKenneth E. Jansen! flops = flops + npro 8459599516SKenneth E. Jansenc 8559599516SKenneth E. Jansen endif 8659599516SKenneth E. Jansenc 8759599516SKenneth E. Jansenc.... ---------------------> ithm = 3 or 4 <-------------------------- 8859599516SKenneth E. Jansenc 8959599516SKenneth E. Jansen if ((ithm .eq. 3) .or. (ithm .eq. 4)) then 9059599516SKenneth E. Jansenc 9159599516SKenneth E. Jansen endif 9259599516SKenneth E. Jansenc 9359599516SKenneth E. Jansenc if (ithm .eq. 4) then 9459599516SKenneth E. Jansenc 9559599516SKenneth E. Jansenc.... compute engBC (enthalpy in this case) 9659599516SKenneth E. Jansenc 9759599516SKenneth E. Jansenc engBC = T * (Rgas * gamma / gamma1) 9859599516SKenneth E. Jansenc 99*f4d0b58bSKenneth E. Jansen! flops = flops + npro 10059599516SKenneth E. Jansenc 10159599516SKenneth E. Jansenc endif 10259599516SKenneth E. Jansenc 10359599516SKenneth E. Jansenc.... --------------------> ithm = 5, 6 or 7 <------------------------ 10459599516SKenneth E. Jansenc 10559599516SKenneth E. Jansenc 10659599516SKenneth E. Jansen if (ithm .ge. 6) then 10759599516SKenneth E. Jansenc 10859599516SKenneth E. Jansenc.... compute density and internal energy 10959599516SKenneth E. Jansenc 11059599516SKenneth E. Jansen if (iLSet .eq. 0)then 11159599516SKenneth E. Jansen rho = pres / ( Rgas * T ) 11259599516SKenneth E. Jansenc 11359599516SKenneth E. Jansen else ! two fluid properties used in this model 11459599516SKenneth E. Jansen 11559599516SKenneth E. Jansen! Smooth the tranistion of properties for a "distance" of epsilon_ls 11659599516SKenneth E. Jansen! around the interface. Here "distance" is define as the value of the 11759599516SKenneth E. Jansen! levelset function. If the levelset function is properly defined, 11859599516SKenneth E. Jansen! this is the true distance normal from the front. Of course, the 11959599516SKenneth E. Jansen! distance is in a driection normal to the front. 12059599516SKenneth E. Jansen 12159599516SKenneth E. Jansen do i= 1, npro 12259599516SKenneth E. Jansen if (sclr(i) .lt. - epsilon_ls)then 12359599516SKenneth E. Jansen prop_blend(i) = zero 12459599516SKenneth E. Jansen elseif (abs(sclr(i)) .le. epsilon_ls)then 12559599516SKenneth E. Jansen prop_blend(i) = 0.5*(one + Sclr(i)/epsilon_ls + 12659599516SKenneth E. Jansen & (sin(pi*Sclr(i)/epsilon_ls))/pi ) 12759599516SKenneth E. Jansen elseif (sclr(i) .gt. epsilon_ls) then 12859599516SKenneth E. Jansen prop_blend(i) = one 12959599516SKenneth E. Jansen endif 13059599516SKenneth E. Jansen enddo 13159599516SKenneth E. Jansen fact = datmat(1,1,2)/datmat(1,1,1) 13259599516SKenneth E. Jansenc call eqs(pres,T,rsrhol) 13359599516SKenneth E. Jansenc rsrhol(:) = pres(:) / ( Rgas * T(:) ) 13459599516SKenneth E. Jansenc rsrhog(:) = fact* pres(:) / ( Rgas * T(:)) 13559599516SKenneth E. Jansen rsrhog(:) = pres(:) / ( Rgas * T(:)) 13659599516SKenneth E. Jansen rsrhol(:) = datmat(1,1,1)* 13759599516SKenneth E. Jansen & (1+0.000000000517992*(pres-18.02)) 13859599516SKenneth E. Jansen rho(:) = rsrhol(:)*prop_blend(:)+rsrhog(:) 13959599516SKenneth E. Jansen & *(1-prop_blend(:)) 14059599516SKenneth E. Jansenc ... for the VOF case..just in case if we want to run VOF 14159599516SKenneth E. Jansenc$$$ prop_blend(:) = min((max(sclr(:),0.0)),1.0) 14259599516SKenneth E. Jansenc$$$ rho(:)=rsrhol(:) * prop_blend(:) + rsrhog(:) * (1-prop_blend(:)) 14359599516SKenneth E. Jansenc 14459599516SKenneth E. Jansenc 14559599516SKenneth E. Jansen endif 14659599516SKenneth E. Jansenc Calculate Internal Energy 14759599516SKenneth E. Jansen if (ilset .eq. 0) then 14859599516SKenneth E. Jansen ei = T * (Rgas / gamma1) 14959599516SKenneth E. Jansen else 15059599516SKenneth E. Jansen tmpg = T * (Rgas / gamma1) !for gas phase 15159599516SKenneth E. Jansen tmpl = 3.264*1000*T !cv*T for liquid phase 15259599516SKenneth E. Jansenc tmpl = T* 8.314* 18.0/ ((3.598/3.264) -1.0) 15359599516SKenneth E. Jansen ei(:) = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 15459599516SKenneth E. Jansen endif 155*f4d0b58bSKenneth E. Jansen! flops = flops + 4*npro 15659599516SKenneth E. Jansen endif ! end if(ithm==6) 15759599516SKenneth E. Jansenc 15859599516SKenneth E. Jansen if (ithm .ge. 7) then 15959599516SKenneth E. Jansenc 16059599516SKenneth E. Jansenc.... compute enthalpy, cv, cp, alfap, betaT, gamb and c 16159599516SKenneth E. Jansenc 16259599516SKenneth E. Jansen if (ilset .eq. 0) then 16359599516SKenneth E. Jansen h = T * (Rgas * gamma / gamma1) 16459599516SKenneth E. Jansenc 16559599516SKenneth E. Jansen cv = Rgas / gamma1 16659599516SKenneth E. Jansen cp = Rgas * gamma / gamma1 16759599516SKenneth E. Jansenc 16859599516SKenneth E. Jansen alfap = one / T 16959599516SKenneth E. Jansen betaT = one / pres 17059599516SKenneth E. Jansenc 17159599516SKenneth E. Jansen gamb = gamma1 17259599516SKenneth E. Jansen c = sqrt( (gamma * Rgas) * T ) 17359599516SKenneth E. Jansenc 17459599516SKenneth E. Jansen else 17559599516SKenneth E. Jansenc 17659599516SKenneth E. Jansen do i= 1, npro 17759599516SKenneth E. Jansen if (sclr(i) .lt. - epsilon_ls)then 17859599516SKenneth E. Jansen prop_blend(i) = zero 17959599516SKenneth E. Jansen elseif (abs(sclr(i)) .le. epsilon_ls)then 18059599516SKenneth E. Jansen prop_blend(i) = 0.5*(one + Sclr(i)/epsilon_ls + 18159599516SKenneth E. Jansen & (sin(pi*Sclr(i)/epsilon_ls))/pi ) 18259599516SKenneth E. Jansen elseif (sclr(i) .gt. epsilon_ls) then 18359599516SKenneth E. Jansen prop_blend(i) = one 18459599516SKenneth E. Jansen endif 18559599516SKenneth E. Jansen enddo 18659599516SKenneth E. Jansen rsrhol(:) = datmat(1,1,1)* 18759599516SKenneth E. Jansen & (1+0.000000000517992*(pres-18.02)) 18859599516SKenneth E. Jansen tmpg = T * (Rgas * gamma / gamma1) ! enthalpy of gas phase 18959599516SKenneth E. Jansen tmpl = T*3.264*1000 + pres/rsrhol ! enthalpy of liquid phase 19059599516SKenneth E. Jansenc tmpl = T*8.314*18.0*3.598/(3.598-3.264) 19159599516SKenneth E. Jansen h = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 19259599516SKenneth E. Jansenc 19359599516SKenneth E. Jansen tmpg = Rgas / gamma1 ! cv for gas phase 19459599516SKenneth E. Jansen tmpl = 3.264*1000.0 ! cv=cp for liquid phase 19559599516SKenneth E. Jansen cv = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 19659599516SKenneth E. Jansenc 19759599516SKenneth E. Jansen tmpg = Rgas * gamma / gamma1 ! cp for gas phase 19859599516SKenneth E. Jansen tmpl = 3.264*1000.0 ! cp=cv for liquid phase 19959599516SKenneth E. Jansen cp = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 20059599516SKenneth E. Jansenc 20159599516SKenneth E. Jansen tmpg = one / T ! alfap for gas phase 20259599516SKenneth E. Jansen tmpl = zero+epsM ! alfap for nearly incompressible liquid 20359599516SKenneth E. Jansen alfap = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 20459599516SKenneth E. Jansenc 20559599516SKenneth E. Jansen tmpg = one / pres ! betaT for gas phase 20659599516SKenneth E. Jansen tmpl = 0.000000000517992 ! betaT for nearly incompressible liquid 20759599516SKenneth E. Jansen betaT = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 20859599516SKenneth E. Jansenc 20959599516SKenneth E. Jansen tmpg = gamma1 ! gamb for gas phase 21059599516SKenneth E. Jansen tmpl = 0.0 ! gamb for liquid phase 21159599516SKenneth E. Jansen gamb = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 21259599516SKenneth E. Jansenc 21359599516SKenneth E. Jansen tmpg = sqrt( (gamma * Rgas) * T ) ! c for gas phase 21459599516SKenneth E. Jansenc tmpl = sqrt( (3.598/3.264 * 8.314*18) * T ) ! for liquid 21559599516SKenneth E. Jansen tmpl = sqrt(pres/rsrhol) 21659599516SKenneth E. Jansen c = tmpl(:)*prop_blend(:)+tmpg*(1-prop_blend(:)) 21759599516SKenneth E. Jansenc 21859599516SKenneth E. Jansen 21959599516SKenneth E. Jansen endif 220*f4d0b58bSKenneth E. Jansen! flops = flops + 12*npro 22159599516SKenneth E. Jansenc 22259599516SKenneth E. Jansen endif 22359599516SKenneth E. Jansenc 22459599516SKenneth E. Jansenc 22559599516SKenneth E. Jansenc.... end of ipress = 0 22659599516SKenneth E. Jansenc 22759599516SKenneth E. Jansen endif 22859599516SKenneth E. Jansenc 22959599516SKenneth E. Jansenc.... ***********************> IPRESS = 1 <*************************** 23059599516SKenneth E. Jansenc 23159599516SKenneth E. Jansen if (ipress .eq. 1) then 23259599516SKenneth E. Jansenc 23359599516SKenneth E. Jansenc.... ---------------------> ithm = 1 or 2 <-------------------------- 23459599516SKenneth E. Jansenc 23559599516SKenneth E. Jansenc 23659599516SKenneth E. Jansen if (ithm .eq. 2) then 23759599516SKenneth E. Jansenc 23859599516SKenneth E. Jansenc.... compute engBC (internal energy in this case) 23959599516SKenneth E. Jansenc 24059599516SKenneth E. Jansenc engBC = Rgas * T / gamma1 24159599516SKenneth E. Jansenc 24259599516SKenneth E. Jansen endif 24359599516SKenneth E. Jansenc 24459599516SKenneth E. Jansenc.... ---------------------> ithm = 3 or 4 <-------------------------- 24559599516SKenneth E. Jansenc 24659599516SKenneth E. Jansenc 24759599516SKenneth E. Jansenc if (ithm .eq. 4) then 24859599516SKenneth E. Jansenc 24959599516SKenneth E. Jansenc.... compute engBC (enthalpy in this case) 25059599516SKenneth E. Jansenc 25159599516SKenneth E. Jansenc engBC = Rgas * T * gamma / gamma1 25259599516SKenneth E. Jansenc 25359599516SKenneth E. Jansenc endif 25459599516SKenneth E. Jansenc 25559599516SKenneth E. Jansenc.... --------------------> ithm = 5, 6 or 7 <------------------------ 25659599516SKenneth E. Jansenc 25759599516SKenneth E. Jansenc 25859599516SKenneth E. Jansen if (ithm .ge. 6) then 25959599516SKenneth E. Jansenc 26059599516SKenneth E. Jansenc.... compute density and internal energy 26159599516SKenneth E. Jansenc 26259599516SKenneth E. Jansen Texp1 = exp ( - Tvib(1)/T ) 26359599516SKenneth E. Jansen Texp2 = exp ( - Tvib(2)/T ) 26459599516SKenneth E. Jansenc 26559599516SKenneth E. Jansen if (iLSet .eq. 0)then 26659599516SKenneth E. Jansen rho = pres / ( Rgas * T ) 26759599516SKenneth E. Jansenc 26859599516SKenneth E. Jansen else ! two fluid properties used in this model 26959599516SKenneth E. Jansen 27059599516SKenneth E. Jansen! Smooth the tranistion of properties for a "distance" of epsilon_ls 27159599516SKenneth E. Jansen! around the interface. Here "distance" is define as the value of the 27259599516SKenneth E. Jansen! levelset function. If the levelset function is properly defined, 27359599516SKenneth E. Jansen! this is the true distance normal from the front. Of course, the 27459599516SKenneth E. Jansen! distance is in a driection normal to the front. 27559599516SKenneth E. Jansen do i= 1, npro 27659599516SKenneth E. Jansen if (sclr(i) .lt. - epsilon_ls)then 27759599516SKenneth E. Jansen prop_blend(i) = zero 27859599516SKenneth E. Jansen elseif (abs(sclr(i)) .le. epsilon_ls)then 27959599516SKenneth E. Jansen prop_blend(i) = 0.5*(one + Sclr(i)/epsilon_ls + 28059599516SKenneth E. Jansen & (sin(pi*Sclr(i)/epsilon_ls))/pi ) 28159599516SKenneth E. Jansen elseif (sclr(i) .gt. epsilon_ls) then 28259599516SKenneth E. Jansen prop_blend(i) = one 28359599516SKenneth E. Jansen endif 28459599516SKenneth E. Jansen enddo 28559599516SKenneth E. Jansen fact = datmat(1,1,2)/datmat(1,1,1) 28659599516SKenneth E. Jansenc rsrhol(:) = pres(:) / ( Rgas * T(:) ) 28759599516SKenneth E. Jansenc call eqs(pres,T,rsrhol) 28859599516SKenneth E. Jansenc rsrhog(:) = fact*pres(:) / ( Rgas * T(:)) 28959599516SKenneth E. Jansen rsrhog(:) = pres(:) / ( Rgas * T(:)) 29059599516SKenneth E. Jansen rsrhol(:) = datmat(1,1,1)* 29159599516SKenneth E. Jansen & (1+0.000000000517992*(pres-18.02)) 29259599516SKenneth E. Jansen rho(:)=rsrhol(:)*prop_blend(:) 29359599516SKenneth E. Jansen & +rsrhog(:)*(1-prop_blend(:)) 29459599516SKenneth E. Jansenc ..... for the VOF case .. in case if we want to run VOF 29559599516SKenneth E. Jansenc$$$ prop_blend(:) = min((max(sclr(:),0.0)),1.0) 29659599516SKenneth E. Jansenc$$$ rho(:)=rsrhol(:) * prop_blend(:) + rsrhog(:) * (1-prop_blend(:)) 29759599516SKenneth E. Jansenc 29859599516SKenneth E. Jansen endif 29959599516SKenneth E. Jansenc 30059599516SKenneth E. Jansen ei = yN2 * ( cvs(1) * T 30159599516SKenneth E. Jansen & + Rs(1) * Tvib(1) * Texp1 / ( one - Texp1 ) ) 30259599516SKenneth E. Jansen & + yO2 * ( cvs(2) * T 30359599516SKenneth E. Jansen & + Rs(2) * Tvib(2) * Texp2 / ( one - Texp2 ) ) 30459599516SKenneth E. Jansenc 30559599516SKenneth E. Jansen endif 30659599516SKenneth E. Jansenc 30759599516SKenneth E. Jansen if (ithm .ge. 7) then 30859599516SKenneth E. Jansenc 30959599516SKenneth E. Jansenc.... compute enthalpy, cp, alfap, betaT, cv, gamb and c 31059599516SKenneth E. Jansenc 31159599516SKenneth E. Jansen h = ei + Rgas * T 31259599516SKenneth E. Jansenc 31359599516SKenneth E. Jansen alfap = one / T 31459599516SKenneth E. Jansenc 31559599516SKenneth E. Jansen betaT = one / pres 31659599516SKenneth E. Jansenc 31759599516SKenneth E. Jansen cp = yN2 * ( cps(1) + Rs(1) * Tvib(1)**2 * Texp1 31859599516SKenneth E. Jansen & / ( ( one - Texp1 ) * T )**2 ) 31959599516SKenneth E. Jansen & + yO2 * ( cps(2) + Rs(2) * Tvib(2)**2 * Texp2 32059599516SKenneth E. Jansen & / ( ( one - Texp2 ) * T )**2 ) 32159599516SKenneth E. Jansenc 32259599516SKenneth E. Jansen cv = cp - Rgas 32359599516SKenneth E. Jansenc 32459599516SKenneth E. Jansen gamb = Rgas / cv 32559599516SKenneth E. Jansenc 32659599516SKenneth E. Jansen c = sqrt( cp * gamb * T ) 32759599516SKenneth E. Jansenc 32859599516SKenneth E. Jansen endif 32959599516SKenneth E. Jansenc 33059599516SKenneth E. Jansenc 33159599516SKenneth E. Jansenc.... end of ipress = 1 33259599516SKenneth E. Jansenc 33359599516SKenneth E. Jansen endif 33459599516SKenneth E. Jansen 33559599516SKenneth E. Jansenc ttim(27) = ttim(27) + secs(0.0) 33659599516SKenneth E. Jansenc 33759599516SKenneth E. Jansenc.... end 33859599516SKenneth E. Jansenc 33959599516SKenneth E. Jansen return 34059599516SKenneth E. Jansen end 341