【Hydro】部分基流分割方法及程序代码说明
目录
- 说明
- 一、数字滤波法
- 单参数数字滤波
- Lyne-Hollick滤波法
- Chapman滤波法
- Chapman-Maxwell滤波法
- Boughton-Chapman滤波法
- 双参数滤波法
- Eckhardt滤波法
- 二、其他基流分割方法
- 基流指数(BFI)法
- 时间步长(HYSEP)法
- PART法
- 加里宁-阿里巴扬基流估算改进方法
- 三、计算程序及代码
- SWAT Baseflow Program基流计算程序
- 基本原理
- Baseflow输入输出文件
- Lyne-Hollick滤波法Python代码
- grwat中的基流分割方法
- 参考文献
说明
径流分为直接径流和基流,直接径流退水快而陡,基流退水慢而平缓。基流是指来源于地下水的径流,在枯水季节是径流的主要组成部分。基流相对稳定,对于维持河流生态、保障流域生产生活用水以及水环境保护具有重要的意义。
基流分割方法根据基流计算的原理, 分为图解法、 物理化学法、 数学物理法、 水文模型法和数值模拟法。常用的数值模拟法有数字滤波法、 BFI法、 HYSEP法、 PART法和加里宁法。
一、数字滤波法
数字滤波法利用数字滤波器将径流过程划分为直接径流和基流两个部分。直接径流代表快速响应特征,与数字信号中的高频部分相似,而基流代表慢速响应特征,与数字信号中的低频部分相似。该方法包括单参数滤波法和双参数滤波法(又称递归数字滤波法)。
单参数数字滤波
Lyne-Hollick滤波法
Lyne-Hollick滤波法由Lyne和Hollick于1979年首次提出, 并由Nathan和Mcmahon于1990年引入到水文中进行基流分割, 其基流分割方程为:
Chapman滤波法
Chapman 于1991年对Lyne-Hollick滤波法进行了改进, 提出了Chapman滤波法, 改进后的基流分割方程为:
Chapman-Maxwell滤波法
Chapman和Maxwell于1996把基流假定为同时刻的地表径流和前一时刻基流的加权平均, 提出了Chapman-Maxwell滤波法, 基流分割方程如下:
Boughton-Chapman滤波法
为使基流分割更为平滑, Boughton于1993年提出Boughton-Chapman滤波法, 基流分割方程为:
双参数滤波法
Eckhardt滤波法
Eckhardt在单参数的基础上提出了一种双参数数字滤波方法,包含2个滤波参数(退水常数α和最大基流指数BFImax), 方法更加灵活准确, 其计算如式所示:
MRC方法可用BASEFLOW程序实现,双参数方法相对于单参数方法的优势在于可以通过调节 B F I m a x BFI_{max} BFImax来修改基流过程。 B F I m a x BFI_{max} BFImax不是一个可观测的量,Eckhardt给出了推荐值:对于常年性排水流域为0.8,对于季节性排水流域为0.5,对于常年性排水但是硬质基岩的流域为0.25。需要指出的是,当 B F I m a x BFI_{max} BFImax为0.5时,双参数和单参数数字滤波方法等价。
二、其他基流分割方法
基流指数(BFI)法
基流指数(BFI)法又称最小滑动法, 该方法以基流指数为权系数来计算基流量, 在区域枯季径流的研究中, 该值可反映区域地下水资源量的参数。通常情况下, 主要由地下水补给的河流BFI接近1, 而季节性河流的BFI值趋近0。
BFI法是英国水文所 (Institute of Hydrology) 提出的一种基流分割方法,又叫最小滑动法。其原理为:首先将年流量过程按照给定的时间间隔N分割为m(m=365/N) 段,确定每段的最小流量序列 (q1,q2,…,qm);然后从中确定拐点 (如果满足kqt小于qt-1和qt+1,则qt为拐点)。最后将所有的拐点连接得到基流过程,拐点之间的基流则通过线性插值得到。如果某时刻基流超过总径流,则将该时刻基流修改为总径流量。在实际分割中,通常k取值0.9或者0.979能得到较好的效果。此外,在地下水分析中基流指数BFI (一般以年或者多年为统计时期) 是反映流域特性的一个重要特征量,其定义为统计时期内基流所占总径流的比。
时间步长(HYSEP)法
Petty John和Henning于1979年提出了HYSEP程序, 此方法首次实现了基流计算的程序。HYSEP法是美国地质调查局(USGS)使用的主要基流计算方法。HYSEP法有固定步长法、 滑动步长法和局部最小值法3种方式。固定步长法(Fixed interval), 在上述所选取的时间间隔内, 将该时间间隔内的最小流量作为该时段内任意一天的基流。滑动步长法(Sliding interval), 将某天前后(2N-1)/2d内的最小流量作为该天的基流, 由此计算出每一天的基流。局部最小值法(Local minimum), 选择时间步长内中心点前后(2N-1)/2d内的最小流量作为相邻时间步长内中心点的基流值, 然后通过线性内插得到步长中心点之外时段的基流。3种方法均以本次计算的终点作为下次时间的起点, 重复以上过程便可计算出基流分割过程。
PART法
PART是美国地质调查局(USGS)提出的用于分割基流的另一种计算机程序, PART法适用于以谷地泻流方式排泄或测站位于下游终点的河流, 所需径流资料不少于一个水文年。该方法以日流量为数据源, 基于前期径流消退进行分割。这种方法首先将日平均流量数据排列成单维数组, 然后在数组中选择符合前期衰退要求的日值, 在符合条件的这些天数中, 如果日衰退量小于0.1个对数周期, 日径流量值即作为基流量, 在其余的日期中, 基流值则通过线性插值的方法来获得。
加里宁-阿里巴扬基流估算改进方法
基于水量平衡原理, 加里宁提出了基流的分割方法, 杨远东和陈利群等对其进行改进。实际资料表明, 改进的方法避免了地下水流量过程估算的任意性, 且减少了计算工作量, 所得成果是合理的, 方法是简易可行的。其估算方程为:
三、计算程序及代码
SWAT Baseflow Program基流计算程序
基本原理
该程序使用递归滤波技术来分离基本流量,并计算流量衰退常数(α),SWAT官网包含该程序的下载链接。SWAT Bflow程序的算法参照Arnold和Allen等人提出的单参数数字滤波方法,其滤波方程为:
滤波器可以在流量数据上通过三次(正向、反向和正向),这取决于用户从流量数据的试点研究中选择的基本流量估计值。通常,每次通过都会导致基本流量占总流量的百分比减少。对于所分析的数据,显示基流的最高、最低和平均减少量。此选项为用户提供了更多的灵活性,可以调整分离,以更准确地接近现场条件。可以参考相关论文,以及实际情况选择合适的通道。
根据base flow源代码,Baseflow 中3个通道(Bflow Pass1、2、3),的基流计算代码如下:
!! perform passes to calculate base flow
f1 = 0.925
f2 = 0.
f2 = (1. + f1) / 2.
surfq(1) = strflow(1) * .5
baseq(1,1) = strflow(1) - surfq(1)
baseq(2,1) = baseq(1,1)
baseq(3,1) = baseq(1,1)
!! make the first pass (forward)
do i = 2, isumdsurfq(i) = f1 * surfq(i-1) + f2 * (strflow(i) - strflow(i-1))if (surfq(i) < 0.) surfq(i) = 0.baseq(1,i) = strflow(i) - surfq(i)if (baseq(1,i) < 0.) baseq(1,i) = 0.if (baseq(1,i) > strflow(i)) baseq(1,i) = strflow(i)
end do!! make the second pass (backward)
baseq(2,isumd - 1) = baseq(1,isumd - 1)
do i = isumd - 2, 1, -1surfq(i) = f1 * surfq(i+1) + f2 * (baseq(1,i) - baseq(1,i+1))if (surfq(i) < 0.) surfq(i) = 0.baseq(2,i) = baseq(1,i) - surfq(i)if (baseq(2,i) < 0.) baseq(2,i) = 0.if (baseq(2,i) > baseq(1,i)) baseq(2,i) = baseq(1,i)
end do!! make the third pass (forward)
baseq(3,isumd - 1) = baseq(1, isumd - 1)
do i = 2, isumdsurfq(i) = f1 * surfq(i-1) + f2 * (baseq(2,i)- baseq(2,i-1))if (surfq(i) < 0.) surfq(i) = 0.baseq(3,i) = baseq(2,i) - surfq(i)if (baseq(3,i) < 0.) baseq(3,i) = 0.if (baseq(3,i) > baseq(2,i)) baseq(3,i) = baseq(2,i)
end do
Baseflow输入输出文件
输入文件主要是参数文件file.lst、流量序列文件xxxxxxxx.prn。
对于file.lst,文件内容如下,对于第2-4行的变量,程序不要求数字位于该行的某个位置。但是,数字必须是行上的第一个数字,后面必须有一个空格,以将其与行上写的任何其他内容隔开。
文件变量格式为
NDMIN,用于计算地下水衰退方程中 alpha 值的最小天数。NDMIN 的默认设置为 10。
NDMAX,用于计算地下水衰退方程中 alpha 值的最大天数。NDMAX 的默认设置为 300。
IPRINT, 该变量控制每日数据的打印。0 不打印每日值,1 打印每日数值如果 IPRINT 设置为 1,则必须定义输出文件名 FLWFILE_OUT。 IPRINT 的默认设置为 0。
FLWFILE,包含每日流量数据的文件的名称。 文件名最多可包含 15 个字符。 可以同时处理多个的流量数据文件。
FLWFILE_OUT,每日过滤器结果写入的文件的名称。 仅当 IPRINT = 1 时才需要。文件名最多可包含 15 个字符。 必须为每个流数据文件指定不同的每日输出文件名。
对于xxxxxxxx.prn,
baseflow 程序以空格分隔数据,第一列为时间YYYYMMDD,第二列为流量,
除了转换制表符之外,还必须删除 USGS 放置在数据文件顶部的所有标题信息。 基流程序假定文件中的第一行用于标头信息。 所有其他行应包含日期和每日流量值。
输出文件主要为baseflow.dat,xxxxxxxx.out(当IPRINT为1时),baseflow.dat各指标为
Baseflow Fr1,由第一通道估计的基流贡献系数。
Baseflow Fr2 由第二通道估计的基流贡献系数。
Baseflow Fr3 由第三通道估计的基流贡献系数。
NPR 用于计算主衰退曲线的单个基流衰退数量。
Alpha Factor 基流衰退常数
Baseflow days 基流衰退在一个对数周期内下降的天数。
xxxxxxxx.out中各列为:
Streamflow 流量数据文件中的逐日流量, m 3 / s m^3/s m3/s;
Bflow Pass1 第一通道估计的逐日基流, m 3 / s m^3/s m3/s;
Bflow Pass2 第二通道估计的逐日基流, m 3 / s m^3/s m3/s;
Bflow Pass3 第三通道估计的逐日基流, m 3 / s m^3/s m3/s。
Lyne-Hollick滤波法Python代码
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as npdef hollickLyneFilter(data, beta=0.925, invert=True):"""Calculate baseflow from a given discharge timeseries using the digital filter method proposed by Hollick and Lyne (1979).Definition----------def hollickLyneFilter(data,beta=0.925,invert=True)Input-----data : numpy.ndarray 1DOptional Input--------------beta : float -> dimensionless filter parameter. The default value was proposed by Nathan and McMahon (1990)invert : True -> add a backward filter pass: False -> no backward filterpass, will result in a phase shiftOutput------numpy.ndarray 1DLiterature----------Lyne, V. & Hollick, M. 1979, “Stochastic time-variable rainfall-runoff modelling”, Proceedings of the Hydrology and Water Resources Symposium, Perth, 10-12 September, Institution of Engineers National Conference Publication, No. 79/10, pp. 89-92. Nathan, R. J. & McMahon, T. A. 1990a, “Evaluation of automated techniques for base flow and recession analysis”, Water Resources Research , Vol. 26, pp. 1465-1473. """out = data.copy()for i in range(1, len(data)):bflow = beta * out[i-1] + (1 - beta) * .5 * (data[i]+data[i-1])out[i] = min(bflow, data[i])if invert:out = hollickLyneFilter(out[::-1], beta, invert=False)[::-1]return out[1:]if __name__ == "__main__":data = np.array([368.500, 408.100, 493.600, 502.500, 453.100, 439.600, 408.100,430.600, 417.100, 412.600, 390.100, 381.300, 360.300, 340.000,293.100, 276.600, 283.100, 279.800, 270.200, 263.900, 239.800])bflow = hollickLyneFilter(data)print("", bflow)blow = hollickLyneFilter(data, invert=False)print("", bflow)blow = hollickLyneFilter(data, .8)print("", bflow)
grwat中的基流分割方法
grwat实现了几种基流滤波方法,包括Lyne和Hollick(1979)、Chapman(1991)、Boughton(1993)、Jakeman和Hornberger(1993)以及Chapman and Maxwell(1996)的方法。
hdata = spas %>%mutate(lynehollick = gr_baseflow(Q, method = 'lynehollick', a = 0.9),boughton = gr_baseflow(Q, method = 'boughton', k = 0.9),jakeman = gr_baseflow(Q, method = 'jakeman', k = 0.9),maxwell = gr_baseflow(Q, method = 'maxwell', k = 0.9)) %>% pivot_longer(lynehollick:maxwell, names_to = 'Method', values_to = 'Qbase')ggplot(hdata) +geom_area(aes(Date, Q), fill = 'steelblue', color = 'black') +geom_area(aes(Date, Qbase), fill = 'orangered', color = 'black') +scale_x_date(limits = c(ymd(19810101), ymd(19811231))) +facet_wrap(~Method)
#> Warning: Removed 93508 rows containing non-finite values (`stat_align()`).
#> Removed 93508 rows containing non-finite values (`stat_align()`).
参考文献
李芳等,黄河源区白河基流分割方法适用性分析
胡胜等,基于数字滤波法和SWAT模型的灞河流域基流时空变化特征研究
Baseflow filtering
相关文章:

