Energy-related terms from (ro,p): returns d(rho*e)/d(ro)|p and can also provide e, de/dv|p, and de/dp|v.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | ro | |||
| real(kind=dp), | intent(in) | :: | p | |||
| real(kind=dp), | intent(out), | optional | :: | e | ||
| real(kind=dp), | intent(out), | optional | :: | dedv | ||
| real(kind=dp), | intent(out), | optional | :: | dedp |
function droeint_droP(ro, p, e, dedv, dedp) result(droeint_dro) !! Energy-related terms from (ro,p): !! returns d(rho*e)/d(ro)|p and can also provide e, de/dv|p, and de/dp|v. real(dp), intent(in) :: ro, p real(dp), intent(out), optional :: e, dedv, dedp real(dp) :: droeint_dro real(dp) :: ro_Arp, T, cvloc_Arp, dPdRo_Arp, dPdT_Arp, eint_Arp, deintdRo_Arp, dedT_Arp, e_loc type(ThArrays_t) :: ThAr integer :: n T = T_roP(ro, p) ro_Arp = ro/(MolMass*1000.0_dp) call eos_terms(ro_Arp, T, ThAr) cvloc_Arp = cp0_Arp - R_cte_gaz_Arp dPdRo_Arp = R_cte_gaz_Arp*T dPdT_Arp = ro_Arp*R_cte_gaz_Arp eint_Arp = cp0_Arp*T + q0_Arp - R_cte_gaz_Arp*T deintdRo_Arp = 0.0_dp dedT_Arp = cp0_Arp - R_cte_gaz_Arp do n = 1, 14 cvloc_Arp = cvloc_Arp + ThAr%Dergg(n)*ThAr%hh(n)/ro_Arp dPdRo_Arp = dPdRo_Arp + ThAr%Derf(n)*ThAr%g(n) dPdT_Arp = dPdT_Arp + ThAr%f(n)*ThAr%Derg(n) eint_Arp = eint_Arp + ThAr%gg(n)*ThAr%ff(n) deintdRo_Arp = deintdRo_Arp + ThAr%gg(n)*ThAr%f(n)/(ro_Arp**2) dedT_Arp = dedT_Arp + ThAr%Dergg(n)*ThAr%ff(n) enddo e_loc = eint_Arp * 1000.0_dp/MolMass droeint_dro = ro_Arp*deintdRo_Arp - ro_Arp*cvloc_Arp*dPdRo_Arp/dPdT_Arp + eint_Arp droeint_dro = droeint_dro * 1000.0_dp/MolMass if (present(e)) e = e_loc if (present(dedv)) dedv = ro*(e_loc - droeint_dro) if (present(dedp)) dedp = (dedT_Arp*1000.0_dp/MolMass)/(dPdT_Arp*1.0e6_dp) end function droeint_droP