diff --git a/driver-mct/cime_config/buildnml b/driver-mct/cime_config/buildnml index cd38fcf06267..1b2c785a2714 100755 --- a/driver-mct/cime_config/buildnml +++ b/driver-mct/cime_config/buildnml @@ -144,20 +144,8 @@ def _create_drv_namelists(case, infile, confdir, nmlgen, files): # Set up the pause_component_list if pause is active pauseo = case.get_value('PAUSE_OPTION') - if pauseo != 'never' and pauseo != 'none': + if pauseo is not None and pauseo != 'never' and pauseo != 'none': pausen = case.get_value('PAUSE_N') - pcl = nmlgen.get_default('pause_component_list') - nmlgen.add_default('pause_component_list', pcl) - # Check to make sure pause_component_list is valid - pcl = nmlgen.get_value('pause_component_list') - if pcl != 'none' and pcl != 'all': - pause_comps = pcl.split(':') - comp_classes = case.get_values("COMP_CLASSES") - for comp in pause_comps: - expect(comp == 'drv' or comp.upper() in comp_classes, - "Invalid PAUSE_COMPONENT_LIST, {} is not a valid component type".format(comp)) - # End for - # End if # Set esp interval if 'nstep' in pauseo: esp_time = mindt diff --git a/driver-mct/cime_config/config_component.xml b/driver-mct/cime_config/config_component.xml index 5d8fa5410f6c..1e784dbecdcf 100644 --- a/driver-mct/cime_config/config_component.xml +++ b/driver-mct/cime_config/config_component.xml @@ -381,21 +381,6 @@ - - char - none - - cpl - - run_begin_stop_restart - env_run.xml - - A colon-separated list of components to receive pause and resume signals - A value of 'all' means all components will pause and resume - A value of 'none' means that no components will pause or resume - - - char 1 @@ -424,13 +409,13 @@ run_begin_stop_restart env_run.xml - ESP component runs after driver 'pause cycle' - If any component 'pauses' (see PAUSE_OPTION, PAUSE_N and - PAUSE_COMPONENT_LIST XML variables), the ESP component (if - present) will be run to process the component 'pause' (restart) - files and set any required 'resume' signals. - If true, esp_cpl_dt and esp_cpl_offset settings are ignored. - default: false + ESP component runs after driver 'pause cycle' If any component + 'pauses' (see PAUSE_OPTION, + PAUSE_N and DATA_ASSIMILATION XML variables), + the ESP component (if present) will be run to process the + component 'pause' (restart) files and set any required 'resume' + signals. If true, esp_cpl_dt and esp_cpl_offset settings are + ignored. default: false @@ -2583,11 +2568,21 @@ logical TRUE,FALSE - FALSE external_tools env_run.xml Run the external tool pointed to by DATA_ASSIMILATION_SCRIPT after the model run completes + + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + + integer diff --git a/driver-mct/cime_config/config_compsets.xml b/driver-mct/cime_config/config_compsets.xml index 30439b457778..ff91128e9dbf 100644 --- a/driver-mct/cime_config/config_compsets.xml +++ b/driver-mct/cime_config/config_compsets.xml @@ -100,4 +100,11 @@ 2000_XATM_XLND_XICE_XOCN_XROF_XGLC_XWAV + + + + TRUE + + + diff --git a/driver-mct/cime_config/namelist_definition_drv.xml b/driver-mct/cime_config/namelist_definition_drv.xml index 083b03fda4f4..8c2675cfa2ac 100644 --- a/driver-mct/cime_config/namelist_definition_drv.xml +++ b/driver-mct/cime_config/namelist_definition_drv.xml @@ -1643,13 +1643,13 @@ time seq_timemgr_inparm - true => ESP component runs after driver 'pause cycle' - If any component 'pauses' (see PAUSE_OPTION, PAUSE_N and - PAUSE_COMPONENT_LIST XML variables), the ESP component (if - present) will be run to process the component 'pause' (restart) - files and set any required 'resume' signals. - If true, esp_cpl_dt and esp_cpl_offset settings are ignored. - default: true + true => ESP component runs after driver 'pause cycle' If any + component 'pauses' (see PAUSE_OPTION, + PAUSE_N and DATA_ASSIMILATION_XXX XML + variables), the ESP component (if present) will be run to + process the component 'pause' (restart) files and set any + required 'resume' signals. If true, esp_cpl_dt and + esp_cpl_offset settings are ignored. default: true .true. @@ -2059,20 +2059,6 @@ - - char - time - seq_timemgr_inparm - - A colon-separated list of component types (e.g., ocn,atm) to receive a - resume signal after a pause has happened. Special values "all" or "none" - may be used in place of a list - - - $PAUSE_COMPONENT_LIST - - - char driver @@ -3934,4 +3920,100 @@ + + logical + data_assimilation + seq_timemgr_inparm + + Whether Data Assimilation is on for component atm + + + $DATA_ASSIMILATION_ATM + + + + + logical + data_assimilation + seq_timemgr_inparm + + Whether Data Assimilation is on for component CPL + + + $DATA_ASSIMILATION_CPL + + + + + logical + data_assimilation + seq_timemgr_inparm + + Whether Data Assimilation is on for component ocn + + + $DATA_ASSIMILATION_OCN + + + + + logical + data_assimilation + seq_timemgr_inparm + + Whether Data Assimilation is on for component wav + + + $DATA_ASSIMILATION_WAV + + + + + logical + data_assimilation + seq_timemgr_inparm + + Whether Data Assimilation is on for component glc + + + $DATA_ASSIMILATION_GLC + + + + + logical + data_assimilation + seq_timemgr_inparm + + Whether Data Assimilation is on for component rof + + + $DATA_ASSIMILATION_ROF + + + + + logical + data_assimilation + seq_timemgr_inparm + + Whether Data Assimilation is on for component ice + + + $DATA_ASSIMILATION_ICE + + + + + logical + data_assimilation + seq_timemgr_inparm + + Whether Data Assimilation is on for component lnd + + + $DATA_ASSIMILATION_LND + + + diff --git a/driver-mct/shr/seq_infodata_mod.F90 b/driver-mct/shr/seq_infodata_mod.F90 index 0136e3df2533..9a9421b54150 100644 --- a/driver-mct/shr/seq_infodata_mod.F90 +++ b/driver-mct/shr/seq_infodata_mod.F90 @@ -18,7 +18,7 @@ ! !REVISION HISTORY: ! 2005-Nov-11 - E. Kluzek - creation of shr_inputinfo_mod ! 2007-Nov-15 - T. Craig - refactor for ccsm4 system and move to seq_infodata_mod -! 2016-Dec-08 - R. Montuoro - updated for multiple coupler instances +! 2016-Dec-08 - R. Montuoro - updated for multiple driver instances ! ! !INTERFACE: ------------------------------------------------------------------ diff --git a/driver-mct/shr/seq_timemgr_mod.F90 b/driver-mct/shr/seq_timemgr_mod.F90 index 9d1acbecb132..59d9286b31a1 100644 --- a/driver-mct/shr/seq_timemgr_mod.F90 +++ b/driver-mct/shr/seq_timemgr_mod.F90 @@ -306,7 +306,16 @@ subroutine seq_timemgr_clockInit(SyncClock, nmlfile, restart, restart_file, pioi integer(SHR_KIND_IN) :: restart_ymd ! Restart date (YYYYMMDD) character(SHR_KIND_CS) :: pause_option ! Pause option units integer(SHR_KIND_IN) :: pause_n ! Number between pause intervals - character(SHR_KIND_CS) :: pause_component_list ! Pause - resume components + + logical :: data_assimilation_atm + logical :: data_assimilation_cpl + logical :: data_assimilation_ocn + logical :: data_assimilation_wav + logical :: data_assimilation_glc + logical :: data_assimilation_ice + logical :: data_assimilation_rof + logical :: data_assimilation_lnd + character(SHR_KIND_CS) :: history_option ! History option units integer(SHR_KIND_IN) :: history_n ! Number until history interval integer(SHR_KIND_IN) :: history_ymd ! History date (YYYYMMDD) @@ -353,7 +362,16 @@ subroutine seq_timemgr_clockInit(SyncClock, nmlfile, restart, restart_file, pioi namelist /seq_timemgr_inparm/ calendar, curr_ymd, curr_tod, & stop_option, stop_n, stop_ymd, stop_tod, & restart_option, restart_n, restart_ymd, & - pause_option, pause_n, pause_component_list, & + pause_option, & + pause_n, & + data_assimilation_atm, & + data_assimilation_cpl, & + data_assimilation_ocn, & + data_assimilation_wav, & + data_assimilation_glc, & + data_assimilation_ice, & + data_assimilation_rof, & + data_assimilation_lnd, & history_option, history_n, history_ymd, & histavg_option, histavg_n, histavg_ymd, & barrier_option, barrier_n, barrier_ymd, & @@ -399,7 +417,15 @@ subroutine seq_timemgr_clockInit(SyncClock, nmlfile, restart, restart_file, pioi restart_ymd = -1 pause_option = seq_timemgr_optNever pause_n = -1 - pause_component_list = ' ' + data_assimilation_atm = .false. + data_assimilation_cpl = .false. + data_assimilation_ocn = .false. + data_assimilation_wav = .false. + data_assimilation_glc = .false. + data_assimilation_ice = .false. + data_assimilation_rof = .false. + data_assimilation_lnd = .false. + history_option = seq_timemgr_optNever history_n = -1 history_ymd = -1 @@ -541,9 +567,10 @@ subroutine seq_timemgr_clockInit(SyncClock, nmlfile, restart, restart_file, pioi write(logunit,F0I) trim(subname),' restart_n = ',restart_n write(logunit,F0I) trim(subname),' restart_ymd = ',restart_ymd write(logunit,F0L) trim(subname),' end_restart = ',end_restart - write(logunit,F0A) trim(subname),' pause_option = ',trim(pause_option) - write(logunit,F0I) trim(subname),' pause_n = ',pause_n - write(logunit,F0A) trim(subname),' pause_component_list = ',trim(pause_component_list) + write(logunit,F0A) trim(subname),' pause_option = ',& + trim(pause_option) + write(logunit,F0I) trim(subname),' pause_n = ',& + pause_n write(logunit,F0L) trim(subname),' esp_run_on_pause = ',esp_run_on_pause write(logunit,F0A) trim(subname),' history_option = ',trim(history_option) write(logunit,F0I) trim(subname),' history_n = ',history_n @@ -632,7 +659,15 @@ subroutine seq_timemgr_clockInit(SyncClock, nmlfile, restart, restart_file, pioi call shr_mpi_bcast( restart_ymd, mpicom ) call shr_mpi_bcast( pause_n, mpicom ) call shr_mpi_bcast( pause_option, mpicom ) - call shr_mpi_bcast( pause_component_list, mpicom ) + call shr_mpi_bcast(data_assimilation_atm, mpicom) + call shr_mpi_bcast(data_assimilation_cpl, mpicom) + call shr_mpi_bcast(data_assimilation_ocn, mpicom) + call shr_mpi_bcast(data_assimilation_wav, mpicom) + call shr_mpi_bcast(data_assimilation_glc, mpicom) + call shr_mpi_bcast(data_assimilation_ice, mpicom) + call shr_mpi_bcast(data_assimilation_rof, mpicom) + call shr_mpi_bcast(data_assimilation_lnd, mpicom) + call shr_mpi_bcast( history_n, mpicom ) call shr_mpi_bcast( history_option, mpicom ) call shr_mpi_bcast( history_ymd, mpicom ) @@ -701,45 +736,31 @@ subroutine seq_timemgr_clockInit(SyncClock, nmlfile, restart, restart_file, pioi ! --- Figure out which components (if any) are doing pause this run rc = 1 i = 1 - if (trim(pause_component_list) == 'all') then - pause_active = .true. - else if (trim(pause_component_list) == 'none') then - pause_active = .false. - else - do - i = scan(trim(pause_component_list(rc:)), ':') - 1 - if ((i < 0) .and. (len_trim(pause_component_list) >= rc)) then - i = len_trim(pause_component_list(rc:)) - end if - if (i > 0) then - found = .false. - do n = 1, max_clocks - if (pause_component_list(rc:rc+i-1) == trim(seq_timemgr_clocks(n))) then - pause_active(n) = .true. - found = .true. - exit - end if - end do - ! Special case for cpl -- synonym for drv - if ((.not. found) .and. (pause_component_list(rc:rc+i-1) == 'cpl')) then - pause_active(seq_timemgr_nclock_drv) = .true. - found = .true. - end if - if (.not. found) then - call shr_sys_abort(subname//': unknown pause component, '//pause_component_list(rc:rc+i-1)) - end if - rc = rc + i - if (pause_component_list(rc:rc) == ':') then - rc = rc + 1 - end if - if (rc >= len_trim(pause_component_list)) then - exit - end if - else - exit - end if - end do - end if + if (data_assimilation_atm) then + pause_active(seq_timemgr_nclock_atm) = .true. + endif + if (data_assimilation_cpl) then + pause_active(seq_timemgr_nclock_drv) = .true. + endif + if (data_assimilation_ocn) then + pause_active(seq_timemgr_nclock_ocn) = .true. + endif + if (data_assimilation_wav) then + pause_active(seq_timemgr_nclock_wav) = .true. + endif + if (data_assimilation_glc) then + pause_active(seq_timemgr_nclock_glc) = .true. + endif + if (data_assimilation_ice) then + pause_active(seq_timemgr_nclock_ice) = .true. + endif + if (data_assimilation_rof) then + pause_active(seq_timemgr_nclock_rof) = .true. + endif + if (data_assimilation_lnd) then + pause_active(seq_timemgr_nclock_lnd) = .true. + endif + if ( ANY(pause_active) .and. & (trim(pause_option) /= seq_timemgr_optNONE) .and. & (trim(pause_option) /= seq_timemgr_optNever)) then