CN113449404B - 基于逐层叶片单元识别的河网汇流与分水并行计算方法 - Google Patents
基于逐层叶片单元识别的河网汇流与分水并行计算方法 Download PDFInfo
- Publication number
- CN113449404B CN113449404B CN202110731694.6A CN202110731694A CN113449404B CN 113449404 B CN113449404 B CN 113449404B CN 202110731694 A CN202110731694 A CN 202110731694A CN 113449404 B CN113449404 B CN 113449404B
- Authority
- CN
- China
- Prior art keywords
- water
- unit
- units
- water diversion
- confluence
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 title claims abstract description 226
- 238000004364 calculation method Methods 0.000 title claims abstract description 59
- 239000002352 surface water Substances 0.000 claims abstract description 116
- 238000000034 method Methods 0.000 claims abstract description 77
- 238000011144 upstream manufacturing Methods 0.000 claims description 43
- 230000008569 process Effects 0.000 abstract description 50
- 238000012545 processing Methods 0.000 abstract description 14
- 238000009826 distribution Methods 0.000 abstract description 6
- 238000004088 simulation Methods 0.000 description 28
- 230000007717 exclusion Effects 0.000 description 9
- 239000003673 groundwater Substances 0.000 description 7
- 230000004907 flux Effects 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 238000011160 research Methods 0.000 description 5
- 230000004044 response Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000003860 storage Methods 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000001502 supplementing effect Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000003973 irrigation Methods 0.000 description 2
- 230000002262 irrigation Effects 0.000 description 2
- 239000003621 irrigation water Substances 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000000875 corresponding effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000017525 heat dissipation Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 230000005855 radiation Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 108020001568 subdomains Proteins 0.000 description 1
- 238000004148 unit process Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/10—Geometric CAD
- G06F30/18—Network design, e.g. design based on topological or interconnect aspects of utility systems, piping, heating ventilation air conditioning [HVAC] or cabling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2111/00—Details relating to CAD techniques
- G06F2111/02—CAD in a network environment, e.g. collaborative CAD or distributed simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2113/00—Details relating to the application field
- G06F2113/08—Fluids
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Geometry (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- General Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种基于逐层叶片单元识别的河网汇流与分水并行计算方法,包括以下步骤:S1:通过地表水网单元分水汇流信息,建立分水汇流关系;S2:根据分水汇流关系,检验分水关系的一致性;S3:搜索地表水网单元中的叶片单元;S4:基于叶片单元对地表水网汇流及分水进行并行计算。本发明的基于逐层叶片单元识别的河网汇流与分水并行计算方法对复杂河网分水汇流进行并行处理只需要建立河网关系表,并通过该方法从关系表中扫描出独立的叶片单元后,只需要结合不同的并行编程方法就可以并行处理,其过程简单。
Description
技术领域
本发明属于水域并行技术领域,具体涉及一种基于逐层叶片单元识别的河网汇流与分水并行计算方法。
背景技术
遥感技术(RS)、地理信息***(GIS)和数字高程模型(DEM)的发展,为科学研究提供了更丰富且精确的数据,但同时对各类计算模拟提出了更高的要求。高性能计算机的发展也为各类复杂模型运算提供了硬件基础,如何最大程度提升模型的运算效率是科学计算领域长期的方向。
自2000年左右纳米级处理器主频能力基本就已达到饱和,主频增加的困难和增加后计算力的提升不成正比,单核处理器计算能力的提升由于散热限制,逐渐发展至瓶颈阶段,开始向多核心发展。对于高性能多核心的处理器,如果仅仅只运行串行程序利用其单核的性能,无疑是对计算机性能巨大的浪费。在这种背景下,未来几十年必然是并行运算发展的“黄金时代”,各行业相关的计算程序研究也急需要由串行程序向并行程序改进。
随着计算机硬件技术的发展,当前个人计算机一般普遍具备4~8核心的CPU,已具备较好并行计算基础,然而除了已经具备的硬件能力,还需要模型软件本身提供多线程并行运算的支持。目前并行运算广泛应用于各行业模拟计算,但在水文和水循环模型研究方面尚未取得很大的进展。现有水文算法没有考虑水库和渠道等地表水网单元的***,河网单元只考虑水系中河道的汇流关系,未考虑复杂河网中包含渠道单元涉及的分水关系,渠道分水必然会影响到河网汇流的次序,从而对并行计算的设计产生影响。并且只是针对汇流过程,并非是对水文模型中涉及的过程进行并行。像产流阶段这种互相独立的过程和气象数据的更新,结合将该过程中的共享变量私有化、调用Open指令进行多线程计算都可以并行。水文模型引入并行运算概念,其复杂之处在于如何尽可能分离出相互独立可同时计算的过程,在计算过程中同时避免全局共享变量出现数据冲突,以实现较高的并行效率。
发明内容
本发明的目的是为了解决复杂河流分水汇流过程效率低的问题,提出了一种基于逐层叶片单元识别的河网汇流与分水并行计算方法。
本发明的技术方案是:一种基于逐层叶片单元识别的河网汇流与分水并行计算方法包括以下步骤:
S1:通过地表水网单元分水汇流信息,建立分水汇流关系;
S2:根据分水汇流关系,检验分水汇流关系的一致性;
S3:基于分水汇流关系的一致性,搜索地表水网单元中的叶片单元;
S4:基于叶片单元对地表水网汇流及分水进行并行计算。
进一步地,步骤S1中,将地表水网单元划分为河道、渠道和水库;分水汇流关系具体为:对地表水网单元的下游单元进行编号和性质定义,确定汇流关系:对地表水网单元的分水水源单元进行编号和性质定义,确定分水关系;
其中,地表水网单元的下游单元分为河道、渠道和水库,若该地表水网单元为水网的最上游单元,则将其下游单元编号为-1,若否则按顺序编号;
分水水源单元分为河道、渠道和水库,若该地表水网单元不需要分水,则将其分水水源单元为-1,否则按顺序编号。
进一步地,步骤S2包括以下子步骤:
S21:判断待检验地表水网单元是否从其他地表水网单元分水,若是则进入步骤S22,否则进入步骤S27;
S22:判断被分水的地表水网单元和上游的地表水网单元是否为同一单元,若是则进入步骤S26,否则进入步骤S23;
S23:判断待检验地表水网单元是否为河渠,若是则进入步骤S24,否则进入步骤S27;
S24:判断待检验河渠是否给下游的地表水网单元分水,若是则进入步骤S26,否则进入步骤S25;
S25:判断待检验河渠的分水方式是否采用预设分水比例,若是则进入步骤S26,否则进入步骤S27;
S26:检查分水汇流关系,确定分水汇流关系无误;
S27:判断待检验地表水网单元是否给其他地表水网单元分水,若是则进入步骤S28,否则分水汇流关系无误;
S28:判断步骤S27中的其他地表水网单元的分水量确定方式是否一致,若是则分水汇流关系无误,否则返回步骤S26。
进一步地,步骤S26中,检查分水汇流关系的具体方法为:检验分水关系和汇流关系中的编号是否正确,若正确则分水汇流关系一致,否则修改其编号。
进一步地,步骤S3包括以下子步骤:
S31:依次从树状结构的水网的第一个流域出口到最后一个流域出口搜索叶片单元;
S32:判断待检验地表水网单元是否被确定为叶片单元,若是则进入步骤S36;否则进入步骤S33;
S33:判断待检验地表水网单元的上游地表水网单元是否被确定为叶片单元,若是则进入步骤S34,否则将下一个流域出口作为步骤S31中的第一个流域出口并返回步骤S31;
S34:判断待检验地表水网单元是否从其他地表水网单元分水,若是则进入S35,否则将待检验地表水网单元确定为叶片单元;
S35:若分水单元和待检验地表水网单元在同一层叶片数组中,则利用递归函数更新并再次返回步骤S33;若分水单元和待检验地表水网单元不在同一层叶片数组中,则将待检验地表水网单元确定为叶片单元,并进入步骤S36;
S36:判断步骤S31-S35的搜索叶片单元次数是否小于等于地表水网单元个数,若是则进入步骤S37,否则检查分水汇流关系的一致性并再次搜索叶片单元;
S37:判断叶片单元个数是否等于地表水网单元个数,若是则完成叶片单元搜索,否则检查分水汇流关系的一致性并再次搜索叶片单元。
进一步地,步骤S4中,进行汇流并行的方法为:利用OpenMP并行方法按照叶片单元的层级顺序循环完成分水汇流的水量计算。
本发明的有益效果是:
(1)本发明的基于逐层叶片单元识别的河网汇流与分水并行计算方法对复杂河网分水汇流进行并行处理只需要建立河网关系表,并通过该方法从关系表中扫描出独立的叶片单元后,只需要结合不同的并行编程方法就可以并行处理,其过程简单。
(2)本发明的基于逐层叶片单元识别的河网汇流与分水并行计算方法涉及水库和渠道的分水用水过程,适合绝大多数非环形河网汇流的并行计算。
附图说明
图1为基于逐层叶片单元识别的河网汇流与分水并行计算方法的流程图;
图2为树状网络结构及其逐层叶片单元示意图;
图3为本发明实施例中叶片单元的确定图;
图4为本发明实施例中利用OpenMP接口对水文模拟过程进行并行计算的流程图。
具体实施方式
下面结合附图对本发明的实施例作进一步的说明。
在描述本发明的具体实施例之前,为使本发明的方案更加清楚完整,首先对本发明中出现的缩略语和关键术语定义进行说明:
地表水网单元:是基于逐层叶片单元识别的河网汇流与分水并行计算方法中地表水主要的模拟要素,本方法中只针对河道、渠道和水库。
OpenMP:由OpenMP Architecture Review Board牵头提出的,并已被广泛接受,用于共享内存并行***的多处理器程序设计的一套指导性编译处理方案(CompilerDirective)。
叶片单元:为了形象的解释,叶片单元可以定义为树形河网最外层单元。
如图1所示,本发明提供了一种基于逐层叶片单元识别的河网汇流与分水并行计算方法,包括以下步骤:
S1:通过地表水网单元分水汇流信息,建立分水汇流关系;
S2:根据分水汇流关系,检验分水汇流关系的一致性;
S3:基于分水汇流关系的一致性,搜索地表水网单元中的叶片单元;
S4:基于叶片单元对地表水网汇流及分水进行并行计算。
在本发明实施例中,步骤S1中,将地表水网单元划分为河道、渠道和水库;分水汇流关系具体为:对地表水网单元的下游单元进行编号和性质定义,确定汇流关系:对地表水网单元的分水水源单元进行编号和性质定义,确定分水关系;
其中,地表水网单元的下游单元分为河道、渠道和水库,若该地表水网单元为水网的最上游单元,则将其下游单元编号为-1,若否则按顺序编号;
分水水源单元分为河道、渠道和水库,若该地表水网单元不需要分水,则将其分水水源单元为-1,否则按顺序编号。
通过使用者人为定义来划分主河道、渠道和水库时,结合实际该元素是什么类型就定义为什么类型。
在建立分水汇流关系时,需要使用者自己输入,通过输入某个单元的下游编号来确定汇流关系;通过分水单元的下游编号确定分水关系。表1就是包括该单元的编号、性质以及下游单元的编号及性质、分水单元的编号及性质、分水水量的确定方式及渠道的用水方式。
各个单元有着下游连接的编号,如果没有下游编号,则本单元为流域出口。分水关系同样通过水网单元与分水来源单元编号、性质和分水形式建立联系,并作为流域完整的分水汇水关系的输入表进行水文模型的计算。通过汇流分水关系表进行输入,让计算机模拟出完整的树形河网,通过河网关系确定最上游的单元以及流域出口。汇流分水关系格式见下表1。
表1
其中,地表水网单元性质中1代表主河道,2代表渠道,3为水库(各数字对应含义与下游单元性质、分水单元性质相同);下游单元编号中数字代表各单元编号,下游编号为-1代表为流域出口;分水单元编号为-1代表不分水,此时分水性质也为-1;分水确定方式1表示指定流量从水源分水,2表示按末端剩余水量的比例分水,3表示通过用水自动试算;渠道的用水方式中1表示用水均匀分布在渠道的各个渠段上消耗,2表示用水从渠道末端引向别处消耗。
分水汇流关系表需要对下面一些要素进行输入,以便计算机能形成一个完成的河网***。主要包括地表水网单元性质的定义,对其性质定义为河道、渠道、水库;其次是对其下游单元编号进行定义,当该单元没有下游时表示该单元为水网的最上游单元,此时其下游单元编号统一定义为-1,并对下游单元的性质进行定义同样为河道、渠道、水库;接下来需要给定分水水源的编号以及性质,编号为-1时表示不分水,性质同样需要给定为河道、渠道、水库;最后需要给定本单元分水量的确定方式包括三种:指定流量分水、按水源剩余水量(河渠)或蓄量分水(水库)、自动分水(仅适用河渠)渠道的用水方式有两种:用水均匀分布在渠道的各个渠段上消耗、用水从渠道末端引向别处消耗。
在本发明实施例中,步骤S2包括以下子步骤:
S21:判断待检验地表水网单元是否从其他地表水网单元分水,若是则进入步骤S22,否则进入步骤S27;
S22:判断被分水的地表水网单元和上游的地表水网单元是否为同一单元,若是则进入步骤S26,否则进入步骤S23;
S23:判断待检验地表水网单元是否为河渠,若是则进入步骤S24,否则进入步骤S27;
S24:判断待检验河渠是否给下游的地表水网单元分水,若是则进入步骤S26,否则进入步骤S25;
S25:判断待检验河渠的分水方式是否采用预设分水比例,若是则进入步骤S26,否则进入步骤S27;
S26:检查分水汇流关系,确定分水汇流关系无误;
S27:判断待检验地表水网单元是否给其他地表水网单元分水,若是则进入步骤S28,否则分水汇流关系无误;
S28:判断步骤S27中的其他地表水网单元的分水量确定方式是否一致,若是则分水汇流关系无误,否则返回步骤S26。
一般情况下,任何地表水网单元都可以有一个下游的汇流地表水网单元(分水单元),以及多个从其分水的地表水网单元(受水单元),但分水需求量自动计算的渠道不能同时有下游汇流单元和受水单元,两者只能居其一。这是因为,渠道的下泄量(即向下游汇流单元的***量)和给受水单元的分水是相互关联的,渠道要从其最后一个网格渠段的末端水量中减去给受水单元的分水量才能确定下泄量。这个过程在非自动计算分水需求量的渠道中是没有问题的,但是在自动计算分水需求量的渠道中会导致其计算逻辑问题。在通过流域回流***信息表确定单元间模拟次序是首先要进行分水关系合理性和一致性检查。具体为:
(1)检查分被水的单元和上游汇入单元是否为同一单元。在MODCYCLE中,为保证树状回流网络的逻辑,模型约定每个地表水计算单元末端最多只能有一个下游汇流单元,但可以向不限数量的其他单元分水。
(2)河渠单元分水模式采用的自动分水模式,则不能有下游单元和给别的单元分水。这是因为渠道给下游汇流单元的下泄量和给受水单元的分水量是相互关联的,渠道需要用渠道末端水量减去受水单元的分水量最后才能确定下泄量。
(3)本河渠的分水量如果是自动计算,若从本河渠单元分水的受水单元采用的按指定分水比例的方式将报错。
在本发明实施例中,步骤S26中,检查分水汇流关系的具体方法为:检验分水关系和汇流关系中的编号是否正确,若正确则分水汇流关系一致,否则修改其编号。
对分水汇流关系表中的每一个地表水网单元(每一行的数据)进行检验,防止地表水网有一些计算逻辑的错误。
在本发明实施例中,步骤S3包括以下子步骤:
S31:依次从树状结构的水网的第一个流域出口到最后一个流域出口搜索叶片单元;
S32:判断待检验地表水网单元是否被确定为叶片单元,若是则进入步骤S36;否则进入步骤S33;
S33:判断待检验地表水网单元的上游地表水网单元是否被确定为叶片单元,若是则进入步骤S34,否则将下一个流域出口作为步骤S31中的第一个流域出口并返回步骤S31;
S34:判断待检验地表水网单元是否从其他地表水网单元分水,若是则进入S35,否则将待检验地表水网单元确定为叶片单元;
S35:若分水单元和待检验地表水网单元在同一层叶片数组中,则利用递归函数更新并再次返回步骤S33;若分水单元和待检验地表水网单元不在同一层叶片数组中,则将待检验地表水网单元确定为叶片单元,并进入步骤S36;
S36:判断步骤S31-S35的搜索叶片单元次数是否小于等于地表水网单元个数,若是则进入步骤S37,否则检查分水汇流关系的一致性并再次搜索叶片单元;
S37:判断叶片单元个数是否等于地表水网单元个数,若是则完成叶片单元搜索,否则检查分水汇流关系的一致性并再次搜索叶片单元。
因为模拟过程中地表水网有从上游单元到下游单元进行汇流和分水的计算次序,各地表水网单元的模拟计算之间存在较强的前、后依赖性。为了克服这一难题,模型在树状河网结构基础上研发了“叶片并行”算法。该算法原理为:虽然树状网络结构整体上有单元计算前、后次序依赖性的问题,但是对于树状网络的“叶片单元”,同一层内的叶片单元是没有计算依赖性的,可以进行并行运算。所谓树状网络的“叶片单元”,是指树状网络当前最外层的单元,这些单元没有上游汇流单元或其上游汇流单元都已完成计算,也不从别的单元分水或其分水的水源单元已经完成计算。如图2所示的树状汇流网络结构,该树状汇流网络结构的计算可以分层进行,其第一层的13个“叶片单元”的上游都没有汇流单元,计算相对独立,可以并行运行。在第一层“叶片单元”计算完成之后,这些叶片单元对于其下游的单元而言汇流量已经明确,因此又形成了第二层的5个“叶片单元”可以进行并行运算。该过程如果继续进行下去,第三层将有2个“叶片单元”,第四层将只有1个“叶片单元”,第五层也将只有1个“叶片单元”。当第五层计算完之后,整个树状汇流网络结构的运算全部完成。为简单起见,该示意图只根据树状网络的单元间汇流关系进行了并行运算原理说明,实际过程中模型还需要考虑单元间的分水关系,过程略微复杂一些,但进行逐层“叶片单元”分离和并行运算的主旨思想是相同的。
搜索叶片单元过程如下:
(1)执行一个无线循环,依次从第一个流域出口到最后一个流域出口执行向上搜索叶片单元操作,执行N次,循环终止条件为所有流域出口上游都已确定为叶片单元。
(2)搜索叶片过程如下:
1)先判定该单元是否已确定为叶片单元,若确定则返回,若不能确定则对其上游支流单元进行判断。
2)若上游支流单元全部已被判定为叶片单元,本身如果不从别的单元分水,则本单元可以确定为叶片单元,返回上一节点;若本单元从别的地方分水,分水单元叶片层位已确定,且分水单元和本单元不在同一层叶片数组中,则可确定本单元为叶片单元,返回上一节点;若在同一层叶片数组中返回不能确定叶片单元。
3)若上游支流单元尚未全部确定为叶片单元,通过建立一个递归函数返回步骤(1),即再次对上游再次执行搜索叶片的指令,对上游单元进行判断。并标记本单元尚未确定为叶片单元。
(3)所有流域出口的上游都已确定叶片单元层级后,输出执行无限循环终止时的循环次数N,判断N是否小于等于河网单元的数量。若N超过河网单元的数量,则需检查河网分水汇流关系表。
(4)检查各层叶片数组中全部叶片单元个数之和是否与总地表水网单元的数量相等,若不相等,还需检查地表水网关系表。
在本发明实施例中,如图3所示,搜索叶片单元过程中涉及一个扫描过程,即无限循环地执行从第一个流域出口到最后一个流域出口向上搜索,直到流域出口所有的上游地表水网单元都已确定为叶片单元。而搜索叶片单元涉及到递归算法,如果上游无法确定为叶片单元的话将在次执行搜索,直到搜索到上游确定到叶片单元,此过程较为繁琐通过下图3的实例进行进一步理解。开始所有地表水网都未确定为叶片单元,从出口1开始向上搜索,由于1号主河道的上游还未确定为叶片单元,执行搜索的递归即再次向上搜索,此时2、3号主河道为最上游河道,也不存在分水关系,因此2、3号主河道可以确定为第0层叶片的叶片单元(见①)。1号出口搜索完毕,开始从出口2向上搜索,同样4号主河道上游都未确定,开始执行向上递归搜索的递归,直到搜索到最上游,确定6、7、8号主河道为叶片单元,此时一次扫描完成(见②)。开始执行第二次扫描,从第一个流域出口向上搜索,此时1号主河道上游单元都已确定为叶片单元,则其也可以确定为叶片单元,而1号主河道是属于第1层的叶片单元,同理5号主河道为第1层叶片的叶片单元(见③)。第二次搜索完毕,开始第三次扫描,本次4号主河道的上游单元也都已确定为叶片单元,因此4号也可以确定为叶片单元,其属于第2层叶片的叶片单元(见④)。此时所有流域出口上游单元都已确定为叶片单元,扫描结束中断无限循环并检查叶片单元与河道数量无误。
在本发明实施例中,步骤S4中,进行汇流并行的方法为:利用OpenMP并行方法按照叶片单元的层级顺序循环完成分水汇流的水量计算。
在串行程序时,模型根据河网模拟的顺序进行分水汇流计算,在此基础上将模型的顺序改为叶片单元指针并在循环处执行OpenMP即可实现此部分的并行。在地表水网模拟中,循环按照叶片单元的顺序完成分水汇流的水量传输以及对河网计算其渗漏到子流域地下水的量。在此直接执行#pragma ompprarallel for num_threads(m_NUMTHRD)schedule(type,size)指令,完成山丘区河网分水汇流的过程。在将所有地表水网单元都确定为叶片单元后,同层位叶片单元向下游汇流的过程是相互独立的,可以执行OpenMP并行指令,调度方式选择dynamic。
在本发明实施例中,通过OpenMP应用编程接口对水文模拟过程进行并行计算,如图4所示,过程如下:
(1)并行可行性分析:
从整体模拟过程来看,模型的主要运行内容大致可以分为五个部分,一是模型连接并从数据库中读入输入数据;二是进行山丘区子流域和平原区网格单元内部的陆面过程模拟;三是进行地表水网与地下水数值计算之间的耦合模拟;四是模型模拟结果的统计与整理(日、月、年等时间尺度);五是模型模拟结果向数据库***的输出。其中第一和第五个部分涉及到模型对计算机存储***的读入和写入,而存储***的接口一般都是串行,因此无法进行并处理,能够进行并行处理的主要为第二、第三、第四这三个部分。
MODCYCLE模型每天都需要对所有的模块进行模拟结果统计,包括各水文响应单元、子流域、网格单元、地表水网单元等,这一部分的运行工作量比重相当大。这些工作也都基本在各个模块内部进行,如水文响应单元、主河道网格单元等的模拟结果统计与整理等,这些都是相对独立的运行过程,与统计整理次序无关,可以实现并行运算处理。有些模块的模拟结果数据需要根据别的模块进行汇总,如平原区含水层的模拟结果统计与整理和其包含的网格单元有关,因此不进行并行处理。
模型运算中,山丘区子流域和平原区网格单元内部的陆面过程模拟,包括其内部水文响应单元的模拟、池塘和湿地模拟、地表径流产出汇总等,这一般是占据整体模型运行工作量较大的部分,因为通常模型所需模拟的水文响应单元的总体数量较为庞大。在这个部分,由于各个山丘区子流域和平原区网格单元的计算相对独立,各子流域和网格单元以任何次序进行模拟运算对最终的模拟结果都不会产生影响,因此很容易进行并行运算处理。
水文模型中河网的产流阶段在各个子流域中相互独立,所以各个子流域产流可直接通过并多线程接口直接实现并行运算。然而对于复杂河网单元的分水汇流过程,下游计算需要上游结果作为输入,每个线程分配的任务不能有相互依赖关系,这样就无法对河网分水汇流过程直接应用并行计算。但将树状河网自下游出口向上搜索,可以搜索出许多类似“叶片”的分支,而这些分支是相互独立的,互不影响,可利用多线程同时计算。在此基础上将河网分为多层的叶片单元,第0层的叶片单元同时计算后,第1层叶片单元在前一层的基础上再次并行运算,直至最后一层叶片单元计算完成,从而实现复杂河网分水汇水的并行运算。
总的来讲,MODCYCLE的并行可以归结为两类:一类为独立型过程的并行,主要包括模块内计算结果的统计保存、陆面产流过程、气象数据的更新等,这部分模块计算相对独立,只需将该过程中的共享变量设立互斥机制后,直接在串行程序的基础上通过OpenMP框架接口可进行多线程计算。另外一类为顺序过程的并行,主要是地表水网汇流与分水模拟,由于此部分需要考虑前后计算的结果,因此不能直接进行并行处理。但通过分层处理,整个顺序过程可以转化为多个相互独立的子过程,而子过程内的地表水网中山丘区的分水、汇流以及地下水渗漏量的计算、平原区地表地下水耦合模拟的过程便可以进行并行计算处理。
(2)对共线变量引入同步机制
在将串行程序修改为并行程序前首先需要使用并行互斥锁或其他线程同步机制,防止出现并行时多个线程索要一个共享变量出现数据冲突导致程序出错。原则就是将“一对多”中的共享的“一”进行锁定,保证其在被某个线程使用时,不会被其他线程请求使用。在C++语言开发的程序中可以在涉及到共享变量的每个类中的构造函数通过omp_init_lock(omp_lock*)初始化一个并行互斥锁,并在析构函数后通过omp_destroy_lock(omp_lock*)销毁并行互斥锁。在计算时需要返回该变量数据值的过程中通过omp_set_lock(&OmpLock)设置互斥锁,检索到数据返回后通过omp_unset_lock(&OmpLock)释放互斥锁。
在多数水文模型的坡面产流阶段需要设置互斥锁的共享变量主要包括湿度站、热辐射站、温度站、风速站等气象站的气象驱动。由于可能会存在多个流域共用一个气象站,并行如无指定同步机制,计算机无法判断该数据先给哪个线程使用,产生读写冲突。其余他共享变量私有化可根据不同水文模型的原理再进行处理。
根据模型原理有些模型需要给以下共享变量设立互斥机制,有些模型原理不涉及该结构则不需要,对于流域的互斥锁,城市类型和植物类型也存在着多对一的数据情况,并行时多个子流域都需要返回某个城市类型(植物类型)的数据,此时则会有数据竞争的现象。因此需要在返回城市区类型和返回植物类型指针的函数过程设置互斥锁,并在得到数据后对互斥锁进行销毁。
在渠道、河道、湖泊返回网格单元的地表水与地下水之间交换通量的时候,因为可能存在多个河网单元存在于同一个地下水网格单元上,因此在水网单元渗漏到地下水通量或地下水向水网单元***通量交换通量时多个水网单元也可能会同时向一个地下水网格单元进行通量交换,为避免此部分数据产生读写冲突需要对地下水对象类型的指针私有化。
渠道、河道、水库根据水文响应单元类型返回灌溉需求时,此时可能多个HRU向同一渠道\河道\水库索取分配的灌溉水量,此过程也会产生数据冲突,因此在渠道和主河道、水库附加灌溉申请信息时以及分配灌溉水量时,需要对这三种水网单元设置互斥锁。模型中湿地补水需要向地表水网单元要补水,此时存在多个湿地同时向一个水库、河道、渠道申请补水的情况,也可能存在着数据冲突,在申请补水过程中同样需要对几种河网单元建立互斥锁。
(3)独立过程的并行
在建立完并行互斥锁完成私有化变量后,在节点循环过程处通过#pragma ompparallel for num_threads()指令对该循环建立并行域,schedule(type,size)指令对节点任务按照选定调度方式划分给不同的线程,size设置每次分配迭代任务大小,并行计算处使用num_threads(num)选择使用参与运算线程的数目,最大不超过计算机本身的线程数。选择合适的调度方式尽可能保证每个线程分配的任务相当,这样线程保持在大致相等的时间内完成,可以提升并行效率。因为循环的次数是由外部输入决定的,很难实现任务的平均分配达到负载均衡状态,所以在水文模型中任务调度通常选择动态方式(Dynamic)。但同时任务划分的处理块的大小对于并行效率影响很大,处理粒度过大会降低线程负载均衡的程度,而处理粒度过小,会增加***的线程调度开销也会影响并行效率。
下面结合具体区域验证本发明的方法:在本次四核八线程的计算机上,对京津冀区域进行2005-2014年模拟计算,分别以单线程到八线程并行运算,对模型并行效率进行分析。在8线程的处理器上并行时,计算机CPU利用率可达100%远超串行时的12.5%。
结果显示运算时间随着线程的增加而降低,模型整体的加速比在线程数为8的情况下计算时间9916秒缩短到3286秒可以达到3.02,而各模块结果的统计保存和单元产流计算过程的从串行计算耗时5145秒缩最快缩短到短到8线程时的1394秒,在线程为8时加速比最大可以达到3.71。整个陆面过程串行计算时平均耗时2515秒,当线程数为8时用时缩短至593秒,加速比可达4.24。在线程4时,河网汇流程运算时间达到最短,由串行计算时的455秒缩短到237秒,加速比达到1.92。
在产流或其他独立的过程上,有其他的替代方案,可以通过MPI+OpenMP和CUDA等修改进行编程计算。由于自子流域内产流过程是独立的,从原理上很容易实现并行计算。
但复杂河网分水汇流的过程,现阶段研究处于将河网分层进行并行运算原理上与叶片单元类似,但其只考虑河道的上下顺序关系并没有将渠道的分水用水以及水库的分水用水考虑进来,因此涉及到复杂河网(河道、渠道、水库)分水汇流的流域模拟,现阶段没有相关的研究。河网分层方法描述如下:
S1、通过确定汇流并行计算的初始状态,即子流域上游与下游的依赖关系表,分别标注出当前子流域上游和下游子流域的编码号IX;
S2、对Pfafstetter流域编码进行改造,在原来一维数组(IX)单独定义子流域的基础上,将其扩展为二维数组(IX,IL),其中IL表示为当前子流域具有的所有上游依赖子流域以及自身在内的个数;
S3、通过OpenMP编程对汇流模块改造,对IL等于1的子流域合理分配给CPU不同的线程,进行多线程的并行计算;同时,当前流域汇流模拟结束跳出并行域后,对自身和有依赖关系的所有下游子流域的IL减1;
S4、循环整个线程分配过程和数组计算过程,直到所有子流域都计算完成,即所有子流域的IL都等于0时停止计算,输出汇流结果;
本发明的工作原理及过程为:
本发明的有益效果为:
(1)本发明的基于逐层叶片单元识别的河网汇流与分水并行计算方法对复杂河网分水汇流进行并行处理只需要建立河网关系表,并通过该方法从关系表中扫描出独立的叶片单元后,只需要结合不同的并行编程方法就可以并行处理,其过程简单。
(2)本发明的基于逐层叶片单元识别的河网汇流与分水并行计算方法涉及水库和渠道的分水用水过程,适合绝大多数非环形河网汇流的并行计算。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
Claims (2)
1.一种基于逐层叶片单元识别的河网汇流与分水并行计算方法,其特征在于,包括以下步骤:
S1:通过地表水网单元分水汇流信息,建立分水汇流关系;
S2:根据分水汇流关系,检验分水汇流关系的一致性;
S3:基于分水汇流关系的一致性,搜索地表水网单元中的叶片单元;
S4:基于叶片单元对地表水网汇流及分水进行并行计算;
所述步骤S1中,将地表水网单元划分为河道、渠道和水库;分水汇流关系具体为:对地表水网单元的下游单元进行编号和性质定义,确定汇流关系:对地表水网单元的分水水源单元进行编号和性质定义,确定分水关系;
其中,地表水网单元的下游单元分为河道、渠道和水库,若该地表水网单元为水网的最上游单元,则将其下游单元编号为-1,若否则按顺序编号;
分水水源单元分为河道、渠道和水库,若该地表水网单元不需要分水,则将其分水水源单元为-1,否则按顺序编号;
所述步骤S2包括以下子步骤:
S21:判断待检验地表水网单元是否从其他地表水网单元分水,若是则进入步骤S22,否则进入步骤S27;
S22:判断被分水的地表水网单元和上游的地表水网单元是否为同一单元,若是则进入步骤S26,否则进入步骤S23;
S23:判断待检验地表水网单元是否为河渠,若是则进入步骤S24,否则进入步骤S27;
S24:判断待检验河渠是否给下游的地表水网单元分水,若是则进入步骤S26,否则进入步骤S25;
S25:判断待检验河渠的分水方式是否采用预设分水比例,若是则进入步骤S26,否则进入步骤S27;
S26:检查分水汇流关系,确定分水汇流关系无误;
S27:判断待检验地表水网单元是否给其他地表水网单元分水,若是则进入步骤S28,否则分水汇流关系无误;
S28:判断步骤S27中的其他地表水网单元的分水量确定方式是否一致,若是则分水汇流关系无误,否则返回步骤S26;
所述步骤S3包括以下子步骤:
S31:依次从树状结构的水网的第一个流域出口到最后一个流域出口搜索叶片单元;
S32:判断待检验地表水网单元是否被确定为叶片单元,若是则进入步骤S36;否则进入步骤S33;
S33:判断待检验地表水网单元的上游地表水网单元是否被确定为叶片单元,若是则进入步骤S34,否则将下一个流域出口作为步骤S31中的第一个流域出口并返回步骤S31;
S34:判断待检验地表水网单元是否从其他地表水网单元分水,若是则进入S35,否则将待检验地表水网单元确定为叶片单元;
S35:若分水单元和待检验地表水网单元在同一层叶片数组中,则利用递归函数更新并再次返回步骤S33;若分水单元和待检验地表水网单元不在同一层叶片数组中,则将待检验地表水网单元确定为叶片单元,并进入步骤S36;
S36:判断步骤S31-S35的搜索叶片单元次数是否小于等于地表水网单元个数,若是则进入步骤S37,否则检查分水汇流关系的一致性并再次搜索叶片单元;
S37:判断叶片单元个数是否等于地表水网单元个数,若是则完成叶片单元搜索,否则检查分水汇流关系的一致性并再次搜索叶片单元;
所述步骤S4中,进行汇流并行的方法为:利用OpenMP并行方法按照叶片单元的层级顺序循环完成分水汇流的水量计算。
2.根据权利要求1所述的基于逐层叶片单元识别的河网汇流与分水并行计算方法,其特征在于,所述步骤S26中,检查分水汇流关系的具体方法为:检验分水关系和汇流关系中的编号是否正确,若正确则分水汇流关系一致,否则修改其编号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110731694.6A CN113449404B (zh) | 2021-06-29 | 2021-06-29 | 基于逐层叶片单元识别的河网汇流与分水并行计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110731694.6A CN113449404B (zh) | 2021-06-29 | 2021-06-29 | 基于逐层叶片单元识别的河网汇流与分水并行计算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113449404A CN113449404A (zh) | 2021-09-28 |
CN113449404B true CN113449404B (zh) | 2024-06-07 |
Family
ID=77814218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110731694.6A Active CN113449404B (zh) | 2021-06-29 | 2021-06-29 | 基于逐层叶片单元识别的河网汇流与分水并行计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113449404B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567634A (zh) * | 2011-12-23 | 2012-07-11 | 中国水利水电科学研究院 | 一种基于水循环的地下水数值仿真方法 |
CN102915227A (zh) * | 2012-09-03 | 2013-02-06 | 南京师范大学 | 面向大区域流域提取的并行方法 |
CN103092572A (zh) * | 2013-01-11 | 2013-05-08 | 中国科学院地理科学与资源研究所 | 一种集群环境下分布式水文模拟的并行化方法 |
CN103236086A (zh) * | 2013-04-24 | 2013-08-07 | 武汉大学 | 一种顾及地表水文上下文的多尺度dem建模方法 |
CN108269199A (zh) * | 2017-12-25 | 2018-07-10 | 河海大学 | 一种面向对象的小水库群时空分布式出流计算方法 |
CN108765190A (zh) * | 2018-05-18 | 2018-11-06 | 北京科技大学 | 一种面向大规模并行且适合河网多级嵌套的河网数据表达方法 |
CN109472072A (zh) * | 2018-10-30 | 2019-03-15 | 中国水利水电科学研究院 | 基于河流模拟的季节性河流与地下水间相互作用预测方法 |
CN109753362A (zh) * | 2019-01-14 | 2019-05-14 | 中国水利水电科学研究院 | 一种分布式水文模型的汇流并行调度方法 |
CN109902366A (zh) * | 2019-02-14 | 2019-06-18 | 中国水利水电科学研究院 | 一种分布式水文模型汇流并行方法 |
CN110717251A (zh) * | 2019-09-19 | 2020-01-21 | 中国水利水电科学研究院 | 一种考虑多要素的分布式水文模型子流域划分方法 |
CN110796731A (zh) * | 2018-07-25 | 2020-02-14 | 中国水利水电科学研究院 | 一种河道网格演算次序编码方法 |
CN112948123A (zh) * | 2021-03-26 | 2021-06-11 | 河海大学 | 一种基于Spark的网格水文模型分布式计算方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7104319B2 (en) * | 2001-10-24 | 2006-09-12 | Shell Oil Company | In situ thermal processing of a heavy oil diatomite formation |
GB2476501B (en) * | 2009-12-24 | 2012-07-18 | Richard John Edward Aras | Geodesic massively-parallel supercomputer |
-
2021
- 2021-06-29 CN CN202110731694.6A patent/CN113449404B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567634A (zh) * | 2011-12-23 | 2012-07-11 | 中国水利水电科学研究院 | 一种基于水循环的地下水数值仿真方法 |
CN102915227A (zh) * | 2012-09-03 | 2013-02-06 | 南京师范大学 | 面向大区域流域提取的并行方法 |
CN103092572A (zh) * | 2013-01-11 | 2013-05-08 | 中国科学院地理科学与资源研究所 | 一种集群环境下分布式水文模拟的并行化方法 |
CN103236086A (zh) * | 2013-04-24 | 2013-08-07 | 武汉大学 | 一种顾及地表水文上下文的多尺度dem建模方法 |
CN108269199A (zh) * | 2017-12-25 | 2018-07-10 | 河海大学 | 一种面向对象的小水库群时空分布式出流计算方法 |
CN108765190A (zh) * | 2018-05-18 | 2018-11-06 | 北京科技大学 | 一种面向大规模并行且适合河网多级嵌套的河网数据表达方法 |
CN110796731A (zh) * | 2018-07-25 | 2020-02-14 | 中国水利水电科学研究院 | 一种河道网格演算次序编码方法 |
CN109472072A (zh) * | 2018-10-30 | 2019-03-15 | 中国水利水电科学研究院 | 基于河流模拟的季节性河流与地下水间相互作用预测方法 |
CN109753362A (zh) * | 2019-01-14 | 2019-05-14 | 中国水利水电科学研究院 | 一种分布式水文模型的汇流并行调度方法 |
CN109902366A (zh) * | 2019-02-14 | 2019-06-18 | 中国水利水电科学研究院 | 一种分布式水文模型汇流并行方法 |
CN110717251A (zh) * | 2019-09-19 | 2020-01-21 | 中国水利水电科学研究院 | 一种考虑多要素的分布式水文模型子流域划分方法 |
CN112948123A (zh) * | 2021-03-26 | 2021-06-11 | 河海大学 | 一种基于Spark的网格水文模型分布式计算方法 |
Non-Patent Citations (2)
Title |
---|
依据汇流累积量分析的河网分级算法;黄萌萌;徐柱;梁启学;李灿;刘明;;测绘科学;20180418(第11期);92-96+117 * |
分布式水文模型时空离散化并行计算方法研究;秦泽宁;周祖昊;刘明堂;向东;刘佳嘉;;人民黄河;20200831(第08期);15-20 * |
Also Published As
Publication number | Publication date |
---|---|
CN113449404A (zh) | 2021-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102902512B (zh) | 一种基于多线程编程及消息队列的多线程并行处理方法 | |
CN103049245B (zh) | 一种基于中央处理器cpu多核平台的软件性能优化方法 | |
CN108268278A (zh) | 具有可配置空间加速器的处理器、方法和*** | |
CN103607466B (zh) | 一种基于云计算的广域多级分布式并行电网分析方法 | |
CN103617150A (zh) | 一种基于gpu的大规模电力***潮流并行计算***及其方法 | |
CN107015852A (zh) | 一种大规模梯级水电站群多核并行优化调度方法 | |
CN103116493B (zh) | 一种应用于粗粒度可重构阵列的自动映射方法 | |
CN101799762A (zh) | 面向遥感图像处理算法的快速并行化编程模板方法 | |
CN103226487A (zh) | 面向异构众核多级存储结构的数据分布与局部性优化方法 | |
CN101989192A (zh) | 一种程序自动并行化的方法 | |
CN103164190A (zh) | 一种全分布式流域生态水文模型的快速并行化方法 | |
CN106373030A (zh) | 一种流域梯级水电站优化调度的方法及装置 | |
CN111860867B (zh) | 一种混合异构***的模型训练方法、***及相关装置 | |
Xu et al. | Optimizing finite volume method solvers on Nvidia GPUs | |
Liao et al. | Multicore parallel dynamic programming algorithm for short-term hydro-unit load dispatching of huge hydropower stations serving multiple power grids | |
CN113449404B (zh) | 基于逐层叶片单元识别的河网汇流与分水并行计算方法 | |
CN101930566B (zh) | 基于平行***的水利实验模拟***及实验模拟方法 | |
CN111225034B (zh) | 基于WebService的水环境安全调控模型动态集成方法和组件 | |
CN101561833B (zh) | 专用指令集处理器的设计方法 | |
CN101727513A (zh) | 一种超长指令字处理器的设计和优化方法 | |
Wang et al. | A study of hybrid parallel genetic algorithm model | |
Liu et al. | Parallel implementation and optimization of regional ocean modeling system (ROMS) based on sunway SW26010 many-core processor | |
CN101446898B (zh) | 一种通过函数编程模型支持大规模分布式并行计算的方法 | |
CN109740889B (zh) | 山地流域水系生态过程与水电梯级开发的耦合分析*** | |
CN106528052A (zh) | 一种基于分布式功能单元的微处理器架构 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |