Skip to content

Commit

Permalink
add driver changes for calculate_aislens_melt_variability_adjustment
Browse files Browse the repository at this point in the history
Add Registry and ice shelf melt driver changes to support new
calculate_aislens_melt_variability_adjustment subroutine call
  • Loading branch information
matthewhoffman committed Feb 7, 2024
1 parent 07cac84 commit cfe4264
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 28 deletions.
7 changes: 7 additions & 0 deletions components/mpas-albany-landice/src/Registry.xml
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,10 @@
description="Selection of the method for computing the basal mass balance of floating ice. 'none' sets the basalMassBal field to 0 everywhere. 'file' uses without modification whatever value was read in through an input or forcing file or the value set by an ESM coupler. 'constant', 'mismip', 'seroussi' use hardcoded fields defined in the code applicable to Thwaites Glacier. 'temperature_profile' generates a depth-melt relation based on an ocean temperature profile and sill depth. ISMIP6 is the method prescribed by ISMIP6."
possible_values="'none', 'file', 'constant', 'mismip', 'seroussi', 'temperature_profile', 'ismip6'"
/>
<nml_option name="config_bmlt_variability_modifier" type="logical" default_value=".false." units="unitless"
description="If true, ... "
possible_values=".true. or .false."
/>
<nml_option name="config_bmlt_float_flux" type="real" default_value="0.0" units="W m^{-2}"
description="Value of the constant heat flux applied to the base of floating ice (positive upward)."
possible_values="Any positive real value"
Expand Down Expand Up @@ -1224,6 +1228,9 @@ is the value of that variable from the *previous* time level!
<var name="floatingBasalMassBal" type="real" dimensions="nCells Time" units="kg m^{-2} s^{-1}"
description="Potential basal mass balance on floating regions"
/>
<var name="floatingBasalMassBalAdjustment" type="real" dimensions="nCells Time" units="kg m^{-2} s^{-1}"
description="adjustment to floatingBasalMassBal. Currently used to apply a variability modifier"
/>
<var name="basalMassBalApplied" type="real" dimensions="nCells Time" units="kg m^{-2} s^{-1}"
description="applied basal mass balance"
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,9 @@ subroutine li_basal_melt_floating_ice(domain, err)
logical, pointer :: &
config_print_thermal_info ! if true, print debug info
logical, pointer :: &
config_bmlt_variability_modifier ! if true, calculate bmlt variability adjustment
character(len=StrKIND), pointer :: &
config_basal_mass_bal_float ! option for basal mass balance of floating ice
Expand Down Expand Up @@ -272,6 +275,7 @@ subroutine li_basal_melt_floating_ice(domain, err)
real (kind=RKIND), dimension(:), pointer :: &
floatingBasalMassBal, & ! basal mass balance for floating ice
floatingBasalMassBalAdjustment, & ! possible adjustment to basal mass balance for floating ice
thickness, & ! ice thickness (m)
lowerSurface, & ! lower surface elevation (m)
bedTopography ! bed topography (m; negative below sea level)
Expand Down Expand Up @@ -505,6 +509,45 @@ subroutine li_basal_melt_floating_ice(domain, err)
endif
! Optionally call method to adjust basal melt to include parameterized climate variability
! block loop
block => domain % blocklist
do while (associated(block))
! get pools
call mpas_pool_get_subpool(block % structs, 'mesh', meshPool)
call mpas_pool_get_subpool(block % structs, 'geometry', geometryPool)
! get dimensions
call mpas_pool_get_dimension(meshPool, 'nCellsSolve', nCellsSolve)
! get fields from the mesh pool
call mpas_pool_get_array(meshPool, 'daysSinceStart',daysSinceStart)
! get fields from the geometry pool
call mpas_pool_get_array(geometryPool, 'thickness', thickness)
call mpas_pool_get_array(geometryPool, 'lowerSurface', lowerSurface)
call mpas_pool_get_array(geometryPool, 'cellMask', cellMask)
call mpas_pool_get_array(geometryPool, 'floatingBasalMassBal', floatingBasalMassBal)
call mpas_pool_get_array(geometryPool, 'floatingBasalMassBalAdjustment', floatingBasalMassBalAdjustment)
call mpas_pool_get_config(liConfigs, 'config_bmlt_variability_modifier', config_bmlt_variability_modifier)
if (config_bmlt_variability_modifier) then
call calculate_aislens_melt_variability_adjustment( &
nCellsSolve, &
config_sea_level, config_ice_density, &
daysSinceStart, &
lowerSurface, cellMask, &
floatingBasalMassBalAdjustment, err)
endif
floatingBasalMassBal(:) = floatingBasalMassBal(:) + floatingBasalMassBalAdjustment(:)
block => block % next
enddo ! associated(block)
! Allocate scratch fields for flood-fill
! Note: This only supports one block per processor
call mpas_pool_get_subpool(domain % blocklist % structs, 'scratch', scratchPool)
Expand Down Expand Up @@ -584,40 +627,35 @@ end subroutine li_basal_melt_floating_ice
!|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
!
! ! routine basal_melt_draft_dependence
! ! routine calculate_aislens_melt_variability_adjustment
!
!> \brief Calculate ice shelf melt rate from depth param.
!> \author Shivaprakash Muruganandham
!> \date February 2024
!> \details
!> Melt rate parameterization from:
!> Seroussi, H., Y. Nakayama, E. Larour, D. Menemenlis, M. Morlighem, E. Rignot, and A. Khazendar (2017),
!> Continued retreat of Thwaites Glacier, West Antarctica, controlled by bed topography and ocean circulation,
!> Geophys. Res. Lett., 1-9, doi:10.1002/2017GL072910.
!> for Thwaites Glacier.
!> Specifically, this is similar to the linear fit of melt with shelf draft from the Supplemental Information, Figure S1.
!> The linear relation is modified by a:
!> * depth above which there is no melt (Antarctic Surface Water saturation)
!> * a maximum melt rate (Circumpolar Deep Water saturation)
!> * a depth below which melt stops increasing (minimum sill height)
!>
!-----------------------------------------------------------------------
subroutine basal_melt_draft_dependence(floatingBasalMassBal, daysSinceStart, lowerSurface, cellMask, &
config_sea_level, config_ice_density, nCellsSolve, err)
subroutine calculate_aislens_melt_variability_adjustment( &
nCellsSolve, &
config_sea_level, config_ice_density, &
daysSinceStart, &
lowerSurface, cellMask, &
floatingBasalMassBalAdjustment, &
err)
!-----------------------------------------------------------------
! input variables
!-----------------------------------------------------------------
!real(kind=RKIND), pointer, intent(in) :: daysSinceStart
!real (kind=RKIND), dimension(:), pointer, intent(in) :: lowerSurface !< lower surface elevation (m)
!integer, dimension(:), pointer, intent(in) :: &
! cellMask !< bit mask describing whether ice is floating, dynamically active, etc.
!real(kind=RKIND), pointer, intent(in) :: &
! config_sea_level !< sea level (m) relative to z = 0
!real (kind=RKIND), pointer, intent(in) :: config_ice_density !< ice density
!integer, pointer :: &
! nCellsSolve !< number of locally owned cells
real(kind=RKIND), pointer, intent(in) :: daysSinceStart
real (kind=RKIND), dimension(:), pointer, intent(in) :: lowerSurface !< lower surface elevation (m)
integer, dimension(:), pointer, intent(in) :: &
cellMask !< bit mask describing whether ice is floating, dynamically active, etc.
real(kind=RKIND), pointer, intent(in) :: &
config_sea_level !< sea level (m) relative to z = 0
real (kind=RKIND), pointer, intent(in) :: config_ice_density !< ice density
integer, pointer :: &
nCellsSolve !< number of locally owned cells
!-----------------------------------------------------------------
! input/output variables
Expand All @@ -626,9 +664,9 @@ subroutine basal_melt_draft_dependence(floatingBasalMassBal, daysSinceStart, low
!-----------------------------------------------------------------
! output variables
!-----------------------------------------------------------------
!real (kind=RKIND), dimension(:), pointer, intent(out) :: &
! floatingBasalMassBal !< basal mass balance for floating ice
!integer, intent(out) :: err !< Output: error flag
real (kind=RKIND), dimension(:), pointer, intent(out) :: &
floatingBasalMassBalAdjustment !< basal mass balance adjustment
integer, intent(out) :: err !< Output: error flag
!-----------------------------------------------------------------
! local variables
Expand All @@ -645,7 +683,7 @@ subroutine basal_melt_draft_dependence(floatingBasalMassBal, daysSinceStart, low
!integer :: iCell
!err = 0
err = 0
!call mpas_pool_get_config(liConfigs, 'config_basal_mass_bal_seroussi_amplitude', &
! config_basal_mass_bal_seroussi_amplitude) ! meters
Expand Down Expand Up @@ -690,7 +728,7 @@ subroutine basal_melt_draft_dependence(floatingBasalMassBal, daysSinceStart, low
!floatingBasalMassBal(:) = floatingBasalMassBal(:) * config_ice_density / scyr
end subroutine basal_melt_draft_dependence
end subroutine calculate_aislens_melt_variability_adjustment
!-----------------------------------------------------------------------
Expand Down

0 comments on commit cfe4264

Please sign in to comment.