def updatebc_run(self, domain): # set domain specific workdir wrfda_workdir = os.path.join(self.wrfda_workdir, "d0" + str(domain)) # run da_update_bc.exe j_id = None if len(self.config['options_slurm']['slurm_updatebc.exe']): if j_id: mid = "--dependency=afterok:%d" %j_id updatebc_command = ['sbatch', mid, self.config['options_slurm']['slurm_updatebc.exe']] else: updatebc_command = ['sbatch', self.config['options_slurm']['slurm_updatebc.exe']] try: res = subprocess.check_output(updatebc_command, cwd=wrfda_workdir, stderr=utils.devnull()) j_id = int(res.split()[-1]) # slurm job-id except subprocess.CalledProcessError: logger.error('Updatebc failed %s:' %updatebc_command) raise # re-raise exception while True: time.sleep(0.5) if not utils.testjob(j_id): break else: # run locally print os.path.join(wrfda_workdir, 'da_update_bc.exe') subprocess.check_call(os.path.join(wrfda_workdir, 'da_update_bc.exe'), cwd=wrfda_workdir, stdout=utils.devnull(), stderr=utils.devnull())
def wrfvar_run(self, domain): ''' run da_wrfvar.exe ''' # set domain specific workdir wrfda_workdir = os.path.join(self.wrfda_workdir, "d0" + str(domain)) logfile = os.path.join(wrfda_workdir, 'log.wrfda_d' + str(domain)) j_id = None if len(self.config['options_slurm']['slurm_wrfvar.exe']): if j_id: mid = "--dependency=afterok:%d" %j_id wrfvar_command = ['sbatch', mid, self.config['options_slurm']['slurm_wrfvar.exe']] else: wrfvar_command = ['sbatch', self.config['options_slurm']['slurm_wrfvar.exe']] utils.check_file_exists(wrfvar_command[-1]) try: res = subprocess.check_output(wrfvar_command, cwd=wrfda_workdir, stderr=utils.devnull()) j_id = int(res.split()[-1]) # slurm job-id except subprocess.CalledProcessError: logger.error('Wrfvar failed %s:' %wrfvar_command) raise # re-raise exception while True: time.sleep(1) if not utils.testjob(j_id): break else: # run locally subprocess.check_call([os.path.join(wrfda_workdir, 'da_wrfvar.exe'), '>&!', logfile], cwd=wrfda_workdir, stdout=utils.devnull(), stderr=utils.devnull())