Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
DeepFlame基础操作
DeepFlame
DeepFlame
刘圣铭
发布于 2023-07-08
赞 7
2
17
AI4SCUP-CNS-BBB(v1)

快速开始DeepFlame | 从安装到燃烧模拟

代码
文本

本教程可在 Bohrium Notebook 上直接运行。你可以点击界面上方蓝色按钮开始连接,选择 deepflame-handson:part1 镜像及至少8核的cpu配置,稍等片刻即可运行。 如您遇到任何问题,请联系 bohrium@dp.tech

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

代码
文本

📖 DeepFlame平台介绍
围绕着「机器学习+物理建模+高性能计算」的核心理念,DeepFlame项目基于OpenFOAM、Cantera、Torch等开源平台,结合异构并行与AI加速器等新一代算力基础设施,旨在建设高精度、高效率、简单易用、覆盖面广的燃烧反应流的数值模拟程序,尝试解决闭源代码权威化、算力资源垄断化、祖传代码老化僵化等问题。同时希望结合开源社区的力量,为广大燃烧模拟用户搭建共享代码、算力平台和算例库,尝试改变研究者无代码可用、论文结果难以复现等诸多困局。 本教程将带你从安装DeepFlame开始,到使用DeepFlame内的求解器模拟经典的燃烧反应流算例,并对结果进行分析。这里我们采用DeepFlame v1.2版本。

阅读该教程约需 15 分钟,让我们开始吧!

代码
文本

1. 安装DeepFlame

代码
文本

1.1 安装前提

安装环境为Linux Ubuntu子系统,推荐使用WSL2。请确保在Anaconda官网下载Anaconda3并按照官方教程安装。

需要安装OpenFOAM-7, LibCantera和PyTorch。本教程已经把这些库都在镜像中安装好了,如果在本地运行notebook也许会要手动安装库,请参考下面的命令。

注意,Ubuntu需要使用20.04版本。OpenFOAM-7和ParaView 5.6.0和Ubuntu的最新版不适配。

首先安装OpenFOAM-7:

代码
文本
[1]
! sudo sh -c "wget -O - https://dl.openfoam.org/gpg.key | apt-key add -"
! sudo add-apt-repository http://dl.openfoam.org/ubuntu
! sudo apt-get updat
! apt-get -y install openfoam7
--2023-06-30 10:10:38--  https://dl.openfoam.org/gpg.key
Resolving ga.dp.tech (ga.dp.tech)... 10.255.254.18, 10.255.254.7, 10.255.254.37
Connecting to ga.dp.tech (ga.dp.tech)|10.255.254.18|:8118... connected.
Proxy request sent, awaiting response... 200 OK
Length: 1710 (1.7K) [application/pgp-keys]
Saving to: ‘STDOUT’

-                   100%[===================>]   1.67K  --.-KB/s    in 0s      

2023-06-30 10:10:39 (471 MB/s) - written to stdout [1710/1710]

OK
Hit:1 http://mirrors.aliyun.com/ubuntu bionic InRelease
Get:2 http://mirrors.aliyun.com/ubuntu bionic-security InRelease [88.7 kB]
Get:3 http://mirrors.aliyun.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:4 http://mirrors.aliyun.com/ubuntu bionic-proposed InRelease [242 kB]      
Hit:5 http://dl.openfoam.org/ubuntu focal InRelease      
Get:6 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease [83.3 kB]
Get:7 http://mirrors.aliyun.com/ubuntu bionic-updates/main amd64 Packages [3785 kB]
Get:8 http://mirrors.aliyun.com/ubuntu bionic-proposed/main Sources [89.6 kB]
Get:9 http://mirrors.aliyun.com/ubuntu bionic-proposed/restricted amd64 Packages [189 kB]
Get:10 http://mirrors.aliyun.com/ubuntu bionic-proposed/main amd64 Packages [202 kB]
Fetched 4768 kB in 7s (722 kB/s)                                               
Reading package lists... Done
E: Invalid operation updat
Reading package lists... Done
Building dependency tree       
Reading state information... Done
openfoam7 is already the newest version (20200508).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
代码
文本

OpenFOAM-7和ParaView 5.6.0将被安装在/opt目录下。

LibCantera和PyTorch可以通过conda安装。

