计算流体动力学是21世纪流体力学领域最重要的技术之一。通过数值方法求解流体力学控制方程,可以实现流动分析、预测和控制。传统的有限元法(FEM)和有限差分法(FDM)由于仿真过程复杂(物理建模、网格划分、数值离散、迭代求解等)且计算成本较高,效率低下。因此,有必要利用人工智能来提高流体模拟的效率。
近年来,在经典理论和具有计算机性能的数值方法发展趋于平稳的同时,机器学习方法将大量数据与神经网络相结合,实现了流场的快速模拟。这些方法可以获得接近传统方法的精度,为流场求解提供了新的思路。
本实验基于MindSpore,利用MindFLow流体模拟套件并基于物理驱动的PINNs方法求解Allen Cahn方程。
Allen-Cahn方程(以John W.Cahn和Sam Allen命名)是数学物理的反应扩散方程,描述了多组分合金系统中的相分离过程,包括有序-无序转变。该方程描述了域
其中,
物理信息神经网络(Physics-Informed Neural Networks,简称PINNs)是一种结合了深度学习和物理学原理的神经网络模型,主要用于求解偏微分方程。PINNs的核心思想是在神经网络的损失函数中加入一个项,该项表示网络输出与物理方程的偏差。这样做可以使网络不仅能够拟合数据,还能满足物理定律。具体来说,PINNs通常由以下几部分组成:
- 数据拟合项:确保网络输出与观测数据相匹配。
- 物理约束项:确保网络输出符合相关的物理方程。
本实验使用狄利克雷边界条件和初始条件,形式如下
本实验利用PINNs方法学习位置和时间到相应物理量的映射(x,t)
环境要求(MindSpore和MindFlow版本要对应)
-
MindSpore >= 2.0.0
-
MindFlow >=0.1.0
本实验使用的是mindspore==2.0.0rc1,mindflow==0.1.0rc1
- 可参考MindSpore快速安装
- 可下载mindspore.whl、mindflow.whl之后使用pip安装
git clone https://github.com/ysysys666/Allen-Cahn-MindSpore.git
从dataset 中下载验证所需要的数据集,并保存在./dataset
目录下。
python train.py --mode GRAPH --device_target GPU --device_id 0 --config_file_path ./configs/allen_cahn_cfg.yaml
其中, --mode
表示运行的模式,'GRAPH'表示静态图模式, 'PYNATIVE'表示动态图模式,详见MindSpore官网,默认值'GRAPH';
--device_target
表示使用的计算平台类型,可以选择'Ascend'或'GPU',默认值'Ascend';
--device_id
表示使用的计算卡编号,可按照实际情况填写,默认值0;
--config_file_path
表示参数文件的路径,默认值'./configs/allen_cahn_cfg.yaml';
可以使用Jupyter Notebook逐行运行训练和验证代码。
python test.py
要验证的checkpoint需要在config_file中指定,本实验默认是最后的checkpoint,结果默认保存在images文件夹
时空图位于顶部,横轴表示时间
在这个时空图中,初始状态
下方三个图展示了
-
$t=0.25$ 图:解的波动开始减少,但仍然保持较为复杂的结构。这显示了解正在响应方程的非线性动力学。 -
$t=0.5$ 图:此时的解更加集中和尖锐,两个峰值开始显现,这可能是向两个稳定状态(即$u=±1$ )的过渡。 -
$t=0.75$ 图:解的波动进一步减少,接近两个清晰的稳定状态,显示为两个尖锐的峰值。