Ejemplo n.º 1
0
def main(options, main_comm, debugMsg):
    """setup the environment for running the pyAverager in parallel. 

    Arguments:
    options (object) - command line options
    main_comm (object) - MPI simple communicator object
    debugMsg (object) - vprinter object for printing debugging messages

    The env_diags_ice.xml configuration file defines the way the diagnostics are generated. 
    See (website URL here...) for a complete desciption of the env_diags_ice XML options.
    """

    # initialize the environment dictionary
    envDict = dict()

    # CASEROOT is given on the command line as required option --caseroot
    caseroot = options.caseroot[0]
    if main_comm.is_manager():
        debugMsg('caseroot = {0}'.format(caseroot), header=True)
        debugMsg('calling initialize_envDict', header=True)
        envDict = initialize_envDict(envDict, caseroot, debugMsg,
                                     options.standalone)

    # broadcast envDict to all tasks
    envDict = main_comm.partition(data=envDict,
                                  func=partition.Duplicate(),
                                  involved=True)
    main_comm.sync()

    # specify variables to include in the averages, empty list implies get them all
    varList = []

    # generate the climatology files used for all plotting types using the pyAverager
    if main_comm.is_manager():
        debugMsg('calling createClimFiles', header=True)
        debugMsg('calling checkHistoryFiles for control run', header=True)
    main_comm.sync()

    cont_time_series = envDict['CONT_TIMESERIES']
    suffix = 'cice.h.*.nc'
    filep = '.*\.cice.h.\d{4,4}-\d{2,2}\.nc'
    main_comm.sync()

    # get model history file information from the DOUT_S_ROOT archive location
    start_year, stop_year, in_dir, envDict['cont_htype'], envDict[
        'cont_key_infile'] = diagUtilsLib.checkHistoryFiles(
            cont_time_series, envDict['PATH_CONT'], envDict['CASE_TO_CONT'],
            envDict['BEGYR_CONT'], envDict['ENDYR_CONT'], 'ice', suffix, filep)

    if envDict['COMPUTE_CLIMO_CONT'].lower() == 'true':
        try:
            split_size = None
            if cont_time_series.lower() == 'true':
                if main_comm.is_manager():
                    debugMsg('Computing averages for model vs. obs',
                             header=True)

                h_path = envDict['PATH_CONT'] + '/ice/proc/tseries/monthly/'
                # Check to see if tseries is split into hemispheres
                split = checkIceSplit(envDict['ICE_NY_CONT'],
                                      envDict['cont_key_infile'])
                if split:
                    split_size = 'nj=' + envDict[
                        'ICE_NY_CONT'] + ',ni=' + envDict['ICE_NX_CONT']
            else:
                h_path = envDict['PATH_CONT'] + '/ice/hist/'
                split = False

            avg_BEGYR = (int(envDict['ENDYR_CONT']) -
                         int(envDict['YRS_TO_AVG'])) + 1
            createClimFiles(avg_BEGYR, envDict['ENDYR_CONT'], h_path, split,
                            split_size, envDict['cont_htype'],
                            envDict['cont_key_infile'],
                            envDict['PATH_CLIMO_CONT'],
                            envDict['CASE_TO_CONT'], 'cice.h', varList,
                            envDict, envDict['GRIDFILECONT'],
                            envDict['BEGYR_CONT'], envDict['ENDYR_CONT'],
                            main_comm, debugMsg)
        except Exception as error:
            print(str(error))
            traceback.print_exc()
            sys.exit(1)

    if envDict['MODEL_VS_MODEL'].lower(
    ) == 'true' and envDict['COMPUTE_CLIMO_DIFF'].lower() == 'true':
        try:
            diff_time_series = envDict['DIFF_TIMESERIES']
            split_size = None
            suffix = 'cice.h.*.nc'
            filep = '.*\.cice.h.\d{4,4}-\d{2,2}\.nc'
            start_year, stop_year, in_dir, envDict['diff_htype'], envDict[
                'diff_key_infile'] = diagUtilsLib.checkHistoryFiles(
                    diff_time_series, envDict['PATH_DIFF'],
                    envDict['CASE_TO_DIFF'], envDict['BEGYR_DIFF'],
                    envDict['ENDYR_DIFF'], 'ice', suffix, filep)

            if diff_time_series.lower() == 'true':
                if main_comm.is_manager():
                    debugMsg('Computing averages for model vs. model',
                             header=True)

                h_path = envDict['PATH_DIFF'] + '/ice/proc/tseries/monthly/'
                # Check to see if tseries is split into hemispheres
                split = checkIceSplit(envDict['ICE_NY_DIFF'],
                                      envDict['diff_key_infile'])
                if split:
                    split_size = 'nj=' + envDict[
                        'ICE_NY_DIFF'] + ',ni=' + envDict['ICE_NX_DIFF']
            else:
                h_path = envDict['PATH_DIFF'] + '/ice/hist/'
                split = False

            avg_BEGYR_DIFF = (int(envDict['ENDYR_DIFF']) -
                              int(envDict['YRS_TO_AVG'])) + 1
            createClimFiles(avg_BEGYR_DIFF, envDict['ENDYR_DIFF'], h_path,
                            split, split_size, envDict['diff_htype'],
                            envDict['diff_key_infile'],
                            envDict['PATH_CLIMO_DIFF'],
                            envDict['CASE_TO_DIFF'], 'cice.h', varList,
                            envDict, envDict['GRIDFILEDIFF'],
                            envDict['BEGYR_DIFF'], envDict['ENDYR_DIFF'],
                            main_comm, debugMsg)
        except Exception as error:
            print(str(error))
            traceback.print_exc()
            sys.exit(1)
