科学模型依据有限时空内的观测,体现和验证对自然运动规律的认知,并以此推算无限的空间(无观测区域)和时间(过去与未来)上所关心的变量。
水文模型集合了人类对水循环机理的理解,利用数学公式表达水的时空运动规律,既可以结合观测数据来验证理论的可靠性与适宜性,也可预测未来可能的发展趋势;即实现理解自然与预测自然的目的(任立良等, 2011;Peel和McMahon, 2020;Duffy,2017; Vallis, 2016; Wagener等, 2010; Fatichi等, 2016)。
水文模型发展存在着相互矛盾、相互竞争的两种需求,即降低模型复杂度的要求与精细表达水文物理过程的要求,这两个需求下水文模型分为概念性和物理性、自上而下与自下而上的模型分类。
数值水文模型,属于分布式水文模型中的一个特殊类别,将地表-地下水文物理过程利用数值方法紧密耦合起来。数值方法本质上是对离散(非连续)时空单元中水头分布和变化的近似数值解的描述,从理论的解析解到数值解虽然损失了精度,但解析解通常无法求得,而数值方法可给出误差可接受的近似解。下图是地表-地下过程耦合的数值方法水文模型在整体水文模型谱系中的位置。
图中蓝色斜体文字是该类别代表性模型。图中模型分别为:新安江(赵人俊和王佩兰, 1988),Unit Hydrograph(Sherman, 1932), HBV(Bergström,1992), FLEX(Gharari等,2014), Topmodel(Beven和Kirkby, 1979),SWAT(Arnold等, 1998),VIC(Liang等, 1994在这里插入代码片
), PRMS(Leavesley等,1983), WRF-Hydro(Gochis等, 2013),WEP(Jia等,2001),GBHM(Yang等,1998),GSFlow(Markstrom等, 2008), GSFLOW-SWMM(Tian等,2015),SWAT-MODFLOW(Park等,1996), FEFLOW-3D(Hu等,2020), SHUD(Shu等, 2020), PIHM(Qu和Duffy,2007), PARFLOW(Kollet和Maxwell, 2006), PAWS(Shen和Phanikumar, 2010), HydroGeoSphere(Aquanty Inc. 2013),CATHY(Bixio等, 2002; Camporese等 2010).
SHUD模型说明书见:https://www.shud.xyz/book_cn/
SHUD模型采用有限体积法求解流域水文学常微分方程,获得空间上的水储量和流量。它是一种分布式、地表-地下全耦合、多尺度、多过程、数值方法的水文模型。
基于Duffy(1996)提出的Two-state integral-balance (TSIB)认知模型,并吸取了Penn State Integrated Hydrologic Model (PIHM)模型的应用经验,SHUD模型成为全新的数值水文模型。在导师Christopher Duffy和Paul Ullrich的建议下,此独立开发的水文模型被命名为SHUD (the Simulator for Hydrologic Unstructured Domains),强调了模型的非结构化特征在水文模拟中的优势。
SHUD模型使用非结构化三角网格来表达模拟区域的水平方向空间异质性,同时支持规则三角形和Delaunay不规则三角形(Triangular Irregulate Network, TIN)。由于流域空间的不规则特点,Delaunay不规则三角形更方便表达。每个三角形单元在空间上被视为最小坡面水文计算单元(Hydrological Computing Unit, HCU),其中单元内水文参数具有一致性。
坡面单元在垂直方向上分为三层:地表层、未饱和层和饱和层。其中,地表层用于计算植被截留、积雪、下渗和径流等。基于Duffy(1996)的“两态耦合平衡”认知模型,SHUD模型将土壤水层分为未饱和层和饱和层,并使用局部平衡公式计算水的流动。
SHUD源代码:https://github.com/SHUD-System/SHUD
(VS2019+MYSY+TDMGCC)或者
(MYSY+TDMGCC)
注意:将TDMGCC配置到环境变量,可以勾选openmp
可以使用MSVC或者MINGW编译
更多细节可以参考参考
SUNDIALS库的编译和使用
注意此处需要选择动态链接库(SHARED_LIBS,.dll和其对应的.lib)在VS中编译时候才不会出错。
静态库可选。
点击open project使用vs2019打开ALL_BUILD,右键生成
需要安装TDMGCC,并配置到环境变量,不然会报错,缺少运行dll。
cd到上一步build路径(我的是C:\SUNDIALS\build)
make
make完毕后,使用
make install
生成库文件,即上一步骤中的prefix路径
3. CMAKE注意事项
WINDOWS环境下,我使用的MINGW官方程序自带的msys进行编译。
可以直接git clone或者复制粘贴shud项目到Home目录下。
直接用记事本或者vscode或者vim打开makefile,进行部分修改。
我主要修改两个地方,一个SUNDIALS_DIR,另外一个是默认的编译器。
SUNDIALS_DIR = /home/SHUD/install_msvc
CC = "C:\TDM-GCC-64\bin\g++"
然后双击msys.bat进入msys环境cd到shud目录下,直接make或者make shud
makefile我主要修改三个地方,包括前面的两个,以及LK_OMP,修改-lomp为-lgomp。然后双击msys.bat进入msys环境cd到shud目录下,直接make shud_omp
LK_OMP = -Xpreprocessor -fopenmp -lgomp -lsundials_nvecopenmp