def create_xml(dict_configs): ''' Given an experiment directory containing config files and XML directory containing XML templates, create the workflow XML ''' dict_configs['base']['INTERVAL'] = wfu.get_gfs_interval( dict_configs['base']['gfs_cyc']) base = dict_configs['base'] preamble = get_preamble() definitions = get_definitions(base) resources = get_resources(dict_configs, cdump=base['CDUMP']) workflow = get_workflow_body(dict_configs, cdump=base['CDUMP']) # Start writing the XML file fh = open('%s/%s.xml' % (base['EXPDIR'], base['PSLOT']), 'w') fh.write(preamble) fh.write(definitions) fh.write(resources) fh.write(workflow) fh.close() return
def get_gfs_cyc_dates(base): ''' Generate GFS dates from experiment dates and gfs_cyc choice ''' base_out = base.copy() gfs_cyc = base['gfs_cyc'] sdate = base['SDATE'] edate = base['EDATE'] interval_gfs = wfu.get_gfs_interval(gfs_cyc) # Set GFS cycling dates hrdet = 0 if gfs_cyc == 1: hrinc = 24 - sdate.hour hrdet = edate.hour elif gfs_cyc == 2: if sdate.hour in [0, 12]: hrinc = 12 elif sdate.hour in [6, 18]: hrinc = 6 if edate.hour in [6, 18]: hrdet = 6 elif gfs_cyc == 4: hrinc = 6 sdate_gfs = sdate + timedelta(hours=hrinc) edate_gfs = edate - timedelta(hours=hrdet) if sdate_gfs > edate: print 'W A R N I N G!' print 'Starting date for GFS cycles is after Ending date of experiment' print 'SDATE = %s, EDATE = %s' % (sdate.strftime('%Y%m%d%H'), edate.strftime('%Y%m%d%H')) print 'SDATE_GFS = %s, EDATE_GFS = %s' % ( sdate_gfs.strftime('%Y%m%d%H'), edate_gfs.strftime('%Y%m%d%H')) gfs_cyc = 0 base_out['gfs_cyc'] = gfs_cyc base_out['SDATE_GFS'] = sdate_gfs base_out['EDATE_GFS'] = edate_gfs base_out['INTERVAL_GFS'] = interval_gfs fhmax_gfs = {} for hh in ['00', '06', '12', '18']: fhmax_gfs[hh] = base.get('FHMAX_GFS_%s' % hh, 'FHMAX_GFS_00') base_out['FHMAX_GFS'] = fhmax_gfs return base_out
def create_xml(dict_configs): ''' Given an experiment directory containing config files and XML directory containing XML templates, create the workflow XML ''' dict_configs['base']['INTERVAL'] = wfu.get_gfs_interval( dict_configs['base']['gfs_cyc']) base = dict_configs['base'] preamble = get_preamble() definitions = get_definitions(base) resources = get_resources(dict_configs, cdump=base['CDUMP']) workflow = get_workflow_body(dict_configs, cdump=base['CDUMP']) # Removes <memory>&MEMORY_JOB_DUMP</memory> post mortem from gdas tasks temp_workflow = '' memory_dict = [] for each_resource_string in re.split(r'(\s+)', resources): if 'MEMORY' in each_resource_string: memory_dict.append(each_resource_string) for each_line in re.split(r'(\s+)', workflow): if 'MEMORY' not in each_line: temp_workflow += each_line else: if any(substring in each_line for substring in memory_dict): temp_workflow += each_line workflow = temp_workflow # Start writing the XML file fh = open('%s/%s.xml' % (base['EXPDIR'], base['PSLOT']), 'w') fh.write(preamble) fh.write(definitions) fh.write(resources) fh.write(workflow) fh.close() return