Ejemplo n.º 2
0
def main(options, main_comm, debugMsg):
    """setup the environment for running the pyAverager in parallel. 

    Arguments:
    options (object) - command line options
    main_comm (object) - MPI simple communicator object
    debugMsg (object) - vprinter object for printing debugging messages

    The env_diags_ocn.xml configuration file defines the way the diagnostics are generated. 
    See (website URL here...) for a complete desciption of the env_diags_ocn XML options.
    """

    # initialize the environment dictionary
    envDict = dict()

    # CASEROOT is given on the command line as required option --caseroot
    if main_comm.is_manager():
        caseroot = options.caseroot[0]
        debugMsg('caseroot = {0}'.format(caseroot), header=True)
        debugMsg('calling initialize_envDict', header=True)
        envDict = initialize_envDict(envDict, caseroot, debugMsg, options.standalone)

    # broadcast envDict to all tasks
    envDict = main_comm.partition(data=envDict, func=partition.Duplicate(), involved=True)
    sys.path.append(envDict['PATH'])
    main_comm.sync()

    # generate the climatology files used for all plotting types using the pyAverager
    if main_comm.is_manager():
        debugMsg('calling checkHistoryFiles for model case', header=True)
        suffix = 'pop.h.*.nc'
        file_pattern = '.*\.pop\.h\.\d{4,4}-\d{2,2}\.nc'
        start_year, stop_year, in_dir, htype, firstHistoryFile = diagUtilsLib.checkHistoryFiles(
            envDict['MODELCASE_INPUT_TSERIES'], envDict['DOUT_S_ROOT'], envDict['CASE'],
            envDict['YEAR0'], envDict['YEAR1'], 'ocn', suffix, file_pattern, envDict['MODELCASE_SUBDIR'])
        envDict['YEAR0'] = start_year
        envDict['YEAR1'] = stop_year
        envDict['in_dir'] = in_dir
        envDict['htype'] = htype

    main_comm.sync()

    envDict = main_comm.partition(data=envDict, func=partition.Duplicate(), involved=True)
    main_comm.sync()


    # MODEL_TIMESERIES denotes the plotting diagnostic type requested and whether or
    # not to generate the necessary climo files for those plot sets
    tseries = False
    if envDict['MODEL_TIMESERIES'].lower() in ['t','true']:
        if main_comm.is_manager():
            debugMsg('timeseries years before checkHistoryFiles {0} - {1}'.format(envDict['TSERIES_YEAR0'], envDict['TSERIES_YEAR1']), header=True)
            tseries_start_year, tseries_stop_year, in_dir, htype, firstHistoryFile = \
                diagUtilsLib.checkHistoryFiles(envDict['MODELCASE_INPUT_TSERIES'], envDict['DOUT_S_ROOT'], 
                                               envDict['CASE'], envDict['TSERIES_YEAR0'], 
                                               envDict['TSERIES_YEAR1'], 'ocn', suffix, file_pattern,
                                               envDict['MODELCASE_SUBDIR'])
            debugMsg('timeseries years after checkHistoryFiles {0} - {1}'.format(envDict['TSERIES_YEAR0'], envDict['TSERIES_YEAR1']), header=True)
            envDict['TSERIES_YEAR0'] = tseries_start_year
            envDict['TSERIES_YEAR1'] = tseries_stop_year

        main_comm.sync()
        tseries = True
        envDict = main_comm.partition(data=envDict, func=partition.Duplicate(), involved=True)
        main_comm.sync()

    try:
        if main_comm.is_manager():
            debugMsg('calling createClimFiles for model and timeseries', header=True)

        createClimFiles(envDict['YEAR0'], envDict['YEAR1'], envDict['in_dir'],
                        envDict['htype'], envDict['TAVGDIR'], envDict['CASE'], 
                        tseries, envDict['MODEL_VARLIST'], envDict['TSERIES_YEAR0'], 
                        envDict['TSERIES_YEAR1'], envDict['DIAGOBSROOT'], 
                        envDict['netcdf_format'], int(envDict['VERTICAL']), 
                        envDict['TIMESERIES_OBSPATH'], main_comm, debugMsg)
    except Exception as error:
        print(str(error))
        traceback.print_exc()
        sys.exit(1)

    main_comm.sync()

    # check that the necessary control climotology files exist
    if envDict['MODEL_VS_CONTROL'].upper() == 'TRUE':

        if main_comm.is_manager():
            debugMsg('calling checkHistoryFiles for control case', header=True)
            suffix = 'pop.h.*.nc'
            file_pattern = '.*\.pop\.h\.\d{4,4}-\d{2,2}\.nc'
            start_year, stop_year, in_dir, htype, firstHistoryFile = diagUtilsLib.checkHistoryFiles(
                envDict['CNTRLCASE_INPUT_TSERIES'], envDict['CNTRLCASEDIR'], envDict['CNTRLCASE'], 
                envDict['CNTRLYEAR0'], envDict['CNTRLYEAR1'], 'ocn', suffix, file_pattern,
                envDict['CNTRLCASE_SUBDIR'])
            envDict['CNTRLYEAR0'] = start_year
            envDict['CNTRLYEAR1'] = stop_year
            envDict['cntrl_in_dir'] = in_dir
            envDict['cntrl_htype'] = htype

        main_comm.sync()
        envDict = main_comm.partition(data=envDict, func=partition.Duplicate(), involved=True)
        main_comm.sync()

        if main_comm.is_manager():
            debugMsg('before createClimFiles call for control', header=True)
            debugMsg('...CNTRLYEAR0 = {0}'.format(envDict['CNTRLYEAR0']), header=True)
            debugMsg('...CNTRLYEAR1 = {0}'.format(envDict['CNTRLYEAR1']), header=True)
            debugMsg('...cntrl_in_dir = {0}'.format(envDict['cntrl_in_dir']), header=True)
            debugMsg('...cntrl_htype = {0}'.format(envDict['cntrl_htype']), header=True)
            debugMsg('...CNTRLTAVGDIR = {0}'.format(envDict['CNTRLTAVGDIR']), header=True)
            debugMsg('...CNTRLCASE = {0}'.format(envDict['CNTRLCASE']), header=True)
            debugMsg('...CNTRLCASE_INPUT_TSERIES = {0}'.format(envDict['CNTRLCASE_INPUT_TSERIES']), header=True)
            debugMsg('...varlist = {0}'.format(envDict['CNTRL_VARLIST']), header=True)
            debugMsg('calling createClimFiles for control', header=True)
        
        # don't create timeseries averages for the control case so set to False and set the
        # tseries_start_year and tseries_stop_year to 0
        try:
            createClimFiles(envDict['CNTRLYEAR0'], envDict['CNTRLYEAR1'], envDict['cntrl_in_dir'],
                            envDict['cntrl_htype'], envDict['CNTRLTAVGDIR'], envDict['CNTRLCASE'], 
                            False, envDict['CNTRL_VARLIST'], 0, 0, envDict['DIAGOBSROOT'],
                            envDict['netcdf_format'], int(envDict['VERTICAL']), 
                            envDict['TIMESERIES_OBSPATH'], main_comm, debugMsg)
        except Exception as error:
            print(str(error))
            traceback.print_exc()
            sys.exit(1)
