论文部分内容阅读
基于体积分数的可压缩多相流模型是数值模拟多介质流和多相流问题的一种重要方法,它舍弃了界面变化的细节,只用体积分数的大梯度来间接反映物质界面。这种模型对于分层流、自由表面流、以及流体间有掺混或离析的问题均可以很好的模拟。
本文针对Saurel和Abgrall提出的两速度两压力的七方程可压缩多相流模型,改进了其数值解法并应用于模拟可压缩多介质流动问题。在Saurel等的算子分裂法基础上,本文根据Abgrall提出的多相流系统应满足速度和压力的均匀性不随时间改变的思想,推导了建立在HLLC格式基础上的非守恒项离散格式以及体积分数发展方程的迎风格式。进一步,通过改变分裂步顺序,构造了稳健的结合算子分裂的三阶TVDRunge-Kutta方法。另外,通过特征分解获得了适用于该计算模型的无反射边界条件。在对高密度比高压力比气液两相流的数值算例中可以看到,本文的方法在计算精度和稳健性上都有一定改进效果。
为了大规模问题的高效计算,本文将上述数值方法用CUDA编程模式在多GPU设备上实施并行计算。首先从一个网格点对应一个GPU线程的思想出发,设计合理的数据结构实现GPU全局存储器的高带宽访问,通过原子操作、计数器等手段成功地实现block之间同步,从而保障了在单GPU上的高效数值求解。相对于CPU串行程序,我们的单个GPU运算获得了31倍以上的加速。其次,通过对计算问题进行区域分解,将子区域的计算映射到不同的GPU上进行。在单结点多GPU的服务器上分别采用Pthread线程与MPI进程两种方式进行控制:Pthread控制方式是将一个GPU与一个Pthread线程绑定,线程间通过条件子实现同步,并且利用加锁操作实现共享信息的互斥访问:MPI控制方式中,进程间的同步由MPI的栅栏函数实现,操作相对简单。我们在有8个GPU(FermiC2075)的服务器上的计算结果表明,随着GPU数量的增加,单个GPU的效率会有所降低,但是程序整体的运算速度仍保持线性的增长。