基于Python的地下水模拟研究进展与应用

2021-06-03 06:41:22魏亚强
计算机技术与发展 2021年5期
关键词:可视化数值人工智能

魏亚强,陈 坚,张 铎,李 璐

(1.生态环境部环境规划院,北京 100012;2.Broentech Solutions公司,Skoppum 3185)

1 概 述

数值模拟是一种随科技发展衍生的用于定量刻画地下水渗流和溶质运移过程,精确分析地下水规律的方法。对地下水运动的定量刻画始于1856年,法国工程师达西(Henry Darcy)根据砂槽实验提出了达西公式。此后,地下水运动过程定量刻画技术经历了稳定流、非稳定流解析研究阶段,物理模拟方法研究阶段和计算机数值模拟研究阶段[1]。在已有的研究中,物理模拟通常被用来校正解析解和验算数值模拟程序。同时,计算机技术的发展推动了数值模拟朝精细化、大尺度、耦合等多方向发展[2]。20世纪80年代末期,地下水数值模拟计算方法已经比较成熟。20世纪80年代,美国地质调查局(USGS)McDonald和Harbaugh开发了一套基于三维有限差分法的专门用于孔隙介质中地下水流数值模拟的软件MODFLOW(a modular three-dimensional finite-difference ground-water flow model)[3],此后,MODFLOW在全世界范围内,在科研、生产、环境保护、城乡发展规划、水资源利用等许多行业和部门得到了广泛的应用,成为最普及的地下水运动数值模拟计算软件[4-5]。但是,MODFLOW的输入与输出是基于文本文件的,没有图形界面,使用比较繁琐。此后,商业公司和机构根据需要开发了界面化操作软件,例如Visual MODFLOW和GMS等。在MODFLOW软件基础上,后期衍生的多样化的模块,如MT3D、MODPATH、RT3D、Win PEST等,加速了软件的处理过程和可视化,极大地丰富了以MODFLOW为基础的地下水模拟软件的应用范围。MODFLOW系列地下水模拟软件的发展历程见表1。

表1 MODFLOW系列软件发展过程

由表1可以看出,在MODFLOW的演变历程中,研究人员主要使用Fortran编程语言开发MODFLOW系列软件及其衍生的多种组合模块。Fortran编程语言是世界上最早出现的计算机高级程序设计语言,是一种面向过程的编程语言,在数值、科学和工程计算领域发挥着重要作用。

对于地下水数值模拟工作,正如Bakker所言,在MODFLOW的第一个公开版本之前,编程是地下水建模者的基本技能。而图形用户界面出现后,用户可以通过单击一系列按钮来构建模型,这使得建模人员可以无需编程,更关注于模拟过程。然而,研究人员逐渐发现使用用户界面创建模型容易出错,并且难以发现,不能及时纠正[6]。

近年来,地下水数值模拟工作中已经使用了脚本形式的计算。脚本是一段用于执行一项或多项特定任务的计算机代码。研究人员可编写脚本读取GIS文件,构建模型并运行,分析以及输出图形。脚本是整个建模或数据分析过程的记录,由于脚本是可读文件,因此纠错较容易。

随着互联网的高速发展,中国正迅速成为科技创新高地,这给地下水行业发展也带来了无限可能。在未来的大数据时代,地下水环境信息化的应用,应更多地着眼于从大数据中发现具有规律性、科学性和有价值的信息。

在面向未来的大数据、人工智能和地下水结合的领域,Python已经成为研究人员首选的编程语言。Python是一种完全面向对象的语言,并且完全支持继承、重载、派生、多继承等功能,有益于增强源代码的复用性。Python有丰富多样的应用库,能够进行科学计算和高质量的交互式图形处理。自从20世纪90年代初Python语言诞生至今,已被广泛地应用于系统管理任务的处理和Web编程。随着版本的不断更新和新功能的添加,独立的大型项目的开发越来越多地使用Python。Python是一种解释型语言,适用于各类模型的开发,已被用于众多科学计算中。然而,Python的计算效率通常低于Fortran等已有面向过程的编译语言。

作为面向对象程序设计语言,Python等更高级别计算机语言的出现,使当代地下水模拟研究人员更易开展创新研究,复杂的任务在Python中可以通过更少的代码来完成。此外,Python广泛的应用库可用于多种类型的科学分析计算,增强了多学科融合研究的可操作性。