def main(options, main_comm, debugMsg):
    """setup the environment for running the pyAverager in parallel. 

    Arguments:
    options (object) - command line options
    main_comm (object) communicator object
    debugMsg (object) - vprinter object for printing debugging messages

    The env_diags_atm.xml configuration file defines the way the diagnostics are generated. 
    See (website URL here...) for a complete desciption of the env_diags_atm XML options.
    """

    # initialize the environment dictionary
    envDict = dict()

    # CASEROOT is given on the command line as required option --caseroot
    caseroot = options.caseroot[0]
    if main_comm.is_manager():
        debugMsg('caseroot = {0}'.format(caseroot), header=True)
        debugMsg('calling initialize_envDict', header=True)

    envDict = initialize_envDict(envDict, caseroot, debugMsg,
                                 options.standalone)

    main_comm.sync()
    # specify variables to include in the averages, empty list implies get them all
    varList = []

    # get model history file information from the DOUT_S_ROOT archive location
    if main_comm.is_manager():
        debugMsg('calling checkHistoryFiles for control run', header=True)

    test_time_series = envDict['TEST_TIMESERIES']

    test_end_year = (int(envDict['test_first_yr']) +
                     int(envDict['test_nyrs'])) - 1
    suffix = envDict['test_modelstream'] + '.*.nc'
    filep = '.*\.' + envDict['test_modelstream'] + '.\d{4,4}-\d{2,2}\.nc'
    start_year, stop_year, in_dir, envDict['test_htype'],  envDict['test_key_infile'] = \
        diagUtilsLib.checkHistoryFiles(test_time_series, envDict['test_path_history'],
                                       envDict['test_casename'], envDict['test_first_yr'], test_end_year,
                                       'atm',suffix,filep,envDict['test_path_history_subdir'])

    if envDict['test_compute_climo'] == 'True':
        try:
            h_path = envDict['test_path_history'] + '/atm/' + envDict[
                'test_path_history_subdir']

            # generate the climatology files used for all plotting types using the pyAverager
            if main_comm.is_manager():
                debugMsg('calling createClimFiles', header=True)

            createClimFiles(envDict['test_first_yr'], test_end_year, h_path,
                            envDict['test_htype'], envDict['test_key_infile'],
                            envDict['test_path_climo'],
                            envDict['test_casename'],
                            envDict['test_modelstream'], varList, envDict,
                            main_comm, debugMsg)
        except Exception as error:
            print(str(error))
            traceback.print_exc()
            sys.exit(1)

    if (envDict['MODEL_VS_MODEL'] == 'True'
            and envDict['cntl_compute_climo'] == 'True'):
        try:
            cntl_time_series = envDict['CNTL_TIMESERIES']
            cntl_end_year = (int(envDict['cntl_first_yr']) +
                             int(envDict['cntl_nyrs'])) - 1
            suffix = envDict['cntl_modelstream'] + '.*.nc'
            filep = '.*\.' + envDict[
                'cntl_modelstream'] + '.\d{4,4}-\d{2,2}\.nc'
            start_year, stop_year, in_dir, envDict['cntl_htype'],  envDict['cntl_key_infile'] = \
                diagUtilsLib.checkHistoryFiles(cntl_time_series, envDict['cntl_path_history'],
                                               envDict['cntl_casename'], envDict['cntl_first_yr'],
                                               cntl_end_year,'atm',suffix,filep,
                                               envDict['cntl_path_history_subdir'])

            h_path = envDict['cntl_path_history'] + '/atm/' + envDict[
                'cntl_path_history_subdir']

            # generate the climatology files used for all plotting types using the pyAverager
            debugMsg('calling createClimFiles', header=True)

            createClimFiles(envDict['cntl_first_yr'], cntl_end_year, h_path,
                            envDict['cntl_htype'], envDict['cntl_key_infile'],
                            envDict['cntl_path_climo'],
                            envDict['cntl_casename'],
                            envDict['cntl_modelstream'], varList, envDict,
                            main_comm, debugMsg)
        except Exception as error:
            print(str(error))
            traceback.print_exc()
            sys.exit(1)
