APSIM实战练习:Kingsthorpe土壤水分蒸发研究

news2025/1/4 18:49:47

在本练习中,您将对来自澳大利亚昆士兰州金斯索普的真实试验的数据进行建模。使用从试验中观察到的数据,您将创建一个气象文件,模拟三个蒸发曲线并将模拟输出与观察到的数据进行比较。

有关试用的更多背景信息,请参阅此 PowerPoint 演示文稿。请注意,该演示文稿是为 APSIM 课堂培训计划设计的,因此缺乏对所含图表的深入分析。

入门

从 APSIM 安装文件夹(默认为 C:\Program Files(x86)\Apsim[version]-r[revision]\Documentation)中的文档文件夹中提取 Advanced_Scenario zip 到您可以处理它的地方(例如文档或桌面) ). 我们将编辑和保存文件,您的安全设置可能会阻止您保存到安装文件夹。

此方案假设您熟悉 Excel 和基本的 Windows 功能,例如重命名文件。没有为这些任务提供分步说明。此外,该场景设计用于与培训师一起在课堂环境中使用。因此,此处可能无法完全解释某些概念。但是,如果您已成功完成基本练习,您应该能够轻松完成任务。
其实还是有很多小障碍

首先,从零创建met气象文件

模拟任何试验的第一步是确保您拥有准确的气候数据。您将使用的数据是从试验地点的气象站收集的。原始的每小时数据被处理成每日数据,并以您在此处看到的形式呈现。

  1. 打开文件 Data.xlsx 并单击天气表。还为不使用 Excel 的用户提供了数据的“.csv”文件。当系统要求您单击选项卡时,请参考这些内容。前几行看起来像这样:
    在这里插入图片描述

  2. 您可能还记得 APSIM 需要六列才能运行。您可以拥有其他数据,例如蒸汽压力或风速,并通过脚本访问它们,但 APSIM 不会使用它们。这些列是:年、日、最低气温、最高气温、降雨量和 辐射量。它们分别是年份、年份、最低和最高温度(摄氏度)、降雨量(毫米)和入射太阳辐射(兆焦耳/平米 / 天)。虽然这些列是强制性的,但它们的位置不是;它们可以按任何顺序排列。

  3. 创建一个新工作表。创建天气文件时最好开始一个新工作表,这样您就不会覆盖现有数据。

  4. 在新工作表的前两列顶部单元格中输入“year”和“day”(无引号)。

  5. 将最高温度、最低温度、辐射和雨量列复制到年和日列之后的新表中。

  6. 将 max temp、min temp 和 rad 分别重命名为 maxt、mint 和 radn。

  7. 我们不需要那么多小数位。选择所有包含数据的列(不是年和日列),将数据类型更改为数字并使用“减少小数”选项(点击相应单元格区域,开始->数值)将小数位数减少为一位。请注意,这不会导致数据丢失,它只会影响显示。

  8. 您的工作表现在应该如下表所示。请注意,列名不能包含空格。
    在这里插入图片描述

  9. 我们将使用一个公式来计算年值和日值。这将允许您复制所有日子的公式,无论您有多少年。在 day 下方的第一个单元格中键入此公式:=Weather!A2 – DATE(2010,1,0) 其中 Weather 是包含天气数据的工作表,A2 是包含第一个 Date 的单元格,2010 是天气的第一年数据。您可能需要将列的格式从“日期”更改为“常规”。在“年”列中再次使用公式:=YEAR(Weather!A2),A2 是包含第一个日期的单元格,Weather 是包含源数据的工作表。您可能还需要更改此列的格式。

  10. 将两个公式向下复制以完成列。

  11. 现在我们需要添加单位。文件中的每一列都必须有一个关联的单位(请注意,这不允许您更改 APSIM 使用的单位。例如,温度必须以摄氏度为单位,您不能通过在单位字段中输入 oF 来使它们成为华氏度。添加另一个在标题下但在第一行数据之前的行,如下所示。请注意,无单位列需要有空括号。
    在这里插入图片描述

  12. 还有两件事我们需要补充。在工作表顶部插入两行。在第一行中键入“[weather.met.weather]”(无引号)。这向 APSIM 表明这是一个天气文件。在第二行中,键入“latitude = -27.478”(无引号)。您必须提供纬度,因为 APSIM 使用它来计算日长。建议使用经度,但不是必需的。如果你确实放了一个,它会在单独的一行上。

  13. 选择所有数据并使其右对齐。这不是必需的,但它可以在以后停止对齐问题。

  14. 确保列之间有一些空间!在上表中,每一列的数据之间有相当多的空白,所有数据都是右对齐的。如果没有足够的空间,Excel 将保存最终输出文件,而列之间没有空格,这会破坏文件。这就是为什么我们右对齐文本的原因;以确保它不会聚在一起。

  15. 保存文件。

  16. 单击文件 -> 另存为。从下拉列表中选择格式化文本(空格分隔)(.prn)。

  17. 将文件另存为天气。您会收到一些关于丢失格式的警告。全部单击“确定”。这就是您在更改格式之前保存文件的原因。

  18. 单击文件 -> 关闭。请注意,现在您正在处理 .prn 文件,而不是您的原始文件。此处所做的任何更改都不会反映在源文件中。该文件也必须在加载到 APSIM 之前关闭,否则您将收到错误消息。它会问你是否要保存,说不。

  19. 转到保存文件的文件夹。它将被称为 Weather.prn。将名称更改为 Weather.met。您可能需要取消隐藏文件扩展名才能正常工作。

  20. 我们的文件需要几个常量才能完整:TAV(年平均环境温度)和 AMP(月平均温度的年振幅)。我们在这里提供了一个工具,这样您就不需要自己输入这些了。运行该工具,选择您刚刚创建的文件,然后单击“开始”。它将为您插入所需的数字。注意使用这个脚本处理,需要列宽度不能太大,只要不相互遮挡就可以,可以用记事本先打开看看,太宽了会使脚本报错

现在可以像往常一样将 met 文件加载到 APSIM 中。请注意,我们已从原始数据中删除了日期列。met 组件只需要数字,因此不能使用像斜杠这样的字符。

建立第一个模拟

  1. 打开 APSIM。单击“新建”并选择“连续小麦”作为基础模拟。我们使用这个是因为它有我们需要的所有节点加上一些我们将删除的节点。将其另存为“Scenario.apsim”,保存在与您的 met 文件相同的文件夹中。

  2. 这是裸土试验,所以我们不需要作物或肥料。删除肥料、小麦和管理器文件夹节点。

  3. 我们正在对从 4 月、5 月和 9 月开始的三条曲线建模。将您的模拟重命名为 April 并保存。它应该是这样的:

在这里插入图片描述
4. 单击 met 并选择您刚刚创建的 Weather.met 文件。如果它没有加载,请检查格式是否正确以及列之间是否有足够的空间。

  1. 点击时钟。将开始日期更改为 02/04/2010,将结束日期更改为 03/05/2010。

  2. 我们现在需要将土壤参数更改为现场测量的参数。如果您还没有 Data.xlsx 文件,请打开它并转到“土壤”选项卡。单击模拟中土壤下的水节点,在表中输入深度、BD、AirDry、LL15、DUL 和 SAT 列的值。将 KS 列留空。请注意,存在小麦、高粱和棉花的详细信息,并以粉红色突出显示。这表明这些值是计算得出的,不能更改或删除。大多数 Vertosol 土壤都是这样的。另请注意,土壤分析有很多我们不会使用的额外数据。

  3. 单击土壤水。设置等于下表的值。这些值是使用测量数据为当前土壤计算的,但该过程不是本练习的一部分。

  4. 在这里插入图片描述
    我们将底层的 SWCON 和 MWCON 设置为 0,以证实there is no drainage out of the lysimeter (steel plate)这句话不好翻译。
    在这里插入图片描述

  5. 删除 Initial water 节点。我们将逐层指定起始含水量。

  6. 单击初始氮气。将所有起始 N 设置为 0,我们在本次试验中不考虑 N。更改图层以使用与水节点中相同的结构。

  7. 将以下值添加到 SW 列:
    在这里插入图片描述
    我们希望模拟从与观察到的土壤相同的土壤含水量开始。通过使用不同的起始值运行每条曲线并使用与观察值匹配的曲线来找到这些值。在整个试验中,运行了大约 20,000 次模拟以确定所有曲线的起始条件。为了节省时间,这里提供了最终值。

  8. 将 SurfaceOrganicMatter -> Initial surface residue 更改为 0。

  9. 删除除 Date 之外的所有输出变量并添加 sw_dep()。

  10. 将报告频率更改为 end_day。

  11. 运行模拟以确保没有错误。

准备观测数据

在 APSIM 中使用观测数据与创建 met 文件非常相似。您将需要一个包含数据的表格,其中的标题与 APSIM 中的输出相匹配,以及标题下的一行单位。您还需要一个列,其中包含 APSIM 可用于匹配观察数据和建模数据的数据。在此示例中,日期将是我们匹配的列。

在 Data.xlsx 文件中,有两张纸,Kings daily 和 Kings sw_dep。Kings daily 是从蒸渗仪中的负载计收集的原始数据。还有四列用于校正因子(每个代表一个),用于校正因子总和的列和用于校正质量的列。在试验期间,称重传感器有时无法正确测量(一些因素包括调节器损坏、洪水、为称重传感器测试添加已知重量以及读取读数时站在传感器上的当地动物群)。这些错误在数据中显示为大下降或尖峰,在一两天后自行纠正。使用的校正因子消除了这些大的增量。您会注意到图中的直线段。这些时期代表缺失数据;

对于任何数据集,在尝试对其建模之前总是需要考虑错误来源。不要忘记模型和真实数据都可能是错误的来源。如果您的建模结果与您观察到的结果不吻合,最好检查您的测量数据是否尽可能没有错误。事实上,您可以预料,您建模的大部分时间实际上都花在了清理数据上。建立这个试验的模型花了一两周的时间。清理数据花了将近三个月的时间,即便如此,很多数据还是因为无法量化的错误而被拒绝。最后,从最多 60 条可能的曲线中选出了 38 条干燥曲线。其他曲线由于测量数据误差过大而被拒绝。

  1. 打开 Data.xlsx 并单击 Kings sw_dep 选项卡。您将使用的数据已经过错误更正。

  2. 我们将对所有四次代表的平均值进行建模。将均值列重命名为 sw_dep()。通过在观察数据和建模数据中使用列的名称,同一 APSIM 可以将它们绘制在同一图表上。

3.调整小数位数为3位。

  1. 在标题下添加另一行并添加单位。() 为日期,(mm) 为其余。注意,这里的日期相应单元格数值格式是日期,但是要改为英国制,而不是其他值,即月/日/年,如02/28/2012这样才是正确的,否则待会读取不了

  2. 列靠的有点近。调整列宽,以便我们在保存时在它们之间获得足够的空间。

  3. 保存文件。

  4. 使用另存为将文件另存为“observed.prn”。

  5. 关闭 Excel 中的文件。

添加观测数据

现在我们已经有了 APSIM 可以处理的格式的观察数据,我们希望将其绘制在与我们的建模数据相同的图表上,以查看模型的有效性。

  1. 打开 Scenario.apsim(如果尚未打开)。

  2. 打开图形工具箱并将 XY 图放到“四月”模拟节点上。

  3. 打开 XY 节点并单击“绘图”。

  4. 使 X 变量 Date 和 Y 变量 sw_dep()。将“点类型”更改为“无”。

  5. 将绘图重命名为 sw_dep。它应该是这样的: 在这里插入图片描述

  6. 复制绘图节点并粘贴到 sw_dep 图上以创建第二个节点。将第一个图重命名为“预测”,将第二个图重命名为“观察”。
    在这里插入图片描述

  7. 我们将所有观察到的数据都放在一个文件中,但我们只想绘制其中的一部分。在观察到的节点上放置一个 Filter 组件(Graph > GraphBits > Filter)。

8.打开观察节点,剪切ApsimFileReader节点。将其粘贴到 Filter 节点上。它现在应该是这样的:

在这里插入图片描述
9. 单击 ApsimFileReader 并选择您的 observerd.prn 文件。如果文件格式正确,您将在列表中看到您的数据。

  1. 单击过滤器节点。在“输入过滤器表达式”中输入以下内容:

    日期 >= #4/2/2010# 和日期 <= #5/3/2010#。

请注意,日期现在采用美国格式 (MM/DD/YYYY),并且需要散列来表示日期。有关过滤器节点的更多信息,请参阅过滤器文档。

  1. 单击观察节点,将“点类型”更改为“圆”,将“线类型”更改为“无”。

  2. 单击 sw_dep 绘图节点,您应该会看到下图:
    在这里插入图片描述
    如果您的图表看起来不是这样,请检查前面的步骤;你可能错过了什么。
    其他月份的模拟,只需要改变相应筛选日期就行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统-进程与线程

进程的概念、组成、特征 概念 程序&#xff1a;是静态的&#xff0c;就是存放在磁盘里的可执行文件&#xff0c;如&#xff1a;QQ.exe。 线程&#xff1a;是动态的&#xff0c;是程序的一次执行过程&#xff0c;如&#xff1a;可同时启动多次QQ程序。 组成 进程由PCB、程序…

Java数组(复习)

Java数组 数组&#xff1a;数组是指一种容器&#xff0c;可以用来存储同种数据类型的多个值 数组容器在存储数据的时候&#xff0c;需要结合隐士转换考虑。例如&#xff1a;int类型的数组容器&#xff0c;可以存储byte&#xff0c;short&#xff0c;int类型的数组。double类型…

矩阵乘GPU性能优化之split k

矩阵乘计算GPU实现中通常为线程块计算一个较大的[m_tile, k] *[k, n_tile]的矩阵乘&#xff0c;最后分配到每个线程后同样为每个线程计算更小的一个[m_tile, k] *[k, n_tile]。 这样存在的一个问题主要是在于m和n较小而k很大时&#xff0c;如下图所示的矩阵乘案例&#xff0c;…

总结各种常见的池子

池化技术指的是提前准备一些资源&#xff0c;在需要时可以重复使用这些预先准备的资源。 池化技术的优点主要有两个&#xff1a;提前准备和重复利用。 像池化技术一些典型的池子就比如线程池&#xff0c;内存池&#xff0c;对象池&#xff0c;数据库连接池等等&#xff0c;线程…

cmake入门之一:编译、INSTALL及shell语句

cmake入门之一&#xff1a;编译、INSTALL及shell语句1.创建相应文件1.1 工程目录下CMakeLists.txt1.2 src文件夹1.2.1 src文件夹下main.c1.2.2 src文件夹下CMakeLists.txt1.3 runhello.sh1.4 其他文件/文件夹2.编译3.查看结果参考文献在学习cmake-practice这本书中的demo时&…

《基于机器学习的雷达辐射源分选与识别技术研究》论文解读

Data:2023-1-12 Ref: 李雪琼, “基于机器学习的雷达辐射源分选与识别技术研究,” PhD Thesis, 国防科技大学, 2020. 文章目录背景重频(PRI)基于已知信号的雷达分选技术基于未知信号的雷达分选技术这篇文章我主要关注他的第三、四章。第三章主要描述了基于已知信号的雷达分选技术…

《MySQL系列-InnoDB引擎15》文件-日志文件-慢查询日志

日志文件 日志文件记录了影响MySQL数据库的各种类型活动。MySQL数据库中常见的日志文件有&#xff1a; 错误日志(error log)二进制日志(bilog)慢查询日志(slow query log)查询日志(log) 这些日志文件可以帮助DBA对MySQL数据库的运行状态进行诊断&#xff0c;从而更好的进行数…

RTE 领域的发展,为视频编解码标准带来哪些新变化?丨Dev for Dev 专栏

本文为「Dev for Dev 专栏」系列内容&#xff0c;作者为声网资深视频算法负责人 戴伟。 01 视频编解码标准的历史和现在 1990 年左右 H.261 标准的制定&#xff0c;开启了视频编解码标准化的历程。经过 30 多年的努力&#xff0c;视频的编码效率得到了极大幅度的提升。在下图…

编程练习:找“单身狗“(三种解题法(不含暴力法))

目录 一.问题描述 二. 方法一&#xff1a;排序法 题解代码&#xff1a; 三.方法二&#xff1a;位运算法 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 题解代码&#xff1a; 方法三&#xff1a;顺序表记录法 第一步&#xff1a; 第二步&#xff1a; …

c语言tips-【C语言多线程编程】

0.摘要 操作系统具有管理进程&#xff0c;进程调度的能力&#xff0c;线程&#xff0c;决定哪个进程、线程使用 CPU。很多时候我们需要在同一时间干不同的任务&#xff0c;这就需要我们通过多进程或者多线程来进行&#xff0c;在我们学习和工作中我们大部分用到的都是多线程,本…

SAP FICO 成本估算解析

成本估算解析 物料成本构成组件分类&#xff0c;比如下图中的G&#xff08;Overhead&#xff09;、L&#xff08;Subcontracting&#xff09;、E&#xff08;Internal Activity&#xff09;等。 同时它也分不同的视图&#xff0c;每个视图中包含了不同的组件。 对同一个工厂的同…

SpringEvent的使用

步骤&#xff1a;定义事件&#xff0c;继承ApplicationEvent定义监听&#xff0c;要么实现ApplicationListener接口&#xff0c;要么在方法上添加EventListener注解发布事件&#xff0c;调用ApplicationContext.publishEvent()或者ApplicationEventPublisher.publishEvent();1、…

附录C:Standard Parasitic Extraction Format(SPEF)

文章目录C.1 基础(Basics)C.2 格式(Format)C.3 完整语法知乎翻译圣经本附录将介绍标准寄生参数提取格式&#xff08;SPEFSPEFSPEF&#xff09;&#xff0c;它是IEEEStd1481IEEE\ Std\ 1481IEEE Std 1481标准的一部分。 C.1 基础(Basics) SPEFSPEFSPEF允许以ASCIIASCIIASCII交换…

代码整洁之道,好的代码就是为了更美好的生活。

美国童子军有一条简单的军规&#xff1a;让营地比你来时更干净。当梳理代码时&#xff0c;坚守此军规&#xff1a;每次 review 代码&#xff0c;让代码比你发现它时更整洁。 一位大神说过&#xff1a;“衡量代码质量的唯一有效标准&#xff1a;WTF/min”&#xff0c;并配了一个…

Manjaro通过源码编译jdk11

我在编译中遇到的最大的问题就是gcc版本问题&#xff0c;因manjaro是滚动更新&#xff0c;所以gcc也是很新的版本&#xff0c;导致无法编译jdk11 1 下载源码 网上根据关键词查找jdk源码&#xff0c;查找出来很多可以下载源码的链接&#xff0c;这里我们使用github去官方仓库&a…

yolov5-6.0网络添加小目标检测头 TensorRT部署

小目标检测使用TPH-YOLOv5 中的yolov5l-xs-tph.yaml模型&#xff1b;对其中的C3STR替换为C3模块&#xff1b;本文的TensorRT部署是基于yolov5l-xs-tph修改后的模型训练部署&#xff0c;其精度一般主要学习如何TensorRT部署&#xff0c;都是在wang-xinyu基础上简单修改&#xff…

中科大2008年复试机试题

中科大2008年复试机试题 文章目录中科大2008年复试机试题第一题问题描述解题思路及代码第二题问题描述解题思路及代码第三题问题描述解题思路及代码第四题问题描述解题思路及代码第一题 问题描述 一个十进制正整数转换成二进制有多少个1 示例1 输入:10 输出:2解题思路及代码…

数据分析之Excel

自定义格式 一、自定义格式的结构 方式一: 代码结构组成代码码分为四个部分&#xff0c;中间用”;”号分隔&#xff0c;具体如下: 正数格式;负数格式;零格式;文本格式 两个代码部分&#xff0c;则第一部分用于正数和零, 第二部分用于负数 一个代码部分&#xff0c;则该部分将用…

【跟彤砸学编程】——第二课(上)

嗨害嗨大家好&#xff0c;这里是彤砸&#xff01; 今天我们来看看——编程到底是个啥&#xff1f; 上节课滴链接~【跟彤砸学编程】——第一课 程序是什么&#xff1f; 程序数据算法&#xff1b; 数据 生活中到处都是数据—— 1,2,3,是数据 A,B,C是数据 图片是由像素构成&…

【CSDN年度总结】一个四线城市的程序员-苟延残喘

个人简介 首先本人从事软件开发工作近8年&#xff0c;在北京工作5年&#xff0c;2020年1月13号回来老家工作&#xff0c;已经整整3年了&#xff01;&#xff01;&#xff01; 现在做工业大数据方面工作&#xff0c;曾就职于华为做手机系统研发工作。 在一个四线城市坚守做一个…