论文部分内容阅读
粒子方法是一类不同于传统连续介质模型的新方法,它通过跟踪粒子系统中的每个粒子的运动轨迹来分析和研究系统的各种性质。系统中的粒子既可以是本来就处于离散状态的颗粒,也可以是人为将连续的流体或固体离散而成的粒子,因此,粒子方法具有很强的灵活性,广泛用于模拟离散粒子系统和流、固体的复杂行为等这些连续介质模型难以处理的问题。由于粒子模拟涉及大量的粒子,其计算量非常大,并行计算技术是目前解决这一难题的自然选择。因此,设计和实现粒子模拟的并行程序和软件是许多从事粒子模拟的研究者非常关注的焦点之一。尽管各种粒子方法的应用背景和物理模型不同,但它们有着许多相似之处,这为设计出相同或相似的数据结构和算法,建立通用的粒子模拟并行软件提供了可能。本论文的研究目标就是在详细分析这种相似性的基础上,采用C++语言面向对象和范型设计的思想,设计一个具有通用性的粒子模拟并行计算平台,为进一步开发更完善的通用软件平台奠定基础。
分析各种粒子方法,从计算模拟的角度看,它们有以下一些相同和相似之处:1)粒子的基本属性相似,它们具有质量、位置、速度等属性,粒子的运动也一般都遵守Newton定律。
2)粒子之间和粒子-边界之间的相互作用主要是近程的,据此可以设计通用的邻近粒子的搜索算法。
3)边界的处理主要是考虑它与粒子之间的碰撞方式,其处理方法步骤非常相似,据此可以设计出相同的函数接口,提高程序的通用性。
4)并行数据通信时,邻近计算区域的进程之间只需彼此交换各自计算区域边界附近的粒子即可,因此,不同类型粒子的并行传递模式和具体的算法步骤也非常相似,可以设计通用的并行数据通信的算法。
根据粒子方法的这些特点,本文设计并实现了粒子模拟并行计算通用平台,平台由如下四部份组成:
1)粒子、边界和它们之间相互作用函数这三种对象形成的相互关联的三个类系列。
每个类系列都各有一个基类,以便各自派生新的子类,实现平台的扩展。平台在三个基类基础上实现的类有:粒子类包括根据拟颗粒模型、分子动力学模型及离散单元模型等物理类型设计的简单粒子模型和由多个简单粒子组成的可以模拟不同形状的复合粒子类(模板)及链状粒子类(模板);边界类包括常见的几何形状规则的边界类(如线、多边形、圆环/圆碟/圆柱),由多个边界组合而成的边界类模板及带有物理属性的类模板;相互作用函数类包括粒子之间相互作用(如硬球相互作用、Lennard-Jones相互作用势等)的函数类及粒子与边界相互作用的函数类(如直接镜面反弹等)。
2)将粒子、边界和它们的相互作用函数等类的对象组织在一起并协调彼此互动的组织管理类模板。
由组织管理类模板可自由组合实现不同粒子模型的模拟程序,同一程序中可以有多种粒子,多种边界及多种相互作用函数的类对象。
3)一些算法通用的函数和类(模板)组成的辅助函数库和类库。辅助函数库和类库的主要功能是实现邻近粒子的搜索、相互作用函数的分派等,包括为粒子建立网格以便确立粒子之间的邻近位置关系、建立邻近粒子对链表及粒子-边界邻近对链表和动态生成各种类对象的对象工厂类模板。
4)并行计算中实现粒子数据交换的并行通信类模板。粒子数据并行通信的类模板基于空间分解和Shift通信模式,对软球粒子模型和硬球粒子模型分别设计。软球粒子模型数据通信的类模板采用了一种自动生成代码的技术,因此能根据需要针对不定数目的粒子类型自动生成粒子数据的并行通信代码。硬球粒子的并行通信因其自身固有的困难,本文只对一维空间分割的情况和只有一种硬球粒子的并行情况进行了设计。
本文最后用了四个模拟实例对并行平台进行了初步检验,结果表明本文提供的通用并行计算平台结构合理,代码的实现正确且具有良好的可复用性和可扩展性,为进一步开发不同需求的粒子模拟并行程序提供了较好的基础,大大减小了程序开发的难度和周期。