Source code for fv3config.config.alter

from datetime import timedelta
import copy
from .time_constants import SECONDS_IN_DAY
from .._exceptions import ConfigError


[docs]def enable_restart(config, initial_conditions): """Apply namelist settings for initializing from model restart files. Args: config (dict): a configuration dictionary initial_conditions (str): path to desired new initial conditions. Returns: dict: a configuration dictionary """ if "namelist" not in config: raise ConfigError("config dictionary must have a 'namelist' key") restart_config = copy.deepcopy(config) restart_config["namelist"].setdefault("fv_core_nml", {})["external_ic"] = False restart_config["namelist"]["fv_core_nml"]["nggps_ic"] = False restart_config["namelist"]["fv_core_nml"]["make_nh"] = False restart_config["namelist"]["fv_core_nml"]["mountain"] = True restart_config["namelist"]["fv_core_nml"]["warm_start"] = True restart_config["namelist"]["fv_core_nml"]["na_init"] = 0 restart_config["namelist"].setdefault("coupler_nml", {})[ "force_date_from_namelist" ] = False restart_config["initial_conditions"] = initial_conditions return restart_config
[docs]def set_run_duration(config: dict, duration: timedelta) -> dict: """Set the run duration in the configuration dictionary. Returns a new configuration dictionary. Args: config (dict): a configuration dictionary duration (timedelta): the new run duration Returns: new_config (dict): configuration dictionary with the new run duration Raises: ConfigError: if the config dictionary is invalid """ if "namelist" not in config: raise ConfigError("config dictionary must have a 'namelist' key") return_config = copy.deepcopy(config) coupler_nml = return_config["namelist"]["coupler_nml"] total_seconds = duration.total_seconds() if total_seconds % 1 != 0: raise ValueError("duration must be an integer number of seconds") coupler_nml["months"] = 0 coupler_nml["hours"] = 0 coupler_nml["minutes"] = 0 days = int(total_seconds / SECONDS_IN_DAY) coupler_nml["days"] = days coupler_nml["seconds"] = int(total_seconds - (days * SECONDS_IN_DAY)) return return_config