FluidSim 是一个用于 Python 定义数值求解器的框架,尤其面向周期性笛卡尔伪谱法 CFD。上游 FluidSim 采用 CeCILL-2.1 许可,本技能仅对自身 frontmatter 采用 MIT 许可。
用途
该技能用于规划、配置、检查、重启和分析有界的 FluidSim 计算流体力学模拟,并强调显式的数值有效性与 HPC 安全。它不把一次完成的运行、稳定的时间步、平滑的曲线或程序正常退出当作数值收敛或物理有效性的证据。
主要能力
- 求解器选择:支持 ns2d、ns2d.bouss、ns2d.strat、ns3d、ns3d.bouss、ns3d.strat 等笛卡尔 CFD 求解器;0.9 注册表还包含 plate2d、sw1l 变体、waves2d、1D 模型、0D 模型、球面求解器和框架适配器。注册表中存在并不代表求解器适合某个科学问题,需在求解器源码中核实方程、变量、几何、边界和诊断量。
- 参数配置:通过 Simul.create_default_params() 生成默认参数并检查后再修改。ParamContainer 拒绝未声明的属性。
- 强迫与时间推进:强迫是求解器特定的,例如 tcrandom 类型;伪谱方案包括 Euler/RK2 相移变体、RK2_trapezoid 和 RK4。命名阶数并不确立精度,需检查 CFL、快波/扩散极限、deltat_max 和时间步细化。
- 输出、加载与重启:可用 load_sim_for_plot 进行只读分析,用 load_state_phys_file 加载带状态的对象;受控重启优先使用 load_for_restart 或先运行 fluidsim-restart --only-check。不要对不可信文本使用 --modify-params,因为上游 CLI 会执行该选项提供的 Python 代码。
- 科学验收门:在解释结果前,要求显式单位或完整无量纲化映射、正确的方程与几何/边界、分辨率与去混叠证据、时间步证据、守恒与预算检查、网格/时间细化与不确定性、与解析解/制造解/基准的对比,以及完整的溯源与重启谱系。不得仅凭参数值或图表将运行标记为“DNS”“收敛”“已验证”“稳态”或“物理正确”。
使用方式
必需工作流:说明方程、单位或无量纲化、几何、边界、初始条件、强迫、观测量和验收标准;选择已验证的求解器并检查其生成的默认参数;创建严格的 JSON 计划,明确 CPU、内存、磁盘、墙钟时间、输出文件、时间步、CFL、分辨率和去混叠边界;运行捆绑的校验器和资源估算器;生成并审查 dry-run 脚本(除非以显式 config-ID 确认执行,否则它不做任何事);运行一个极小的串行试点,检查预算、散度/约束、谱尾、CFL/时间步历史和输出增长;独立细化网格和时间步,检查守恒/预算残差和观测量敏感性;只有到这时才准备站点特定的 MPI 作业,绝不自动提交或启动 MPI;保留配置、脚本、uv.lock、包/平台/后端版本、日志、输出清单、校验和与重启谱系。如果缺少物理假设、单位、边界条件、强迫语义、分辨率标准、资源限制或验收标准,应停止。
版本与安装
截至 2026-07-23 验证:最新稳定 PyPI 版本为 fluidsim==0.9.0(2025-12-04)。包元数据要求 Python >=3.11,并列出 Python 3.11–3.14。伪谱参数创建需要 FluidFFT;裸 fluidsim 在冒烟测试中可导入,但 ns2d.create_default_params() 在安装 fft extra 前会失败。当前配套版本:fluidfft==0.4.5 和 pyFFTW==0.15.1。
推荐项目锁: uv init --python 3.11 uv add "fluidsim[fft]==0.9.0" "fluidfft==0.4.5" "pyFFTW==0.15.1" uv lock uv sync --frozen
隔离的一次性环境: uv venv --python 3.11 uv pip install "fluidsim[fft]==0.9.0" "fluidfft==0.4.5" "pyFFTW==0.15.1"
项目锁是复现记录;仅直接固定版本并不能冻结所有传递产物。不要在不兼容的平台或 MPI ABI 之间复用锁。
MPI 是可选的且为原生: uv add "mpi4py==4.1.2" "fluidfft-mpi-with-fftw==0.0.1" "fluidfft-fftwmpi==0.0.1" uv lock 这些包仍需要兼容的 MPI 运行时和 FFTW 开发库。可选原生插件包括:fluidfft-fftw==0.0.1(串行 fft2d.with_fftw1d、fft2d.with_fftw2d、fft3d.with_fftw3d);fluidfft-mpi-with-fftw==0.0.1(MPI fft2d.mpi_with_fftw1d、fft3d.mpi_with_fftw1d);fluidfft-fftwmpi==0.0.1(MPI 启用的 FFTW fft2d.mpi_with_fftwmpi2d、fft3d.mpi_with_fftwmpi3d);fluidfft-p3dfft==0.0.1(fft3d.mpi_with_p3dfft,需要 P3DFFT)。FluidFFT 还声明了 PFFT 和 P3DFFT extras;需为目标集群审计并固定其原生栈。FluidFFT 历史上记录过 cuFFT,但 FluidFFT 0.4.5 的包元数据未声明 CUDA extra 或已安装的 GPU 插件,其 CUDA 安装页面尚未完成。不要声称 GPU 加速,也不要把无关的 CUDA wheel 安装为 FluidSim 后端。GPU 工作应视为源码级实验性集成,需要单独验证。
API 快照
使用直接、带版本的导入: from fluidsim.solvers.ns2d.solver import Simul
params = Simul.create_default_params() params.oper.nx = params.oper.ny = 32 params.oper.Lx = params.oper.Ly = 2 * 3.141592653589793 params.oper.coef_dealiasing = 2 / 3 params.time_stepping.USE_CFL = True params.time_stepping.cfl_coef = 0.5 params.time_stepping.deltat0 = 0.001 params.time_stepping.deltat_max = 0.01 params.time_stepping.t_end = 0.1 params.time_stepping.max_elapsed = "00:05:00" params.init_fields.type = "noise" params.init_fields.noise.velo_max = 0.01 params.output.HAS_TO_SAVE = False params.output.ONLINE_PLOT_OK = False
0.9 重要更正:CFL 字段为 params.time_stepping.cfl_coef,而非 CFL;时间相关强迫为 params.forcing.tcrandom.time_correlation,而非扁平的 tcrandom_time_correlation;NS2D 默认初始类型包括 constant、noise、jet、dipole、from_file、from_simul 和 in_script,不要为每个求解器臆造通用列表;输出状态文件默认是 state_phys_t*.nc,谱使用 spectra1D.h5/spectra2D.h5,标量均值依求解器为 spatial_means.txt 或 JSON-lines;params.output.sub_directory 是 FLUIDSIM_PATH 下的相对路径。
捆绑的本地工具
所有工具输出严格 JSON,拒绝 URL/路径穿越/符号链接,强制硬边界,不使用网络或子进程,且从不启动模拟: python3 scripts/solver_config_validator.py --example python3 scripts/solver_config_validator.py --config config.json python3 scripts/grid_resource_estimator.py --config config.json python3 scripts/simulation_dry_run.py --config config.json --output run.py python3 scripts/output_inventory.py --path run-directory python3 scripts/budget_summary.py --path run-directory python3 scripts/restart_compatibility.py --source state.nc --target-config config.json HDF5 工具惰性依赖 h5py,检查有界元数据/超切片,且从不跟随外部链接或加载完整场数组。
适用场景
适用于需要规划、配置、检查、重启和分析有界 FluidSim CFD 模拟的研究与工程场景,尤其是周期性笛卡尔伪谱法模拟。
限制
该技能不把完成运行、稳定时间步、平滑曲线或程序正常退出视为数值收敛或物理有效性的证据。不得仅凭参数值或图表将运行标记为“DNS”“收敛”“已验证”“稳态”或“物理正确”。GPU 加速暂未提供,不应声称。MPI 作业绝不自动提交或启动。版本特定细节可能过时,需对照已安装版本的官方文档确认。