From e74431f7fc1572cafd64ed5967860cf6a3524c59 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Sun, 4 Oct 2026 12:26:47 -0400 Subject: [PATCH 1/2] Remove the decomposition-dependent reprosum "recompute" fallbacks shr_reprosum_calc returns the exact, correctly rounded sum of its inputs, independent of the MPI decomposition. When reprosum_diffmax >= 0 it also forms a plain floating point sum and shr_reprosum_tolExceeded warns if the two differ by more than the tolerance. Five CAM call sites (the FV pole averages in d2a3dikj and p_d_adjust, par_xsum, gmeanxy in mean_module, and gmean_mod) treated that warning as a failure of the reproducible sum and, with reprosum_recompute = .true., replaced it with a plain sequential sum ("old method"), or in gmean_mod aborted the run. The plain sums are the inaccurate operand in that comparison, and both they and the check itself depend on the decomposition. CAM's ERC test runs its restart leg on half the tasks, so the check could trip on one leg only and the fallback then injected a decomposition-dependent value. This is the cause of the ERC_D_Ln9.f10_f10_mt232.FHIST_C5.izumi_nag.cam-outfrq3s_subcol COMPARE_base_rest failure (ESCOMP/CAM issue #1514): the testmod sets reprosum_diffmax = 1.0e-14 and reprosum_recompute = .true., the South Pole wind average in d2a3dikj tripped only on the 12-task leg, and the pole-row U/V then differed by one ulp. Subcolumns and the NAG compiler play no role. Keep the warning (same pattern as fv_prints), drop every use of shr_reprosum_recompute in CAM together with the duplicated fallback code and gmean_float_norepro, and fix the "Nouth Pole" labels. Answer impact: bit-for-bit with default settings (reprosum_diffmax < 0 disables the check, so the removed code never ran). Only runs that set reprosum_diffmax >= 0 and reprosum_recompute = .true. can change, and only at steps where the fallback fired; such events are visible as "exceeds tolerance" messages in the baseline logs. Assisted-by: claude-fable:5.1 --- src/dynamics/fv/d2a3dikj.F90 | 76 ++++---------------- src/dynamics/fv/mean_module.F90 | 46 +++--------- src/dynamics/fv/p_d_adjust.F90 | 77 ++++---------------- src/dynamics/fv/par_xsum.F90 | 122 +++++--------------------------- src/utils/gmean_mod.F90 | 92 +++--------------------- 5 files changed, 59 insertions(+), 354 deletions(-) diff --git a/src/dynamics/fv/d2a3dikj.F90 b/src/dynamics/fv/d2a3dikj.F90 index 2ff9bbd748..b59242159a 100644 --- a/src/dynamics/fv/d2a3dikj.F90 +++ b/src/dynamics/fv/d2a3dikj.F90 @@ -22,14 +22,11 @@ subroutine d2a3dikj(grid, am_geom_crrct, u, v, ua, va) use dynamics_vars, only : t_fvdycore_grid #if defined( SPMD ) - use parutilitiesmodule, only : parcollective, sumop use mod_comm, only: mp_send3d, mp_recv3d #endif use shr_reprosum_mod, only : shr_reprosum_calc, & - shr_reprosum_tolExceeded, & - shr_reprosum_reldiffmax, & - shr_reprosum_recompute + shr_reprosum_tolExceeded use cam_logfile, only : iulog use perf_mod @@ -67,22 +64,21 @@ subroutine d2a3dikj(grid, am_geom_crrct, u, v, ua, va) !EOP !----------------------------------------------------------------------- !BOC - real(r8), parameter :: D0_0 = 0.0_r8 real(r8), parameter :: D0_5 = 0.5_r8 - integer :: imh, i, j, k, m, itot, jtot, ltot, ik + integer :: imh, i, j, k, itot, jtot, ltot, ik real(r8) :: veast(grid%jfirstxy:grid%jlastxy,grid%km) real(r8) :: unorth(grid%ifirstxy:grid%ilastxy,grid%km) real(r8) :: uva(grid%ifirstxy:grid%ilastxy,grid%km,2) real(r8) :: uvn(grid%km,2), uvs(grid%km,2) real(r8) :: rel_diff(2,grid%km,2) - real(r8),allocatable :: uva_tmp(:) integer :: ifirstxy, ilastxy, jfirstxy, jlastxy, im, jm, km integer :: myidxy_y, myidxy_x, nprxy_x, iam logical :: write_warning + logical :: tol_exceeded real(r8), pointer :: coslon(:),sinlon(:) ! Sine and cosine in longitude @@ -230,36 +226,13 @@ subroutine d2a3dikj(grid, am_geom_crrct, u, v, ua, va) commid=grid%commxy_x, rel_diff=rel_diff) call t_stopf("d2a3dikj_reprosum") - ! check that "fast" reproducible sum is accurate enough. If not, calculate - ! using old method + ! Warn if the nonreproducible floating point check sum differs from the + ! integer vector sum by more than reprosum_diffmax. The integer vector sum is + ! exact, so the result is kept regardless. write_warning = .false. if (myidxy_x == 0) write_warning = .true. - if ( shr_reprosum_tolExceeded('d2a3dikj/South Pole', 2*km, write_warning, & - iulog, rel_diff) ) then - if ( shr_reprosum_recompute ) then - call t_startf("d2a3dikj_sumfix") - allocate( uva_tmp(im) ) - do m = 1,2 - do k = 1,km - if (rel_diff(1,k,m) > shr_reprosum_reldiffmax) then - uva_tmp(:) = D0_0 - do i = ifirstxy,ilastxy - uva_tmp(i) = uva(i,k,m) - enddo -#if defined(SPMD) - call parcollective(grid%commxy_x,sumop,im,uva_tmp) -#endif - uvs(k,m) = D0_0 - do i = 1,im - uvs(k,m) = uvs(k,m) + uva_tmp(i) - enddo - endif - enddo - enddo - deallocate( uva_tmp ) - call t_stopf("d2a3dikj_sumfix") - endif - endif + tol_exceeded = shr_reprosum_tolExceeded('d2a3dikj/South Pole', 2*km, write_warning, & + iulog, rel_diff) !$omp parallel do private(i,k) do k = 1,km @@ -303,36 +276,13 @@ subroutine d2a3dikj(grid, am_geom_crrct, u, v, ua, va) commid=grid%commxy_x, rel_diff=rel_diff) call t_stopf("d2a3dikj_reprosum") - ! check that "fast" reproducible sum is accurate enough. If not, calculate - ! using old method + ! Warn if the nonreproducible floating point check sum differs from the + ! integer vector sum by more than reprosum_diffmax. The integer vector sum is + ! exact, so the result is kept regardless. write_warning = .false. if (myidxy_x == 0) write_warning = .true. - if ( shr_reprosum_tolExceeded('d2a3dikj/Nouth Pole', 2*km, write_warning, & - iulog, rel_diff) ) then - if ( shr_reprosum_recompute ) then - call t_startf("d2a3dikj_sumfix") - allocate( uva_tmp(im) ) - do m = 1,2 - do k = 1,km - if (rel_diff(1,k,m) > shr_reprosum_reldiffmax) then - uva_tmp(:) = D0_0 - do i = ifirstxy,ilastxy - uva_tmp(i) = uva(i,k,m) - enddo -#if defined(SPMD) - call parcollective(grid%commxy_x,sumop,im,uva_tmp) -#endif - uvn(k,m) = D0_0 - do i = 1,im - uvn(k,m) = uvn(k,m) + uva_tmp(i) - enddo - endif - enddo - enddo - deallocate( uva_tmp ) - call t_stopf("d2a3dikj_sumfix") - endif - endif + tol_exceeded = shr_reprosum_tolExceeded('d2a3dikj/North Pole', 2*km, write_warning, & + iulog, rel_diff) !$omp parallel do private(i,k) do k = 1,km diff --git a/src/dynamics/fv/mean_module.F90 b/src/dynamics/fv/mean_module.F90 index 7bc7af1dfa..15496b67ea 100644 --- a/src/dynamics/fv/mean_module.F90 +++ b/src/dynamics/fv/mean_module.F90 @@ -1,8 +1,7 @@ module mean_module use shr_kind_mod, only : r8 => shr_kind_r8 - use shr_reprosum_mod, only : shr_reprosum_calc, shr_reprosum_tolExceeded, & - shr_reprosum_recompute + use shr_reprosum_mod, only : shr_reprosum_calc, shr_reprosum_tolExceeded use perf_mod use cam_logfile, only : iulog @@ -97,10 +96,6 @@ subroutine gmeanxy(grid, q, qmean) use commap, only : w use dynamics_vars, only : T_FVDYCORE_GRID -#if defined( SPMD ) - use parutilitiesmodule, only : parcollective, sumop -#endif - implicit none ! !INPUT PARAMETERS: @@ -134,13 +129,13 @@ subroutine gmeanxy(grid, q, qmean) real(r8) :: q_tmp(grid%ifirstxy:grid%ilastxy, & grid%jfirstxy:grid%jlastxy) - real(r8) :: rel_diff(2), qmean_tmp(1), xsum - real(r8), allocatable :: q_global(:,:) + real(r8) :: rel_diff(2), qmean_tmp(1) integer :: i, j, im, jm, ifirstxy, ilastxy, jfirstxy, jlastxy integer :: lim, ljm, lijm logical :: write_warning + logical :: tol_exceeded im = grid%im jm = grid%jm @@ -165,38 +160,13 @@ subroutine gmeanxy(grid, q, qmean) qmean = qmean_tmp(1) call t_stopf("gmeanxy_reprosum") - ! check that "fast" reproducible sum is accurate enough. If not, calculate - ! using old method + ! Warn if the nonreproducible floating point check sum differs from the + ! integer vector sum by more than reprosum_diffmax. The integer vector sum is + ! exact, so the result is kept regardless. write_warning = .false. if (grid%iam == 0) write_warning = .true. - if ( shr_reprosum_tolExceeded('gmeanxy', 1, write_warning, & - iulog, rel_diff) ) then - if ( shr_reprosum_recompute ) then - call t_startf("gmeanxy_sumfix") - allocate( q_global(im,jm) ) - q_global = D0_0 - do j=jfirstxy,jlastxy - do i=ifirstxy,ilastxy - q_global(i,j) = q_tmp(i,j) - enddo - enddo - -#if defined( SPMD ) - call parcollective( grid%commxy, sumop, im, jm, q_global ) -#endif - qmean = D0_0 - do j=1,jm - xsum = D0_0 - do i=1,im - xsum = xsum + q_global(i,j) - enddo - qmean = qmean + xsum - enddo - - deallocate( q_global ) - call t_stopf("gmeanxy_sumfix") - endif - endif + tol_exceeded = shr_reprosum_tolExceeded('gmeanxy', 1, write_warning, & + iulog, rel_diff) qmean = qmean / (2*im) diff --git a/src/dynamics/fv/p_d_adjust.F90 b/src/dynamics/fv/p_d_adjust.F90 index 425e95ef26..e58987abcf 100644 --- a/src/dynamics/fv/p_d_adjust.F90 +++ b/src/dynamics/fv/p_d_adjust.F90 @@ -9,12 +9,7 @@ subroutine p_d_adjust(grid, tracer, pelnxy, pkxy, pkzxy, zvir, & ! !USES: use shr_kind_mod, only: r8 => shr_kind_r8 use dynamics_vars, only : T_FVDYCORE_GRID -#if defined( SPMD ) - use parutilitiesmodule, only: parcollective, sumop -#endif - use shr_reprosum_mod, only : shr_reprosum_calc, shr_reprosum_tolExceeded, & - shr_reprosum_reldiffmax, & - shr_reprosum_recompute + use shr_reprosum_mod, only : shr_reprosum_calc, shr_reprosum_tolExceeded use cam_logfile, only : iulog use perf_mod @@ -63,7 +58,6 @@ subroutine p_d_adjust(grid, tracer, pelnxy, pkxy, pkzxy, zvir, & !----------------------------------------------------------------------- !BOC ! !LOCAL VARIABLES: - real(r8), parameter :: D0_0 = 0.0_r8 real(r8), parameter :: D1_0 = 1.0_r8 real(r8) :: pole(grid%ifirstxy:grid%ilastxy,grid%km,grid%ntotq+2) @@ -76,13 +70,12 @@ subroutine p_d_adjust(grid, tracer, pelnxy, pkxy, pkzxy, zvir, & real(r8) :: & pkln(grid%ifirstxy:grid%ilastxy,grid%km+1,grid%jfirstxy:grid%jlastxy) - real(r8),allocatable :: pole_tmp(:) - integer :: i, k, m, j ! indices integer :: im, jm, km, ntotq, lim integer :: ifirstxy, ilastxy, jfirstxy, jlastxy logical :: write_warning + logical :: tol_exceeded logical :: high_alt !---------------------------End Local workspace------------------------- @@ -127,36 +120,13 @@ subroutine p_d_adjust(grid, tracer, pelnxy, pkxy, pkzxy, zvir, & commid=grid%commxy_x, rel_diff=rel_diff) ! South pole call t_stopf("pdadj_reprosum") - ! check that "fast" reproducible sum is accurate enough. If not, calculate - ! using old method + ! Warn if the nonreproducible floating point check sum differs from the + ! integer vector sum by more than reprosum_diffmax. The integer vector sum is + ! exact, so the result is kept regardless. write_warning = .false. if (grid%myidxy_x == 0) write_warning = .true. - if ( shr_reprosum_tolExceeded('p_d_adjust/South Pole', km*(ntotq+2), & - write_warning, iulog, rel_diff) ) then - if ( shr_reprosum_recompute ) then - call t_startf("pdadj_sumfix") - allocate( pole_tmp(im) ) - do m = 1, ntotq+2 - do k = 1, km - if (rel_diff(1,k,m) > shr_reprosum_reldiffmax) then - pole_tmp(:) = D0_0 - do i = ifirstxy, ilastxy - pole_tmp(i) = pole(i,k,m) - enddo -#if defined(SPMD) - call parcollective(grid%commxy_x,sumop,im,pole_tmp) -#endif - pole_sum(k,m) = D0_0 - do i = 1, im - pole_sum(k,m) = pole_sum(k,m) + pole_tmp(i) - enddo - endif - enddo - enddo - deallocate( pole_tmp ) - call t_stopf("pdadj_sumfix") - endif - endif + tol_exceeded = shr_reprosum_tolExceeded('p_d_adjust/South Pole', km*(ntotq+2), write_warning, & + iulog, rel_diff) ! save results !$omp parallel do private(i,k,m) @@ -198,36 +168,13 @@ subroutine p_d_adjust(grid, tracer, pelnxy, pkxy, pkzxy, zvir, & commid=grid%commxy_x, rel_diff=rel_diff) ! North pole call t_stopf("pdadj_reprosum") - ! check that "fast" reproducible sum is accurate enough. If not, calculate - ! using old method + ! Warn if the nonreproducible floating point check sum differs from the + ! integer vector sum by more than reprosum_diffmax. The integer vector sum is + ! exact, so the result is kept regardless. write_warning = .false. if (grid%myidxy_x == 0) write_warning = .true. - if ( shr_reprosum_tolExceeded('p_d_adjust/Nouth Pole', km*(ntotq+2), & - write_warning, iulog, rel_diff) ) then - if ( shr_reprosum_recompute ) then - call t_startf("pdadj_sumfix") - allocate( pole_tmp(im) ) - do m = 1, ntotq+2 - do k = 1, km - if (rel_diff(1,k,m) > shr_reprosum_reldiffmax) then - pole_tmp(:) = D0_0 - do i = ifirstxy, ilastxy - pole_tmp(i) = pole(i,k,m) - enddo -#if defined(SPMD) - call parcollective(grid%commxy_x,sumop,im,pole_tmp) -#endif - pole_sum(k,m) = D0_0 - do i = 1, im - pole_sum(k,m) = pole_sum(k,m) + pole_tmp(i) - enddo - endif - enddo - enddo - deallocate( pole_tmp ) - call t_stopf("pdadj_sumfix") - endif - endif + tol_exceeded = shr_reprosum_tolExceeded('p_d_adjust/North Pole', km*(ntotq+2), write_warning, & + iulog, rel_diff) ! save results !$omp parallel do private(i,k,m) diff --git a/src/dynamics/fv/par_xsum.F90 b/src/dynamics/fv/par_xsum.F90 index 9f2520a90f..04156dd438 100644 --- a/src/dynamics/fv/par_xsum.F90 +++ b/src/dynamics/fv/par_xsum.F90 @@ -8,14 +8,9 @@ subroutine par_xsum(grid, a, ltot, sum) !****6***0*********0*********0*********0*********0*********0**********72 ! ! !USES: -#if defined ( SPMD ) - use parutilitiesmodule, only : parexchangevector -#endif use dynamics_vars, only : T_FVDYCORE_GRID use shr_kind_mod, only: r8 => shr_kind_r8 - use shr_reprosum_mod, only : shr_reprosum_calc, shr_reprosum_tolExceeded, & - shr_reprosum_reldiffmax, & - shr_reprosum_recompute + use shr_reprosum_mod, only : shr_reprosum_calc, shr_reprosum_tolExceeded use cam_logfile, only : iulog use FVperf_module, only : FVstartclock, FVstopclock @@ -51,68 +46,28 @@ subroutine par_xsum(grid, a, ltot, sum) !BOC ! !Local - real(r8), parameter :: D0_0 = 0.0_r8 - real(r8) :: rel_diff(2,ltot) - real(r8),allocatable :: l_a(:) - real(r8),allocatable :: a_tmp(:) - integer :: i,ipe,l,im,lim,nprxy_x,offset - integer :: sendcount(grid%nprxy_x) - integer :: recvcount(grid%nprxy_x) + integer :: im,lim logical :: write_warning + logical :: tol_exceeded im = grid%im lim = (grid%ilastxy-grid%ifirstxy) + 1 - nprxy_x = grid%nprxy_x - offset = grid%ifirstxy - 1 call FVstartclock(grid,'xsum_reprosum') call shr_reprosum_calc(a, sum, lim, lim, ltot, gbl_count=im, & commid=grid%commxy_x, rel_diff=rel_diff) call FVstopclock(grid,'xsum_reprosum') - ! check that "fast" reproducible sum is accurate enough. If not, calculate - ! using old method + ! Warn if the nonreproducible floating point check sum differs from the + ! integer vector sum by more than reprosum_diffmax. The integer vector sum is + ! exact, so the result is kept regardless. write_warning = .false. if (grid%myidxy_x == 0) write_warning = .true. - if ( shr_reprosum_tolExceeded('par_xsum', ltot, write_warning, & - iulog, rel_diff) ) then - if ( shr_reprosum_recompute ) then - call FVstartclock(grid,'xsum_sumfix') - allocate( l_a(lim*nprxy_x) ) - allocate( a_tmp(im) ) - sendcount(:) = lim - - do l=1,ltot - if (rel_diff(1,l) > shr_reprosum_reldiffmax) then - sum(l) = D0_0 -#if defined ( SPMD ) - do ipe=1,nprxy_x - do i=1,lim - l_a(i+(ipe-1)*lim) = a(i+offset,l) - enddo - enddo - call parexchangevector( grid%commxy_x, sendcount, l_a, & - recvcount, a_tmp ) - do i=1,im - sum(l) = sum(l) + a_tmp(i) - enddo -#else - do i=1,im - sum(l) = sum(l) + a(i,l) - enddo -#endif - endif - - enddo - - deallocate( a_tmp ) - deallocate( l_a ) - call FVstopclock(grid,'xsum_sumfix') - endif - endif + tol_exceeded = shr_reprosum_tolExceeded('par_xsum', ltot, write_warning, & + iulog, rel_diff) return !EOC @@ -129,14 +84,9 @@ subroutine par_xsum_r4(grid, a, ltot, sum) !****6***0*********0*********0*********0*********0*********0**********72 ! ! !USES: -#if defined ( SPMD ) - use parutilitiesmodule, only : parexchangevector -#endif use dynamics_vars, only : T_FVDYCORE_GRID use shr_kind_mod, only: r8 => shr_kind_r8, r4 => shr_kind_r4 - use shr_reprosum_mod, only : shr_reprosum_calc, shr_reprosum_tolExceeded, & - shr_reprosum_reldiffmax, & - shr_reprosum_recompute + use shr_reprosum_mod, only : shr_reprosum_calc, shr_reprosum_tolExceeded use cam_logfile, only : iulog use FVperf_module, only : FVstartclock, FVstopclock @@ -167,23 +117,16 @@ subroutine par_xsum_r4(grid, a, ltot, sum) !BOC ! !Local - real(r8), parameter :: D0_0 = 0.0_r8 - real(r8) :: a8(grid%ifirstxy:grid%ilastxy,ltot) real(r8) :: rel_diff(2,ltot) - real(r4),allocatable :: l_a(:) - real(r4),allocatable :: a_tmp(:) - integer i,ipe,l,im,lim,nprxy_x,offset - integer sendcount(grid%nprxy_x) - integer recvcount(grid%nprxy_x) + integer :: im,lim logical :: write_warning + logical :: tol_exceeded im = grid%im lim = (grid%ilastxy-grid%ifirstxy) + 1 - nprxy_x = grid%nprxy_x - offset = grid%ifirstxy - 1 call FVstartclock(grid,'xsum_r4_reprosum') a8(:,:) = a(:,:) @@ -191,46 +134,13 @@ subroutine par_xsum_r4(grid, a, ltot, sum) commid=grid%commxy_x, rel_diff=rel_diff) call FVstopclock(grid,'xsum_r4_reprosum') - ! check that "fast" reproducible sum is accurate enough. If not, calculate - ! using old method + ! Warn if the nonreproducible floating point check sum differs from the + ! integer vector sum by more than reprosum_diffmax. The integer vector sum is + ! exact, so the result is kept regardless. write_warning = .false. if (grid%myidxy_x == 0) write_warning = .true. - if ( shr_reprosum_tolExceeded('par_xsum_r4', ltot, write_warning, & - iulog, rel_diff) ) then - if ( shr_reprosum_recompute ) then - call FVstartclock(grid,'xsum_r4_sumfix') - allocate( l_a(lim*nprxy_x) ) - allocate( a_tmp(im) ) - sendcount(:) = lim - - do l=1,ltot - if (rel_diff(1,l) > shr_reprosum_reldiffmax) then - sum(l) = D0_0 -#if defined ( SPMD ) - do ipe=1,nprxy_x - do i=1,lim - l_a(i+(ipe-1)*lim) = a(i+offset,l) - enddo - enddo - call parexchangevector( grid%commxy_x, sendcount, l_a, & - recvcount, a_tmp ) - do i=1,im - sum(l) = sum(l) + a_tmp(i) - enddo -#else - do i=1,im - sum(l) = sum(l) + a(i,l) - enddo -#endif - endif - - enddo - - deallocate( a_tmp ) - deallocate( l_a ) - call FVstopclock(grid,'xsum_r4_sumfix') - endif - endif + tol_exceeded = shr_reprosum_tolExceeded('par_xsum_r4', ltot, write_warning, & + iulog, rel_diff) return !EOC diff --git a/src/utils/gmean_mod.F90 b/src/utils/gmean_mod.F90 index 2abbe369ed..eb01c3f675 100644 --- a/src/utils/gmean_mod.F90 +++ b/src/utils/gmean_mod.F90 @@ -8,18 +8,16 @@ module gmean_mod ! Reproducible (scalable): ! Convert to fixed point (integer representation) to enable ! reproducibility when using MPI collectives. - ! If error checking is on (via setting reprosum_diffmax > 0 and - ! reprosum_recompute = .true. in user_nl_cpl), shr_reprosum_calc will - ! check the accuracy of its computation with a fast but - ! non-reproducible algorithm. If any error is reported, report - ! the difference and the expected sum and abort run (call endrun) + ! If reprosum_diffmax >= 0 (user_nl_cpl), shr_reprosum_calc also forms a + ! fast nonreproducible sum and a warning is written when it differs + ! from the reproducible sum by more than that tolerance. The + ! reproducible sum is exact and is always the value returned. ! ! !----------------------------------------------------------------------- use shr_kind_mod, only: r8 => shr_kind_r8 use ppgrid, only: pcols, begchunk, endchunk use shr_reprosum_mod, only: shr_reprosum_calc, shr_reprosum_tolExceeded - use shr_reprosum_mod, only: shr_reprosum_reldiffmax, shr_reprosum_recompute use perf_mod, only: t_startf, t_stopf use cam_logfile, only: iulog @@ -36,7 +34,6 @@ module gmean_mod end interface gmean private :: gmean_fixed_repro - private :: gmean_float_norepro ! Set do_gmean_tests to .true. to run a gmean challenge test logical, private :: do_gmean_tests = .false. @@ -75,9 +72,7 @@ end subroutine gmean_init ! subroutine gmean_arr (arr, arr_gmean, nflds) - use shr_strconvert_mod, only: toString use spmd_utils, only: masterproc - use cam_abortutils, only: endrun !----------------------------------------------------------------------- ! ! Purpose: @@ -96,9 +91,8 @@ subroutine gmean_arr (arr, arr_gmean, nflds) ! Local workspace ! real(r8) :: rel_diff(2, nflds) - integer :: ifld ! field index - integer :: num_err logical :: write_warning + logical :: tol_exceeded ! !----------------------------------------------------------------------- ! @@ -107,25 +101,13 @@ subroutine gmean_arr (arr, arr_gmean, nflds) call gmean_fixed_repro(arr, arr_gmean, rel_diff, nflds) call t_stopf ('gmean_fixed_repro') - ! check that "fast" reproducible sum is accurate enough. If not, calculate - ! using old method + ! Warn if the nonreproducible floating point check sum differs from the + ! integer vector sum by more than reprosum_diffmax. The integer vector sum is + ! exact, so the result is kept regardless. write_warning = masterproc - num_err = 0 - if (shr_reprosum_tolExceeded('gmean', nflds, write_warning, & - iulog, rel_diff)) then - if (shr_reprosum_recompute) then - do ifld = 1, nflds - if (rel_diff(1, ifld) > shr_reprosum_reldiffmax) then - call gmean_float_norepro(arr(:,:,ifld), arr_gmean(ifld), ifld) - num_err = num_err + 1 - end if - end do - end if - end if + tol_exceeded = shr_reprosum_tolExceeded('gmean', nflds, write_warning, & + iulog, rel_diff) call t_stopf('gmean_arr') - if (num_err > 0) then - call endrun('gmean: '//toString(num_err)//' reprosum errors found') - end if end subroutine gmean_arr @@ -170,60 +152,6 @@ end subroutine gmean_scl !======================================================================== ! - subroutine gmean_float_norepro(arr, repro_sum, index) - !----------------------------------------------------------------------- - ! - ! Purpose: - ! Compute the global mean of in the physics chunked - ! decomposition using a fast but non-reproducible algorithm. - ! Log that value along with the value computed by - ! shr_reprosum_calc () - ! - !----------------------------------------------------------------------- - - use physconst, only: pi - use spmd_utils, only: masterproc, masterprocid, MPI_REAL8, MPI_SUM, mpicom - use phys_grid, only: get_ncols_p, get_wght_p - ! - ! Arguments - ! - real(r8), intent(in) :: arr(pcols, begchunk:endchunk) - real(r8), intent(in) :: repro_sum ! Value computed by reprosum - integer, intent(in) :: index ! Index of field in original call - ! - ! Local workspace - ! - integer :: lchnk, ncols, icol - integer :: ierr - real(r8) :: wght - real(r8) :: check - real(r8) :: check_sum - real(r8), parameter :: pi4 = 4.0_r8 * pi - - ! - !----------------------------------------------------------------------- - ! - ! Calculate and print out non-reproducible value - check = 0.0_r8 - do lchnk = begchunk, endchunk - ncols = get_ncols_p(lchnk) - do icol = 1, ncols - wght = get_wght_p(lchnk, icol) - check = check + arr(icol, lchnk) * wght - end do - end do - call MPI_reduce(check, check_sum, 1, MPI_REAL8, check_sum, MPI_SUM, & - masterprocid, mpicom, ierr) - if (masterproc) then - write(iulog, '(a,i0,2(a,e20.13e2))') 'gmean(', index, ') = ', & - check_sum / pi4, ', reprosum reported ', repro_sum - end if - - end subroutine gmean_float_norepro - - ! - !======================================================================== - ! subroutine gmean_fixed_repro (arr, arr_gmean, rel_diff, nflds) !----------------------------------------------------------------------- ! From 8c4bb6331d13c52142735dd0c43a2244ba5c7904 Mon Sep 17 00:00:00 2001 From: Haipeng Lin Date: Mon, 5 Oct 2026 11:15:25 -0400 Subject: [PATCH 2/2] Remove all reprosum_recompute=.true. as they are no-ops now Assisted-by: claude-fable:5.1 --- cime_config/testdefs/testmods_dirs/cam/cam4_port/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/cam4_port5d/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/cam5_port_f45/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/cam5_port_ne30/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/cam6_port_f09/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/carma_dust/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_meteor_impact/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_meteor_smoke/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_mixed_sulfate/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/carma_pmc/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_sea_salt/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/carma_sulfate/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_test_growth/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_test_passive/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_test_radiative/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_test_swelling/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_test_tracers/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/carma_test_tracers2/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/co2rmp/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/dartcambigens/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/fire_emis/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/nudging/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/outfrq1d_amie/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/outfrq1d_newyear/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/outfrq24h_port/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/outfrq3s_aqw/user_nl_cpl | 1 - .../testmods_dirs/cam/outfrq3s_nudging_f10_L26/user_nl_cpl | 1 - .../testmods_dirs/cam/outfrq3s_nudging_ne5_L26/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/outfrq3s_sathist/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/outfrq3s_subcol/user_nl_cpl | 1 - .../testmods_dirs/cam/outfrq3s_zmean_nudging/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/outfrq9s_clubbmf/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/outfrq9s_kessler/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/outfrq9s_ocnemis/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/reduced_hist5d/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/scm_prep/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/scm_prep_c6/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/scmarm/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/ttrac_loadbal0/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/ttrac_loadbal1/user_nl_cpl | 1 - .../testdefs/testmods_dirs/cam/ttrac_loadbal3/user_nl_cpl | 1 - cime_config/testdefs/testmods_dirs/cam/waccmx_weimer/user_nl_cpl | 1 - 42 files changed, 42 deletions(-) diff --git a/cime_config/testdefs/testmods_dirs/cam/cam4_port/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/cam4_port/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/cam4_port/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/cam4_port/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/cam4_port5d/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/cam4_port5d/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/cam4_port5d/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/cam4_port5d/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/cam5_port_f45/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/cam5_port_f45/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/cam5_port_f45/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/cam5_port_f45/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/cam5_port_ne30/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/cam5_port_ne30/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/cam5_port_ne30/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/cam5_port_ne30/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/cam6_port_f09/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/cam6_port_f09/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/cam6_port_f09/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/cam6_port_f09/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_dust/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_dust/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_dust/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_dust/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_meteor_impact/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_meteor_impact/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_meteor_impact/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_meteor_impact/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_meteor_smoke/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_meteor_smoke/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_meteor_smoke/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_meteor_smoke/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_mixed_sulfate/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_mixed_sulfate/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_mixed_sulfate/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_mixed_sulfate/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_pmc/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_pmc/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_pmc/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_pmc/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_sea_salt/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_sea_salt/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_sea_salt/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_sea_salt/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_sulfate/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_sulfate/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_sulfate/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_sulfate/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_test_growth/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_test_growth/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_test_growth/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_test_growth/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_test_passive/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_test_passive/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_test_passive/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_test_passive/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_test_radiative/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_test_radiative/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_test_radiative/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_test_radiative/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_test_swelling/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_test_swelling/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_test_swelling/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_test_swelling/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_test_tracers/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_test_tracers/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_test_tracers/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_test_tracers/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/carma_test_tracers2/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/carma_test_tracers2/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/carma_test_tracers2/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/carma_test_tracers2/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/co2rmp/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/co2rmp/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/co2rmp/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/co2rmp/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/dartcambigens/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/dartcambigens/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/dartcambigens/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/dartcambigens/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/fire_emis/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/fire_emis/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/fire_emis/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/fire_emis/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/nudging/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/nudging/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/nudging/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/nudging/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq1d_amie/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_amie/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq1d_amie/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_amie/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq1d_newyear/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_newyear/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq1d_newyear/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq1d_newyear/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq24h_port/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq24h_port/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq24h_port/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq24h_port/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_aqw/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_aqw/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_aqw/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_aqw/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_nudging_f10_L26/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_nudging_f10_L26/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_nudging_f10_L26/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_nudging_f10_L26/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_nudging_ne5_L26/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_nudging_ne5_L26/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_nudging_ne5_L26/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_nudging_ne5_L26/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_sathist/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_sathist/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_sathist/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_sathist/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_subcol/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_subcol/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_subcol/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_subcol/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_zmean_nudging/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_zmean_nudging/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq3s_zmean_nudging/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq3s_zmean_nudging/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_clubbmf/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_clubbmf/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_clubbmf/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_clubbmf/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_kessler/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_kessler/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_kessler/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_kessler/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_ocnemis/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_ocnemis/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/outfrq9s_ocnemis/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/outfrq9s_ocnemis/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/reduced_hist5d/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/reduced_hist5d/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/reduced_hist5d/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/reduced_hist5d/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/scm_prep/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/scm_prep/user_nl_cpl index 3d0b5a3ee9..b18e7c2e5b 100644 --- a/cime_config/testdefs/testmods_dirs/cam/scm_prep/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/scm_prep/user_nl_cpl @@ -5,4 +5,3 @@ orb_obliq = 1.e36 orb_mvelp = 1.e36 orb_mode = "fixed_year" reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/scm_prep_c6/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/scm_prep_c6/user_nl_cpl index 3d0b5a3ee9..b18e7c2e5b 100644 --- a/cime_config/testdefs/testmods_dirs/cam/scm_prep_c6/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/scm_prep_c6/user_nl_cpl @@ -5,4 +5,3 @@ orb_obliq = 1.e36 orb_mvelp = 1.e36 orb_mode = "fixed_year" reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/scmarm/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/scmarm/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/scmarm/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/scmarm/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal0/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal0/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal0/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal0/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal1/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal1/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal1/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal1/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal3/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal3/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal3/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/ttrac_loadbal3/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true. diff --git a/cime_config/testdefs/testmods_dirs/cam/waccmx_weimer/user_nl_cpl b/cime_config/testdefs/testmods_dirs/cam/waccmx_weimer/user_nl_cpl index 398535cf65..ba3eb1b4b7 100644 --- a/cime_config/testdefs/testmods_dirs/cam/waccmx_weimer/user_nl_cpl +++ b/cime_config/testdefs/testmods_dirs/cam/waccmx_weimer/user_nl_cpl @@ -1,2 +1 @@ reprosum_diffmax=1.0e-14 -reprosum_recompute=.true.