最近在关注深度学习与流体仿真方面的内容,发现了一个挺有意思的开源CFD求解器:PhiFlow。
PhiFlow的github地址:https://github.com/tum-pbs/PhiFlow
”
下面是PhiFlow的官方介绍:
PhiFlow是一个为优化和机器学习应用程序构建的开源仿真工具包,其主要采用Python编写,可以与NumPy、PyTorch、Jax或TensorFlow一起使用。与这些机器学习框架的紧密集成使PhiFlow能够利用其自动微分功能,从而能轻松构建涉及学习模型与物理模拟的端到端可微分函数。
程序功能特点:
建议在anaconda下安装。软件可以使用pip进行安装:
pip install phiflow dash
除PhiFlow之外,若要启用机器学习功能及GPU计算,还需要安装PyTorch、TensorFlow或Jax。
安装完毕后,可以在Python中输入下面的代码:
from phi.flow import *
phi.verify()
若输出如下图所示,则表示安装成功。
注意:这里pytorch、Jax或TensorFlow只需要任意安装其中一个即可。
官方提供的案例。
输入下面的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等)无缝集成呢。
国人啥时候也能整点儿好玩儿的开源求解器耍耍呢~
(完)