【Hydro】部分基流分割方法及程序代码说明
目录 说明一、数字滤波法单参数数字滤波Lyne-Hollick滤波法Chapman滤波法Chapman-Maxwell滤波法Boughton-Chapman滤波法 双参数滤波法Eckhardt滤波法 二、其他基流分割方法基流指数(BFI)法时间步长(HYSEP)法PART法加里宁-阿里巴扬…...
C#Regex正则表达式(Regular Expression)
在C#中,Regex是正则表达式(Regular Expression)的缩写,它是一种强大的文本匹配和处理工具。正则表达式是一种用于描述模式的字符串,它可以用来在文本中查找、替换和提取满足特定模式的内容。 在C#中,你可以…...

Wi-Fi还可以做什么?柯南解释IOT应用
大会报告:无线人工智能技术正在改变世界 Wi-Fi还可以做什么?随着带宽的提升,无线终端可以识别出更多的多径,每条多径都可以视作一个虚拟传感器,以感知周边环境。基于此,越来越多的无线感知产品应运而生。20…...
centos部署java程序
后台启动java程序 nohup java -jar -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/data/app1/logs/ /data/app1.jar --spring.config.location/data/app1/config/application.properties,/data/app1/config/application-dev.properties > /data/app1/logs 2>&1…...
Sqoop导入到Hive,Hive使用 HA
Sqoop写入Hive卡在连接Hive的JDBC上不执行 Sqoop访问 启用 HA模式的Hive 找到Hive的安装根目录:$HIVE_HOME/conf 创建一个新的配置文件:beeline-hs2-connection.xml <?xml version"1.0"?> <?xml-stylesheet type"text/xsl…...
[笔记] %的含义
取模 不赘述。 引导符 重点说一下在printf("%d", n);中的意思。 这里的意思是:将""外对应位置的结果返回给引导符所在的位置, %后面跟着的是结果对应的数据类型, 只有数据类型匹配才能正确输出结果。...

