Source code for torx.specializations.grillix.initialize_from_filepath_m

"""Allows initializing GRILLIX data from filepath."""
from pathlib import Path
from warnings import warn

import torx
from torx.fileio import filepath_resolver, read_fortran_namelist
from torx.equilibrium import NumericalEquilibrium, initialize_equi_from_params
from torx.normalization import Normalization
from torx.autodoc_decorators_m import autodoc_function

[docs] @autodoc_function def initialize_grillix_from_filepath(filepath: Path, load_grid_3D = False): """Initialize GRILLIX data from filepath.""" filepath = Path(filepath) try: params_filepath = filepath_resolver(filepath, "params_static_data.nml") except FileNotFoundError: line1 = f"'params_static_data.nml' not found in {filepath}" line2 = " -> falling back to legacy 'params.in'" print(f"{line1}\n{line2}") params_filepath = filepath_resolver(filepath, "params.in") params = read_fortran_namelist(params_filepath) params_braginskii = read_fortran_namelist( filepath_resolver(filepath, "params_braginskii.in") ) # Combine the two parameter dictionaries params = {**params, **params_braginskii} equi = initialize_equi_from_params(filepath, params) try: norm = Normalization.initialize_from_normalization_file( filepath_resolver(filepath, "physical_parameters.nml") ) equi.B0 = norm.B0 R0 = norm.R0 except FileNotFoundError: warn( "physical_parameters.nml not found. Normalization will not be useable."\ f"Using 'axis_Btor' as B0 from {equi.filepath}." ) norm = Normalization(dict()) equi.B0 = equi.axis_Btor R0 = torx.Quantity(1, "m") if ( isinstance(equi, NumericalEquilibrium) and params["equi_numerical_params"]["flip_z"] ): equi.flip_Z() if load_grid_3D: from torx.grid import Grid3D multigrid_file = filepath_resolver(filepath, "multigrids_plane000.nc") multigrid_dir = multigrid_file.parent grid_cano = Grid3D.from_multigrid_files(multigrid_dir) grid_stag = Grid3D.from_multigrid_files(multigrid_dir, staggered = True) return grid_cano, grid_stag, equi, params, norm else: multigrid_file = filepath_resolver(filepath, "multigrid.nc") multigrid = torx.grid.Multigrid2D( multigrid_file, multigrid_group = "", load_all_levels = False, R0 = R0 ) grid = multigrid.get_grid(1) return grid, equi, params, norm