Ejemplo n.º 4
0
def main(options, main_comm, debugMsg):
    """setup the environment for running the pyAverager in parallel. 

    Arguments:
    options (object) - command line options
    main_comm (object) communicator object
    debugMsg (object) - vprinter object for printing debugging messages

    The env_diags_atm.xml configuration file defines the way the diagnostics are generated. 
    See (website URL here...) for a complete desciption of the env_diags_atm XML options.
    """

    # initialize the environment dictionary
    envDict = dict()

    # CASEROOT is given on the command line as required option --caseroot
    caseroot = options.caseroot[0]
    if main_comm.is_manager():
        debugMsg('caseroot = {0}'.format(caseroot), header=True)
        debugMsg('calling initialize_envDict', header=True)

    envDict = initialize_envDict(envDict, caseroot, debugMsg, options.standalone)

    main_comm.sync()
    # specify variables to include in the averages, empty list implies get them all
    varList = []

    # get model history file information from the DOUT_S_ROOT archive location
    if main_comm.is_manager():
        debugMsg('calling checkHistoryFiles for control run', header=True)

    test_time_series = envDict['TEST_TIMESERIES']

    test_end_year = (int(envDict['test_first_yr']) + int(envDict['test_nyrs'])) - 1
    suffix = envDict['test_modelstream']+'.*.nc'
    filep = '.*\.'+ envDict['test_modelstream']+'.\d{4,4}-\d{2,2}\.nc'
    start_year, stop_year, in_dir, envDict['test_htype'],  envDict['test_key_infile'] = \
        diagUtilsLib.checkHistoryFiles(test_time_series, envDict['test_path_history'], 
                                       envDict['test_casename'], envDict['test_first_yr'], test_end_year,
                                       'atm',suffix,filep,envDict['test_path_history_subdir'])

    if envDict['test_compute_climo'] == 'True':
        try:
            h_path = envDict['test_path_history']+'/atm/'+envDict['test_path_history_subdir']

            # generate the climatology files used for all plotting types using the pyAverager
            if main_comm.is_manager():
                debugMsg('calling createClimFiles', header=True)

            createClimFiles(envDict['test_first_yr'], test_end_year, h_path,
                            envDict['test_htype'], envDict['test_key_infile'], 
                            envDict['test_path_climo'], envDict['test_casename'], 
                            envDict['test_modelstream'], varList, envDict, main_comm, debugMsg)
        except Exception as error:
            print(str(error))
            traceback.print_exc()
            sys.exit(1)

    if (envDict['MODEL_VS_MODEL'] == 'True' and envDict['cntl_compute_climo'] == 'True'):
        try:
            cntl_time_series = envDict['CNTL_TIMESERIES']
            cntl_end_year = (int(envDict['cntl_first_yr']) + int(envDict['cntl_nyrs'])) - 1
            suffix = envDict['cntl_modelstream']+'.*.nc'
            filep = '.*\.'+ envDict['cntl_modelstream']+'.\d{4,4}-\d{2,2}\.nc'
            start_year, stop_year, in_dir, envDict['cntl_htype'],  envDict['cntl_key_infile'] = \
                diagUtilsLib.checkHistoryFiles(cntl_time_series, envDict['cntl_path_history'], 
                                               envDict['cntl_casename'], envDict['cntl_first_yr'], 
                                               cntl_end_year,'atm',suffix,filep,
                                               envDict['cntl_path_history_subdir'])

            h_path = envDict['cntl_path_history']+'/atm/'+envDict['cntl_path_history_subdir']
 
            # generate the climatology files used for all plotting types using the pyAverager
            debugMsg('calling createClimFiles', header=True)

            createClimFiles(envDict['cntl_first_yr'], cntl_end_year, h_path,
                            envDict['cntl_htype'], envDict['cntl_key_infile'], 
                            envDict['cntl_path_climo'], envDict['cntl_casename'], 
                            envDict['cntl_modelstream'], varList, envDict, main_comm, debugMsg)
        except Exception as error:
            print(str(error))
            traceback.print_exc()
            sys.exit(1)
