Solve p(ro,T) = p for T.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | ro | |||
| real(kind=dp), | intent(in) | :: | p |
function T_roP(ro, p) result(T) !! Solve p(ro,T) = p for T. real(dp), intent(in) :: ro, p real(dp) :: T type(T_from_roP_obj_t) :: obj type(ThArrays_t) :: ThAr real(dp) :: ro_Arp, p_Arp real(dp) :: Funct, DerFunct logical :: converged integer :: ite ro_Arp = ro/(MolMass*1000.0_dp) p_Arp = p*1.0e-6_dp obj%ro = ro_Arp obj%p = p_Arp call fill_f_terms(ro_Arp, ThAr) T = Newton_T_guess0 converged = .false. do ite = 1, Newton_MaxIte call fill_g_Dreg_terms(T, ThAr) Funct = p_Arp - ro_Arp*R_cte_gaz_Arp*T - sum(ThAr%f*ThAr%g) if (abs(Funct) <= Newton_FunctTol) then converged = .true. exit endif DerFunct = -ro_Arp*R_cte_gaz_Arp - sum(ThAr%f*ThAr%Derg) T = T - Funct/DerFunct enddo if (converged .and. T >= T_He_min .and. T <= T_He_max) return T = brent(obj, T_He_min, T_He_max, 'T_roP') end function T_roP