Source code for deode.tasks.e927

"""E927."""

import os

from ..datetime_utils import as_datetime, as_timedelta, cycle_offset
from ..namelist import NamelistGenerator
from .base import Task
from .batch import BatchJob


[docs] class E927(Task): """E927 task.""" def __init__(self, config): """Construct forecast object. Args: config (deode.ParsedConfig): Configuration """ Task.__init__(self, config, __class__.__name__) self.climdir = self.platform.get_system_value("climdir") self.archive = self.platform.get_system_value("archive") self.cnmexp = self.config["general.cnmexp"] self.basetime = as_datetime(self.config["general.times.basetime"]) self.forecast_range = self.config["general.times.forecast_range"] self.bdmodel = self.config["boundaries.bdmodel"] self.bdint = self.config["boundaries.bdint"] bdcycle = as_timedelta(config["boundaries.bdcycle"]) bdcycle_start = as_timedelta(config["boundaries.bdcycle_start"]) bdshift = as_timedelta(config["boundaries.bdshift"]) self.bd_basetime = self.basetime - cycle_offset( self.basetime, bdcycle, bdcycle_start=bdcycle_start, bdshift=-bdshift ) self.intp_bddir = self.config["system.intp_bddir"] self.bdnr = config["task.args.bd_nr"] self.bd_time = config["task.args.bd_time"] self.bddir = self.config["system.bddir"] self.bdfile_template = self.config["system.bdfile_template"] self.bdclimdir = self.platform.get_system_value("bdclimdir") self.nlgen = NamelistGenerator(self.config, "master") self.master = self.get_binary("MASTERODB") self.name = f"{self.name}_{self.bdnr}"
[docs] def execute(self): """Run task. Define run sequence. """ # RTTM input for ifile in ["MCICA", "RADSRTM"]: self.fmanager.input(f"@RRTM_DIR@/{ifile}", ifile) # Climate files mm = self.basetime.strftime("%m") self.fmanager.input("{}/Const.Clim.{}".format(self.climdir, mm), "const.clim.000") self.fmanager.input("{}/Const.Clim.{}".format(self.bdclimdir, mm), "Const.Clim") # Namelist self.nlgen.generate_namelist("e927", "fort.4") # Input file bdnr = int(self.bdnr) initfile = f"ICMSH{self.cnmexp}INIT" self.fmanager.input( f"{self.bddir}/{self.bdfile_template}", initfile, basetime=self.bd_basetime, validtime=as_datetime(self.bd_time), ) # Run masterodb batch = BatchJob(os.environ, wrapper=self.wrapper) batch.run(self.master) target = f"{self.intp_bddir}/ELSCF{self.cnmexp}ALBC{bdnr:03d}" self.fmanager.output(f"PF{self.cnmexp}000+0000", target) self.archive_logs(["fort.4", "NODE.001_01"])