From 9db156f5a03d3d00fc1514b97b0e10cd0f92a866 Mon Sep 17 00:00:00 2001 From: Bill Sacks Date: Sat, 15 Aug 2026 14:12:59 -0600 Subject: [PATCH] Add a check that GLC has the coarsest coupling frequency This was implicitly assumed but not checked. Resolves ESCOMP/CMEPS#688 --- cime_config/runseq/runseq_general.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/cime_config/runseq/runseq_general.py b/cime_config/runseq/runseq_general.py index 04a0d6f4f..15575c3a8 100644 --- a/cime_config/runseq/runseq_general.py +++ b/cime_config/runseq/runseq_general.py @@ -58,10 +58,23 @@ def gen_runseq(case, coupling_times): # Note that we do some aspects of the GLC outer loop even if run_glc is False # (as long as med_to_glc is True). # - # Note that, in contrast to the other outer_loop variables, this doesn't check glc_cpl_time. - # This is for consistency with the logic that was in place before adding this variable; - # this seems to implicitly assume that glc_cpl_time > atm_cpl_time. + # Note that, in contrast to the other outer_loop variables, the logic for + # glc_outer_loop doesn't check glc_cpl_time. For more generality, we could have some + # extra logic determining whether we need a glc outer loop based on the relationship + # between glc_cpl_time and other cpl times. However, to avoid adding more complex + # logic, for now we just force glc coupling to be the coarsest coupling, and so assume + # that we have an outer loop for glc regardless of glc_cpl_time. Note that if + # glc_cpl_time is equal to one of the other coupling times, we'll end up with two + # loops with the same frequency; this is acceptable. glc_outer_loop = med_to_glc + if glc_outer_loop: + # In the following, we only bother checking glc_cpl_time against the other + # cpl_time variables that control the existence of time loops; other cpl_times are + # guaranteed to be equal to one of these cpl_time variables (as enforced above). + expect(((glc_cpl_time >= rof_cpl_time) and + (glc_cpl_time >= ocn_cpl_time) and + (glc_cpl_time >= atm_cpl_time)), + "glc_cpl_time must be greater than or equal to all other components' coupling times") inner_loop = ((atm_cpl_time < ocn_cpl_time) or (atm_cpl_time < rof_cpl_time) or