use crate::algo::fast_ipower::sac_pow;
use crate::common::constant::*;
use crate::r1::region1_gfe::*;
const r1pstar: f64 = 16.53; const r1Tstar: f64 = 1386.0;
pub fn pT2v_reg1(p: f64, T: f64) -> f64
{
let tau: f64 = r1Tstar / T;
let pi: f64 = p / r1pstar;
return 0.001 * RGAS_WATER * T * pi * gamma_pi_reg1(tau, pi) / p;
}
pub fn pT2u_reg1(p: f64, T: f64) -> f64
{
let pi1: f64 = p / r1pstar;
let tau1: f64 = r1Tstar / T;
let pi: f64 = 7.1 - pi1;
let tau: f64 = tau1 - 1.222;
let mut item: f64 = IJn[0].n * sac_pow(pi, IJn[0].I) * sac_pow(tau, IJn[0].J);
let mut d_pi: f64 = item * IJn[0].I as f64;
let mut d_tau : f64 = item * IJn[0].J as f64; for k in 1..34 {
item = IJn[k].n * sac_pow(pi, IJn[k].I) * sac_pow(tau, IJn[k].J);
d_pi -= item * IJn[k].I as f64; d_tau += item * IJn[k].J as f64;
}
return RGAS_WATER *T* (tau1 * d_tau/tau - pi1*d_pi/pi);
}
pub fn pT2s_reg1(p: f64, T: f64) -> f64
{
let pi1: f64 = p / r1pstar;
let tau1: f64 = r1Tstar / T;
let pi: f64 = 7.1 - pi1;
let tau: f64 = tau1 - 1.222;
let mut item: f64 = IJn[0].n * sac_pow(pi, IJn[0].I) * sac_pow(tau, IJn[0].J); let mut v: f64 = item; let mut d_tau = item * IJn[0].J as f64; for k in 1..34 {
item = IJn[k].n * sac_pow(pi, IJn[k].I) * sac_pow(tau, IJn[k].J); v += item;
d_tau += item * IJn[k].J as f64;
}
return RGAS_WATER * (tau1 * d_tau / tau -v);
}
pub fn pT2h_reg1(p: f64, T: f64) -> f64
{
let tau: f64 = r1Tstar / T;
let pi: f64 = p / r1pstar;
return RGAS_WATER * T * tau * gamma_tau_reg1(tau, pi);
}
pub fn pT2cp_reg1(p: f64, T: f64) -> f64
{
let tau: f64 = r1Tstar / T;
let pi: f64 = p / r1pstar;
return -RGAS_WATER * tau * tau * gamma_tautau_reg1(tau, pi);
}
pub fn pT2cv_reg1(p: f64, T: f64) -> f64
{
let pi1:f64 = p / r1pstar;
let tau1:f64 = r1Tstar / T;
let pi:f64 = 7.1 - pi1;
let tau:f64 = tau1 - 1.222;
let mut item:f64;
let mut d_piitem:f64;
let mut d_pi:f64 = 0.0;
let mut d_pitau:f64 = 0.0;
let mut d_pipi:f64 = 0.0;
let mut d_tautau:f64 = 0.0;
for k in 0..34
{
item = IJn[k].n * sac_pow(pi, IJn[k].I) * sac_pow(tau, IJn[k].J);
d_piitem = item * IJn[k].I as f64;
d_pi -= d_piitem; d_pipi += d_piitem * (IJn[k].I - 1) as f64;
d_pitau -= d_piitem * IJn[k].J as f64; d_tautau += item * IJn[k].J as f64 * (IJn[k].J - 1) as f64;
}
let a:f64 = -tau1 * tau1 * d_tautau / tau / tau;
let mut b:f64 = (d_pi - tau1 * d_pitau / tau) / pi;
b *= b;
return RGAS_WATER * (a + b / (d_pipi / pi / pi));
}
pub fn pT2w_reg1(p: f64, T: f64) -> f64
{
let pi1:f64 = p / r1pstar;
let tau1:f64 = r1Tstar / T;
let pi:f64 = 7.1 - pi1;
let tau:f64 = tau1 - 1.222;
let mut item:f64;
let mut d_piitem:f64;
let mut d_pi:f64 = 0.0;
let mut d_pitau:f64 = 0.0;
let mut d_pipi:f64 = 0.0;
let mut d_tautau:f64 = 0.0;
for k in 0..34
{
item = IJn[k].n * sac_pow(pi, IJn[k].I) * sac_pow(tau, IJn[k].J);
d_piitem = item * IJn[k].I as f64;
d_pi -= d_piitem; d_pipi += d_piitem * (IJn[k].I - 1) as f64;
d_pitau -= d_piitem * IJn[k].J as f64; d_tautau += item * IJn[k].J as f64* (IJn[k].J - 1) as f64;
}
let mut a = (d_pi - tau1 * d_pitau / tau) / pi;
a *= a;
let mut b = a / (tau1 * tau1 * d_tautau / tau / tau);
b = b - d_pipi / pi / pi;
let temp=1000.0 * RGAS_WATER * T / b;
return d_pi * temp.sqrt() / pi;
}