From bee6aefbfc02c337ebb4202dbd35d10344735f7b Mon Sep 17 00:00:00 2001 From: John Krasting Date: Wed, 12 Apr 2017 11:56:46 -0400 Subject: [PATCH 1/2] G%areaT_global calculation with reproducing_sum() - global area calculations were previously done with the non-reproducing sum_across_PEs(). - Switched to using reproducing_sum() --- src/initialization/MOM_shared_initialization.F90 | 8 +++++--- src/initialization/MOM_state_initialization.F90 | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/initialization/MOM_shared_initialization.F90 b/src/initialization/MOM_shared_initialization.F90 index b135f29d16..71fbcaaed7 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_global + ( 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..d22de6072f 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_global + ( 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 From bd47428ec0c9a6b219f9ef6d0c52aaefb96bac62 Mon Sep 17 00:00:00 2001 From: John Krasting Date: Wed, 12 Apr 2017 14:38:00 -0400 Subject: [PATCH 2/2] Removed redundant addition in tmpForSumming array - Removed addition of G%areaT_global, which was set to zero at the time of addition - Removed trailing blanks --- src/initialization/MOM_shared_initialization.F90 | 4 ++-- src/initialization/MOM_state_initialization.F90 | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/initialization/MOM_shared_initialization.F90 b/src/initialization/MOM_shared_initialization.F90 index 71fbcaaed7..3ea2dcfe5f 100644 --- a/src/initialization/MOM_shared_initialization.F90 +++ b/src/initialization/MOM_shared_initialization.F90 @@ -1044,13 +1044,13 @@ 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 + 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 - tmpForSumming(i,j) = G%areaT_global + ( G%areaT(i,j) * G%mask2dT(i,j) ) + tmpForSumming(i,j) = G%areaT(i,j) * G%mask2dT(i,j) enddo ; enddo G%areaT_global = reproducing_sum(tmpForSumming) diff --git a/src/initialization/MOM_state_initialization.F90 b/src/initialization/MOM_state_initialization.F90 index d22de6072f..dbf63c5442 100644 --- a/src/initialization/MOM_state_initialization.F90 +++ b/src/initialization/MOM_state_initialization.F90 @@ -1560,15 +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 + 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 - tmpForSumming(i,j) = G%areaT_global + ( G%areaT(i,j) * G%mask2dT(i,j) ) + tmpForSumming(i,j) = G%areaT(i,j) * G%mask2dT(i,j) enddo ; enddo - G%areaT_global = reproducing_sum(tmpForSumming) + G%areaT_global = reproducing_sum(tmpForSumming) G%IareaT_global = 1. / G%areaT_global end subroutine compute_global_grid_integrals