最近在关注深度学习与流体仿真方面的内容,发现了一个挺有意思的开源CFD求解器:PhiFlow。
PhiFlow的github地址:https://github.com/tum-pbs/PhiFlow
”
1 简介
下面是PhiFlow的官方介绍:
PhiFlow是一个为优化和机器学习应用程序构建的开源仿真工具包,其主要采用Python编写,可以与NumPy、PyTorch、Jax或TensorFlow一起使用。与这些机器学习框架的紧密集成使PhiFlow能够利用其自动微分功能,从而能轻松构建涉及学习模型与物理模拟的端到端可微分函数。
程序功能特点:
-
内置各种PDE操作,专注于流体现象,并允许简化模拟公式。 -
与PyTorch、Jax和TensorFlow紧密集成,能够通过可在GPU上运行的完全可微分模拟进行神经网络训练。 -
具有灵活、易于使用的web界面,包含实时可视化和交互式控件,可以实时影响模拟或网络训练。 -
面向对象、矢量化设计,用于表达代码、易用性、灵活性和可扩展性。 -
可重用的模拟代码,独立于后端和维度,即完全相同的代码可以使用NumPy运行2D流体模拟,并使用TensorFlow或PyTorch在GPU上运行3D流体模拟。 -
具有自动稀疏矩阵生成功能的高级线性方程求解器。
2 安装及使用
建议在anaconda下安装。软件可以使用pip进行安装:
pip install phiflow dash
除PhiFlow之外,若要启用机器学习功能及GPU计算,还需要安装PyTorch、TensorFlow或Jax。
安装完毕后,可以在Python中输入下面的代码:
from phi.flow import *
phi.verify()
若输出如下图所示,则表示安装成功。
注意:这里pytorch、Jax或TensorFlow只需要任意安装其中一个即可。
3 一个有意思的例子
官方提供的案例。
输入下面的python代码。
from phi.flow import *
smoke = CenteredGrid(0, extrapolation.BOUNDARY, x=32, y=40, bounds=Box(x=32, y=40))
velocity = StaggeredGrid(0, extrapolation.ZERO, x=32, y=40, bounds=Box(x=32, y=40))
INFLOW_LOCATION = tensor([(4, 5), (8, 5), (12, 5), (16, 5)], batch('inflow_loc'), channel(vector='x,y'))
INFLOW = 0.6 * CenteredGrid(Sphere(center=INFLOW_LOCATION, radius=3), extrapolation.BOUNDARY, x=32, y=40, bounds=Box(x=32, y=40))
smoke += INFLOW
trajectory = [smoke]
for i in range(20):
print(i, end=' ')
smoke = advect.mac_cormack(smoke, velocity, dt=1) + INFLOW
buoyancy_force = smoke * (0, 0.5) @ velocity
velocity = advect.semi_lagrangian(velocity, velocity, dt=1) + buoyancy_force
velocity, _ = fluid.make_incompressible(velocity)
trajectory.append(smoke)
trajectory = field.stack(trajectory, batch('time'))
vis.plot(trajectory, animate='time')
输出如下所示。
后处理渣渣。不过最大的优点是计算速度飞快,用来做DL与CFD耦合的测试求解器相当不错,更何况官方宣称其能与当前主流DL框架(如pytorch、tensorflow、jax等)无缝集成呢。
国人啥时候也能整点儿好玩儿的开源求解器耍耍呢~
(完)
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册