Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 37 additions & 22 deletions physics/SFC_Models/Land/Noahmp/module_sf_noahmp_glacier.F90
Original file line number Diff line number Diff line change
Expand Up @@ -2630,15 +2630,24 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in
snliq ,imelt ,ficeold, & !in
isnow ,dzsnso ) !inout

if(isnow < 0) & !when multi-layer
call combine_glacier (nsnow ,nsoil , & !in
isnow ,sh2o ,stc ,snice ,snliq , & !inout
dzsnso ,sice ,snowh ,sneqv , & !inout
ponding1 ,ponding2) !out

if(isnow < 0) & !when multi-layer
call divide_glacier (nsnow ,nsoil , & !in
isnow ,stc ,snice ,snliq ,dzsnso ) !inout
end if

call snowh2o_glacier (nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in
qrain , & !in
isnow ,dzsnso ,snowh ,sneqv ,snice , & !inout
snliq ,sh2o ,sice ,stc , & !inout
ponding1 ,ponding2 ,fsh , & !inout
qsnbot ) !out

!set empty snow layers to zero

do iz = -nsnow+1, isnow
Expand All @@ -2649,16 +2658,9 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in
zsnso(iz) = 0.
enddo

call snowh2o_glacier (nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in
qrain , & !in
isnow ,dzsnso ,snowh ,sneqv ,snice , & !inout
snliq ,sh2o ,sice ,stc , & !inout
ponding1 ,ponding2 ,fsh , & !inout
qsnbot ) !out

!to obtain equilibrium state of snow in glacier region

if(sneqv > mwd .and. isnow /= 0) then ! 100 mm -> maximum water depth
if(sneqv > mwd) then ! 100 mm -> maximum water depth
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wzzheng90 Why remove the isnow /= 0 test? This is preventing division by zero in line 2664, which is causing the RT failure.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was added in #120 to fix the same issue.

