蒋运华,龚 喜,王 凯
(中山大学 海洋工程与技术学院,广东 广州 510275)
“计算流体力学”是海洋工程与技术等众多工科类专业的核心课程。它是20世纪60年代随着计算机技术和数值计算算法发展而迅速发展起来的一门流体力学的分支学科[1-3]。目前,随着计算机技术和数值计算算法的发展,计算流体力学已经成为研究流体流动问题的三个有效手段之一,即理论研究、实验研究和数值计算。而流体的流动问题广泛存在于海洋工程与技术、航空宇航科学与技术、兵器科学与技术、核科学与技术、力学、机械工程、材料科学与工程、动力工程及工程热物理、土木工程、水利工程、环境科学与工程、石油与天然气工程、化学工程与技术、生物医学工程等工科类学科[2-5]。因此,大多数工科专业都要求学生能够利用所学的流体力学知识,分析解决所在专业领域相关流体力学问题[2]。而流体力学的核心控制方程NS方程,只有在极其简化条件下才有理论解,因此,很难在理论上获得各种复杂问题的理论解。现阶段,研究流动问题的实验手段,主要包括各种水洞、水槽、水箱、水池、风洞实验等。这些实验手段能够很好地模拟各种实际的复杂流动,但是要想模拟得更加准确,需要耗费大量的资金,而较小尺度的实验又存在边界效应、尺度效应等问题。计算流体力学作为流体力学的研究手段之一,主要通过有限差分、有限体积方法离散NS方程进行数值求解。随着计算机技术的发展,计算流体力学已经从求解雷诺应力平均的湍流数值模拟逐步发展到大涡模拟,再到目前的小规模网格的直接数值模拟,即直接求解NS方程。可以预见,未来大规模网格的直接数值模拟会得到广泛的发展与应用。因此,计算流体力学技术必然成为流体力学研究的重要手段之一,从而也必将成为众多工科类专业学生必须要掌握的核心专业课程。
由于“计算流体力学”课程需要学生掌握大量的数值计算方法理论(如要求学生掌握流体力学控制方程的基本形式及相对应的物理意义,理解有限差分方法、有限体积方法,掌握线性方程的求解方法,掌握网格的生成原理的方程变换等),还要求学生利用所学的各种计算流体力学理论进行数值程序的求解,并对数值计算的数据进行输出、处理和分析,因此,“计算流体力学”课程是一门理论与实践相结合的课程,对学生和教师都提出了很高的要求。而目前,“计算流体力学”课程教学主要是首先通过教师课堂讲授计算流体力学涉及的各种理论,然后利用一些主流大型的计算流体力学软件,如Fluent、CFX、OpenFOAM进行数值方法算列讲解验证[6-8]。这种教学模式存在两个问题:一方面,大量的“计算流体力学”理论教学依旧是“灌输式”,学生很难在短时间内接受有限差分、有限体积、格式精度等众多对数学知识要求较高的理论问题;另一方面,采用如Fluent、CFX、OpenFOAM进行数值方法算列讲解验证,由于这些软件除了OpenFOAM是开源代码(但是代码冗长),其他都是封装软件,很难让初学“计算流体力学”课程的学生对所学的“计算流体力学”理论与实际计算完全结合理解。同时需要注意的是,这些大型的计算流体力学软件都属于国外相关公司,存在被禁用的风险。因此,目前的“计算流体力学”教学很难培养出掌握计算流体力学核心思想理论并能自行编写计算流体力学计算代码的核心创新人才。而由于Fluent、CFX、OpenFOAM等大型国外软件在各个工科内行业的广泛使用,未来我国在计算流体力学计算程序自主研发的道路上存在“卡脖子”问题[3]。所以,我们亟须改变目前的教学模式,要尽快培养出能够开发自主计算流体力学软件的核心创新人才。
结合前期在“计算流体力学”方面的教学和科学研究成果,将课题组现有的计算流体力学代码进行整合开发一个开源的“计算流体力学”教学平台,并将其用于实际的“计算流体力学”教学过程中。如在讲授有限差分法或各种精度的格式时,可以直接调用开源计算流体力学的计算代码,这样在教学过程中,学生很容易掌握有限差分法或各种精度的格式和在具体编写计算流体力学代码时的使用方法,具有良好的互动教学效果。同时,通过开源的“计算流体力学”教学平台,学生能够真实感受到方程被离散开来用计算机进行加减计算,使“计算流体力学”教学更加具体,不仅会激发学生浓厚的学习兴趣,而且会使学生对计算流体力学理论和实践程序编写留下深刻印象,吸引学生加入计算流体力学开源平台的开发中。经过这样的教学,这些学生未来如果从事计算流体力学相关行业,将具备解决实际工作中的流动问题的能力[4]。因此,自编开源“计算流体力学”教学平台可有效解决“计算流体力学”理论与实践教学脱钩,以及教学导致的只会使用国外商业封装软件的问题。
于2021年春季和秋季学期,在2018级海洋工程与技术专业本科和力学学术型硕士“计算流体力学”课程中应用自编开源的“计算流体力学”教学平台。课程成绩主要包括平时课堂学习情况(15%)、编写的数值计算程序(20%)和期末闭卷考试成绩(65%),其中平时课堂学习情况中课堂学习占总成绩的5%,平时作业占总成绩的10%。教学过程和教学考核都强调了实际编写计算程序的能力培养。作为开始实践主要应用了两个例子进行说明,一是自编不同格式求解激波相遇问题,二是自编准一维喷管流动的数值解用于“计算流体力学”教学过程。具体来说,第一个问题是使用Fortran语言,采用Godunov和Roe格式求解激波相遇问题并进行比较。在网格较密的情况下,两种格式均能够很好地描述激波相遇问题,得到管内各个区域的流动。其中Godunov格式采用Riemann方法构造界面值,与Roe格式的Rou平均方法相比,具有更高的精度,求解的结果能很好地验证这一理论。通过这一问题的求解,可以让学生直观掌握不同差分格式的求解过程及精度问题,同时吸引学生加入教学平台的开发中,实现界面程序的编写。对于第二个问题,使用Fortran语言,采用MacCormack方法求解准一维喷管流动的数值解并与精确解进行比较研究,同时编写了相应的界面,方便展示,结果见图1所示。
通过这一个教学学年的思考和在教学过程中的具体实践,经过与学生的交流,激发了学生学习“计算流体力学”的学习兴趣,帮助学生理解有限差分方法、有限体积方法、线性方程的求解方法、网格的生成原理的方程变换等。在课程结束时,每一位学生都积极参与具体数值计算程序的编写,且每一位学生都尝试寻找自己感兴趣的问题,使用自己熟悉的语言,从方程的离散到数值计算程序的编写和调试,真实地提高了实际解决问题的能力。同时学生编写的程序,经过整理,未来可以用于该课程的教学平台,达到了良好互动,既培养了学生,又促进了教学的改革。其中一个教学班级编写的代码情况见图2。
图2 2021春季学期本科生编写考核程序列表
由于“计算流体力学”课程在工科核心人才培养中的重要性,以及该课程理论与实践结合的特殊性质,众多学者对教学方法进行了有益的改革尝试。目前,该课程的教学问题依旧存在,而自编程的开源教学平台可以有效解决CFD理论复杂、教学不直观,以及使用商业软件存在看不到源代码和被禁用风险等问题,为我国培养自主CFD核心创新人才提供一种有效的教学方法。
今后“计算流体力学”课程的持续建设计划主要包括以下几个方面:(1)加强课程教学课件建设,提高课件的质量;(2)加强课程思政建设,思考如何将课程思政与专业教学结合;(3)持续开展课程教学软件建设,提高课程教学软件的质量;(4)开展教学资源共享建设,推进课程课件、教学软件共享推广。该改革和尝试仍要进一步挖掘课程思政元素,提高课件质量,改善教学软件的接口,实现软件共享及通用,提高可编写和可接入的能力。
针对“计算流体力学”在海洋工程技术及相关工科专业的教学特点,思考目前“计算流体力学”课程教学存在的理论教学难度大、学生理解困难等问题。尝试将自编的教学程序应用于实际的“计算流体力学”教学中,经过一个学年在本科和硕士研究生中的教学实践,自编开源的“计算流体力学”教学平台激发了学生学习“计算流体力学”的兴趣,也帮助和加深了学生理解有限差分方法、有限体积方法、线性方程的求解方法、网格的生成原理的方程变换等。在课程结束时,每一位学生都积极参与具体数值计算程序的编写,同时学生编写的程序,经过整理,未来可以用于该课程的教学平台,从而达到良好互动。本研究可为相关工科类“计算流体力学”教学提供一定的参考。