国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python的地下水模擬研究進展與應用

2021-06-03 06:41:22魏亞強
計算機技術與發(fā)展 2021年5期
關鍵詞:可視化數值人工智能

魏亞強,陳 堅,張 鐸,李 璐

(1.生態(tài)環(huán)境部環(huán)境規(guī)劃院,北京 100012;2.Broentech Solutions公司,Skoppum 3185)

1 概 述

數值模擬是一種隨科技發(fā)展衍生的用于定量刻畫地下水滲流和溶質運移過程,精確分析地下水規(guī)律的方法。對地下水運動的定量刻畫始于1856年,法國工程師達西(Henry Darcy)根據砂槽實驗提出了達西公式。此后,地下水運動過程定量刻畫技術經歷了穩(wěn)定流、非穩(wěn)定流解析研究階段,物理模擬方法研究階段和計算機數值模擬研究階段[1]。在已有的研究中,物理模擬通常被用來校正解析解和驗算數值模擬程序。同時,計算機技術的發(fā)展推動了數值模擬朝精細化、大尺度、耦合等多方向發(fā)展[2]。20世紀80年代末期,地下水數值模擬計算方法已經比較成熟。20世紀80年代,美國地質調查局(USGS)McDonald和Harbaugh開發(fā)了一套基于三維有限差分法的專門用于孔隙介質中地下水流數值模擬的軟件MODFLOW(a modular three-dimensional finite-difference ground-water flow model)[3],此后,MODFLOW在全世界范圍內,在科研、生產、環(huán)境保護、城鄉(xiāng)發(fā)展規(guī)劃、水資源利用等許多行業(yè)和部門得到了廣泛的應用,成為最普及的地下水運動數值模擬計算軟件[4-5]。但是,MODFLOW的輸入與輸出是基于文本文件的,沒有圖形界面,使用比較繁瑣。此后,商業(yè)公司和機構根據需要開發(fā)了界面化操作軟件,例如Visual MODFLOW和GMS等。在MODFLOW軟件基礎上,后期衍生的多樣化的模塊,如MT3D、MODPATH、RT3D、Win PEST等,加速了軟件的處理過程和可視化,極大地豐富了以MODFLOW為基礎的地下水模擬軟件的應用范圍。MODFLOW系列地下水模擬軟件的發(fā)展歷程見表1。

表1 MODFLOW系列軟件發(fā)展過程

由表1可以看出,在MODFLOW的演變歷程中,研究人員主要使用Fortran編程語言開發(fā)MODFLOW系列軟件及其衍生的多種組合模塊。Fortran編程語言是世界上最早出現的計算機高級程序設計語言,是一種面向過程的編程語言,在數值、科學和工程計算領域發(fā)揮著重要作用。

對于地下水數值模擬工作,正如Bakker所言,在MODFLOW的第一個公開版本之前,編程是地下水建模者的基本技能。而圖形用戶界面出現后,用戶可以通過單擊一系列按鈕來構建模型,這使得建模人員可以無需編程,更關注于模擬過程。然而,研究人員逐漸發(fā)現使用用戶界面創(chuàng)建模型容易出錯,并且難以發(fā)現,不能及時糾正[6]。

近年來,地下水數值模擬工作中已經使用了腳本形式的計算。腳本是一段用于執(zhí)行一項或多項特定任務的計算機代碼。研究人員可編寫腳本讀取GIS文件,構建模型并運行,分析以及輸出圖形。腳本是整個建?;驍祿治鲞^程的記錄,由于腳本是可讀文件,因此糾錯較容易。

隨著互聯網的高速發(fā)展,中國正迅速成為科技創(chuàng)新高地,這給地下水行業(yè)發(fā)展也帶來了無限可能。在未來的大數據時代,地下水環(huán)境信息化的應用,應更多地著眼于從大數據中發(fā)現具有規(guī)律性、科學性和有價值的信息。

