66 lines
1.9 KiB
Fortran
66 lines
1.9 KiB
Fortran
SUBROUTINE TRMDRT(ID,T,P,HEATCP,DLRDLT,GRDADB,RHO)
|
|
C ==================================================
|
|
C
|
|
C Thermodynamic derivatives - based on statew equation and entropy
|
|
C tables
|
|
C
|
|
C Input: T - temperature
|
|
C P - gas pressure
|
|
C
|
|
C Output: HEATCP - specific heat at constant pressure
|
|
C DLRDLT - d(ln rho)/d(ln T)
|
|
C GRDADB - adiabatic gradient d(ln T)/d(ln P)_ad
|
|
C etdrt
|
|
C
|
|
INCLUDE 'IMPLIC.FOR'
|
|
INCLUDE 'BASICS.FOR'
|
|
COMMON/CC/DPDR,DPDT,DSDT,DSDR,CV,S,GAMMA
|
|
COMMON/CONVOUT/CFLX(MDEPTH),VELCON(MDEPTH),GRADAD(MDEPTH),
|
|
& ENT(MDEPTH)
|
|
C
|
|
parameter (RCON=8.31434E7)
|
|
parameter(wmol0=1.67333E-24/2.3)
|
|
common/tdedge/redge,pedge(100),sedge(100),cvedge(100),
|
|
& cpedge(100),gammaedge(100),tedge(100)
|
|
common/tdflag/JON
|
|
C
|
|
C numerical evaluation of thermodynamic derivatives
|
|
C
|
|
rho=rhoeos(t,p)
|
|
drho=0.01*rho
|
|
dt=0.01*t
|
|
call prsent(rho,t,p0,s0)
|
|
call prsent(rho+drho,t,p1,s1)
|
|
call prsent(rho-drho,t,p2,s2)
|
|
call prsent(rho,t+dt,p3,s3)
|
|
call prsent(rho,t-dt,p4,s4)
|
|
dpdr=(p1-p2)/(2.*drho)
|
|
dpdt=(p3-p4)/(2.*dt)
|
|
dsdr=(s1-s2)/(2.*drho)*rcon
|
|
dsdt=(s3-s4)/(2.*dt)*rcon
|
|
DEN=DPDR*DSDT-DPDT*DSDR
|
|
c
|
|
if(jon .eq. 0) then
|
|
HEATCV=T*DSDT
|
|
HEATCP=T*DEN/DPDR
|
|
DQ=DSDT*P/(DEN*RHO)
|
|
GAMMA=1.d0/DQ
|
|
DLRDLT = -RHO*DPDR/(T*DPDT)
|
|
DLRDLT = 1.D0/DLRDLT
|
|
GRDADB = -P/(HEATCP*RHO*T)*DLRDLT
|
|
TDPT=T*DPDT
|
|
else if(jon .ne. 0) then
|
|
HEATCV = cvedge(JON)
|
|
HEATCP = cpedge(JON)
|
|
DLRDLT = -1.d0
|
|
GRDADB = -P/(HEATCP*RHO*T)*DLRDLT ! 0.4d0
|
|
GAMMA = gammaedge(JON)
|
|
endif
|
|
C
|
|
grdadb=p/t*(dsdr/(dsdr*dpdt-dsdt*dpdr))
|
|
GRADAD(ID) = GRDADB
|
|
ENT(ID) = S0
|
|
C
|
|
RETURN
|
|
END
|