【Hydro】不同潜在蒸散发计算方法说明

目录

一、基本概念说明

蒸发 E E E、散发 T T T、蒸散发 E T ET ET

蒸散发 Evapotranspiration 包括蒸发 Evaporation 和散发(或蒸腾) Transpiration。
在这里插入图片描述

潜在蒸散发 E T p ET_p ETp、参考作物蒸散发 E T 0 ET_0 ET0、实际蒸散发 E T a ET_a ETa及作物实际蒸散发 E T c ET_c ETc

蒸散发 E T ET ET是指水从地表蒸发并进入大气中的过程;
潜在蒸散发(Potential Evaportranspiration, E T p ET_p ETp)亦称为可能蒸散发或蒸散发能力,简而言之,是指下垫面充分供水时的蒸散发;目前关于潜在蒸散发的定义还存在很大的分歧,不同学者根据不同的假设条件,提出了具有本质差别的定义。
参考作物蒸散发 E T 0 ET_0 ET0则是指假设作物冠层与大气之间连续充分通气的条件下,作物叶面蒸腾和棵间蒸发损失的总和;
实际蒸散发 E T a ET_a ETa则是指在农田中实际发生的蒸散发,而作物实际蒸散发 E T c ET_c ETc则是指作物实际发生的蒸散发。
下图是几个相关概念的从属关系, E T a ET_a ETa E T c ET_c ETc E T p ET_p ETp E T 0 ET_0 ET0都是ET的次级概念,其中 E T p ET_p ETp E T 0 ET_0 ET0都能与 E T a ET_a ETa产生关联,因此有一定的共性。而 E T c ET_c ETc E T a ET_a ETa的一部分,因为 E T c ET_c ETc E T a ET_a ETa的范围缩小至特定的作物,进而与林地等的 E T a ET_a ETa进行区分。
在这里插入图片描述

二、部分潜在蒸散发估算方法表

国际上估算潜在蒸散发的模型有近50种;分为温度法、质量传输法、辐射法、综合法四类;彭曼方法被证明在不同条件下准确估算潜在蒸散发的值;但该方法需要大量气象数据,受资料和数据精度限制。
下表为13 种估算潜在蒸散发的方法,其中有综合法( P - M 方法) 、4 种温度法、2 种质量传输法以及 6 种辐射法:
在这里插入图片描述

三、SWAT模型中的潜在蒸散发计算

SWAT模型中包括三种潜在蒸散发计算:Penman-Monteith法(Monteith, 1965; Allen, 1986; Allen et al.,1989),Priestley-Taylor法(Priestley and Taylor,1972)和Hargreaves法(Hargreaves and Samani,1985)。SWAT模型也可以读入用户采用其他方法计算的潜在蒸散发量。

SWAT模型中三种方法需要的输入项不同:Penman-Monteith法需要太阳辐射、气温、相对湿度和风速;Priestley-Taylor法需要太阳辐射、气温和相对湿度;Hargreaves法只需要气温。

Penman-Monteith法

在这里插入图片描述
在这里插入图片描述

Priestley-Taylor法

在这里插入图片描述

Hargreaves法

在这里插入图片描述

四、气象干旱等级规范(GB/T 20481—2017)

根据气象干旱等级规范,计算MI(相对湿润度指数)时,标准推荐两种方法计算潜在蒸散量,即Thornthwaite方法和FAO Penman-Monteith方法。其中,FAO Penman-Monteith方法计算误差小,但需要的气象要素多,Thornthwaite 方法计算相对简单,需要的气象要素少,但有一定的局限性。使用者请根据资料条件选择合适的计算方法。

在这里插入图片描述

Thornthwaite方法

以下是Thornthwaite方法介绍
在这里插入图片描述

Thornthwaite方法python代码

以下是摘自互联网,基于Thornthwaite方法的python计算代码
原始数据:
在这里插入图片描述

处理后的数据:
在这里插入图片描述

代码:

