Skip to content

Commit 2579d07

Browse files
Merge pull request #4 from gustavo-marques/less_checksums_mct_nuopc
Only write checksums from root PE MCT/NUOPC caps
2 parents 09173f7 + 66ac810 commit 2579d07

4 files changed

Lines changed: 108 additions & 82 deletions

File tree

config_src/drivers/mct_cap/mom_ocean_model_mct.F90

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module MOM_ocean_model_mct
1515
use MOM, only : extract_surface_state, allocate_surface_state, finish_MOM_initialization
1616
use MOM, only : get_MOM_state_elements, MOM_state_is_synchronized
1717
use MOM, only : get_ocean_stocks, step_offline
18+
use MOM_coms, only : field_chksum
1819
use MOM_constants, only : CELSIUS_KELVIN_OFFSET, hlf
1920
use MOM_diag_mediator, only : diag_ctrl, enable_averaging, disable_averaging
2021
use MOM_diag_mediator, only : diag_mediator_close_registration, diag_mediator_end
@@ -65,6 +66,7 @@ module MOM_ocean_model_mct
6566

6667
! MCT specfic routines
6768
use MOM_domains, only : MOM_infra_end
69+
use iso_fortran_env, only : int64
6870

6971
#include <MOM_memory.h>
7072

@@ -1042,24 +1044,26 @@ subroutine Ocean_stock_pe(OS, index, value, time_index)
10421044

10431045
end subroutine Ocean_stock_pe
10441046

1045-
!> Write out FMS-format checsums on fields from the ocean surface state
1047+
!> Write out checksums for fields from the ocean surface state
10461048
subroutine ocean_public_type_chksum(id, timestep, ocn)
10471049

10481050
character(len=*), intent(in) :: id !< An identifying string for this call
10491051
integer, intent(in) :: timestep !< The number of elapsed timesteps
10501052
type(ocean_public_type), intent(in) :: ocn !< A structure containing various publicly
10511053
!! visible ocean surface fields.
1052-
integer :: n, m
1053-
1054-
write(stdout,*) "BEGIN CHECKSUM(ocean_type):: ", id, timestep
1055-
write(stdout,100) 'ocean%t_surf ',mpp_chksum(ocn%t_surf )
1056-
write(stdout,100) 'ocean%s_surf ',mpp_chksum(ocn%s_surf )
1057-
write(stdout,100) 'ocean%u_surf ',mpp_chksum(ocn%u_surf )
1058-
write(stdout,100) 'ocean%v_surf ',mpp_chksum(ocn%v_surf )
1059-
write(stdout,100) 'ocean%sea_lev ',mpp_chksum(ocn%sea_lev)
1060-
write(stdout,100) 'ocean%frazil ',mpp_chksum(ocn%frazil )
1061-
write(stdout,100) 'ocean%melt_potential ',mpp_chksum(ocn%melt_potential)
1062-
1054+
! Local variables
1055+
integer(kind=int64) :: chks ! A checksum for the field
1056+
logical :: root ! True only on the root PE
1057+
integer :: outunit ! The output unit to write to
1058+
1059+
if (root) write(outunit,*) "BEGIN CHECKSUM(ocean_type):: ", id, timestep
1060+
chks = field_chksum(ocn%t_surf ) ; if (root) write(outunit,100) 'ocean%t_surf ', chks
1061+
chks = field_chksum(ocn%s_surf ) ; if (root) write(outunit,100) 'ocean%s_surf ', chks
1062+
chks = field_chksum(ocn%u_surf ) ; if (root) write(outunit,100) 'ocean%u_surf ', chks
1063+
chks = field_chksum(ocn%v_surf ) ; if (root) write(outunit,100) 'ocean%v_surf ', chks
1064+
chks = field_chksum(ocn%sea_lev) ; if (root) write(outunit,100) 'ocean%sea_lev ', chks
1065+
chks = field_chksum(ocn%frazil ) ; if (root) write(outunit,100) 'ocean%frazil ', chks
1066+
chks = field_chksum(ocn%melt_potential) ; if (root) write(outunit,100) 'ocean%melt_potential ', chks
10631067
call coupler_type_write_chksums(ocn%fields, stdout, 'ocean%')
10641068
100 FORMAT(" CHECKSUM::",A20," = ",Z20)
10651069

