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.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(ocean_surface_flux_t), | intent(inout) | :: | sf | |||
| type(ocean_sea_ice_t), | intent(in) | :: | ice |
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