【SHUD】SHUD模型Windows下的编译过程

目录

  • 〇、绪论
  • 一、SHUD水文模型说明
  • 二、SHUD编译
    • 1、SUNIALS库的编译
      • 1.1. 使用MSVC
        • 1.1.1 CMAKE
      • 1.2. 使用MINGW
        • 1.2.1 CMAKE
        • 1.2.2 生成库文件
    • 2、SHUD的编译过程
      • 2.1. LINUX和MAC环境
      • 2.2. WINDOWS环境
        • 2.2.1 shud
        • 2.2.2 shud_omp

〇、绪论

科学模型依据有限时空内的观测,体现和验证对自然运动规律的认知,并以此推算无限的空间(无观测区域)和时间(过去与未来)上所关心的变量。
水文模型集合了人类对水循环机理的理解,利用数学公式表达水的时空运动规律,既可以结合观测数据来验证理论的可靠性与适宜性,也可预测未来可能的发展趋势;即实现理解自然与预测自然的目的(任立良等, 2011;Peel和McMahon, 2020;Duffy,2017; Vallis, 2016; Wagener等, 2010; Fatichi等, 2016)。
【SHUD】SHUD模型Windows下的编译过程_第1张图片
水文模型发展存在着相互矛盾、相互竞争的两种需求,即降低模型复杂度的要求与精细表达水文物理过程的要求,这两个需求下水文模型分为概念性和物理性、自上而下与自下而上的模型分类。

  • 自上而下(Top-down)建模思路由长期、大尺度的流域水文响应作为出发点,逐步深入,对小尺度具体物理过程进行复杂化和细化模拟。流域计算单元被概念化为想象的存储空间——即“水桶模型”,计算单元上的驱动要素(降雨、气温、辐射等)与流域响应(通常为径流)表达为简单经验关系、线性/非线性关系、多元共线拟合关系。基于水桶概念的水文模型关注地表产汇流过程如何在河流断面上形成径流过程线,简化水在坡面和河道内的流动过程以及地表-地下水之间的双向交互,对产汇流和基流过程描述都具有明显的概念化特征。然而,自然流域内地表水和地下水交互频繁,交互界面的水流动方向和强度随水力梯度关系而变化。
  • 自下而上(Bottom-up)建模思路,从微观的计算单元和最基础物理公式出发,集合所有计算单元的水文过程,形成对整体流域长时间大范围的水文响应;这类模型也被称为基于过程或者基于物理的模型。其计算单元是流域上表达空间异质性所需的小尺度、可任意分割的地块;由(质量、能量、动量)守恒定理构建基础控制方程,利用微观尺度的物理方程(如达西定律、理查兹方程、圣维南方程、对流—扩散方程等)描述水文过程,采用数学或数值方法在高时空分辨率上计算水和能量在三维空间的存储、运动与转换过程,通过集合微观物理过程反应整体流域尺度的水文响应。需要强调的是构建这类水文模型基础的物质/能量守恒与水热传输定理(如达西定律)等能够脱离单个模型而独立存在,且能够被物理实验证实,因此其参数也具有明确物理意义,可直接使用测量的参数值。

    在空间分辨率-过程复杂性连续体上,常用的流域尺度模型的典型应用选择的近似位置的概念示意图。空间分辨率轴显示了模型域(例如集水区)内的单个空间单元(例如网格单元)的数量的近似范围和相关尺度,用于单个模型的典型应用 。过程复杂性轴表示一个空间单元内单个进程/进程的数量。越来越多的灰色阴影区域表示从基于水桶的(白色)模型到基于连续体的模型的过渡。红点表示沿着分辨率-复杂性连续体的两个端点。模型:
  • 1: unit hydrograph (Sherman, 1932);
  • 2: HBV (Bergström, 1992);
  • 3: SUPERFLEX (Fenicia et al., 2011);
  • 4: FLEX-Topo (Gharari et al., 2014a);
  • 5: mhM (Samaniego et al., 2010);
  • 6: mhM-topo (Nijzink et al., 2016a);
  • 7: SWAT (Arnold et al., 1998);
  • 8: NWS-Sacramento (Burnash, 1995);
  • 9: GR4J (Perrin et al., 2003);
  • 10: HYPE (Lindström et al., 2010);
  • 11: VIC (Liang et al., 1994);
  • 12: TOPMODEL (Beven and Kirkby, 1979);
  • 13: CRHM;
  • 14: TACD (Uhlenbrook et al., 2004);
  • 15: WASIM-ETH (Schulla and Kasper,1998);
  • 16: DHSVM (Wigmosta et al., 1994);
  • 17: MIKE-SHE (Refsgaard and Storm, 1996);
  • 18: PARFLOW (Kollet and Maxwell, 2008);
  • 19: CATFLOW (Zehe et al., 2001);
  • 20: HYDRUS-3D (Šim ˚unek et al., 2008);
  • 21: CATHY (Camporese et al., 2010);
  • 22: HydroGeoSphere(Jones et al., 2006);
  • 23: PIHM (Qu and Duffy, 2007);
  • SHUD (Shu et al., 2020).

