-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathmodel_setup.py
More file actions
69 lines (49 loc) · 1.57 KB
/
Copy pathmodel_setup.py
File metadata and controls
69 lines (49 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
"""
setup a new simulation
"""
from pathlib import Path
import typing as T
from .config import read_nml
from .grid import makegrid_cart3d
from .plasma import equilibrium_state, equilibrium_resample
from .efield import Efield_BCs
from .particles import particles_BCs
from .base import write_state, write_grid
R = Path(__file__).resolve().parents[1]
def model_setup(path: Path, out_dir: Path):
"""
top-level function to create a new simulation
Parameters
----------
path: pathlib.Path
path (directory or full path) to config.nml
out_dir: pathlib.Path
directory to write simulation artifacts to
"""
# %% read config.nml
p = read_nml(path)
p["out_dir"] = Path(out_dir).expanduser().resolve()
# %% is this equilibrium or interpolated simulation
if "eqdir" in p:
model_setup_interp(p)
else:
model_setup_equilibrium(p)
def model_setup_equilibrium(p: T.Dict[str, T.Any]):
# %% GRID GENERATION
xg = makegrid_cart3d(p)
write_grid(p, xg)
# %% Equilibrium input generation
[ns, Ts, vsx1] = equilibrium_state(p, xg)
assert ns.shape == Ts.shape == vsx1.shape
assert ns.shape[0] == 7
assert ns.shape[1:] == tuple(xg["lx"])
write_state(p["t0"], ns, vsx1, Ts, p["out_dir"], p["format"])
def model_setup_interp(p: T.Dict[str, T.Any]):
xg = makegrid_cart3d(p)
equilibrium_resample(p, xg)
# %% potential boundary conditions
if "flagE0file" in p and p["flagE0file"]:
Efield_BCs(p, xg)
# %% aurora
if "flagprecfile" in p and p["flagprecfile"]:
particles_BCs(p, xg)