FRI及相关SNARKs的Fiat-Shamir安全
1. 引言 本文主要参考: Alexander R. Block 2023年论文 Fiat-Shamir Security of FRI and Related SNARKsAlbert Garreta 2023年9月在ZK Summit 10上分享 ZK10: Fiat-Shamir security of FRI and related SNARKs - Albert Garreta (Nethermind) 评估参数用的Sage…...

TensorFlow案例学习:使用 YAMNet 进行迁移学习,对音频进行识别
前言 上一篇文章 TensorFlow案例学习:简单的音频识别 我们简单学习了音频识别。这次我们继续学习如何使用成熟的语音分类模型来进行迁移学习 官方教程: 使用 YAMNet 进行迁移学习,用于环境声音分类 模型下载地址(需要科学上网&…...
MySQL CHAR 和 VARCHAR 的区别
文章目录 1.区别1.1 存储方式不同1.2 最大长度不同1.3 尾随空格处理方式不同1.4 读写效率不同 2.小结参考文献 在 MySQL 中,CHAR 和 VARCHAR 是两种不同的文本数据类型,CHAR 和 VARCHAR 类型声明时需要指定一个长度,该长度指示您希望存储的最…...
虚拟机 ping: www.baidu.com:未知的名称或服务
1、打开ifcfg-ens33文件 vi /etc/sysconfig/network-scripts/ifcfg-ens332、如下,加上网关和dns就行了,紫色部分,也就是DNS1“114.114.114.114” TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTP…...

第二章 Python字符串处理
系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…...

混合编程 ATPCS规范及案例(汇编调用C、C调用汇编、内联汇编)
1.混合编程的规范 2.汇编调用C 2.C调用汇编 3.内联汇编 例子:...

使用Gorm进行CRUD操作指南
使用GORM在Go中创建、读取、更新和删除记录的逐步教程 在数据库管理中,CRUD操作是应用程序的支柱,它们使数据的创建、检索、更新和删除成为可能。强大的Go对象关系映射库GORM通过抽象SQL语句的复杂性,使这些操作变得轻松。本文将作为您全面指…...

Linux0.11内核源码解析-exec.c
主要实现对二进制可执行文件和shell文件的加载和执行,其中主要的函数是do_execve(),它是系统中断调用int 0x80的功能号__NR_execve()调用,是exec()函数的主要实现以下几点功能: 1.执行对参数和环境参数空间页面的初始化操作,初始…...

百度竞价排名推广对比自然排名哪一个更具优势-华媒舍
在搜索引擎结论网页页面(SERP)中,我们经常会看到一些网站链接及其广告栏。这种连接一般分为两种类型:百度竞价推广排名推广与自然排名。究竟哪个更有优势?本文将对这几种排名形式进行科谱详细介绍。 什么叫百度竞价推广…...

python第一课 变量
1.离线的情况下首选txt文档 2.有道云笔记 3.思维导图 xmind mindmaster 4.博客 5.wps流程图 # 变量的命名规则 1.变量名只能由数字字母下划线组成 2.变量名不能以数字开头 3.变量名不能与关键字重名 快捷键 撤销:Ctrl/Command Z 新建:Ctrl/Com…...
shell之netstat的用法
shell之netstat的用法 所有参数应用举例 所有参数 1)-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。 2)-i 显示所有网络接口的信息。 3)-r 显示路由表的信息。 4)-s 显示按各个协议的统计信息。 5&am…...

MSQL系列(十二) Mysql实战-为什么索引要建立在被驱动表上
Mysql实战-为什么索引要建立在被驱动表上 前面我们讲解了BTree的索引结构,也详细讲解下 left Join的底层驱动表 选择原理,那么今天我们来看看到底如何用以及如何建立索引和索引优化 开始之前我们先提一个问题, 为什么索引要建立在被驱动表上…...

C语言,数据结构指针,结构构体操作符 •,->,*的区别,看这篇就够了
在朋友们学习指针和数据结构这一章的时候,对各种操作符云里雾里。当你看到这么文章之后你就会明白了。 一 • 和 ->运算符 • 运算符:是结构变量访问结构体成员时用的操作符 -> 运算符:这是结构体指针访问结构体成员时调用的运算符。 …...
axios 多个baseURL配置、实现不同前缀代理到不同的服务器的几种方式
前言: 在开发中,有可能遇到每部分的功能的需要调用另一台服务器的地址。这个时候就需要设置不同的请求前缀首先代理到不同的服务器地址。 一、axios封装实例以及代理:(不是完整的封装实例,重点在于baseURL的区别) 文件路径&…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...