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

news2024/9/28 11:20:43

目录

  • 〇、绪论
  • 一、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)。
流域中水文循环基本框架
水文模型发展存在着相互矛盾、相互竞争的两种需求,即降低模型复杂度的要求与精细表达水文物理过程的要求,这两个需求下水文模型分为概念性和物理性、自上而下与自下而上的模型分类。

  • 自上而下(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).

数值水文模型,属于分布式水文模型中的一个特殊类别,将地表-地下水文物理过程利用数值方法紧密耦合起来。数值方法本质上是对离散(非连续)时空单元中水头分布和变化的近似数值解的描述,从理论的解析解到数值解虽然损失了精度,但解析解通常无法求得,而数值方法可给出误差可接受的近似解。下图是地表-地下过程耦合的数值方法水文模型在整体水文模型谱系中的位置。
在这里插入图片描述
图中蓝色斜体文字是该类别代表性模型。图中模型分别为:新安江(赵人俊和王佩兰, 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库的编译和使用
在这里插入图片描述在这里插入图片描述
注意此处需要选择动态链接库(SHARED_LIBS,.dll和其对应的.lib)在VS中编译时候才不会出错。
静态库可选。
在这里插入图片描述
点击open project使用vs2019打开ALL_BUILD,右键生成
在这里插入图片描述

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官方说明,很顺利的编译成功。
在这里插入图片描述

2.2. WINDOWS环境

在这里插入图片描述
WINDOWS环境下,我使用的MINGW官方程序自带的msys进行编译。
在这里插入图片描述

2.2.1 shud

可以直接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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1073677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试 - 数字反转打印(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

3D全景虚拟样板间展销系统扩展用户市场范围

VR样板间,能够真实还原现场,定制需要的场景。让一切比真实更真实。用户可以720度看房,自由行走在空间里,直观感受各空间的大小,看到自己家中的“未来样子”,同时通过操控手柄,控制整个智能家居系…

Redis-04独立功能的实现

1、发布与订阅 介绍: Redis的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。通过SUBSCRIBE命令,客户端可以订阅一个或多个频道,成为这些频道的订阅者(subscriber)每当有其他客户端向被订阅的频道发送消…

API网关是什么?

API网关是什么? API网关很多人都知道它的实现原理,但是并不清楚它存在的意义和背景是什么,这里我给大家通俗易懂地讲解下!举个例子,假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务&#xf…

多个方法多个出路!Microsoft Excel中合并单元格的8种方法

合并单元格是初学者电子表格用户使用的最流行的选项之一。但它们有许多缺点,使它们不是那么好的选择。 在这篇文章中,我将向你展示有关合并单元格的所有信息,包括8种合并单元格的方法。我还将告诉你为什么不应该使用它们,以及一个更好的替代方案,它将产生相同的视觉效果。…

前端预览、下载二进制文件流(png、pdf)

前端请求设置 responseType: “blob” 后台接口返回的文件流如下&#xff1a; 拿到后端返回的文件流后&#xff1a; 预览 <iframe :src"previewUrl" frameborder"0" style"width: 500px; height: 500px;"></iframe>1、预览 v…

【APP】上架指南:iOS App Store 首次上架被拒原因分析与解决方案

目录 一、前言 二、APP 审核备案新规 &#xff08;1&#xff09;iOS 上架审核申请被拒 &#xff08;2&#xff09;苹果应用商店重大调整 &#xff08;3&#xff09;首次备案流程 ① 阿里云备案 ② 华为云备案 ③ 腾讯云备案 三、iOS 首次上架拒审原因分析 &#…

Redis-03持久化

1、RDB持久化 Redis是一个键值对数据库服务器&#xff0c;服务器中通常包含着任意个非空数据库&#xff0c;而每个非空数据库中又可以包含任意个键值对&#xff0c;通常情况下将服务器中的非空数据库以及它们的键值对统称为数据库状态 Redis是内存数据库&#xff0c;它将自己…

【Ingress】

Ingress 一、作用二、使外部应用能够访问集群内服务方案1.NodePort2.LoadBalancer3.externalIPs4.Ingress 三、Ingress的组成1.ingress:nginx配置文件2.ingress-controller: 当作反向代理或者说是转发器 四、Ingress工作原理五、ingress暴露服务的方式方式一&#xff1a;Deploy…

WPF向Avalonia迁移(四、其他事项)

开发必备 1. Avalonia项目源代码&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;没有源代码&#xff0c;你连控件的背景色怎么改都找不着&#xff01;&#xff01; 2.下载你所使用的版本&#x…

Tomcat 线程模型性能调优

Linux I/O模型详解 I/O要解决什么问题 I/O&#xff1a;在计算机内存与外部设备之间拷贝数据的过程。 程序通过CPU向外部设备发出读指令&#xff0c;数据从外部设备拷贝至内存需要一段时间&#xff0c;这段时间CPU就没事情做了&#xff0c;程序就会两种选择&#xff1a; 让出…

投资 3DEXPERIENCE® WORKS 的 10 大理由

3DEXPERIENCE Works 通过利用基于云的 3DEXPERIENCE 平台提供一个统一的协作环境&#xff0c;扩展 SOLIDWORKS 的价值&#xff0c;使参与 产品开发的每个人都能为创新流程做出贡献。简而言之&#xff0c;如果您喜欢使用 SOLIDWORKS&#xff0c;那么您可以在继续使用的同时&…

在minkube上部署Milvus

Milvus Milvus是一个向量数据库&#xff0c;可以为ai做数据支撑。 Preparatory Work minikube minikube是一款微型本地k8s install curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudo install minikube-linux-amd64 /usr/loca…

深入理解强化学习——强化学习的定义

分类目录&#xff1a;《深入理解强化学习》总目录 在机器学习领域&#xff0c;有一类任务和人的选择很相似&#xff0c;即序列决策&#xff08;Sequential Decision Making&#xff09;任务。决策和预测任务不同&#xff0c;决策往往会带来“后果”&#xff0c;因此决策者需要为…

电脑技巧:推荐一款桌面增强工具AquaSnap(附下载)

下载&#xff1a;飞猫盘&#xff5c;文件加速传输工具&#xff5c;云盘&#xff5c;橘猫旗下新概念云平台&#xff0c;取件码&#xff1a;ZdRW 一、软件介绍 AquaSnap(界面增强软件)是一款功能强大的界面增强软件。这款软件支持屏幕边缘吸附与屏幕分屏即多显示器控制、摇晃窗口…

重构项目 vue2 => vue3 nuxt2 => nuxt3 遇到的问题

vue3获取组件的上下文 import { getCurrentInstance } from vue; // 获取当前组件实例 const instance getCurrentInstance();// 获取当前组件的上下文&#xff0c;下面两种方式都能获取到组件的上下文。// 方式一&#xff0c;这种方式只能在开发环境下使用&#xff0c;生产环…

文件名太长,批量改名不求人:轻松解决文件名问题

在电脑使用过程中&#xff0c;我们经常需要处理各种文件&#xff0c;有时候会遇到文件名过长的问题。过长的文件名可能会让人感到混乱&#xff0c;也可能会引发一些操作问题。那么&#xff0c;如何快速解决文件名过长的问题呢&#xff1f;其实&#xff0c;我们可以通过批量重命…

webpack不同环境下使用CSS分离插件mini-css-extract-plugin

1.背景描述 使用mini-css-extract-plugin插件来打包css文件&#xff08;从css文件中提取css代码到单独的文件中&#xff0c;对css代码进行代码压缩等&#xff09;。 本次采用三个配置文件&#xff1a; 公共配置文件&#xff1a;webpack.common.jsdev开发环境配置文件&#x…

《DevOps 精要:业务视角》- 读书笔记(七)

DevOps 精要:业务视角&#xff08;七&#xff09; DevOps历程什么是企业体系的DevOps&#xff1f;DevOps的目标是什么&#xff1f; DevOps的知识体系规范敏捷持续交付IT服务管理以TPS理念为基础 DevOps团队角色流程主管&#xff08;Process Master&#xff09;服务主管&#xf…

环信web、uniapp、微信小程序SDK报错详解---登录篇

项目场景&#xff1a; 记录对接环信sdk时遇到的一系列问题&#xff0c;总结一下避免大家再次踩坑。这里主要针对于web、uniapp、微信小程序在对接环信sdk时遇到的问题。主要针对报错400、404、401、40 (一) 登录用户报400 原因分析&#xff1a; 从console控制台输出及networ…