Skip to content

Commit

Permalink
bug fix for the soil OM sanity check
Browse files Browse the repository at this point in the history
Also fixed a zero snow bug.
Answer change may occur.
  • Loading branch information
“Jinyun committed Feb 22, 2025
1 parent d98b1b9 commit 7f246b8
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 20 deletions.
24 changes: 14 additions & 10 deletions f90src/HydroTherm/SnowPhys/SnowPhysMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,7 @@ subroutine SolveSnowpackM(I,J,M,NY,NX,LatentHeatAir2Sno,Radnet2Snow,HeatSensEvap
real(r8) :: tNetWat2LayL,vwat,vdry,vice
real(r8) :: dt_SnoHeat !time step size for snow model iteration
real(r8) :: cphwat,vhcp0,dNetWat2LayL
real(r8) :: SnoFall,Rainfall,IceFall,HeatSnofall2Snow
real(r8) :: SnoFall,Rainfall,IceFall,HeatSnofall2Snow,snowLMass
real(r8), parameter :: mscal=1._r8-1.e-8_r8,tinyw=1.e-14_r8,tinyw0=1.e-16_r8
real(r8), parameter :: mscal1=1.0001_r8
real(r8) :: tinyw1
Expand Down Expand Up @@ -581,14 +581,20 @@ subroutine SolveSnowpackM(I,J,M,NY,NX,LatentHeatAir2Sno,Radnet2Snow,HeatSensEvap
IceFall = Ice2Snowt_col(NY,NX)*XNPS
HeatSnofall2Snow = PrecHeat2Snowt_col(NY,NX)*XNPS


D3000: DO MM = 1, NPS
call SnowAtmosExchangeMM(I,J,M,NY,NX,SnoFall,Rainfall,IceFall,HeatSnofall2Snow,LatentHeatAir2Sno,&
HeatSensEvapAir2Snow,HeatNetFlx2Snow,Radnet2Snow,HeatSensAir2Snow)

call SnowPackIterationMM(dt_snoHeat,I,J,M,NY,NX,TotWatXFlx2SoiMicP,TotHeatFlow2Soi,WatFlowSno2MacP,&
TotSnoWatFlow2Litr,TotSnoHeatFlow2Litr,CumWatFlx2SoiMacP,CumWatFlx2SoiMicP,&
CumWatXFlx2SoiMicP,CumSnowWatFLow2LitR,CumNetHeatFlow2LitR,cumNetHeatFlow2Soil)
snowLMass=VLDrySnoWE0M_snvr(1,NY,NX)+VLIceSnow0M_snvr(1,NY,NX)+VLWatSnow0M_snvr(1,NY,NX)+IceFall+SnoFall+RainFall

if(snowLMass>0._r8)then

call SnowAtmosExchangeMM(I,J,M,NY,NX,SnoFall,Rainfall,IceFall,snowLMass,HeatSnofall2Snow,LatentHeatAir2Sno,&
HeatSensEvapAir2Snow,HeatNetFlx2Snow,Radnet2Snow,HeatSensAir2Snow)

call SnowPackIterationMM(dt_snoHeat,I,J,M,NY,NX,TotWatXFlx2SoiMicP,TotHeatFlow2Soi,WatFlowSno2MacP,&
TotSnoWatFlow2Litr,TotSnoHeatFlow2Litr,CumWatFlx2SoiMacP,CumWatFlx2SoiMicP,&
CumWatXFlx2SoiMicP,CumSnowWatFLow2LitR,CumNetHeatFlow2LitR,cumNetHeatFlow2Soil)
endif
!
! ACCUMULATE SNOWPACK FLUXES TO LONGER TIME STEP FOR
! LITTER, SOIL FLUX CALCULATIONS
Expand Down Expand Up @@ -792,13 +798,14 @@ subroutine SolveSnowpackM(I,J,M,NY,NX,LatentHeatAir2Sno,Radnet2Snow,HeatSensEvap

end subroutine SolveSnowpackM
!------------------------------------------------------------------------------------------
subroutine SnowAtmosExchangeMM(I,J,M,NY,NX,SnoFall,Rainfall,IceFall,HeatSnofall2Snow,&
subroutine SnowAtmosExchangeMM(I,J,M,NY,NX,SnoFall,Rainfall,IceFall,snowLMass,HeatSnofall2Snow,&
LatentHeatAir2Sno,HeatSensEvapAir2Snow,HeatNetFlx2Snow,Radnet2Snow,HeatSensAir2Snow)
implicit none
integer, intent(in) :: I,J
integer, intent(in) :: M !soil heat-flow iteration id
integer, intent(in) :: NY,NX
real(r8),intent(in) :: HeatSnofall2Snow,IceFall,SnoFall,Rainfall
real(r8),intent(in) :: snowLMass
real(r8), intent(inout) :: LatentHeatAir2Sno
real(r8), intent(inout) :: HeatSensEvapAir2Snow !cumulated heat by vapor advection from air to snow [MJ]
real(r8), intent(inout) :: HeatNetFlx2Snow,Radnet2Snow
Expand All @@ -824,9 +831,6 @@ subroutine SnowAtmosExchangeMM(I,J,M,NY,NX,SnoFall,Rainfall,IceFall,HeatSnofall2
real(r8) :: NetHeatAir2Snow,SnofallRain
real(r8) :: SnofallDry,Snofallice
real(r8) :: RadSWbySnow !shortwave radiation absorbed by snow [MJ]
real(r8) :: snowLMass

snowLMass=VLDrySnoWE0M_snvr(1,NY,NX)+VLIceSnow0M_snvr(1,NY,NX)+VLWatSnow0M_snvr(1,NY,NX)+IceFall+SnoFall+RainFall

SnowAlbedo=(0.85_r8*(VLDrySnoWE0M_snvr(1,NY,NX)+SnoFall)+0.30_r8*(VLIceSnow0M_snvr(1,NY,NX)+IceFall) &
+0.06_r8*(VLWatSnow0M_snvr(1,NY,NX)+RainFall))/snowLMass
Expand Down
18 changes: 10 additions & 8 deletions f90src/IOutils/readimod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -602,14 +602,16 @@ subroutine readTopoNC()
ENDDO
ENDIF
DO L=1,NL(NY,NX)
if(CSoilOrgM_vr(ielmn,L,NY,NX)*1.e-3_r8>CSoilOrgM_vr(ielmc,L,NY,NX))then
write(iulog,*)'Likely too larger N/C ratio',1.e-3_r8*safe_adb(CSoilOrgM_vr(ielmn,L,NY,NX),CSoilOrgM_vr(ielmc,L,NY,NX)), 'in L,NY,NX',L,NY,NX
call endrun(trim(mod_filename)//' at line',__LINE__)
endif
if(CSoilOrgM_vr(ielmp,L,NY,NX)>CSoilOrgM_vr(ielmn,L,NY,NX))then
write(iulog,*)'Likely too larger P/N ratio',safe_adb(CSoilOrgM_vr(ielmp,L,NY,NX),CSoilOrgM_vr(ielmn,L,NY,NX)), 'in L,NY,NX',L,NY,NX
call endrun(trim(mod_filename)//' at line',__LINE__)
endif
if(CSoilOrgM_vr(ielmc,L,NY,NX) > 0._r8)then
if(CSoilOrgM_vr(ielmn,L,NY,NX)*1.e-3_r8>CSoilOrgM_vr(ielmc,L,NY,NX))then
write(iulog,*)'Likely too larger N/C ratio',1.e-3_r8*safe_adb(CSoilOrgM_vr(ielmn,L,NY,NX),CSoilOrgM_vr(ielmc,L,NY,NX)), 'in L,NY,NX',L,NY,NX
call endrun(trim(mod_filename)//' at line',__LINE__)
endif
if(CSoilOrgM_vr(ielmp,L,NY,NX)>CSoilOrgM_vr(ielmn,L,NY,NX))then
write(iulog,*)'Likely too larger P/N ratio',safe_adb(CSoilOrgM_vr(ielmp,L,NY,NX),CSoilOrgM_vr(ielmn,L,NY,NX)), 'in L,NY,NX',L,NY,NX
call endrun(trim(mod_filename)//' at line',__LINE__)
endif
endif
ENDDO
if(lverb)then
CALL Disp_topo_charc(NY,NX,NU(NY,NX),NM(NY,NX))
Expand Down
5 changes: 3 additions & 2 deletions f90src/ModelDiags/BalancesMod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -199,9 +199,10 @@ subroutine EndCheckBalances(I,J,NHW,NHE,NVN,NVS)
+HeatSource_col(NY,NX)+Eco_NetRad_col(NY,NX)+Eco_Heat_Latent_col(NY,NX)+Eco_Heat_Sens_col(NY,NX)&
+PrecHeat_col(NY,NX)+THeatSoiThaw_col(NY,NX)+THeatSnowThaw_col(NY,NX)+HeatRunSurf_col(NY,NX) &
-HeatDrain_col(NY,NX)-HeatDischar_col(NY,NX)-HeatCanopy2Dist_col(NY,NX)
write(110,*)('=',ii=1,50)
write(110,*)I*1000+J,'NY,NX ',NY,NX

if(abs(WaterErr_test)>err_h2o)then
write(110,*)('=',ii=1,50)
write(110,*)I*1000+J,'NY,NX ',NY,NX
write(110,*)I*1000+J,'NY,NX',NY,NX
write(110,*)'init H2O =',WaterErr_col(NY,NX)
write(110,*)'final H2O =',WatMass_col(NY,NX)
Expand Down

0 comments on commit 7f246b8

Please sign in to comment.