初探 CFD:Taichi 能用来做计算流体力学吗?
时间:2022-10-08 23:13:50 阅读:104
流体的模拟仿真在影视特效,虚拟现实,工业设计中都有广泛的应用。研究如何精确模拟还原流体行为的学科,称为计算流体力学(Computational Fluid Dynamics)或者简称为CFD。
影视作品《海洋奇缘》中的海浪流体仿真
随着Taichi社区中CFD相关的优秀项目越来越多,也有很多吃瓜的同学产生了这样的疑问:
Taichi不是专门为图形学设计的语言吗?Taichi可不可以被用来做高性能计算?Taichi可以用来写计算流体力学的程序吗?作为“用Taichi开始的计算流体力学”系列博客的第一篇,本文就尝试解答一下上述疑问。
01流体数值计算对计算语言的需求
在回答Taichi能否用来做流体数值计算之前,我们先要回答:所谓的计算流体力学到底是一种什么样的计算?通常来说,流体力学的仿真计算会包含如下步骤:
这其中,最耗费计算时间的无疑是流场的求解部分,同时这也是Taichi语言最擅长并行加速的部分。在前处理中,我们需要建立保存流场信息(例如速度分量U和V,压力P,密度等等)的数据结构(通常是2维或者3维的数组),并对它们的数值进行初始化。
在求解步骤中,首先我们往往需要将描述流场流动的方程——纳维-斯托克斯(Navier-Stokes)方程中的微分项进行离散化处理,用离散数值的代数多项式来近似微分项。比如对一个标量施加拉普拉斯算子的运算往往可以用网格上五点的离散格式来近似:
接下来,我们需要将离散化的方程进行求解。此时,我们面对的往往是一个的线性系统,根据矩阵的大小和稠密程度,我们可以选择直接求解法或者迭代求解法来求得未知向量。这里我们注意到,不论是微分项的离散,还是线性系统的求解,往往包含了对目标场上大量元素执行类似且互相独立的计算操作:这种运算模式是非常适合并行加速的。后面我们会具体看看在代码中怎么用taichi来实现这种加速。
最后,在后处理中,我们需要将前面求得的流场数据进行可视化处理,变成更加易于读取的矢量图,梯度图等等。比如,下图是一个将顶盖驱动流的流场中速度矢量用Matplotlib进行可视化的例子。这个部分可视化的工作既可以利用Taichi自带的GUI完成,也可以根据需要借助一些现有的其他可视化工具。taichi https://taichi-lang.cn/
影视作品《海洋奇缘》中的海浪流体仿真
随着Taichi社区中CFD相关的优秀项目越来越多,也有很多吃瓜的同学产生了这样的疑问:
Taichi不是专门为图形学设计的语言吗?Taichi可不可以被用来做高性能计算?Taichi可以用来写计算流体力学的程序吗?作为“用Taichi开始的计算流体力学”系列博客的第一篇,本文就尝试解答一下上述疑问。
01流体数值计算对计算语言的需求
在回答Taichi能否用来做流体数值计算之前,我们先要回答:所谓的计算流体力学到底是一种什么样的计算?通常来说,流体力学的仿真计算会包含如下步骤:
这其中,最耗费计算时间的无疑是流场的求解部分,同时这也是Taichi语言最擅长并行加速的部分。在前处理中,我们需要建立保存流场信息(例如速度分量U和V,压力P,密度等等)的数据结构(通常是2维或者3维的数组),并对它们的数值进行初始化。
在求解步骤中,首先我们往往需要将描述流场流动的方程——纳维-斯托克斯(Navier-Stokes)方程中的微分项进行离散化处理,用离散数值的代数多项式来近似微分项。比如对一个标量施加拉普拉斯算子的运算往往可以用网格上五点的离散格式来近似:
接下来,我们需要将离散化的方程进行求解。此时,我们面对的往往是一个的线性系统,根据矩阵的大小和稠密程度,我们可以选择直接求解法或者迭代求解法来求得未知向量。这里我们注意到,不论是微分项的离散,还是线性系统的求解,往往包含了对目标场上大量元素执行类似且互相独立的计算操作:这种运算模式是非常适合并行加速的。后面我们会具体看看在代码中怎么用taichi来实现这种加速。
最后,在后处理中,我们需要将前面求得的流场数据进行可视化处理,变成更加易于读取的矢量图,梯度图等等。比如,下图是一个将顶盖驱动流的流场中速度矢量用Matplotlib进行可视化的例子。这个部分可视化的工作既可以利用Taichi自带的GUI完成,也可以根据需要借助一些现有的其他可视化工具。taichi https://taichi-lang.cn/
郑重声明:文章内容来自互联网,纯属作者个人观点,仅供参考,并不代表本站立场 ,版权归原作者所有!
相关推荐