吾生有涯 学海无涯
析模有界 知识无界

【Python-CFD】01:说明

研究生课程《计算流体力学》又开课了,今年决定使用网络上广泛流行的12 steps to Navier-Stokes作为数值算法入门教程。

以前的CFD课程要么光讲理论,要么光讲软件应用,很少结合代码来讲,今年决定改一改。CFD嘛,毕竟是和计算机打交道,还是要懂点儿程序的。这个模块比较适合用于CFD小白的算法入门,借助这套模块教程,可以了解CFD中的离散、迭代、收敛性、稳定性等概念。

之所以选用Python作为算法描述语言,主要是因为Python够简单,学习者不至于被计算机语言所累,从而忽略了算法。

1 模块简介

CFD Python,也就是12 steps to Navier-Stokes,是一个学习计算流体动力学基础的实用模块,通过编制计算机程序求解描述流体流动物理的基本偏微分方程。该模块是波士顿大学机械工程系Lorena Barba教授2009年至2013年期间所教授课程的一部分(Barba教授后来搬到乔治华盛顿大学)。

该模块项目地址:

https://github.com/barbagroup/CFDPython


该模块假设学习者只有基本的编程知识(任何语言)和一些偏微分方程和流体力学的背景。

这些“步骤”的灵感来自于里约热内卢Yokota博士的想法,他在Barba教授的实验室做博士后研究,直到2011年,Barba教授和她的学生在CFD课程的几个学期中对课程进行了改进。2013年,我们编写了这套Jupyter笔记本,在阿根廷门多萨教授为期两天的密集课程。

通过这些步骤(不跳过任何步骤!)指导学生,他们学习了许多有价值的课程。练习的渐进性意味着他们在每次作业结束时都能获得成就感,而且他们觉得自己学习起来很轻松。随着他们的进步,他们自然地练习代码重用,并且逐渐地学习编程和绘图技术。当他们分析结果时,他们能够了解数值扩散、精度和收敛性。在大约4周的定期课程中,他们会成为中等熟练的程序员,并有动力开始讨论更多的理论问题。

2 摘要

CFD Python学习模块是一组Jupyter笔记本,由12个核心课程、3个额外课程以及一个Python数值计算的简短介绍课程组成。

该课程模块通过12个步骤来介绍CFD程序设计,在课程结束时,利用有限差分法编程求解二维Navier-Stokes方程。

这些步骤包括:

  • 步骤1-4为一维:(I)具有阶跃函数初始条件(IC)和适当边界条件(BC)的线性对流;具有相同的IC/BC的及具有锯齿IC和周期BC的:(II)非线性对流,(III)仅扩散;(IV)Burgers方程。

  • 步骤5-10为二维:(V)具有平方函数IC和适当BC的线性对流;相同的IC/BC的:(VI)非线性对流,(VII)仅扩散;(VIII)Burgers方程;(IX)具有零IC和Neumann和Dirichlet BC的Laplace方程;(X)二维Poisson方程。

  • 步骤11-12在2D中求解Navier-Stokes方程:(Xi)空腔流动;(Xii)沟道流动.

指导学生完成这些步骤(不跳过任何步骤),他们学到了许多有价值的课程。

练习的递增性意味着他们在每次作业结束时都会有成就感。随着他们的进步,他们自然地练习代码重用,并逐渐学习编程和绘图技术。当他们分析计算结果时,能够了解数值扩散,准确性和收敛性的概念。大约经过四个星期后,他们能够成为中等水平的程序员,并有动力开始讨论更深层次的理论问题。

3 说明

许多大学课程的计算流体力学(CFD)遵循类似的顺序的主题。正如各种教科书所反映的那样,这门课程通常从插值开始,接着是常微分方程的数值积分,然后是关于偏微分方程的标准材料。学生们在学习过程中遇到了稳定性理论、收敛性理论和数值扩散理论,但他们往往没有获得太多的编程经验。

本学习单元强调实践经验。编程可以表示流体行为的基本数学模型的解。它独特的方法是以一步的方式让初学者完成一个相当复杂的数值问题的解:利用有限差分离散求解二维腔流Navier-Stokes方程。

12 steps to Navier-Stokes课程已经证明是有效的。他们连续四年在课堂上被用作大学课程的一部分(波士顿大学,2009年至2013年),指导几十名学生开发他们的Navier-Stokes解决方案。该模块是作为一套jupyter笔记本编写的。

该模块是完整的,可以很容易地被其他希望使用实用方法教授CFD的教官采用。教师可以通过简短的演示、课堂讨论和阅读来补充课程。例如,在前两个步骤中,学生实验了不同的参数值后,由于数值不稳定,当解发生爆炸时,他们会遇到一些情况。当他们对这种行为感到困惑时,教师可以使用关于Courant-Friedrichs-Lewy(CFL)稳定性标准的“额外”课程,并以关于一致性、稳定性和收敛性的简短讲座作为补充。

我们知道,世界各地的教师已经采纳了这些教训:他们中的许多人写信给我们表达感激之情(或提出改进建议)。该模块于2015年由一名志愿者(Fran Navarro)翻译成了西班牙文,另一个用户(Manuel Ramsaier)用Matlab版本制作了视频,新加坡的一位教授(克劳斯-迪特尔·奥尔)将这些课程纳入了他的CFD课程。巴尔巴离开波士顿大学后,接过CFD课程的讲师继续使用该模块。她写道:“这12个步骤对于构建学生的计算工具箱、建立她对数值方法的理解以及为验证完整的CFD模拟提供一些基准解决方案都是很棒的。我在每年的研究生CFD课程的开始几个星期使用这12个步骤,为他们进一步分析和使用现有的CFD工具奠定了良好的基础。“(Sheryl Grace教授,2018)

在类似CFD-Online网站上的帖子中,也经常提到这些经验教训。模块的一部分被翻译成使用Devito包(一种基于SymPy的有限差分代码生成工具),并作为它们的一部分教程。可以在网上找到将这些课程翻译成其他编程语言的各种译文。

4 教学设计的几点注记

根据作者在开发“cfd Python”学习模块和遵循类似方法的其他模块后的经验,我们采用了以下基本设计模式来创建课程:

  • 把它分解成小的步骤

  • 将小步骤分成更多的步骤

  • 增加叙述和连接

  • 链接到文档

  • 充满挑战的问题/任务

  • 公开在线发布

END


本篇文章来源于微信公众号: CFD之道

赞(13) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《【Python-CFD】01:说明》
文章链接:https://www.topcfd.cn/5684/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册