在面向未來的大數據、人工智能和地下水結合的領域,Python已經成為研究人員首選的編程語言。Python是一種完全面向對象的語言,并且完全支持繼承、重載、派生、多繼承等功能,有益于增強源代碼的復用性。Python有豐富多樣的應用庫,能夠進行科學計算和高質量的交互式圖形處理。自從20世紀90年代初Python語言誕生至今,已被廣泛地應用于系統管理任務的處理和Web編程。隨著版本的不斷更新和新功能的添加,獨立的大型項目的開發(fā)越來越多地使用Python。Python是一種解釋型語言,適用于各類模型的開發(fā),已被用于眾多科學計算中。然而,Python的計算效率通常低于Fortran等已有面向過程的編譯語言。

作為面向對象程序設計語言,Python等更高級別計算機語言的出現,使當代地下水模擬研究人員更易開展創(chuàng)新研究,復雜的任務在Python中可以通過更少的代碼來完成。此外,Python廣泛的應用庫可用于多種類型的科學分析計算,增強了多學科融合研究的可操作性。

目前,研究人員逐漸開始開發(fā)地下水相關應用庫和軟件,構建基于Python的地下水數值模擬方法??v觀未來和大數據結合的相關研究領域,目前基于Python的地下水數值模擬研究還處于起步階段。該文對Python語言在地下水數值模擬各方面中的應用進行總結歸納,結合已有的應用庫進行案例分析,并對Python在地下水數值模擬中的應用發(fā)展趨勢進行分析和總結。該文旨在通過總結分析,為地下水數值模擬研究人員提供參考。

2 Python在地下水模擬中的應用

2.1 FloPy的開發(fā)與發(fā)展

目前,地下水數值模型的構建和數據后處理已經大量使用圖形用戶界面(GUI)。作為開源編程語言,Python包含了大量的應用庫,用于繪圖、數組操作、優(yōu)化和數據分析各方面,有利于地下水數值模型的開發(fā)。在基于MODFLOW的模型構建和數據后處理方面,2009年,Delft University of Technology的Bakker等人開發(fā)了FloPy應用庫搭建地下水模型輸入文件并運行模型,之后讀取和繪制仿真結果。FloPy應用庫由一組Python腳本組成,用于運行MODFLOW、MT3D、SEAWAT和其他地下水模擬程序[7]。

目前已有的商用GUI難以執(zhí)行多樣化的地下水模擬分析,基于Python的FloPy應用庫的開發(fā),使得數據探索、模型分析和結果展示更加便利。FloPy項目已經發(fā)展成為一套完整的腳本,并且用戶群不斷增長。FloPy庫已能夠集成MODFLOW家族中的大多數程序,基于FloPy的二次開發(fā)必將成為Python和地下水模擬結合的一個觸發(fā)點。已有研究人員基于FloPy開展了地下水模擬相關的腳本編程研究。

2013年,Bakker等人在“MODFLOW和更多2013:從科學到應用(MODFLOW and More 2013:Translating Science into Practice)”會議上展示了FloPy庫,并介紹了設計案例[8]。2014年,該團隊進一步說明了FloPy庫的應用,并開展了基于MODFLOW的實際案例水流模型案例驗證,展示了FloPy庫的適用性[7]。

后續(xù)也有研究人員基于FloPy開展了深入研究。Feo等人基于FloPy開發(fā)了穩(wěn)定流中不同時間的捕獲區(qū)計算和繪制程序[9]。Foglia等人利用FloPy,開發(fā)了基于GIS的開源地下水模擬平臺:FREEWAT。利用FloPy庫,地下水數值模擬研究人員可以輕松地完成地下水輸入和后期數據展示,但是還是依賴于MDOFLOW家族的計算模塊[10]。即便如此,能夠實現對成熟計算模塊的引用,也是未來地下水大數據分析研究的一個重要突破。

2.2 地下水滲流和溶質運移模擬

