예제 #1
0
파일: wrfda.py 프로젝트: rvanharen/wrfpy
 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())
예제 #2
0
파일: wrfda.py 프로젝트: rvanharen/wrfpy
 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())