Scheduled Downtime
On Tuesday 24 October 2023 @ 5pm MT the forums will be in read only mode in preparation for the downtime. On Wednesday 25 October 2023 @ 5am MT, this website will be down for maintenance and expected to return online later in the morning.
Normal Operations
The forums are back online with normal operations. If you notice any issues or errors related to the forums, please reach out to help@ucar.edu

Inquiry on Snowmelt-Driven Runoff Representation in CTSM History Fields

Zhengjy

Zhengjy
New Member
According to the CLM technical documentation, runoff is generated from liquid water at the land surface, including both liquid precipitation reaching the ground and meltwater from snow. While this conceptual framework is clear, I am trying to identify the exact CTSM History Field variable names that represent runoff specifically originating from snowmelt.


Despite searching through the list of output fields, I have not been able to locate a variable that directly tracks the contribution of snowmelt to surface or subsurface runoff. Could you kindly advise on:


  • Whether snowmelt-driven runoff is explicitly represented by any history variable?
  • If not directly available, is there a recommended method to infer this contribution from existing outputs (e.g., using QSNOMELT, QOVER, QDRAI, etc.)?

Any guidance or clarification on this matter would be greatly appreciated. Thank you very much for your time and support.


Best regards,
 

swensosc

New Member
QFLX_SNOW_DRAIN is the water leaving the snowpack, which is then combined with rain and input to the soil surface.
 

Zhengjy

Zhengjy
New Member
QFLX_SNOW_DRAIN is the water leaving the snowpack, which is then combined with rain and input to the soil surface.
Thank you very much for your explanation of QFLX_SNOW_DRAIN. From what I understand, QFLX_LIQ_GRND represents the liquid water (rain + irrigation) that reaches the ground after canopy interception.

Based on this, would it be correct to consider that the total input to the soil surface equals the sum of QFLX_LIQ_GRND and QFLX_SNOW_DRAIN?


If so, then it might be reasonable to estimate the fraction of surface runoff originating from snowmelt using the following expression:
View attachment 6758
Could you please let me know if this approach is appropriate for quantifying the snowmelt contribution to surface runoff?

Thank you again for your guidance.
 

Zhengjy

Zhengjy
New Member
Thank you very much for your explanation of QFLX_SNOW_DRAIN. From what I understand, QFLX_LIQ_GRND represents the liquid water (rain + irrigation) that reaches the ground after canopy interception.

Based on this, would it be correct to consider that the total input to the soil surface equals the sum of QFLX_LIQ_GRND and QFLX_SNOW_DRAIN?


If so, then it might be reasonable to estimate the fraction of surface runoff originating from snowmelt using the following expression:
View attachment 6758
Could you please let me know if this approach is appropriate for quantifying the snowmelt contribution to surface runoff?

Thank you again for your guidance.
1747363742134.png
Given this, I would like to ask:
How can we determine the total input of liquid water to the soil surface after canopy interception, in the absence of QFLX_LIQ_GRND?


Is there an alternative variable or combination of variables in CLM5 that would allow us to quantify this total input ?
 

swensosc

New Member
QFLX_LIQ_GRND is the correct variable. It looks like the error may be caused by adding it before a restart. If you add the variable to your user_nl_clm for an initial run (continue_run = .false.), do you get the same error?
 

Zhengjy

Zhengjy
New Member
QFLX_LIQ_GRND is the correct variable. It looks like the error may be caused by adding it before a restart. If you add the variable to your user_nl_clm for an initial run (continue_run = .false.), do you get the same error?
Thank you very much for your suggestion.
I have checked my env_run.xml file and confirmed that:<entry id="RUN_TYPE" value="startup">, <entry id="CONTINUE_RUN" value="FALSE"> and hist_fincl1 = 'QFLX_LIQ_GRND', After rebuilding and submitting the case, I still encountered the same error. I just want to know the liquid precipitation that reaches the ground after atmospheric precipitation is intercepted.
 

swensosc

New Member
you can see the variables if you look in SnowHydrologyMod, in the subroutine SumFlux_AddSnowPercolation:
real(r8) , intent(in) :: qflx_liq_grnd( bounds%begc: ) ! liquid on ground after interception (mm H2O/s)

do fc = 1, num_snowc
c = filter_snowc(fc)

qflx_snow_drain(c) = qflx_snow_drain(c) + qflx_snow_percolation_bottom(c)
qflx_rain_plus_snomelt(c) = qflx_snow_percolation_bottom(c) &
+ (1.0_r8 - frac_sno_eff(c)) * qflx_liq_grnd(c)
end do

do fc = 1, num_nosnowc
c = filter_nosnowc(fc)

qflx_snow_drain(c) = qflx_snomelt(c)
qflx_rain_plus_snomelt(c) = qflx_liq_grnd(c) + qflx_snomelt(c)
end do