注意,安装PyTorch时,请在PyTorch官网按照硬件配置获取相对应的安装命令行。为了方便在任意镜像下安装PyTorch,这里使用的是PyTorch的仅CPU工作的安装选项,小伙伴们如果在本地运行可以选择使用GPU的安装命令。运行命令如下:

代码
文本
[2]
! conda install -c cantera libcantera-devel -y
! conda install pytorch torchvision torchaudio cpuonly -c pytorch -y
! conda install pybind11 -y
! conda install -c conda-forge easydict -y
Collecting package metadata (current_repodata.json): done
Solving environment: - 
Warning: 2 possible package resolutions (only showing differing packages):
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/noarch::certifi-2020.6.20-pyhd3eb1b0_3
  - defaults/noarch::certifi-2020.6.20-pyhd3eb1b0done

# All requested packages already installed.

Retrieving notices: ...working... done
Collecting package metadata (current_repodata.json): done
Solving environment: - 
Warning: 2 possible package resolutions (only showing differing packages):
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/noarch::certifi-2020.6.20-pyhd3eb1b0_3
  - defaults/noarch::certifi-2020.6.20-pyhd3eb1b0done

## Package Plan ##

  environment location: /root/anaconda3

  added / updated specs:
    - cpuonly
    - pytorch
    - torchaudio
    - torchvision


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    cpuonly-2.0                |                0           2 KB  pytorch
    pytorch-2.0.1              |      py3.8_cpu_0        86.0 MB  pytorch
    torchaudio-2.0.2           |         py38_cpu         7.3 MB  pytorch
    torchvision-0.15.2         |         py38_cpu        33.1 MB  pytorch
    ------------------------------------------------------------
                                           Total:       126.5 MB

The following packages will be SUPERSEDED by a higher-priority channel:

  cpuonly                            anaconda/cloud/pytorch --> pytorch None
  pytorch                            anaconda/cloud/pytorch --> pytorch None
  torchaudio                         anaconda/cloud/pytorch --> pytorch None
  torchvision                        anaconda/cloud/pytorch --> pytorch None



Downloading and Extracting Packages
cpuonly-2.0          | 2 KB      | ##################################### | 100% 
pytorch-2.0.1        | 86.0 MB   | ##################################### | 100% 
torchaudio-2.0.2     | 7.3 MB    | ##################################### | 100% 
torchvision-0.15.2   | 33.1 MB   | ##################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Retrieving notices: ...working... done
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /root/anaconda3

  added / updated specs:
    - pybind11


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    certifi-2020.6.20          |     pyhd3eb1b0_3         155 KB  defaults
    ------------------------------------------------------------
                                           Total:         155 KB

The following packages will be SUPERSEDED by a higher-priority channel:

  certifi                                anaconda/pkgs/main --> pkgs/main None



Downloading and Extracting Packages
certifi-2020.6.20    | 155 KB    | ##################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Retrieving notices: ...working... done
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /root/anaconda3

  added / updated specs:
    - easydict


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    easydict-1.9               |             py_0           9 KB  conda-forge
    ------------------------------------------------------------
                                           Total:           9 KB

The following packages will be SUPERSEDED by a higher-priority channel:

  easydict                       anaconda/cloud/conda-forge --> conda-forge None



Downloading and Extracting Packages
easydict-1.9         | 9 KB      | ##################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Retrieving notices: ...working... done
代码
文本

1.2 配置环境

代码
文本

读取执行OpenFOAM-7的环境变量文件,从github获取DeepFlame库,配置DeepFlame使用PyTorch,之后可以安装DeepFLame:

代码
文本
[3]
%%bash
git clone https://github.com/deepmodeling/deepflame-dev.git #从github上获取DeepFlame仓库
cd /root/deepflame-dev #进入deepflame-dev目录
. configure.sh --use_pytorch #配置DeepFlame使用PyTorch
source bashrc #配置deepflame环境
. install.sh #安装
setup for deepflame bashrc:
LIBCANTERA_DIR=/root/anaconda3
PYTORCH_INC=-I/root/anaconda3/include/python3.8 -I/root/anaconda3/lib/python3.8/site-packages/pybind11/include
PYTORCH_LIB=/root/anaconda3/lib
LIBTORCH_DIR=
src_orig exist.
Compiling enabled on 8 cores
Allwmake /root/deepflame-dev
wmake src/thermophysicalModels/thermophysicalProperties
wmake src/thermophysicalModels/basic
wmake src/functionObjects/field
wmake src/dfCanteraMixture
wmake src/thermophysicalModels/SLGThermo
wmake src/dfChemistryModel
wmake src/TurbulenceModels/compressible
wmake src/TurbulenceModels/turbulenceModels
wmake src/regionModels/surfaceFilmModels
Allwmake /root/deepflame-dev/src/lagrangian
wmake intermediate
wmake turbulence
wmake spray
wmake src/dfCombustionModels
wmake src/dynamicMesh
wmake src/dynamicFvMesh
wmake applications/solvers/df0DFoam
wmake applications/solvers/dfLowMachFoam
wmake applications/solvers/dfHighSpeedFoam
wmake applications/solvers/dfSprayFoam
wmake applications/utilities/flameSpeed
 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