#!usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: Su
@file: calculateMI.py
@time: 2023/08/17
@desc:
"""
import pandas as pd
import numpy as np


df = pd.read_excel('processdata/lianxi/鄂尔多斯.xlsx')
df[df['temp']<0] = np.nan
ab = df.dropna(axis=0,how='all')

# 计算Hi
temp = ab.temp.values
T = np.power(temp/5,1.514)
Hi = pd.DataFrame(T)

# 创建一个新DataFrame放入分类好后的站点数据
df2 = pd.DataFrame(ab)
df2.insert(loc=7, column='Hi',value=Hi.values)
# 给站点分类
nameList1 = set(df2.name.values)


# 想将结果写入excel,需创建空的dataframe
df_all = pd.DataFrame(data=None)

for i in nameList1:
    # 进行站点遍历
    dfName = df2[df2['name'] == i]
    df3 = pd.DataFrame(dfName)
    # 分年求和
    nameList2 = set(df3.year.values)


    for j in nameList2:
        # 按年遍历
        dfYear = df3[df3['year'] == j]
        df4 = pd.DataFrame(dfYear)
        # 计算Hi的和
        H_sum = dfYear['Hi'].sum()
        df4.insert(loc=8, column='H_sum', value=H_sum)
        # 计算A值
        A = (6.75e-07)*np.power(H_sum,3) - (7.71e-05)*np.power(H_sum,2) + (1.792e-02)*H_sum + 0.49
        df4.insert(loc=9, column='A', value=A)
        # 提取temp、H_sum、A用于计算PET
        temp = df4.temp.values
        H_sum = df4.H_sum.values
        A = df4.A.values
        # 计算PET
        PET = 16 * np.power((10*temp)/H_sum,A)
        df4.insert(loc=10, column='PET',value=PET)
        df5 = pd.DataFrame(df4)
        # concat 合并有相同字段名的dataframe
        df_all = pd.concat([df_all, df5],ignore_index=True)

# 避免字段名重复写入,一般会做去重处理
data_list = df_all.drop_duplicates(keep='first')
# 写出数据
df_all.to_excel('processdata/lianxi/鄂尔多斯PET.xlsx', index=False)

六、潜在蒸散发计算Python代码

源代码下载:潜在蒸散发计算Python源代码
具体包括以下方法

  • ETBase
  • Abtew
  • Albrecht
  • BlaneyCriddle
  • BrutsaertStrickler
  • Camargo
  • Caprio
  • ChapmanAustralia
  • Copais
  • Dalton
  • DeBruinKeijman
  • DoorenbosPruitt
  • GrangerGray
  • Hamon
  • HargreavesSamani
  • Haude
  • JensenHaiseBasins
  • Kharrufa
  • Linacre
  • Makkink
  • Irmak
  • MattShuttleworth
  • McGuinnessBordne
  • Penman
  • PenPan
  • PenmanMonteith
  • PriestleyTaylor
  • Romanenko
  • SzilagyiJozsa
  • Thornthwait
  • Ritchie
  • Turc
  • Valiantzas

,测试数据集camels_aus测试数据集下载方法:
pip install camels_aus,使用代码下载读取数据集

from camels_aus.repository import CamelsAus, download_camels_aus
download_camels_aus(path=r"E:/Other/ET_Python/data") # 下载到指定目录

读取文件

repo = CamelsAus()
repo.load_from_text_files(r"E:/Other/ET_Python/data")
dataset = repo.data

参考文献

论潜在蒸散发、参考作物蒸散发、实际蒸散发及作物实际蒸散发之差异
计算潜在蒸散量PET的方法
伍海,等,变化环境下12种潜在蒸散发估算方法 在不同干湿区的适用性
气象干旱等级规范(GB/T 20481—2017)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/115324.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

尚硅谷大数据项目《在线教育之实时数仓》笔记005

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第9章 数仓开发之DWD层 P031 P032 P033 P034 P035 P036 P037 P038 P039 P040 第9章 数仓开发之DWD层 P031 DWD层设计要点&#xff1a; &#xff08;1&#xff09;DWD层的设计依…

提示3D标题编辑器仍在运行怎么解决,以及3D标题编辑器怎么使用

在进行视频剪辑时&#xff0c;尤其是剪辑一些带有文字的开场视频&#xff0c;一般都会使用具有立体效果的3D标题&#xff0c;这样制作出来的视频效果不仅好看&#xff0c;还非常的炫酷&#xff0c;但是对于一些刚刚开始接触视频剪辑的小伙伴来说&#xff0c;可能对3D标题还不是…

【深度学习基础】Pytorch框架CV开发(2)实战篇

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

VMware 虚拟机安装 CentOS 7

CentOS 7 1. 下载CentOS 7 iso镜像 Index of /centos/7.9.2009/isos/x86_64/ 2. Vmware安装CentOS 7 安装教程&#xff1a; 超详细VMware CentOS7(最小安装)安装教程_虚拟机最小化安装-CSDN博客 【精选】VMware 安装 Centos7 详细过程_vm虚拟机安装centos7_expectation Fu…

VBA快速动态考勤统计

实例需求&#xff1a;某公司的上下班打卡记录如下所示&#xff0c;其中Table_In为上班打卡记录&#xff0c;Table_Out为下班打卡记录。 现在需要根据日期整理为如下格式的考勤表。需要注意如下几点&#xff1a; 每天的打卡次数不确定最后一列Total/Day统计该天的出勤总时长&a…

04.Oracle的体系架构

Oracle的体系架构 一、主要组件二、Oracle的实例 一、主要组件 下面是一张网图&#xff0c;大家可以了解一下oracle的体系架构 Oracle数据库的体系架构可以分为以下几个主要组件&#xff1a;实例&#xff08;Instance&#xff09;、数据库&#xff08;Database&#xff09;、…

【React】03.脚手架的进阶应用

文章目录 暴露webpack配置暴露前后的区别config文件夹&#xff1a;scripts文件夹&#xff1a;package.json 常见的配置修改1.把sass改为less2.配置别名3.修改域名和端口号4.修改浏览器兼容5.处理Proxy跨域 2023年最新珠峰React全家桶【react基础-进阶-项目-源码-淘系-面试题】 …

JVM 内存和 GC 算法

文章目录 内存布局直接内存执行引擎解释器JIT 即时编译器JIT 分类AOT 静态提前编译器&#xff08;Ahead Of Time Compiler&#xff09; GC什么是垃圾为什么要GC垃圾回收行为Java GC 主要关注的区域对象的 finalization 机制GC 相关算法引用计数算法&#xff08;Reference Count…

Iceberg 基础知识与基础使用

1 Iceber简介 1.1 概述 为了解决数据存储和计算引擎之间的适配的问题&#xff0c;Netflix开发了Iceberg&#xff0c;2018年11月16日进入Apache孵化器&#xff0c;2020 年5月19日从孵化器毕业&#xff0c;成为Apache的顶级项目。 Iceberg是一个面向海量数据分析场景的开放表格…

Cross-Entropy Loss(多分类损失函数)

文章目录 1. 网络输出output&#xff1a;score2. Cross-Entropy Loss(多分类损失函数) 1. 网络输出output&#xff1a;score 2. Cross-Entropy Loss(多分类损失函数) 先用softmax function把score 变成 probabilities。再用交叉熵损失函数来进行Loss的计算

设计模式(23)解释器模式

一、介绍&#xff1a; 1、定义&#xff1a;解释器(Interpreter)模式是一种对象的行为模式。给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语言中的句子。 2、组成结构&#xff1a; &#xff08;1&…

C#__对Json文件的解析和序列化

Json: 存储和交换文本信息的语法。&#xff08;类似XML&#xff0c;语法独立&#xff09; 一种轻量级的数据交换格式。&#xff08;更小&#xff0c;更快&#xff0c;更易解析&#xff09; 语法规则: 数据在键值对里面&#xff0c;数据由逗号分隔开。 …

android display 杂谈(三)WMS

用来记录学习wms&#xff0c;后续会一点一点更新。。。。。。 代码&#xff1a;android14 WMS是在SystemServer进程中启动的 在SystemServer中的main方法中&#xff0c;调用run方法。 private void run() { // Initialize native services.初始化服务&#xff0c;加载andro…

Azure 机器学习 - 无代码自动机器学习的预测需求

了解如何在 Azure 机器学习工作室中使用自动化机器学习在不编写任何代码行的情况下创建时序预测模型。 此模型将预测自行车共享服务的租赁需求。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕…

面试算法47:二叉树剪枝

题目 一棵二叉树的所有节点的值要么是0要么是1&#xff0c;请剪除该二叉树中所有节点的值全都是0的子树。例如&#xff0c;在剪除图8.2&#xff08;a&#xff09;中二叉树中所有节点值都为0的子树之后的结果如图8.2&#xff08;b&#xff09;所示。 分析 下面总结什么样的节…

【RtpSeqNumOnlyRefFinder】webrtc m98: ManageFrameInternal 的帧决策过程分析

Jitterbuffer(FrameBuffer)需要组帧以后GOP内的参考关系 JeffreyLau 大神分析 了组帧原理而参考关系(RtpFrameReferenceFinder)的生成伴随了帧决策 FrameDecisionFrameDecision 影响力 帧的缓存。调用 OnAssembledFrame 传递已经拿到的RtpFrameObject 那么,RtpFrameObject…

【面试专题】设计模式篇①

1.工厂设计模式 工厂设计模式是一种创建型模式&#xff0c;它提供了一种创建对象的接口&#xff0c;但具体创建的对象类型可以在运行时决定。工厂设计模式主要解决的是创建对象的灵活性问题。 工厂设计模式主要包括简单工厂模式、工厂方法模式和抽象工厂模式三种。 简单工厂…

深度学习之基于YoloV5的道路地面缺陷检测系统(UI界面)

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、道路地面缺陷检测系统四. 总结 一项目简介 基于YoloV5的道路地面缺陷检测系统利用深度学习中的目标检测算法&#xff0c;特别是YoloV5算法&am…

antd Cascader级联菜单无法赋值回显问题

说起来太丢人了&#xff0c;自己还拿官网例子在这里调试半天&#xff0c;最后发现是一个特别小儿科的问题哈哈 Cascader级联数据是服务端返回然后自己处理过的&#xff0c;使用了cascader的fileNames属性重置字段名&#xff0c;最后发现服务端回传的数据无法赋值回显在组件上&…

vscode设置保存后,自动格式化代码

第一步&#xff1a;打开setting.json文件 第二步&#xff1a;在setting.json中加入以下代码 "editor.formatOnType": true, "editor.formatOnSave": true, "editor.formatOnPaste": true