diff --git a/multigrid/examples/tsection.json b/multigrid/examples/tsection.json index e54bf7a..d03d5d1 100644 --- a/multigrid/examples/tsection.json +++ b/multigrid/examples/tsection.json @@ -4,45 +4,46 @@ "operators": { "xi": "upwind9", "eta": "upwind9" - } - }, - "grid0": { - "x": "linspace:-5:5:101", - "y": "linspace:0:5:50", + }, "boundary_conditions": { - "south": "multi:grid1(0,61):grid2(0,41)", + "south": "vortex", "north": "vortex", "east": "vortex", "west": "vortex" } }, - "grid1": { - "x": "linspace:-5:1:61", - "y": "linspace:-5:0:50", + "grid0": { + "x": { "linspace": { "start": -5, "end": 5, "steps": 101 } }, + "y": { "linspace": { "start": 0, "end": 5, "steps": 50 } }, "boundary_conditions": { - "south": "vortex", - "north": "multi:grid0(0,61)", - "east": "grid2", - "west": "vortex" + "south": { "multi": [{"neighbour": "grid1", "start": 0, "end": 61}, {"neighbour": "grid2", "start": 0, "end": 41}] } + } + }, + "grid1": { + "x": { "linspace": { "start": -5, "end": 1, "steps": 61 } }, + "y": { "linspace": { "start": -5, "end": 0, "steps": 50 } }, + "boundary_conditions": { + "north": { "multi": [{"neighbour": "grid0", "start": 0, "end": 61}] }, + "east": { "neighbour": "grid2" } } }, "grid2": { - "x": "linspace:1:5:41", - "y": "linspace:-5:0:50", + "x": { "linspace": { "start": 1, "end": 5, "steps": 41 } }, + "y": { "linspace": { "start": -5, "end": 0, "steps": 50 } }, "boundary_conditions": { - "south": "vortex", - "north": "multi:grid0(60,101)", - "east": "vortex", - "west": "grid1" + "north": { "multi": [{"neighbour": "grid0", "start": 60, "end": 101}] }, + "west": { "neighbour": "grid1" } } } }, "integration_time": 2.0, "vortex": { - "x0": 0.0, - "y0": 0.0, - "mach": 0.5, - "rstar": 0.5, - "eps": 1.0 + "vortices": [{ + "x0": 0.0, + "y0": 0.0, + "rstar": 0.5, + "eps": 1.0 + }], + "mach": 0.5 } } diff --git a/multigrid/src/parsing.rs b/multigrid/src/parsing.rs index ede3309..d9d9c0d 100644 --- a/multigrid/src/parsing.rs +++ b/multigrid/src/parsing.rs @@ -106,6 +106,14 @@ pub struct Interpolate { neighbour: String, } +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Multi { + #[serde(alias = "neighbor")] + neighbour: String, + start: usize, + end: usize, +} + #[derive(Clone, Debug, Serialize, Deserialize)] #[serde(rename_all = "lowercase")] pub enum BoundaryType { @@ -114,6 +122,7 @@ pub enum BoundaryType { #[serde(alias = "neighbor")] Neighbour(String), Vortex, + Multi(Vec), } pub type BoundaryDescriptors = sbp::utils::Direction>; @@ -269,6 +278,18 @@ impl Configuration { inp.operator.unwrap().into(), ) } + Some(BoundaryType::Multi(multi)) => { + euler::BoundaryCharacteristic::MultiGrid( + multi + .iter() + .map(|m| { + let ineighbour = + self.grids.get_index_of(&m.neighbour).unwrap(); + (ineighbour, m.start, m.end) + }) + .collect(), + ) + } }) }) .collect(); @@ -436,6 +457,35 @@ fn output_configuration() { operators: None, }, ); + grids.insert( + "boundary_conditions_multigrid".to_string(), + GridConfig { + boundary_conditions: Some(BoundaryDescriptors { + north: Some(BoundaryType::Multi(vec![Multi { + neighbour: "name_of_grid".to_string(), + start: 4, + end: 7, + }])), + south: Some(BoundaryType::Multi(vec![ + Multi { + neighbour: "name_of_grid".to_string(), + start: 4, + end: 7, + }, + Multi { + neighbour: "name_of_grid".to_string(), + start: 41, + end: 912, + }, + ])), + east: None, + west: None, + }), + x: None, + y: None, + operators: None, + }, + ); let configuration = Configuration { grids, integration_time: 2.0,