地下水滲流和溶質運移問題是地下水數值模擬研究的關鍵問題,對于地下水模擬其余方面的擴展研究均需基于此開展。FloPy庫的開發(fā)擴展了Python在地下水中的應用。同時,Python也應用于地下水相關的數據處理過程中。Bakker等人通過Python展示了多重繼承的方式下解析單元法的計算程序,并通過一個定水頭邊界的井流模型進行了模型驗證,展示了Python腳本編程語言良好的適用性[11]。Fullerton基于Python開發(fā)了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等多個模塊,開發(fā)了基于GIS的開源地下水模擬平臺:FREEWAT,該平臺的后續(xù)開發(fā)一直在持續(xù)進行[10]。Cannata等人將MODFLOW的Lake庫整合進FREEWAT平臺[17]。Wellmann等人將Python腳本語言用于和TOUGH2、SHEMAT結合的模擬中,開展了地下水滲流和熱量運移模擬[18]。Irvine使用Python的heatfuncs.py庫開展了地下水滲流和熱運移的解析解模擬研究[19]。Marin等人針對孔隙裂隙耦合介質中的地下水滲流問題,基于Python和解析元素法進行了分析[20]。Schumacher等人開發(fā)了基于Python的分布式并行計算程序[21]。Esther等人基于Python開展了并行計算,用以解決蒙特卡洛隨機計算消耗的時間[22]。

從上述研究中,可以發(fā)現自2009年后,基于Python的地下水流動和溶質運移模擬平臺和相關應用庫開發(fā)逐漸走入地下水模擬研究人員的視野,2018年,FREEWAT平臺的研發(fā)更是集合了各類MODFLOW系列程序。綜上,地下水滲流和溶質運移模擬的基礎研究和應用相對成熟,但是在大數據分析和深度學習等方面仍稍顯不足,有待探索。

2.3 地下水模擬最優(yōu)化問題和不確定性研究

地下水模擬有著多樣化的應用場景。其中,最優(yōu)化問題的求解研究能夠在水資源管理、地下水抽出處理修復等復雜非線性問題中得到較好的應用。定量刻畫參數和模型的不確定性問題也是地下水模擬研究中需要重點關注的。USGS開發(fā)了基于Python的開源包:PESTools,將參數估計軟件PEST和PEST++可視化并開展分析計算。Matott等人基于Matlab和Python對比了12種優(yōu)化算法的效率,并開展了地下水抽出處理方法和溶質運移模擬案例分析[23]。White等人開發(fā)了用于地下水建模不確定性分析的Python程序-pyEMU,該框架實現了不同類型的線性和非線性不確定性分析,并通過案例開展預測分析和誤差方差分析[24]。Delottiier等人認為大多數地下水管理模型仍然通過人工試驗和誤差進行校準,并忽略了預測不確定性,因此基于FloPy改進了參數反演模型的線性不確定性分析方法,并開展了案例研究[25]。Fienen等人利用Python開發(fā)了CVNetica軟件包,用以開展貝葉斯網絡的交叉驗證以及從數據中讀取和重建貝葉斯網絡,避免了復雜貝葉斯網絡的過度擬合[26]。在地下水風險評估方面,Galvez等人基于Python和R語言對地下水污染風險開展了評估計算[27]。

多元化問題和模型不確定性問題是未來需要關注的研究重點,其本質上都是通過定量化工具解決實際案例中的定性問題。從已有的研究可以看出,Python的相關研究已經向這個研究方向延伸,隨著水資源管理、地下水修復方案設計等實際問題迎面而來,結合神經網絡、基因遺傳算法等方法的研究作用勢必更加明顯,基于Python開展該方面的研究會逐漸增加。

2.4 人工智能和三維可視化研究

地下水模型的構建需要基于大量的前期資料分析。隨著科技水平的提升,在獲取大量的實際地下水試驗、野外實際數據的基礎上,可進一步開展大數據分析并獲取規(guī)律。美國伊利諾伊州建立了地下水監(jiān)測和模擬分析演化網絡(ENIGMMA),明確表示其長遠開發(fā)和完善考慮將采用Python語言[28]。除此之外,有關大數據分析方面的研究并不多。