bdsnow = snice(0) / dzsnso(0)
snoflow = (sneqv - mwd)
snice(0) = snice(0) - snoflow
Expand All @@ -2668,7 +2670,7 @@ subroutine snowwater_glacier (nsnow ,nsoil ,imelt ,dt ,sfctmp , & !in

! sum up snow mass for layered snow

if(isnow /= 0) then
if(isnow < 0) then
sneqv = 0.
snowh = 0.
do iz = isnow+1,0
Expand Down Expand Up @@ -2744,7 +2746,7 @@ subroutine snowfall_glacier (nsoil ,nsnow ,dt ,qsnow ,snowhin , & !in

! creating a new layer

if(isnow == 0 .and. qsnow>0. .and. snowh >= 0.05) then
if(isnow == 0 .and. qsnow>0. .and. snowh >= 0.025) then
isnow = -1
newnode = 1
dzsnso(0)= snowh
Expand Down Expand Up @@ -2902,8 +2904,8 @@ subroutine combine_glacier (nsnow ,nsoil , & !in
real (kind=kind_phys) :: zwice !< total ice mass in snow
real (kind=kind_phys) :: zwliq !< total liquid water in snow
real (kind=kind_phys) :: dzmin(3) !< minimum of top snow layer
data dzmin /0.045, 0.05, 0.2/
! data dzmin /0.025, 0.025, 0.1/ ! mb: change limit
! data dzmin /0.045, 0.05, 0.2/
data dzmin /0.025, 0.025, 0.1/ ! mb: change limit
!-----------------------------------------------------------------------

isnow_old = isnow
Expand All @@ -2913,17 +2915,29 @@ subroutine combine_glacier (nsnow ,nsoil , & !in
if(j /= 0) then
snliq(j+1) = snliq(j+1) + snliq(j)
snice(j+1) = snice(j+1) + snice(j)
dzsnso(j+1) = dzsnso(j+1) + dzsnso(j)
else
if (isnow_old < -1) then
snliq(j-1) = snliq(j-1) + snliq(j)
snice(j-1) = snice(j-1) + snice(j)
dzsnso(j-1) = dzsnso(j-1) + dzsnso(j)
else
ponding1 = ponding1 + snliq(j) ! isnow will get set to zero below
sneqv = snice(j) ! ponding will get added to ponding from
snowh = dzsnso(j) ! phasechange which should be zero here
snliq(j) = 0.0 ! because there it was only calculated
snice(j) = 0.0 ! for thin snow
dzsnso(j) = 0.0
if(snice(j) >= 0.) then
ponding1 = snliq(j) ! isnow will get set to zero below; ponding1 will get
sneqv = snice(j) ! added to ponding from phasechange ponding should be
snowh = dzsnso(j) ! zero here because it was calculated for thin snow
else ! snice over-sublimated earlier
ponding1 = snliq(j) + snice(j)
if(ponding1 < 0.) then ! if snice and snliq sublimates remove from soil
sice(1) = max(0.0,sice(1)+ponding1/(dzsnso(1)*1000.))
ponding1 = 0.0
end if
sneqv = 0.0
snowh = 0.0
end if
snliq(j) = 0.0
snice(j) = 0.0
dzsnso(j) = 0.0
endif
! sh2o(1) = sh2o(1)+snliq(j)/(dzsnso(1)*1000.)
! sice(1) = sice(1)+snice(j)/(dzsnso(1)*1000.)
Expand Down Expand Up @@ -2966,8 +2980,8 @@ subroutine combine_glacier (nsnow ,nsoil , & !in
! check the snow depth - all snow gone
! the liquid water assumes ponding on soil surface.

! if (snowh < 0.025 .and. isnow < 0 ) then ! mb: change limit
if (snowh < 0.05 .and. isnow < 0 ) then
if (snowh < 0.025 .and. isnow < 0 ) then ! mb: change limit
! if (snowh < 0.05 .and. isnow < 0 ) then
isnow = 0
sneqv = zwice
ponding2 = ponding2 + zwliq ! limit of isnow < 0 means input ponding
Expand Down Expand Up @@ -3165,8 +3179,8 @@ subroutine divide_glacier (nsnow ,nsoil , & !in
zwliq, zwice, tsno(1))

! subdivide a new layer
! if (msno <= 2 .and. dz(2) > 0.20) then ! mb: change limit
if (msno <= 2 .and. dz(2) > 0.10) then
if (msno <= 2 .and. dz(2) > 0.20) then ! mb: change limit
! if (msno <= 2 .and. dz(2) > 0.10) then
msno = 3
dtdz = (tsno(1) - tsno(2))/((dz(1)+dz(2))/2.)
dz(2) = dz(2)/2.
Expand Down Expand Up @@ -3293,6 +3307,7 @@ subroutine snowh2o_glacier (nsnow ,nsoil ,dt ,qsnfro ,qsnsub , & !in
sneqv = sneqv - qsnsub*dt + qsnfro*dt
propor = sneqv/temp
snowh = max(0.,propor * snowh)
snowh = min(max(snowh,sneqv/500.0),sneqv/50.0) ! limit adjustment to a reasonable density
elseif(opt_gla == 2) then
fsh = fsh - (qsnfro-qsnsub)*hsub
qsnfro = 0.0
Expand Down
48 changes: 24 additions & 24 deletions physics/SFC_Models/Land/Noahmp/noahmpdrv.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1205,34 +1205,34 @@ subroutine noahmpdrv_run &
!

snow_cover_fraction = 1.0
temperature_leaf = undefined
canopy_ice = undefined
canopy_liquid = undefined
vapor_pres_canopy_air = undefined
temperature_canopy_air = undefined
canopy_wet_fraction = undefined
lake_water = undefined
depth_water_table = undefined
aquifer_water = undefined
saturated_water = undefined
leaf_carbon = undefined
root_carbon = undefined
stem_carbon = undefined
wood_carbon = undefined
soil_carbon_stable = undefined
soil_carbon_fast = undefined
leaf_area_index = undefined
stem_area_index = undefined
evaporation_canopy = undefined
transpiration = undefined
aquifer_water = undefined
precip_adv_heat_total = undefined
temperature_leaf = temperature_radiative
canopy_ice = 0.0
canopy_liquid = 0.0
vapor_pres_canopy_air = 2000.0
temperature_canopy_air = temperature_radiative
canopy_wet_fraction = 0.0
lake_water = 0.0
depth_water_table = 0.0
aquifer_water = 0.0
saturated_water = 0.0
leaf_carbon = 0.0
root_carbon = 0.0
stem_carbon = 0.0
wood_carbon = 0.0
soil_carbon_stable = 0.0
soil_carbon_fast = 0.0
leaf_area_index = 0.0
stem_area_index = 0.0
evaporation_canopy = 0.0
transpiration = 0.0
aquifer_water = 0.0
precip_adv_heat_total = 0.0
soil_moisture_wtd = 0.0
recharge = 0.0
deep_recharge = 0.0
eq_soil_water_vol = soil_moisture_vol
transpiration_heat = undefined
latent_heat_canopy = undefined
transpiration_heat = 0.0
latent_heat_canopy = 0.0
z0_total = 0.002
latent_heat_total = latent_heat_ground
t2mmp(i) = temperature_bare_2m
Expand Down
Loading