# CFD ## 论文 `Machine learning–accelerated computationalfluid dynamics` * https://www.pnas.org/doi/epdf/10.1073/pnas.2101784118 ## 模型结构 该模型包括一个卷积神经网络,该网络控制在标准数值求解器的对流计算中的学习近似。ψ和u分别指的是被输送和输送速度分量。对于空间维度,有d*d个对流通量模块的副本,对应于每个空间方向中每个速度分量的通量。 ![alt text](asset/model_structure.png) ## 算法原理 CNN网络具有平移不变性。这意味着网络对输入数据的平移不敏感,即使图像中的对象位置发生了变化,网络也能识别出对象。在流体动力学的上下文中,网络能够识别出流动中相同的模式,无论它们在空间中如何移动。此外,卷积神经网络在空间上是局部化的,网络的操作集中在输入数据的局部区域。在流体动力学的背景下,网络专注于网格点周围的局部流速场,而不是整个流速场。这种局部化允许网络捕捉局部流动特征,如涡旋、边界层等,这对于准确模拟流体行为至关重要。 ![alt text](asset/alg.png) ## 环境配置 ### Docker(方法一) docker pull image.sourcefind.cn:5000/dcu/admin/base/jax:0.4.23-ubuntu20.04-dtk24.04-py310 docker run --shm-size 10g --network=host --name=jax_cfd --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -v /opt/hyhal:/opt/hyhal:ro -it bash pip install -e ".[complete]" pip install dask jupyter ### Dockerfile(方法二) docker build -t : . docker run --shm-size 10g --network=host --name=jax_cfd --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -v /opt/hyhal:/opt/hyhal:ro -it bash pip install -e ".[complete]" pip install dask jupyter ### Anaconda(方法三) DTK驱动:dtk24.04 python:python3.10 jax: 0.4.23 Tips:以上dtk驱动、python、jax等DCU相关工具版本需要严格一一对应 2、其他非特殊库 pip install dask jupyter ## 数据集 1、安装gsutil curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-367.0.0-linux-x86_64.tar.gz tar zxvf google-cloud-sdk-367.0.0-linux-x86_64.tar.gz cd /安装目录/google-cloud-sdk bash install.sh # 添加环境变量 vim ~/.bashrc export PATH=$PATH:/安装目录/google-cloud-sdk/bin source ~/.bashrc 2、下载数据 cd jax-cfd && mkdir content gsutil -m cp gs://gresearch/jax-cfd/public_eval_datasets/kolmogorov_re_1000/eval_*.nc ./content gsutil -m cp -r gs://gresearch/jax-cfd/public_eval_datasets/kolmogorov_re_1000_fig1 ./content gsutil -m cp gs://gresearch/jax-cfd/public_eval_datasets/kolmogorov_re_1000/learned*.nc ./content gsutil -m cp gs://gresearch/jax-cfd/public_eval_datasets/kolmogorov_re_1000/long_eval*.nc ./content ## 推理 1、下载模型 gsutil -m cp gs://gresearch/jax-cfd/public_models/*.pkl ./content 2、执行 注意:跳过代码中需要下载数据的部分以及环境安装部分,根据实际情况修改相关文件路径。 # 执行该目录下的ipynb中的代码 cd notebooks # 采用交错网格的二维有限体积法模拟 demo.ipynb # 使用伪谱法解算器的二维模拟 spectral_forced_turbulence.ipynb # 二维通道流模拟 channel_flow_demo.ipynb # 在共位网格上使用有限体积法(FVM)的二维模拟 collocated_demo.ipynb # PNAS论文 # 数据分析及评估 ml_accelerated_cfd_data_analysis.ipynb # 预训练模型 ml_model_inference_demo.ipynb 注意:可以使用`jupyter notebook --no-browser --ip=0.0.0.0 --allow-root`启动运行环境。 ## result ![alt text](asset/result1.png) ### 精度 无 ## 应用场景 ### 算法类别 `流体动力学` ### 热点应用行业 `化工,气象,能源` ## 源码仓库及问题反馈 * https://developer.sourcefind.cn/codes/modelzoo/cfd_jax ## 参考资料 * https://github.com/google/jax-cfd/tree/main