與大數據分析相關的人工智能研究逐漸興起。目前主流的機器學習庫,如scikit-learn,深度學習庫,如Keras,tensorflow,Pytorch,都是以Python語言寫成。人工智能算法,如機器學習和深度學習,是一種直接從數據的輸入輸出規(guī)律中進行推斷的算法。與廣泛使用的傳統數值模型相比,人工智能技術并不建立在復雜的偏微分方程和數值方法之上,在模型搭建,校準方面較為簡單。更為重要的是,訓練好的人工智能模型可以實現實時的輸入輸出,因此更加適合需要完成實時任務的場景[29-30]。2019年召開的“MODFLOW和更多2019:地下水模型和超越(MODFLOW and More 2019:Groundwater Modeling and Beyond)”會議上,一個分會場專門開展了人工智能能否替代數值模擬的討論,尚無定論。該方面研究能推動地下水大數據分析和實時計算的發(fā)展,然而,人工智能與地下水模擬結合的領域研究還未起步。

地下水模型的輸出需根據研究人員的需要展現不同的效果和分析結果。模型的構建和展示通常通過GUI開展。目前,已經開發(fā)了各種不同復雜程度的GUI。GUI通常由交互環(huán)境組成,建模者可以在其中構建模型網格,用不同類型參數填充模型并設置邊界條件,運行和展示模型后處理結果。GUI的模型構建比直接操作輸入文件更容易、更直觀,因此已經成為地下水數值模擬工作者的另一研究熱點。Cox等人基于Python開發(fā)了GVS可視化軟件,GVS能夠處理MODFLOW的輸出數據,輸出其他地下水模擬計算軟件支持的輸入文件,并且能夠實現流場的三維展示[31]。劉振平等人結合Python,使用VTK以及PyOpenGL兩個開源圖形庫,對巖土工程地質三維模型進行了可視化軟件開發(fā),并成功展示了一個三維邊坡模型[32]。

在幾十年的地下水數值模擬發(fā)展過程中,相關科研機構積攢了大量的地下水相關的野外試驗和室內實驗數據,基于Python開展的地下水大數據分析研究和三維可視化研究目前并不多見。由于多數地下水模擬研究人員專注于模擬計算過程的分析和創(chuàng)新,對模擬結果的輸出展示有所忽視。然而,地下水數值模擬發(fā)展至今,在較為成熟的MODFLOW系列軟件的基礎上,區(qū)別于已有的Visual MODFLOW和GMS等可視化軟件,如何實現更好的模型渲染、友好互動和虛擬現實技術(VR)展示等是重要的研究內容。

3 案例應用

在基于Python的地下水數值模擬研究中,2009年提出的FloPy是目前應用最多的一個庫。該文擬通過一個應用FloPy庫的案例,展示Python腳本語言環(huán)境下的地下水模型構建、模型賦值、模型求解和模型展示過程。

首先導入FloPy的應用庫,模型設置為平面二維模型,模型長2 000 m,寬2 000 m,模型網格剖分為40×40個,模型邊界設置為定水頭邊界。模型左邊界水頭設置為100 m,模型右邊界水頭設置為80 m。模型設置為均質各向同性,水平方向滲透系數設為8 m/d,儲水系數為1×10-5m-1,模型開展穩(wěn)定流模擬。

在已有MODFLOW程序的基礎上,FloPy庫在構建模型后,調用MODFLOW程序,采用預處理共軛梯度法(PCG)解算器求解。

模型使用代碼展示如下:

#導入Flopy應用庫

import numpy as np

import flopy

#創(chuàng)建模型名稱

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 結束語

地下水數值模擬技術發(fā)展至今,研究領域逐漸細分,多學科融合的趨勢愈加明顯?;赑ython的地下水數值模擬研究,是面向未來的大數據、人工智能和地下水結合的領域研究的過渡,是多學科融合、地下水大數據分析和地下水可視化研究等領域的一個重要研究內容。通過對目前已有研究的應用開展分析,認為Python在地下水數值模擬研究中未來主要呈現以下發(fā)展趨勢。

