AET & Percolation

Ask questions or report problems
LeoHD
Posts: 8
Joined: Fri Sep 03, 2021 8:42 am

AET & Percolation

Postby LeoHD » Fri Apr 29, 2022 8:27 am

Hey there,

i am currently using raven to model some hydrological parameters for a small forested catchment in southwest germany for a time period of 2005 until 2015.

Right now the model already runs, but i am having some problems regarding the output.

Evapotranspiration:

Since i am comparing raven to another hydrological model, i already know what output values i should get regarding the evapotranspiration. Unfortunately with raven, the output values for soil evaporation (and percolation) are too small.

I tried to attach my input and output files here, but unfortunately it does not work. Is there any other way to send the files to you so you also get an idea of what i am doing?

Anyways, I added some soil evaporation to my model the following way:

In the RVI file, under SoilModel I added:

:Evaporation PET_PENMAN_MONTEITH
:OroPETCorrect OROCORR_HBV

And under hydrological processes I added:

:SoilEvaporation SOILEVAP_GR4J SOIL[0] ATMOSPHERE


Unfortunately, as already mentioned, the values are too low ( yearly SUMS of about 400 to 500 mm). With the second model i am using i receive annual MEAN values ranging from 600 to 700 mm. These values are already validated.

Within raven i tried to use different evaporation algorithms, but unfortunately the outputs did not change.

The same holds for the percolation values. Here, the output values are also too low. Percolation was added to my model the following way:

:Percolation PERC_GR4J SOIL[0] SOIL[1]


In case it helps, here is the complete code for the RVI file:

:StartDate 2005-01-01 00:00:00
:EndDate 2015-12-31 00:00:00
:TimeStep 1.0
:Method ORDERED_SERIES
#
:SoilModel SOIL_MULTILAYER 3
:Interpolation INTERP_INVERSE_DISTANCE
:Evaporation PET_PENMAN_MONTEITH
:Routing ROUTE_NONE
:CatchmentRoute ROUTE_DUMP
:OroTempCorrect OROCORR_SIMPLELAPSE
:OroPrecipCorrect OROCORR_SIMPLELAPSE
:OroPETCorrect OROCORR_HBV
#


:HydrologicProcesses
:Precipitation PRECIP_RAVEN ATMOS_PRECIP MULTIPLE
:Percolation PERC_GR4J SOIL[0] SOIL[1]
:Infiltration INF_GR4J PONDED_WATER MULTIPLE
:Baseflow BASE_POWER_LAW SOIL[1] SURFACE_WATER
:Baseflow BASE_LINEAR SOIL[1] SURFACE_WATER
:SoilEvaporation SOILEVAP_GR4J SOIL[0] ATMOSPHERE
:EndHydrologicProcesses


I am a bit lost. My question now is: What could i try to change in order for the AET and percolation values to be what they should be? Do i need to add anything to my input files?

Also, i stumbled upon another problem. Within the WatershedMassEnergyBalance output excel table i realised the following.

For e.g. percolation, infiltration and soilevaporation, it seems that per timestep/day the daily amount is added to the previous day resulting in a cumulative sum increasing day after day. Is there any way to change that into separate daily values being posted into that table so that I can also calculate annual mean values?

I am happy to answer any upcoming questions and I am looking forward to discussing my problems with any of you!


Best

Leonard

sgmlin
Posts: 4
Joined: Tue Apr 19, 2022 5:07 pm

Re: AET & Percolation

Postby sgmlin » Mon May 02, 2022 4:22 am

Hi Leonard,
Thanks for your detailed post. I'll suggest some debugging strategies based on what you've written - if this doesn't work I'll provide you an email to your model files to.

To address the magnitude discrepancy with your AET/percolation outputs, I would first cross-check the units and the magnitudes of relevant process parameters in the *.rvp file. The standard units for each parameter can be found in the Raven Manual. If everything checks out here, I would consider inter-process interactions based on your *.rvi file - are any algorithms selected working against each other?

