SUBROUTINE derivatives(pp,tt,x,deriv, 1 ro,drop,drot,drox,u,dup,dut,dux, 2 delta,deltap,deltat,deltax,cp,dcpp,dcpt,dcpx, 3 gradad,dgradadp,dgradadt,dgradadx,alfa,beta,gamma1) ! Compute density and some other functions and their derivatives ! for metallicity Z from the SAHA-S3 tables (Z=0.000, 0.010, 0.015, 0.020). ! ! input : ! p : pressure ! t : temperature ! x : hydrogen abundance ! deriv=.FALSE. : avoide computations of some derivatives ! output : ! ro : density and derivatives ! u : internal energy and derivatives ! ... USE mod_donnees, ONLY: aradia, ln10 IMPLICIT NONE REAL*8, INTENT(in) :: x REAL*8, INTENT(in) :: pp, tt LOGICAL, INTENT(in) :: deriv REAL*8, INTENT(out) :: ro,drop,drot,drox,u,dup,dut,dux REAL*8, INTENT(out) :: delta,deltap,deltat,deltax,cp,dcpp,dcpt,dcpx REAL*8, INTENT(out) :: gradad,dgradadp,dgradadt,dgradadx,alfa,beta, gamma1 REAL*8 cv, chi_T REAL*8 duro REAL*8, DIMENSION(mv) :: eos REAL*8, DIMENSION(mv,3) :: deos REAL*8, SAVE :: aradias3, dlg_e LOGICAL, SAVE :: init=.TRUE. REAL*8 :: p, t ! ______________________________________________________________________________ IF(init)THEN init=.FALSE. aradias3=aradia/3.d0 dlg_e=1.d0/ln10 ENDIF p=pp ; t=tt CALL rhoof_PTX(log10(t),log10(p),x,eos,deos) ro=eos(10) ! calculation TD-derivatives in point T,P,X drop=ro/p/eos(5) !1 / dp/dro_T delta=eos(6) chi_T=delta*eos(5) ! chi_T calculated from delta drot=-ro/t*delta !- dp/dT / dp/dro = drho/dT_P u=eos(2) duro=eos(3) dup=duro*drop !du/dro_T * dro/dp_T cp=eos(4) cv=cp-p/ro/t*chi_T*delta dut=duro*drot+cv !du/dt_P=du/dro_T * dro/dT_P + du/dt_v gradad=eos(8) alfa=1.d0/eos(5) ! 1/chi ro beta=1.d0-aradias3*t**4/p gamma1=eos(7) drox=-eos(11)/x*ro/eos(5) ! dro/dx_{P,T} expressed via dP/dx_{ro,T} dux=eos(12)+duro*drox ! dU/dx_{P,T} expressed via dU/dx_{ro,T} IF(deriv)THEN dcpx=deos(4,1)+deos(4,3)/ro*dlg_e*drox deltax=deos(6,1)+deos(6,3)/ro*dlg_e*drox dgradadx=deos(8,1)+deos(8,3)/ro*dlg_e*drox dcpt=(deos(4,2)-(delta+2.25d0)*deos(4,3))/T*dlg_e deltat=(deos(6,2)-(delta+2.25d0)*deos(6,3))/T*dlg_e dgradadt=(deos(8,2)-(delta+2.25d0)*deos(8,3))/T*dlg_e dcpp=deos(4,3)*drop*dlg_e/ro deltap=deos(6,3)*drop*dlg_e/ro dgradadp=deos(8,3)*drop*dlg_e/ro ELSE dcpx=0.d0 ; deltax= 0.d0 ; dgradadx=0.d0 ; dcpt=0.d0 ; deltat=0.d0 dgradadt=0.d0 ; dcpp=0.d0 ; deltap=0.d0 ; dgradadp=0.d0 ENDIF RETURN END SUBROUTINE derivatives