diff --git a/dlnd/cime_config/config_component.xml b/dlnd/cime_config/config_component.xml index 6fc60c254..ab40fa583 100644 --- a/dlnd/cime_config/config_component.xml +++ b/dlnd/cime_config/config_component.xml @@ -112,6 +112,16 @@ ending year to loop data over (only used when DLND_MODE is CPLHIST or GLC_CPLHIST) + + logical + TRUE,FALSE + FALSE + run_component_dlnd + env_run.xml + If set to true, than dlnd restarts will not be read on a continuation run. + + + ========================================= DLND naming conventions diff --git a/dlnd/cime_config/namelist_definition_dlnd.xml b/dlnd/cime_config/namelist_definition_dlnd.xml index 8fd3b160e..b10350b74 100644 --- a/dlnd/cime_config/namelist_definition_dlnd.xml +++ b/dlnd/cime_config/namelist_definition_dlnd.xml @@ -99,4 +99,17 @@ + + logical + dlnd + dlnd_nml + + If set to true, than dlnd restarts will not be read on a continuation run. + This capability is used, for example, in CTSM spinup runs. + + + $DLND_SKIP_RESTART_READ + + + diff --git a/dlnd/lnd_comp_nuopc.F90 b/dlnd/lnd_comp_nuopc.F90 index c97e5906e..cf99994c8 100644 --- a/dlnd/lnd_comp_nuopc.F90 +++ b/dlnd/lnd_comp_nuopc.F90 @@ -79,7 +79,7 @@ module cdeps_dlnd_comp character(CL) :: restfilm = nullstr ! model restart file namelist integer :: nx_global ! global nx dimension of model mesh integer :: ny_global ! global ny dimension of model mesh - + logical :: skip_restart_read = .false. ! true => skip restart read in continuation ! linked lists type(fldList_type) , pointer :: fldsExport => null() type(dfield_type) , pointer :: dfields => null() @@ -173,7 +173,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) !------------------------------------------------------------------------------- namelist / dlnd_nml / datamode, model_meshfile, model_maskfile, & - nx_global, ny_global, restfilm, force_prognostic_true + nx_global, ny_global, restfilm, skip_restart_read rc = ESMF_SUCCESS @@ -207,17 +207,17 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call shr_mpi_bcast(nx_global , mpicom, 'nx_global') call shr_mpi_bcast(ny_global , mpicom, 'ny_global') call shr_mpi_bcast(restfilm , mpicom, 'restfilm') - call shr_mpi_bcast(force_prognostic_true , mpicom, 'force_prognostic_true') + call shr_mpi_bcast(skip_restart_read , mpicom, 'skip_restart_read') ! write namelist input to standard out if (my_task == main_task) then - write(logunit,F00)' model_meshfile = ',trim(model_meshfile) - write(logunit,F00)' model_maskfile = ',trim(model_maskfile) - write(logunit ,*)' datamode = ',datamode - write(logunit ,*)' nx_global = ',nx_global - write(logunit ,*)' ny_global = ',ny_global - write(logunit ,*)' restfilm = ',trim(restfilm) - write(logunit ,*)' force_prognostic_true = ',force_prognostic_true + write(logunit,F00)' model_meshfile = ',trim(model_meshfile) + write(logunit,F00)' model_maskfile = ',trim(model_maskfile) + write(logunit,F00)' datamode = ',datamode + write(logunit,F01)' nx_global = ',nx_global + write(logunit,F01)' ny_global = ',ny_global + write(logunit,F00)' restfilm = ',trim(restfilm) + write(logunit,F02)' skip_restart_read = ',skip_restart_read endif ! Validate sdat datamode @@ -278,7 +278,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Read restart if necessary - if (restart_read) then + if (restart_read .and. .not. skip_restart_read) then call dshr_restart_read(restfilm, rpfile, inst_suffix, nullstr, logunit, my_task, mpicom, sdat) end if diff --git a/docn/cime_config/buildnml b/docn/cime_config/buildnml index 546e43acc..43d221223 100755 --- a/docn/cime_config/buildnml +++ b/docn/cime_config/buildnml @@ -94,6 +94,12 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path if type(streamlist) == type(str()): streamlist = [] + # Determine if skip restart is asked for and if it is a valid request + skip_restart_read = case.get_value('DOCN_SKIP_RESTART_READ') + if skip_restart_read: + if docn_mode == 'som' or docn_mode == 'som_aquap': + expect (False, f"xml variable DOCN_SKIP_RESTART_READ cannot be TRUE for docn_mode {docn_mode}") + # Generate docn.streams.xml if needed print("docn_mode is {}".format(docn_mode)) if (re.search(r'sst_aquap[0-9]+',docn_mode) is not None) or (docn_mode == 'sst_aquap_constant'): diff --git a/docn/cime_config/config_component.xml b/docn/cime_config/config_component.xml index 6c51147ac..b24c73269 100644 --- a/docn/cime_config/config_component.xml +++ b/docn/cime_config/config_component.xml @@ -248,6 +248,16 @@ This is only used when DOCN_MODE=prescribed. + + logical + TRUE,FALSE + FALSE + run_component_docn + env_run.xml + If set to true, than docn restarts will not be read on a continuation run. + + + ========================================= DOCN naming conventions diff --git a/docn/cime_config/namelist_definition_docn.xml b/docn/cime_config/namelist_definition_docn.xml index c036ccd10..a33992213 100644 --- a/docn/cime_config/namelist_definition_docn.xml +++ b/docn/cime_config/namelist_definition_docn.xml @@ -190,4 +190,17 @@ + + logical + docn + docn_nml + + If set to true, than docn restarts will not be read on a continuation run. + This capability is used, for example, in CTSM spinup runs. + + + $DOCN_SKIP_RESTART_READ + + + diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index 964beabeb..64fde4257 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -96,6 +96,7 @@ module cdeps_docn_comp character(CL) :: restfilm = nullstr ! model restart file namelist integer :: nx_global integer :: ny_global + logical :: skip_restart_read = .false. ! true => skip restart read in continuation run ! linked lists type(fldList_type) , pointer :: fldsImport => null() @@ -191,7 +192,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) namelist / docn_nml / datamode, & model_meshfile, model_maskfile, & - restfilm, nx_global, ny_global, sst_constant_value + restfilm, nx_global, ny_global, sst_constant_value, skip_restart_read rc = ESMF_SUCCESS @@ -227,6 +228,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) write(logunit,F01)' nx_global = ',nx_global write(logunit,F01)' ny_global = ',ny_global write(logunit,F00)' restfilm = ',trim(restfilm) + write(logunit,F02)' skip_restart_read = ',skip_restart_read endif ! Broadcast namelist input @@ -237,6 +239,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call shr_mpi_bcast(ny_global , mpicom, 'ny_global') call shr_mpi_bcast(restfilm , mpicom, 'restfilm') call shr_mpi_bcast(sst_constant_value , mpicom, 'sst_constant_value') + call shr_mpi_bcast(skip_restart_read , mpicom, 'skip_restart_read') ! Special logic for prescribed aquaplanet if (datamode(1:9) == 'sst_aquap' .and. trim(datamode) /= 'sst_aquap_constant') then @@ -499,7 +502,7 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod end select ! Read restart if needed - if (restart_read) then + if (restart_read .and. .not. skip_restart_read) then select case (trim(datamode)) case('sstdata', 'sst_aquap_file') call docn_datamode_copyall_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) diff --git a/drof/cime_config/config_component.xml b/drof/cime_config/config_component.xml index 7d0e8a62d..8400ada9d 100644 --- a/drof/cime_config/config_component.xml +++ b/drof/cime_config/config_component.xml @@ -125,6 +125,16 @@ ending year to loop data over (only used when DROF_MODE is CPLHIST) + + logical + TRUE,FALSE + FALSE + run_component_drof + env_run.xml + If set to true, than drof restarts will not be read on a continuation run. + + + ========================================= DROF naming conventions diff --git a/drof/cime_config/namelist_definition_drof.xml b/drof/cime_config/namelist_definition_drof.xml index ead6e9209..846139e12 100644 --- a/drof/cime_config/namelist_definition_drof.xml +++ b/drof/cime_config/namelist_definition_drof.xml @@ -104,4 +104,17 @@ + + logical + drof + drof_nml + + If set to true, than drof restarts will not be read on a continuation run. + This capability is used, for example, in CTSM spinup runs. + + + $DROF_SKIP_RESTART_READ + + + diff --git a/drof/rof_comp_nuopc.F90 b/drof/rof_comp_nuopc.F90 index c40f69932..281dc8a38 100644 --- a/drof/rof_comp_nuopc.F90 +++ b/drof/rof_comp_nuopc.F90 @@ -75,7 +75,7 @@ module cdeps_drof_comp character(CL) :: restfilm = nullstr ! model restart file namelist integer :: nx_global integer :: ny_global - + logical :: skip_restart_read = .false. ! true => skip restart read logical :: diagnose_data = .true. integer , parameter :: main_task=0 ! task number of main task character(*) , parameter :: rpfile = 'rpointer.rof' @@ -171,7 +171,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) !------------------------------------------------------------------------------- namelist / drof_nml / datamode, model_meshfile, model_maskfile, & - restfilm, nx_global, ny_global + restfilm, nx_global, ny_global, skip_restart_read rc = ESMF_SUCCESS @@ -206,6 +206,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) write(logunit,F01)' nx_global = ',nx_global write(logunit,F01)' ny_global = ',ny_global write(logunit,F00)' restfilm = ',trim(restfilm) + write(logunit,F02)' skip_restart_read = ',skip_restart_read end if ! broadcast namelist input @@ -215,6 +216,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call shr_mpi_bcast(nx_global , mpicom, 'nx_global') call shr_mpi_bcast(ny_global , mpicom, 'ny_global') call shr_mpi_bcast(restfilm , mpicom, 'restfilm') + call shr_mpi_bcast(skip_restart_read , mpicom, 'skip_restart_read') ! Validate datamode if (trim(datamode) == 'copyall') then @@ -389,7 +391,7 @@ subroutine drof_comp_run(exportState, target_ymd, target_tod, restart_write, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return ! Read restart if needed - if (restart_read) then + if (restart_read .and. .not. skip_restart_read) then call dshr_restart_read(restfilm, rpfile, inst_suffix, nullstr, logunit, my_task, mpicom, sdat) end if diff --git a/dwav/cime_config/config_component.xml b/dwav/cime_config/config_component.xml index a3c97663e..9ac5c516e 100644 --- a/dwav/cime_config/config_component.xml +++ b/dwav/cime_config/config_component.xml @@ -36,6 +36,16 @@ DWAV mode + + logical + TRUE,FALSE + FALSE + run_component_dwav + env_run.xml + If set to true, than dwav restarts will not be read on a continuation run. + + + ========================================= DWAV naming conventions diff --git a/dwav/cime_config/namelist_definition_dwav.xml b/dwav/cime_config/namelist_definition_dwav.xml index ca479efbd..16517984f 100644 --- a/dwav/cime_config/namelist_definition_dwav.xml +++ b/dwav/cime_config/namelist_definition_dwav.xml @@ -97,4 +97,17 @@ + + logical + dwav + dwav_nml + + If set to true, than dwav restarts will not be read on a continuation run. + This capability is used, for example, in CTSM spinup runs. + + + $DWAV_SKIP_RESTART_READ + + + diff --git a/dwav/wav_comp_nuopc.F90 b/dwav/wav_comp_nuopc.F90 index 5bbf17106..d16e87775 100644 --- a/dwav/wav_comp_nuopc.F90 +++ b/dwav/wav_comp_nuopc.F90 @@ -76,7 +76,7 @@ module cdeps_dwav_comp character(CL) :: restfilm = nullstr ! model restart file namelist integer :: nx_global integer :: ny_global - + logical :: skip_restart_read = .false. ! true => skip restart read ! constants logical :: diagnose_data = .true. integer , parameter :: main_task=0 ! task number of main task @@ -168,7 +168,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) !------------------------------------------------------------------------------- namelist / dwav_nml / datamode, model_meshfile, model_maskfile, & - restfilm, nx_global, ny_global + restfilm, nx_global, ny_global, skip_restart_read rc = ESMF_SUCCESS @@ -203,6 +203,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) write(logunit,F01)' nx_global = ',nx_global write(logunit,F01)' ny_global = ',ny_global write(logunit,F00)' restfilm = ',trim(restfilm) + write(logunit,F02)' skip_restart_read = ',skip_restart_read endif ! broadcast namelist input @@ -212,6 +213,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call shr_mpi_bcast(nx_global , mpicom, 'nx_global') call shr_mpi_bcast(ny_global , mpicom, 'ny_global') call shr_mpi_bcast(restfilm , mpicom, 'restfilm') + call shr_mpi_bcast(skip_restart_read , mpicom, 'skip_restart_read') ! Call advertise phase if (trim(datamode) == 'copyall') then @@ -266,7 +268,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Read restart if necessary - if (restart_read) then + if (restart_read .and. .not. skip_restart_read) then call dshr_restart_read(restfilm, rpfile, inst_suffix, nullstr, logunit, my_task, mpicom, sdat) end if