-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathvle_pure.rs
More file actions
77 lines (75 loc) · 2.38 KB
/
vle_pure.rs
File metadata and controls
77 lines (75 loc) · 2.38 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
use approx::assert_relative_eq;
use feos::pcsaft::{PcSaft, PcSaftParameters};
use feos_core::parameter::{IdentifierOption, Parameter};
use feos_core::{Contributions, PhaseEquilibrium};
use quantity::si::*;
use std::error::Error;
use std::sync::Arc;
#[test]
fn vle_pure_temperature() -> Result<(), Box<dyn Error>> {
let params = PcSaftParameters::from_json(
vec!["propane"],
"tests/pcsaft/test_parameters.json",
None,
IdentifierOption::Name,
)?;
let saft = Arc::new(PcSaft::new(Arc::new(params)));
let temperatures = [
170.0 * KELVIN,
200.0 * KELVIN,
250.0 * KELVIN,
300.0 * KELVIN,
350.0 * KELVIN,
];
for &t in temperatures.iter() {
let state = PhaseEquilibrium::pure(&saft, t, None, Default::default())?;
assert_relative_eq!(state.vapor().temperature, t, max_relative = 1e-10);
assert_relative_eq!(
state.vapor().pressure(Contributions::Total),
state.liquid().pressure(Contributions::Total),
max_relative = 1e-8
);
}
Ok(())
}
#[test]
fn vle_pure_pressure() -> Result<(), Box<dyn Error>> {
let params = PcSaftParameters::from_json(
vec!["propane"],
"tests/pcsaft/test_parameters.json",
None,
IdentifierOption::Name,
)?;
let saft = Arc::new(PcSaft::new(Arc::new(params)));
let pressures = [0.1 * BAR, 1.0 * BAR, 10.0 * BAR, 30.0 * BAR, 44.0 * BAR];
for &p in pressures.iter() {
let state = PhaseEquilibrium::pure(&saft, p, None, Default::default())?;
println!(
"liquid-p: {} vapor-p: {} p:{}",
state.liquid().pressure(Contributions::Total),
state.vapor().pressure(Contributions::Total),
p
);
println!(
"liquid-T: {} vapor-T: {}",
state.liquid().temperature,
state.vapor().temperature
);
assert_relative_eq!(
state.liquid().pressure(Contributions::Total),
p,
max_relative = 1e-8
);
assert_relative_eq!(
state.vapor().pressure(Contributions::Total),
state.liquid().pressure(Contributions::Total),
max_relative = 1e-8
);
assert_relative_eq!(
state.vapor().temperature,
state.liquid().temperature,
max_relative = 1e-10
);
}
Ok(())
}