From d4499700fa0e8309e4713c15647596d210cddceb Mon Sep 17 00:00:00 2001 From: Philipp Rehner Date: Fri, 5 Aug 2022 13:53:28 +0200 Subject: [PATCH 1/2] Avoid panicking when calculating `ResidualNpt` properties of states with negative pressures. --- feos-core/CHANGELOG.md | 2 ++ feos-core/src/state/mod.rs | 21 +++++++++++++++------ feos-core/src/state/properties.rs | 5 ++--- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/feos-core/CHANGELOG.md b/feos-core/CHANGELOG.md index e12e758b1..8929291a2 100644 --- a/feos-core/CHANGELOG.md +++ b/feos-core/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased +### Fixed +- Avoid panicking when calculating `ResidualNpt` properties of states with negative pressures. [#42](https://github.com/feos-org/feos-core/pull/42) ## [0.3.0] - 2022-06-13 ### Added diff --git a/feos-core/src/state/mod.rs b/feos-core/src/state/mod.rs index 86678f528..8baad3097 100644 --- a/feos-core/src/state/mod.rs +++ b/feos-core/src/state/mod.rs @@ -232,16 +232,25 @@ impl State { eos.validate_moles(Some(moles))?; validate(temperature, volume, moles)?; - let t = temperature.to_reduced(U::reference_temperature())?; - let v = volume.to_reduced(U::reference_volume())?; - let m = moles.to_reduced(U::reference_moles())?; + Ok(Self::new_nvt_unchecked(eos, temperature, volume, moles)) + } + + pub(super) fn new_nvt_unchecked( + eos: &Rc, + temperature: QuantityScalar, + volume: QuantityScalar, + moles: &QuantityArray1, + ) -> Self { + let t = temperature.to_reduced(U::reference_temperature()).unwrap(); + let v = volume.to_reduced(U::reference_volume()).unwrap(); + let m = moles.to_reduced(U::reference_moles()).unwrap(); let total_moles = moles.sum(); let partial_density = moles / volume; let density = total_moles / volume; - let molefracs = &m / total_moles.to_reduced(U::reference_moles())?; + let molefracs = &m / total_moles.to_reduced(U::reference_moles()).unwrap(); - Ok(State { + State { eos: eos.clone(), total_moles, temperature, @@ -254,7 +263,7 @@ impl State { reduced_volume: v, reduced_moles: m, cache: RefCell::new(Cache::with_capacity(eos.components())), - }) + } } /// Return a new `State` for a pure component given a temperature and a density. The moles diff --git a/feos-core/src/state/properties.rs b/feos-core/src/state/properties.rs index 5e0289765..13d0ea400 100644 --- a/feos-core/src/state/properties.rs +++ b/feos-core/src/state/properties.rs @@ -155,13 +155,12 @@ impl State { } Contributions::ResidualNpt => { let p = self.pressure_(Evaluate::Total); - let state_p = Self::new_nvt( + let state_p = Self::new_nvt_unchecked( &self.eos, self.temperature, self.total_moles * U::gas_constant() * self.temperature / p, &self.moles, - ) - .unwrap(); + ); if additive { f(self, Evaluate::Residual) + f(self, Evaluate::IdealGasDelta) - f(&state_p, Evaluate::IdealGasDelta) From 435b0dc100eec7315069ab1747bc3af103309add Mon Sep 17 00:00:00 2001 From: Philipp Rehner Date: Fri, 5 Aug 2022 15:02:29 +0200 Subject: [PATCH 2/2] Fix link in changelog --- feos-core/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feos-core/CHANGELOG.md b/feos-core/CHANGELOG.md index 8929291a2..33c06cafe 100644 --- a/feos-core/CHANGELOG.md +++ b/feos-core/CHANGELOG.md @@ -6,7 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased ### Fixed -- Avoid panicking when calculating `ResidualNpt` properties of states with negative pressures. [#42](https://github.com/feos-org/feos-core/pull/42) +- Avoid panicking when calculating `ResidualNpt` properties of states with negative pressures. [#42](https://github.com/feos-org/feos/pull/42) ## [0.3.0] - 2022-06-13 ### Added