def runcmd(model_type, config_path, lab_path): lab = Laboratory(model_type, config_path, lab_path) expt = Experiment(lab) runlog = Runlog(expt) runlog.push()
def __init__(self, lab): self.lab = lab # TODO: replace with dict, check versions via key-value pairs self.modules = set() # TODO: __init__ should not be a config dumping ground! self.config = read_config() # Payu experiment type self.debug = self.config.get('debug', False) self.postscript = self.config.get('postscript') self.repeat_run = self.config.get('repeat', False) # Configuration self.expand_shell_vars = True # TODO: configurable # Model run time self.runtime = None if ('calendar' in self.config and 'runtime' in self.config['calendar']): self.runtime = self.config['calendar']['runtime'] # Stacksize # NOTE: Possible PBS issue in setting non-unlimited stacksizes stacksize = self.config.get('stacksize', 'unlimited') self.set_stacksize(stacksize) # Initialize the submodels self.init_models() # TODO: Move to run/collate/sweep? self.set_expt_pathnames() self.set_counters() for model in self.models: model.set_input_paths() self.set_output_paths() # Miscellaneous configurations # TODO: Move this stuff somewhere else self.userscripts = self.config.get('userscripts', {}) self.profilers = [] init_script = self.userscripts.get('init') if init_script: self.run_userscript(init_script) # Logging if self.config.get('runlog', True): self.runlog = Runlog(self) else: self.runlog = None
def __init__(self, lab, reproduce=False, force=False): self.lab = lab if not force: # check environment for force flag under PBS self.force = os.environ.get('PAYU_FORCE', False) else: self.force = force self.start_time = datetime.datetime.now() # TODO: replace with dict, check versions via key-value pairs self.modules = set() # TODO: __init__ should not be a config dumping ground! self.config = read_config() # Payu experiment type self.debug = self.config.get('debug', False) self.postscript = self.config.get('postscript') self.repeat_run = self.config.get('repeat', False) # Configuration self.expand_shell_vars = True # TODO: configurable # Model run time self.runtime = None if ('calendar' in self.config and 'runtime' in self.config['calendar']): self.runtime = self.config['calendar']['runtime'] # Stacksize # NOTE: Possible PBS issue in setting non-unlimited stacksizes stacksize = self.config.get('stacksize', 'unlimited') self.set_stacksize(stacksize) # Initialize the submodels self.init_models() # TODO: Move to run/collate/sweep? self.set_expt_pathnames() self.set_counters() for model in self.models: model.set_input_paths() self.set_output_paths() if not reproduce: # check environment for reproduce flag under PBS reproduce = os.environ.get('PAYU_REPRODUCE', False) # Initialize manifest self.manifest = Manifest(self.config.get('manifest', {}), reproduce=reproduce) # Miscellaneous configurations # TODO: Move this stuff somewhere else self.userscripts = self.config.get('userscripts', {}) self.profilers = [] init_script = self.userscripts.get('init') if init_script: self.run_userscript(init_script) self.runlog = Runlog(self) # XXX: Temporary spot for the payu path # This is horrible; payu/cli.py does this much more safely! # But also does not even store it in os.environ! default_payu_bin = os.path.dirname(sys.argv[0]) payu_bin = os.environ.get('PAYU_PATH', default_payu_bin) self.payu_path = os.path.join(payu_bin, 'payu') self.run_id = None