目前,研究人员逐渐开始开发地下水相关应用库和软件,构建基于Python的地下水数值模拟方法。纵观未来和大数据结合的相关研究领域,目前基于Python的地下水数值模拟研究还处于起步阶段。该文对Python语言在地下水数值模拟各方面中的应用进行总结归纳,结合已有的应用库进行案例分析,并对Python在地下水数值模拟中的应用发展趋势进行分析和总结。该文旨在通过总结分析,为地下水数值模拟研究人员提供参考。

2 Python在地下水模拟中的应用

2.1 FloPy的开发与发展

目前,地下水数值模型的构建和数据后处理已经大量使用图形用户界面(GUI)。作为开源编程语言,Python包含了大量的应用库,用于绘图、数组操作、优化和数据分析各方面,有利于地下水数值模型的开发。在基于MODFLOW的模型构建和数据后处理方面,2009年,Delft University of Technology的Bakker等人开发了FloPy应用库搭建地下水模型输入文件并运行模型,之后读取和绘制仿真结果。FloPy应用库由一组Python脚本组成,用于运行MODFLOW、MT3D、SEAWAT和其他地下水模拟程序[7]。

目前已有的商用GUI难以执行多样化的地下水模拟分析,基于Python的FloPy应用库的开发,使得数据探索、模型分析和结果展示更加便利。FloPy项目已经发展成为一套完整的脚本,并且用户群不断增长。FloPy库已能够集成MODFLOW家族中的大多数程序,基于FloPy的二次开发必将成为Python和地下水模拟结合的一个触发点。已有研究人员基于FloPy开展了地下水模拟相关的脚本编程研究。

2013年,Bakker等人在“MODFLOW和更多2013:从科学到应用(MODFLOW and More 2013:Translating Science into Practice)”会议上展示了FloPy库,并介绍了设计案例[8]。2014年,该团队进一步说明了FloPy库的应用,并开展了基于MODFLOW的实际案例水流模型案例验证,展示了FloPy库的适用性[7]。

后续也有研究人员基于FloPy开展了深入研究。Feo等人基于FloPy开发了稳定流中不同时间的捕获区计算和绘制程序[9]。Foglia等人利用FloPy,开发了基于GIS的开源地下水模拟平台:FREEWAT。利用FloPy库,地下水数值模拟研究人员可以轻松地完成地下水输入和后期数据展示,但是还是依赖于MDOFLOW家族的计算模块[10]。即便如此,能够实现对成熟计算模块的引用,也是未来地下水大数据分析研究的一个重要突破。

2.2 地下水渗流和溶质运移模拟

地下水渗流和溶质运移问题是地下水数值模拟研究的关键问题,对于地下水模拟其余方面的扩展研究均需基于此开展。FloPy库的开发扩展了Python在地下水中的应用。同时,Python也应用于地下水相关的数据处理过程中。Bakker等人通过Python展示了多重继承的方式下解析单元法的计算程序,并通过一个定水头边界的井流模型进行了模型验证,展示了Python脚本编程语言良好的适用性[11]。Fullerton基于Python开发了TimML-Cloud网页应用程序,并提供了相应模块的基本图形用户界面,增强了地下水模型的可访问性,使得决策者更容易使用TimML作为水资源决策管理工具[12]。Shishaye基于FloPy使用了SEAWAT对海水入侵开展了模拟[13]。Starn等人利用Python多样的应用库,基于Numpy和Scipy库对解析解计算的地下水溶质运移浓度突破曲线数据开展了的分析展示[14]。Manjari等人利用Python和Feflow软件联合,对核素粒子迁移开展了模拟研究[15]。Moss将Python和Arcgis联用,用于刻画海岸带地下水水位[16]。

Foglia等人利用FloPy,并集成ModFlow家族中的MT3D、SEAWAT等多个模块,开发了基于GIS的开源地下水模拟平台:FREEWAT,该平台的后续开发一直在持续进行[10]。Cannata等人将MODFLOW的Lake库整合进FREEWAT平台[17]。Wellmann等人将Python脚本语言用于和TOUGH2、SHEMAT结合的模拟中,开展了地下水渗流和热量运移模拟[18]。Irvine使用Python的heatfuncs.py库开展了地下水渗流和热运移的解析解模拟研究[19]。Marin等人针对孔隙裂隙耦合介质中的地下水渗流问题,基于Python和解析元素法进行了分析[20]。Schumacher等人开发了基于Python的分布式并行计算程序[21]。Esther等人基于Python开展了并行计算,用以解决蒙特卡洛随机计算消耗的时间[22]。

