@@ -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
77use MOM_constants, only : hlv, hlf
88use MOM_cpu_clock, only : cpu_clock_id, cpu_clock_begin, cpu_clock_end
99use MOM_cpu_clock, only : CLOCK_SUBCOMPONENT
@@ -22,6 +22,7 @@ module MOM_surface_forcing_nuopc
2222use MOM_get_input, only : Get_MOM_Input, directories
2323use MOM_grid, only : ocean_grid_type
2424use MOM_io, only : slasher, write_version_number, MOM_read_data
25+ use MOM_io, only : stdout
2526use MOM_restart, only : register_restart_field, restart_init, MOM_restart_CS
2627use MOM_restart, only : restart_init_end, save_restart, restore_state
2728use MOM_string_functions, only : uppercase
@@ -35,10 +36,10 @@ module MOM_surface_forcing_nuopc
3536use coupler_types_mod, only : coupler_type_initialized, coupler_type_spawn
3637use coupler_types_mod, only : coupler_type_copy_data
3738use data_override_mod, only : data_override_init, data_override
38- use fms_mod, only : stdout
3939use mpp_mod, only : mpp_chksum
4040use time_interp_external_mod, only : init_external_field, time_interp_external
4141use time_interp_external_mod, only : time_interp_external_init
42+ use iso_fortran_env, only : int64
4243
4344implicit 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
14311439100 FORMAT (" CHECKSUM::" ,A20," = " ,Z20)
14321440
14331441 call coupler_type_write_chksums(iobt% fluxes, outunit, ' iobt%' )
0 commit comments