#!/usr/bin/env python3 ''' Program Name: subseasonal_stats_grid2grid_create_poe_job_scripts.py Contact(s): Shannon Shields Abstract: This script is run by exevs_subseasonal_grid2grid_stats.sh in scripts/stats/subseasonal. This creates subseasonal grid2grid stats POE job scripts. These jobs contain all the necessary environment variables and commands needed to run the specific use case. ''' import sys import os import glob import datetime import numpy as np print("BEGIN: "+os.path.basename(__file__)) # Read in environment variables DATA = os.environ['DATA'] NET = os.environ['NET'] RUN = os.environ['RUN'] VERIF_CASE = os.environ['VERIF_CASE'] STEP = os.environ['STEP'] COMPONENT = os.environ['COMPONENT'] JOB_GROUP = os.environ['JOB_GROUP'] machine = os.environ['machine'] USE_CFP = os.environ['USE_CFP'] nproc = os.environ['nproc'] VERIF_CASE_STEP = VERIF_CASE+'_'+STEP # Set up job directory JOB_GROUP_jobs_dir = os.path.join(DATA, VERIF_CASE_STEP, 'METplus_job_scripts', JOB_GROUP) if not os.path.exists(JOB_GROUP_jobs_dir): os.makedirs(JOB_GROUP_jobs_dir) # If running USE_CFP, create POE scripts if USE_CFP == 'YES': job_files = glob.glob(os.path.join(DATA, VERIF_CASE_STEP, 'METplus_job_scripts', JOB_GROUP, 'job*')) njob_files = len(job_files) if njob_files == 0: print("FATAL ERROR: No job files created in " +os.path.join(DATA, VERIF_CASE_STEP, 'METplus_job_scripts', JOB_GROUP)) sys.exit(1) poe_files = glob.glob(os.path.join(DATA, VERIF_CASE_STEP, 'METplus_job_scripts', JOB_GROUP, 'poe*')) npoe_files = len(poe_files) if npoe_files > 0: for poe_file in poe_files: os.remove(poe_file) njob, iproc, node = 1, 0, 1 while njob <= njob_files: job = 'job'+str(njob) if machine in ['HERA', 'ORION', 'S4', 'JET']: if iproc >= int(nproc): iproc = 0 node+=1 poe_filename = os.path.join(DATA, VERIF_CASE_STEP, 'METplus_job_scripts', JOB_GROUP, 'poe_jobs'+str(node)) poe_file = open(poe_filename, 'a') iproc+=1 if machine in ['HERA', 'ORION', 'S4', 'JET']: poe_file.write( str(iproc-1)+' ' +os.path.join(DATA, VERIF_CASE_STEP, 'METplus_job_scripts', JOB_GROUP, job)+'\n' ) else: poe_file.write( os.path.join(DATA, VERIF_CASE_STEP, 'METplus_job_scripts', JOB_GROUP, job)+'\n' ) poe_file.close() njob+=1 # If at final record and have not reached the # final processor then write echo's to # poe script for remaining processors poe_filename = os.path.join(DATA, VERIF_CASE_STEP, 'METplus_job_scripts', JOB_GROUP, 'poe_jobs'+str(node)) poe_file = open(poe_filename, 'a') iproc+=1 while iproc <= int(nproc): if machine in ['HERA', 'ORION', 'S4', 'JET']: poe_file.write( str(iproc-1)+' /bin/echo '+str(iproc)+'\n' ) else: poe_file.write( '/bin/echo '+str(iproc)+'\n' ) iproc+=1 poe_file.close() else: print("FATAL ERROR: Cannot create POE scripts. Please set USE_CFP=YES") sys.exit(1) print("END: "+os.path.basename(__file__))