use approx::assert_relative_eq;
use feos_core::parameter::IdentifierOption;
use feos_core::{EosResult, State};
use feos_gc_pcsaft::{
GcPcSaft, GcPcSaftEosParameters, GcPcSaftFunctional, GcPcSaftFunctionalParameters,
};
use ndarray::arr1;
use quantity::si::{KELVIN, MOL};
use std::rc::Rc;
#[test]
fn test_binary() -> EosResult<()> {
let parameters = GcPcSaftEosParameters::from_json_segments(
&["ethanol", "methanol"],
"parameters/gc_substances.json",
"parameters/sauer2014_hetero.json",
None,
IdentifierOption::Name,
)
.unwrap();
let parameters_func = GcPcSaftFunctionalParameters::from_json_segments(
&["ethanol", "methanol"],
"parameters/gc_substances.json",
"parameters/sauer2014_hetero.json",
None,
IdentifierOption::Name,
)
.unwrap();
let eos = Rc::new(GcPcSaft::new(Rc::new(parameters)));
let func = Rc::new(GcPcSaftFunctional::new(Rc::new(parameters_func)));
let moles = arr1(&[0.5, 0.5]) * MOL;
let cp = State::critical_point(&eos, Some(&moles), None, Default::default())?;
let cp_func = State::critical_point(&func, Some(&moles), None, Default::default())?;
println!("{}", cp.temperature);
println!("{}", cp_func.temperature);
assert_relative_eq!(
cp.temperature,
536.4129479522177 * KELVIN,
max_relative = 1e-14
);
assert_relative_eq!(
cp_func.temperature,
536.4129479522177 * KELVIN,
max_relative = 1e-14
);
Ok(())
}