split euler and maxwell to separate crates

This commit is contained in:
Magnus Ulimoen
2020-05-02 00:22:59 +02:00
parent 52bd4f3f8f
commit a1acf00c5a
17 changed files with 202 additions and 113 deletions

View File

@@ -7,7 +7,8 @@ edition = "2018"
[dependencies]
sbp = { path = "../sbp", features = ["rayon"] }
hdf5 = "0.6.0"
euler = { path = "../euler" }
hdf5 = { version = "0.6.0", features = ["static"] }
rayon = "1.3.0"
indicatif = "0.14.0"
structopt = "0.3.13"

View File

@@ -173,7 +173,14 @@ fn main() {
let max_ny = sys.grids.iter().map(|g| g.ny()).max().unwrap();
std::cmp::max(max_nx, max_ny)
};
let dt = 0.2 / (max_n as Float);
// Add a robust method for determining CFL, use for example the maximum speed of the initial
// field along with \delta x / \delta y
// U_max = max(rhou/u, rhov/v)
// This requires scaling with the determinant to obtain the "true" speed in computational
// space
// CFL = 0.2
// \delta t = CFL min(\delta x, \delta y) / U_max
let dt = 0.02 / (max_n as Float);
let ntime = (integration_time / dt).round() as u64;

View File

@@ -1,17 +1,17 @@
use super::DiffOp;
use crate::grid::Grid;
use crate::Float;
use either::*;
use json::JsonValue;
use sbp::grid::Grid;
use sbp::utils::h2linspace;
use sbp::Float;
pub fn json_to_grids(
mut jsongrids: JsonValue,
vortexparams: sbp::euler::VortexParameters,
vortexparams: euler::VortexParameters,
) -> (
Vec<String>,
Vec<sbp::grid::Grid>,
Vec<sbp::euler::BoundaryCharacteristics>,
Vec<euler::BoundaryCharacteristics>,
Vec<DiffOp>,
) {
let default = jsongrids.remove("default");
@@ -110,7 +110,7 @@ pub fn json_to_grids(
let determine_bc = |dir: Option<&str>| match dir {
Some(dir) => {
if dir == "vortex" {
sbp::euler::BoundaryCharacteristic::Vortex(vortexparams.clone())
euler::BoundaryCharacteristic::Vortex(vortexparams.clone())
} else if let Some(grid) = dir.strip_prefix("interpolate:") {
use sbp::operators::*;
let (grid, int_op) = if let Some(rest) = grid.strip_prefix("4:") {
@@ -139,13 +139,13 @@ pub fn json_to_grids(
Box::new(Interpolation4) as Box<dyn InterpolationOperator>,
)
};
sbp::euler::BoundaryCharacteristic::Interpolate(
euler::BoundaryCharacteristic::Interpolate(
names.iter().position(|other| other == grid).unwrap(),
int_op,
)
} else if let Some(multigrid) = dir.strip_prefix("multi:") {
let grids = multigrid.split(':');
sbp::euler::BoundaryCharacteristic::MultiGrid(
euler::BoundaryCharacteristic::MultiGrid(
grids
.map(|g| {
let rparen = g.find('(').unwrap();
@@ -165,12 +165,12 @@ pub fn json_to_grids(
.collect::<Vec<_>>(),
)
} else {
sbp::euler::BoundaryCharacteristic::Grid(
euler::BoundaryCharacteristic::Grid(
names.iter().position(|other| other == dir).unwrap(),
)
}
}
None => sbp::euler::BoundaryCharacteristic::This,
None => euler::BoundaryCharacteristic::This,
};
for name in &names {
let bc = &jsongrids[name]["boundary_conditions"];
@@ -179,7 +179,7 @@ pub fn json_to_grids(
let bc_e = determine_bc(bc["east"].as_str());
let bc_w = determine_bc(bc["west"].as_str());
let bc = sbp::euler::BoundaryCharacteristics {
let bc = euler::BoundaryCharacteristics {
north: bc_n,
south: bc_s,
east: bc_e,
@@ -349,7 +349,7 @@ fn json2grid(x: JsonValue, y: JsonValue) -> Result<Grid, String> {
Ok(Grid::new(x, y).unwrap())
}
pub fn json_to_vortex(mut json: JsonValue) -> super::euler::VortexParameters {
pub fn json_to_vortex(mut json: JsonValue) -> euler::VortexParameters {
let mach = json.remove("mach").as_number().unwrap().into();
// Get max length of any (potential) array
@@ -377,9 +377,9 @@ pub fn json_to_vortex(mut json: JsonValue) -> super::euler::VortexParameters {
let rstar = into_iterator(json.remove("rstar"));
let eps = into_iterator(json.remove("eps"));
let mut vortices = sbp::euler::ArrayVec::new();
let mut vortices = euler::ArrayVec::new();
for (((x0, y0), rstar), eps) in x0.zip(y0).zip(rstar).zip(eps).take(maxlen) {
vortices.push(sbp::euler::Vortice { x0, y0, rstar, eps })
vortices.push(euler::Vortice { x0, y0, rstar, eps })
}
if !json.is_empty() {
@@ -389,5 +389,5 @@ pub fn json_to_vortex(mut json: JsonValue) -> super::euler::VortexParameters {
}
}
super::euler::VortexParameters { vortices, mach }
euler::VortexParameters { vortices, mach }
}