从上述研究中,可以发现自2009年后,基于Python的地下水流动和溶质运移模拟平台和相关应用库开发逐渐走入地下水模拟研究人员的视野,2018年,FREEWAT平台的研发更是集合了各类MODFLOW系列程序。综上,地下水渗流和溶质运移模拟的基础研究和应用相对成熟,但是在大数据分析和深度学习等方面仍稍显不足,有待探索。

2.3 地下水模拟最优化问题和不确定性研究

地下水模拟有着多样化的应用场景。其中,最优化问题的求解研究能够在水资源管理、地下水抽出处理修复等复杂非线性问题中得到较好的应用。定量刻画参数和模型的不确定性问题也是地下水模拟研究中需要重点关注的。USGS开发了基于Python的开源包:PESTools,将参数估计软件PEST和PEST++可视化并开展分析计算。Matott等人基于Matlab和Python对比了12种优化算法的效率,并开展了地下水抽出处理方法和溶质运移模拟案例分析[23]。White等人开发了用于地下水建模不确定性分析的Python程序-pyEMU,该框架实现了不同类型的线性和非线性不确定性分析,并通过案例开展预测分析和误差方差分析[24]。Delottiier等人认为大多数地下水管理模型仍然通过人工试验和误差进行校准,并忽略了预测不确定性,因此基于FloPy改进了参数反演模型的线性不确定性分析方法,并开展了案例研究[25]。Fienen等人利用Python开发了CVNetica软件包,用以开展贝叶斯网络的交叉验证以及从数据中读取和重建贝叶斯网络,避免了复杂贝叶斯网络的过度拟合[26]。在地下水风险评估方面,Galvez等人基于Python和R语言对地下水污染风险开展了评估计算[27]。

多元化问题和模型不确定性问题是未来需要关注的研究重点,其本质上都是通过定量化工具解决实际案例中的定性问题。从已有的研究可以看出,Python的相关研究已经向这个研究方向延伸,随着水资源管理、地下水修复方案设计等实际问题迎面而来,结合神经网络、基因遗传算法等方法的研究作用势必更加明显,基于Python开展该方面的研究会逐渐增加。

2.4 人工智能和三维可视化研究

地下水模型的构建需要基于大量的前期资料分析。随着科技水平的提升,在获取大量的实际地下水试验、野外实际数据的基础上,可进一步开展大数据分析并获取规律。美国伊利诺伊州建立了地下水监测和模拟分析演化网络(ENIGMMA),明确表示其长远开发和完善考虑将采用Python语言[28]。除此之外,有关大数据分析方面的研究并不多。

与大数据分析相关的人工智能研究逐渐兴起。目前主流的机器学习库,如scikit-learn,深度学习库,如Keras,tensorflow,Pytorch,都是以Python语言写成。人工智能算法,如机器学习和深度学习,是一种直接从数据的输入输出规律中进行推断的算法。与广泛使用的传统数值模型相比,人工智能技术并不建立在复杂的偏微分方程和数值方法之上,在模型搭建,校准方面较为简单。更为重要的是,训练好的人工智能模型可以实现实时的输入输出,因此更加适合需要完成实时任务的场景[29-30]。2019年召开的“MODFLOW和更多2019:地下水模型和超越(MODFLOW and More 2019:Groundwater Modeling and Beyond)”会议上,一个分会场专门开展了人工智能能否替代数值模拟的讨论,尚无定论。该方面研究能推动地下水大数据分析和实时计算的发展,然而,人工智能与地下水模拟结合的领域研究还未起步。