config_src/drivers/mct_cap/mom_surface_forcing_mct.F90

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module MOM_surface_forcing_mct
22

33
! This file is part of MOM6. See LICENSE.md for the license.
44

5-
use MOM_coms, only : reproducing_sum
5+
use MOM_coms, only : reproducing_sum, field_chksum
66
use MOM_constants, only : hlv, hlf
77
use MOM_cpu_clock, only : cpu_clock_id, cpu_clock_begin, cpu_clock_end
88
use MOM_cpu_clock, only : CLOCK_SUBCOMPONENT
@@ -37,7 +37,8 @@ module MOM_surface_forcing_mct
3737
use mpp_mod, only : mpp_chksum
3838
use time_interp_external_mod, only : init_external_field, time_interp_external
3939
use time_interp_external_mod, only : time_interp_external_init
40-
use MOM_io, only: stdout
40+
use MOM_io, only : stdout
41+
use iso_fortran_env, only : int64
4142

4243
implicit none ; private
4344

@@ -1361,32 +1362,40 @@ subroutine ice_ocn_bnd_type_chksum(id, timestep, iobt)
13611362
!! ocean in a coupled model whose checksums are reported
13621363

13631364
! local variables
1364-
integer :: n,m
1365-
1366-
write(stdout,*) "BEGIN CHECKSUM(ice_ocean_boundary_type):: ", id, timestep
1367-
write(stdout,100) 'iobt%u_flux ' , mpp_chksum( iobt%u_flux )
1368-
write(stdout,100) 'iobt%v_flux ' , mpp_chksum( iobt%v_flux )
1369-
write(stdout,100) 'iobt%t_flux ' , mpp_chksum( iobt%t_flux )
1370-
write(stdout,100) 'iobt%q_flux ' , mpp_chksum( iobt%q_flux )
1371-
write(stdout,100) 'iobt%salt_flux ' , mpp_chksum( iobt%salt_flux )
1372-
write(stdout,100) 'iobt%seaice_melt_heat' , mpp_chksum( iobt%seaice_melt_heat)
1373-
write(stdout,100) 'iobt%seaice_melt ' , mpp_chksum( iobt%seaice_melt )
1374-
write(stdout,100) 'iobt%lw_flux ' , mpp_chksum( iobt%lw_flux )
1375-
write(stdout,100) 'iobt%sw_flux_vis_dir' , mpp_chksum( iobt%sw_flux_vis_dir)
1376-
write(stdout,100) 'iobt%sw_flux_vis_dif' , mpp_chksum( iobt%sw_flux_vis_dif)
1377-
write(stdout,100) 'iobt%sw_flux_nir_dir' , mpp_chksum( iobt%sw_flux_nir_dir)
1378-
write(stdout,100) 'iobt%sw_flux_nir_dif' , mpp_chksum( iobt%sw_flux_nir_dif)
1379-
write(stdout,100) 'iobt%lprec ' , mpp_chksum( iobt%lprec )
1380-
write(stdout,100) 'iobt%fprec ' , mpp_chksum( iobt%fprec )
1381-
write(stdout,100) 'iobt%runoff ' , mpp_chksum( iobt%runoff )
1382-
write(stdout,100) 'iobt%calving ' , mpp_chksum( iobt%calving )
1383-
write(stdout,100) 'iobt%p ' , mpp_chksum( iobt%p )
1384-
if (associated(iobt%ustar_berg)) &
1385-
write(stdout,100) 'iobt%ustar_berg ' , mpp_chksum( iobt%ustar_berg )
1386-
if (associated(iobt%area_berg)) &
1387-
write(stdout,100) 'iobt%area_berg ' , mpp_chksum( iobt%area_berg )
1388-
if (associated(iobt%mass_berg)) &
1389-
write(stdout,100) 'iobt%mass_berg ' , mpp_chksum( iobt%mass_berg )
1365+
integer(kind=int64) :: chks ! A checksum for the field
1366+
logical :: root ! True only on the root PE
1367+
integer :: outunit ! The output unit to write to
1368+
1369+
outunit = stdout
1370+
root = is_root_pe()
1371+
1372+
if (root) write(outunit,*) "BEGIN CHECKSUM(ice_ocean_boundary_type):: ", id, timestep
1373+
chks = field_chksum( iobt%u_flux ) ; if (root) write(outunit,100) 'iobt%u_flux ', chks
1374+
chks = field_chksum( iobt%v_flux ) ; if (root) write(outunit,100) 'iobt%v_flux ', chks
1375+
chks = field_chksum( iobt%t_flux ) ; if (root) write(outunit,100) 'iobt%t_flux ', chks
1376+
chks = field_chksum( iobt%q_flux ) ; if (root) write(outunit,100) 'iobt%q_flux ', chks
1377+
chks = field_chksum( iobt%seaice_melt_heat); if (root) write(outunit,100) 'iobt%seaice_melt_heat', chks
1378+
chks = field_chksum( iobt%seaice_melt) ; if (root) write(outunit,100) 'iobt%seaice_melt ', chks
1379+
chks = field_chksum( iobt%salt_flux ) ; if (root) write(outunit,100) 'iobt%salt_flux ', chks
1380+
chks = field_chksum( iobt%lw_flux ) ; if (root) write(outunit,100) 'iobt%lw_flux ', chks
1381+
chks = field_chksum( iobt%sw_flux_vis_dir) ; if (root) write(outunit,100) 'iobt%sw_flux_vis_dir', chks
1382+
chks = field_chksum( iobt%sw_flux_vis_dif) ; if (root) write(outunit,100) 'iobt%sw_flux_vis_dif', chks
1383+
chks = field_chksum( iobt%sw_flux_nir_dir) ; if (root) write(outunit,100) 'iobt%sw_flux_nir_dir', chks
1384+
chks = field_chksum( iobt%sw_flux_nir_dif) ; if (root) write(outunit,100) 'iobt%sw_flux_nir_dif', chks
1385+
chks = field_chksum( iobt%lprec ) ; if (root) write(outunit,100) 'iobt%lprec ', chks
1386+
chks = field_chksum( iobt%fprec ) ; if (root) write(outunit,100) 'iobt%fprec ', chks
1387+
chks = field_chksum( iobt%rofl_flux ) ; if (root) write(outunit,100) 'rofl_flux ', chks
1388+
chks = field_chksum( iobt%rofi_flux ) ; if (root) write(outunit,100) 'rofi_flux ', chks
1389+
chks = field_chksum( iobt%p ) ; if (root) write(outunit,100) 'iobt%p ', chks
1390+
if (associated(iobt%ustar_berg)) then
1391+
chks = field_chksum( iobt%ustar_berg ) ; if (root) write(outunit,100) 'iobt%ustar_berg ', chks
1392+
endif
1393+
if (associated(iobt%area_berg)) then
1394+
chks = field_chksum( iobt%area_berg ) ; if (root) write(outunit,100) 'iobt%area_berg ', chks
1395+
endif
1396+
if (associated(iobt%mass_berg)) then
1397+
chks = field_chksum( iobt%mass_berg ) ; if (root) write(outunit,100) 'iobt%mass_berg ', chks
1398+
endif
13901399
100 FORMAT(" CHECKSUM::",A20," = ",Z20)
13911400

