Skip to content
This repository was archived by the owner on Sep 14, 2022. It is now read-only.

Commit 4ce900c

Browse files
committed
Fixed dipole contribution
1 parent f741de5 commit 4ce900c

File tree

5 files changed

+30
-9
lines changed

5 files changed

+30
-9
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88

9+
## [0.1.1] - 2022-04-27
10+
# Fixed
11+
- Fixed a critical bug in the dipol contribution.
12+
913
## [0.1.0] - 2022-04-22
1014
### Added
1115
- Initial release

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "feos-gc-pcsaft"
3-
version = "0.1.0"
3+
version = "0.1.1"
44
authors = ["Philipp Rehner <[email protected]>", "Gernot Bauer <[email protected]>"]
55
edition = "2018"
66
license = "MIT OR Apache-2.0"

build_wheel/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "feos_gc_pcsaft"
3-
version = "0.1.0"
3+
version = "0.1.1"
44
authors = ["Philipp Rehner <[email protected]", "Gernot Bauer <[email protected]>"]
55
edition = "2021"
66

src/eos/parameter.rs

+20-3
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pub struct GcPcSaftEosParameters {
3333
mu: Array1<f64>,
3434
pub mu2: Array1<f64>,
3535
pub m_mix: Array1<f64>,
36+
pub s_ij: Array2<f64>,
3637
pub e_k_ij: Array2<f64>,
3738

3839
pub k_ij: Array2<f64>,
@@ -76,6 +77,8 @@ impl GcPcSaftEosParameters {
7677
let mut mu = Vec::new();
7778
let mut mu2 = Vec::new();
7879
let mut m_mix = Vec::new();
80+
let mut sigma_mix = Vec::new();
81+
let mut epsilon_k_mix = Vec::new();
7982

8083
let mut joback_records = Vec::new();
8184

@@ -93,6 +96,8 @@ impl GcPcSaftEosParameters {
9396
.collect::<Result<_, ParameterError>>()?;
9497

9598
let mut m_i = 0.0;
99+
let mut sigma_i = 0.0;
100+
let mut epsilon_k_i = 0.0;
96101
let mut mu2_i = 0.0;
97102

98103
for (segment, count) in count.iter() {
@@ -119,6 +124,8 @@ impl GcPcSaftEosParameters {
119124
}
120125

121126
m_i += segment.model_record.m * count;
127+
sigma_i += segment.model_record.m * segment.model_record.sigma.powi(3) * count;
128+
epsilon_k_i += segment.model_record.m * segment.model_record.epsilon_k * count;
122129
if let Some(mu) = segment.model_record.mu {
123130
mu2_i += mu.powi(2) * count;
124131
}
@@ -127,8 +134,10 @@ impl GcPcSaftEosParameters {
127134
if mu2_i > 0.0 {
128135
dipole_comp.push(i);
129136
mu.push(mu2_i.sqrt());
130-
mu2.push(mu2_i / m_i / (1e-19 * (JOULE / KELVIN / KB).into_value().unwrap()));
137+
mu2.push(mu2_i / m_i * (1e-19 * (JOULE / KELVIN / KB).into_value().unwrap()));
131138
m_mix.push(m_i);
139+
sigma_mix.push((sigma_i / m_i).cbrt());
140+
epsilon_k_mix.push(epsilon_k_i / m_i);
132141
}
133142

134143
for (b, &count) in bond_counts.iter() {
@@ -181,10 +190,17 @@ impl GcPcSaftEosParameters {
181190
// Combining rules dispersion
182191
let sigma_ij =
183192
Array2::from_shape_fn([sigma.len(); 2], |(i, j)| 0.5 * (sigma[i] + sigma[j]));
184-
let e_k_ij = Array2::from_shape_fn([epsilon_k.len(); 2], |(i, j)| {
193+
let epsilon_k_ij = Array2::from_shape_fn([epsilon_k.len(); 2], |(i, j)| {
185194
(epsilon_k[i] * epsilon_k[j]).sqrt()
195+
}) * (1.0 - &k_ij);
196+
197+
// Combining rules polar
198+
let s_ij = Array2::from_shape_fn([dipole_comp.len(); 2], |(i, j)| {
199+
0.5 * (sigma_mix[i] + sigma_mix[j])
200+
});
201+
let e_k_ij = Array2::from_shape_fn([dipole_comp.len(); 2], |(i, j)| {
202+
(epsilon_k_mix[i] * epsilon_k_mix[j]).sqrt()
186203
});
187-
let epsilon_k_ij = &e_k_ij * (1.0 - &k_ij);
188204

189205
// Association
190206
let sigma3_kappa_aibj = Array2::from_shape_fn([kappa_ab.len(); 2], |(i, j)| {
@@ -213,6 +229,7 @@ impl GcPcSaftEosParameters {
213229
mu: Array1::from_vec(mu),
214230
mu2: Array1::from_vec(mu2),
215231
m_mix: Array1::from_vec(m_mix),
232+
s_ij,
216233
e_k_ij,
217234
k_ij,
218235
sigma_ij,

src/eos/polar.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,17 @@ impl Dipole {
6969
let f2_term = Array2::from_shape_fn([ndipole; 2], |(i, j)| {
7070
let di = parameters.dipole_comp[i];
7171
let dj = parameters.dipole_comp[j];
72-
parameters.mu2[i] * parameters.mu2[j] / parameters.sigma_ij[[di, dj]].powi(3)
72+
parameters.mu2[i] * parameters.mu2[j] / parameters.s_ij[[di, dj]].powi(3)
7373
});
7474

7575
let f3_term = Array3::from_shape_fn([ndipole; 3], |(i, j, k)| {
7676
let di = parameters.dipole_comp[i];
7777
let dj = parameters.dipole_comp[j];
7878
let dk = parameters.dipole_comp[k];
7979
parameters.mu2[i] * parameters.mu2[j] * parameters.mu2[k]
80-
/ (parameters.sigma_ij[[di, dj]]
81-
* parameters.sigma_ij[[di, dk]]
82-
* parameters.sigma_ij[[dj, dk]])
80+
/ (parameters.s_ij[[di, dj]]
81+
* parameters.s_ij[[di, dk]]
82+
* parameters.s_ij[[dj, dk]])
8383
});
8484

8585
let mut mij1 = Array2::zeros((ndipole, ndipole));

0 commit comments

Comments
 (0)