@@ -27,7 +27,8 @@ module MOM_surface_forcing_gfdl
2727use MOM_grid, only : ocean_grid_type
2828use MOM_interpolate, only : init_external_field, time_interp_external
2929use MOM_interpolate, only : time_interp_external_init
30- use MOM_io, only : slasher, write_version_number, MOM_read_data, stdout
30+ use MOM_io, only : slasher, write_version_number, MOM_read_data
31+ use MOM_io, only : stdout_if_root
3132use MOM_restart, only : register_restart_field, restart_init, MOM_restart_CS
3233use MOM_restart, only : restart_init_end, save_restart, restore_state
3334use MOM_string_functions, only : uppercase
@@ -36,6 +37,7 @@ module MOM_surface_forcing_gfdl
3637use MOM_variables, only : surface
3738use user_revise_forcing, only : user_alter_forcing, user_revise_forcing_init
3839use user_revise_forcing, only : user_revise_forcing_CS
40+ use iso_fortran_env, only : int64
3941
4042implicit none ; private
4143
@@ -1622,32 +1624,39 @@ subroutine ice_ocn_bnd_type_chksum(id, timestep, iobt)
16221624 type (ice_ocean_boundary_type), &
16231625 intent (in ) :: iobt ! < An ice-ocean boundary type with fluxes to drive the
16241626 ! ! ocean in a coupled model whose checksums are reported
1625- integer :: n,m, outunit
1626-
1627- outunit = stdout
1628-
1629- write (outunit,* ) " BEGIN CHECKSUM(ice_ocean_boundary_type):: " , id, timestep
1630- write (outunit,100 ) ' iobt%u_flux ' , field_chksum( iobt% u_flux )
1631- write (outunit,100 ) ' iobt%v_flux ' , field_chksum( iobt% v_flux )
1632- write (outunit,100 ) ' iobt%t_flux ' , field_chksum( iobt% t_flux )
1633- write (outunit,100 ) ' iobt%q_flux ' , field_chksum( iobt% q_flux )
1634- write (outunit,100 ) ' iobt%salt_flux ' , field_chksum( iobt% salt_flux )
1635- write (outunit,100 ) ' iobt%lw_flux ' , field_chksum( iobt% lw_flux )
1636- write (outunit,100 ) ' iobt%sw_flux_vis_dir' , field_chksum( iobt% sw_flux_vis_dir)
1637- write (outunit,100 ) ' iobt%sw_flux_vis_dif' , field_chksum( iobt% sw_flux_vis_dif)
1638- write (outunit,100 ) ' iobt%sw_flux_nir_dir' , field_chksum( iobt% sw_flux_nir_dir)
1639- write (outunit,100 ) ' iobt%sw_flux_nir_dif' , field_chksum( iobt% sw_flux_nir_dif)
1640- write (outunit,100 ) ' iobt%lprec ' , field_chksum( iobt% lprec )
1641- write (outunit,100 ) ' iobt%fprec ' , field_chksum( iobt% fprec )
1642- write (outunit,100 ) ' iobt%runoff ' , field_chksum( iobt% runoff )
1643- write (outunit,100 ) ' iobt%calving ' , field_chksum( iobt% calving )
1644- write (outunit,100 ) ' iobt%p ' , field_chksum( iobt% p )
1645- if (associated (iobt% ustar_berg)) &
1646- write (outunit,100 ) ' iobt%ustar_berg ' , field_chksum( iobt% ustar_berg )
1647- if (associated (iobt% area_berg)) &
1648- write (outunit,100 ) ' iobt%area_berg ' , field_chksum( iobt% area_berg )
1649- if (associated (iobt% mass_berg)) &
1650- write (outunit,100 ) ' iobt%mass_berg ' , field_chksum( iobt% mass_berg )
1627+ ! Local variables
1628+ integer (kind= int64) :: chks ! A checksum for the field
1629+ logical :: root ! True only on the root PE
1630+ integer :: outunit ! The output unit to write to
1631+
1632+ root = is_root_pe()
1633+ outunit = stdout_if_root()
1634+
1635+ if (root) write (outunit,* ) " BEGIN CHECKSUM(ice_ocean_boundary_type):: " , id, timestep
1636+ chks = field_chksum( iobt% u_flux ) ; if (root) write (outunit,100 ) ' iobt%u_flux ' , chks
1637+ chks = field_chksum( iobt% v_flux ) ; if (root) write (outunit,100 ) ' iobt%v_flux ' , chks
1638+ chks = field_chksum( iobt% t_flux ) ; if (root) write (outunit,100 ) ' iobt%t_flux ' , chks
1639+ chks = field_chksum( iobt% q_flux ) ; if (root) write (outunit,100 ) ' iobt%q_flux ' , chks
1640+ chks = field_chksum( iobt% salt_flux ) ; if (root) write (outunit,100 ) ' iobt%salt_flux ' , chks
1641+ chks = field_chksum( iobt% lw_flux ) ; if (root) write (outunit,100 ) ' iobt%lw_flux ' , chks
1642+ chks = field_chksum( iobt% sw_flux_vis_dir) ; if (root) write (outunit,100 ) ' iobt%sw_flux_vis_dir' , chks
1643+ chks = field_chksum( iobt% sw_flux_vis_dif) ; if (root) write (outunit,100 ) ' iobt%sw_flux_vis_dif' , chks
1644+ chks = field_chksum( iobt% sw_flux_nir_dir) ; if (root) write (outunit,100 ) ' iobt%sw_flux_nir_dir' , chks
1645+ chks = field_chksum( iobt% sw_flux_nir_dif) ; if (root) write (outunit,100 ) ' iobt%sw_flux_nir_dif' , chks
1646+ chks = field_chksum( iobt% lprec ) ; if (root) write (outunit,100 ) ' iobt%lprec ' , chks
1647+ chks = field_chksum( iobt% fprec ) ; if (root) write (outunit,100 ) ' iobt%fprec ' , chks
1648+ chks = field_chksum( iobt% runoff ) ; if (root) write (outunit,100 ) ' iobt%runoff ' , chks
1649+ chks = field_chksum( iobt% calving ) ; if (root) write (outunit,100 ) ' iobt%calving ' , chks
1650+ chks = field_chksum( iobt% p ) ; if (root) write (outunit,100 ) ' iobt%p ' , chks
1651+ if (associated (iobt% ustar_berg)) then
1652+ chks = field_chksum( iobt% ustar_berg ) ; if (root) write (outunit,100 ) ' iobt%ustar_berg ' , chks
1653+ endif
1654+ if (associated (iobt% area_berg)) then
1655+ chks = field_chksum( iobt% area_berg ) ; if (root) write (outunit,100 ) ' iobt%area_berg ' , chks
1656+ endif
1657+ if (associated (iobt% mass_berg)) then
1658+ chks = field_chksum( iobt% mass_berg ) ; if (root) write (outunit,100 ) ' iobt%mass_berg ' , chks
1659+ endif
16511660100 FORMAT (" CHECKSUM::" ,A20," = " ,Z20)
16521661
16531662 call coupler_type_write_chksums(iobt% fluxes, outunit, ' iobt%' )
0 commit comments