13921401
call coupler_type_write_chksums(iobt%fluxes, stdout, 'iobt%')

config_src/drivers/nuopc_cap/mom_ocean_model_nuopc.F90

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module MOM_ocean_model_nuopc
1515
use MOM, only : extract_surface_state, allocate_surface_state, finish_MOM_initialization
1616
use MOM, only : get_MOM_state_elements, MOM_state_is_synchronized
1717
use MOM, only : get_ocean_stocks, step_offline
18+
use MOM_coms, only : field_chksum
1819
use MOM_constants, only : CELSIUS_KELVIN_OFFSET, hlf
1920
use MOM_diag_mediator, only : diag_ctrl, enable_averaging, disable_averaging
2021
use MOM_diag_mediator, only : diag_mediator_close_registration, diag_mediator_end
@@ -62,6 +63,7 @@ module MOM_ocean_model_nuopc
6263
use MOM_surface_forcing_nuopc, only : convert_IOB_to_forces, ice_ocn_bnd_type_chksum
6364
use MOM_surface_forcing_nuopc, only : ice_ocean_boundary_type, surface_forcing_CS
6465
use MOM_surface_forcing_nuopc, only : forcing_save_restart
66+
use iso_fortran_env, only : int64
6567

6668
#include <MOM_memory.h>
6769

