mirror of
https://github.com/aselimov/cea-rs.git
synced 2026-04-19 00:24:20 +00:00
Add transport property calculations
This commit is contained in:
parent
6d9175aa48
commit
aa4e870775
1 changed files with 165 additions and 0 deletions
|
|
@ -4,6 +4,26 @@ pub struct SpeciesTransportData {
|
|||
pub conductivities: Vec<TransportFit>,
|
||||
}
|
||||
|
||||
impl SpeciesTransportData {
|
||||
pub fn viscosity_at(&self, temp: f64) -> f64 {
|
||||
let i_viscosity = self
|
||||
.viscosities
|
||||
.iter()
|
||||
.rposition(|viscosity| temp > viscosity.temp_range.0)
|
||||
.unwrap_or(0);
|
||||
self.viscosities[i_viscosity].compute(temp)
|
||||
}
|
||||
|
||||
pub fn conductivity_at(&self, temp: f64) -> f64 {
|
||||
let i_conductivity = self
|
||||
.conductivities
|
||||
.iter()
|
||||
.rposition(|conductivity| temp > conductivity.temp_range.0)
|
||||
.unwrap_or(0);
|
||||
self.conductivities[i_conductivity].compute(temp)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TransportFit {
|
||||
pub temp_range: (f64, f64),
|
||||
pub a: f64,
|
||||
|
|
@ -11,3 +31,148 @@ pub struct TransportFit {
|
|||
pub c: f64,
|
||||
pub d: f64,
|
||||
}
|
||||
|
||||
impl TransportFit {
|
||||
pub fn compute(&self, temp: f64) -> f64 {
|
||||
let inv_temp = 1.0 / temp;
|
||||
self.a * temp.ln() + self.b * inv_temp + self.c * inv_temp * inv_temp + self.d
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::{
|
||||
assert_delta,
|
||||
properties::transport_fit::{SpeciesTransportData, TransportFit},
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn test_transport_fit_compute() {
|
||||
let fit = TransportFit {
|
||||
temp_range: (1.0, 2.0),
|
||||
a: 10.0,
|
||||
b: 20.0,
|
||||
c: 30.0,
|
||||
d: 40.0,
|
||||
};
|
||||
|
||||
assert_delta!(fit.compute(1.0), 90.0, 1e-12);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_calc_transport_properties() {
|
||||
let viscosities = vec![
|
||||
TransportFit {
|
||||
temp_range: (1.0, 100.0),
|
||||
a: 10.0,
|
||||
b: 20.0,
|
||||
c: 30.0,
|
||||
d: 40.0,
|
||||
},
|
||||
TransportFit {
|
||||
temp_range: (100.0, 200.0),
|
||||
a: 1.0,
|
||||
b: 2.0,
|
||||
c: 3.0,
|
||||
d: 4.0,
|
||||
},
|
||||
];
|
||||
|
||||
let conductivities = vec![
|
||||
TransportFit {
|
||||
temp_range: (1.0, 100.0),
|
||||
a: 10.0,
|
||||
b: 20.0,
|
||||
c: 30.0,
|
||||
d: 40.0,
|
||||
},
|
||||
TransportFit {
|
||||
temp_range: (100.0, 200.0),
|
||||
a: 1.0,
|
||||
b: 2.0,
|
||||
c: 3.0,
|
||||
d: 4.0,
|
||||
},
|
||||
];
|
||||
|
||||
let data = SpeciesTransportData {
|
||||
viscosities,
|
||||
conductivities,
|
||||
name: "".to_string(),
|
||||
};
|
||||
|
||||
assert_delta!(
|
||||
data.conductivity_at(0.5),
|
||||
data.conductivities[0].compute(0.5),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.conductivity_at(1.0),
|
||||
data.conductivities[0].compute(1.0),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.conductivity_at(50.0),
|
||||
data.conductivities[0].compute(50.0),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.conductivity_at(100.0),
|
||||
data.conductivities[0].compute(100.0),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.conductivity_at(100.0 + 1e-12),
|
||||
data.conductivities[1].compute(100.0 + 1e-12),
|
||||
1e-12
|
||||
);
|
||||
|
||||
assert_delta!(
|
||||
data.conductivity_at(200.0),
|
||||
data.conductivities[1].compute(200.0),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.conductivity_at(500.0),
|
||||
data.conductivities[1].compute(500.0),
|
||||
1e-12
|
||||
);
|
||||
|
||||
assert_delta!(
|
||||
data.viscosity_at(0.5),
|
||||
data.viscosities[0].compute(0.5),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.viscosity_at(1.0),
|
||||
data.viscosities[0].compute(1.0),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.viscosity_at(50.0),
|
||||
data.viscosities[0].compute(50.0),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.viscosity_at(100.0),
|
||||
data.viscosities[0].compute(100.0),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.viscosity_at(100.0 + 1e-12),
|
||||
data.viscosities[1].compute(100.0 + 1e-12),
|
||||
1e-12
|
||||
);
|
||||
|
||||
assert_delta!(
|
||||
data.viscosity_at(200.0),
|
||||
data.viscosities[1].compute(200.0),
|
||||
1e-12
|
||||
);
|
||||
assert_delta!(
|
||||
data.viscosity_at(500.0),
|
||||
data.viscosities[1].compute(500.0),
|
||||
1e-12
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue