ice_ocean_heat_flux Subroutine

public pure subroutine ice_ocean_heat_flux(sf, ice)

Refresh the ocean surface heat-flux field from the ice slot. Components off (default): Q_heat(i,j) = Q_heat_const + heat_flux_diag(i,j) POSITIVE DOWN into the ocean (the apply-tracers convention: d(hT) = Q_heatdt/(rho0cp)). Full overwrite from the const + last window’s rate — a window with no ice exchange resets to background. Components on (sf%use_components, PR-12): write sf%heat_added(i,j) = heat_flux_diag(i,j) instead — MOM6’s slot for a net, already-summed heat term (no _const term: the assembler adds it). Sets has_heat either way.

Arguments

Type IntentOptional Attributes Name
type(ocean_surface_flux_t), intent(inout) :: sf
type(ocean_sea_ice_t), intent(in) :: ice

Calls

proc~~ice_ocean_heat_flux~~CallsGraph proc~ice_ocean_heat_flux ice_ocean_heat_flux proc~ice_ocean_heat_flux_components_impl ice_ocean_heat_flux_components_impl proc~ice_ocean_heat_flux->proc~ice_ocean_heat_flux_components_impl proc~ice_ocean_heat_flux_impl ice_ocean_heat_flux_impl proc~ice_ocean_heat_flux->proc~ice_ocean_heat_flux_impl

Called by

proc~~ice_ocean_heat_flux~~CalledByGraph proc~ice_ocean_heat_flux ice_ocean_heat_flux proc~engine_step_ice engine_step_ice proc~engine_step_ice->proc~ice_ocean_heat_flux proc~driver_run_ocean driver_run_ocean proc~driver_run_ocean->proc~engine_step_ice proc~rdb_ocean_step rdb_ocean_step proc~rdb_ocean_step->proc~engine_step_ice proc~driver_run driver_run proc~driver_run->proc~driver_run_ocean

Source Code

   pure subroutine ice_ocean_heat_flux(sf, ice)
      !! Refresh the ocean surface heat-flux field from the ice slot.
      !! **Components off** (default):
      !!   Q_heat(i,j) = Q_heat_const + heat_flux_diag(i,j)
      !! POSITIVE DOWN into the ocean (the apply-tracers convention:
      !! d(hT) = Q_heat*dt/(rho0*cp)). Full overwrite from the const + last
      !! window's rate — a window with no ice exchange resets to background.
      !! **Components on** (`sf%use_components`, PR-12): write
      !! `sf%heat_added(i,j) = heat_flux_diag(i,j)` instead — MOM6's slot
      !! for a net, already-summed heat term (no `_const` term: the
      !! assembler adds it).  Sets `has_heat` either way.
      type(ocean_surface_flux_t), intent(inout) :: sf
      type(ocean_sea_ice_t), intent(in) :: ice

      sf%has_heat = .true.
      if (sf%use_components) then
         call ice_ocean_heat_flux_components_impl(sf%heat_added, ice%heat_flux_diag, &
                                                  ice%nx_total, ice%ny_total)
      else
         call ice_ocean_heat_flux_impl(sf%Q_heat, ice%heat_flux_diag, &
                                       sf%Q_heat_const, ice%nx_total, ice%ny_total)
      end if
   end subroutine ice_ocean_heat_flux