| deepflame (linked with libcantera and pytorch) compiled successfully! Enjoy!! | 
 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
fatal: destination path 'deepflame-dev' already exists and is not an empty directory.
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
/bin/bash: /root/anaconda3/lib/libtinfo.so.6: no version information available (required by /bin/bash)
代码
文本

如果DeepFlame成功编译,你应该会看到: fig1.png

代码
文本

1.3 下载深度神经网络

代码
文本

在本教程算例中用到的深度神经网络是由我们的合作伙伴独立训练的。如果想使用DeepFlame的神经网络求解器,需要将DeepCombustion仓库下载到deepflame-dev文件夹下。

代码
文本
[15]
%%bash
cd /root/deepflame-dev
git clone https://github.com/intelligent-algorithm-team/intelligent-combustion.git
cp -r intelligent-combustion/DeePCK/Model/HE04_Hydrogen_ESH2_GMS_sub_20221101/ mechanisms/
fatal: destination path 'intelligent-combustion' already exists and is not an empty directory.
代码
文本

2. 零维求解器-零维自动点火

本算例模拟在恒定压强或恒定体积条件下零维自动点火。这个算例调用了DeepFlame中植入的化学反应源项。

案例条件设置如下:

case1表.png

案例的预期结果:

case1输出.png

代码
文本

2.1 运行CPU算例

代码
文本

读取OpenFOAM配置文件,读取DeepFlame的配置文件,进入零维自动点火算例的CPU版本目录下,使用文件内置的脚本运行算例(时间大约在5分钟左右,请耐心等待):

代码
文本
[6]
%%bash
# source /opt/openfoam7/etc/bashrc #配置OpenFOAM
source /root/deepflame-dev/bashrc #配置DeepFlame
cd $HOME/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/cvodeIntegrator #进入算例目录
./Allrun #运行脚本
ls
Running blockMesh on /root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/cvodeIntegrator
Running decomposePar on /root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/cvodeIntegrator
Running mpirun on /root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/cvodeIntegrator
代码
文本

后处理需要的探针(probe)数据保存在/systems/probes路径下。在这个案例中,探针位置定义在(0.0025, 0.0025, 0.0025)处,测量温度随时间的变化情况。如果算例运行成功,结果将被保存到/postProcessing/probes/0/T,通过如下命令可以看到结果:

代码
文本
[10]
import matplotlib.pyplot as plt

X1,Y1 = [],[]

with open("/root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/cvodeIntegrator/postProcessing/probes/0/T") as f1:
lines = f1.readlines()[3:]
for line in lines:
value = [float(s) for s in line.split()]
X1.append(value[0])
Y1.append(value[1])

plt.plot(X1, Y1, color='royalblue')
plt.xlabel("time[s]")
plt.ylabel("temperature[K]")
plt.show()
代码
文本

2.2 运行DNN算例

代码
文本

读取OpenFOAM配置文件,读取DeepFlame的配置文件,进入零维自动点火算例的DNN版本目录下,使用文件内置的脚本运行算例(时间大约在5分钟左右,请耐心等待):

代码
文本
[1]
%%bash
# source /opt/openfoam7/etc/bashrc #配置OpenFOAM
source /root/deepflame-dev/bashrc #配置DeepFlame
cd $HOME/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/pytorchIntegrator #进入算例目录
./Allrun #运行脚本
ls
Running blockMesh on /root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/pytorchIntegrator
Running decomposePar on /root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/pytorchIntegrator
Running mpirun on /root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/pytorchIntegrator
代码
文本