To calculate the daily value of AET or percolation for day "x" using the cumulative timeseries from the WatershedMassEnergyBalance.csv, you could simply take the difference of the values for days "x" and "x+1". With the help of the RavenR library, this can be quickly coded into an R script to automate the calculation:

Code: Select all

library(RavenR)
library(xts)
library(ggplot2)
library(dplyr)

# read in WatershedMassEnergyBalance.csv via RavenR, extract cumulative time series of interest
df = rvn_watershedmeb_read('WatershedMassEnergyBalance.csv')
perc = df$watershedmeb$Percolation.mm     # check which columns correspond to the layers you're interested in. Repeat if necessary
aet = df$watershedmeb$Soil.Evaporation.mm # both of these read in as xts objects (time series)

# create a data frame of daily average values
perc_daily = data.frame(date = index(perc[1:(nrow(perc)-1)]),
                                     coredata(perc[2:nrow(perc)])-coredata(perc[1:(nrow(perc)-1)]))
aet_daily = data.frame(date = index(aet[1:(nrow(aet)-1)]),
                                    coredata(aet[2:nrow(aet)])-coredata(aet[1:(nrow(aet)-1)]))

# visualize results
ggplot(perc_daily,aes(x=date,y=Percolation.mm))+geom_point()
ggplot(aet_daily,aes(x=date,y=Soil.Evaporation.mm))+geom_point()

# calculate mean annual values
perc_daily%>%group_by(year)%>%summarize(.,mean(Percolation.mm))
aet_daily%>%group_by(year)%>%summarize(.,mean(Soil.Evaporation.mm))


Let me know if this helps! Happy to continue the discussion here.
-Simon

LeoHD
Posts: 8
Joined: Fri Sep 03, 2021 8:42 am

Re: AET & Percolation

Postby LeoHD » Mon May 09, 2022 4:35 am

Hi Simon,

first of all thanks alot for your answer!! I was off work for a week and started to go back into this this morning.

Unfortunately, I have problems following of what you are saying.

I rechecked my rvp file and, at least for me, it all seems to make sense. But since I am still new to raven I am afraid I have overlooked some mistakes. In case it helps, here are some inputs to my rvp file:

:SoilClasses
:Attributes ,%SAND,%CLAY,%SILT,
:Units , none, none, none, none
CLAY,0,1,0
SAND,1,0,0
SILT,0,0,1
:EndSoilClasses

:SoilProfiles
DEFAULT_P,3,SAND,0.2,SAND,0.2,SAND,0.2
Braunerde,3,CLAY,0.1,CLAY,0.0,CLAY,0.0
Bändchenpodsol,3,SAND,0.2,SAND,0.2,Sand,0.0
Bändchenstaupodsol,3,SAND,0.2,SAND,0.2,SAND,0.2
Bändchenstagogley,3,SAND,0.2,SAND,0.2,SAND,0.2
Hochmoor,3,SAND,0.15,SAND,0.15,SAND,0.0
Hangley,3,SAND,0.15,SAND,0.15,SAND,0.0
Auengley,3,SAND,0.1,SAND,0.1,CLAY,0.1
Stagnogley,3,SAND,0.1,SAND,0.1,CLAY,0.1
Pseudogley,3,SAND,0.2,CLAY,0.2,SAND,0.0
Braunerde_Podsol,3,SAND,0.1,SAND,0.1,SAND,0.1
Podsol,3,SAND,0.2,SAND,0.2,SAND,0.0
Podsol,3,SAND,0.1,SAND,0.1,SAND,0.0
Podsol_Braunerde,3,SAND,0.3,SAND,0.0,SAND,0.0
Hochmoor,3,SAND,0.5,SAND,0.5,SAND,0.0
Pordsol_Regosol,3,SAND,0.05,SAND,0.05,SAND,0.0
Podsolige_braunerde,3,SAND,0.15,SAND,0.15,SAND,0.0
Braunerde_Podsol,3,SAND,0.6,SAND,0.0,SAND,0.0
Podsol,3,SAND,0.1,SAND,0.1,SAND,0.1
Braunerde_Pseudogley,3,SAND,0.15,CLAY,0.15,CLAY,0.0
Braunerde,3,SAND,0.4,SAND,0.0,SAND,0.0
:EndSoilProfiles