Ejemplo n.º 5
0
def main(options, main_comm, debugMsg):
    """setup the environment for running the pyAverager in parallel. 

    Arguments:
    options (object) - command line options
    main_comm (object) communicator object
    debugMsg (object) - vprinter object for printing debugging messages

    The env_diags_lnd.xml configuration file defines the way the diagnostics are generated. 
    See (website URL here...) for a complete desciption of the env_diags_lnd XML options.
    """

    # initialize the environment dictionary
    envDict = dict()

    # CASEROOT is given on the command line as required option --caseroot
    caseroot = options.caseroot[0]
    if main_comm.is_manager():
        debugMsg('caseroot = {0}'.format(caseroot), header=True)
        debugMsg('calling initialize_envDict', header=True)

    envDict = initialize_envDict(envDict, caseroot, debugMsg, options.standalone, main_comm)

    # specify variables to include in the averages, empty list implies get them all
    varList = []

    # generate the climatology files used for all plotting types using the pyAverager
    if main_comm.is_manager():
        debugMsg('calling createClimFiles', header=True)

    # get model history file information from the DOUT_S_ROOT archive location
    case1_time_series = envDict['CASE1_TIMESERIES']

    models = ['lnd', 'atm', 'rtm']

    for model in models:
        if envDict['climo_'+model+'_1'].lower() == 'true' or envDict['trends_'+model+'_1'].lower() == 'true':
            if main_comm.is_manager():
                debugMsg('Computing averages for model vs. obs',header=True)
            m_dir = model
            if 'rtm' in model:
                m_dir = 'rof'
            
            try:
                suffix = envDict[model+'_modelstream_1']
                filep = '.*\.'+suffix+'.\d{4,4}-\d{2,2}\.nc'
                envDict['clim_last_yr_1'] = (int(envDict['clim_first_yr_1']) + int(envDict['clim_num_yrs_1'])) -1  
                envDict['trends_last_yr_1'] = (int(envDict['trends_first_yr_1']) + int(envDict['trends_num_yrs_1'])) -1

                # Check the history files for climos date range
                if main_comm.is_manager():
                    debugMsg('calling checkHistoryFiles for filep = {0}, {1}, {2}'.format(filep, envDict['clim_first_yr_1'],envDict['clim_last_yr_1'] ), header=True)
                    debugMsg('        SOURCE_1 = {0}, caseid_1 = {1}'.format(envDict['SOURCE_1'], envDict['caseid_1']), header=True)

                start_year, stop_year, in_dir, envDict['case1_htype'],  envDict['case1_key_infile'] = \
                    diagUtilsLib.checkHistoryFiles(case1_time_series, envDict['SOURCE_1'], envDict['caseid_1'], 
                                                   envDict['clim_first_yr_1'], envDict['clim_last_yr_1'],
                                                   m_dir,suffix,filep, envDict['SOURCE_1_SUBDIR'])

                # Check the history files for trends date range
                if main_comm.is_manager():
                    debugMsg('calling checkHistoryFiles for filep = {0}, {1}, {2}'.format(filep, envDict['clim_first_yr_1'],envDict['clim_last_yr_1'] ), header=True)
                    debugMsg('SOURCE_1 = {0}, caseid_1 = {1}'.format(envDict['SOURCE_1'], envDict['caseid_1']), header=True)

                start_year, stop_year, in_dir, envDict['case1_htype'],  envDict['case1_key_infile'] = \
                    diagUtilsLib.checkHistoryFiles(case1_time_series, envDict['SOURCE_1'], 
                                                   envDict['caseid_1'], envDict['trends_first_yr_1'], 
                                                   envDict['trends_last_yr_1'],
                                                   m_dir,suffix,filep,envDict['SOURCE_1_SUBDIR'])
            except Exception as error:
                print(str(error))
                traceback.print_exc()
                sys.exit(1)

            try:
                h_path = envDict['SOURCE_1']+'/'+m_dir+envDict['SOURCE_1_SUBDIR']
                if case1_time_series.lower() == 'true':
                    if main_comm.is_manager():
                        debugMsg('Computing averages for model vs. obs using variable time series',header=True)
