Skip to content

Commit af476e2

Browse files
committed
Rebase on PR that makes parameter construction fallible
1 parent 8df16a5 commit af476e2

File tree

2 files changed

+36
-7
lines changed

2 files changed

+36
-7
lines changed

src/python/eos.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,7 @@ impl PyEosVariant {
257257
signature = (parameters, max_eta=0.5, inc_nonadd_term=true),
258258
text_signature = "(parameters, max_eta=0.5, inc_nonadd_term=True)"
259259
)]
260-
fn saftvrqmie(
261-
parameters: PySaftVRQMieParameters,
262-
max_eta: f64,
263-
inc_nonadd_term: bool,
264-
) -> Self {
260+
fn saftvrqmie(parameters: PySaftVRQMieParameters, max_eta: f64, inc_nonadd_term: bool) -> Self {
265261
let options = SaftVRQMieOptions {
266262
max_eta,
267263
inc_nonadd_term,

src/saftvrqmie/parameters.rs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,17 @@ impl Parameter for SaftVRQMieParameters {
213213
mass_ij[[i, j]] = 2.0 * molarweight[i] * molarweight[j]
214214
/ (molarweight[i] + molarweight[j])
215215
* to_mass_per_molecule;
216-
fh_ij[[i, j]] = FeynmanHibbsOrder::try_from(max(fh[i], fh[j])).unwrap();
217-
assert!(fh[i] * fh[j] != 2); // Should not mix FH1 and FH2
216+
fh_ij[[i, j]] = FeynmanHibbsOrder::try_from(max(fh[i], fh[j]))?;
217+
if fh[i] * fh[j] == 2 {
218+
return Err(
219+
ParameterError::IncompatibleParameters(
220+
format!(
221+
"cannot combine Feynman-Hibbs orders 1 and 2. Component {} has order {} and component {} has order {}.",
222+
i, fh[i], j, fh[j]
223+
)
224+
)
225+
);
226+
}
218227
}
219228
}
220229

@@ -571,3 +580,27 @@ pub mod utils {
571580
)
572581
}
573582
}
583+
584+
#[cfg(test)]
585+
mod test {
586+
use super::utils::{helium_fh1, hydrogen_fh};
587+
use super::SaftVRQMieParameters;
588+
use feos_core::parameter::Parameter;
589+
590+
#[test]
591+
#[should_panic(
592+
expected = "cannot combine Feynman-Hibbs orders 1 and 2. Component 0 has order 1 and component 1 has order 2."
593+
)]
594+
fn incompatible_order() {
595+
let order1 = helium_fh1();
596+
let order2 = hydrogen_fh("2");
597+
SaftVRQMieParameters::new_binary(
598+
vec![
599+
order1.pure_records[0].clone(),
600+
order2.pure_records[0].clone(),
601+
],
602+
None,
603+
)
604+
.unwrap();
605+
}
606+
}

0 commit comments

Comments
 (0)