数值水文模型,属于分布式水文模型中的一个特殊类别,将地表-地下水文物理过程利用数值方法紧密耦合起来。数值方法本质上是对离散(非连续)时空单元中水头分布和变化的近似数值解的描述,从理论的解析解到数值解虽然损失了精度,但解析解通常无法求得,而数值方法可给出误差可接受的近似解。下图是地表-地下过程耦合的数值方法水文模型在整体水文模型谱系中的位置。
【SHUD】SHUD模型Windows下的编译过程_第2张图片
图中蓝色斜体文字是该类别代表性模型。图中模型分别为:新安江(赵人俊和王佩兰, 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水文模型说明

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编译

SHUD源代码:https://github.com/SHUD-System/SHUD

(VS2019+MYSY+TDMGCC)或者
(MYSY+TDMGCC)
注意:将TDMGCC配置到环境变量,可以勾选openmp

1、SUNIALS库的编译

可以使用MSVC或者MINGW编译

1.1. 使用MSVC

1.1.1 CMAKE

更多细节可以参考参考
SUNDIALS库的编译和使用
【SHUD】SHUD模型Windows下的编译过程_第3张图片【SHUD】SHUD模型Windows下的编译过程_第4张图片
注意此处需要选择动态链接库(SHARED_LIBS,.dll和其对应的.lib)在VS中编译时候才不会出错。
静态库可选。
在这里插入图片描述
点击open project使用vs2019打开ALL_BUILD,右键生成
【SHUD】SHUD模型Windows下的编译过程_第5张图片

1.2. 使用MINGW

1.2.1 CMAKE

需要安装TDMGCC,并配置到环境变量,不然会报错,缺少运行dll。

1.2.2 生成库文件

cd到上一步build路径(我的是C:\SUNDIALS\build)
make
make完毕后,使用
make install
生成库文件,即上一步骤中的prefix路径
3. CMAKE注意事项

  • 红色表示需要确认的选择,例如是不是配置BUILD_CVODE这一项,打钩表示有选择意向,要再次单击"Configure"才能配置。在后面所讲的配置完成后,多次单击"Configure",直到所有红色消除,表示配置完成。
  • 最重要的是CV_CODE和OPENMP,勾选OPENMP,可以编译并行版本的SHUD
  • “BUILD_SHARED_LIBS”,"BUILD_STATIC_LIBS"分别为静态库(STATIC_LIBS,.lib)和动态链接库(SHARED_LIBS,.dll和其对应的.lib);静态库链接时,编译器会将静态库的代码和数据复制到可执行文件中,使得可执行文件可以独立运行,不需要依赖外部的库文件。动态库可以和其他语言混合编程,如C#等,实现SUNDIALS库计算,其他语言做GUI和图形化。

2、SHUD的编译过程

2.1. LINUX和MAC环境

linux环境按照Shud官方说明,很顺利的编译成功。
【SHUD】SHUD模型Windows下的编译过程_第6张图片

2.2. WINDOWS环境

【SHUD】SHUD模型Windows下的编译过程_第7张图片
WINDOWS环境下,我使用的MINGW官方程序自带的msys进行编译。
【SHUD】SHUD模型Windows下的编译过程_第8张图片

2.2.1 shud

可以直接git clone或者复制粘贴shud项目到Home目录下。
【SHUD】SHUD模型Windows下的编译过程_第9张图片
直接用记事本或者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

2.2.2 shud_omp

makefile我主要修改三个地方,包括前面的两个,以及LK_OMP,修改-lomp为-lgomp。然后双击msys.bat进入msys环境cd到shud目录下,直接make shud_omp

LK_OMP    = -Xpreprocessor -fopenmp -lgomp -lsundials_nvecopenmp

【SHUD】SHUD模型Windows下的编译过程_第10张图片

你可能感兴趣的:(#,国产模型,windows)