#-----------------------------------------------------------------
# Global Parameters
#-----------------------------------------------------------------
# :GlobalParameter RAINSNOW_TEMP 0.0
# :GlobalParameter PRECIP_LAPSE **
# :GlobalParameter ADIABATIC_LAPSE **
# :GlobalParameter TOC_MULTIPLIER **


#-----------------------------------------------------------------
# Soil Parameters
#-----------------------------------------------------------------
:SoilParameterList
:Parameters, POROSITY, ALBEDO_WET, ALBEDO_DRY, BASEFLOW_COEFF, BASEFLOW_N,
:Units, -, -, -, -, -, # (units not generated by .rvp template)
[DEFAULT], 0.4, 1.0, 1.0, 0.1, 1.0,
#CLAY, **, **, **, **, **,
#SAND, **, **, **, **, **,
#SILT, **, **, **, **, **,
:EndSoilParameterList

:VegetationClasses
:Attributes , MAX_HT,MAX_LAI,MAX_LEAF_COND
:Units , m, none, mm_per_s
CONIFER_FOREST, 25, 7, 5
:EndVegetationClasses

:LandUseClasses
:Attributes ,IMPERMEABLE_FRAC, FOREST_COVERAGE
:Units , frac, frac,
DEFAULT, 0, 1,
:EndLandUseClasses



Regarding the Rvi file: what exactly do you mean by working against each other?

I also applied the R code you send me - thanks alot for that! It works out fine, but of course values are still too low.


In case it would be easier to discuss via email, you can contact me via : leonard.kurtz@uni-heidelberg.de

Looking forward to your answer!!

Leonard

LeoHD
Posts: 8
Joined: Fri Sep 03, 2021 8:42 am

Re: AET & Percolation

Postby LeoHD » Mon May 09, 2022 9:54 am

Hi Simon,

just wanna add something to my post this morning:

I tried adding some CustomOutputs to my model:
#Outout options
:CustomOutput CONTINUOUS AVERAGE To:ATMOSPHERE ENTIRE_WATERSHED
:CustomOutput DAILY AVERAGE To:ATMOSPHERE ENTIRE_WATERSHED
:CustomOutput CONTINUOUS AVERAGE Between:SOIL[0].And.ATMOSPHERE ENTIRE_WATERSHED


What i observed is that no matter what input i have (Continuous, daily, average or maximum), the values dont change.

But, surprisingly, the output values of customoutput "To:ATMOSPHERE (which if i understood correctly are AET values?) are close to the ones i obtained with my other hydrological model. I wonder if that happened by coincidence.

Applying Between:SOIL[0].And.ATMOSPHERE obtained the same values as in the WatershedMassEnergyBalance file, meaning they were too low.

I thought this might be interesting to add.

Cheers

Leonard

sgmlin
Posts: 4
Joined: Tue Apr 19, 2022 5:07 pm

Re: AET & Percolation

Postby sgmlin » Fri Jun 03, 2022 8:51 pm

Sorry for the late reply, things have been quite busy here.
Let's start with a few comments about the soil parameters in the rvp file. Since you are new to Raven, I will include some background information on the rvp soil blocks here too for your information.

I suspect modifications here may help with producing reasonable outputs. We can revisit the :CustomOutput commands after you make the adjustments from this reply.

Generally, the soil parameter blocks in the rvp file sequentially build on each other to add more and more complexity in representing soils.

We begin with the :SoilClasses block, which is designed to help you define heterogenous soil mixtures containing fractions of sand, silt, and clay. If "Stagnogley" was a heterogenous soil mixture containing sand and clay, you would define it as:

:SoilClasses
:Attributes ,%SAND,%CLAY,%SILT,
:Units , none, none, none, none
Stagnogley, 0.8, 0.2, 0.0
:EndSoilClasses

Once these soil classes are defined, you can stack them in different combinations to create multi-layer soil profiles with each layer having a unique depth (in meters).

