论文部分内容阅读
随着CFD的发展,尤其是高阶精度格式的应用以及模拟问题的复杂性和精细程度的不断提高,CFD模拟对时间推进方法计算效率的要求越来越高,对并行计算的需求也日益强烈。传统隐式时间推进方法的左手项Jacobian矩阵采用低阶近似,这会导致高阶精度格式中的左右手项格式精度不匹配,进而影响CFD时间推进过程的稳定性和收敛性。JFNK算法是Krylov子空间方法与非精确Newton法的结合,采用无矩阵思想,只计算Jacobian矩阵与矢量的乘积,从而有效避免Jacobian矩阵的计算和存储,能够有效提高迭代收敛效率。预条件能够有效改善线性系统的特性,减少时间步迭代的收敛步数,提高时间推进方法的收敛效率。LU-SGS算法作为一种高效的预条件,也被广泛应用于包括JFNK算法在内的迭代算法中。但是由于LU-SGS算法内在串行的特性,使得其在共享存储平台上的并行计算性能受到限制。本文基于自主高阶精度CFD程序HOSTA,设计并实现了带LU-SGS预条件的JFNK算法,有效提高了高精度CFD模拟的计算效率;在天河二号超级计算机上,实现并优化了高精度CFD程序的大规模并行计算;同时优化了强数据依赖的LU-SGS算法在共享存储计算平台上的并行计算性能。主要工作有如下三个方面:(1)基于自主开发的真实复杂结构网格高精度CFD程序,设计并实现了JFNK算法,采用定常低速圆柱绕流测试算例,对比分析了JFNK算法和传统隐式方法的迭代稳定性和收敛性。结果表明,相对传统隐式方法而言,预条件的JFNK算法在计算中能够取到更大的CFL数,同时获得收敛解的墙钟时间开销也降低一半,说明其具有更好的计算稳定性和更高的迭代收敛效率。(2)在天河2号超级计算机上,实现并优化了基于JFNK算法的高精度CFD程序的大规模MPI并行计算,并做了扩展性的测试和分析。结果表明,JFNK算法和LU-SGS算法都具有良好的强并行可扩展性,扩展到64进程(16个节点,每个节点运行4个进程)时,程序的并行效率仍保持在85%以上。(3)深入分析了LU-SGS算法的强数据依赖性,给出了实现共享存储并行的对角-超平面法和流水线法。在Xeon、FT1500A和MIC上对流水线法进行测试分析。设计了两层流水线法,建立了性能模型,对性能模型进行了理论分析,并与实际结果进行了对比分析。结果表明,流水线法的计算效率要高于对角-超平面法,流水线法在Xeon和FT1500A平台上具有良好的线程扩展性,两层流水线法相对于流水线法有一定的性能提升。