计算流体力学仿真程序并行化方法研究
发布时间:2020-07-27 07:18
【摘要】:计算流体力学(Computational Fluid Dynamics,CFD)采用数值计算方法针对复杂流动问题进行求解以发现各种流动的现象和规律,已经广泛应用在航空、航空、气象等领域。格子Boltzmann方法(Lattice Boltzmann Method,LBM)是CFD求解的典型数值计算方法,拥有天然的数据并行性、边界处理简单、稳定性高等优点,但是随着网格规模的扩大,使用LBM方法进行求解出现了执行时间过长的问题,同时在高性能计算机快速发展的今天,如何使LBM方法能够在高性能集群上有不错的性能,是本领域研究的热点。本文主要对计算流体力学中的LBM方法的并行化方法进行研究,论文通过对LBM方法的分析,包括对LBM计算过程以及可并行化进行分析,结合现有的成熟并行框架,针对LBM求解随着网格规模的增大在单机上串行执行时间过长的问题,提出了基于OpenMP的LBM并行化方法,缩短了 LBM方法在单个机器上的执行时间;针对LBM方法在高性能集群上的扩展问题,通过对计算网格进行划分,利用MPI进行计算通信,提出了基于MPI的LBM并行化方法;针对纯MPI并行方法在集群上出现的通信代价过高、执行效率过低的问题,提出了两种混合编程模型,并根据混合编程模型提出了基于MPI+OpenMP的LBM并行化方法,充分利用了集群的特性,有良好的性能;针对混合编程中存在的OpenMP使用过多导致线程创建和销毁和MPI通信过长导致计算时间变长的问题,提出了改进的基于MPI+OpenMP的LBM并行化方法,经过实验发现改进后的方法降低了运行的时间。
【学位授予单位】:哈尔滨工程大学
【学位级别】:硕士
【学位授予年份】:2018
【分类号】:O35
【图文】:
3.速度边界逡逑速度边界指的是流体当中的网格粒子运动到边界位置时候的速度保持不发生变化。逡逑如图2.4所示,假设网格粒子向上迁移运动的过程中,到达上边界的横向、纵向速度分逡逑别是w逦,然而此时的/4,/7,/8是未知的,无法通过正常的迁移得到。由p邋=邋和逡逑厂《邋=邋;^>,/;得到。逦^逡逑fi,邋+/7邋+/8邋=邋P ̄(f0邋+邋f\+f2邋+邋fi+邋f4+邋fs邋+邋fb)逦(2-18)逡逑=邋(,+邋?/;邋+邋/8)邋—邋(/3邋+邋/6邋+邋/7)逦(2-19)逡逑P1^邋 ̄邋if2邋+邋fs邋+邋fb) ̄邋(/a邋+邋/?邋+邋/?)逦(2-20)逡逑并且假设:逡逑A-f:'=f2-f2q逦(2-21)逡逑15逡逑
逦0逦虚拟流体逡逑图2.3反弹边界处理示意图逡逑3.速度边界逡逑速度边界指的是流体当中的网格粒子运动到边界位置时候的速度保持不发生变化。逡逑如图2.4所示,假设网格粒子向上迁移运动的过程中,到达上边界的横向、纵向速度分逡逑别是w逦,然而此时的/4,/7,/8是未知的,无法通过正常的迁移得到。由p邋=邋和逡逑厂《邋=邋;^>,/;得到。逦^逡逑fi,邋+/7邋+/8邋=邋P ̄(f0邋+邋f\+f2邋+邋fi+邋f4+邋fs邋+邋fb)逦(2-18)逡逑=邋(,+邋?/;邋+邋/8)邋—邋(/3邋+邋/6邋+邋/7)逦(2-19)逡逑P1^邋 ̄邋if2邋+邋fs邋+邋fb) ̄邋(/a邋+邋/?邋+邋/?)逦(2-20)逡逑并且假设:逡逑A-f:'=f2-f2q逦(2-21)逡逑15逡逑
主要是对每个网格节点的速度、密度进行赋值,同时,计算出每个网格节点的平衡态分逡逑布函数作为该网格节点的分布函数。初始化需要使用OpenMP编译指导语句,将初始化逡逑过程同时使用多个线程进行执行,从而加快了初始化过程的速度,如图3.1为LBM初逡逑始化并行计算示意图。逦逦邋逦逡逑.初始化并计兑分布函数逦J逡逑 ̄M逦迭代块0逦M线z0逡逑初始化并计算分介函数邋J逡逑逦邋Fnr ̄k逦迭代块丨逦1逦一逦.丨oin邋逦逡逑变量声明一妼嚣——逦逦^数据同步逡逑^初始化并计兑分布函数邋」,.Pf?逡逑 ̄*逦迭代块2逦线fa2逦—逡逑t初始化并计算分布函数邋J逡逑 ̄*1逦迭代块3逦线桂3逡逑图3.1邋LBM初始化并行计算示意图逡逑在并行任务执行开始的时候,将LBM初始化的循环任务分解成为W个迭代块,并逡逑将这W个迭代块分配到不同处理器核上进行并行执行。逡逑基于OpenMP的LBM初始化算法的描述见算法3.2:逡逑算法3.2:基于OpenMP的LBM初始化算法逡逑(1)逦#邋pragma邋omp邋parallel邋reduction邋{逡逑(2)逦size邋<—邋omp邋_邋get邋_邋num邋_邋threads^);逡逑(3)逦lid,邋<—邋omp_邋get邋_邋thread邋_邋num0;逡逑(4)逦#邋pragma邋omp邋for邋schedule{dynamic)逡逑(5)逦For邋/<-0邋to邋NX邋/*邋为x方向的格子数*/逡逑(6)逦尸…y<-o邋/0邋TVF邋/*7Vr为少方向的格子数*/逡逑(7)逦u[邋i]邋[j邋]邋[=e邋];逦/*"[/][./][0]为坐标为/
本文编号:2771527
【学位授予单位】:哈尔滨工程大学
【学位级别】:硕士
【学位授予年份】:2018
【分类号】:O35
【图文】:
3.速度边界逡逑速度边界指的是流体当中的网格粒子运动到边界位置时候的速度保持不发生变化。逡逑如图2.4所示,假设网格粒子向上迁移运动的过程中,到达上边界的横向、纵向速度分逡逑别是w逦,然而此时的/4,/7,/8是未知的,无法通过正常的迁移得到。由p邋=邋和逡逑厂《邋=邋;^>,/;得到。逦^逡逑fi,邋+/7邋+/8邋=邋P ̄(f0邋+邋f\+f2邋+邋fi+邋f4+邋fs邋+邋fb)逦(2-18)逡逑=邋(,+邋?/;邋+邋/8)邋—邋(/3邋+邋/6邋+邋/7)逦(2-19)逡逑P1^邋 ̄邋if2邋+邋fs邋+邋fb) ̄邋(/a邋+邋/?邋+邋/?)逦(2-20)逡逑并且假设:逡逑A-f:'=f2-f2q逦(2-21)逡逑15逡逑
逦0逦虚拟流体逡逑图2.3反弹边界处理示意图逡逑3.速度边界逡逑速度边界指的是流体当中的网格粒子运动到边界位置时候的速度保持不发生变化。逡逑如图2.4所示,假设网格粒子向上迁移运动的过程中,到达上边界的横向、纵向速度分逡逑别是w逦,然而此时的/4,/7,/8是未知的,无法通过正常的迁移得到。由p邋=邋和逡逑厂《邋=邋;^>,/;得到。逦^逡逑fi,邋+/7邋+/8邋=邋P ̄(f0邋+邋f\+f2邋+邋fi+邋f4+邋fs邋+邋fb)逦(2-18)逡逑=邋(,+邋?/;邋+邋/8)邋—邋(/3邋+邋/6邋+邋/7)逦(2-19)逡逑P1^邋 ̄邋if2邋+邋fs邋+邋fb) ̄邋(/a邋+邋/?邋+邋/?)逦(2-20)逡逑并且假设:逡逑A-f:'=f2-f2q逦(2-21)逡逑15逡逑
主要是对每个网格节点的速度、密度进行赋值,同时,计算出每个网格节点的平衡态分逡逑布函数作为该网格节点的分布函数。初始化需要使用OpenMP编译指导语句,将初始化逡逑过程同时使用多个线程进行执行,从而加快了初始化过程的速度,如图3.1为LBM初逡逑始化并行计算示意图。逦逦邋逦逡逑.初始化并计兑分布函数逦J逡逑 ̄M逦迭代块0逦M线z0逡逑初始化并计算分介函数邋J逡逑逦邋Fnr ̄k逦迭代块丨逦1逦一逦.丨oin邋逦逡逑变量声明一妼嚣——逦逦^数据同步逡逑^初始化并计兑分布函数邋」,.Pf?逡逑 ̄*逦迭代块2逦线fa2逦—逡逑t初始化并计算分布函数邋J逡逑 ̄*1逦迭代块3逦线桂3逡逑图3.1邋LBM初始化并行计算示意图逡逑在并行任务执行开始的时候,将LBM初始化的循环任务分解成为W个迭代块,并逡逑将这W个迭代块分配到不同处理器核上进行并行执行。逡逑基于OpenMP的LBM初始化算法的描述见算法3.2:逡逑算法3.2:基于OpenMP的LBM初始化算法逡逑(1)逦#邋pragma邋omp邋parallel邋reduction邋{逡逑(2)逦size邋<—邋omp邋_邋get邋_邋num邋_邋threads^);逡逑(3)逦lid,邋<—邋omp_邋get邋_邋thread邋_邋num0;逡逑(4)逦#邋pragma邋omp邋for邋schedule{dynamic)逡逑(5)逦For邋/<-0邋to邋NX邋/*邋为x方向的格子数*/逡逑(6)逦尸…y<-o邋/0邋TVF邋/*7Vr为少方向的格子数*/逡逑(7)逦u[邋i]邋[j邋]邋[=e邋];逦/*"[/][./][0]为坐标为/
【参考文献】
相关期刊论文 前2条
1 王勇献;张理论;车永刚;徐传福;刘巍;程兴华;;结构网格CFD应用程序在天河超级计算机上的高效并行与优化[J];电子学报;2015年01期
2 陈国良;孙广中;徐云;吕敏;;并行算法研究方法学[J];计算机学报;2008年09期
本文编号:2771527
本文链接:https://www.wllwen.com/kejilunwen/lxlw/2771527.html