地下水模型的输出需根据研究人员的需要展现不同的效果和分析结果。模型的构建和展示通常通过GUI开展。目前,已经开发了各种不同复杂程度的GUI。GUI通常由交互环境组成,建模者可以在其中构建模型网格,用不同类型参数填充模型并设置边界条件,运行和展示模型后处理结果。GUI的模型构建比直接操作输入文件更容易、更直观,因此已经成为地下水数值模拟工作者的另一研究热点。Cox等人基于Python开发了GVS可视化软件,GVS能够处理MODFLOW的输出数据,输出其他地下水模拟计算软件支持的输入文件,并且能够实现流场的三维展示[31]。刘振平等人结合Python,使用VTK以及PyOpenGL两个开源图形库,对岩土工程地质三维模型进行了可视化软件开发,并成功展示了一个三维边坡模型[32]。

在几十年的地下水数值模拟发展过程中,相关科研机构积攒了大量的地下水相关的野外试验和室内实验数据,基于Python开展的地下水大数据分析研究和三维可视化研究目前并不多见。由于多数地下水模拟研究人员专注于模拟计算过程的分析和创新,对模拟结果的输出展示有所忽视。然而,地下水数值模拟发展至今,在较为成熟的MODFLOW系列软件的基础上,区别于已有的Visual MODFLOW和GMS等可视化软件,如何实现更好的模型渲染、友好互动和虚拟现实技术(VR)展示等是重要的研究内容。

3 案例应用

在基于Python的地下水数值模拟研究中,2009年提出的FloPy是目前应用最多的一个库。该文拟通过一个应用FloPy库的案例,展示Python脚本语言环境下的地下水模型构建、模型赋值、模型求解和模型展示过程。

首先导入FloPy的应用库,模型设置为平面二维模型,模型长2 000 m,宽2 000 m,模型网格剖分为40×40个,模型边界设置为定水头边界。模型左边界水头设置为100 m,模型右边界水头设置为80 m。模型设置为均质各向同性,水平方向渗透系数设为8 m/d,储水系数为1×10-5m-1,模型开展稳定流模拟。

在已有MODFLOW程序的基础上,FloPy库在构建模型后,调用MODFLOW程序,采用预处理共轭梯度法(PCG)解算器求解。

模型使用代码展示如下:

#导入Flopy应用库

import numpy as np

import flopy

#创建模型名称

modelname='steady_flow'

mf=flopy.modflow.Modflow(modelname, exe_name='mf2005')

#模型范围和网格剖分

Lx=2 000.

Ly=2 000.

ztop=50.

zbot=0.

nlay=1

nrow=40

ncol=40

delr=Lx/ncol

delc=Ly/nrow

delv=(ztop-zbot)/nlay

botm=np.linspace(ztop,zbot,nlay+1)

dis=flopy.modflow.ModflowDis(mf, nlay, nrow, ncol, delr=delr, delc=delc,

top=ztop, botm=botm[1:])

# Flopy中基础包设置

ibound=np.ones((nlay, nrow, ncol), dtype=np.int32)

ibound[:, :, 0]=-1

ibound[:, :, -1]=-1

strt=np.ones((nlay, nrow, ncol),dtype=np.float32)

strt[:, :, 0]=100.

strt[:, :, -1]=80.

bas=flopy.modflow.ModflowBas(mf, ibound=ibound, strt=strt)

#参数赋值

lpf=flopy.modflow.ModflowLpf(mf, hk=8., vka=1., ipakcb=53)

#输出设置

spd={(0, 0): ['print head', 'print budget',

'save head', 'save budget']}

oc=flopy.modflow.ModflowOc(mf, stress_period_data=spd, compact=True)

#解算器设置

pcg = flopy.modflow.ModflowPcg(mf)

#写入输入文件

mf.write_input()

#运行模型

success, buff=mf.run_model()

#结果展示

import matplotlib.pyplot as plt

import flopy.utils.binaryfile as bf

plt.rcParams['font.sans-serif']=['Times New Roman']

plt.rcParams['axes.unicode_minus']=False

plt.subplot(1, 1, 1, aspect='equal')

hds=bf.HeadFile(modelname + '.hds')

head=hds.get_data(totim=1.0)

levels=np.arange(80, 100, 2)

extent=(0, Lx, 0, Ly)

plt.imshow(head[0, :, :],interpolation='nearest', cmap='cool',extent=extent)

plt.xlabel("X(m)",fontsize = 12)

plt.ylabel("Y(m)",fontsize = 12)

plt.colorbar()

通过计算,模拟流场经输出后,见图1。

图1 FloPy计算水头分布

针对存在抽水井的情形,假设案例中,在模型中心位置有一口抽水井,抽水量为20 000 m3/d,增加如下代码。

