
FluidSim 0.9.0 伪谱 CFD 仿真 Skill 实战指南从严格参数规划、数值验证到 MPI/HPC 安全交接【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skillsFluidSim 是一个用 Python 定义数值求解器的开源计算流体动力学CFD框架尤其擅长周期矩形域的傅里叶伪谱求解。本指南基于 scientific-agent-skills 仓库中的skills/fluidsimSkill主文档配套 6 篇参考文档与 9 个本地 CLI 工具完整讲解如何规划、配置、检查、重启并分析有界的 FluidSim 0.9.0 仿真同时内置显式的数值有效性与 HPC 安全检查。读完本文你将掌握伪谱求解器的选型、参数树的正确修改方式、严格 JSON 计划 干运行脚本的工程化工作流、资源估算与输出诊断以及如何在绝不自动提交 MPI 作业的前提下完成从串行 pilot 到站点级 MPI 任务的安全交接。1. 设计哲学什么才算数值有效该 Skill 最核心的一条原则写在 SKILL.md 的开头一个正常跑完的算例、一个稳定的时间步长、一张平滑的图、一次干净的程序退出都不能作为数值收敛或物理有效的证据。上游 FluidSim 采用 CeCILL-2.1 许可证而本 Skill 的 MIT 前端许可证仅适用于 Skill 自身两者需要区分。因此任何使用本 Skill 的仿真都必须走一条强制工作流声明方程、单位或无量纲化、几何、边界、初始条件、强迫、可观测量与验收标准选择经过核实的求解器并检查它生成的默认参数创建严格的 JSON 计划显式声明 CPU、内存、磁盘、墙钟时间、输出文件、时间步、CFL、分辨率与去混叠dealiasing界限运行内置校验器与资源估算器生成并审查干运行dry-run脚本——脚本默认什么都不做除非用显式的 config-ID 确认执行先跑一个极小的串行 pilot检查预算、散度/约束、谱尾、CFL/时间步历史与输出增长独立地细化网格与时间步检查守恒/预算残差与可观测量的敏感性之后才准备站点相关的 MPI 作业且绝不自动提交或启动 MPI保留配置、脚本、uv.lock、包/平台/后端版本、日志、输出清单、校验和与重启谱系。如果物理假设、单位、边界条件、强迫语义、分辨率标准、资源限制或验收标准缺失应立即停止。2. 版本基线与可复现安装Skill 在 2026-07-23 核实过的基线如下最新稳定 PyPI 版本fluidsim0.9.02025-12-04 发布包元数据要求 Python3.11声明支持 3.11–3.14注意上游安装页仍写3.9应以包元数据为准见 installation.md已验证的配套版本fluidfft0.4.5、pyFFTW0.15.1MPI 可选mpi4py4.1.22026-05-16 发布。一个重要的坑裸装fluidsim0.9.0虽然能 import但ns2d.create_default_params()会失败——伪谱参数创建依赖 FluidFFT必须安装fftextra。FluidSim 0.9.0 声明了fluidsim-core0.8.6,0.9.1、h5py、h5netcdf、transonic0.6.2、xarray、rich、matplotlib3.3、scipy等核心依赖以及fftpyfftw0.10.4、fluidfft0.4.0与mpi两个 extra。推荐使用项目锁文件这是可复现性的正式记录uv init --python 3.11 uv add fluidsim[fft]0.9.0 fluidfft0.4.5 pyFFTW0.15.1 uv lock uv sync --frozen如果只是需要一个隔离的一次性环境uv venv --python 3.11 uv pip install fluidsim[fft]0.9.0 fluidfft0.4.5 pyFFTW0.15.1直接 pin 版本并不能冻结所有传递依赖的产物——uv.lock才是真正的可复现记录。此外不要跨不兼容的平台或 MPI ABI 复用同一个锁文件。3. FFT 后端与 MPI按需安装逐个核实FluidFFT 0.4.5 自带注册的方法有fft2d.with_pyfftw、fft3d.with_pyfftw以及安装 Dask 后的fft2d.with_dask。原生 FFTW 插件是独立版本化的uv add fluidfft-fftw0.0.1可选的原生插件及其方法详见 installation.mdfluidfft-fftw0.0.1顺序fft2d.with_fftw1d、fft2d.with_fftw2d、fft3d.with_fftw3dfluidfft-mpi-with-fftw0.0.1MPIfft2d.mpi_with_fftw1d、fft3d.mpi_with_fftw1dfluidfft-fftwmpi0.0.1MPI 版 FFTWfft2d.mpi_with_fftwmpi2d、fft3d.mpi_with_fftwmpi3dfluidfft-p3dfft0.0.1fft3d.mpi_with_p3dfft要求 P3DFFT 原生库。这些 0.0.1 插件版本是 2024 年 2 月独立的 PyPI 稳定版与 FluidFFT 0.4.5 各自独立版本化不能仅凭名字相似就相信兼容性——安装前要确认各 PyPI 项目链接到官方fluiddyn/fluidfftmonorepo、审查插件源码、通过uv.lock解析并保留产物哈希。MPI 插件还要求站点兼容的 MPI 实现、开发头文件、FFTW/PFFT/P3DFFT 库、编译器和经过审批的调度器工作流。MPI 是可选且原生的uv add mpi4py4.1.2 fluidfft-mpi-with-fftw0.0.1 fluidfft-fftwmpi0.0.1 uv lock使用前务必在本机实际发现已安装的方法fluidfft-get-methods不要照抄文档里的方法名就假设插件或 ABI 可用要先跑一个微小的变换/FluidSim pilot 并记录所选方法。mpi4py的 wheel 仍需要兼容的 MPI 运行时生产环境推荐使用系统/厂商 MPI绝不混用不同实现构建的mpi4py与启动器。关于 GPU 的明确结论FluidFFT 的 2019 年论文描述过 cuFFT 路径但 FluidFFT 0.4.5 的pyproject.toml没有声明任何 CUDA 依赖/extra 或 cuFFT 插件入口点其 CUDA 安装页面也未完成FluidSim 0.9.0 也没有 GPU extra。因此不要声称 GPU 加速也不要把无关的 CUDA wheel 当作 FluidSim 后端安装GPU 工作应视为需要单独验证的源码级实验性集成。4. API 快照与 0.9 参数修正推荐使用直接、带版本号的导入并通过所选Simul类生成默认参数后检查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 False0.9 的几个关键修正也是本 Skill 与旧资料的主要差异点CFL 字段是params.time_stepping.cfl_coef不是CFL时间相关强迫是params.forcing.tcrandom.time_correlation不是扁平的tcrandom_time_correlationNS2D 默认初始类型包含constant、noise、jet、dipole、from_file、from_simul、in_script但不要把它当作所有求解器的通用清单状态输出文件默认为state_phys_t*.nc谱文件为spectra1D.h5/spectra2D.h5标量均值是求解器相关的spatial_means.txt或 JSON-linesparams.output.sub_directory是相对FLUIDSIM_PATH的路径。ParamContainer会拒绝给未声明的属性赋值这能抓住大量拼写错误但它不检查单位、物理含义、数值收敛也不判断一个合法选项是否适用。因此永远从选定的Simul类生成默认值再检查、再修改详见 parameters.md。5. 求解器注册表与选型不要只看名字一个求解器 key 只标识一个实现。使用前必须在对应求解器的 0.9.0 API/源码中核实控制方程与预报变量、量纲/无量纲参数定义、几何与边界条件、空间离散/截断/去混叠、时间积分与稳定性约束、该求解器注册的初始条件与强迫类、守恒/耗散量与输出定义、已知验证算例与适用边界。主要 Cartesian CFD 求解器的导入路径如下from fluidsim.solvers.ns2d.solver import Simul # ns2d from fluidsim.solvers.ns2d.bouss.solver import Simul # ns2d.bouss from fluidsim.solvers.ns2d.strat.solver import Simul # ns2d.strat from fluidsim.solvers.ns3d.solver import Simul # ns3d from fluidsim.solvers.ns3d.bouss.solver import Simul # ns3d.bouss from fluidsim.solvers.ns3d.strat.solver import Simul # ns3d.strat0.9 注册表来自官方pyproject.tomlentry points与 solvers.md 中安装包交叉核对还包括类别Key说明二维浅水sw1l、sw1l.exactlin、sw1l.modified、sw1l.onlywaves单层浅水方程及其变体弹性板plate2d2D Föppl–von Kármán 板fvk不再是当前 entry-point key波动waves2d2D 波模型低维模型ad1d、ad1d.pseudo_spect、burgers1d、burgers1d.skew_sym、nl1d、models0d.lorenz、models0d.predaprey适合模型研究、测试与教学不要机械套用 Cartesian 配置 schema球面sphere.ns2d、sphere.sw1l源码含入口点但sphere可选依赖在包元数据中被注释需先确认并锁定fluidsht等依赖框架适配Base、BasePS、BaseSH、basil、dedalus只是入口点不代表外部运行时已安装同时支持注册表查找from fluidsim import import_simul_class_from_key Simul import_simul_class_from_key(ns2d.strat)但只允许传经过审查的字面量或与固定 allowlist 比对过的值——本 Skill 的生成器使用静态 key→模块映射从不做动态 import见 scripts/_schema.py 中的SOLVER_IMPORTS静态映射。选型时要特别注意NS2D 不是任意 3D 物理的廉价近似.bouss与.strat不可互换SW1L 算例本身不能验证海啸或地球物理预报。每种求解器都应在其精确锁定的环境中用Simul.create_default_params()print(params)做参数发现。6. 参数面详解从默认值到可复现的严格计划FluidSim 的参数由注册的算子、状态、时间推进、初始化、强迫和输出类组合而成是求解器与扩展相关的树不存在通用的扁平 schema。以下 NS2D 快照来自 2026-07-23 对固定版本环境的 introspection。6.1 顶层控制params.NEW_DIR_RESULTS True params.ONLY_COARSE_OPER False params.short_name_type_run params.nu_2 1e-3 params.nu_4 0.0 params.nu_8 0.0 params.nu_m4 0.0NEW_DIR_RESULTS主要控制加载/重启的输出行为官方文档说明为 true 时加载的仿真创建新目录false 时追加到旧目录需显式选择并保留父目录ONLY_COARSE_OPER用于快速加载/绘图不能处理全场nu_2/nu_4/nu_8/nu_m4是求解器耗散系数量纲取决于导数阶数与非量纲化。不要用高阶耗散掩盖分辨率不足要声明其定义并验证预算/谱尾/细化。6.2 算子operparams.oper.nx 48 params.oper.ny 48 params.oper.Lx 8 params.oper.Ly 8 params.oper.coef_dealiasing 2 / 3 params.oper.truncation_shape cubic params.oper.type_fft default params.oper.NO_KY0 False params.oper.NO_SHEAR_MODES FalseNS3D 还会增加nz/Lz。要记录网格间距、最大可表示/去混叠波数、coef_dealiasing、截断形状与相移格式、实际选中的 FluidFFT 方法与分解。2 的幂并不是普遍要求也不保证 FFT 最快应在目标后端上对允许的形状做基准测试。type_fftdefault会委托选择对 provenance 关键的运行要检查并记录实际方法。6.3 时间推进NS2D 0.9.0 默认值注意当前字段是cfl_coef不是CFLparams.time_stepping.USE_CFL True params.time_stepping.USE_T_END True params.time_stepping.cfl_coef None params.time_stepping.deltat0 0.2 params.time_stepping.deltat_max 0.2 params.time_stepping.it_end 10 params.time_stepping.max_elapsed None params.time_stepping.t_end 10.0 params.time_stepping.type_time_scheme RK4可复现有界计划的推荐显式设置params.time_stepping.USE_CFL True params.time_stepping.cfl_coef 0.5 params.time_stepping.deltat0 1e-3 params.time_stepping.deltat_max 1e-2 params.time_stepping.USE_T_END True params.time_stepping.t_end 0.1 params.time_stepping.max_elapsed 00:05:00cfl_coef0.5是显式的 pilot 选择而非普适推荐——可接受值取决于方程、格式、波、耗散与分辨率。0.9 文档化的伪谱格式名包括Euler、Euler_phaseshift、Euler_phaseshift_random、RK2、RK2_trapezoid、RK2_phaseshift、RK2_phaseshift_random、RK2_phaseshift_random_split、RK2_phaseshift_exact、RK4。随机相移格式还暴露params.time_stepping.phaseshift_random.nb_pairs与nb_steps_compute_new_pair。不要从格式名推断去混叠或收敛阶要验证其实现并测试更小的时间步。6.4 初始场NS2D 0.9 提供的初始类型constant、noise、jet、dipole、from_file、from_simul、in_script。嵌套字段示例params.init_fields.type constant params.init_fields.modif_after_init False params.init_fields.constant.value 0.0 params.init_fields.noise.velo_max 1.0 params.init_fields.noise.length 0.0 params.init_fields.from_file.path state_phys_t001.000.nc对于随机初始场要记录种子、进程数、后端、生成的谱/振幅与约束——种子本身不一定能在不同 MPI 分解或版本间保证逐位一致。对in_script初始化检查sim.state.keys_state_phys或求解器状态文档、填充规范变量、用文档化的物理→谱转换方法、必要时强制散度/约束与去混叠、推进前保存并检查初始化状态。不要复用旧例子里vx与ux这类猜测的 keyNS2D 0.9 文档显示物理 key 包括ux、uy、rot。6.5 强迫Forcing基础字段params.forcing.enable False params.forcing.type params.forcing.forcing_rate 1.0 params.forcing.key_forced None params.forcing.nkmin_forcing 4 params.forcing.nkmax_forcing 5NS2D 提供in_script、in_script_coarse、pseudo_spectral、proportional、tcrandom、tcrandom_anisotropic。一个当前的归一化随机强迫示例params.forcing.enable True params.forcing.type tcrandom params.forcing.forcing_rate 1.0 params.forcing.nkmin_forcing 4 params.forcing.nkmax_forcing 5 params.forcing.tcrandom.time_correlation based_on_forcing_rate注意nkmin_forcing/nkmax_forcing这两个整数乘的是算子波数间距不一定是物理波数要验证实际的强迫区域并在空间均值/预算中测量真实注入。归一化强迫字段包括params.forcing.normalized.constant_rate_of、type默认2nd_degree_eq与which_root默认minabs——实现可能通过解二次方程来使二次量的时间步平均注入匹配forcing_rate所以不要在没有验证所选类的情况下把forcing_rate称为能量注入。0.9 还会把两个随机种子与最后变化时间存入状态参数写入重启文件0.8.6 修复了时间相关强迫的重启行为旧检查点需要额外审查。6.6 输出常用控制params.output.HAS_TO_SAVE True params.output.ONLINE_PLOT_OK False params.output.period_refresh_plots 1 params.output.sub_directory bounded-pilot params.output.periods_print.print_stdout 0.1 params.output.periods_plot.phys_fields 0.0 params.output.periods_save.phys_fields 0.5 params.output.periods_save.spatial_means 0.05 params.output.periods_save.spectra 0.5 params.output.periods_save.spect_energy_budg 0.0NS2D 0.9 输出树还包括increments、spectra_multidim、temporal_spectra、spatiotemporal_spectra周期为 0 表示禁用该项。sub_directory在FLUIDSIM_PATH下创建应使用安全的单段标识符并预检配额、冲突与符号链接行为。HAS_TO_SAVEFalse是 smoke 测试的正确设置但不会产生重启检查点。7. 严格 JSON 计划与内置 CLI 工具链本 Skill 自带 6 个无依赖的本地工具全部输出严格 JSON、拒绝 URL/路径穿越/符号链接、强制硬上限、不使用网络或子进程、永远不会启动仿真见 scripts/ 目录。测试还验证了脚本禁止http、importlib、requests、socket、subprocess、urllib等导入与eval/exec/compile调用tests/fluidsim/test_static.py。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注以上命令以 Skill 根目录为工作目录仓库中的实际相对路径为skills/fluidsim/scripts/。7.1 配置校验器与示例配置solver_config_validator.py源码--example会输出一份完整的有界 pilot 配置其顶层结构包含schema_version、solver、parameters、scientific、resources、execution、provenance七个块。校验器覆盖已审查的 Cartesian CFD profile并且拒绝未知 key 与旧的CFL字段、非有限数与重复 JSON key拒绝无界的网格/资源/输出拒绝不安全的输出或重启路径拒绝缺少单位/无量纲化、边界、初始化、强迫、分辨率/去混叠、CFL/时间步、预算、细化或验收声明拒绝 CPU 超订mpi_ranks * threads_per_rank cpu_cores与串行/MPI 预览模式不一致scripts/_schema.py。scientific块必须包含units_or_nondimensionalization、boundary_conditions对 Cartesian 伪谱计划必须声明周期性、initial_conditions、forcing、resolution_and_dealiasing、timestep_and_cfl、conservation_and_budgets、convergence_and_refinement、acceptance_criteria。校验器只做机械校验其输出报告明确声明physical_validity_established: False与numerical_convergence_established: False测试中也验证了这一点见 tests/fluidsim/test_scripts.py。7.2 资源估算器grid_resource_estimator.py源码基于求解器维度、网格形状谱形状按最后一轴n//21估计、STATE_FIELD_COUNTS中每求解器的实/复场数估算驻留状态字节、峰值内存乘以工作区系数与安全系数与输出存储状态快照、谱、预算、标量、元数据并给出保守上限的notes明确这是规划包络而非实测 FluidSim 分配且runtime_estimated: False。可调参数包括--precision-bytes4/8默认 8、--workspace-factor2–64默认 8、--safety-factor1–10默认 1.5、--compression-ratio1–20默认 1。7.3 干运行脚本生成器与审批门simulation_dry_run.py源码把校验通过的 JSON 计划渲染成一个 Python 脚本。该生成器不导入 FluidSim、不运行任何代码生成的脚本默认只打印 JSON 干运行计划。真正执行需要同时满足--execute与精确匹配的--acknowledge-config-idpython3 run.py python3 run.py --execute --acknowledge-config-id REVIEWED_CONFIG_ID脚本内部还会通过OMPI_COMM_WORLD_SIZE、PMI_SIZE、PMIX_SIZE、MPI_LOCALNRANKS检测 MPI 尺寸并校验与计划的mode/rank 数一致拒绝符号链接输出根校验输出根不逃逸脚本目录设置OMP_NUM_THREADS用np.random.seed(random_seed)播种。生成的执行报告包含approval_gate、dry_run: True、job_submitted: False、mpi_launched: False、script_sha256等字段。测试验证了默认dry_run行为与只写已审查的本地脚本tests/fluidsim/test_scripts.py。MPI 计划只是命令预览工具永远不会调用启动器或调度器。8. 仿真工作流从环境验证到科学 pilot参考 simulation_workflow.md 的完整阶梯。第 1 步锁定环境——在隔离的精确环境中验证from importlib.metadata import version from fluidfft import get_methods assert version(fluidsim) 0.9.0 assert version(fluidfft) 0.4.5 print(sorted(get_methods()))记录实际 FFT 方法文档中写有但get_methods()里没有的方法就是没装。import 成功不算数要实际构造所选求解器的默认参数。第 2 步极小的无输出串行 smokefrom fluidsim.solvers.ns2d.solver import Simul params Simul.create_default_params() params.oper.nx params.oper.ny 8 params.oper.Lx params.oper.Ly 2.0 params.oper.coef_dealiasing 2 / 3 params.time_stepping.USE_CFL False params.time_stepping.deltat0 0.001 params.time_stepping.deltat_max 0.001 params.time_stepping.t_end 0.001 params.time_stepping.max_elapsed 00:01:00 params.init_fields.type constant params.init_fields.constant.value 0.0 params.output.HAS_TO_SAVE False params.output.ONLINE_PLOT_OK False sim Simul(params) sim.time_stepping.start()这只检查 import、FFT 构造、初始化与一个有界步进不测试目标物理、强迫、守恒、收敛、性能、输出或重启。第 3 步带输出/重启的 smoke——使用配额下的专用空输出根保持sub_directory为安全单段标识、ONLINE_PLOT_OKFalse、短t_end/max_elapsed、低分辨率、一两次物理状态保存与有界标量诊断。运行后先用工具检查实际文件名与增长python3 scripts/output_inventory.py --path fluidsim-runs python3 scripts/budget_summary.py --path fluidsim-runs第 4 步代表性科学 pilot——只增加足以锻炼目标初始条件路径、强迫类型与注入归一化、求解器特定状态与输出、FFT 后端、检查点与重启、分析代码的分辨率。pilot 通过后检查CFL 与deltat历史、散度或约束、能量/涡量/标量/势能预算、实测强迫输入与耗散、谱尾与去混叠污染、运行时/峰值 RSS/每 rank 不平衡/文件数/磁盘增长、NaN/Inf 与停滞推进。pilot 通过只允许规划细化研究不验证生产运行。9. 输出分析清单、预算与谱诊断9.1 物理状态格式FluidSim 0.9 的物理状态文件默认为state_phys_tTIME[_itITERATION].nch5py 无 MPI 支持时用h5netcdf或.h5h5py 为 MPI 版时两者底层都是 HDF5。文件包含/state_phys状态数据集属性含time、it、/info_simul求解器与参数 provenance、0.9 保存的状态参数含重启相关的强迫状态以及根属性。不要只凭文件名推断最新有效检查点要验证 HDF5 可读性、/state_phys、时间/迭代属性、期望数据集、参数、状态参数、大小与校验和。9.2 有界元数据清单python3 scripts/output_inventory.py \ --path run-directory \ --max-files 256 \ --max-hdf5-files 32 \ --max-datasets 2000 \ --max-attributes 5000该工具只接受--root内的本地路径、拒绝 URL/父级穿越/符号链接/硬链接/特殊文件/无界计数、对 HDF5/netCDF4 候选懒加载 h5py、报告数据集 shape/dtype/chunks/压缩/分配存储、只读短 allowlist 的标量 provenance 属性、不索引数据集、不跟随软链接或外部 HDF5 链接测试验证了外部链接external_not_followed计数见 tests/fluidsim/test_scripts.py。9.3 只读加载与绘图from fluidsim import load_sim_for_plot sim load_sim_for_plot(run-directory, hide_stdoutTrue) sim.output.spatial_means.plot() sim.output.spectra.plot1d() sim.output.phys_fields.plot(time1.0)官方 0.9 源码显示load_sim_for_plot会加载求解器与参数、设置常量初始化与粗算子、设置NEW_DIR_RESULTSFalse、HAS_TO_SAVEFalse、ONLINE_PLOT_OKFalse、为绘图选择默认/顺序 FFT并可在显式请求时合并旧运行的缺失参数。merge_missing_paramsTrue有助于加载旧元数据但不能证明旧结果在新版本下科学或数值等价。此外谱的 1D 均值load1d_mean()/2Dload2d_mean()在基类实现中返回字典使用前要检查 key。9.4 预算检查预算汇总工具python3 scripts/budget_summary.py \ --path run-directory \ --max-files 128 \ --max-records 200000 \ --max-datasets 256 \ --max-values-per-dataset 4096它用恒定内存聚合有限的空间均值支持 FluidSim key/value 文本与严格 JSON-lines、只汇总有界的谱/预算 hyperslab、对多维数据集取最新首轴记录、只有当最新记录整体满足值界时才输出求和、不跟随外部链接、不加载全场大数组并明确报告收敛/物理有效性未建立——这是 triage 汇总不是求解器感知的闭合计算。对每个控制预算应构建同一区间的存储量变化、实测强迫/输入、物理与数值耗散、符号/归一化一致的传递项、边界项只有周期性/模型支持才为零、残差并报告绝对与归一化残差、时间区间、差分方法、保存节奏与不确定性。9.5 分辨率与时间步诊断分辨率至少要看到去混叠截止的谱、文档化高波数尾带内的能量/方差量化、堆积/混叠迹象/各向异性、物理空间极值/梯度与求解器约束、同一物理问题的更细分辨率重复。幂律拟合本身不能验证级联或已解析仿真。时间步诊断要检查初值与最大deltat、CFL 驱动变化、快波/浮力/旋转尺度、扩散/超扩散极限、重启边界的不连续、以及更小deltat_max/cfl_coef的敏感性——不要因为没出现 NaN 就推断稳定。统计平稳性需要独立定义平稳性指标与 burn-in报告有效样本时长/数量跨种子或独立区间重复不要从短视觉平台期就标注统计平稳。10. 加载、重启与分辨率变更10.1 状态承载加载from fluidsim import load_state_phys_file sim load_state_phys_file( run-directory, t_approxlast, modif_save_paramsTrue, merge_missing_paramsFalse, init_with_initialized_stateTrue, hide_stdoutTrue, )这会构造全分辨率算子并加载状态可能很贵——先跑内存估算器不要仅仅为了查元数据就用它。默认modif_save_paramsTrue会禁用保存与在线绘图。加载状态对象不等于批准重启。10.2 受控 Python 重启先比较元数据python3 scripts/restart_compatibility.py \ --source state_phys_t001.000.nc \ --target-config restart-config.json该检查器源码读 HDF5 元数据与数据集名但不读场数组检查求解器 key 是否匹配blocker、oper.nx/ny/nz/Lx/Ly/Lz是否一致不一致是 blocker需走分辨率变更工作流、coef_dealiasing/type_fft变化与物理参数N/beta/c2/f/nu_*变化警告、目标t_end是否超过状态时间blocker、目标init_fields.type是否为from_fileblocker、来源版本是否 0.9.0警告、SHA-256 是否匹配blocker、时间相关强迫是否缺失状态参数blocker。返回compatible_for_mechanical_restart并同样声明物理有效性/数值收敛未建立。然后经批准后from fluidsim import load_for_restart params, Simul load_for_restart( run-directory, t_approxlast, merge_missing_paramsFalse, ) params.time_stepping.t_end 2.0 params.time_stepping.max_elapsed 00:10:00 params.NEW_DIR_RESULTS True sim Simul(params) sim.time_stepping.start()load_for_restart从/info_simul/params读取参数、设置init_fields.typefrom_file并指向所选状态文件默认NEW_DIR_RESULTSFalse——要显式选择追加还是新目录没有备份和校验和绝不追加到不可替换的运行。10.3 上游重启 CLI安全的第一步fluidsim-restart --only-check run-directory --t_end 2.0当前选项包括--only-check、--only-init、--new-dir-results、--t_approx、目标/累加的时间或迭代界、--merge-missing-params、--max-elapsed。避免对任何不可信或生成的文本使用--modify-params上游源码会把该选项的字符串交给 Python 代码执行本 Skill 的生成器从不生成该选项。该 CLI 不提供调度器资源限制在 MPI/调度器下运行是独立的显式操作。10.4 分辨率变更不要只改oper.nx/ny/nz就把旧状态文件当作直接兼容。FluidSim 提供fluidsim-modif-resolution run-directory 5/4这会在修改后的分辨率下创建新状态。使用前要盘点内存与磁盘插值/FFT 可能很贵、保留原状态、记录系数与源/输出哈希及实现版本、检查域/状态 key/归一化/约束、把子算例当作新数值实验、重跑瞬态/预算/谱/细化检查。不要自动运行也不要默认在大状态上运行。11. MPI/HPC 安全交接在串行 pilot 之后才考虑 MPI详见 advanced_features.md 的 MPI planning and safety向站点调度器申请目标分配绝不在本 Skill 内提交禁止自动调用mpirun、mpiexec、srun、qsub、sbatch、OAR 工具或 FluidDyn 集群提交器在该分配内验证锁定的 MPI/FluidFFT 环境手动启动一个极小的两 rank smoke验证 import 与 rank 身份在代表性小形状上对候选 FFT 方法做基准确认分解兼容性与本地数组尺寸设置显式的进程/线程亲和性设置每 rank 内存、墙钟时间、scratch、输出配额、信号/检查点行为扩规模前使用短的可重启 pilot。必要的预检还包括书面资源与输出估算、已批准分配与分区/账户、精确的 MPI 实现/ABI 与启动器、FFT 插件/原生库兼容性、rank/线程放置与超订检查、每 rank 本地形状不能有不受支持的零尺寸分解、rank 0 gather/输出风险、墙钟信号/检查点行为、文件系统配额/inode/条带策略与清理。输出行为会随 MPI 版 h5py 不同标准 h5py 通常由 rank 0 写汇总状态MPI h5py 可用mpiodriver——用微测试验证锁定的 h5py 构建与输出路径。2019 年论文的 FluidFFT 性能结论是硬件/形状/进程数相关的不要把它的最快方法或墙钟时间外推到当前集群。12. 科学验收门证据清单在解释任何结果之前必须满足SKILL.md 的 Scientific acceptance gate显式的量纲单位或完整的无量纲化映射正确的方程、周期几何/边界、初始状态、强迫与诊断定义分辨率与去混叠证据谱/尾、已解析梯度、求解器合适的小尺度判据时间步证据CFL 历史、最快波与耗散极限、更小步长比较包含强迫、耗散、传递与残差的守恒与预算检查带不确定性或敏感性报告的网格/时间细化与解析解、制造解、基准或独立复现结果的比较如适用完整 provenance 与重启谱系。永远不要仅凭参数值或图就把一个运行标注为DNS已收敛已验证稳态或物理正确。参数化研究不要默认在单脚本里直接循环启动仿真每个 case 物化一个严格配置、分配稳定 case ID 与种子、逐 case 校验/估算、聚合 CPU/内存并发/磁盘/文件/墙钟、只生成脚本、审查采样设计避免多因素含糊同时变化、通过已批准的外部工作流提交、无静默重采样地跟踪失败。流体仿真中断时保留日志与最后完整检查点把信号终止或墙钟受限的运行视为未完成直到检查点被盘点并验证不要只看字典序最新文件而不检查时间、迭代、HDF5 可读性与校验和恢复时绝不覆盖父状态每次继续前重跑兼容性检查器解释重启边界的任何预算不连续。13. 0.8 → 0.9 迁移速查从旧版 Skill 迁移时的关键差异依据 advanced_features.md 的 release notesPython 基线0.9.0 是3.11不再是3.9使用精确fluidsim0.9.0并锁定依赖伪谱默认参数需要fftextra用time_stepping.cfl_coef不是CFL用forcing.tcrandom.time_correlation不是扁平字段用plate2d不是fvk物理状态默认.nc而非.h5谱仍为.h5用spect_energy_budg.h5不要用带时间戳的预算 glob优先load_for_restart/fluidsim-restart --only-check保留状态参数与哈希0.9.0 重启文件存储状态参数、修复了重启文件名0.8.6 修复时间相关强迫的错误重启0.8.5 支持 Python 3.140.8.2 兼容 Python 3.12/NumPy 2.0/mpi4py 4.00.8.0 采用 Meson 构建系统未经过显式测试的转换/插件验证不要宣称 ParaView 直接兼容。14. 扩展开发与算子安全自定义强迫或初始条件要走求解器注册的接口如InScriptForcing*的compute_forcing_fft_each_time不要用旧示例里的 lambda monkey-patch状态 key 已变、局部谱布局依赖 FFT/MPI 后端、Hermitian/实值约束与归一化必须保留、字面量全局傅里叶索引不能跨分解移植。应在极小的顺序与 MPI 布局上用单元测试验证零净/目标注入、对称性与预算效应。对于sim.oper永远不要假设轴顺序、每 rank 全场、特定后端下的模态局部索引、所有后端的谱形状、gathered 数组能放进 rank 0 内存或裸 NumPy 求和与oper.sum_wavenumbers的归一化一致——使用文档化的算子方法并打印type(sim.oper)、sim.oper.axes、sim.params.oper检查。自定义 HDF5 读取要保持有界with h5py.File(spectra2D.h5, r) as handle: dataset handle[spectrum2D_E]; latest dataset[-1, :4096]先检查 shape/dtype/chunks/预期字节绝不对未知大场用dataset[...]或[:]遍历前检查 HDF5 链接。15. 进一步阅读本 Skill 的完整文档体系均位于仓库skills/fluidsim/下含每篇各自的 Sources (verified 2026-07-23) 溯源安装与 FFT/MPI 后端系统依赖、MPI ABI、HDF5-MPI、后端发现与验证阶梯依赖无关 CLI 帮助 → 隔离环境 smoke → 8x8/16x16 无输出单步 → 输出往返/重启 → 后端 FFT 测试 → 手动双 rank smoke → 代表性有界 pilot求解器注册表与选型0.9.0 全注册表、每求解器需核实的范围、选型问题清单仿真、pilot 与重启工作流13 步阶梯与失败/中断处理已验证参数面顶层/算子/时间推进/初始/强迫/输出全字段默认值与校验规则输出、绘图与预算分析文件格式、清单、预算闭合与谱/时间步/平稳性诊断强迫、算子、MPI 与迁移强迫架构、去混叠、时间格式、扩展开发、MPI 规划、参数化研究与 0.8→0.9 迁移。本地 CLI 工具源码位于 scripts/配套的合成测试位于 tests/fluidsim/其中test_scripts.py覆盖了严格 JSON 拒绝、资源估算边界、干运行生成器与重启兼容性比较等关键行为。【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考