@@ -1045,26 +1047,29 @@ subroutine Ocean_stock_pe(OS, index, value, time_index)
10451047

10461048
end subroutine Ocean_stock_pe
10471049

1048-
!> Write out FMS-format checsums on fields from the ocean surface state
1050+
!> Write out checksums for fields from the ocean surface state
10491051
subroutine ocean_public_type_chksum(id, timestep, ocn)
10501052

10511053
character(len=*), intent(in) :: id !< An identifying string for this call
10521054
integer, intent(in) :: timestep !< The number of elapsed timesteps
10531055
type(ocean_public_type), intent(in) :: ocn !< A structure containing various publicly
10541056
!! visible ocean surface fields.
1055-
integer :: n, m, outunit
1057+
! Local variables
1058+
integer(kind=int64) :: chks ! A checksum for the field
1059+
logical :: root ! True only on the root PE
1060+
integer :: outunit ! The output unit to write to
10561061

10571062
outunit = stdout()
1058-
1059-
write(outunit,*) "BEGIN CHECKSUM(ocean_type):: ", id, timestep
1060-
write(outunit,100) 'ocean%t_surf ',mpp_chksum(ocn%t_surf )
1061-
write(outunit,100) 'ocean%s_surf ',mpp_chksum(ocn%s_surf )
1062-
write(outunit,100) 'ocean%u_surf ',mpp_chksum(ocn%u_surf )
1063-
write(outunit,100) 'ocean%v_surf ',mpp_chksum(ocn%v_surf )
1064-
write(outunit,100) 'ocean%sea_lev ',mpp_chksum(ocn%sea_lev)
1065-
write(outunit,100) 'ocean%frazil ',mpp_chksum(ocn%frazil )
1066-
write(outunit,100) 'ocean%melt_potential ',mpp_chksum(ocn%melt_potential)
1067-
1063+
root = is_root_pe()
1064+
1065+
if (root) write(outunit,*) "BEGIN CHECKSUM(ocean_type):: ", id, timestep
1066+
chks = field_chksum(ocn%t_surf ) ; if (root) write(outunit,100) 'ocean%t_surf ', chks
1067+
chks = field_chksum(ocn%s_surf ) ; if (root) write(outunit,100) 'ocean%s_surf ', chks
1068+
chks = field_chksum(ocn%u_surf ) ; if (root) write(outunit,100) 'ocean%u_surf ', chks
1069+
chks = field_chksum(ocn%v_surf ) ; if (root) write(outunit,100) 'ocean%v_surf ', chks
1070+
chks = field_chksum(ocn%sea_lev) ; if (root) write(outunit,100) 'ocean%sea_lev ', chks
1071+
chks = field_chksum(ocn%frazil ) ; if (root) write(outunit,100) 'ocean%frazil ', chks
1072+
chks = field_chksum(ocn%melt_potential) ; if (root) write(outunit,100) 'ocean%melt_potential ', chks
10681073
call coupler_type_write_chksums(ocn%fields, outunit, 'ocean%')
10691074
100 FORMAT(" CHECKSUM::",A20," = ",Z20)
10701075

config_src/drivers/nuopc_cap/mom_surface_forcing_nuopc.F90

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module MOM_surface_forcing_nuopc
33

44
! This file is part of MOM6. See LICENSE.md for the license.
55

