何时使用
当任务需要在周期域上对不可压缩流体做数值仿真,并对结果做湍流/涡/谱分析时使用。FluidSim 是面向对象的 Python CFD 框架,用伪谱方法(FFT)求解,配 Pythran/Transonic 编译与 MPI 并行,性能接近 Fortran/C++。典型场景:
- 二维/三维湍流研究:能量与拟涡能级联、涡量动力学、高分辨率 DNS。
- 地球物理流:浅水方程(旋转系、地转平衡)、海洋/大气分层流(Boussinesq、浮力)。
- 经典验证算例:Taylor-Green 涡、双极涡(dipole)能量衰减对比解析解。
- 参数扫描:批量改黏性/分辨率跑系列仿真,分析依赖关系。
不该用的边界:
- 需要复杂几何 / 物理边界(机翼、管道、绕流障碍物)——FluidSim 只做周期边界 + 谱方法,没有贴体网格,这类问题用有限元/有限体积(OpenFOAM、SU2、FEniCS)。
- 多相流、自由表面、燃烧、可压缩激波——超出本框架求解器范围。
- 结构静力学 / 应力分析(FvK 弹性板求解器是耦合动力学,不是静力 FEA)。
- 体系很大(如 512³ 三维 DNS)却无多核/集群与 FFT 支持时,单机算力不可接受,应先评估 HPC 资源。
步骤
- 装环境:
uv pip install "fluidsim[fft]"(多数求解器需 FFT 支持);并行再加[fft,mpi]。无需 API key。 - 导入求解器:按物理问题选
Simul类(见下表)。 - 建默认参数:
params = Simul.create_default_params(),再用点号逐项配置(拼错属性会抛AttributeError,防静默错配)。 - 配域与分辨率:
params.oper.nx = params.oper.ny = 256、params.oper.Lx = params.oper.Ly = 2*pi。 - 配物理与时间步:黏性
params.nu_2、超黏params.nu_4(可选);params.time_stepping.t_end、USE_CFL=True配CFL=0.5用自适应步长。 - 配初值与输出:
params.init_fields.type(noise/dipole/vortex/from_file/in_script);params.output.periods_save.*设各类输出的保存周期。 - 实例化并跑:
sim = Simul(params); sim.time_stepping.start()。 - 分析:物理场/能谱/空间均值出图,或
load_sim_for_plot载入历史仿真复盘。
指令
求解器选择(关键约束,按物理问题选):
| 问题类型 | 求解器 key | 导入 | 特征参数 |
|---|---|---|---|
| 二维湍流、涡动力学、快速测试 | ns2d |
from fluidsim.solvers.ns2d.solver import Simul |
— |
| 三维湍流、真实流、高分辨 DNS | ns3d |
...ns3d.solver import Simul |
需 MPI |
| 分层流(海洋/大气) | ns2d.strat / ns3d.strat |
...ns2d.strat.solver import Simul |
params.N(Brunt-Väisälä 频率) |
| 浅水 / 地球物理 / 旋转系 | sw1l |
...sw1l.solver import Simul |
params.f(科氏参数) |
| 弹性板(Föppl-von Kármán) | fvk |
...fvk.solver import Simul |
流固耦合 |
最佳实践(务必遵守):
- 谱方法只适用周期域;域尺寸
Lx/Ly一般取2*pi配对应分辨率。 - 长程/高分辨仿真开
USE_CFL=True让步长随流场自适应,比固定步长稳。 - 三维或大算例用 MPI 并行:
mpirun -np 8 python script.py,进程数与 FFT 分解相匹配。 - 自定义初值用
init_fields.type = "in_script",实例化后取物理场数组写入,再调statephys_from_statespect()同步谱空间。 - 分析能谱级联时限定准稳态时间窗(
tmin/tmax),别把初始暂态算进去。 - 输出为 HDF5(
.h5),三维可视化交给 ParaView / VisIt。
环境变量(可选): FLUIDSIM_PATH(输出目录)、FLUIDDYN_PATH_SCRATCH(工作目录)。
示例
最小工作流(二维 Navier-Stokes):
from fluidsim.solvers.ns2d.solver import Simul
from math import pi
params = Simul.create_default_params()
params.oper.nx = params.oper.ny = 256
params.oper.Lx = params.oper.Ly = 2 * pi
params.nu_2 = 1e-3
params.time_stepping.t_end = 10.0
params.time_stepping.USE_CFL = True
params.init_fields.type = "noise"
params.output.periods_save.phys_fields = 1.0
params.output.periods_save.spectra = 0.5
params.output.periods_save.spatial_means = 0.1
sim = Simul(params)
sim.time_stepping.start()
sim.output.phys_fields.plot("vorticity") # 涡量场
sim.output.spectra.plot1d(tmin=30.0, tmax=50.0) # 能量级联
sim.output.spatial_means.plot() # 体积均值时间序列
自定义初值 · Taylor-Green 涡验证:
import numpy as np
sim = Simul(params) # params.init_fields.type = "in_script"
X, Y = sim.oper.get_XY_loc()
vx = sim.state.state_phys.get_var("vx")
vy = sim.state.state_phys.get_var("vy")
vx[:] = np.sin(X) * np.cos(Y)
vy[:] = -np.cos(X) * np.sin(Y)
sim.state.statephys_from_statespect() # 谱空间同步,关键
sim.time_stepping.start()
df = sim.output.spatial_means.load() # 与解析能量衰减对比
分层流: from fluidsim.solvers.ns2d.strat.solver import Simul,设 params.N = 2.0,初值里写浮力场 b = sim.state.state_phys.get_var("b")。
带强迫维持湍流:
params.forcing.enable = True
params.forcing.type = "tcrandom" # 时间相关随机强迫
params.forcing.forcing_rate = 1.0
三维 + MPI: params.oper.nx = ny = nz = 512 后 mpirun -np 64 python script.py。
参数扫描:
for nu in [1e-3, 5e-4, 1e-4]:
params = Simul.create_default_params()
params.nu_2 = nu
params.output.sub_directory = f"nu{nu}"
Simul(params).time_stepping.start()
复盘历史仿真:
from fluidsim import load_sim_for_plot
sim = load_sim_for_plot("simulation_dir")
sim.output.phys_fields.plot()
注意事项
- 许可双层:本采编源(K-Dense scientific-agent-skills 仓库)为 MIT,可再分发;但 FluidSim 库本身遵循 CeCILL(GPL 兼容的法国自由软件许可),使用/再分发该库代码时受 CeCILL 约束,与本条目文本许可无关。
- 拼错即报错:
Parameters对未知属性抛AttributeError,是特性不是 bug——靠它发现参数名笔误。 - 域必须周期:非周期/有边界几何会得到无意义结果,谱方法的硬约束。
- 统计窗口:能谱、级联、均值分析要丢弃初始暂态,只取准稳态段(
tmin/tmax)。 - 断点重启:长仿真可中断重启;先看
references/simulation_workflow.md的 restart 与集群提交流程。 - 性能依赖编译与 FFT:装
[fft]才有 FluidFFT 后端;Pythran/Transonic 编译热点函数;并行靠 mpi4py,进程数需与 FFT 分解协调。 - 替代/参考:复杂几何转 OpenFOAM/SU2/FEniCS;谱方法同类有 Dedalus、SpectralDNS。官方文档 https://fluidsim.readthedocs.io/ ;源技能含
references/六个细化文档(installation/solvers/simulation_workflow/parameters/output_analysis/advanced_features)。
互见
- related:
molecular-dynamics-simulation—— 同为原子/连续介质数值模拟,方法论(建模→平衡→产能→分析)相通。 - related:
materials-science-toolkit、guided-statistical-analysis—— 仿真结果的物性提取与统计分析。 - combines_with:
matplotlib-visualization—— 涡量场、能谱、时间序列出版级出图。
本条采编自 K-Dense-AI/scientific-agent-skills(MIT 许可证)。FluidSim 库本身遵循 CeCILL 许可证。