Source code for torx.specializations.genex.initialize_from_filepath_m
"""Allows initializing all GENE-X data from filepath."""
import xarray as xr
from pathlib import Path
from torx.equilibrium import (
initialize_equi_from_params,
NumericalEquilibrium,
EquiType
)
from torx.grid import Grid2D, Grid3D
from torx.fileio import filepath_resolver, read_fortran_namelist
from torx.specializations.genex.grid_helpers_m import build_grid_from_filepath_genex
from torx.specializations.genex.normalization_helpers_m import (
create_physical_parameters_dict_from_filepath_genex,
)
from torx.normalization.normalization_m import Normalization
from torx.autodoc_decorators_m import autodoc_function
[docs]
@autodoc_function
def initialize_genex_from_filepath(filepath: Path, load_grid_3D = False):
"""Initialize GENE-X data from filepath."""
filepath = Path(filepath)
#TODO: This is a temporary fix only.
# Need to add possibility to write parameters to a given file in Parallax
params_out = read_fortran_namelist(filepath_resolver(filepath, "params_out.txt"))
equi_type = int(params_out["params_mesh"]["equilibrium_type"])
if EquiType(equi_type) == EquiType.DOMMASCHK:
params = read_fortran_namelist(filepath_resolver(filepath, "params_in.txt"))
params_out["params_equi_dommaschk"] = params["params_equi_dommaschk"]
params = params_out
elif EquiType(equi_type) == EquiType.NUMERICAL:
params = read_fortran_namelist(filepath_resolver(filepath, "params_in.txt"))
params_out["equi_numerical_params"] = params["equi_numerical_params"]
params = params_out
else:
params = read_fortran_namelist(filepath_resolver(filepath, "params_in.txt"))
norm = Normalization(create_physical_parameters_dict_from_filepath_genex(filepath))
grid = build_grid_from_filepath_genex(filepath)
if type(grid) == Grid3D:
grid.set_R0(norm.R0)
if not load_grid_3D:
grid = grid.isel_phi(phi_index=0)
elif type(grid) == Grid2D:
grid.R0 = norm.R0
else:
raise ValueError("Unsupported grid type")
equi = initialize_equi_from_params(filepath, params)
equi.B0 = norm.B0
if (
isinstance(equi, NumericalEquilibrium)
and params["equi_numerical_params"]["flip_z"]
):
equi.flip_Z()
return grid, equi, params, norm