(1)Python在學科融合、多元復雜問題求解等方面優(yōu)勢逐漸顯現。地下水基礎理論研究需結合室內和野外試驗、數學求解等方式取得突破,而基于Python的數值模擬研究是在已有的地下水理論基礎上開展的。在面對多元復雜問題求解時,需要結合地下水、計算機、統計學等多學科的專業(yè)知識,此時Python中大量的應用庫的作用便會更加凸顯,一些已有的應用庫可用來搭建模型并開發(fā)相應軟件,應用性更強。在研究方面,針對地下水修復方案設計等多元最優(yōu)化求解問題,可基于Python和MODFLOW,結合不同最優(yōu)化算法開展求解的創(chuàng)新性研究。利用面向對象的高級編程語言能夠為編程節(jié)約大量時間,讓研究人員專注于求解算法邏輯本身。在此基礎上,基于Python開展并行計算也將是一個研究熱點,有利于優(yōu)化算法,提高求解效率。

(2)地下水實時計算領域將使用Python開展研究。隨著地下水研究領域數據量的激增和行業(yè)信息化的發(fā)展,目前,地下水環(huán)境相關工作對地下水模型在線實時計算的需求市場不斷擴大。人工智能技術是重要的研究手段[33],Python是將人工智能技術用于地下水研究領域的首選語言。訓練好的人工智能模型可以實現實時的輸入輸出,因此其更加適合需要完成實時任務的場景。對地下水模型的實時計算平臺的搭建,有利于應對突發(fā)地下水環(huán)境問題和地下水已有資料的統一整合。

(3)地下水大數據分析領域將基于Python開展。結合大數據技術、物聯網技術、云計算技術和GIS方法等,研究人員能夠對海量地下水展開分析,并從中辨?zhèn)未嬲妫@取規(guī)律,通過數據訓練從大數據中獲取更多信息。此外,地下水研究當中涉及的一些場景是極難用數值手段來進行模擬的,在這些情況下,人工智能模型可以取代數值模型,被用來進行狀態(tài)特征提取,系統參數辨識,擬合復雜的非線性動態(tài)系統等工作?;赑ython的地下水實時計算平臺構建和大數據分析將是地下水模擬研究的重要研究方向,能夠為未來的地下水監(jiān)測預警、修復治理、法規(guī)制定等提供數據支持和決策支撐。

(4)基于Python的地下水模型三維可視化深入研究。目前,基于Python的地下水模擬三維可視化研究并不多?,F有的地下水模擬商業(yè)軟件的三維可視化工具的仿真度和渲染度不夠精細,隨著計算機技術的發(fā)展,未來地下水模型必將逐漸具有高精度和高仿真等特點,地下水行業(yè)從業(yè)人員對地下水模擬結果展示的要求將提高。已有的OpenGL和VTK等圖形庫均支持Python接口[34],同時,考慮虛擬現實、人機交互等領域的發(fā)展,Python編程語言的優(yōu)勢非常明顯?;赑ython的地下水模型三維可視化深入研究也將是一個重要研究方向,有利于地下水行業(yè)的發(fā)展及地下水知識的傳播。

猜你喜歡
可視化數值人工智能
用固定數值計算
基于CiteSpace的足三里穴研究可視化分析
基于Power BI的油田注水運行動態(tài)分析與可視化展示
云南化工(2021年8期)2021-12-21 06:37:54
數值大小比較“招招鮮”
基于CGAL和OpenGL的海底地形三維可視化
“融評”:黨媒評論的可視化創(chuàng)新
傳媒評論(2019年4期)2019-07-13 05:49:14
2019:人工智能
商界(2019年12期)2019-01-03 06:59:05
人工智能與就業(yè)
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
佛冈县| 双辽市| 新邵县| 政和县| 临城县| 崇文区| 电白县| 方山县| 衡阳市| 叶城县| 嘉善县| 县级市| 乌兰浩特市| 临泽县| 司法| 临漳县| 锡林浩特市| 巴青县| 黄陵县| 府谷县| 宁南县| 湘阴县| 贵溪市| 绥棱县| 健康| 蓝山县| 桐城市| 九龙城区| 翁源县| 翁牛特旗| 乌鲁木齐县| 新和县| 巴彦淖尔市| 姚安县| 涿鹿县| 咸宁市| 红河县| 裕民县| 长白| 琼结县| 华坪县|