##                    h_path = envDict['SOURCE_1']+'/'+m_dir+'/proc/tseries/month_1/'
##                else:
##                    h_path = envDict['SOURCE_1']+'/'+m_dir+'/hist/'

                case1_climo_dir =  envDict['PTMPDIR_1']+'/climo/'+ envDict['caseid_1']+'/' 
 
                createClimFiles(envDict['clim_first_yr_1'], envDict['clim_last_yr_1'], h_path, 
                                envDict['case1_htype'], envDict['case1_key_infile'], case1_climo_dir, 
                                envDict['caseid_1'], suffix, varList, envDict, 
                                envDict['trends_first_yr_1'], envDict['trends_last_yr_1'],
                                envDict['climo_'+model+'_1'], envDict['trends_'+model+'_1'], model, 
                                envDict['netcdf_format'], main_comm, debugMsg)
            except Exception as error:
                print(str(error))
                traceback.print_exc()
                sys.exit(1)

    if envDict['MODEL_VS_MODEL'].lower() == 'true':
        for model in models:
            if envDict['climo_'+model+'_2'].lower() == 'true' or envDict['trends_'+model+'_2'].lower() == 'true':
                if main_comm.is_manager():
                    debugMsg('Computing averages for model vs. model',header=True)
                m_dir = model
                if 'rtm' in model:
                    m_dir = 'rof'

                try:
                    diff_time_series = envDict['CASE2_TIMESERIES']
                    suffix = envDict[model+'_modelstream_2']
                    filep = '.*\.'+suffix+'.\d{4,4}-\d{2,2}\.nc'
                    envDict['clim_last_yr_2'] = (int(envDict['clim_first_yr_2']) + int(envDict['clim_num_yrs_2'])) - 1
                    envDict['trends_last_yr_2'] = (int(envDict['trends_first_yr_2']) + int(envDict['trends_num_yrs_2'])) - 1

                    # Check the history files for climo date range
                    if main_comm.is_manager():
                        debugMsg('calling checkHistoryFiles for filep = {0}, {1}, {2}'.format(filep, envDict['clim_first_yr_2'],envDict['clim_last_yr_2'] ), header=True)
                        debugMsg('SOURCE_2 = {0}, caseid_2 = {1}'.format(envDict['SOURCE_2'], envDict['caseid_2']), header=True)

                    start_year, stop_year, in_dir, envDict['case2_htype'],  envDict['case2_key_infile'] = \
                        diagUtilsLib.checkHistoryFiles(diff_time_series, envDict['SOURCE_2'], 
                                                       envDict['caseid_2'], envDict['clim_first_yr_2'], 
                                                       envDict['clim_last_yr_2'],
                                                       m_dir,suffix,filep,envDict['SOURCE_2_SUBDIR'])

                    # Check the history files for trends date range
                    if main_comm.is_manager():
                        debugMsg('calling checkHistoryFiles for filep = {0}, {1}, {2}'.format(filep, envDict['clim_first_yr_2'],envDict['clim_last_yr_2'] ), header=True)
                        debugMsg('SOURCE_2 = {0}, caseid_2 = {1}'.format(envDict['SOURCE_2'], envDict['caseid_2']), header=True)

                    start_year, stop_year, in_dir, envDict['case2_htype'], envDict['case2_key_infile'] = \
                    diagUtilsLib.checkHistoryFiles(diff_time_series, envDict['SOURCE_2'], 
                                                   envDict['caseid_2'], envDict['trends_first_yr_2'], 
                                                   envDict['trends_last_yr_2'],
                                                   m_dir,suffix,filep,envDict['SOURCE_2_SUBDIR'])

                    h_path = envDict['SOURCE_2']+'/'+m_dir+envDict['SOURCE_2_SUBDIR']
                    if diff_time_series.lower() == 'true':
                        if main_comm.is_manager():
                            debugMsg('Computing averages for model vs. model using variable time series',header=True)