6-
use MOM_coms, only : reproducing_sum
6+
use MOM_coms, only : reproducing_sum, field_chksum
77
use MOM_constants, only : hlv, hlf
88
use MOM_cpu_clock, only : cpu_clock_id, cpu_clock_begin, cpu_clock_end
99
use MOM_cpu_clock, only : CLOCK_SUBCOMPONENT
@@ -22,6 +22,7 @@ module MOM_surface_forcing_nuopc
2222
use MOM_get_input, only : Get_MOM_Input, directories
2323
use MOM_grid, only : ocean_grid_type
2424
use MOM_io, only : slasher, write_version_number, MOM_read_data
25+
use MOM_io, only : stdout
2526
use MOM_restart, only : register_restart_field, restart_init, MOM_restart_CS
2627
use MOM_restart, only : restart_init_end, save_restart, restore_state
2728
use MOM_string_functions, only : uppercase
@@ -35,10 +36,10 @@ module MOM_surface_forcing_nuopc
3536
use coupler_types_mod, only : coupler_type_initialized, coupler_type_spawn
3637
use coupler_types_mod, only : coupler_type_copy_data
3738
use data_override_mod, only : data_override_init, data_override
38-
use fms_mod, only : stdout
3939
use mpp_mod, only : mpp_chksum
4040
use time_interp_external_mod, only : init_external_field, time_interp_external
4141
use time_interp_external_mod, only : time_interp_external_init
42+
use iso_fortran_env, only : int64
4243

4344
implicit none ; private
4445

@@ -1400,34 +1401,41 @@ subroutine ice_ocn_bnd_type_chksum(id, timestep, iobt)
14001401
!! ocean in a coupled model whose checksums are reported
14011402

