Skip to main content

开发作物模拟模型的框架,包括 WOFOST 和 LINTUL 作物模拟模型和 LINGRA 草地模拟模型的实施。

项目描述

PCSE 是为实施在瓦赫宁根开发的作物模拟模型而开发的框架。许多瓦赫宁根作物模拟模型最初是在 FORTRAN77 中开发的,或者使用 FORTRAN 模拟转换器 ( FST )。尽管这种方法产生了具有高数值性能的高质量模型,但用 FORTRAN 编写的模型的固有局限性也越来越明显:

  • 模型的结构通常是相当单一的,并且不同的部分非常紧密地耦合在一起。用另一种模拟方法替换模型的某些部分并不容易。

  • 这些模型依赖于难以更改的基于文件的 I/O。例如,在 FORTRAN 中与数据库的接口很复杂。

  • 一般来说,对于像 FORTRAN 这样的低级语言,简单的事情已经需要很多行代码,而且很容易出错,尤其是在开发或调整软件方面经验有限的农学家和作物科学家。

为了克服上述许多限制,开发了 Python 作物模拟环境 (PCSE),它为开发模拟模型以及作物模拟模型的许多实现提供了一个环境。PCSE 是用纯 python 代码编写的,这使得它更灵活、更容易修改和可扩展,允许与数据库、图形用户界面、可视化工具和数字/统计包轻松连接。PCSE 有几个有趣的特性:

  • 在纯 python 中实现,仅依赖于 Python 包索引 (PyPI) 中可用的流行包(SQLAlchemyPyYAMLpandasOpenpyxlxlrdrequestsnumpy

  • 模块化设计允许您使用简单但功能强大的方法在模块之间通信变量相对快速地添加或更改组件。

  • FST类似,它通过显式分离参数、速率变量和状态变量来强制执行良好的模型设计。此外,PCSE 负责模块初始化、变化率的计算、状态变量的更新以及完成模拟所需的操作。

  • 输入/输出与仿真模型本身完全分离。因此,PCSE 模型可以轻松地读取和写入文本文件、数据库和科学格式,例如 HDF 或 NetCDF。

  • 工具可用于从现有模型中读取参数和天气文件,以尽可能地向后兼容。

  • 一个AgroManager模块,允许定义发生在农民田间的农业管理行动。此类动作可以指定为基于时间或模型状态的事件。

  • 程序模块的内置测试确保系统的完整性。

要为 PCSE 做出贡献,您可以在https://github.com/ajwdewit/pcse上创建自己的副本

完整文档可在http://pcse.readthedocs.io上获得

测试 PCSE

PCSE 软件包有一些内置测试,可用于测试任何 PCSE 安装是否产生正确的输出:

>>> pcse.test()
runTest (pcse.tests.test_abioticdamage.Test_FROSTOL) ... ok
runTest (pcse.tests.test_partitioning.Test_DVS_Partitioning) ... ok
runTest (pcse.tests.test_evapotranspiration.Test_PotentialEvapotranspiration) ... ok
runTest (pcse.tests.test_wofost.TestWaterlimitedWinterWheat) ... ok

...

runTest (pcse.tests.test_wofost.TestWaterlimitedGrainMaize) ... ok
runTest (pcse.tests.test_wofost.TestPotentialPotato) ... ok
runTest (pcse.tests.test_wofost80.TestWOFOST80_Potential_WinterWheat) ... ok
runTest (pcse.tests.test_wofost80.TestWOFOST80_WaterLimited_WinterWheat) ... ok

----------------------------------------------------------------------
Ran 32 tests in 39.809s

OK

如果模型输出与预期输出匹配,则测试将报告“OK”,否则将产生错误,并详细追溯问题发生的位置。请注意,当添加或删除测试时,结果可能会偏离上面的输出。

除了内置测试之外,PCSE 的 git 存储库中还提供了更大的测试套件。后者还包括未包含在内部测试中的 LINGRA 模型测试。测试可以通过测试包执行:

(py3_pcse) $ python -m tests
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_potentialproduction_wofost72_01.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_potentialproduction_wofost72_11.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_potentialproduction_wofost72_21.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_potentialproduction_wofost72_31.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_potentialproduction_wofost72_41.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_waterlimitedproduction_wofost72_01.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_waterlimitedproduction_wofost72_11.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_waterlimitedproduction_wofost72_21.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_waterlimitedproduction_wofost72_31.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_waterlimitedproduction_wofost72_41.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_LINGRA_Belgium-Michamps-1986_PP.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_LINGRA_Netherlands-Zegveld-1986_PP.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_LINGRA_Belgium-Michamps-1986_WLP.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_LINGRA_Netherlands-Zegveld-1986_WLP.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_LINGRA_Belgium-Michamps-1986_NWLP.yaml) ... ok
runTest (tests.run_tests./home/wit015/Sources/python/pcse/tests/test_data/test_LINGRA_Netherlands-Zegveld-1986_NWLP.yaml) ... ok

----------------------------------------------------------------------
Ran 16 tests in 101.956s

OK

默认情况下,这会运行有限的测试选择。完整的测试套件可以运行:

(py3_pcse) $ python -m tests --full

但这至少需要 30 分钟才能完成。

将 PCSE 模型与实验进行比较

从 PCSE 5.5 开始,存储库中有一个额外的文件夹exp,其中包含可用于比较 PCSE 模型的结果的实验​​数据。实验被收集在一个“实验集合”中,其中包含对属于一起的实验的引用。例如,针对给定品种的马铃薯的所有实验。目前,可用的实验仅限于 LINGRA 模型的草地,由两个集合组成。一种用于灌溉条件下的草地,一种用于雨养条件。Tt 预计将在这里收集和存储更多的实验数据,以便有一个参考集来比较模型结果。

运行实验类似于运行单元测试:

(py3_pcse) $ python -m exp
Writing expriment results to: /tmp/exp_results
Processing collection for Rye grass: Potential
  - Processing experiment: LINGRA_FAO/LINGRA_FAO_experiment_000_UK2_1982.yaml
  - Processing experiment: LINGRA_FAO/LINGRA_FAO_experiment_004_SW1_1983.yaml
  - Processing experiment: LINGRA_FAO/LINGRA_FAO_experiment_006_SW1_1984.yaml

...

这将生成模拟数据与观察数据的数字,以评估模型对实验数据的执行情况。将来,这将扩展到包含带有错误值的报告。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

PCSE-5.5.3.tar.gz (815.6 kB 查看哈希

已上传 source