AquaCrop-OSPy学习笔记05:不同灌溉策略下的玉米产量模拟

想想自己想过怎样的生活。


前言

  此系列博文的目的是学习AquaCrop-OSPy作物模型的基本使用

1. 概述

  AquaCrop模型是一款水分驱动模型,可以用于进行灌溉策略优化,此文主要基于Kelly的AquaCrop_OSPy_Notebook_2学习如何开展基于AquaCrop-OSPy模型的不同灌溉策略下的玉米产量模拟。

1.1 目的

  • 基于AquaCrop-OSPy来探索不同灌溉管理策略对用水和作物产量的影响;

  • 学习如何在AquaCrop-OSPy模型中定义不同的灌溉管理实践

2. 版本

2.1 山东青岛,2022年5月1日

3. 微信公众号GISRSGeography

  • 欢迎大家关注公众号 GISRSGeography,谢谢!。
    GISRSGeography
  • 示例代码和数据可以在微信后台回复“AOS_Irr”获取。
  • 程序在Anaconda的Spyder中运行,默认已经安装相关库,包括aquacrop, pandas,matplotlib和seaborn等。

一、代码及解读

1. 包的导入

  • 此部分主要导入包括AquaCrop作物模型库在内的python库,只有如此,才能调用相关库的函数。

# %% 相关包的导入
import aquacrop.classes as apclass # 导入aquacrop.classes
import aquacrop.core as apcore # 导入aquacrop.core

# 导入pandas库,辅助整理模拟结果
import pandas as pd

# 导入制图库,辅助制图
import matplotlib.pyplot as plt
import seaborn as sns

2. 模型的输入设置

  • 模型模拟作物生长过程之前,需要对模型的输入进行设置,基本设置包括气象数据输入、土壤数据设置、作物类型设置等。
  • 需要注意的是针对不同模拟目的,模型输入设置部分会有所不同,比如当要模拟灌溉策略时,需要依据研究目标设置土壤初始含水条件。
# %% 模型输入设置
'''
说明
   (1) 模型输入设置的基础是已经理解了各类模型输入参数的含义,只有如此,才能:
       1) 知道哪些参数需要保持默认,哪些参数需要实际测量,哪些参数需要本地化校验
       2) 才能依据模拟需要,灵活设置模拟方案

'''
  # 气象数据
weather_file = rootdir + '01_WeatherData\\champion_climate.txt'
weather_data = apcore.prepare_weather(weather_file)

  # 土壤数据设置
'''
设置说明
  (1) 通过class模块设置中的SoilClass类设置土壤属性,设置方法包括:
      1) 依据土壤质地类别名称,确定土壤基本属性,此时的属性是对应类别的默认属性
      2) 或基于实测数据,对默认属性进行相应的修改  
'''
sandy_loam = apclass.SoilClass(soilType='SandyLoam') # 沙壤土
#print('沙壤土(Sand Loam)的默认属性:\n',sandy_loam)
print('---------')

  # 初始含水量文件设置
'''
设置说明
  (1) 模型土壤初始含水量是模拟开始时,土壤水分的初始状况
  (2) 初始含水量设置的基础是理解InitWCClass里面每一个指标的含义,并通过InitWCClass
      源码理解设置方法
'''
InitWC = apclass.InitWCClass(value=['FC']) # 将每一层的初始含水量设置为田间持水量

  # 作物
'''
说明
  (1) AquaCrop-OSPy在Classes类中对玉米、小麦、土豆和水稻的默认作物参数进行了设置
  (2) AquaCrop-OSPy允许使用者构建其他作物的作物参数文件
  (3) 实际应用时,对于作物参数里的部分参数需要通过本地化校验确定,此时就需要对这部分
      参数进行修改。
  (4) 查看CropClass部分的源码会知道如何对某些参数进行修改
      1) 除了必要的输入参数,**kwargs可以用于对默认参数进行修改
'''

crop = apclass.CropClass('Maize', PlantingDate='05/01')

3. 作物生长过程模拟

  • 完成模型输入设置之后,可以调用AquaCropModel进行作物生长过程模拟;
  • 此处的目的是分析不同灌溉策略下作物产量特征以及耗水量特征,因此需要通过循环开展不同灌溉策略下作物生长过程的模拟;
  • AOS模型支持不同的灌溉设置方式,这里设置IrrMethod=1,表示如果土壤含水量低于指定阈值(或代表四个主要作物生长阶段(出苗、树冠生长、最大树冠、衰老)的四个阈值),则触发灌溉。关于AOSPY模型对灌溉的处理方式。
 # 在输入设置基础上,构建玉米的AquaCrop模型,并指定模拟的开始和结束时间
  # 关于AquaCropModel类,需要参考其源码,了解如何设置其参数

sim_start = '1982/05/01'
sim_end = '2018/10/30'

labels = []
outputs = []
for smt in range(0,110,20):
    crop.Name = str(smt)
    labels.append(str(smt))
    irr_mngt = apclass.IrrMngtClass(IrrMethod=1,SMT=[smt]*4) # 设置灌溉管理方案
    maizemodel = apcore.AquaCropModel(SimStartTime=sim_start,
                          SimEndTime=sim_end,
                          wdf=weather_data,
                          Soil=sandy_loam, 
                          Crop=crop,
                          InitWC=InitWC,
                          IrrMngt=irr_mngt)

    maizemodel.initialize() # 模型初始化
    maizemodel.step(till_termination=True) # 执行模型直到终止
    outputs.append(maizemodel.Outputs.Final) # 保存模拟结果

4. 模拟结果整理

  • 完成作物生长过程模拟之后,为了提取感兴趣的结果,需要对模拟结果进行整理。
# %% 模拟结果合并,便于可视化

dflist=outputs
labels[0]='Rainfed'
outlist=[]
for i in range(len(dflist)):
    temp = pd.DataFrame(dflist[i][['Yield (tonne/ha)',
                                   'Seasonal irrigation (mm)']])
    temp['label']=labels[i]
    outlist.append(temp)

all_outputs = pd.concat(outlist,axis=0)

# 合并所有结果
results=pd.concat(outlist)

5. 模拟结果制图展示

  • 为了直观比较不同灌溉策略下的模拟结果,可以调用matplotlib库和seaborn库制图展示感兴趣的模拟结果(图1)。
# %% 制图展示

# 生成制图框架
fig,ax=plt.subplots(2,1,figsize=(10,14))

# 产生箱图
sns.boxplot(data=results,x='label',y='Yield (tonne/ha)',ax=ax[0])
sns.boxplot(data=results,x='label',y='Seasonal irrigation (mm)',ax=ax[1])

# 坐标轴标签
ax[0].tick_params(labelsize=15)
ax[0].set_xlabel('Soil-moisture threshold (%TAW)',fontsize=18)
ax[0].set_ylabel('Yield (t/ha)',fontsize=18)

ax[1].tick_params(labelsize=15)
ax[1].set_xlabel('Soil-moisture threshold (%TAW)',fontsize=18)
ax[1].set_ylabel('Total Irrigation (ha-mm)',fontsize=18)

plt.legend(fontsize=18)

不同灌溉策略下的模拟结果

图1. 不同灌溉策略下的玉米产量(上图)和灌溉量(下图)

三、参考资料

[1] Kelly, T. D.; Foster, T. (2021): AquaCrop-OSPy:Bridging the gap between research and practice in crop-water modeling. InAgricultural Water Management 254, p. 106976.
[2] AquaCrop_OSPy_Notebook_2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EWBA_GIS_RS_ER

如有帮助,赏杯茶吧。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值