发明名称 一种用于地球系统模式的并行耦合方法
摘要 本发明涉及一种用于地球系统模式的并行耦合方法,属于地球系统模式的耦合技术领域。该方法分为三个阶段:1.基于子区域映射关系的耦合初始阶段,该阶段通过对已有的耦合初始阶段运行流程进行改动,生成基于插值算法的动态剖分和并行路由,用于并行通信和并行插值;2.基于子区域映射的耦合运行阶段,该阶段通过对已有的耦合运行阶段并行通信和并行插值的运行流程进行相应改动来实现;3.耦合结束阶段,该阶段采用已有方法。本发明方法基于子区域映射,将耦合器的并行通信与并行插值进行联合考虑,用于消除耦合器并行插值过程中的通信操作,从而减少整个系统的通信次数。该方法应用于耦合器中,旨在提升地球系统模式的耦合性能。
申请公布号 CN102707932B 申请公布日期 2013.07.24
申请号 CN201210152947.5 申请日期 2012.05.16
申请人 清华大学 发明人 季颖生;王姝;何健;杨广文
分类号 G06F9/38(2006.01)I;G06F9/54(2006.01)I 主分类号 G06F9/38(2006.01)I
代理机构 北京清亦华知识产权代理事务所(普通合伙) 11201 代理人 廖元秋
主权项 一种用于地球系统模式的并行耦合方法,其特征在于,该方法分为三个阶段:基于子区域映射关系的耦合初始阶段,基于子区域映射的耦合运行阶段;以及耦合结束阶段;1)设分量模式A和分量模式B进行耦合,分量模式A基于网格A,分量模式B基于网格B;耦合物理量数据从分量模式A流向分量模式B,分量模式A发送耦合物理量数据,分量模式B接收耦合物理量数据,然后分量模式B执行并行插值计算,将网格A上的耦合物理量数据插值到网格B上,网格A为源网格,网格B为目标网格;基于子区域映射关系的耦合初始阶段,具体包括以下步骤:步骤1‑1:从namelist文件中读取namelist信息,包含了耦合相关的运行参数及数据文件信息,这部分信息由用户给定;步骤1‑2:根据通信配置中的通信信息初始化MPI通信域,包括地球系统模式的全局通信域和分量模式A和B的局部通信域,通信配置信息由用户给定;步骤1‑3:初始化静态剖分:根据剖分配置中的并行剖分配置信息初始化静态剖分,其中分量模式A基于网格A和分量模式B基于网格B的并行剖分由分量模式自身提供,通过调用耦合器提供的初始化接口函数进行参数导入,分量模式B基于网格A的并行剖分由用户在剖分配置中给定剖分方式,在剖分初始化过程中调用相应的剖分算法生成,该步骤中的并行剖分为静态剖分;步骤1‑4:初始化剖分前网格:分量模式的进程从网格配置中包含的网格数据文件中读取完整的网格信息,该网格信息为剖分前网格;步骤1‑5:初始化插值算法:分量模式B的进程将基于网格B的静态剖分作为目标网格单元集合搜索插值配置中包含的插值系数文件,获取对应的插值权重系数,构成插值权重矩阵;步骤1‑6:生成动态剖分:分量模式B的进程将基于网格B的静态剖分作为目标网格单元集合搜索相应的插值权重矩阵,得到网格A的网格单元集合,然后根据基于网格A的静态剖分,求出不在该进程上的网格单元集合作为子区域信息,将子区域信息和基于网格A的静态剖分保存在一起,建立新的并行剖分,该并行剖分为动态剖分,采用该操作流程生成的动态剖分记为同一种剖分类型;步骤1‑7:将动态剖分和静态剖分进行合并,统一为并行剖分:首先建立一个并行剖分链表,然后在并行剖分对象中搜索相同网格名的静态剖分和动态剖分,再在结果中搜索相同剖分类型的动态剖分对象,最终的搜索结果存在三种情况:情况一,如果仅包含一个静态剖分,则将其加入到并行剖分链表中;情况二,如果包含一个静态剖分和一个动态剖 分,则将动态剖分加入到并行剖分链表中;情况三,如果包含一个静态剖分和两个以上的动态剖分,则首先合并动态剖分的子区域信息,将合并后的子区域信息与静态剖分保存在一起,建立新的并行剖分,将其加入到并行剖分链表中,最后释放所有未加入到并行剖分链表中的动态剖分和静态剖分的内存空间;步骤1‑8:分量模式A和分量模式B根据并行路由配置和合并后的并行剖分初始化并行路由,在并行路由配置中描述了分量模式A和分量模式B需要建立进程间的通信映射关系,根据不同类型的并行剖分建立相应的并行路由,具体操作为:首先,分量模式A的进程与分量模式B的进程两两握手,交换基于网格A的并行剖分,每个进程将自身基于网格A的并行剖分与通过交换得到的对方完整的并行剖分进行求交,确定进程所负责网格单元在对方分量模式的哪个进程上,建立起通信映射关系;步骤1‑9:初始化剖分后网格:根据合并后的并行剖分的网格单元索引号从剖分前网格中获取并行剖分所包含的网格单元信息,申请内存空间保存这部分网格单元信息,建立剖分后网格,最后释放保存剖分前网格的内存空间;步骤1‑10:初始化数据缓冲区:根据耦合物理量基本信息初始化耦合物理量命名空间,根据合并后的并行剖分的网格单元数来申请相应大小的内存空间用于管理耦合物理量数据的数据缓冲区;基于子区域映射的耦合运行阶段,具体包括以下步骤:步骤2‑1:首先,两个分量模式执行并行通信,分量模式A的进程根据并行路由将耦合物理量数据从数据缓冲区中取出并打包,发送给分量模式B,分量模式B的进程接收分量模式A发送的数据包;步骤2‑2:然后分量模式B的进程根据并行路由进行解包,将数据复制到数据缓冲区的对应位置上;步骤2‑3:完成并行通信后,分量模式B的进程直接进行插值计算,不再执行MPI通信来收集数据;耦合结束阶段,分量模式通过调用耦合器提供的结束接口函数去释放耦合相关的内存空间,结束MPI通信收尾工作;2)设分量模式A和分量模式B进行耦合,分量模式A基于网格A,分量模式B基于网格B;耦合物理量数据从分量模式B流向分量模式A,分量模式B执行并行插值计算,将网格B上的耦合物理量数据插值到网格A上,网格B为源网格,网格A为目标网格,然后分量模式B发送耦合物理量数据,分量模式A接收耦合物理量数据;基于子区域映射关系的耦合初始阶段,具体包括以下步骤:步骤1‑1:从namelist文件中读取namelist信息,包含了耦合相关的运行参数及数 据文件信息,这部分信息由用户给定;步骤1‑2:根据通信配置中的通信信息初始化MPI通信域,包括地球系统模式的全局通信域和分量模式A和B的局部通信域,通信配置信息由用户给定;步骤1‑3:初始化静态剖分:根据剖分配置中的并行剖分配置信息初始化静态剖分,其中分量模式A基于网格A和分量模式B基于网格B的并行剖分由分量模式自身提供,通过调用耦合器提供的初始化接口函数进行参数导入,分量模式B基于网格A的并行剖分由用户在剖分配置中给定剖分方式,在剖分初始化过程中调用相应的剖分算法生成,该步骤中的并行剖分为静态剖分;步骤1‑4:初始化剖分前网格:分量模式的进程从网格配置中包含的网格数据文件中读取完整的网格信息,该网格信息为剖分前网格;步骤1‑5:初始化插值算法:分量模式B的进程将基于网格B的静态剖分作为源网格单元集合搜索插值配置中包含的插值系数文件,获取对应的插值权重系数,构成插值权重矩阵;步骤1‑6:生成动态剖分:分量模式B的进程将基于网格B的静态剖分作为源网格单元集合搜索相应的插值权重矩阵,得到网格A的网格单元集合,然后根据基于网格A的静态剖分,求出不在该进程上的网格单元集合作为子区域信息,将子区域信息和基于网格A的静态剖分保存在一起,建立新的并行剖分,该并行剖分为动态剖分,采用该操作流程生成的动态剖分记为同一种剖分类型;步骤1‑7:将动态剖分和静态剖分进行合并,统一为并行剖分:首先建立一个并行剖分链表,然后在并行剖分对象中搜索相同网格名的静态剖分和动态剖分,再在结果中搜索相同剖分类型的动态剖分对象,最终的搜索结果存在三种情况:情况一,如果仅包含一个静态剖分,则将其加入到并行剖分链表中;情况二,如果包含一个静态剖分和一个动态剖分,则将动态剖分加入到并行剖分链表中;情况三,如果包含一个静态剖分和两个以上的动态剖分,则首先合并动态剖分的子区域信息,将合并后的子区域信息与静态剖分保存在一起,建立新的并行剖分,将其加入到并行剖分链表中,最后释放所有未加入到并行剖分链表中的动态剖分和静态剖分的内存空间;步骤1‑8:分量模式A和分量模式B根据并行路由配置和合并后的并行剖分初始化并行路由,在并行路由配置中描述了分量模式A和分量模式B需要建立进程间的通信映射关系,根据不同类型的并行剖分建立相应的并行路由,具体操作为:首先,分量模式A的进程与分量模式B的进程两两握手,交换基于网格A的并行剖分,每个进程将自身基于网格A的并行剖分与通过交换得到的对方完整的并行剖分进行求交,确定进程所负责网格单元在对方分量模式的哪个进程上,建立起通信映射关系;步骤1‑9:初始化剖分后网格:根据合并后的并行剖分的网格单元索引号从剖分前网格中获取并行剖分所包含的网格单元信息,申请内存空间保存这部分网格单元信息,建立剖分后网格,最后释放保存剖分前网格的内存空间;步骤1‑10:初始化数据缓冲区:根据耦合物理量基本信息初始化耦合物理量命名空间,根据合并后的并行剖分的网格单元数来申请相应大小的内存空间用于管理耦合物理量数据的数据缓冲区;基于子区域映射的耦合运行阶段,具体包括以下步骤:步骤2‑1:首先,分量模式B的进程直接进行并行插值计算,不再执行MPI通信来收集数据,将插值计算结果存放到数据缓冲区中;由于没有执行通信,部分源网格单元上的耦合物理量数据在其它进程上进行了计算,所以这里插值计算所得为不完全结果;步骤2‑2:两个分量模式执行并行通信,分量模式B的进程根据并行路由将耦合物理量数据从数据缓冲区中取出并打包,发送给分量模式A,分量模式A的进程接收分量模式B发送的数据包;步骤2‑3:分量模式A的进程根据并行路由进行解包,由于插值计算所得为部分计算结果,需要将分量模式B的不同进程发送来的相同网格单元上的耦合物理量数据进行合并,分量模式A的进程首先将保存这部分耦合物理量数据的数据缓冲区置0,然后根据并行路由将耦合物理量数据加到数据缓冲区对应的位置上;耦合结束阶段,分量模式通过调用耦合器提供的结束接口函数去释放耦合相关的内存空间,结束MPI通信收尾工作。
地址 100084 北京市海淀区清华园1号