in SoilHydrologyMod, in subroutine SetQflxInputs, you can see qflx_rain_plus_snomelt:
qflx_rain_plus_snomelt => waterfluxbulk_inst%qflx_rain_plus_snomelt_col , & ! Input: [real(r8) (:)] rain plus snow melt falling on the soil (mm/s)

qflx_top_soil(c) = qflx_rain_plus_snomelt(c) + qflx_snow_h2osfc(c) + qflx_floodc(c)
 

Zhengjy

Zhengjy
New Member
you can see the variables if you look in SnowHydrologyMod, in the subroutine SumFlux_AddSnowPercolation:
real(r8) , intent(in) :: qflx_liq_grnd( bounds%begc: ) ! liquid on ground after interception (mm H2O/s)

do fc = 1, num_snowc
c = filter_snowc(fc)

qflx_snow_drain(c) = qflx_snow_drain(c) + qflx_snow_percolation_bottom(c)
qflx_rain_plus_snomelt(c) = qflx_snow_percolation_bottom(c) &
+ (1.0_r8 - frac_sno_eff(c)) * qflx_liq_grnd(c)
end do

do fc = 1, num_nosnowc
c = filter_nosnowc(fc)

qflx_snow_drain(c) = qflx_snomelt(c)
qflx_rain_plus_snomelt(c) = qflx_liq_grnd(c) + qflx_snomelt(c)
end do

in SoilHydrologyMod, in subroutine SetQflxInputs, you can see qflx_rain_plus_snomelt:
qflx_rain_plus_snomelt => waterfluxbulk_inst%qflx_rain_plus_snomelt_col , & ! Input: [real(r8) (:)] rain plus snow melt falling on the soil (mm/s)

qflx_top_soil(c) = qflx_rain_plus_snomelt(c) + qflx_snow_h2osfc(c) + qflx_floodc(c)
Thank you very much for your guidance.
qflx_rain_plus_snomelt is exactly what I need.
However, why is its Active status marked as False in the CTSM History Fields, and indeed, when I add this field in user_nl_clm, the simulation fails?
How can I solve this problem?
 

Zhengjy

Zhengjy
New Member
you can see the variables if you look in SnowHydrologyMod, in the subroutine SumFlux_AddSnowPercolation:
real(r8) , intent(in) :: qflx_liq_grnd( bounds%begc: ) ! liquid on ground after interception (mm H2O/s)

do fc = 1, num_snowc
c = filter_snowc(fc)

qflx_snow_drain(c) = qflx_snow_drain(c) + qflx_snow_percolation_bottom(c)
qflx_rain_plus_snomelt(c) = qflx_snow_percolation_bottom(c) &
+ (1.0_r8 - frac_sno_eff(c)) * qflx_liq_grnd(c)
end do

do fc = 1, num_nosnowc
c = filter_nosnowc(fc)

qflx_snow_drain(c) = qflx_snomelt(c)
qflx_rain_plus_snomelt(c) = qflx_liq_grnd(c) + qflx_snomelt(c)
end do

in SoilHydrologyMod, in subroutine SetQflxInputs, you can see qflx_rain_plus_snomelt:
qflx_rain_plus_snomelt => waterfluxbulk_inst%qflx_rain_plus_snomelt_col , & ! Input: [real(r8) (:)] rain plus snow melt falling on the soil (mm/s)

qflx_top_soil(c) = qflx_rain_plus_snomelt(c) + qflx_snow_h2osfc(c) + qflx_floodc(c)
May I ask if you are using CLM version 5.0?

I am currently working with CLM5.0 from CESM2.1.3, and the corresponding file I found is located at:
cesm2.1.3/components/clm/src/biogeophys/SnowHydrologyMod.F90

However, I could not find the subroutine SumFlux_AddSnowPercolation, nor the subroutine SetQflxInputs, or the variable qflx_rain_plus_snomelt in this file.

I’ve attached my version of SnowHydrologyMod.F90—would you mind taking a quick look and letting me know why it might be different from yours?

Thank you again for your help.
 

Attachments

  • SnowHydrologyMod.zip
    21.5 KB · Views: 0

Zhengjy

Zhengjy
New Member
I checked the SnowHydrologyMod.F90 file in my version, and in the subroutine SnowWater, I found a variable named qflx_top_soil, which appears to represent the water flux reaching the soil surface. This seems different from the qflx_rain_plus_snomelt you mentioned.
May I ask if you are using CLM version 5.0?

I am currently working with CLM5.0 from CESM2.1.3, and the corresponding file I found is located at:
cesm2.1.3/components/clm/src/biogeophys/SnowHydrologyMod.F90

However, I could not find the subroutine SumFlux_AddSnowPercolation, nor the subroutine SetQflxInputs, or the variable qflx_rain_plus_snomelt in this file.

I’ve attached my version of SnowHydrologyMod.F90—would you mind taking a quick look and letting me know why it might be different from yours?

Thank you again for your help.
 

swensosc

New Member
I am describing the recent code. It appears that some of the snow-related code was refactored in cesm 2.2, which is why your code is different than what I described. qflx_top_soil should be correct.
 
Top