xref: /phasta/phSolver/compressible/getthm.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
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