diff --git a/full/coupler_main.F90 b/full/coupler_main.F90 index a4ff6781..b3e9f649 100644 --- a/full/coupler_main.F90 +++ b/full/coupler_main.F90 @@ -278,6 +278,14 @@ !! the slow sea-ice processes are on the same PEs as the fast sea-ice. !! !! +!! calve_ice_shelf_bergs +!! logical +!! .FALSE. +!! If true, the ice sheet flux through a fixed ice-shelf front is +!! converted to icebergs, rather than initializing icebergs from frozen +!! freshwater discharge. +!! +!! !! restart_interval !! integer, dimension(6) !! (/0,0,0,0,0,0/) @@ -450,12 +458,8 @@ program coupler_main if (concurrent_ice) then !> This call occurs all ice PEs. call coupler_exchange_fast_to_slow_ice(Ice, coupler_clocks) - !> call fms_mpp_set_current_pelist(Ice%pelist) is called if(.not.Ice%shared_slow_fast_PEs) - if (Ice%slow_ice_pe .and. calve_ice_shelf_bergs) then - call fms_mpp_clock_begin(coupler_clocks%update_ice_model_slow_fast) - call unpack_ocean_ice_boundary_calved_shelf_bergs(Ice, Ocean_ice_boundary) - call fms_mpp_clock_end(coupler_clocks%update_ice_model_slow_fast) - endif + if (Ice%slow_ice_pe .and. calve_ice_shelf_bergs) & + call coupler_unpack_ocean_ice_boundary_calved_ice_shelf_bergs(Ice, Ocean_ice_boundary, coupler_clocks) endif if (Ice%fast_ice_pe) call coupler_set_ice_surface_fields(Ice, coupler_clocks) @@ -615,11 +619,8 @@ program coupler_main !> This could be a point where the model is serialized; This calls on all ice PEs if (.not.concurrent_ice) then call coupler_exchange_fast_to_slow_ice(Ice, coupler_clocks, set_ice_current_pelist=.True.) - if (Ice%slow_ice_pe .and. calve_ice_shelf_bergs) then - call fms_mpp_clock_begin(coupler_clocks%update_ice_model_slow_fast) - call unpack_ocean_ice_boundary_calved_shelf_bergs(Ice, Ocean_ice_boundary) - call fms_mpp_clock_end(coupler_clocks%update_ice_model_slow_fast) - endif + if (Ice%slow_ice_pe .and. calve_ice_shelf_bergs) & + call coupler_unpack_ocean_ice_boundary_calved_ice_shelf_bergs(Ice, Ocean_ice_boundary, coupler_clocks) endif !> slow-ice model !! This call occurs on whichever PEs handle the slow ice processess. diff --git a/full/full_coupler_mod.F90 b/full/full_coupler_mod.F90 index 011bc63b..79e4b0b9 100644 --- a/full/full_coupler_mod.F90 +++ b/full/full_coupler_mod.F90 @@ -101,7 +101,6 @@ module full_coupler_mod public :: update_slow_ice_and_ocean public :: send_ice_mask_sic public :: flux_ice_to_ocean_finish, flux_ice_to_ocean_stocks, flux_ocean_from_ice_stocks - public :: unpack_ocean_ice_boundary_calved_shelf_bergs public :: atmos_model_restart, land_model_restart, ice_model_restart, ocean_model_restart @@ -130,6 +129,7 @@ module full_coupler_mod public :: coupler_update_land_model_slow, coupler_flux_land_to_ice public :: coupler_unpack_land_ice_boundary, coupler_flux_ice_to_ocean + public :: coupler_unpack_ocean_ice_boundary_calved_ice_shelf_bergs public :: coupler_update_ice_model_slow_and_stocks, coupler_update_ocean_model public :: coupler_clock_type, coupler_components_type, coupler_chksum_type @@ -221,8 +221,9 @@ module full_coupler_mod logical, public :: do_debug=.FALSE.!< If .TRUE. print additional debugging messages. integer, public :: check_stocks = 0 !< -1: never 0: at end of run only n>0: every n coupled steps logical, public :: use_hyper_thread = .false. - logical, public :: calve_ice_shelf_bergs = .false. !< If true, flux through a static ice front is converted - !!to point bergs + logical, public :: calve_ice_shelf_bergs = .false. !< If true, the ice sheet flux through a fixed ice-shelf front is + !! converted to icebergs, rather than initializing icebergs from + !! frozen freshwater discharge namelist /coupler_nml/ current_date, calendar, force_date_from_namelist, & months, days, hours, minutes, seconds, dt_cpld, dt_atmos, & @@ -2311,6 +2312,23 @@ subroutine coupler_unpack_land_ice_boundary(Ice, Land_ice_boundary, coupler_cloc end subroutine coupler_unpack_land_ice_boundary + !> This subroutine calls unpack_ocean_ice_boundary_calved_shelf_bergs + subroutine coupler_unpack_ocean_ice_boundary_calved_ice_shelf_bergs(Ice, Ocean_ice_boundary, coupler_clocks) + + implicit none + type(ice_data_type), intent(inout) :: Ice !< Ice + type(ocean_ice_boundary_type), intent(inout) :: Ocean_ice_boundary !< Ocean_ice_boundary + type(coupler_clock_type), intent(inout) :: coupler_clocks !< coupler_clocks + + call fms_mpp_set_current_pelist(Ice%slow_pelist) + call fms_mpp_clock_begin(coupler_clocks%update_ice_model_slow_slow) + + call unpack_ocean_ice_boundary_calved_shelf_bergs(Ice, Ocean_ice_boundary) + + call fms_mpp_clock_end(coupler_clocks%update_ice_model_slow_slow) + + end subroutine coupler_unpack_ocean_ice_boundary_calved_ice_shelf_bergs + !> This subroutine calls update_ice_model_slow and flux_ice_to_ocean_stocks subroutine coupler_update_ice_model_slow_and_stocks(Ice, coupler_clocks) diff --git a/full/ice_ocean_flux_exchange.F90 b/full/ice_ocean_flux_exchange.F90 index d1821c44..3ab622dd 100644 --- a/full/ice_ocean_flux_exchange.F90 +++ b/full/ice_ocean_flux_exchange.F90 @@ -377,7 +377,7 @@ end subroutine flux_ice_to_ocean_finish !! v_surf = meridional ocean current/ice motion (m/s) !! v_surf = meridional ocean current/ice motion (m/s) !! sea_lev = sea level used to drive ice accelerations (m) - !! calving = ice-sheet calving flux to ocean (kg m-2 s-1) + !! calving = ice-sheet calving flux to ocean (kg/m2/s) !! calving_hflx = heat flux associated with ice-sheet calving (W/m2) !! !!