d(c^2)/dRo and d(c^2)/dP at constant T / constant Ro respectively.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | ro | |||
| real(kind=dp), | intent(in) | :: | T | |||
| real(kind=dp), | intent(out) | :: | dc2dRo | |||
| real(kind=dp), | intent(out) | :: | dc2dP |
elemental subroutine dc2_roT(ro, T, dc2dRo, dc2dP) !! d(c^2)/dRo and d(c^2)/dP at constant T / constant Ro respectively. real(dp), intent(in) :: ro, T real(dp), intent(out) :: dc2dRo, dc2dP real(dp) :: dcSQdRo_T, dcSQdT_Ro, dTdRo, dTdP, AA, BB, DD, cvloc_Arp real(dp) :: ro_Arp, DerFunctdRo, DerFunctdP, DerFunctdT real(dp) :: DerAAdRo, DerBBdRo, DerDDdRo, DerAAdT, DerBBdT, DerDDdT real(dp) :: DercvlocdRo, DercvlocdT type(ThArrays_t) :: ThAr integer :: n ro_Arp = ro/(MolMass*1000.0_dp) call eos_terms(ro_Arp, T, ThAr) DerFunctdRo = -R_cte_gaz_Arp*T DerFunctdP = 1.0_dp DerFunctdT = -ro_Arp*R_cte_gaz_Arp AA = R_cte_gaz_Arp*T cvloc_Arp = cp0_Arp - R_cte_gaz_Arp DD = ro_Arp*R_cte_gaz_Arp DerAAdRo = 0.0_dp DerDDdRo = R_cte_gaz_Arp DerAAdT = R_cte_gaz_Arp DerDDdT = 0.0_dp DercvlocdRo = 0.0_dp DercvlocdT = 0.0_dp do n = 1, 14 DerFunctdRo = DerFunctdRo - ThAr%Derf(n)*ThAr%g(n) DerFunctdT = DerFunctdT - ThAr%f(n)*ThAr%Derg(n) AA = AA + ThAr%Derf(n)*ThAr%g(n) cvloc_Arp = cvloc_Arp + ThAr%Dergg(n)*ThAr%hh(n)/ro_Arp DD = DD + ThAr%f(n)*ThAr%Derg(n) DerAAdRo = DerAAdRo + ThAr%Der2f(n)*ThAr%g(n) DerDDdRo = DerDDdRo + ThAr%Derf(n)*ThAr%Derg(n) DerAAdT = DerAAdT + ThAr%Derf(n)*ThAr%Derg(n) DerDDdT = DerDDdT + ThAr%f(n)*ThAr%Der2g(n) DercvlocdRo = DercvlocdRo + ThAr%Dergg(n)*(ThAr%Derhh(n)*ro_Arp-ThAr%hh(n))/(ro_Arp**2) DercvlocdT = DercvlocdT + ThAr%Der2gg(n)*ThAr%hh(n)/ro_Arp enddo BB = T/(cvloc_Arp*ro_Arp*ro_Arp) DerBBdRo = -T*(DercvlocdRo*ro_Arp*ro_Arp+2.0_dp*cvloc_Arp*ro_Arp)/((cvloc_Arp*ro_Arp*ro_Arp)**2) DerBBdT = (1.0_dp/(ro_Arp**2))*(cvloc_Arp-T*DercvlocdT)/(cvloc_Arp**2) dTdP = -DerFunctdP/DerFunctdT dTdRo = -DerFunctdRo/DerFunctdT dcSQdRo_T = DerAAdRo + DerBBdRo*(DD**2) + 2.0_dp*BB*DD*DerDDdRo dcSQdT_Ro = DerAAdT + DerBBdT*(DD**2) + 2.0_dp*BB*DD*DerDDdT dc2dRo = dcSQdRo_T + dcSQdT_Ro*dTdRo dc2dP = dcSQdT_Ro*dTdP dc2dRo = 1000.0_dp*dc2dRo/MolMass/(MolMass*1000.0_dp) dc2dP = 1000.0_dp*dc2dP/MolMass*1.0e-6_dp end subroutine dc2_roT