后处理需要的探针(probe)数据保存在/systems/probes路径下。在这个案例中,探针位置定义在(0.0025, 0.0025, 0.0025)处,测量温度随时间的变化情况。如果算例运行成功,结果将被保存到/postProcessing/probes/0/T,通过如下命令可以看到结果:

代码
文本
[11]
import matplotlib.pyplot as plt

X2,Y2 = [],[]

with open("/root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/pytorchIntegrator/postProcessing/probes/0/T") as f2:
lines = f2.readlines()[3:]
for line in lines:
value = [float(s) for s in line.split()]
X2.append(value[0])
Y2.append(value[1])

plt.plot(X2, Y2, color='darkorange')
plt.xlabel("time[s]")
plt.ylabel("temperature[K]")
plt.show()
代码
文本

2.2 结果对比

代码
文本

比较一下用CPU计算和用神经网络计算的结果:

代码
文本
[14]
import matplotlib.pyplot as plt

X1,Y1 = [],[]

with open("/root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/cvodeIntegrator/postProcessing/probes/0/T") as f1:
lines = f1.readlines()[3:]
for line in lines:
value = [float(s) for s in line.split()]
X1.append(value[0])
Y1.append(value[1])

X2,Y2 = [],[]

with open("/root/deepflame-dev/examples/df0DFoam/zeroD_cubicReactor/H2/pytorchIntegrator/postProcessing/probes/0/T") as f2:
lines = f2.readlines()[3:]
for line in lines:
value = [float(s) for s in line.split()]
X2.append(value[0])
Y2.append(value[1])

plt.plot(X1, Y1, color='royalblue')
plt.plot(X2, Y2, color='darkorange', linestyle='--')
plt.xlabel("time[s]")
plt.ylabel("temperature[K]")
plt.show()
代码
文本

3. 更多求解器及算例

除了零维求解器,DeepFlame目前还提供低马赫,高速流和喷雾求解器。对应的案例也可以在deepflame/examples/目录下找到,与上面的案例一样提供了运行脚本,各位如果感兴趣可以自己尝试运行。

代码
文本

3.1 低马赫求解器-一维平面火焰

代码
文本

本算例进行一维自由传播火焰的稳态模拟。结果可以捕捉火焰厚度,层流火焰速度和一维火焰的具体结构。本算例使用到了DeepFlame中的对流-扩散-反应算法。

案例条件设置如下:

case3-1-1.png

一维平面火焰的示意图以及预期的火焰结构:

case3-1-2.png

代码
文本

3.2 高速流求解器-一维氢气/空气爆轰

代码
文本

爆轰的传播过程包含了前端激波和自动点火间的复杂交互,体现了激波和化学反应间的耦合作用。本案例将通过DeepFlame准确捕捉此过程,并计算出爆轰的传播速度。

案例条件设置如下:

case3-2-1.png

一维爆轰传播算例的预期结果:

case3-2-2.png

代码
文本

3.3 喷雾求解器-悉尼喷雾燃烧器

代码
文本

基于悉尼大学的实验设置,在一个喷雾燃烧器内模拟一个二维楔形的稀释喷雾燃烧过程。本案例在液滴-化学-湍流的研究领域被广泛使用。

案例条件设置如下:

case3-3-1.png

需要注意的是,当使用OpenFOAM运行楔形案例时,你也许会碰到“Hitting a wedge patch should not be possible”的报错。可行的解决办法是注释掉src/lagrangian/basic/particle/particleTemplates.C文件中“FatalErrorIn”的行。

预期结果:

case3-3-2.png

代码
文本

进一步阅读

如果您希望更深入学习DeepFlame,本节提供有关该主题的更多资源。

DeepFlame项目

代码
文本
DeepFlame
DeepFlame
已赞7
本文被以下合集收录
测试合集文章列表100篇
xingyanshi@dp.tech很长的名字xingyanshi@dp.tech很长的名字很长的
更新于 2024-08-04
104 篇2 人关注
DeepMD
fshappy
更新于 2024-08-05
11 篇2 人关注
推荐阅读
公开
快速开始DeepFlame | 从安装到燃烧模拟
DeepFlame
DeepFlame
刘圣铭
发布于 2023-06-30
2 转存文件
公开
DeepFlame-v1.3.0-安装指南
DeepFlame
DeepFlame
王海骁
发布于 2024-01-02
2 赞4 转存文件1 评论