-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathbinary.rs
More file actions
80 lines (78 loc) · 2.74 KB
/
binary.rs
File metadata and controls
80 lines (78 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
use approx::assert_relative_eq;
use feos::gc_pcsaft::{GcPcSaft, GcPcSaftEosParameters};
#[cfg(feature = "dft")]
use feos::gc_pcsaft::{GcPcSaftFunctional, GcPcSaftFunctionalParameters};
use feos_core::parameter::{IdentifierOption, ParameterHetero};
use feos_core::{Contributions, EosResult, State};
use ndarray::arr1;
use quantity::si::{KELVIN, METER, MOL};
use std::sync::Arc;
#[test]
fn test_binary() -> EosResult<()> {
let parameters = GcPcSaftEosParameters::from_json_segments(
&["ethanol", "methanol"],
"parameters/pcsaft/gc_substances.json",
"parameters/pcsaft/sauer2014_hetero.json",
None,
IdentifierOption::Name,
)
.unwrap();
#[cfg(feature = "dft")]
let parameters_func = GcPcSaftFunctionalParameters::from_json_segments(
&["ethanol", "methanol"],
"parameters/pcsaft/gc_substances.json",
"parameters/pcsaft/sauer2014_hetero.json",
None,
IdentifierOption::Name,
)
.unwrap();
let eos = Arc::new(GcPcSaft::new(Arc::new(parameters)));
#[cfg(feature = "dft")]
let func = Arc::new(GcPcSaftFunctional::new(Arc::new(parameters_func)));
let moles = arr1(&[0.5, 0.5]) * MOL;
let cp = State::critical_point(&eos, Some(&moles), None, Default::default())?;
#[cfg(feature = "dft")]
let cp_func = State::critical_point(&func, Some(&moles), None, Default::default())?;
println!("{}", cp.temperature);
#[cfg(feature = "dft")]
println!("{}", cp_func.temperature);
assert_relative_eq!(
cp.temperature,
536.4129479522177 * KELVIN,
max_relative = 1e-14
);
#[cfg(feature = "dft")]
assert_relative_eq!(
cp_func.temperature,
536.4129479522177 * KELVIN,
max_relative = 1e-14
);
Ok(())
}
#[test]
fn test_polar_term() -> EosResult<()> {
let parameters1 = GcPcSaftEosParameters::from_json_segments(
&["CCCOC(C)=O", "CCCO"],
"parameters/pcsaft/gc_substances.json",
"parameters/pcsaft/sauer2014_hetero.json",
None,
IdentifierOption::Smiles,
)?;
let parameters2 = GcPcSaftEosParameters::from_json_segments(
&["CCCO", "CCCOC(C)=O"],
"parameters/pcsaft/gc_substances.json",
"parameters/pcsaft/sauer2014_hetero.json",
None,
IdentifierOption::Smiles,
)?;
let eos1 = Arc::new(GcPcSaft::new(Arc::new(parameters1)));
let eos2 = Arc::new(GcPcSaft::new(Arc::new(parameters2)));
let moles = arr1(&[0.5, 0.5]) * MOL;
let p1 = State::new_nvt(&eos1, 300.0 * KELVIN, METER.powi(3), &moles)?
.pressure(Contributions::Total);
let p2 = State::new_nvt(&eos2, 300.0 * KELVIN, METER.powi(3), &moles)?
.pressure(Contributions::Total);
println!("{p1} {p2}");
assert_eq!(p1, p2);
Ok(())
}