1.本发明属于水文过程模拟技术领域,具体涉及一种基于物理模型的水文过程串并耦合动态模拟方法。
背景技术:2.水文模拟,是采用物理水文模型对流域发生的水文过程进行模拟,例如,模拟一次暴雨的整个水文过程;其中,整个水文过程包括:降水过程、植被截留过程、土壤下渗过程、降水填洼过程、产流过程和汇流过程等。
3.物理水文模型进行水文过程模拟时,需要考虑流域的空间差异性和水文过程的时间特性。空间分布上,将流域离散为像元阵列,每个像元的水文数据各不相同,包括:降雨强度不同,下渗率不同,水深和流量等都不同。因此,在模拟流域一次暴雨过程时,从降雨开始,每个时间步长模拟流域像元阵列上每个像元位置的降雨量、截溜量、下渗量、产流量、汇流量等。
4.因此,物理水文模型可以模拟整个流域的详细水文过程。在物理水文模型进行水文过程模拟时,以时间步长为迭代周期,对流域的水文要素(流量、流速和水深等)进行迭代模拟,通常以秒为单位,下一个时间步长的模拟以上一个时间步长的数据为基础进行,因此存在时空上的依赖性。
5.现有物理水文模型进行水文过程模拟时,由于时空依赖性,多采用串行模拟方法,需要重复迭代多次,具有水文过程模拟效率低的问题。
技术实现要素:6.针对现有技术存在的缺陷,本发明提供一种基于物理模型的水文过程串并耦合动态模拟方法,可有效解决上述问题。
7.本发明采用的技术方案如下:
8.本发明提供一种基于物理模型的水文过程串并耦合动态模拟方法,包括以下步骤:
9.步骤1,对被研究流域的dem数据进行水文分析,提取得到多个子流域;根据多个子流域的汇流过程,将具有空间依赖关系的多个子流域合并,得到一个主河网子流域,表示为:wm;对于剩余的不具有空间依赖关系的子流域,作为外层子流域,假设共有n个外层子流域,表示为:w1,w2,
…
,wn;
10.步骤2,预估外层子流域w1,w2,
…
,wn的运算时间,分别为:s1,s2,
…
,sn,假设s1《s3《
…
《s
n-1
《sn《
…
《s4《s2;
11.预估主河网子流域wm的运算时间为sm;
12.设参与模拟运算的处理器总数为p个,表示为:处理器c1,c2,
…
,c
p
;p《n;
13.步骤3,n个外层子流域w1,w2,
…
,wn以及主河网子流域wm均进行状态标注;其中:标注的状态包括:未分配处理器状态、某个时间步长模拟进行中状态和某个时间步长模拟完
成状态;
14.初始时,标注的状态均为:未分配处理器状态;
15.步骤4,进行第1个时间步长的水文过程模拟:
16.步骤4.1,根据n个外层子流域的运算时间,将n个外层子流域,按运算时间从小到大的顺序,加入外层子流域队列;按从外层子流域队列头部到尾部的顺序,依次为:w1,w3,
…
,w
n-1
,wn,
…
,w4,w2;
17.步骤4.2,从外层子流域队列的头部,依次读取p个外层子流域,即:w1,w3,
…
,w
p
;将外层子流域w1,w3,
…
,w
p
,分别分配给处理器c1,c2,
…
,c
p
,使处理器c1,c2,
…
,c
p
,分别对读取的p个外层子流域进行第1个时间步长的并行水文过程模拟;
18.对于读取的p个外层子流域,当被分配处理器进行第1个时间步长的水文过程模拟时,将其状态均标注为:第1个时间步长模拟进行中状态;
19.步骤4.3,对于任意处理器ci,i=1,2,
…
,p,当完成对步骤4.2所分配的外层子流域的第1个时间步长的水文过程模拟时,将完成第1个时间步长的水文过程模拟的外层子流域的状态标注为:第1个时间步长模拟完成状态;同时,处理器ci空闲;
20.当出现空闲的处理器ci时,判断外层子流域队列中是否存在状态为未分配处理器状态的外层子流域,如果有,则在当前未分配处理器状态的外层子流域中,选择运算时间最长的外层子流域,并分配给处理器ci进行第1个时间步长的水文过程模拟,同时将所选择的外层子流域的状态标注为:第1个时间步长模拟进行中状态;
21.如果没有,执行步骤4.4;
22.步骤4.4,表明当前的n个外层子流域,不存在未分配处理器状态的外层子流域;
23.对于出现空闲的处理器ci,判断当前n个外层子流域中,是否存在第1个时间步长模拟进行中状态的外层子流域,如果存在,则立即执行步骤5;如果不存在,表明自身是最后一个完成对n个外层子流域进行第1个时间步长模拟的处理器,执行步骤4.5;
24.步骤4.5,将主河网子流域wm分配给处理器ci,由处理器ci对主河网子流域wm进行第1个时间步长的水文过程模拟,当模拟结束时,表明完成对n个外层子流域和1个主河网子流域的第1个时间步长的水文过程模拟,即:第1个时间步长的水文过程模拟全部结束;
25.对于处理器ci,转为空闲状态,执行步骤5;
26.步骤5,令j=2;
27.步骤6,进行第j个时间步长的水文过程模拟:
28.步骤6.1,判断是否存在状态为第j-1个时间步长模拟完成状态的外层子流域,如果有,则执行步骤6.2;如果没有,进一步判断是否存在状态为第j个时间步长模拟进行中状态的外层子流域,如果有,表明自身不是最后一个完成对n个外层子流域进行第j个时间步长模拟的处理器,则执行步骤7;否则,表明自身是最后一个完成对n个外层子流域进行第j个时间步长模拟的处理器,执行步骤6.3;
29.步骤6.2,更新外层子流域队列,仅将状态为第j-1个时间步长模拟完成状态的外层子流域加入队列,并按运算时间进行排序;其中,按从队头到队尾方向,外层子流域的运算时间逐渐增加;
30.在更新后的外层子流域队列中,选择运算时间最长的外层子流域,表示为:外层子流域wk,其中,k=1,2,
…
,n,将外层子流域wk分配给处理器ci,由处理器ci对外层子流域wk进
行第j个时间步长的水文过程模拟,并将外层子流域wk状态标注为:第j个时间步长模拟进行中状态;当处理器ci完成对外层子流域wk的第j个时间步长的水文过程模拟时,将外层子流域wk的状态标注为:第j个时间步长模拟完成状态;同时,处理器ci空闲;返回执行步骤6.1;
31.步骤6.3,将主河网子流域wm分配给处理器ci,由处理器ci对主河网子流域wm进行第j个时间步长的水文过程模拟,当模拟结束时,表明完成对n个外层子流域和1个主河网子流域的第j个时间步长的水文过程模拟,即:第j个时间步长的水文过程模拟全部结束;
32.对于处理器ci,转为空闲状态,执行步骤7;
33.步骤7,判断当前第j个时间步长是否为最后一个时间步长;如果不是,则令j=j+1,返回执行步骤6;如果是,则使处理器ci保持空闲状态,直到所有处理器均为空闲状态时,结束流程。
34.优选的,还包括:
35.建立共享数据表;对于每个外层子流域w1,w2,
…
,wn和主河网子流域wm,记录其每个时间步长的模拟结果;
36.对于任意外层子流域wa,a=1,2,
…
,n,当需要对外层子流域wa进行当前时间步长的模拟时,通过读取共享数据表,获得外层子流域wa上一个时间步长的模拟结果,并以该模拟结果为输入,对外层子流域wa进行当前时间步长的模拟;
37.当需要对主河网子流域wm进行当前时间步长的模拟时,通过读取共享数据表,获得主河网子流域wm上一个时间步长的模拟结果,同时,获得n个外层子流域在当前时间步长的模拟结果,然后,以主河网子流域wm上一个时间步长的模拟结果和n个外层子流域在当前时间步长的模拟结果为输入,对主河网子流域wm进行当前时间步长的模拟。
38.本发明提供的一种基于物理模型的水文过程串并耦合动态模拟方法具有以下优点:
39.本发明提供一种基于物理模型的水文过程串并耦合动态模拟方法,使用多处理器的硬件并行处理能力,运用计算机的并行技术,实现顾及串联特征的水文过程的并行模拟,有效提高水文过程模拟的效率。
附图说明
40.图1为本发明提供的基于物理模型的水文过程串并耦合动态模拟方法的流程示意图;
41.图2为子流域划分及河网链构成图;
42.图3为基于子流域的串并联关系的流域划分图;
43.图4为外层子流域和汇流子流域的串联关系图;
44.图5为外层子流域队列的示意图;
45.图6为本发明实施例提供的流域的地形数据图;
46.图7为本发明实施例提供的提取的子流域的示意图;
47.图8为本发明实施例提供的重新划分的子流域的示意图;
48.图9为本发明实施例提供的裁剪后的外层子流域的示意图;
49.图10为本发明实施例提供的裁剪后的汇流子流域的示意图;
50.图11为本发明实施例提供的第一次对处理器分配外层子流域的示意图;
51.图12为本发明实施例提供的首先完成模拟的处理器,从队列尾部分配子流域进行模拟的示意图;
52.图13为本发明实施例提供的后续第一个完成模拟的处理器,从队列头分配子流域示意图;
53.图14为本发明实施例提供的第一个时间步长处理器的子流域分配完整示意图;
54.图15为本发明实施例提供的第2个时间步长,处理器的子流域分配开始示意图;
55.图16为本发明实施例提供的第2个时间步长的处理器分配的子流域示意图。
具体实施方式
56.为了使本发明所解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
57.水文过程模拟存在依赖关系,在空间上:上游子流域模拟完成,才能模拟下游子流域;在时间上:上一个时间步长模拟完成,才能模拟下一个时间步长。传统水文模型的并行模拟方法多考虑空间的并行性,即将整个流域划分成多个子流域,对不依赖其他子流域的流域可实现并行模拟。但是,各个子流域的大小不一,模拟运算时间不同,现有水文模型并行模拟时,时间调度考虑不足。此外,物理水文模型的并行不但是空间上的一次模拟,而且需要重复迭代,现有研究没有很好考虑时间步长间的依赖,更没有考虑多处理器在不同时间步长间对各个子流域并行模拟的动态调度问题。
58.综上所述,本发明提供一种基于物理模型的水文过程串并耦合动态模拟方法,使用多处理器的硬件并行处理能力,运用计算机的并行技术,实现顾及串联特征的水文过程的并行模拟,有效提高水文过程模拟的效率。
59.参考图1,本发明提供的基于物理模型的水文过程串并耦合动态模拟方法,包括以下步骤:
60.步骤1,对被研究流域的dem数据进行水文分析,提取得到多个子流域;根据多个子流域的汇流过程,将具有空间依赖关系的多个子流域合并,得到一个主河网子流域,表示为:wm;对于剩余的不具有空间依赖关系的子流域,作为外层子流域,假设共有n个外层子流域,表示为:w1,w2,
…
,wn;
61.步骤2,预估外层子流域w1,w2,
…
,wn的运算时间,分别为:s1,s2,
…
,sn,假设s1《s3《
…
《s
n-1
《sn《
…
《s4《s2;
62.预估主河网子流域wm的运算时间为sm;
63.设参与模拟运算的处理器总数为p个,表示为:处理器c1,c2,
…
,c
p
;p《n;
64.步骤3,n个外层子流域w1,w2,
…
,wn以及主河网子流域wm均进行状态标注;其中:标注的状态包括:未分配处理器状态、某个时间步长模拟进行中状态和某个时间步长模拟完成状态;
65.初始时,标注的状态均为:未分配处理器状态;
66.步骤4,进行第1个时间步长的水文过程模拟:
67.步骤4.1,根据n个外层子流域的运算时间,将n个外层子流域,按运算时间从小到
大的顺序,加入外层子流域队列;按从外层子流域队列头部到尾部的顺序,依次为:w1,w3,
…
,w
n-1
,wn,
…
,w4,w2;
68.步骤4.2,从外层子流域队列的头部,依次读取p个外层子流域,即:w1,w3,
…
,w
p
;将外层子流域w1,w3,
…
,w
p
,分别分配给处理器c1,c2,
…
,c
p
,使处理器c1,c2,
…
,c
p
,分别对读取的p个外层子流域进行第1个时间步长的并行水文过程模拟;
69.对于读取的p个外层子流域,当被分配处理器进行第1个时间步长的水文过程模拟时,将其状态均标注为:第1个时间步长模拟进行中状态;
70.步骤4.3,对于任意处理器ci,i=1,2,
…
,p,当完成对步骤4.2所分配的外层子流域的第1个时间步长的水文过程模拟时,将完成第1个时间步长的水文过程模拟的外层子流域的状态标注为:第1个时间步长模拟完成状态;同时,处理器ci空闲;
71.当出现空闲的处理器ci时,判断外层子流域队列中是否存在状态为未分配处理器状态的外层子流域,如果有,则在当前未分配处理器状态的外层子流域中,选择运算时间最长的外层子流域,并分配给处理器ci进行第1个时间步长的水文过程模拟,同时将所选择的外层子流域的状态标注为:第1个时间步长模拟进行中状态;
72.如果没有,执行步骤4.4;
73.步骤4.4,表明当前的n个外层子流域,不存在未分配处理器状态的外层子流域;
74.对于出现空闲的处理器ci,判断当前n个外层子流域中,是否存在第1个时间步长模拟进行中状态的外层子流域,如果存在,则立即执行步骤5;如果不存在,表明自身是最后一个完成对n个外层子流域进行第1个时间步长模拟的处理器,执行步骤4.5;
75.步骤4.5,将主河网子流域wm分配给处理器ci,由处理器ci对主河网子流域wm进行第1个时间步长的水文过程模拟,当模拟结束时,表明完成对n个外层子流域和1个主河网子流域的第1个时间步长的水文过程模拟,即:第1个时间步长的水文过程模拟全部结束;
76.对于处理器ci,转为空闲状态,执行步骤5;
77.步骤5,令j=2;
78.步骤6,进行第j个时间步长的水文过程模拟:
79.步骤6.1,判断是否存在状态为第j-1个时间步长模拟完成状态的外层子流域,如果有,则执行步骤6.2;如果没有,进一步判断是否存在状态为第j个时间步长模拟进行中状态的外层子流域,如果有,表明自身不是最后一个完成对n个外层子流域进行第j个时间步长模拟的处理器,则执行步骤7;否则,表明自身是最后一个完成对n个外层子流域进行第j个时间步长模拟的处理器,执行步骤6.3;
80.步骤6.2,更新外层子流域队列,仅将状态为第j-1个时间步长模拟完成状态的外层子流域加入队列,并按运算时间进行排序;其中,按从队头到队尾方向,外层子流域的运算时间逐渐增加;
81.在更新后的外层子流域队列中,选择运算时间最长的外层子流域,表示为:外层子流域wk,其中,k=1,2,
…
,n,将外层子流域wk分配给处理器ci,由处理器ci对外层子流域wk进行第j个时间步长的水文过程模拟,并将外层子流域wk状态标注为:第j个时间步长模拟进行中状态;当处理器ci完成对外层子流域wk的第j个时间步长的水文过程模拟时,将外层子流域wk的状态标注为:第j个时间步长模拟完成状态;同时,处理器ci空闲;返回执行步骤6.1;
82.步骤6.3,将主河网子流域wm分配给处理器ci,由处理器ci对主河网子流域wm进行第j个时间步长的水文过程模拟,当模拟结束时,表明完成对n个外层子流域和1个主河网子流域的第j个时间步长的水文过程模拟,即:第j个时间步长的水文过程模拟全部结束;
83.对于处理器ci,转为空闲状态,执行步骤7;
84.步骤7,判断当前第j个时间步长是否为最后一个时间步长;如果不是,则令j=j+1,返回执行步骤6;如果是,则使处理器ci保持空闲状态,直到所有处理器均为空闲状态时,结束流程。
85.本发明实现原理和步骤可描述为:
86.步骤1,子流域提取、合并与分割,确定主河网子流域和外层子流域
87.(1)子流域提取
88.使用gis水文分析工具,对流域dem进行水文分析,提取河网,划分子流域。河网和流域是水文模型的必要输入数据。子流域的划分如图2所示,图2中,虚线代表子流域分水岭,外围的黑色实线是流域范围,同时也是分水岭,分水岭围成的范围就是1个子流域,如w1、w2、w3、w4、w5、...、wn、m1_1、m1_2、m2_1、m2_2、m3_1、m3_2等。图2中,内部实线代表河流,点状符号代表结点,是各个子流域链接的点。如n1_t0表示第1个结点,t0表示时间。
89.(2)子流域合并与分割
90.根据划分的子流域,进行子流域分割,将各个子流域生成独立文件,以便于后面进行并行模拟。
91.为减少子流域之间的依赖,便于并行模拟,将共线的子流域合并,因为共线的子流域在一段线上存在水的交换,不能分开模拟,也就是说,共线的子流域具有空间依赖关系。图2中,子流域m1_1、m1_2、m2_1、m2_2和m3_1、m3_2之间具有公共的河道,公共河道部分接收多个子流域的来水,因此具有公共河道的子流域之间具有空间依赖关系,不能进行并行模拟,因此将m1_1、m1_2、m2_1、m2_2和m3_1、m3_2六个子流域合并为一个整体,命名为主河网子流域m,该主河网子流域对应主要河网的汇流。模拟时,将流域分为w1、w2、w3、w4、w5、...、wn、m,共n+1个子流域,进行裁剪,形成独立的文件,如图3所示。
92.本发明中,说明书描述的标识,例如,w1、w2、w3、w4、w5、...、wn,与说明书附图2-图5中w1、w2、...、wn,代表相同含义。说明书中主河网子流域m,与权利要求书中的主河网子流域wm,代表相同含义。
93.(3)确定各个子流域间的连接关系
94.在流域汇流过程中,存在空间依赖关系,即下游的水流依赖上游来水,因此,在进行水文模拟时,必须先进行上游的汇流模拟,才能进行下游的汇流模拟。确定各个子流域间的空间依赖关系是进行水文并行模拟的关键。
95.各个子流域及结点的关系如表1所示。根据表1,子流域w1~wn,是整个流域的外层子流域,不依赖任何其他流域,因此,可以进行独立模拟,即可以实现这n个子流域的并行模拟,将不依赖任何其他流域的n个子流域,称为外层子流域。
96.表1初始状态时,子流域及子流域结点的特征及依赖关系
[0097][0098][0099]
表1显示了子流域的依赖关系,根据子流域的串并联关系,流域可以划分为:w1~wn和m,共n+1个子流域,如图3和表1所示,子流域m依赖于子流域w1~wn的输出,子流域m为主河网子流域。子流域w1~wn,不具有空间依赖关系,为外层子流域。
[0100]
步骤2,确定物理水文模型模拟整体顺序以及预估子流域的运算时间
[0101]
根据子流域串并联关系,在一个时间步长内的流域模拟关系为:子流域w1~wn并行模拟,并行模拟结束后,将水文模拟结果传递给主河网子流域m,传递点在流域结点处:n1_t0、n1_t0、n2_t0、n3_t0、n4_t0、n5_t0。
[0102]
根据子流域的连接关系,各个子流域的模拟顺序关系如图4所示。首先进行外层子流域w1~wn的并行模拟,模拟完成后,结果传入主河网子流域m,主河网子流域m完成模拟后,这一个时间步长内的水文模拟完成。外层子流域w1~wn整体上与主河网子流域m是串联关系,因此,首先模拟外层子流域w1~wn,然后模拟主河网子流域m。
[0103]
预估外层子流域w1,w2,
…
,wn的运算时间,分别为:s1,s2,
…
,sn,假设s1《s3《
…
《s
n-1
《sn《
…
《s4《s2;
[0104]
预估主河网子流域wm的运算时间为sm;
[0105]
设参与模拟运算的处理器总数为p个,表示为:处理器c1,c2,
…
,c
p
;p《n;
[0106]
步骤3,n个外层子流域w1,w2,
…
,wn以及主河网子流域wm均进行状态标注;其中:标注的状态包括:未分配处理器状态、某个时间步长模拟进行中状态和某个时间步长模拟完成状态;
[0107]
初始时,标注的状态均为:未分配处理器状态;
[0108]
步骤4,进行第1个时间步长的水文过程模拟:
[0109]
子流域通常包括多个,一般大于处理器的个数。对于处理器个数大于子流域个数时,每个子流域的物理水文模型模拟交于各个处理器即可,在此重点说明子流域个数大于处理器个数情况下的并行模拟方法。
[0110]
(一)第一个时间步长时,外层子流域的物理水文模型并行模拟方法
[0111]
根据图4,外层子流域w1~wn,因不存在空间依赖关系,可以并行模拟。外层子流域w1~wn的模拟时间不同,各个外层子流域的模拟时间分别为:s1、s2、s3、s4、s5、sn-1、...和sn。假定s1《s3《
…
《sn-1《sn《
…
《s4《s2。只有外层子流域w1~wn模拟完成后,主河网子流域m才能进行模拟。
[0112]
当处理器个数p小于外层子流域w1~wn个数n时,如何调度处理器对各个外层子流域w1~wn进行多步长模拟,使得并行模拟时间最短是本发明方法主要解决的问题。
[0113]
第一个时间步长时,外层子流域w1~wn分配处理器的策略如下:
[0114]
步骤4.1,首先,使用插入排序法对外层子流域w1~wn的模拟时间进行排序,将排序后的n个外层子流域,按模拟时间从小到大顺序,存入外层子流域中;其中,外层子流域头部的外层子流域的模拟时间最小;
[0115]
步骤4.2,然后,从外层子流域队列头依次读取p个外层子流域(p《n),交于对应的p个处理器(处理器1,处理器2,
…
,处理器p)进行模拟;对于读取的p个外层子流域,当被分配处理器进行第1个时间步长的水文过程模拟时,将其状态均标注为:第1个时间步长模拟进行中状态;
[0116]
步骤4.3,然后,处理器1对头部第一个子流域模拟完成后,如图5所示,处理器1空闲,从外层子流域队列的尾部取读取最后一个外层子流域进行模拟;当处理器2对头部第二个外层子流域模拟完成后,处理器2空闲,再从外层子流域队列的尾取倒数第二个外层子流域进行模拟,依次类推,模拟完成的处理器都从外层子流域队列尾依次向前读取1个外层子流域进行模拟。
[0117]
此方法将模拟耗时最长和最短组合,次长和次短组合,使得组合耗时接近,避免明显长于其他组合耗时存在,使得处理器高效利用。处理器对外层子流域w1~wn的处理如图5所示。
[0118]
(二)第二个时间步长以及之后多个时间步长时,多处理器下的物理水文模型的跨步长重复迭代模拟方法
[0119]
物理水文模型的并行模拟方法涉及外层子流域w1~wn和主河网子流域m的跨步长并行调度。根据外层子流域w1~wn的物理水文模型并行模拟方法,将外层子流域w1~wn交于不同的处理器进行并行模拟,对外层子流域w1~wn进行模拟状态标注,包括:未分配处理器状态、某个时间步长模拟进行中状态和某个时间步长模拟完成状态。
[0120]
处理器的分配策略分为两种:针对外层子流域w1~wn的处理器分配和针对主河网子流域m的处理器分配:
[0121]
①
外层子流域w1~wn的处理器分配策略
[0122]
以第一个时间步长和第二个时间步长为例:
[0123]
在进行第一个时间步长时,只要外层子流域都已经分配处理器,不管其第一个时间步长是否模拟完成,当出现空闲的处理器时,空闲处理器就可以对已经完成第一个时间步长模拟的外层子流域进行下一个时间步长的模拟了,而不必等待主河网子流域m的模拟完成,理由为:外层子流域w1~wn的模拟不依赖主河网子流域m的模拟。对没完成第一个时间步长的外层子流域,不能分配处理器进行下一个时间步长的模拟,因为外层子流域虽然不存在空间上的依赖,但是存在时间上的依赖。因此,进行第二个时间步长模拟前,更新外层子流域队列,仅对已经完成第一个时间步长的外层子流域加入队列,并按时间排序,从队列
尾取外层子流域为其分配空闲的处理器。
[0124]
②
主河网子流域m的处理器分配策略
[0125]
因为,主河网子流域m的模拟需要依赖外层子流域w1~wn的模拟结果,因此,必须所有外层子流域w1~wn在当前时间步长全部标注为当前时间步长模拟完成状态时,才能进行主河网子流域m在当前时间步长的模拟,本发明中,直接分配最后完成当前时间步长外层子流域模拟的处理器负责主河网子流域m的模拟。
[0126]
③
外层子流域w1~wn和主河网子流域m的混合调度策略
[0127]
当主河网子流域m在第一个时间步长的模拟完成时,第一个时间步长的所有子流域模拟任务完成。此时,第二个时间步长的模拟已经开始一段时间,可能有的外层子流域的第二个时间步长的模拟已经完成,有的外层子流域也已经分配处理器。这时,对于完成主河网子流域m在第一个时间步长模拟的处理器也参与分配,对完成第一时间步长的外层子流域模拟的队列进行从尾向前的分配。外层子流域队列是不断更新的,队列中仅仅包括已经完成第一个时间步长模拟的外层子流域。待所有外层子流域第二个时间步长的模拟任务都已分配处理器,空余的处理器,既可进行第三个时间步长的外层子流域的模拟。外层子流域第二个时间步长的模拟完成,既可进行主河网子流域m在第二个时间步长的模拟。
[0128]
总之,处理器的任务分配,分为2类:外层子流域的模拟和主河网子流域的模拟。模拟时,只要外层子流域都已分配处理器(有的当前时间步长模拟完成,有的当前时间步长正在模拟),将最后一个完成当前时间步长模拟的处理器分配给主河网子流域m进行当前时间步长的模拟,空闲的处理器就可以对已经完成当前时间步长模拟的外层子流域进行下一个时间步长的模拟。依次进行时间步长间的并行模拟。
[0129]
总之,本时间步长的外层子流域模拟未完成时,处理器一旦空闲就选择未开始本时间步长模拟的子流域,进行本时间步长的模拟,本时间步长的全部子流域模拟完成时,自动进行下一个时间步长的子流域模拟,因此,处理器一直处于工作状态。由于主河网子流域m的模拟时间和各个外层子流域的模拟时间不同,在最后几个时间步长,会存在个别处理器的空闲,但是对于整个迭代过程来讲,空闲时间非常短,不影响模型模拟效率。
[0130]
(三)物理水文模型参数交换方法
[0131]
本发明中,建立共享数据表;对于每个外层子流域和主河网子流域,记录其每个时间步长的模拟结果,包括:水深、水量、流速、泥沙含量等。
[0132]
因此,对于某个外层子流域a,当需要对外层子流域a进行当前时间步长的模拟时,通过读取共享数据表,获得外层子流域a上个时间步长的模拟结果,并以该模拟结果为输入,对外层子流域a进行当前时间步长的模拟。
[0133]
当需要对主河网子流域m进行当前时间步长的模拟时,通过读取共享数据表,获得主河网子流域m上个时间步长的模拟结果,同时,获得外层子流域w1~wn在当前时间步长的模拟结果,然后,对主河网子流域m进行当前时间步长的模拟。
[0134]
采用共享数据表,可实现数据传递的高效。
[0135]
物理水文模型本身是分布式水文模型,在空间上模拟量很大,加之需要进行几千、几万甚至更多的迭代模拟,物理水文模型的模拟量巨大,效率低下。基于本发明方法,运用多个处理器进行动态调度模拟。对无依赖关系的外层子流域进行当前时间步长的并行模拟,模拟完成后,一个处理器对主河网子流域进行当前时间步长的模拟,其他处理器进行下
一个时间步长的外层子流域的模拟。处理器无闲置,效率高,有效提高物理水文模型的重复迭代模拟效率。
[0136]
下面介绍一个具体实施例:
[0137]
研究背景:
[0138]
应用此暴雨模型模拟一次降雨过程对应的详细的水文过程,包括:降水过程、植被截留过程、土壤下渗过程、降水填洼过程、产流过程和汇流过程。模拟流域内各个时刻各个位置(像元)的水文要素,如:降雨强度、植被截留量、下渗率填洼量、产流量、流量和流速等。当然,包含流域出口处的水文要素。为模拟整个水文过程,需要对物理水文模型进行重复迭代模拟,通常设置步长为1~5秒,根据降雨水文过程的时间,如3小时,则迭代次数为几千次。模型所需数据包括:地形数据、植被覆盖数据、土壤数据、河网数据等,河网数据和子流域数据可以通过地形数据提取。为了对物理水文模型进行高效模拟,引入多处理器并行模拟方法,但是流域水文过程在汇流中存在天然的串联特性,使得在同一个时间步长内,不依赖其他流域汇流的外层子流域可以并行模拟,但是主河网子流域必须在外层子流域模拟完成后,才能模拟。若仅仅进行一个时间步长中的模拟,必然存在外层子流域与主河网子流域的串联模拟问题,即无法实现全部子流域的并行模拟,造成其他多个处理器闲置。但是在进行多个时间步长模拟时,可以实现多处理器的无闲置,实现全部子流域的并行模拟,因为,在一个处理器模拟主河网子流域时,其他处理器可以进行下一个时间步长的其他子流域的模拟,实现处理器的无闲置运行。
[0139]
子流域的划分:
[0140]
通过对该流域的dem数据(如图6所示)进行水文分析,即可提取子流域,如图7所示。根据子流域的汇流过程,将依赖流域合并为一个主河网子流域,其他流域无依赖关系,作为外层子流域,重新划分的子流域如图8所示。对重新采集的子流域进行裁剪,裁剪后的子流域的形状如图9和10所示。裁剪后子流域的依赖关系,模拟耗时和可否直接并行模拟以及汇流等级等特征,如表2所示。
[0141]
表2子流域的特征
[0142]
子流域名称运行时间(秒)依赖关系是否可以并行模拟汇流等级子流域62.43无依赖是1子流域82.47无依赖是1子流域26.23无依赖是1子流域183.84无依赖是1子流域193.72无依赖是1子流域172.70无依赖是1子流域123.44无依赖是1子流域135.57无依赖是1子流域52.51无依赖是1子流域32.86无依赖是1主河网子流域12.0依赖否2
[0143]
流域水文过程动态模拟串并耦合模拟思路如下:
[0144]
根据子流域的模拟耗时,对可并行模拟的外层子流域进行从小到大的排序,如表
所示。优先对外层子流域分配处理器进行水文过程模拟,外层子流域可并行模拟。外层子流域模拟完成后,分配第1个空闲的处理器进行主河网子流域m的模拟,因为主河网子流域m的模拟依赖外层子流域的模拟结果,外层子流域的模拟结果作为主河网子流域m的输入。主河网子流域m模拟完成标志着一个时间步长的水文过程模拟完成。但其他处理器不必等待主河网子流域m在当前时间步长模拟完成,而是直接进入下一个步长的外层子流域的并行模拟。
[0145]
子流域串并耦合模拟中处理器的分配策略如下:
[0146]
首先对子流域进行耗时预估,以便于后续多处理器的准确调度。对可进行并行模拟的外层子流域进行排序,如表3所示,并按从小到大的顺序放入外层子流域队列中。主河网子流域耗时12秒。必须在外层子流域模拟完成后,再进行模拟。
[0147]
表3
[0148]
2.432.472.512.72.863.443.723.845.576.23子流域6子流域8子流域5子流域17子流域3子流域12子流域19子流域18子流域13子流域2
[0149]
具体模拟步骤如下:
[0150]
(1)处理器的数量为3个。优先对可并行模拟的外层子流域分配处理器,从队列头开始分配,外层子流域6、外层子流域8和外层子流域5,分别分配给处理器1、处理器2、处理器3进行第一个时间步长的模拟。
[0151]
图11-图16中,箭头方向指的是时间方向,数字指的是时间,单位为秒。子流域在一个时间段内由顶部标注的处理器完成模拟,如图11中,最左侧子图,处理器1,在0-2.43秒区间,完成外层子流域6在第一个时间步长的模拟。
[0152]
(2)处理器1完成外层子流域6在第一个时间步长的模拟,耗时最短,处理器1空闲,从队列尾取一个外层子流域,即外层子流域2进行第一个时间步长的模拟,即选取耗时最多的外层子流域进行模拟。对已经分配处理器的子流域,用绿色标记。
[0153]
(3)然后,根据图1,处理器2在2.47秒完成对外层子流域8的第一个时间步长的模拟,从队列尾,为其分配未模拟的外层子流域13进行第一个时间步长的模拟。
[0154]
(4)依次类推,依次为完成模拟的处理器分配外层子流域进行第一个时间步长的模拟。分配外层子流域的顺序是:从队列尾部,取未模拟的外层子流域。直至队列中的外层子流域分配完成,然后为最后一个完成第一个时间步长模拟的处理器预留分配主河网子流域m进行第一个时间步长的模块(因为主河网子流域m依赖所有外层子流域的模拟结果,必须等待所有外层子流域第一个时间步长模拟完成)。至此,第一时间步长的外层子流域模拟任务分配完成,但是模拟并未都完成,对主河网子流域m的第一个时间步长的模拟仅是预分配最后一个模拟完成的处理器。
[0155]
(5)虽然,外层子流域仍未全部完成第一个时间步长的模拟,而且,仅对主河网子流域m预分配处理器3进行第一个时间步长的模拟,但是,第一个时间步长的子流域已经完成处理器的分配,有的外层子流域已经完成第一个时间步长的模拟,其不依赖其他子流域,可以进行下一个时间步长的模拟,有的子流域还未完成第一个时间步长的模拟,还不能进行下一个时间步长的模拟,如11.48秒时,如图14,已经为主河网子流域m预分配处理器3进行第一个时间步长的模拟,剩下的处理器1和处理器2可用于分配,在11.48秒时,外层子流域3和外层子流域17,没有完成第一个时间步长的模拟,不能参与第二个时间步长的处理器
分配。因此,对第2个时间步长的外层子流域进行处理器分配时,更新外层子流域处理队列,仅将第一个时间步长模拟完成的外层子流域加入队列,后面每完成一个外层子流域或主河网子流域m的模拟,就更新一次队列,保证当前时间步长模拟完成的子流域按顺序插入队列,未完成的子流域不在队列之中。如图15,处理器2第一个完成每一个时间步长的模拟,可以从队列尾部开始为其分配下一个时间步长的子流域进行模拟。这时分配外层子流域2。
[0156]
(6)根据以上步骤,依次完成队列中子流域的模拟,从队列尾依次向前取,直到外层子流域完成第2个时间步长模拟,再对主河网子流域m进行第2个时间步长模拟。主河网子流域m模拟完成后,即完成第2个时间步长的模拟。
[0157]
由于外层子流域不依赖其他子流域,仅是存在时间依赖,只要该外层子流域完成上一个步长的模拟,即可进行下一个时间步长的模拟,因此,在时间轴上,有的处理器在进行第2个时间步长内某个子流域的模拟,有的处理器在进行另一个已经完成上一个时间步长的子流域的第3个时间步长的模拟。
[0158]
按照以上模拟策略,对每个时间步长进行子流域模拟,如图16,显示了第二个时间步长的完成分配情况。
[0159]
(7)依次,完成上千次的时间步长的迭代,即可完成水文过程的完整模拟。在整个时间步长的迭代过程中,处理器1、2、3一直处于运转状态,直至最后一个时间步长时,所有的外层子流域模拟完成,等待主河流子流域m的模拟,其他处理器有几秒的闲置,基本可以忽略。因此,整个模拟过程,处理器高效运转,实现了物理水文模型跨步长间的高效并行模拟。
[0160]
因此,本发明提供一种基于物理模型的水文过程串并耦合动态模拟方法,使用多处理器的硬件并行处理能力,减少物理水文模型的模拟时间,提高物理水文模型模拟效率。
[0161]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。
技术特征:1.一种基于物理模型的水文过程串并耦合动态模拟方法,其特征在于,包括以下步骤:步骤1,对被研究流域的dem数据进行水文分析,提取得到多个子流域;根据多个子流域的汇流过程,将具有空间依赖关系的多个子流域合并,得到一个主河网子流域,表示为:w
m
;对于剩余的不具有空间依赖关系的子流域,作为外层子流域,假设共有n个外层子流域,表示为:w1,w2,
…
,w
n
;步骤2,预估外层子流域w1,w2,
…
,w
n
的运算时间,分别为:s1,s2,
…
,s
n
,假设s1<s3<
…
<s
n-1
<s
n
<
…
<s4<s2;预估主河网子流域w
m
的运算时间为s
m
;设参与模拟运算的处理器总数为p个,表示为:处理器c1,c2,
…
,c
p
;p<n;步骤3,n个外层子流域w1,w2,
…
,w
n
以及主河网子流域w
m
均进行状态标注;其中:标注的状态包括:未分配处理器状态、某个时间步长模拟进行中状态和某个时间步长模拟完成状态;初始时,标注的状态均为:未分配处理器状态;步骤4,进行第1个时间步长的水文过程模拟:步骤4.1,根据n个外层子流域的运算时间,将n个外层子流域,按运算时间从小到大的顺序,加入外层子流域队列;按从外层子流域队列头部到尾部的顺序,依次为:w1,w3,
…
,w
n-1
,w
n
,
…
,w4,w2;步骤4.2,从外层子流域队列的头部,依次读取p个外层子流域,即:w1,w3,
…
,w
p
;将外层子流域w1,w3,
…
,w
p
,分别分配给处理器c1,c2,
…
,c
p
,使处理器c1,c2,
…
,c
p
,分别对读取的p个外层子流域进行第1个时间步长的并行水文过程模拟;对于读取的p个外层子流域,当被分配处理器进行第1个时间步长的水文过程模拟时,将其状态均标注为:第1个时间步长模拟进行中状态;步骤4.3,对于任意处理器c
i
,i=1,2,
…
,p,当完成对步骤4.2所分配的外层子流域的第1个时间步长的水文过程模拟时,将完成第1个时间步长的水文过程模拟的外层子流域的状态标注为:第1个时间步长模拟完成状态;同时,处理器c
i
空闲;当出现空闲的处理器c
i
时,判断外层子流域队列中是否存在状态为未分配处理器状态的外层子流域,如果有,则在当前未分配处理器状态的外层子流域中,选择运算时间最长的外层子流域,并分配给处理器c
i
进行第1个时间步长的水文过程模拟,同时将所选择的外层子流域的状态标注为:第1个时间步长模拟进行中状态;如果没有,执行步骤4.4;步骤4.4,表明当前的n个外层子流域,不存在未分配处理器状态的外层子流域;对于出现空闲的处理器c
i
,判断当前n个外层子流域中,是否存在第1个时间步长模拟进行中状态的外层子流域,如果存在,则立即执行步骤5;如果不存在,表明自身是最后一个完成对n个外层子流域进行第1个时间步长模拟的处理器,执行步骤4.5;步骤4.5,将主河网子流域w
m
分配给处理器c
i
,由处理器c
i
对主河网子流域w
m
进行第1个时间步长的水文过程模拟,当模拟结束时,表明完成对n个外层子流域和1个主河网子流域的第1个时间步长的水文过程模拟,即:第1个时间步长的水文过程模拟全部结束;对于处理器c
i
,转为空闲状态,执行步骤5;步骤5,令j=2;
步骤6,进行第j个时间步长的水文过程模拟:步骤6.1,判断是否存在状态为第j-1个时间步长模拟完成状态的外层子流域,如果有,则执行步骤6.2;如果没有,进一步判断是否存在状态为第j个时间步长模拟进行中状态的外层子流域,如果有,表明自身不是最后一个完成对n个外层子流域进行第j个时间步长模拟的处理器,则执行步骤7;否则,表明自身是最后一个完成对n个外层子流域进行第j个时间步长模拟的处理器,执行步骤6.3;步骤6.2,更新外层子流域队列,仅将状态为第j-1个时间步长模拟完成状态的外层子流域加入队列,并按运算时间进行排序;其中,按从队头到队尾方向,外层子流域的运算时间逐渐增加;在更新后的外层子流域队列中,选择运算时间最长的外层子流域,表示为:外层子流域w
k
,其中,k=1,2,
…
,n,将外层子流域w
k
分配给处理器c
i
,由处理器c
i
对外层子流域w
k
进行第j个时间步长的水文过程模拟,并将外层子流域w
k
状态标注为:第j个时间步长模拟进行中状态;当处理器c
i
完成对外层子流域w
k
的第j个时间步长的水文过程模拟时,将外层子流域w
k
的状态标注为:第j个时间步长模拟完成状态;同时,处理器c
i
空闲;返回执行步骤6.1;步骤6.3,将主河网子流域w
m
分配给处理器c
i
,由处理器c
i
对主河网子流域w
m
进行第j个时间步长的水文过程模拟,当模拟结束时,表明完成对n个外层子流域和1个主河网子流域的第j个时间步长的水文过程模拟,即:第j个时间步长的水文过程模拟全部结束;对于处理器c
i
,转为空闲状态,执行步骤7;步骤7,判断当前第j个时间步长是否为最后一个时间步长;如果不是,则令j=j+1,返回执行步骤6;如果是,则使处理器c
i
保持空闲状态,直到所有处理器均为空闲状态时,结束流程。2.根据权利要求1所述的一种基于物理模型的水文过程串并耦合动态模拟方法,其特征在于,还包括:建立共享数据表;对于每个外层子流域w1,w2,
…
,w
n
和主河网子流域w
m
,记录其每个时间步长的模拟结果;对于任意外层子流域w
a
,a=1,2,
…
,n,当需要对外层子流域w
a
进行当前时间步长的模拟时,通过读取共享数据表,获得外层子流域w
a
上一个时间步长的模拟结果,并以该模拟结果为输入,对外层子流域w
a
进行当前时间步长的模拟;当需要对主河网子流域w
m
进行当前时间步长的模拟时,通过读取共享数据表,获得主河网子流域w
m
上一个时间步长的模拟结果,同时,获得n个外层子流域在当前时间步长的模拟结果,然后,以主河网子流域w
m
上一个时间步长的模拟结果和n个外层子流域在当前时间步长的模拟结果为输入,对主河网子流域w
m
进行当前时间步长的模拟。
技术总结本发明提供一种基于物理模型的水文过程串并耦合动态模拟方法,包括以下步骤:对被研究流域的DEM数据进行水文分析,提取得到多个子流域;将具有空间依赖关系的多个子流域合并,得到一个主河网子流域;对于剩余的不具有空间依赖关系的子流域,作为外层子流域;对主河网子流域和外层子流域进行状态标注;对外层子流域和主河网子流域进行串并耦合动态模拟。本发明提供一种基于物理模型的水文过程串并耦合动态模拟方法,使用多处理器的硬件并行处理能力,运用计算机的并行技术,实现顾及串联特征的水文过程的并行模拟,有效提高水文过程模拟的效率。模拟的效率。模拟的效率。
技术研发人员:张传才 马艳艳 秦奋 杨康 刘亚静
受保护的技术使用者:洛阳师范学院
技术研发日:2022.03.30
技术公布日:2022/7/5