Note for your set up: each of your soil profiles are currently compromised of homogenous soil types stacked on top of each other. For example, "Stagnogley" is a 3 layer soil profile with 3 m of SAND underlain by 0.1 m of SAND, which is underlain by 0.1 m of CLAY. If you want heterogeneity in each layer, please revise these blocks based on your understanding of the above explanation.

Finally, the SoilParameters block allows you to specify soil properties for each of the soil classes previously defined. This is the block that completes the representation of soil heterogeneity! Here, you will need to include all parameters necessary to execute hydrologic process algorithms for soil layers (ex. Baseflow power law coefficient, porosity, hydraulic conductivity, field capacity, wilting point, etc.). The same parameter set is defined for each class, and each class gets a unique set of values.

The [DEFAULT] line is a placeholder set of parameter values that can be linked to multiple soil classes in subsequent rows of the same block. You can reference the default values in any line by typing "_DEFAULT" instead of a number.

Note for your setup: you are adopting the same hydrologic/hydraulic properties for sand, silt, and clay because the [DEFAULT] line is the only line that is not commented (i.e., clay, silt, and sand all share the same porosity, albedo values, baseflow coefficients, etc.). I recommend populating this block with different parameter value sets (1 line for each SoilClass entry) to get something like:
#-----------------------------------------------------------------
# Soil Parameters
#-----------------------------------------------------------------
:SoilParameterList
:Parameters, POROSITY, ALBEDO_WET, ALBEDO_DRY, BASEFLOW_COEFF, BASEFLOW_N,
:Units, -, -, -, -, -, # (units not generated by .rvp template)
[DEFAULT], 0.4, 1.0, 1.0, 0.1, 1.0,
Pordsol_Regosol, 0.4, 0.75, 0.9, 0.1, 2.1
Bändchenpodsol, 0.6, 0.8, 0.5, 0.24, 1.6
.. etc.
:EndSoilParameterList

A final note: each entry in these blocks should have a unique name that is less than 30 characters - do not reuse the same name as this will cause the previous instance to be overwritten.

sgmlin
Posts: 4
Joined: Tue Apr 19, 2022 5:07 pm

Re: AET & Percolation

Postby sgmlin » Fri Jun 03, 2022 9:03 pm

Keeping things separate, this is a comment thread for your HydrologicProcesses block, which currently looks like this:

:HydrologicProcesses
:Precipitation PRECIP_RAVEN ATMOS_PRECIP MULTIPLE
:Percolation PERC_GR4J SOIL[0] SOIL[1]
:Infiltration INF_GR4J PONDED_WATER MULTIPLE
:Baseflow BASE_POWER_LAW SOIL[1] SURFACE_WATER
:Baseflow BASE_LINEAR SOIL[1] SURFACE_WATER
:SoilEvaporation SOILEVAP_GR4J SOIL[0] ATMOSPHERE
:EndHydrologicProcesses

1. You've specified two different baseflow routines for SOIL[1]. Raven will only use the last instance. Each soil layer gets its own process routine call. If SOIL[0] and SOIL[1] both percolate water to the underlying layer using the same routine, you would specify it as 2 separate lines:

:Percolation PERC_GR4J SOIL[0] SOIL[1]
:Percolation PERC_GR4J SOIL[1] SOIL[2]

2. According to your rvp file, your model has 3 soil layers: SOIL[0], SOIL[1], SOIL[2] (in order from top to bottom). You are missing commands that link water to the bottom-most soil layer (SOIL[2]). Even if SOIL[2] is meant to represent bedrock (relatively impermeable), you still need to link it in the HydrologicProcesses block. I recommend adding Percolation and Baseflow routines that link SOIL[2] and SOIL[1]. This could be something like:
:Percolation PERC_GR4J SOIL[1] SOIL[2]
:Baseflow BASE_POWER_LAW SOIL[2] SURFACE_WATER

If any soil layer is not referenced in the HydrologicProcesses block then water will not be routed to it during simulations, effectively excluding it from model domain!


Return to “Help & Support”