##                        h_path = envDict['SOURCE_2']+'/'+m_dir+'/proc/tseries/month_1/'
##                    else:
##                        h_path = envDict['SOURCE_2']+'/'+m_dir+'/hist/'

                    case2_climo_dir =  envDict['PTMPDIR_2']+'/climo/'+ envDict['caseid_2']+'/'

                    createClimFiles(envDict['clim_first_yr_2'], envDict['clim_last_yr_2'], h_path,
                                    envDict['case2_htype'], envDict['case2_key_infile'], case2_climo_dir, 
                                    envDict['caseid_2'], suffix, varList, envDict, 
                                    envDict['trends_first_yr_2'], envDict['trends_last_yr_2'], 
                                    envDict['climo_'+model+'_2'], envDict['trends_'+model+'_2'], model, 
                                    envDict['netcdf_format'], main_comm, debugMsg)
                except Exception as error:
                    print(str(error))
                    traceback.print_exc()
                    sys.exit(1)
Ejemplo n.º 6
0
def main(options, main_comm, debugMsg):
    """setup the environment for running the pyAverager in parallel. 

    Arguments:
    options (object) - command line options
    main_comm (object) communicator object
    debugMsg (object) - vprinter object for printing debugging messages

    The env_diags_lnd.xml configuration file defines the way the diagnostics are generated. 
    See (website URL here...) for a complete desciption of the env_diags_lnd XML options.
    """

    # initialize the environment dictionary
    envDict = dict()

    # CASEROOT is given on the command line as required option --caseroot
    caseroot = options.caseroot[0]
    if main_comm.is_manager():
        debugMsg('caseroot = {0}'.format(caseroot), header=True)
        debugMsg('calling initialize_envDict', header=True)

    envDict = initialize_envDict(envDict, caseroot, debugMsg,
                                 options.standalone, main_comm)

    # specify variables to include in the averages, empty list implies get them all
    varList = []

    # generate the climatology files used for all plotting types using the pyAverager
    if main_comm.is_manager():
        debugMsg('calling createClimFiles', header=True)

    # get model history file information from the DOUT_S_ROOT archive location
    case1_time_series = envDict['CASE1_TIMESERIES']

    models = ['lnd', 'atm', 'rtm']

    for model in models:
        if envDict['climo_' + model +
                   '_1'].lower() == 'true' or envDict['trends_' + model +
                                                      '_1'].lower() == 'true':
            if main_comm.is_manager():
                debugMsg('Computing averages for model vs. obs', header=True)
            m_dir = model
            if 'rtm' in model:
                m_dir = 'rof'

            try:
                suffix = envDict[model + '_modelstream_1']
                filep = '.*\.' + suffix + '.\d{4,4}-\d{2,2}\.nc'
                envDict['clim_last_yr_1'] = (
                    int(envDict['clim_first_yr_1']) +
                    int(envDict['clim_num_yrs_1'])) - 1
                envDict['trends_last_yr_1'] = (
                    int(envDict['trends_first_yr_1']) +
                    int(envDict['trends_num_yrs_1'])) - 1

                # Check the history files for climos date range
                if main_comm.is_manager():
                    debugMsg(
                        'calling checkHistoryFiles for filep = {0}, {1}, {2}'.
                        format(filep, envDict['clim_first_yr_1'],
                               envDict['clim_last_yr_1']),
                        header=True)
                    debugMsg('        SOURCE_1 = {0}, caseid_1 = {1}'.format(
                        envDict['SOURCE_1'], envDict['caseid_1']),
                             header=True)

                start_year, stop_year, in_dir, envDict['case1_htype'], envDict[
                    'case1_key_infile'] = diagUtilsLib.checkHistoryFiles(
                        case1_time_series, envDict['SOURCE_1'],
                        envDict['caseid_1'], envDict['clim_first_yr_1'],
                        envDict['clim_last_yr_1'], m_dir, suffix, filep)

                # Check the history files for trends date range
                if main_comm.is_manager():
                    debugMsg(
                        'calling checkHistoryFiles for filep = {0}, {1}, {2}'.
                        format(filep, envDict['clim_first_yr_1'],
                               envDict['clim_last_yr_1']),
                        header=True)
                    debugMsg('        SOURCE_1 = {0}, caseid_1 = {1}'.format(
                        envDict['SOURCE_1'], envDict['caseid_1']),
                             header=True)

                start_year, stop_year, in_dir, envDict['case1_htype'], envDict[
                    'case1_key_infile'] = diagUtilsLib.checkHistoryFiles(
                        case1_time_series, envDict['SOURCE_1'],
                        envDict['caseid_1'], envDict['trends_first_yr_1'],
                        envDict['trends_last_yr_1'], m_dir, suffix, filep)
            except Exception as error:
                print(str(error))
                traceback.print_exc()
                sys.exit(1)

            try:
                if case1_time_series.lower() == 'true':
                    if main_comm.is_manager():
                        debugMsg(
                            'Computing averages for model vs. obs using variable time series',
                            header=True)
                    h_path = envDict[
                        'SOURCE_1'] + '/' + m_dir + '/proc/tseries/monthly/'
                else:
                    h_path = envDict['SOURCE_1'] + '/' + m_dir + '/hist/'

                case1_climo_dir = envDict['PTMPDIR_1'] + '/climo/' + envDict[
                    'caseid_1'] + '/'

                createClimFiles(envDict['clim_first_yr_1'],
                                envDict['clim_last_yr_1'], h_path,
                                envDict['case1_htype'],
                                envDict['case1_key_infile'], case1_climo_dir,
                                envDict['caseid_1'], suffix, varList, envDict,
                                envDict['trends_first_yr_1'],
                                envDict['trends_last_yr_1'],
                                envDict['climo_' + model + '_1'],
                                envDict['trends_' + model + '_1'], model,
                                main_comm, debugMsg)
            except Exception as error:
                print(str(error))
                traceback.print_exc()
                sys.exit(1)

    if envDict['MODEL_VS_MODEL'].lower() == 'true':
        for model in models:
            if envDict['climo_' + model + '_2'].lower() == 'true' or envDict[
                    'trends_' + model + '_2'].lower() == 'true':
                if main_comm.is_manager():
                    debugMsg('Computing averages for model vs. model',
                             header=True)
                m_dir = model
                if 'rtm' in model:
                    m_dir = 'rof'

                try:
                    diff_time_series = envDict['CASE2_TIMESERIES']
                    suffix = envDict[model + '_modelstream_2']
                    filep = '.*\.' + suffix + '.\d{4,4}-\d{2,2}\.nc'
                    envDict['clim_last_yr_2'] = (
                        int(envDict['clim_first_yr_2']) +
                        int(envDict['clim_num_yrs_2'])) - 1
                    envDict['trends_last_yr_2'] = (
                        int(envDict['trends_first_yr_2']) +
                        int(envDict['trends_num_yrs_2'])) - 1

                    # Check the history files for climo date range
                    if main_comm.is_manager():
                        debugMsg(
                            'calling checkHistoryFiles for filep = {0}, {1}, {2}'
                            .format(filep, envDict['clim_first_yr_2'],
                                    envDict['clim_last_yr_2']),
                            header=True)
                        debugMsg(
                            '        SOURCE_2 = {0}, caseid_2 = {1}'.format(
                                envDict['SOURCE_2'], envDict['caseid_2']),
                            header=True)

                    start_year, stop_year, in_dir, envDict[
                        'case2_htype'], envDict[
                            'case2_key_infile'] = diagUtilsLib.checkHistoryFiles(
                                diff_time_series, envDict['SOURCE_2'],
                                envDict['caseid_2'],
                                envDict['clim_first_yr_2'],
                                envDict['clim_last_yr_2'], m_dir, suffix,
                                filep)

                    # Check the history files for trends date range
                    if main_comm.is_manager():
                        debugMsg(
                            'calling checkHistoryFiles for filep = {0}, {1}, {2}'
                            .format(filep, envDict['clim_first_yr_2'],
                                    envDict['clim_last_yr_2']),
                            header=True)
                        debugMsg(
                            '        SOURCE_2 = {0}, caseid_2 = {1}'.format(
                                envDict['SOURCE_2'], envDict['caseid_2']),
                            header=True)

                    start_year, stop_year, in_dir, envDict[
                        'case2_htype'], envDict[
                            'case2_key_infile'] = diagUtilsLib.checkHistoryFiles(
                                diff_time_series, envDict['SOURCE_2'],
                                envDict['caseid_2'],
                                envDict['trends_first_yr_2'],
                                envDict['trends_last_yr_2'], m_dir, suffix,
                                filep)

                    if diff_time_series.lower() == 'true':
                        if main_comm.is_manager():
                            debugMsg(
                                'Computing averages for model vs.model using variable time series',
                                header=True)
                        h_path = envDict[
                            'SOURCE_2'] + '/' + m_dir + '/proc/tseries/monthly/'
                    else:
                        h_path = envDict['SOURCE_2'] + '/' + m_dir + '/hist/'

                    case2_climo_dir = envDict[
                        'PTMPDIR_2'] + '/climo/' + envDict['caseid_2'] + '/'

                    createClimFiles(
                        envDict['clim_first_yr_2'], envDict['clim_last_yr_2'],
                        h_path, envDict['case2_htype'],
                        envDict['case2_key_infile'], case2_climo_dir,
                        envDict['caseid_2'], suffix, varList, envDict,
                        envDict['trends_first_yr_2'],
                        envDict['trends_last_yr_2'],
                        envDict['climo_' + model + '_2'],
                        envDict['trends_' + model + '_2'], model, main_comm,
                        debugMsg)
                except Exception as error:
                    print(str(error))
                    traceback.print_exc()
                    sys.exit(1)