mirror of
https://github.com/aselimov/cea-rs.git
synced 2026-04-19 00:24:20 +00:00
Add full transport parse
This commit is contained in:
parent
3548d8b449
commit
6d1d9bd290
1 changed files with 124 additions and 2 deletions
|
|
@ -15,7 +15,25 @@ pub struct TransportDB {
|
|||
}
|
||||
|
||||
impl TransportDB {
|
||||
pub fn parse() {}
|
||||
pub fn parse(transport_file_contents: &str) -> Result<Self, PropertiesError> {
|
||||
let mut lines = transport_file_contents.lines().peekable();
|
||||
let mut data = vec![];
|
||||
// Ignore header line
|
||||
_ = lines.next();
|
||||
loop {
|
||||
data.push(parse_species_transport_block(&mut lines)?);
|
||||
|
||||
if let Some(line) = lines.peek() {
|
||||
if line.contains("end") {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Ok(TransportDB { data })
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_species_transport_block<'a>(
|
||||
|
|
@ -97,7 +115,7 @@ pub mod test {
|
|||
use crate::{
|
||||
assert_delta,
|
||||
properties::transport_db::{
|
||||
ViscosityOrConductivity, parse_coefficients, parse_species_header_line,
|
||||
TransportDB, ViscosityOrConductivity, parse_coefficients, parse_species_header_line,
|
||||
parse_species_transport_block,
|
||||
},
|
||||
};
|
||||
|
|
@ -204,4 +222,108 @@ pub mod test {
|
|||
assert_delta!(species_data.conductivities[2].c, -0.71899552e06, 1e-8);
|
||||
assert_delta!(species_data.conductivities[2].d, 0.56927918e00, 1e-8);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_transport_file() {
|
||||
let trans_input = r#"transport property coefficients
|
||||
Ar V3C3 BICH ET AL (1990)
|
||||
V 200.0 1000.0 0.61205763E 00-0.67714354E 02 0.19040660E 03 0.21588272E 01
|
||||
V 1000.0 5000.0 0.69357334E 00 0.70953943E 02-0.28386007E 05 0.14856447E 01
|
||||
V 5000.0 15000.0 0.76608935E+00 0.67867215E+03-0.84991417E+06 0.77935167E+00
|
||||
C 200.0 1000.0 0.60968928E 00-0.70892249E 02 0.58420624E 03 0.19337152E 01
|
||||
C 1000.0 5000.0 0.69075463E 00 0.62676058E 02-0.25667413E 05 0.12664189E 01
|
||||
C 5000.0 15000.0 0.76269502E+00 0.62341752E+03-0.71899552E+06 0.56927918E+00
|
||||
BCL3 V2C2 SVEHLA (1962)
|
||||
V 300.0 1000.0 0.52572590E 00-0.27803504E 03 0.19159256E 05 0.24373790E 01
|
||||
V 1000.0 5000.0 0.62929553E 00-0.60723560E 02-0.37711618E 05 0.15615047E 01
|
||||
C 300.0 1000.0 0.41518585E 00-0.48149960E 03 0.30788060E 05 0.33168239E 01
|
||||
C 1000.0 5000.0 0.61148589E 00-0.18167042E 03-0.20976969E 05 0.17127671E 01
|
||||
end"#;
|
||||
|
||||
let db = TransportDB::parse(trans_input).unwrap();
|
||||
|
||||
assert_eq!(db.data.len(), 2);
|
||||
|
||||
// Ar species (V3C3)
|
||||
let ar = &db.data[0];
|
||||
assert_eq!(ar.name, "Ar");
|
||||
assert_eq!(ar.viscosities.len(), 3);
|
||||
assert_eq!(ar.conductivities.len(), 3);
|
||||
|
||||
assert_delta!(ar.viscosities[0].temp_range.0, 200.0, 1e-1);
|
||||
assert_delta!(ar.viscosities[0].temp_range.1, 1000.0, 1e-1);
|
||||
assert_delta!(ar.viscosities[0].a, 0.61205763e00, 1e-8);
|
||||
assert_delta!(ar.viscosities[0].b, -0.67714354e02, 1e-8);
|
||||
assert_delta!(ar.viscosities[0].c, 0.19040660e03, 1e-8);
|
||||
assert_delta!(ar.viscosities[0].d, 0.21588272e01, 1e-8);
|
||||
|
||||
assert_delta!(ar.viscosities[1].temp_range.0, 1000.0, 1e-1);
|
||||
assert_delta!(ar.viscosities[1].temp_range.1, 5000.0, 1e-1);
|
||||
assert_delta!(ar.viscosities[1].a, 0.69357334e00, 1e-8);
|
||||
assert_delta!(ar.viscosities[1].b, 0.70953943e02, 1e-8);
|
||||
assert_delta!(ar.viscosities[1].c, -0.28386007e05, 1e-8);
|
||||
assert_delta!(ar.viscosities[1].d, 0.14856447e01, 1e-8);
|
||||
|
||||
assert_delta!(ar.viscosities[2].temp_range.0, 5000.0, 1e-1);
|
||||
assert_delta!(ar.viscosities[2].temp_range.1, 15000.0, 1e-1);
|
||||
assert_delta!(ar.viscosities[2].a, 0.76608935e00, 1e-8);
|
||||
assert_delta!(ar.viscosities[2].b, 0.67867215e03, 1e-8);
|
||||
assert_delta!(ar.viscosities[2].c, -0.84991417e06, 1e-8);
|
||||
assert_delta!(ar.viscosities[2].d, 0.77935167e00, 1e-8);
|
||||
|
||||
assert_delta!(ar.conductivities[0].temp_range.0, 200.0, 1e-1);
|
||||
assert_delta!(ar.conductivities[0].temp_range.1, 1000.0, 1e-1);
|
||||
assert_delta!(ar.conductivities[0].a, 0.60968928e00, 1e-8);
|
||||
assert_delta!(ar.conductivities[0].b, -0.70892249e02, 1e-8);
|
||||
assert_delta!(ar.conductivities[0].c, 0.58420624e03, 1e-8);
|
||||
assert_delta!(ar.conductivities[0].d, 0.19337152e01, 1e-8);
|
||||
|
||||
assert_delta!(ar.conductivities[1].temp_range.0, 1000.0, 1e-1);
|
||||
assert_delta!(ar.conductivities[1].temp_range.1, 5000.0, 1e-1);
|
||||
assert_delta!(ar.conductivities[1].a, 0.69075463e00, 1e-8);
|
||||
assert_delta!(ar.conductivities[1].b, 0.62676058e02, 1e-8);
|
||||
assert_delta!(ar.conductivities[1].c, -0.25667413e05, 1e-8);
|
||||
assert_delta!(ar.conductivities[1].d, 0.12664189e01, 1e-8);
|
||||
|
||||
assert_delta!(ar.conductivities[2].temp_range.0, 5000.0, 1e-1);
|
||||
assert_delta!(ar.conductivities[2].temp_range.1, 15000.0, 1e-1);
|
||||
assert_delta!(ar.conductivities[2].a, 0.76269502e00, 1e-8);
|
||||
assert_delta!(ar.conductivities[2].b, 0.62341752e03, 1e-8);
|
||||
assert_delta!(ar.conductivities[2].c, -0.71899552e06, 1e-8);
|
||||
assert_delta!(ar.conductivities[2].d, 0.56927918e00, 1e-8);
|
||||
|
||||
// BCL3 species (V2C2)
|
||||
let bcl3 = &db.data[1];
|
||||
assert_eq!(bcl3.name, "BCL3");
|
||||
assert_eq!(bcl3.viscosities.len(), 2);
|
||||
assert_eq!(bcl3.conductivities.len(), 2);
|
||||
|
||||
assert_delta!(bcl3.viscosities[0].temp_range.0, 300.0, 1e-1);
|
||||
assert_delta!(bcl3.viscosities[0].temp_range.1, 1000.0, 1e-1);
|
||||
assert_delta!(bcl3.viscosities[0].a, 0.52572590e00, 1e-8);
|
||||
assert_delta!(bcl3.viscosities[0].b, -0.27803504e03, 1e-8);
|
||||
assert_delta!(bcl3.viscosities[0].c, 0.19159256e05, 1e-8);
|
||||
assert_delta!(bcl3.viscosities[0].d, 0.24373790e01, 1e-8);
|
||||
|
||||
assert_delta!(bcl3.viscosities[1].temp_range.0, 1000.0, 1e-1);
|
||||
assert_delta!(bcl3.viscosities[1].temp_range.1, 5000.0, 1e-1);
|
||||
assert_delta!(bcl3.viscosities[1].a, 0.62929553e00, 1e-8);
|
||||
assert_delta!(bcl3.viscosities[1].b, -0.60723560e02, 1e-8);
|
||||
assert_delta!(bcl3.viscosities[1].c, -0.37711618e05, 1e-8);
|
||||
assert_delta!(bcl3.viscosities[1].d, 0.15615047e01, 1e-8);
|
||||
|
||||
assert_delta!(bcl3.conductivities[0].temp_range.0, 300.0, 1e-1);
|
||||
assert_delta!(bcl3.conductivities[0].temp_range.1, 1000.0, 1e-1);
|
||||
assert_delta!(bcl3.conductivities[0].a, 0.41518585e00, 1e-8);
|
||||
assert_delta!(bcl3.conductivities[0].b, -0.48149960e03, 1e-8);
|
||||
assert_delta!(bcl3.conductivities[0].c, 0.30788060e05, 1e-8);
|
||||
assert_delta!(bcl3.conductivities[0].d, 0.33168239e01, 1e-8);
|
||||
|
||||
assert_delta!(bcl3.conductivities[1].temp_range.0, 1000.0, 1e-1);
|
||||
assert_delta!(bcl3.conductivities[1].temp_range.1, 5000.0, 1e-1);
|
||||
assert_delta!(bcl3.conductivities[1].a, 0.61148589e00, 1e-8);
|
||||
assert_delta!(bcl3.conductivities[1].b, -0.18167042e03, 1e-8);
|
||||
assert_delta!(bcl3.conductivities[1].c, -0.20976969e05, 1e-8);
|
||||
assert_delta!(bcl3.conductivities[1].d, 0.17127671e01, 1e-8);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue