CFD×AI | OpenFOAM也能深度学习
随着深度神经⽹络等⼈⼯智能技术的发展,数据驱动的机器学习⽅法逐渐应用于各行各业。人工智能关键技术与CFD早有渊源,例如采用神经网络等方法重构湍流模型。人工智能时代的CFD也越来越多地得到应用,航空航天领域可以通过CFD技术与风洞试验数据的结合,开展对飞机翼型和机翼的优化设计方法研究,利用大量数据进行训练,建立外形变量与气动结果关系的模型,应用于飞机初始设计。
CFD 领域,OpenFOAM 为最⼤的开源软件;AI 领域,PyTorch 和 TensorFlow 被认为是主流的深度学习框架。很多 CFDer 早已涉猎近年来⼤⽕的 AI 技术,不过能将 OpenFOAM 和 AI 框架耦合起来却有⼀定难度。接下来与大家分享 OpenFOAM 与 PyTorch 以及 TensorFlow 的耦合使用,主要是通过在 OpenFOAM 中调⽤ PyTorch 、TensorFlow 训练得到的神经⽹络模型,代替传统⽅法,预测 CFD 模拟中的一些关键参数。在寻找相关资料过程中,曾找到一位日本小伙经历了安装了10 个 OpenFOAM + 10 个 TensorFlow 才成功的探索教程:![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508730926_gvr910.jpg?imageView2/0)
继续查阅一些资料(能搜到的资料其实非常少),摸索了几个月,终于总结出可⾏的办法。以下内容主要分PyTorch 和 TensorFlow 两部分进行讲述,关于如何使⽤ PyTorch 或 TensorFlow 创建神经⽹络和训练模型,需要感兴趣的CFDer查阅相关资料。
访问官⽹选择平台与版本:
https://pytorch.org/get-started/locally/![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508733339_h1czf7.jpg?imageView2/0)
选择 Language: Python 得到安装指令:![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508733640_lkvlqj.jpg?imageView2/0)
此部分篇幅较长,详细操作请参考:https://github.com/ZmengXu/Artificial-neural-network-FGM。
另⼀种导出⽅式适⽤于 python 环境,导出后可以在 python 中绘图:
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508729801_m8ck6r.jpg?imageView2/0)
同样,访问官⽹选择平台与版本:
https://pytorch.org/get-started/locally/![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508732089_4nly2u.jpg?imageView2/0)
按照使⽤环境,选择 Stable -> Linux -> LibTorch -> C++ -> NoneCUDA
得到下载链接(cxx11 ABI 版):
https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-1.5.0%2Bcpu.zip建议版本与 python 中 PyTorch 保持⼀致,解压即可,例如解压在 ~/software/pyTorch 中(此路径后续会使用)。
Make/options 的 EXE_INC 中添加:
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508730717_ewy9qz.jpg?imageView2/0)
Make/options 的 LIB_LIBS 中添加:
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508731373_hqjxwo.jpg?imageView2/0)
添加 torch 头⽂件(注意:放在所有 OpenFOAM 头⽂件之前)
如果提供的输⼊数据是 volScalarField,输出数据也是 volScalarField。
以下方法可以提⾼速度,不过需要使⽤ Gcc 编译的 OpenFOAM(被 Icc 伤害过的四次经历之⼀)。输⼊ 2 个标量场(A B),输出 1 个标量场 C![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508734149_fj521a.jpg?imageView2/0)
参考资料:
https://github.com/AndreWeiner/of_pytorch_docker https://github.com/AndreWeiner/phd_openfoam ![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508731151_xgh7vd.jpg?imageView2/0)
注意:在 OpenFOAM 中调⽤第三⽅库的时候,库的名字必须是 *.so 格式,并且不能是软链接。
use TensorFlow in OpenFOAM
Make/options 的 EXE_INC 中添加:Make/options 的 LIB_LIBS 中添加:
![](https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1687508730494_mhrxzu.jpg?imageView2/0)
添加 TensorFlow 头⽂件(注意放在所有OpenFOAM 头⽂件之前)。
假设构建的求解器叫做 tfFoam,运⾏ tfFoam 之前,在环境变量中加载库:
往期文章曾介绍过基于神经网络算法的OpenFOAM燃烧求解器annReactingFoam,主要是基于双参数火焰面模型实现对层流非预混火焰的模拟,并验证了人工神经网络方法在层流非预混火焰燃烧模拟计算中的有效性、准确性。 下⾯主要介绍使⽤ OpenFOAM 耦合 PyTorch 所做的⼯作。 湍流燃烧⽕焰模拟使⽤ FGM 燃烧模型(该模型在往期文章中曾介绍过,点击下方链接可以参阅)。FGM 燃烧模型是在 CFD 计算前,使⽤ FlameMaster 软件模拟⼀维原型⽕焰,预先建⽴好湍流⽕焰数据库。 然后,在 CFD 计算中查询这个数据库,得到热物理量。不过,该⽅法存在⼀个潜在的问题,即当模拟更加复杂的⼯况时,往往需要增加湍流⽕焰数据库的维度。这会导致数据库占⽤的内存剧增,有时候甚⾄可能达到计算集群⽆法承受的地步。 因此使⽤神经⽹络来代替这个数据库,即在 PyTorch 中构建神经⽹络模型。输⼊这个湍流⽕焰数据库,训练出⼀个满意的神经⽹络,然后在 CFD 中利⽤神经⽹络来预测得到所需的热物理量。 希望以上内容可以帮助大家更好地使用 OpenFOAM 与 AI 耦合技术,解决科研中的难题!