diff --git a/src/initialization/MOM_shared_initialization.F90 b/src/initialization/MOM_shared_initialization.F90 index b135f29d16..3ea2dcfe5f 100644 --- a/src/initialization/MOM_shared_initialization.F90 +++ b/src/initialization/MOM_shared_initialization.F90 @@ -4,7 +4,7 @@ module MOM_shared_initialization ! This file is part of MOM6. See LICENSE.md for the license. -use MOM_coms, only : max_across_PEs +use MOM_coms, only : max_across_PEs, reproducing_sum use MOM_domains, only : pass_var, pass_vector, sum_across_PEs, broadcast use MOM_domains, only : root_PE, To_All, SCALAR_PAIR, CGRID_NE, AGRID use MOM_dyn_horgrid, only : dyn_horgrid_type @@ -1044,13 +1044,15 @@ subroutine compute_global_grid_integrals(G) type(dyn_horgrid_type), intent(inout) :: G !< The dynamic horizontal grid ! Subroutine to pre-compute global integrals of grid quantities for ! later use in reporting diagnostics + real, dimension(G%isc:G%iec, G%jsc:G%jec) :: tmpForSumming integer :: i,j + tmpForSumming(:,:) = 0. G%areaT_global = 0.0 ; G%IareaT_global = 0.0 do j=G%jsc,G%jec ; do i=G%isc,G%iec - G%areaT_global = G%areaT_global + ( G%areaT(i,j) * G%mask2dT(i,j) ) + tmpForSumming(i,j) = G%areaT(i,j) * G%mask2dT(i,j) enddo ; enddo - call sum_across_PEs( G%areaT_global ) + G%areaT_global = reproducing_sum(tmpForSumming) if (G%areaT_global == 0.0) & call MOM_error(FATAL, "compute_global_grid_integrals: "//& diff --git a/src/initialization/MOM_state_initialization.F90 b/src/initialization/MOM_state_initialization.F90 index 5e7acc6890..dbf63c5442 100644 --- a/src/initialization/MOM_state_initialization.F90 +++ b/src/initialization/MOM_state_initialization.F90 @@ -4,7 +4,7 @@ module MOM_state_initialization ! This file is part of MOM6. See LICENSE.md for the license. use MOM_debugging, only : hchksum, qchksum, uvchksum -use MOM_coms, only : max_across_PEs, min_across_PEs +use MOM_coms, only : max_across_PEs, min_across_PEs, reproducing_sum use MOM_cpu_clock, only : cpu_clock_id, cpu_clock_begin, cpu_clock_end use MOM_cpu_clock, only : CLOCK_ROUTINE, CLOCK_LOOP use MOM_domains, only : pass_var, pass_vector, sum_across_PEs, broadcast @@ -1560,13 +1560,15 @@ subroutine compute_global_grid_integrals(G) type(ocean_grid_type), intent(inout) :: G ! Subroutine to pre-compute global integrals of grid quantities for ! later use in reporting diagnostics + real, dimension(G%isc:G%iec, G%jsc:G%jec) :: tmpForSumming integer :: i,j + tmpForSumming(:,:) = 0. G%areaT_global = 0.0 ; G%IareaT_global = 0.0 do j=G%jsc,G%jec ; do i=G%isc,G%iec - G%areaT_global = G%areaT_global + ( G%areaT(i,j) * G%mask2dT(i,j) ) + tmpForSumming(i,j) = G%areaT(i,j) * G%mask2dT(i,j) enddo ; enddo - call sum_across_PEs( G%areaT_global ) + G%areaT_global = reproducing_sum(tmpForSumming) G%IareaT_global = 1. / G%areaT_global end subroutine compute_global_grid_integrals