Source code for CIME.SystemTests.erio

"""
ERIO tests restart with different PIO methods

This class inherits from SystemTestsCommon
"""
from CIME.XML.standard_module_setup import *
from CIME.SystemTests.system_tests_common import SystemTestsCommon

logger = logging.getLogger(__name__)


[docs] class ERIO(SystemTestsCommon): def __init__(self, case, **kwargs): """ initialize an object interface to file env_test.xml in the case directory """ SystemTestsCommon.__init__(self, case, expected=["TEST"], **kwargs) self._pio_types = self._case.get_env("run").get_valid_values("PIO_TYPENAME") self._stop_n = self._case.get_value("STOP_N") def _full_run(self, pio_type): stop_option = self._case.get_value("STOP_OPTION") expect(self._stop_n > 0, "Bad STOP_N: {:d}".format(self._stop_n)) # Move to config_tests.xml once that's ready rest_n = int(self._stop_n / 2) + 1 self._case.set_value("REST_N", rest_n) self._case.set_value("REST_OPTION", stop_option) self._case.set_value("HIST_N", self._stop_n) self._case.set_value("HIST_OPTION", stop_option) self._case.set_value("CONTINUE_RUN", False) self._case.flush() expect( self._stop_n > 2, "ERROR: stop_n value {:d} too short".format(self._stop_n) ) logger.info( "doing an {0} {1} initial test with restart file at {2} {1} with pio type {3}".format( str(self._stop_n), stop_option, str(rest_n), pio_type ) ) self.run_indv(suffix=pio_type) def _restart_run(self, pio_type, other_pio_type): stop_option = self._case.get_value("STOP_OPTION") rest_n = int(self._stop_n / 2) + 1 stop_new = self._stop_n - rest_n expect( stop_new > 0, "ERROR: stop_n value {:d} too short {:d} {:d}".format( stop_new, self._stop_n, rest_n ), ) self._case.set_value("STOP_N", stop_new) self._case.set_value("CONTINUE_RUN", True) self._case.set_value("REST_OPTION", "never") self._case.flush() logger.info( "doing an {} {} restart test with {} against {}".format( str(stop_new), stop_option, pio_type, other_pio_type ) ) suffix = "{}.{}".format(other_pio_type, pio_type) self.run_indv(suffix=suffix) # Compare restart file self._component_compare_test(other_pio_type, suffix)
[docs] def run_phase(self): for idx, pio_type1 in enumerate(self._pio_types): if pio_type1 != "default" and pio_type1 != "nothing": self._case.set_value("PIO_TYPENAME", pio_type1) self._full_run(pio_type1) for pio_type2 in self._pio_types[idx + 1 :]: if pio_type2 != "default" and pio_type2 != "nothing": self._case.set_value("PIO_TYPENAME", pio_type2) self._restart_run(pio_type2, pio_type1)