add tsection type interfaces

This interface combines grids which do not have clean interfaces.

The type of interface has not been tested or verified here.
This commit is contained in:
Magnus Ulimoen
2020-04-19 18:49:43 +02:00
parent 297e295532
commit ed0f0e4a20
3 changed files with 170 additions and 16 deletions

View File

@@ -0,0 +1,48 @@
{
"grids": {
"default": {
"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)",
"north": "vortex",
"east": "vortex",
"west": "vortex"
}
},
"grid1": {
"x": "linspace:-5:1:61",
"y": "linspace:-5:0:50",
"boundary_conditions": {
"south": "vortex",
"north": "multi:grid0(0,61)",
"east": "grid2",
"west": "vortex"
}
},
"grid2": {
"x": "linspace:1:5:41",
"y": "linspace:-5:0:50",
"boundary_conditions": {
"south": "vortex",
"north": "multi:grid0(60,101)",
"east": "vortex",
"west": "grid1"
}
}
},
"integration_time": 2.0,
"vortex": {
"x0": 0.0,
"y0": 0.0,
"mach": 0.5,
"rstar": 0.5,
"eps": 1.0
}
}

View File

@@ -143,6 +143,27 @@ pub fn json_to_grids(
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(
grids
.map(|g| {
let rparen = g.find('(').unwrap();
let gridname = &g[..rparen];
let gridnumber =
names.iter().position(|other| other == gridname).unwrap();
let paren = &g[rparen + 1..];
let paren = &paren[..paren.len() - 1];
let mut pareni = paren.split(',');
let start = pareni.next().unwrap().parse::<usize>().unwrap();
let end = pareni.next().unwrap().parse::<usize>().unwrap();
(gridnumber, start, end)
})
.collect::<Vec<_>>(),
)
} else {
sbp::euler::BoundaryCharacteristic::Grid(
names.iter().position(|other| other == dir).unwrap(),