14021403
! local variables
1403-
integer :: n,m, outunit
1404-
1405-
outunit = stdout()
1406-
1407-
write(outunit,*) "BEGIN CHECKSUM(ice_ocean_boundary_type):: ", id, timestep
1408-
write(outunit,100) 'iobt%u_flux ' , mpp_chksum( iobt%u_flux )
1409-
write(outunit,100) 'iobt%v_flux ' , mpp_chksum( iobt%v_flux )
1410-
write(outunit,100) 'iobt%t_flux ' , mpp_chksum( iobt%t_flux )
1411-
write(outunit,100) 'iobt%q_flux ' , mpp_chksum( iobt%q_flux )
1412-
write(outunit,100) 'iobt%salt_flux ' , mpp_chksum( iobt%salt_flux )
1413-
write(outunit,100) 'iobt%seaice_melt_heat' , mpp_chksum( iobt%seaice_melt_heat)
1414-
write(outunit,100) 'iobt%seaice_melt ' , mpp_chksum( iobt%seaice_melt )
1415-
write(outunit,100) 'iobt%lw_flux ' , mpp_chksum( iobt%lw_flux )
1416-
write(outunit,100) 'iobt%sw_flux_vis_dir' , mpp_chksum( iobt%sw_flux_vis_dir)
1417-
write(outunit,100) 'iobt%sw_flux_vis_dif' , mpp_chksum( iobt%sw_flux_vis_dif)
1418-
write(outunit,100) 'iobt%sw_flux_nir_dir' , mpp_chksum( iobt%sw_flux_nir_dir)
1419-
write(outunit,100) 'iobt%sw_flux_nir_dif' , mpp_chksum( iobt%sw_flux_nir_dif)
1420-
write(outunit,100) 'iobt%lprec ' , mpp_chksum( iobt%lprec )
1421-
write(outunit,100) 'iobt%fprec ' , mpp_chksum( iobt%fprec )
1422-
write(outunit,100) 'iobt%lrunoff ' , mpp_chksum( iobt%lrunoff )
1423-
write(outunit,100) 'iobt%frunoff ' , mpp_chksum( iobt%frunoff )
1424-
write(outunit,100) 'iobt%p ' , mpp_chksum( iobt%p )
1425-
if (associated(iobt%ustar_berg)) &
1426-
write(outunit,100) 'iobt%ustar_berg ' , mpp_chksum( iobt%ustar_berg )
1427-
if (associated(iobt%area_berg)) &
1428-
write(outunit,100) 'iobt%area_berg ' , mpp_chksum( iobt%area_berg )
1429-
if (associated(iobt%mass_berg)) &
1430-
write(outunit,100) 'iobt%mass_berg ' , mpp_chksum( iobt%mass_berg )
1404+
! Local variables
1405+
integer(kind=int64) :: chks ! A checksum for the field
1406+
logical :: root ! True only on the root PE
1407+
integer :: outunit ! The output unit to write to
1408+
1409+
outunit = stdout
1410+
root = is_root_pe()
1411+
1412+
if (root) write(outunit,*) "BEGIN CHECKSUM(ice_ocean_boundary_type):: ", id, timestep
1413+
chks = field_chksum( iobt%u_flux ) ; if (root) write(outunit,100) 'iobt%u_flux ', chks
1414+
chks = field_chksum( iobt%v_flux ) ; if (root) write(outunit,100) 'iobt%v_flux ', chks
1415+
chks = field_chksum( iobt%t_flux ) ; if (root) write(outunit,100) 'iobt%t_flux ', chks
1416+
chks = field_chksum( iobt%q_flux ) ; if (root) write(outunit,100) 'iobt%q_flux ', chks
1417+
chks = field_chksum( iobt%seaice_melt_heat); if (root) write(outunit,100) 'iobt%seaice_melt_heat', chks
1418+
chks = field_chksum( iobt%seaice_melt) ; if (root) write(outunit,100) 'iobt%seaice_melt ', chks
1419+
chks = field_chksum( iobt%salt_flux ) ; if (root) write(outunit,100) 'iobt%salt_flux ', chks
1420+
chks = field_chksum( iobt%lw_flux ) ; if (root) write(outunit,100) 'iobt%lw_flux ', chks
1421+
chks = field_chksum( iobt%sw_flux_vis_dir) ; if (root) write(outunit,100) 'iobt%sw_flux_vis_dir', chks
1422+
chks = field_chksum( iobt%sw_flux_vis_dif) ; if (root) write(outunit,100) 'iobt%sw_flux_vis_dif', chks
1423+
chks = field_chksum( iobt%sw_flux_nir_dir) ; if (root) write(outunit,100) 'iobt%sw_flux_nir_dir', chks
1424+
chks = field_chksum( iobt%sw_flux_nir_dif) ; if (root) write(outunit,100) 'iobt%sw_flux_nir_dif', chks
1425+
chks = field_chksum( iobt%lprec ) ; if (root) write(outunit,100) 'iobt%lprec ', chks
1426+
chks = field_chksum( iobt%fprec ) ; if (root) write(outunit,100) 'iobt%fprec ', chks
1427+
chks = field_chksum( iobt%lrunoff ) ; if (root) write(outunit,100) 'iobt%lrunoff ', chks
1428+
chks = field_chksum( iobt%frunoff ) ; if (root) write(outunit,100) 'iobt%frunoff ', chks
1429+
chks = field_chksum( iobt%p ) ; if (root) write(outunit,100) 'iobt%p ', chks
1430+
if (associated(iobt%ustar_berg)) then
1431+
chks = field_chksum( iobt%ustar_berg ) ; if (root) write(outunit,100) 'iobt%ustar_berg ', chks
1432+
endif
1433+
if (associated(iobt%area_berg)) then
1434+
chks = field_chksum( iobt%area_berg ) ; if (root) write(outunit,100) 'iobt%area_berg ', chks
1435+
endif
1436+
if (associated(iobt%mass_berg)) then
1437+
chks = field_chksum( iobt%mass_berg ) ; if (root) write(outunit,100) 'iobt%mass_berg ', chks
1438+
endif
14311439
100 FORMAT(" CHECKSUM::",A20," = ",Z20)
14321440

14331441
call coupler_type_write_chksums(iobt%fluxes, outunit, 'iobt%')

0 commit comments

Comments
 (0)