Skip to content

Commit d7dd9b5

Browse files
Change from max channel area to area where melt shuts off
This avoids the inconsistency of calculating melt but not letting it change channel area.
1 parent 30b2d3d commit d7dd9b5

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

components/mpas-albany-landice/src/Registry_subglacial_hydro.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@
112112
description="width of sheet beneath/around channel that contributes to melt within the channel"
113113
possible_values="positive real number"
114114
/>
115-
<nml_option name="config_SGH_chnl_max_area" type="real" default_value="500.0" units="m^2"
116-
description="max value for channel area. If channel evolution leads to an area larger than this, it gets set back to this value. Note this will violate mass conservation, but we also do not remove channel melt mass from the ice above, so that is already a mass conservation issue."
115+
<nml_option name="config_SGH_chnl_area_shutoff" type="real" default_value="500.0" units="m^2"
116+
description="channel area above which channel melting is disabled for stability reasons."
117117
possible_values="positive real number"
118118
/>
119119
<nml_option name="config_SGH_include_pressure_melt" type="logical" default_value=".false." units="none"

components/mpas-albany-landice/src/mode_forward/mpas_li_subglacial_hydro.F

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1887,6 +1887,7 @@ subroutine update_channel(block, err)
18871887
real (kind=RKIND), pointer :: config_SGH_incipient_channel_width
18881888
real (kind=RKIND), pointer :: bedRoughMax
18891889
logical, pointer :: config_SGH_include_pressure_melt
1890+
real (kind=RKIND), pointer :: config_SGH_chnl_area_shutoff
18901891
real (kind=RKIND), dimension(:), pointer :: channelArea
18911892
real (kind=RKIND), dimension(:), pointer :: channelMelt
18921893
real (kind=RKIND), dimension(:), pointer :: channelPressureFreeze
@@ -1929,6 +1930,7 @@ subroutine update_channel(block, err)
19291930
call mpas_pool_get_config(liConfigs, 'config_SGH_incipient_channel_width', config_SGH_incipient_channel_width)
19301931
call mpas_pool_get_config(liConfigs, 'config_SGH_include_pressure_melt', config_SGH_include_pressure_melt)
19311932
call mpas_pool_get_config(liConfigs, 'config_SGH_bed_roughness_max', bedRoughMax)
1933+
call mpas_pool_get_config(liConfigs, 'config_SGH_chnl_area_shutoff', config_SGH_chnl_area_shutoff)
19321934
call mpas_pool_get_dimension(meshPool, 'nVertLevels', nVertLevels)
19331935
call mpas_pool_get_dimension(meshPool, 'nEdgesSolve', nEdgesSolve)
19341936
call mpas_pool_get_array(hydroPool, 'channelArea', channelArea)
@@ -1994,6 +1996,12 @@ subroutine update_channel(block, err)
19941996
channelMelt = (abs(channelDischarge * hydropotentialSlopeNormal) & ! channel dissipation
19951997
+ abs(waterFlux * hydropotentialSlopeNormal * config_SGH_incipient_channel_width) & !some sheet dissipation
19961998
) / latent_heat_ice
1999+
! disable channel melting above area limit
2000+
do iEdge = 1, nEdgesSolve
2001+
if (channelArea(iEdge) > config_SGH_chnl_area_shutoff) then
2002+
channelMelt(iEdge) = 0.0_RKIND
2003+
endif
2004+
enddo
19972005
channelPressureFreeze = -1.0_RKIND * iceMeltingPointPressureDependence * cp_freshwater * rho_water * &
19982006
(channelDischarge + waterFlux * config_SGH_incipient_channel_width) &
19992007
* waterPressureSlopeNormal / latent_heat_ice
@@ -2074,11 +2082,9 @@ subroutine evolve_channel(block, err)
20742082
integer, dimension(:,:), pointer :: edgeSignOnCell
20752083
real (kind=RKIND), dimension(:), pointer :: areaCell
20762084
real (kind=RKIND), dimension(:), pointer :: dcEdge
2077-
real (kind=RKIND), pointer :: config_SGH_chnl_max_area
20782085
integer, pointer :: nCellsSolve
20792086
integer :: iCell, iEdgeOnCell, iEdge
20802087
2081-
call mpas_pool_get_config(liConfigs, 'config_SGH_chnl_max_area', config_SGH_chnl_max_area)
20822088
call mpas_pool_get_subpool(block % structs, 'hydro', hydroPool)
20832089
call mpas_pool_get_subpool(block % structs, 'mesh', meshPool)
20842090
call mpas_pool_get_array(hydroPool, 'deltatSGH', deltatSGH)
@@ -2124,7 +2130,6 @@ subroutine evolve_channel(block, err)
21242130
channelArea = channelChangeRate * deltatSGH + channelArea
21252131
! If sheet dissipation contributes to channel, there should be no need for a minimum channel size
21262132
channelArea = max(1.0e-8_RKIND, channelArea) ! make some tiny value when it goes negative
2127-
channelArea = min(config_SGH_chnl_max_area, channelArea) ! limit channel area to config-specified max value
21282133
21292134
!--------------------------------------------------------------------
21302135
end subroutine evolve_channel

0 commit comments

Comments
 (0)