diff --git a/cime_config/config_component.xml b/cime_config/config_component.xml
index aa7ab6510..dbffe661f 100644
--- a/cime_config/config_component.xml
+++ b/cime_config/config_component.xml
@@ -987,9 +987,9 @@
env_run.xml
Determines what ESMF log files (if any) are generated when
- USE_ESMF_LIB is TRUE.
+ USE_ESMF_LIB is TRUE.
ESMF_LOGKIND_SINGLE: Use a single log file, combining messages from
- all of the PETs. Not supported on some platforms.
+ all of the PETs. Not supported on some platforms.
ESMF_LOGKIND_MULTI: Use multiple log files -- one per PET.
ESMF_LOGKIND_NONE: Do not issue messages to a log file.
By default, no ESMF log files are generated.
@@ -2018,7 +2018,7 @@
pio rearranger communication max pending requests (io2comp) :
-2 implies that CIME internally calculates the value ( = 64),
-1 implies no bound on max pending requests
- 0 implies that MPI_ALLTOALL will be used
+ 0 implies that MPI_ALLTOALL will be used
@@ -2600,7 +2600,7 @@
-
+
diff --git a/cime_config/runseq/runseq_general.py b/cime_config/runseq/runseq_general.py
index df8002825..e0a4cfb36 100644
--- a/cime_config/runseq/runseq_general.py
+++ b/cime_config/runseq/runseq_general.py
@@ -18,9 +18,10 @@ def gen_runseq(case, coupling_times):
rundir = case.get_value("RUNDIR")
caseroot = case.get_value("CASEROOT")
cpl_seq_option = case.get_value('CPL_SEQ_OPTION')
- cpl_add_aoflux = case.get_value('ADD_AOFLUX_TO_RUNSEQ')
coupling_mode = case.get_value('COUPLING_MODE')
diag_mode = case.get_value('BUDGETS')
+ xcompset = case.get_value("COMP_ATM") == 'xatm'
+ cpl_add_aoflux = not xcompset and case.get_value('ADD_AOFLUX_TO_RUNSEQ')
# It is assumed that if a component will be run it will send information to the mediator
# so the flags run_xxx and xxx_to_med are redundant
@@ -34,6 +35,7 @@ def gen_runseq(case, coupling_times):
run_rof, med_to_rof, rof_cpl_time = driver_config['rof']
run_wav, med_to_wav, wav_cpl_time = driver_config['wav']
+
# Note: assume that atm_cpl_dt, lnd_cpl_dt, ice_cpl_dt and wav_cpl_dt are the same
if lnd_cpl_time != atm_cpl_time:
@@ -89,7 +91,7 @@ def gen_runseq(case, coupling_times):
runseq.add_action("MED med_phases_aofluxes_run" , run_ocn and run_atm and (med_to_ocn or med_to_atm))
runseq.add_action("MED med_phases_prep_ocn_merge" , med_to_ocn)
runseq.add_action("MED med_phases_prep_ocn_accum_fast" , med_to_ocn)
- runseq.add_action("MED med_phases_ocnalb_run" , run_ocn and run_atm and (med_to_ocn or med_to_atm))
+ runseq.add_action("MED med_phases_ocnalb_run" , (run_ocn and run_atm and (med_to_ocn or med_to_atm)) and not xcompset)
runseq.add_action("MED med_phases_prep_lnd" , med_to_lnd)
runseq.add_action("MED -> LND :remapMethod=redist" , med_to_lnd)
runseq.add_action("MED med_phases_prep_ice" , med_to_ice)
@@ -116,7 +118,7 @@ def gen_runseq(case, coupling_times):
runseq.add_action("MED med_phases_aofluxes_run" , run_ocn and run_atm)
runseq.add_action("MED med_phases_prep_ocn_merge" , med_to_ocn)
runseq.add_action("MED med_phases_prep_ocn_accum_fast" , med_to_ocn)
- runseq.add_action("MED med_phases_ocnalb_run" , run_ocn and run_atm)
+ runseq.add_action("MED med_phases_ocnalb_run" , (run_ocn and run_atm) and not xcompset)
runseq.add_action("MED med_phases_diag_ocn" , run_ocn and diag_mode and not ocn_outer_loop)
runseq.add_action("LND -> MED :remapMethod=redist" , run_lnd)
runseq.add_action("ICE -> MED :remapMethod=redist" , run_ice)
diff --git a/mediator/med_phases_aofluxes_mod.F90 b/mediator/med_phases_aofluxes_mod.F90
index 6a303da80..198ef4908 100644
--- a/mediator/med_phases_aofluxes_mod.F90
+++ b/mediator/med_phases_aofluxes_mod.F90
@@ -94,6 +94,7 @@ subroutine med_phases_aofluxes_run(gcomp, rc)
use NUOPC , only : NUOPC_IsConnected, NUOPC_CompAttributeGet
use esmFlds , only : med_fldList_GetNumFlds, med_fldList_GetFldNames
use esmFlds , only : fldListFr, fldListMed_aoflux, compatm, compocn, compname
+ use NUOPC , only : NUOPC_CompAttributeGet
!-----------------------------------------------------------------------
! Compute atm/ocn fluxes
@@ -189,7 +190,7 @@ subroutine med_aofluxes_init(gcomp, aoflux, FBAtm, FBOcn, FBFrac, FBMed_aoflux,
use ESMF , only : ESMF_GridComp, ESMF_GridCompGet, ESMF_VM
use ESMF , only : ESMF_Field, ESMF_FieldGet, ESMF_FieldBundle, ESMF_VMGet
use NUOPC , only : NUOPC_CompAttributeGet
-
+ use shr_flux_mod , only : shr_flux_adjust_constants
!-----------------------------------------------------------------------
! Initialize pointers to the module variables
!-----------------------------------------------------------------------
@@ -212,6 +213,10 @@ subroutine med_aofluxes_init(gcomp, aoflux, FBAtm, FBOcn, FBFrac, FBMed_aoflux,
character(CL) :: cvalue
logical :: flds_wiso ! use case
character(len=CX) :: tmpstr
+ real(R8) :: flux_convergence ! convergence criteria for imlicit flux computation
+ integer :: flux_max_iteration ! maximum number of iterations for convergence
+ logical :: coldair_outbreak_mod ! cold air outbreak adjustment (Mahrt & Sun 1995,MWR)
+ logical :: isPresent, isSet
character(*),parameter :: subName = '(med_aofluxes_init) '
!-----------------------------------------------------------------------
@@ -381,6 +386,40 @@ subroutine med_aofluxes_init(gcomp, aoflux, FBAtm, FBOcn, FBFrac, FBMed_aoflux,
! call FB_getFldPtr(FBFrac , fldname='ifrac' , fldptr1=ifrac, rc=rc)
! if (chkerr(rc,__LINE__,u_FILE_u)) return
! where (ofrac(:) + ifrac(:) <= 0.0_R8) mask(:) = 0
+ !----------------------------------
+ ! Get config variables on first call
+ !----------------------------------
+
+ call NUOPC_CompAttributeGet(gcomp, name='coldair_outbreak_mod', value=cvalue, isPresent=isPresent, isSet=isSet, rc=rc)
+ if (chkerr(rc,__LINE__,u_FILE_u)) return
+ if (isPresent .and. isSet) then
+ read(cvalue,*) coldair_outbreak_mod
+ else
+ coldair_outbreak_mod = .false.
+ end if
+
+ call NUOPC_CompAttributeGet(gcomp, name='flux_max_iteration', value=cvalue, isPresent=isPresent, isSet=isSet, rc=rc)
+ if (chkerr(rc,__LINE__,u_FILE_u)) return
+ if (isPresent .and. isSet) then
+ read(cvalue,*) flux_max_iteration
+ else
+ flux_max_iteration = 1
+ end if
+
+ call NUOPC_CompAttributeGet(gcomp, name='flux_convergence', value=cvalue, isPresent=isPresent, isSet=isSet, rc=rc)
+ if (chkerr(rc,__LINE__,u_FILE_u)) return
+ if (isPresent .and. isSet) then
+ read(cvalue,*) flux_convergence
+ else
+ flux_convergence = 0.0_r8
+ end if
+
+ call shr_flux_adjust_constants(&
+ flux_convergence_tolerance=flux_convergence, &
+ flux_convergence_max_iteration=flux_max_iteration, &
+ coldair_outbreak_mod=coldair_outbreak_mod)
+
+
if (dbug_flag > 5) then
call ESMF_LogWrite(trim(subname)//": done", ESMF_LOGMSG_INFO)
@@ -397,7 +436,7 @@ subroutine med_aofluxes_run(gcomp, aoflux, rc)
use ESMF , only : ESMF_GridCompGet, ESMF_ClockGet, ESMF_TimeGet, ESMF_TimeIntervalGet
use ESMF , only : ESMF_LogWrite, ESMF_LogMsg_Info
use NUOPC , only : NUOPC_CompAttributeGet
- use shr_flux_mod , only : shr_flux_atmocn, shr_flux_adjust_constants
+ use shr_flux_mod , only : shr_flux_atmocn
!-----------------------------------------------------------------------
! Determine atm/ocn fluxes eother on atm or on ocean grid
@@ -414,53 +453,13 @@ subroutine med_aofluxes_run(gcomp, aoflux, rc)
character(CL) :: cvalue
integer :: n,i ! indices
integer :: lsize ! local size
- real(R8) :: flux_convergence ! convergence criteria for imlicit flux computation
- integer :: flux_max_iteration ! maximum number of iterations for convergence
- logical :: coldair_outbreak_mod ! cold air outbreak adjustment (Mahrt & Sun 1995,MWR)
character(len=CX) :: tmpstr
logical :: isPresent, isSet
- logical,save :: first_call = .true.
character(*),parameter :: subName = '(med_aofluxes_run) '
!-----------------------------------------------------------------------
call t_startf('MED:'//subname)
- !----------------------------------
- ! Get config variables on first call
- !----------------------------------
-
- if (first_call) then
- call NUOPC_CompAttributeGet(gcomp, name='coldair_outbreak_mod', value=cvalue, isPresent=isPresent, isSet=isSet, rc=rc)
- if (chkerr(rc,__LINE__,u_FILE_u)) return
- if (isPresent .and. isSet) then
- read(cvalue,*) coldair_outbreak_mod
- else
- coldair_outbreak_mod = .false.
- end if
-
- call NUOPC_CompAttributeGet(gcomp, name='flux_max_iteration', value=cvalue, isPresent=isPresent, isSet=isSet, rc=rc)
- if (chkerr(rc,__LINE__,u_FILE_u)) return
- if (isPresent .and. isSet) then
- read(cvalue,*) flux_max_iteration
- else
- flux_max_iteration = 1
- end if
-
- call NUOPC_CompAttributeGet(gcomp, name='flux_convergence', value=cvalue, isPresent=isPresent, isSet=isSet, rc=rc)
- if (chkerr(rc,__LINE__,u_FILE_u)) return
- if (isPresent .and. isSet) then
- read(cvalue,*) flux_convergence
- else
- flux_convergence = 0.0_r8
- end if
-
- call shr_flux_adjust_constants(&
- flux_convergence_tolerance=flux_convergence, &
- flux_convergence_max_iteration=flux_max_iteration, &
- coldair_outbreak_mod=coldair_outbreak_mod)
-
- first_call = .false.
- end if
!----------------------------------
! Determine the compute mask