论文部分内容阅读
随着复杂类型油藏(低渗、高含水、复杂岩性油藏等)开发的日益深入和提高采收率技术的推广使用,油藏数值模拟所依据的数学模型变得越来越复杂,同时油藏地质模型趋向精细化、网格复杂化、井数增加以及类型多样化等,这些因素导致渗流模型数值离散所形成的雅克比线性代数方程组的规模大、性态坏。在全隐式油藏数值模拟计算中,雅克比线性代数方程组的求解是一个主要瓶颈,其求解时间往往占据整个模拟计算时间的70%~80%,而且随着问题规模增大,该比重会进一步提高。设计高效的数值求解算法来提高雅克比线性代数方程组的求解速度是缩短数值模拟时间最有效的途径之一。另外当前计算机的硬件架构越来越异构化,利用众核处理器(如GPU、MIC)来协助CPU计算的解决方案在科学计算领域正释放巨大的能量,并掀起一股新的高性能异构并行计算浪潮。本文针对经典标准黑油模型,为其全隐式离散得到的雅克比线性代数方程组设计高效的串、并行求解算法。首先,针对黑油模型的强耦合雅克比离散代数方程组,我们分析几种常用解耦方法,如交错块分解解耦、拟隐压显饱解耦、隐压显饱解耦,并分别考察这几种方法的解耦效果以及对压力方程椭圆性的影响。我们发现:交错块分解解耦方法能很好地削弱压力变量和饱和度变量以及饱和度变量和饱和度变量之间的耦合关系,同时对雅克比矩阵的特征值有很好的聚集作用,但该方法破坏了压力方程的椭圆性,使压力方程求解难度增加;拟隐压显饱解耦和隐压显饱解耦方法借助IMPES方法的思想,通过代数方法得到一个椭圆性较好的压力方程,但该解耦方法只削弱了压力方程中压力变量与饱和度变量的耦合程度。针对上述三种解耦方法得到的压力方程,本文分别比较了经典AMG方法、VMB聚集AMG方法以及Pairwise聚集AMG方法的求解速度,并简单分析上述三种AMG方法在求解经不同解耦方法得到的压力方程时收敛速度差异大的原因。经上述分析,我们将隐压显饱解耦方法与经典CPR预条件子结合起来形成一类分裂型预条件子,并用Pairwise聚集AMG方法取代经典AMG方法来求解压力方程,此分裂型预条件子的求解速度较交错块分解解耦方法与经典CPR预条件子组成的分裂型预条件子快了近50%。其次,由于当前油藏模拟向精细化发展,雅克比矩阵规模突破千万量级且性态越趋病态,给雅克比线性代数方程组的求解带来了极大困难,研发针对精细油藏模拟带来的超大规模雅克比线性代数系统的高效、稳健求解算法是十分必要的。本文利用交错块分解解耦方法具有聚集雅克比矩阵特征值以及削弱物理变量间耦合关系的性质,基于辅助空间校正思想,提出了一种稳健、高效、节省内存的分裂型预条件子。该分裂型预条件子采用交错块分解解耦方法作为左预条件子,然后针对交错块分解方法解耦后的雅克比矩阵的性质,设计了一种多阶段辅助子空间右预条件子BASP:首先在饱和度子空间用块高斯赛德尔方法对饱和度方程进行一次近似求解,消除饱和度部分的高频误差部分;其次针对带强间断系数的椭圆型压力方程,我们采用AMG预条件Krylov方法来近似求解达到一定精度,消除由压力方程控制的低频误差;最后在全空间做一次块高斯赛德尔磨光。通过大量油田实例测试,该分裂型预条件子整体表现得十分高效及稳健。基于该预条件子的模拟器的求解速度比国际主流商业模拟器快2到3倍,且在台式工作站上成功模拟了千万网格规模的精细油藏模型。最后,本文基于CPU-GPU异构体系设计一种求解雅克比线性代数方程组的高效并行线性解法器。当前超级计算机的计算能力越来越强大,但体系结构日趋复杂,大多数采用多核、众核处理器、大型高速缓存、高带宽进程间通信结构和高速I/O功能的设计模式。如何构建现代化高性能应用软件来充分利用计算机的异构架构特点和资源是十分值得探索的。本文针对油藏模拟中的雅克比矩阵的结构特点,提出了一种适合GPU访存特点的BHYB的稀疏存储格式,基于该格式的SpMV的加速比最高达19倍,比世界著名的Nvidia公司研发的高效CuSparse软件包最快的HYB格式快30%;其次基于GPU的SIMT编程模拟,本文提出了一种双密集型并行策略,设计了一种并行度高、并行可扩展性好的BILU(l)方法,其中BILU(0)分解阶段和三角求解阶段的平均加速比分别达到6.27倍和9.46倍;最后结合计算机的异构特点以及AMG算法各部分的可并行度,设计了一种异构并行UA AMG方法,且该并行UA AMG方法没有损失串行UA AMG方法的收敛速度。通过整合上述并行模块,我们形成了一种基于CPU-GPU异构体系的并行BCPRP预条件子。数值试验表明该并行预条件子十分稳健,相比改进后的串行BCPRP预条件算法,该并行BCPRP预条件子在单GPU卡上的求解速度提高了 3.0倍左右。此外,基于"天河二号"超级计算机,我们研发了一套分布式并行求解算法,将模拟规模扩展到亿量级网格单元的同时,也极大提高了油藏模拟效率。该分布式并行求解器在千核以内都具有良好的可扩展性,但扩展到10,008个CPU物理核心后,分布式并行求解器的强可扩展性还不够理想,线性求解器算法还有待进一步优化。