[pcr] kinematic wave equation
Jetten, Victor (UT-ITC)
v.g.jetten at utwente.nl
Mon Jun 27 15:23:21 CEST 2022
Hi
I don’t think you add the inflowing water to the water that is already in the channel. What I did in the model openLISEM (not using kin wave anymore these days), is the following:
* do kin wave over the whole network as you do.
* Then in the channel cells I calculate how much of the overland flow goes into the channel. Something like: In the channel cells there is Q2. This leads to a water volume in the channel cells. This volume exists on a surface that is dx*(dx-channel width). From this volume a part goes into the channel: check what the velocity is of the overland flow in the channel cell and calculate how much water flows into the channel: V*dt*dx*(dx-channel width).
* You add this to the water volume already in the channel in this gridcell: channel volume += inflow volume. From this you calculate channel Q which goes into the kin wave for the channel. Then you route that to the outlet as Q3.
Hope this helps
Victor
From: Nikolay Yasinskiy <nikolay.yasinskiy at gmail.com>
Sent: Monday, June 27, 2022 14:22
To: Jetten, Victor (UT-ITC) <v.g.jetten at utwente.nl>
Cc: pcraster-info at lists.geo.uu.nl
Subject: Re: [pcr] kinematic wave equation
Hi, Victor,
yes, that is exactly what I mean to do.
Your idea is of great logic, so I tried it.
Seems, the first kin wave gives discharges that are comparable with real values, but pick discharges are moved to other dates.
The second kin wave makes discharge 100 times less - but slope seem to be normal.
I used this code:
Flow = Flow/1000 #where Flow is in mm
self.WH = self.WH + Flow
ALPHA = (self.N*(self.DX + 2*self.WH)**(2.0/3.0)/sqrt(self.slope))**(self.beta)
ALPHABED = (self.N*(self.DX + 2*self.WHBED)**(2.0/3.0)/sqrt(self.riverslope))**(self.beta)
Q1 = ifthenelse((ALPHA > scalar(0)), ((self.DX*self.WH)/ALPHA)**(1/self.beta), scalar(0))
# Overland Flow Discharge, in m/s*m*m = m3/s
# Q2 is flow accumulation by kin wave
Q2 = kinematic(self.ldd, Q1, 0, ALPHA, self.beta, 1, self.DTSEC, self.DX)
TotalFlow = Q2 + GroundFlow # adding ground flow
# Q3 is river kinematic flow transformation
Q3 = kinematic(self.riverldd, TotalFlow, 0, ALPHABED, self.beta, 1, self.DTSEC, self.DX)
self.WH = ALPHA*(Q2**self.beta)/self.DX
self.WHBED = ALPHABED*(Q3**self.beta)/self.DX
# First approximation of new WH using old ALPHA (ok for small time steps)
# WH is the flowdepth in m
ALPHA = (self.N*(self.DX + 2*self.WH)**(2.0/3.0)/sqrt(self.slope))**(self.beta)
ALPHABED = (self.N*(self.DX + 2*self.WHBED)**(2.0/3.0)/sqrt(self.riverslope))**(self.beta)
self.WH = ALPHA*(Q2**self.beta)/self.DX
self.WHBED = ALPHABED*(Q3**self.beta)/self.DX
May be I am using this in a wrong way
---
Nick
вт, 7 июн. 2022 г. в 22:28, Jetten, Victor (UT-ITC) <v.g.jetten at utwente.nl<mailto:v.g.jetten at utwente.nl>>:
Hi Nikolay
Not sure what you mean or want. If you want to do a kin wave on a river only and have the discharge, just make a river ldd
pcrcalc –lddin Lddchannel.map = lddcreate(rivermask * dem,1e20,1e20,1e20,1e20)
Where river mask contains 1 for a river and missing values outside. Then use this in the kinematic function. Do not use zero for outside values but missing values.
Pcrcalc rivermask = if(river, scalar(1))
In you model you could do a first kin wave on the overlanf flow so you know for the river mask cells for each timestep how much overland flow is added to the river, then a second kin wave for the river itself with only the lddchannel.map.
Is this what you are trying to do? Not sure if this is still the case but the kin wave seemed to be flawed:
Qnew = kinematic(ldd, Qold, q, alpha, beta, nrTimeSlices, dT, dX)
when the sum of the discharge “Qold” going in and the added water “q” was less or equal to zero you can simply flag this and output 0. But the algorithm took forever with negative q values.
I always used q = 0 and added and subtracted anything outside the algorithm before-hand. I haven’t used this for years so not sure how it works now.
Cheers
Victor
From: pcraster-info-bounces at lists.geo.uu.nl<mailto:pcraster-info-bounces at lists.geo.uu.nl> <pcraster-info-bounces at lists.geo.uu.nl<mailto:pcraster-info-bounces at lists.geo.uu.nl>> On Behalf Of Nikolay Yasinskiy
Sent: Friday, May 20, 2022 13:18
To: pcraster-info at lists.geo.uu.nl<mailto:pcraster-info at lists.geo.uu.nl>
Subject: Re: [pcr] kinematic wave equation
May be lddmask is the appropriate way to cut it by river network or catchment area?
NY
пт, 20 мая 2022 г. в 14:09, Nikolay Yasinskiy <nikolay.yasinskiy at gmail.com<mailto:nikolay.yasinskiy at gmail.com>>:
Hi to pcraster mailing list members!
I try to use the kinematic wave function, but I am a bit confused that ldd should be defined for the whole map. I tried to cut it by basin, by rivers, the algorithm treats it as unsound.
May be there is another solution, to make it smaller, because for the whole map calculations are too slow, that is logical for a map with 100m square pixel.
Kinematic wave could be used to calculate flow accumulation only through the river tributaries and main river, it's normal situation, but the algorithm soes allow to do that.
May be zeros for tha outside area on ldd could help. Ldd is 1 - 9 numbered field, and NA values make it unsound. So lddrepair also is not the right solution.
---
Respectfully,
N.Y.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.geo.uu.nl/pipermail/pcraster-info/attachments/20220627/51621ebf/attachment-0001.html>
More information about the pcraster-info
mailing list