#增加抽水井

lrcq={ 0: [[0, nrow/2 - 1, ncol/2 - 1, -20 000.]]}

wel=flopy.modflow.ModflowWel(mf, stress_period_data=lrcq)

计算结果见图2。

图2 考虑抽水井的FloPy计算水头分布

4 结束语

地下水数值模拟技术发展至今,研究领域逐渐细分,多学科融合的趋势愈加明显。基于Python的地下水数值模拟研究,是面向未来的大数据、人工智能和地下水结合的领域研究的过渡,是多学科融合、地下水大数据分析和地下水可视化研究等领域的一个重要研究内容。通过对目前已有研究的应用开展分析,认为Python在地下水数值模拟研究中未来主要呈现以下发展趋势。

(1)Python在学科融合、多元复杂问题求解等方面优势逐渐显现。地下水基础理论研究需结合室内和野外试验、数学求解等方式取得突破,而基于Python的数值模拟研究是在已有的地下水理论基础上开展的。在面对多元复杂问题求解时,需要结合地下水、计算机、统计学等多学科的专业知识,此时Python中大量的应用库的作用便会更加凸显,一些已有的应用库可用来搭建模型并开发相应软件,应用性更强。在研究方面,针对地下水修复方案设计等多元最优化求解问题,可基于Python和MODFLOW,结合不同最优化算法开展求解的创新性研究。利用面向对象的高级编程语言能够为编程节约大量时间,让研究人员专注于求解算法逻辑本身。在此基础上,基于Python开展并行计算也将是一个研究热点,有利于优化算法,提高求解效率。

(2)地下水实时计算领域将使用Python开展研究。随着地下水研究领域数据量的激增和行业信息化的发展,目前,地下水环境相关工作对地下水模型在线实时计算的需求市场不断扩大。人工智能技术是重要的研究手段[33],Python是将人工智能技术用于地下水研究领域的首选语言。训练好的人工智能模型可以实现实时的输入输出,因此其更加适合需要完成实时任务的场景。对地下水模型的实时计算平台的搭建,有利于应对突发地下水环境问题和地下水已有资料的统一整合。

(3)地下水大数据分析领域将基于Python开展。结合大数据技术、物联网技术、云计算技术和GIS方法等,研究人员能够对海量地下水展开分析,并从中辨伪存真,获取规律,通过数据训练从大数据中获取更多信息。此外,地下水研究当中涉及的一些场景是极难用数值手段来进行模拟的,在这些情况下,人工智能模型可以取代数值模型,被用来进行状态特征提取,系统参数辨识,拟合复杂的非线性动态系统等工作。基于Python的地下水实时计算平台构建和大数据分析将是地下水模拟研究的重要研究方向,能够为未来的地下水监测预警、修复治理、法规制定等提供数据支持和决策支撑。

(4)基于Python的地下水模型三维可视化深入研究。目前,基于Python的地下水模拟三维可视化研究并不多。现有的地下水模拟商业软件的三维可视化工具的仿真度和渲染度不够精细,随着计算机技术的发展,未来地下水模型必将逐渐具有高精度和高仿真等特点,地下水行业从业人员对地下水模拟结果展示的要求将提高。已有的OpenGL和VTK等图形库均支持Python接口[34],同时,考虑虚拟现实、人机交互等领域的发展,Python编程语言的优势非常明显。基于Python的地下水模型三维可视化深入研究也将是一个重要研究方向,有利于地下水行业的发展及地下水知识的传播。

猜你喜欢
可视化数值人工智能
用固定数值计算
基于CiteSpace的足三里穴研究可视化分析
基于Power BI的油田注水运行动态分析与可视化展示
云南化工(2021年8期)2021-12-21 06:37:54
数值大小比较“招招鲜”
基于CGAL和OpenGL的海底地形三维可视化
“融评”:党媒评论的可视化创新
传媒评论(2019年4期)2019-07-13 05:49:14
2019:人工智能
商界(2019年12期)2019-01-03 06:59:05
人工智能与就业
IT经理世界(2018年20期)2018-10-24 02:38:24
数读人工智能
小康(2017年16期)2017-06-07 09:00:59
下一幕,人工智能!
南风窗(2016年19期)2016-09-21 16:51:29