Solve e(ro,T) = e for T
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=dp), | intent(in) | :: | ro | |||
| real(kind=dp), | intent(in) | :: | e |
function T_roE(ro, e) result(T) !! Solve e(ro,T) = e for T real(dp), intent(in) :: ro, e real(dp) :: T type(T_from_roE_obj_t) :: obj type(ThArrays_t) :: ThAr real(dp) :: ro_Arp, e_Arp real(dp) :: Funct, DerFunct logical :: converged integer :: ite ro_Arp = ro/(MolMass*1000.0_dp) e_Arp = e*MolMass*1.0e-3_dp obj%ro = ro_Arp obj%e = e_Arp call fill_ff_terms(ro_Arp, ThAr) ThAr%hh = ro_Arp * ThAr%ff T = Newton_T_guess0 converged = .false. do ite = 1, Newton_MaxIte call fill_e_Tpart(T, ThAr) Funct = e_Arp - (cp0_Arp-R_cte_gaz_Arp)*T - q0_Arp - sum(ThAr%gg*ThAr%hh)/ro_Arp if (abs(Funct) <= Newton_FunctTol) then converged = .true. exit endif DerFunct = -(cp0_Arp-R_cte_gaz_Arp) - sum(ThAr%Dergg*ThAr%hh)/ro_Arp 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_roE') end function T_roE