diff --git a/.github/workflows/translate.yaml b/.github/workflows/translate.yaml index bd2262f2..a8b751e7 100644 --- a/.github/workflows/translate.yaml +++ b/.github/workflows/translate.yaml @@ -90,6 +90,7 @@ jobs: --backend=numpy \ --which_modules=FvTp2d \ --threshold_overrides_file=./tests/savepoint/translate/overrides/standard.yaml \ + --no_legacy_namelist \ ./tests/savepoint - name: Numpy D_SW @@ -100,6 +101,7 @@ jobs: --backend=numpy \ --which_modules=D_SW \ --threshold_overrides_file=./tests/savepoint/translate/overrides/standard.yaml \ + --no_legacy_namelist \ ./tests/savepoint - name: Numpy Remapping @@ -110,6 +112,7 @@ jobs: --backend=numpy \ --which_modules=Remapping \ --threshold_overrides_file=./tests/savepoint/translate/overrides/standard.yaml \ + --no_legacy_namelist \ ./tests/savepoint - name: Orchestrated dace-cpu Acoustics @@ -126,4 +129,5 @@ jobs: --which_rank=0 \ --which_modules=DynCore \ --threshold_overrides_file=./tests/savepoint/translate/overrides/standard.yaml \ + --no_legacy_namelist \ ./tests/savepoint diff --git a/pyfv3/_config.py b/pyfv3/_config.py index 264b70ad..e037493c 100644 --- a/pyfv3/_config.py +++ b/pyfv3/_config.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import dataclasses from datetime import timedelta from math import floor @@ -5,14 +7,20 @@ import f90nml import yaml +from dacite import Config, from_dict -from ndsl.namelist import Namelist +from ndsl.utils import f90nml_as_dict DEFAULT_INT = 0 DEFAULT_STR = "" DEFAULT_FLOAT = 0.0 DEFAULT_BOOL = False +DEFAULT_DYCORE_NML_GROUPS = ( + "main_nml", + "coupler_nml", + "fv_core_nml", +) @dataclasses.dataclass(frozen=True) @@ -278,6 +286,7 @@ class DynamicalCoreConfig: sw_dynamics: bool = False """shallow water conditions""" namelist_override: Optional[str] = None + target_nml_groups: Optional[Tuple[str, ...]] = DEFAULT_DYCORE_NML_GROUPS def __post_init__(self): if self.namelist_override is not None: @@ -286,7 +295,9 @@ def __post_init__(self): except FileNotFoundError: print(f"{self.namelist_override} does not exist") raise - dycore_config = self.from_f90nml(f90_nml) + # TODO: Find a better way to do below. Passing self.* as an argument + # to a class function of the same class is always a bit fishy. + dycore_config = self.from_f90nml(f90_nml, self.target_nml_groups) for var in dycore_config.__dict__.keys(): setattr(self, var, dycore_config.__dict__[var]) # Single tile cartesian grids @@ -294,102 +305,51 @@ def __post_init__(self): self.nf_omega = 0 @classmethod - def from_f90nml(cls, f90_namelist: f90nml.Namelist) -> "DynamicalCoreConfig": - namelist = Namelist.from_f90nml(f90_namelist) - return cls.from_namelist(namelist) + def from_f90nml( + cls, + nml: f90nml.Namelist, + target_groups: Tuple[str, ...] | None = DEFAULT_DYCORE_NML_GROUPS, + ) -> DynamicalCoreConfig: + """Uses the nml to create a DynamicalCoreConfig. + + Args: + nml: f90nml.Namelist + target_groups: Tuple[str,...] | None + This list will be used to specify which groups in the nml to + use when initializing the DynamicalCoreConfig. If None, all + groups will be used. (Default: DEFAULT_DYCORE_NML_GROUPS) + """ + nml_dict = f90nml_as_dict(nml, flatten=True, target_groups=target_groups) + nml_dict["target_nml_groups"] = target_groups + return cls.from_dict(nml_dict) @classmethod - def from_namelist(cls, namelist: Namelist) -> "DynamicalCoreConfig": - return cls( - dt_atmos=namelist.dt_atmos, - a_imp=namelist.a_imp, - beta=namelist.beta, - consv_te=namelist.consv_te, - d2_bg=namelist.d2_bg, - d2_bg_k1=namelist.d2_bg_k1, - d2_bg_k2=namelist.d2_bg_k2, - d4_bg=namelist.d4_bg, - d_con=namelist.d_con, - d_ext=namelist.d_ext, - dddmp=namelist.dddmp, - delt_max=namelist.delt_max, - do_sat_adj=namelist.do_sat_adj, - do_vort_damp=namelist.do_vort_damp, - fill=namelist.fill, - hord_dp=namelist.hord_dp, - hord_mt=namelist.hord_mt, - hord_tm=namelist.hord_tm, - hord_tr=namelist.hord_tr, - hord_vt=namelist.hord_vt, - hydrostatic=namelist.hydrostatic, - k_split=namelist.k_split, - ke_bg=namelist.ke_bg, - kord_mt=namelist.kord_mt, - kord_tm=namelist.kord_tm, - kord_tr=namelist.kord_tr, - kord_wz=namelist.kord_wz, - n_split=namelist.n_split, - nord=namelist.nord, - npx=namelist.npx, - npy=namelist.npy, - npz=namelist.npz, - ntiles=namelist.ntiles, - nwat=namelist.nwat, - p_fac=namelist.p_fac, - rf_cutoff=namelist.rf_cutoff, - tau=namelist.tau, - vtdm4=namelist.vtdm4, - z_tracer=namelist.z_tracer, - do_qa=namelist.do_qa, - layout=namelist.layout, - grid_type=namelist.grid_type, - u_max=namelist.u_max, - do_f3d=namelist.do_f3d, - inline_q=namelist.inline_q, - do_skeb=namelist.do_skeb, - check_negative=namelist.check_negative, - tau_r2g=namelist.tau_r2g, - tau_smlt=namelist.tau_smlt, - tau_g2r=namelist.tau_g2r, - tau_imlt=namelist.tau_imlt, - tau_i2s=namelist.tau_i2s, - tau_l2r=namelist.tau_l2r, - tau_g2v=namelist.tau_g2v, - tau_v2g=namelist.tau_v2g, - sat_adj0=namelist.sat_adj0, - ql_gen=namelist.ql_gen, - ql_mlt=namelist.ql_mlt, - qs_mlt=namelist.qs_mlt, - ql0_max=namelist.ql0_max, - t_sub=namelist.t_sub, - qi_gen=namelist.qi_gen, - qi_lim=namelist.qi_lim, - qi0_max=namelist.qi0_max, - rad_snow=namelist.rad_snow, - rad_rain=namelist.rad_rain, - rad_graupel=namelist.rad_graupel, - tintqs=namelist.tintqs, - dw_ocean=namelist.dw_ocean, - dw_land=namelist.dw_land, - icloud_f=namelist.icloud_f, - cld_min=namelist.cld_min, - tau_l2v=namelist.tau_l2v, - tau_v2l=namelist.tau_v2l, - c2l_ord=namelist.c2l_ord, - regional=namelist.regional, - m_split=namelist.m_split, - convert_ke=namelist.convert_ke, - breed_vortex_inline=namelist.breed_vortex_inline, - use_old_omega=namelist.use_old_omega, - rf_fast=namelist.rf_fast, - adiabatic=namelist.adiabatic, - nf_omega=namelist.nf_omega, - fv_sg_adj=namelist.fv_sg_adj, - n_sponge=namelist.n_sponge, + def from_dict( + cls, + data: dict, + ) -> DynamicalCoreConfig: + """Create a DynamicalCoreConfig from the given data. + + Args: + data: "flattened" dictionary where the keys match the class member variables + """ + # NOTE: We're setting strict to False so that extra keys in the data are + # ignored. Eventually, we'd like to turn this to True once we move away from + # expecting dicts that are basically flattened yamls and f90nml files. + dacite_config = Config( + strict=False, + type_hooks={ + Tuple[int, int]: lambda x: tuple(x), + Tuple[str, ...]: lambda x: tuple(x) if x is not None else None, + }, + ) + dycore_config = from_dict( + data_class=DynamicalCoreConfig, data=data, config=dacite_config ) + return dycore_config @classmethod - def from_yaml(cls, yaml_config: str) -> "DynamicalCoreConfig": + def from_yaml(cls, yaml_config: str) -> DynamicalCoreConfig: config = cls() with open(yaml_config, "r") as f: raw_config = yaml.safe_load(f) diff --git a/pyfv3/testing/__init__.py b/pyfv3/testing/__init__.py index 15a378cb..8a4d18d7 100644 --- a/pyfv3/testing/__init__.py +++ b/pyfv3/testing/__init__.py @@ -1,5 +1,6 @@ +from .translate_data import TranslateDycoreFortranData2Py from .translate_dyncore import TranslateDynCore -from .translate_fvdynamics import TranslateDycoreFortranData2Py, TranslateFVDynamics +from .translate_fvdynamics import TranslateFVDynamics from .validation import enable_selective_validation diff --git a/pyfv3/testing/translate_data.py b/pyfv3/testing/translate_data.py new file mode 100644 index 00000000..4ffec86d --- /dev/null +++ b/pyfv3/testing/translate_data.py @@ -0,0 +1,16 @@ +from f90nml import Namelist + +from ndsl import StencilFactory +from ndsl.stencils.testing import TranslateFortranData2Py +from pyfv3._config import DynamicalCoreConfig + + +class TranslateDycoreFortranData2Py(TranslateFortranData2Py): + def __init__( + self, + grid, + namelist: Namelist, + stencil_factory: StencilFactory, + ): + super().__init__(grid, stencil_factory) + self.config = DynamicalCoreConfig.from_f90nml(namelist) diff --git a/pyfv3/testing/translate_dyncore.py b/pyfv3/testing/translate_dyncore.py index 939490e1..75c4aaf3 100644 --- a/pyfv3/testing/translate_dyncore.py +++ b/pyfv3/testing/translate_dyncore.py @@ -1,5 +1,7 @@ +from f90nml import Namelist + import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, Quantity, StencilFactory +from ndsl import Quantity, StencilFactory from ndsl.constants import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM from ndsl.stencils.testing import ParallelTranslate2PyState from pyfv3._config import DynamicalCoreConfig @@ -121,7 +123,7 @@ def __init__( self.max_error = 2e-6 self.ignore_near_zero_errors["wsd"] = 1e-18 self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) def compute_parallel(self, inputs, communicator): # ak, bk, and phis are numpy arrays at this point and @@ -167,7 +169,7 @@ def compute_parallel(self, inputs, communicator): grid_type=self.grid.grid_type, nested=self.grid.nested, stretched_grid=self.grid.stretched_grid, - config=DynamicalCoreConfig.from_namelist(self.namelist).acoustic_dynamics, + config=self.config.acoustic_dynamics, phis=phis, wsd=wsd.data, state=state, diff --git a/pyfv3/testing/translate_fvdynamics.py b/pyfv3/testing/translate_fvdynamics.py index a642492d..1b2f8b19 100644 --- a/pyfv3/testing/translate_fvdynamics.py +++ b/pyfv3/testing/translate_fvdynamics.py @@ -3,9 +3,10 @@ from typing import Any, Dict, Optional, Tuple import pytest +from f90nml import Namelist import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, Quantity, StencilFactory +from ndsl import Quantity, StencilFactory from ndsl.constants import ( X_DIM, X_INTERFACE_DIM, @@ -16,23 +17,12 @@ ) from ndsl.grid import GridData from ndsl.performance import NullTimer -from ndsl.stencils.testing import ParallelTranslateBaseSlicing, TranslateFortranData2Py +from ndsl.stencils.testing import ParallelTranslateBaseSlicing from pyfv3._config import DynamicalCoreConfig from pyfv3.dycore_state import DycoreState from pyfv3.stencils import fv_dynamics -class TranslateDycoreFortranData2Py(TranslateFortranData2Py): - def __init__( - self, - grid, - namelist: Namelist, - stencil_factory: StencilFactory, - ): - super().__init__(grid, stencil_factory) - self.namelist = DynamicalCoreConfig.from_namelist(namelist) - - class TranslateFVDynamics(ParallelTranslateBaseSlicing): compute_grid_option = True inputs: Dict[str, Any] = { @@ -295,7 +285,7 @@ def __init__( self.ignore_near_zero_errors["q_con"] = True self.dycore: Optional[fv_dynamics.DynamicalCore] = None self.stencil_factory = stencil_factory - self.namelist: DynamicalCoreConfig = DynamicalCoreConfig.from_namelist(namelist) + self.config = DynamicalCoreConfig.from_f90nml(namelist) def state_from_inputs(self, inputs): input_storages = super().state_from_inputs(inputs) @@ -337,7 +327,7 @@ def compute_parallel(self, inputs, communicator): stencil_factory=self.stencil_factory, quantity_factory=self.grid.quantity_factory, damping_coefficients=self.grid.damping_coefficients, - config=DynamicalCoreConfig.from_namelist(self.namelist), + config=self.config, phis=state.phis, state=state, timestep=timedelta(seconds=inputs["bdt"]), diff --git a/pyfv3/wrappers/geos_wrapper.py b/pyfv3/wrappers/geos_wrapper.py index eadb496d..fea1a196 100644 --- a/pyfv3/wrappers/geos_wrapper.py +++ b/pyfv3/wrappers/geos_wrapper.py @@ -116,7 +116,14 @@ def __init__( self.backend = backend self.namelist = namelist - self.dycore_config = pyfv3.DynamicalCoreConfig.from_f90nml(self.namelist) + # TODO: After pace unit tests have been updated, or universal + # loader from namelist/yaml has been implemented, create a + # dycore_config using default groups or creation from yaml. + # This is a temporary work-around for now. + self.dycore_config = pyfv3.DynamicalCoreConfig.from_f90nml( + self.namelist, + target_groups=None, + ) self.dycore_config.dt_atmos = bdt assert self.dycore_config.dt_atmos != 0 diff --git a/tests/savepoint/translate/translate_a2b_ord4.py b/tests/savepoint/translate/translate_a2b_ord4.py index 2c93d926..a667441b 100644 --- a/tests/savepoint/translate/translate_a2b_ord4.py +++ b/tests/savepoint/translate/translate_a2b_ord4.py @@ -1,6 +1,8 @@ from typing import Any, Dict -from ndsl import Namelist, StencilFactory, orchestrate +from f90nml import Namelist + +from ndsl import StencilFactory, orchestrate from ndsl.constants import Z_DIM from pyfv3.stencils import DivergenceDamping from pyfv3.testing import TranslateDycoreFortranData2Py @@ -51,11 +53,10 @@ def __init__( stencil_factory: StencilFactory, ): super().__init__(grid, namelist, stencil_factory) - assert namelist.grid_type < 3 + assert self.config.grid_type < 3 self.in_vars["data_vars"] = {"wk": {}, "vort": {}, "delpc": {}, "nord_col": {}} self.in_vars["parameters"] = ["dt"] self.out_vars: Dict[str, Any] = {"wk": {}, "vort": {}} - self.namelist = namelist # type: ignore self.stencil_factory = stencil_factory self.compute_obj = A2B_Ord4Compute(stencil_factory) @@ -69,10 +70,10 @@ def compute_from_storage(self, inputs): self.grid.damping_coefficients, self.grid.nested, self.grid.stretched_grid, - self.namelist.dddmp, - self.namelist.d4_bg, - self.namelist.nord, - self.namelist.grid_type, + self.config.dddmp, + self.config.d4_bg, + self.config.nord, + self.config.grid_type, nord_col, nord_col, ) diff --git a/tests/savepoint/translate/translate_c_sw.py b/tests/savepoint/translate/translate_c_sw.py index 070887e6..ae273dca 100644 --- a/tests/savepoint/translate/translate_c_sw.py +++ b/tests/savepoint/translate/translate_c_sw.py @@ -1,11 +1,14 @@ -from ndsl import Namelist, QuantityFactory, StencilFactory +from f90nml import Namelist + +from ndsl import QuantityFactory, StencilFactory +from pyfv3._config import DynamicalCoreConfig from pyfv3.stencils import CGridShallowWaterDynamics from pyfv3.testing import TranslateDycoreFortranData2Py def get_c_sw_instance( grid, - namelist: Namelist, + config: DynamicalCoreConfig, stencil_factory: StencilFactory, quantity_factory: QuantityFactory, ): @@ -14,8 +17,8 @@ def get_c_sw_instance( quantity_factory=quantity_factory, grid_data=grid.grid_data, nested=grid.nested, - grid_type=namelist.grid_type, - nord=namelist.nord, + grid_type=config.grid_type, + nord=config.nord, ) @@ -75,7 +78,7 @@ def __init__( ): super().__init__(grid, namelist, stencil_factory) cgrid_shallow_water_lagrangian_dynamics = get_c_sw_instance( - grid, namelist, stencil_factory, self.grid.quantity_factory + grid, self.config, stencil_factory, self.grid.quantity_factory ) self.compute_func = cgrid_shallow_water_lagrangian_dynamics # type: ignore self.in_vars["data_vars"] = { @@ -122,7 +125,7 @@ def __init__( super().__init__(grid, namelist, stencil_factory) self.max_error = 9e-10 self.cgrid_sw_lagrangian_dynamics = get_c_sw_instance( - grid, namelist, stencil_factory, self.grid.quantity_factory + grid, self.config, stencil_factory, self.grid.quantity_factory ) self.in_vars["data_vars"] = { "u": { @@ -180,7 +183,7 @@ def __init__( super().__init__(grid, namelist, stencil_factory) self.max_error = 5e-9 self.cgrid_sw_lagrangian_dynamics = get_c_sw_instance( - grid, namelist, stencil_factory, self.grid.quantity_factory + grid, self.config, stencil_factory, self.grid.quantity_factory ) self.in_vars["data_vars"] = { "uc": {}, @@ -221,7 +224,7 @@ def __init__( ): super().__init__(grid, namelist, stencil_factory) cgrid_sw_lagrangian_dynamics = get_c_sw_instance( - grid, namelist, stencil_factory, self.grid.quantity_factory + grid, self.config, stencil_factory, self.grid.quantity_factory ) def compute_func(*args, **kwargs): diff --git a/tests/savepoint/translate/translate_corners.py b/tests/savepoint/translate/translate_corners.py index 74916a6a..7e243340 100644 --- a/tests/savepoint/translate/translate_corners.py +++ b/tests/savepoint/translate/translate_corners.py @@ -1,7 +1,9 @@ from typing import Any, Dict +from f90nml import Namelist + import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.stencils import corners from pyfv3.stencils.copy_corners import CopyCornersX, CopyCornersY from pyfv3.testing import TranslateDycoreFortranData2Py diff --git a/tests/savepoint/translate/translate_cubedtolatlon.py b/tests/savepoint/translate/translate_cubedtolatlon.py index 6610a46e..35c26f37 100644 --- a/tests/savepoint/translate/translate_cubedtolatlon.py +++ b/tests/savepoint/translate/translate_cubedtolatlon.py @@ -1,7 +1,10 @@ -from ndsl import Namelist, Quantity, StencilFactory +from f90nml import Namelist + +from ndsl import Quantity, StencilFactory from ndsl.constants import X_DIM, X_INTERFACE_DIM, Y_DIM, Y_INTERFACE_DIM, Z_DIM from ndsl.stencils.c2l_ord import CubedToLatLon from ndsl.stencils.testing import ParallelTranslate2Py +from pyfv3 import DynamicalCoreConfig class TranslateCubedToLatLon(ParallelTranslate2Py): @@ -31,7 +34,8 @@ def __init__( "v": self.grid.x3d_domain_dict(), } self.stencil_factory = stencil_factory - self.grid_type = namelist.grid_type + self.config = DynamicalCoreConfig.from_f90nml(namelist) + self.grid_type = self.config.grid_type def compute_parallel(self, inputs, communicator): self._base.make_storage_data_input_vars(inputs) @@ -52,7 +56,7 @@ def compute_parallel(self, inputs, communicator): stencil_factory=self.stencil_factory, quantity_factory=self.grid.quantity_factory, grid_data=self.grid.grid_data, - order=self.namelist.c2l_ord, + order=self.config.c2l_ord, comm=communicator, grid_type=self.grid_type, ) diff --git a/tests/savepoint/translate/translate_d2a2c_vect.py b/tests/savepoint/translate/translate_d2a2c_vect.py index f901be51..dcb95d81 100644 --- a/tests/savepoint/translate/translate_d2a2c_vect.py +++ b/tests/savepoint/translate/translate_d2a2c_vect.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3.stencils import DGrid2AGrid2CGridVectors from pyfv3.testing import TranslateDycoreFortranData2Py @@ -13,13 +15,12 @@ def __init__( super().__init__(grid, namelist, stencil_factory) dord4 = True self.stencil_factory = stencil_factory - self.namelist = namelist # type: ignore self.compute_func = DGrid2AGrid2CGridVectors( # type: ignore self.stencil_factory, self.grid.quantity_factory, self.grid.grid_data, self.grid.nested, - self.namelist.grid_type, + self.config.grid_type, dord4, ) self.in_vars["data_vars"] = { diff --git a/tests/savepoint/translate/translate_d_sw.py b/tests/savepoint/translate/translate_d_sw.py index 63e705f7..3a68094b 100644 --- a/tests/savepoint/translate/translate_d_sw.py +++ b/tests/savepoint/translate/translate_d_sw.py @@ -1,8 +1,8 @@ +from f90nml import Namelist from gt4py.cartesian.gtscript import PARALLEL, computation, interval -import pyfv3 import pyfv3.stencils.d_sw as d_sw -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import X_DIM, Y_DIM, Z_INTERFACE_DIM from ndsl.dsl.typing import Float, FloatField, FloatFieldIJ from pyfv3.testing import TranslateDycoreFortranData2Py @@ -18,9 +18,8 @@ def __init__( super().__init__(grid, namelist, stencil_factory) self.max_error = 3.2e-10 self.stencil_factory = stencil_factory - dycore_config = pyfv3.DynamicalCoreConfig.from_namelist(namelist) column_namelist = d_sw.get_column_namelist( - config=dycore_config.acoustic_dynamics.d_grid_shallow_water, + config=self.config.acoustic_dynamics.d_grid_shallow_water, quantity_factory=self.grid.quantity_factory, ) self.compute_func = d_sw.DGridShallowWaterLagrangianDynamics( # type: ignore @@ -31,7 +30,7 @@ def __init__( column_namelist=column_namelist, nested=self.grid.nested, stretched_grid=self.grid.stretched_grid, - config=dycore_config.d_grid_shallow_water, + config=self.config.d_grid_shallow_water, ) self.in_vars["data_vars"] = { "uc": grid.x3d_domain_dict(), @@ -237,19 +236,16 @@ def __init__( "diss_est": grid.compute_dict(), "dw": grid.compute_dict(), } - self.namelist = namelist # type: ignore self.stencil_factory = stencil_factory def compute_from_storage(self, inputs): column_namelist = d_sw.get_column_namelist( - config=self.namelist, quantity_factory=self.grid.quantity_factory + config=self.config, quantity_factory=self.grid.quantity_factory ) # TODO add these to the serialized data or remove the test inputs["damp_w"] = column_namelist["damp_w"] inputs["ke_bg"] = column_namelist["ke_bg"] - inputs["dt"] = ( - self.namelist.dt_atmos / self.namelist.k_split / self.namelist.n_split - ) + inputs["dt"] = self.config.dt_atmos / self.config.k_split / self.config.n_split inputs["rarea"] = self.grid.rarea heat_diss_stencil = self.stencil_factory.from_origin_domain( d_sw.heat_diss, diff --git a/tests/savepoint/translate/translate_del2cubed.py b/tests/savepoint/translate/translate_del2cubed.py index af8826cf..9cf210f0 100644 --- a/tests/savepoint/translate/translate_del2cubed.py +++ b/tests/savepoint/translate/translate_del2cubed.py @@ -1,6 +1,8 @@ from typing import Any, Dict -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3.stencils import HyperdiffusionDamping from pyfv3.testing import TranslateDycoreFortranData2Py diff --git a/tests/savepoint/translate/translate_del6vtflux.py b/tests/savepoint/translate/translate_del6vtflux.py index dd922820..590d7ac1 100644 --- a/tests/savepoint/translate/translate_del6vtflux.py +++ b/tests/savepoint/translate/translate_del6vtflux.py @@ -1,5 +1,7 @@ +from f90nml import Namelist + import pyfv3.stencils.delnflux as delnflux -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM from ndsl.dsl.typing import Float from pyfv3.testing import TranslateDycoreFortranData2Py diff --git a/tests/savepoint/translate/translate_delnflux.py b/tests/savepoint/translate/translate_delnflux.py index fac7bf88..fc2a0550 100644 --- a/tests/savepoint/translate/translate_delnflux.py +++ b/tests/savepoint/translate/translate_delnflux.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from ndsl.constants import Z_DIM from pyfv3.stencils import delnflux from pyfv3.testing import TranslateDycoreFortranData2Py diff --git a/tests/savepoint/translate/translate_divergencedamping.py b/tests/savepoint/translate/translate_divergencedamping.py index dd5bff63..aa8c7ecc 100644 --- a/tests/savepoint/translate/translate_divergencedamping.py +++ b/tests/savepoint/translate/translate_divergencedamping.py @@ -1,6 +1,8 @@ from typing import Optional -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from ndsl.constants import Z_DIM from pyfv3.stencils import DivergenceDamping from pyfv3.testing import TranslateDycoreFortranData2Py @@ -37,7 +39,6 @@ def __init__( self.max_error = 1.4e-10 self.divdamp: Optional[DivergenceDamping] = None self.stencil_factory = stencil_factory - self.namelist = namelist # type: ignore def compute_from_storage(self, inputs): nord_col = self.grid.quantity_factory.zeros(dims=[Z_DIM], units="unknown") @@ -51,10 +52,10 @@ def compute_from_storage(self, inputs): self.grid.damping_coefficients, self.grid.nested, self.grid.stretched_grid, - self.namelist.dddmp, - self.namelist.d4_bg, - self.namelist.nord, - self.namelist.grid_type, + self.config.dddmp, + self.config.d4_bg, + self.config.nord, + self.config.grid_type, nord_col, d2_bg, ) diff --git a/tests/savepoint/translate/translate_fillz.py b/tests/savepoint/translate/translate_fillz.py index 6901378e..baed617f 100644 --- a/tests/savepoint/translate/translate_fillz.py +++ b/tests/savepoint/translate/translate_fillz.py @@ -1,7 +1,8 @@ import numpy as np +from f90nml import Namelist import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.stencils.testing import pad_field_in_j from ndsl.utils import safe_assign_array from pyfv3.stencils import fillz diff --git a/tests/savepoint/translate/translate_fvsubgridz.py b/tests/savepoint/translate/translate_fvsubgridz.py index e0f8b8e6..b85ac370 100644 --- a/tests/savepoint/translate/translate_fvsubgridz.py +++ b/tests/savepoint/translate/translate_fvsubgridz.py @@ -1,10 +1,13 @@ from types import SimpleNamespace +from f90nml import Namelist + import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import X_DIM, Y_DIM, Z_DIM, Z_INTERFACE_DIM from ndsl.stencils.testing import ParallelTranslateBaseSlicing from pyfv3 import DryConvectiveAdjustment +from pyfv3._config import DynamicalCoreConfig # NOTE, does no halo updates, does not need to be a Parallel test, @@ -176,17 +179,17 @@ def __init__( for qvar in utils.tracer_variables: self.ignore_near_zero_errors[qvar] = True self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) def compute_parallel(self, inputs, communicator): state = self.state_from_inputs(inputs) fvsubgridz = DryConvectiveAdjustment( self.stencil_factory, self.grid.quantity_factory, - self.namelist.nwat, - self.namelist.fv_sg_adj, - self.namelist.n_sponge, - self.namelist.hydrostatic, + self.config.nwat, + self.config.fv_sg_adj, + self.config.n_sponge, + self.config.hydrostatic, ) state_namespace = SimpleNamespace(**state) fvsubgridz( @@ -203,10 +206,10 @@ def compute_sequential(self, inputs_list, communicator_list): fvsubgridz = DryConvectiveAdjustment( self.stencil_factory, self.grid.quantity_factory, - self.namelist.nwat, - self.namelist.fv_sg_adj, - self.namelist.n_sponge, - self.namelist.hydrostatic, + self.config.nwat, + self.config.fv_sg_adj, + self.config.n_sponge, + self.config.hydrostatic, ) state_namespace = SimpleNamespace(**state) fvsubgridz( diff --git a/tests/savepoint/translate/translate_fvtp2d.py b/tests/savepoint/translate/translate_fvtp2d.py index 98d0e8ae..6b333817 100644 --- a/tests/savepoint/translate/translate_fvtp2d.py +++ b/tests/savepoint/translate/translate_fvtp2d.py @@ -1,5 +1,7 @@ +from f90nml import Namelist + import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import X_DIM, Y_DIM, Z_DIM from ndsl.dsl.typing import Float from pyfv3.stencils import FiniteVolumeTransport diff --git a/tests/savepoint/translate/translate_fxadv.py b/tests/savepoint/translate/translate_fxadv.py index a67cf06a..d0e30f57 100644 --- a/tests/savepoint/translate/translate_fxadv.py +++ b/tests/savepoint/translate/translate_fxadv.py @@ -1,6 +1,7 @@ import numpy as np +from f90nml import Namelist -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import X_DIM, Y_DIM, Z_DIM from pyfv3.stencils import FiniteVolumeFluxPrep from pyfv3.testing import TranslateDycoreFortranData2Py @@ -23,7 +24,7 @@ def __init__( self.compute_func = FiniteVolumeFluxPrep( # type: ignore self.stencil_factory, self.grid.grid_data, - namelist.grid_type, + self.config.grid_type, ) self.in_vars["data_vars"] = { "uc": {}, diff --git a/tests/savepoint/translate/translate_grid.py b/tests/savepoint/translate/translate_grid.py index 25d77b21..7998a3c8 100644 --- a/tests/savepoint/translate/translate_grid.py +++ b/tests/savepoint/translate/translate_grid.py @@ -2,9 +2,10 @@ import numpy as np import pytest +from f90nml import Namelist import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import ( X_DIM, X_INTERFACE_DIM, @@ -16,6 +17,7 @@ from ndsl.grid.eta import set_hybrid_pressure_coefficients from ndsl.grid.global_setup import global_mirror_grid, gnomonic_grid from ndsl.stencils.testing import ParallelTranslateGrid +from pyfv3 import DynamicalCoreConfig class TranslateGnomonicGrids(ParallelTranslateGrid): @@ -135,7 +137,7 @@ def __init__( self.near_zero = 3e-14 self.ignore_near_zero_errors = {"agrid": True, "dxc": True, "dyc": True} self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs = { "grid": { @@ -217,10 +219,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -272,13 +273,12 @@ def __init__( self.near_zero = 1e-14 self.ignore_near_zero_errors = {"grid": True} self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -300,7 +300,7 @@ def __init__( super().__init__(rank_grids, namelist, stencil_factory) self.max_error = 3e-14 self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs = { "grid": { @@ -327,10 +327,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -353,8 +352,8 @@ def __init__( ): super().__init__(rank_grids, namelist, stencil_factory) self.max_error = 1e-13 - self.namelist = namelist self.stencil_factory = stencil_factory + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs = { "agrid": { @@ -390,10 +389,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -504,20 +502,19 @@ def __init__( self.near_zero = 3e-14 self.ignore_near_zero_errors = {"gridvar": True, "agrid": True} self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, - grid_type=namelist.grid_type, - dx_const=namelist.dx_const, - dy_const=namelist.dy_const, - deglat=namelist.deglat, + grid_type=self.config.grid_type, + dx_const=self.config.dx_const, + dy_const=self.config.dy_const, + deglat=self.config.deglat, ) state = {} for metric_term, metadata in self.outputs.items(): @@ -634,7 +631,7 @@ def __init__( }, } self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs: Dict[str, Any] = { "grid": { @@ -748,10 +745,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -802,7 +798,7 @@ def __init__( }, } self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs: Dict[str, Any] = { "grid": { @@ -1014,10 +1010,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -1050,7 +1045,7 @@ def __init__( self.near_zero = 1e-14 self.ignore_near_zero_errors = {"l2c_v": True, "l2c_u": True} self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs: Dict[str, Any] = { "grid": { @@ -1091,10 +1086,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -1130,7 +1124,7 @@ def __init__( }, } self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs: Dict[str, Any] = { "grid": { @@ -1385,10 +1379,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -1431,7 +1424,7 @@ def __init__( super().__init__(rank_grids, namelist, stencil_factory) self.max_error = 4e-14 self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs: Dict[str, Any] = { "sin_sg1": { @@ -1529,10 +1522,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -1576,7 +1568,7 @@ def __init__( }, } self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs: Dict[str, Any] = { "agrid": { @@ -1664,10 +1656,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -1694,7 +1685,7 @@ def __init__( super().__init__(rank_grids, namelist, stencil_factory) self.max_error = 3e-13 self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs: Dict[str, Any] = { "grid": { @@ -1804,10 +1795,9 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=1, communicator=communicator, backend=self.stencil_factory.backend, @@ -1886,7 +1876,7 @@ def __init__( }, } self.stencil_factory = stencil_factory - self.namelist = namelist + self.config = DynamicalCoreConfig.from_f90nml(namelist) inputs: Dict[str, Any] = { "gridvar": { @@ -2315,17 +2305,16 @@ def __init__( } def compute_parallel(self, inputs, communicator): - namelist = self.namelist grid_generator = MetricTerms.from_tile_sizing( - npx=namelist.npx, - npy=namelist.npy, + npx=self.config.npx, + npy=self.config.npy, npz=int(inputs["npz"]), communicator=communicator, backend=self.stencil_factory.backend, - grid_type=namelist.grid_type, - dx_const=namelist.dx_const, - dy_const=namelist.dy_const, - deglat=namelist.deglat, + grid_type=self.config.grid_type, + dx_const=self.config.dx_const, + dy_const=self.config.dy_const, + deglat=self.config.deglat, ) input_state = self.state_from_inputs(inputs) grid_generator._grid = input_state["grid"] diff --git a/tests/savepoint/translate/translate_haloupdate.py b/tests/savepoint/translate/translate_haloupdate.py index 12b078d7..0d5504c3 100644 --- a/tests/savepoint/translate/translate_haloupdate.py +++ b/tests/savepoint/translate/translate_haloupdate.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from ndsl.constants import ( N_HALO_DEFAULT, X_DIM, diff --git a/tests/savepoint/translate/translate_init_case.py b/tests/savepoint/translate/translate_init_case.py index 200eea40..7fad1a12 100644 --- a/tests/savepoint/translate/translate_init_case.py +++ b/tests/savepoint/translate/translate_init_case.py @@ -2,13 +2,14 @@ import numpy as np import pytest +from f90nml import Namelist import ndsl.constants as constants import ndsl.dsl.gt4py_utils as utils import pyfv3.initialization.analytic_init as analytic_init import pyfv3.initialization.init_utils as init_utils import pyfv3.initialization.test_cases.initialize_baroclinic as baroclinic_init -from ndsl import Namelist, Quantity, QuantityFactory, StencilFactory, SubtileGridSizer +from ndsl import Quantity, QuantityFactory, StencilFactory, SubtileGridSizer from ndsl.constants import ( N_HALO_DEFAULT, X_DIM, @@ -21,6 +22,7 @@ from ndsl.grid import GridData, MetricTerms from ndsl.stencils.testing import ParallelTranslateBaseSlicing from ndsl.stencils.testing.grid import TRACER_DIM # type: ignore +from pyfv3 import DynamicalCoreConfig from pyfv3.testing import TranslateDycoreFortranData2Py @@ -164,8 +166,8 @@ def __init__( self.ignore_near_zero_errors = {} for var in ["u", "v"]: self.ignore_near_zero_errors[var] = {"near_zero": 2e-13} - self.namelist = namelist # type: ignore self.stencil_factory = stencil_factory + self.config = DynamicalCoreConfig.from_f90nml(namelist) def compute_sequential(self, *args, **kwargs): pytest.skip( @@ -206,20 +208,20 @@ def compute_parallel(self, inputs, communicator): ) metric_terms = MetricTerms.from_tile_sizing( - npx=self.namelist.npx, - npy=self.namelist.npy, - npz=self.namelist.npz, + npx=self.config.npx, + npy=self.config.npy, + npz=self.config.npz, communicator=communicator, backend=self.stencil_factory.backend, ) sizer = SubtileGridSizer.from_tile_params( - nx_tile=self.namelist.nx_tile, - ny_tile=self.namelist.nx_tile, - nz=self.namelist.nz, + nx_tile=self.config.nx_tile, + ny_tile=self.config.nx_tile, + nz=self.config.nz, n_halo=N_HALO_DEFAULT, extra_dim_lengths={}, - layout=self.namelist.layout, + layout=self.config.layout, tile_partitioner=communicator.partitioner.tile, tile_rank=communicator.tile.rank, ) @@ -235,9 +237,9 @@ def compute_parallel(self, inputs, communicator): analytic_init_case="baroclinic", grid_data=grid_data, quantity_factory=quantity_factory, - adiabatic=self.namelist.adiabatic, - hydrostatic=self.namelist.hydrostatic, - moist_phys=self.namelist.moist_phys, + adiabatic=self.config.adiabatic, + hydrostatic=self.config.hydrostatic, + moist_phys=self.config.moist_phys, comm=communicator, ) @@ -295,7 +297,6 @@ def __init__( "eta": {"istart": 0, "iend": 0, "jstart": 0, "jend": 0}, "eta_v": {"istart": 0, "iend": 0, "jstart": 0, "jend": 0}, } - self.namelist = namelist # type: ignore self.stencil_factory = stencil_factory def compute(self, inputs): @@ -357,7 +358,6 @@ def __init__( self.ignore_near_zero_errors[var] = {"near_zero": 2e-13} self.max_error = 1e-13 - self.namelist = namelist # type: ignore self.stencil_factory = stencil_factory def compute(self, inputs): @@ -394,8 +394,8 @@ def compute(self, inputs): baroclinic_init.baroclinic_initialization( **sliced_inputs, **grid_vars, - adiabatic=self.namelist.adiabatic, - hydrostatic=self.namelist.hydrostatic, + adiabatic=self.config.adiabatic, + hydrostatic=self.config.hydrostatic, nx=self.grid.nic, ny=self.grid.njc, ) @@ -439,7 +439,6 @@ def __init__( self.out_vars = {} for var in ["delz", "delp", "ps", "peln"]: self.out_vars[var] = self.in_vars["data_vars"][var] - self.namelist = namelist # type: ignore self.stencil_factory = stencil_factory def compute(self, inputs): @@ -449,14 +448,13 @@ def compute(self, inputs): if k != "ptop": inputs[k] = v.data - namelist = self.namelist inputs["delz"][:] = 1.0e25 sliced_inputs = make_sliced_inputs_dict( inputs, self.grid.compute_interface()[0:2] ) init_utils.p_var( **sliced_inputs, - moist_phys=namelist.moist_phys, - make_nh=(not namelist.hydrostatic), + moist_phys=self.config.moist_phys, + make_nh=(not self.config.hydrostatic), ) return self.slice_output(inputs) diff --git a/tests/savepoint/translate/translate_last_step.py b/tests/savepoint/translate/translate_last_step.py index 02f2d184..be59598e 100644 --- a/tests/savepoint/translate/translate_last_step.py +++ b/tests/savepoint/translate/translate_last_step.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3.stencils import moist_cv from pyfv3.testing import TranslateDycoreFortranData2Py diff --git a/tests/savepoint/translate/translate_moistcvpluspkz_2d.py b/tests/savepoint/translate/translate_moistcvpluspkz_2d.py index c8c2e43b..7f06af27 100644 --- a/tests/savepoint/translate/translate_moistcvpluspkz_2d.py +++ b/tests/savepoint/translate/translate_moistcvpluspkz_2d.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from ndsl.dsl.typing import FloatField from ndsl.stencils.testing import pad_field_in_j from pyfv3.stencils import moist_cv diff --git a/tests/savepoint/translate/translate_neg_adj3.py b/tests/savepoint/translate/translate_neg_adj3.py index c423757d..310aeaf0 100644 --- a/tests/savepoint/translate/translate_neg_adj3.py +++ b/tests/savepoint/translate/translate_neg_adj3.py @@ -1,7 +1,9 @@ from typing import Any, Dict +from f90nml import Namelist + import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from pyfv3.stencils import AdjustNegativeTracerMixingRatio from pyfv3.testing import TranslateDycoreFortranData2Py @@ -41,15 +43,14 @@ def __init__( for qvar in utils.tracer_variables: self.ignore_near_zero_errors[qvar] = True self.stencil_factory = stencil_factory - self.namelist = namelist # type: ignore def compute(self, inputs): self.make_storage_data_input_vars(inputs) compute_fn = AdjustNegativeTracerMixingRatio( self.stencil_factory, quantity_factory=self.grid.quantity_factory, - check_negative=self.namelist.check_negative, - hydrostatic=self.namelist.hydrostatic, + check_negative=self.config.check_negative, + hydrostatic=self.config.hydrostatic, ) compute_fn( inputs["qvapor"], diff --git a/tests/savepoint/translate/translate_nh_p_grad.py b/tests/savepoint/translate/translate_nh_p_grad.py index d0dfa16a..0e80b2ad 100644 --- a/tests/savepoint/translate/translate_nh_p_grad.py +++ b/tests/savepoint/translate/translate_nh_p_grad.py @@ -1,5 +1,7 @@ +from f90nml import Namelist + import pyfv3.stencils.nh_p_grad as NH_P_Grad -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from pyfv3.testing import TranslateDycoreFortranData2Py @@ -31,15 +33,14 @@ def __init__( "delp": {}, } self.stencil_factory = stencil_factory - self.namelist = namelist # type: ignore def compute(self, inputs): self.compute_func = NH_P_Grad.NonHydrostaticPressureGradient( # type: ignore self.stencil_factory, self.grid.quantity_factory, grid_data=self.grid.grid_data, - grid_type=self.namelist.grid_type, - use_logp=self.namelist.use_logp, + grid_type=self.config.grid_type, + use_logp=self.config.use_logp, ) self.make_storage_data_input_vars(inputs) self.compute_func(**inputs) diff --git a/tests/savepoint/translate/translate_pe_halo.py b/tests/savepoint/translate/translate_pe_halo.py index 1aa4041d..49897dd3 100644 --- a/tests/savepoint/translate/translate_pe_halo.py +++ b/tests/savepoint/translate/translate_pe_halo.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3.stencils import pe_halo from pyfv3.testing import TranslateDycoreFortranData2Py diff --git a/tests/savepoint/translate/translate_pk3_halo.py b/tests/savepoint/translate/translate_pk3_halo.py index 2c1b9c87..158864b4 100644 --- a/tests/savepoint/translate/translate_pk3_halo.py +++ b/tests/savepoint/translate/translate_pk3_halo.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3.stencils import PK3Halo from pyfv3.testing import TranslateDycoreFortranData2Py diff --git a/tests/savepoint/translate/translate_pressureadjustedtemperature_nonhydrostatic.py b/tests/savepoint/translate/translate_pressureadjustedtemperature_nonhydrostatic.py index e4f51c9a..139924b5 100644 --- a/tests/savepoint/translate/translate_pressureadjustedtemperature_nonhydrostatic.py +++ b/tests/savepoint/translate/translate_pressureadjustedtemperature_nonhydrostatic.py @@ -1,7 +1,8 @@ from typing import Any, Dict -from ndsl import Namelist, StencilFactory -from pyfv3 import DynamicalCoreConfig +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3.stencils import temperature_adjust from pyfv3.stencils.dyn_core import get_nk_heat_dissipation from pyfv3.testing import TranslateDycoreFortranData2Py @@ -17,10 +18,8 @@ def __init__( stencil_factory: StencilFactory, ): super().__init__(grid, namelist, stencil_factory) - dycore_config = DynamicalCoreConfig.from_namelist(namelist) - self.namelist = dycore_config n_adj = get_nk_heat_dissipation( - config=dycore_config.d_grid_shallow_water, + config=self.config.d_grid_shallow_water, npz=grid.grid_indexing.domain[2], ) self.compute_func = stencil_factory.from_origin_domain( # type: ignore @@ -42,7 +41,7 @@ def __init__( self.stencil_factory = stencil_factory def compute_from_storage(self, inputs): - inputs["delt_time_factor"] = abs(inputs["bdt"] * self.namelist.delt_max) + inputs["delt_time_factor"] = abs(inputs["bdt"] * self.config.delt_max) del inputs["bdt"] self.compute_func(**inputs) return inputs diff --git a/tests/savepoint/translate/translate_qsinit.py b/tests/savepoint/translate/translate_qsinit.py index 0ee7bcaf..1cb5f912 100644 --- a/tests/savepoint/translate/translate_qsinit.py +++ b/tests/savepoint/translate/translate_qsinit.py @@ -1,8 +1,9 @@ import numpy as np +from f90nml import Namelist import ndsl.dsl.gt4py_utils as utils import pyfv3.stencils.saturation_adjustment as satadjust -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from pyfv3.testing import TranslateDycoreFortranData2Py diff --git a/tests/savepoint/translate/translate_ray_fast.py b/tests/savepoint/translate/translate_ray_fast.py index 84158b20..e6f66b06 100644 --- a/tests/savepoint/translate/translate_ray_fast.py +++ b/tests/savepoint/translate/translate_ray_fast.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3.stencils import RayleighDamping from pyfv3.testing import TranslateDycoreFortranData2Py @@ -13,9 +15,9 @@ def __init__( super().__init__(grid, namelist, stencil_factory) self.compute_func = RayleighDamping( # type: ignore stencil_factory, - namelist.rf_cutoff, - namelist.tau, - namelist.hydrostatic, + self.config.rf_cutoff, + self.config.tau, + self.config.hydrostatic, ) self.in_vars["data_vars"] = { "u": grid.y3d_domain_dict(), diff --git a/tests/savepoint/translate/translate_remapping.py b/tests/savepoint/translate/translate_remapping.py index f8410c02..b2b8e138 100644 --- a/tests/savepoint/translate/translate_remapping.py +++ b/tests/savepoint/translate/translate_remapping.py @@ -1,7 +1,8 @@ +from f90nml import Namelist + import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import Z_DIM -from pyfv3 import DynamicalCoreConfig from pyfv3.stencils import LagrangianToEulerian from pyfv3.testing import TranslateDycoreFortranData2Py @@ -96,7 +97,6 @@ def __init__( self.near_zero = 3e-18 self.ignore_near_zero_errors = {"q_con": True, "tracers": True} self.stencil_factory = stencil_factory - self.namelist = DynamicalCoreConfig.from_namelist(namelist) def compute_from_storage(self, inputs): wsd_2d = utils.make_storage_from_shape( @@ -111,7 +111,7 @@ def compute_from_storage(self, inputs): l_to_e_obj = LagrangianToEulerian( self.stencil_factory, quantity_factory=self.grid.quantity_factory, - config=DynamicalCoreConfig.from_namelist(self.namelist).remapping, + config=self.config.remapping, area_64=self.grid.area_64, nq=inputs.pop("nq"), pfull=pfull, diff --git a/tests/savepoint/translate/translate_riem_solver3.py b/tests/savepoint/translate/translate_riem_solver3.py index 8a4d7486..6190ba20 100644 --- a/tests/savepoint/translate/translate_riem_solver3.py +++ b/tests/savepoint/translate/translate_riem_solver3.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3 import _config as spec from pyfv3.stencils import NonhydrostaticVerticalSolver from pyfv3.testing import TranslateDycoreFortranData2Py @@ -16,10 +18,10 @@ def __init__( stencil_factory, quantity_factory=self.grid.quantity_factory, config=spec.RiemannConfig( - p_fac=namelist.p_fac, - a_imp=namelist.a_imp, - use_logp=namelist.use_logp, - beta=namelist.beta, + p_fac=self.config.p_fac, + a_imp=self.config.a_imp, + use_logp=self.config.use_logp, + beta=self.config.beta, ), ) diff --git a/tests/savepoint/translate/translate_riem_solver_c.py b/tests/savepoint/translate/translate_riem_solver_c.py index ca008f9e..a8faf4f5 100644 --- a/tests/savepoint/translate/translate_riem_solver_c.py +++ b/tests/savepoint/translate/translate_riem_solver_c.py @@ -1,4 +1,6 @@ -from ndsl import Namelist, StencilFactory +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3.stencils import NonhydrostaticVerticalSolverCGrid from pyfv3.testing import TranslateDycoreFortranData2Py @@ -14,7 +16,7 @@ def __init__( self.compute_func = NonhydrostaticVerticalSolverCGrid( # type: ignore stencil_factory, quantity_factory=self.grid.quantity_factory, - p_fac=namelist.p_fac, + p_fac=self.config.p_fac, ) self.in_vars["data_vars"] = { "cappa": {}, diff --git a/tests/savepoint/translate/translate_satadjust3d.py b/tests/savepoint/translate/translate_satadjust3d.py index 6c93312b..787e0bcb 100644 --- a/tests/savepoint/translate/translate_satadjust3d.py +++ b/tests/savepoint/translate/translate_satadjust3d.py @@ -1,5 +1,6 @@ -from ndsl import Namelist, StencilFactory -from pyfv3 import DynamicalCoreConfig +from f90nml import Namelist + +from ndsl import StencilFactory from pyfv3.stencils import SatAdjust3d from pyfv3.testing import TranslateDycoreFortranData2Py @@ -59,7 +60,6 @@ def __init__( }, "cappa": {}, } - self.namelist = DynamicalCoreConfig.from_namelist(namelist) self.stencil_factory = stencil_factory def compute_from_storage(self, inputs): @@ -68,7 +68,7 @@ def compute_from_storage(self, inputs): inputs["fast_mp_consv"] = bool(inputs["fast_mp_consv"]) satadjust3d_obj = SatAdjust3d( self.stencil_factory, - DynamicalCoreConfig.from_namelist(self.namelist).sat_adjust, + self.config.sat_adjust, self.grid.area_64, int(inputs["kmp"]), ) diff --git a/tests/savepoint/translate/translate_tracer2d1l.py b/tests/savepoint/translate/translate_tracer2d1l.py index 48759417..4726b9ce 100644 --- a/tests/savepoint/translate/translate_tracer2d1l.py +++ b/tests/savepoint/translate/translate_tracer2d1l.py @@ -1,9 +1,11 @@ import pytest +from f90nml import Namelist import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import X_DIM, Y_DIM, Z_DIM from ndsl.stencils.testing import ParallelTranslate +from pyfv3 import DynamicalCoreConfig from pyfv3.stencils import FiniteVolumeTransport, TracerAdvection from pyfv3.utils.functional_validation import get_subset_func @@ -34,12 +36,12 @@ def __init__( self._base.in_vars["parameters"] = ["nq"] self._base.out_vars = self._base.in_vars["data_vars"] self.stencil_factory = stencil_factory - self.namelist = namelist self._subset = get_subset_func( self.grid.grid_indexing, dims=[X_DIM, Y_DIM, Z_DIM], n_halo=((0, 0), (0, 0)), ) + self.config = DynamicalCoreConfig.from_f90nml(namelist) def collect_input_data(self, serializer, savepoint): input_data = self._base.collect_input_data(serializer, savepoint) @@ -57,7 +59,7 @@ def compute_parallel(self, inputs, communicator): grid_data=self.grid.grid_data, damping_coefficients=self.grid.damping_coefficients, grid_type=self.grid.grid_type, - hord=self.namelist.hord_tr, + hord=self.config.hord_tr, ) self.tracer_advection = TracerAdvection( diff --git a/tests/savepoint/translate/translate_updatedzc.py b/tests/savepoint/translate/translate_updatedzc.py index 63f578b2..0a2b4dac 100644 --- a/tests/savepoint/translate/translate_updatedzc.py +++ b/tests/savepoint/translate/translate_updatedzc.py @@ -1,6 +1,7 @@ import numpy as np +from f90nml import Namelist -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import X_DIM, Y_DIM, Z_DIM from pyfv3.stencils import UpdateGeopotentialHeightOnCGrid from pyfv3.testing import TranslateDycoreFortranData2Py @@ -21,7 +22,7 @@ def __init__( quantity_factory=self.grid.quantity_factory, area=grid.grid_data.area, dp_ref=grid.grid_data.dp_ref, - grid_type=namelist.grid_type, + grid_type=self.config.grid_type, ) def compute(**kwargs): diff --git a/tests/savepoint/translate/translate_updatedzd.py b/tests/savepoint/translate/translate_updatedzd.py index b8286a1d..c5687074 100644 --- a/tests/savepoint/translate/translate_updatedzd.py +++ b/tests/savepoint/translate/translate_updatedzd.py @@ -1,8 +1,8 @@ import numpy as np +from f90nml import Namelist -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.constants import X_DIM, Y_DIM, Z_DIM -from pyfv3 import DynamicalCoreConfig from pyfv3.stencils import UpdateHeightOnDGrid, d_sw from pyfv3.testing import TranslateDycoreFortranData2Py from pyfv3.utils.functional_validation import get_subset_func @@ -48,7 +48,6 @@ def __init__( self.out_vars["ws"]["kstart"] = grid.npz self.out_vars["ws"]["kend"] = None self.stencil_factory = stencil_factory - self.namelist = DynamicalCoreConfig.from_namelist(namelist) self._subset = get_subset_func( self.grid.grid_indexing, dims=[X_DIM, Y_DIM, Z_DIM], @@ -65,9 +64,9 @@ def compute(self, inputs): self.grid.damping_coefficients, self.grid.grid_data, self.grid.grid_type, - self.namelist.hord_tm, + self.config.hord_tm, column_namelist=d_sw.get_column_namelist( - self.namelist, quantity_factory=self.grid.quantity_factory + self.config, quantity_factory=self.grid.quantity_factory ), ) self.updatedzd(**inputs) diff --git a/tests/savepoint/translate/translate_xppm.py b/tests/savepoint/translate/translate_xppm.py index 49ff1ef8..059b6120 100644 --- a/tests/savepoint/translate/translate_xppm.py +++ b/tests/savepoint/translate/translate_xppm.py @@ -1,5 +1,7 @@ +from f90nml import Namelist + import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.stencils.testing import TranslateGrid from pyfv3.stencils import XPiecewiseParabolic from pyfv3.testing import TranslateDycoreFortranData2Py diff --git a/tests/savepoint/translate/translate_xtp_u.py b/tests/savepoint/translate/translate_xtp_u.py index 95d5da84..11782d35 100644 --- a/tests/savepoint/translate/translate_xtp_u.py +++ b/tests/savepoint/translate/translate_xtp_u.py @@ -1,6 +1,7 @@ +from f90nml import Namelist from gt4py.cartesian.gtscript import PARALLEL, computation, interval -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.dsl.typing import FloatField, FloatFieldIJ from ndsl.grid import GridData from pyfv3.stencils import xtp_u @@ -84,14 +85,13 @@ def __init__( self.in_vars["data_vars"]["c"]["serialname"] = "ub" self.in_vars["data_vars"]["flux"]["serialname"] = "vb" self.stencil_factory = stencil_factory - self.namelist = namelist # type: ignore def compute_from_storage(self, inputs): xtp_obj = XTP_U( stencil_factory=self.stencil_factory, grid_data=self.grid.grid_data, - grid_type=self.namelist.grid_type, - iord=self.namelist.hord_mt, + grid_type=self.config.grid_type, + iord=self.config.hord_mt, ) xtp_obj(inputs["c"], inputs["u"], inputs["flux"]) return inputs diff --git a/tests/savepoint/translate/translate_yppm.py b/tests/savepoint/translate/translate_yppm.py index 6c4d4003..394ef9c1 100644 --- a/tests/savepoint/translate/translate_yppm.py +++ b/tests/savepoint/translate/translate_yppm.py @@ -1,5 +1,7 @@ +from f90nml import Namelist + import ndsl.dsl.gt4py_utils as utils -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.dsl.typing import Float from ndsl.stencils.testing import TranslateGrid from pyfv3.stencils import YPiecewiseParabolic diff --git a/tests/savepoint/translate/translate_ytp_v.py b/tests/savepoint/translate/translate_ytp_v.py index 19a64e98..1ff4bb47 100644 --- a/tests/savepoint/translate/translate_ytp_v.py +++ b/tests/savepoint/translate/translate_ytp_v.py @@ -1,9 +1,9 @@ +from f90nml import Namelist from gt4py.cartesian.gtscript import PARALLEL, computation, interval -from ndsl import Namelist, StencilFactory +from ndsl import StencilFactory from ndsl.dsl.typing import FloatField, FloatFieldIJ from ndsl.grid import GridData -from pyfv3 import DynamicalCoreConfig from pyfv3.stencils import ytp_v from pyfv3.testing import TranslateDycoreFortranData2Py @@ -84,14 +84,13 @@ def __init__( self.in_vars["parameters"] = [] self.out_vars = {"flux": flux_info} self.stencil_factory = stencil_factory - self.namelist = DynamicalCoreConfig.from_namelist(namelist) def compute_from_storage(self, inputs): ytp_obj = YTP_V( stencil_factory=self.stencil_factory, grid_data=self.grid.grid_data, - grid_type=self.namelist.grid_type, - jord=self.namelist.hord_mt, + grid_type=self.config.grid_type, + jord=self.config.hord_mt, ) ytp_obj(inputs["c"], inputs["v"], inputs["flux"]) return inputs