mcpField
F
fluidsim

fluidsim

github.com/kalarislabsその他7341 回インストール3 日前に更新
リポジトリ

fluidsim について

fluidsim は、FluidSim を使う Python 定義の数値シミュレーションを計画・検証するスキルです。計算流体力学に取り組む研究者向けで、実行完了を収束や物理的妥当性の証拠とせず、資源制限、再現可能な記録、数値検証を重視します。

主な機能

  1. 01ソルバーとパラメーターの選定・確認
  2. 02制限付き JSON 実行計画の作成
  3. 03制約の検証と格子資源の見積もり
  4. 04ドライランスクリプトと小規模試行の確認
  5. 05収支、スペクトル末端、時間刻みの検査
  6. 06再起動の履歴と来歴の記録

活用シーン

  1. 01周期境界の直交格子 CFD シミュレーションの計画
  2. 02小規模な逐次試行による設定確認
  3. 03格子と時間刻みの細分化結果の評価
  4. 04手動投入する MPI ジョブの準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill fluidsim

インストール後、Claude Code で/fluidsimを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
advanced_features.md
installation.md
output_analysis.md
parameters.md
simulation_workflow.md
solvers.md
scripts/
__init__.py
_common.py
_schema.py
budget_summary.py
grid_resource_estimator.py
output_inventory.py
restart_compatibility.py
simulation_dry_run.py
solver_config_validator.py

詳細

FluidSim

FluidSim 0.9.0 を、Python で定義する数値ソルバーのフレームワークとして使用します。特に、周期境界を持つデカルト座標系の疑スペクトル CFD に適しています。上流の FluidSim は CeCILL-2.1 ライセンスです。MIT ライセンスの表記は、このスキルにのみ適用されます。

このスキルでは、計算の完了、安定したタイムステップ、滑らかなプロット、またはプログラムの正常終了を、数値的収束や物理的妥当性の証拠とはみなしません。

必須ワークフロー

  1. 方程式、単位または無次元化、形状、境界条件、初期条件、強制項、観測量、合格基準を明示します。
  2. 検証済みのソルバーを選び、生成されたデフォルトパラメーターを確認します。
  3. CPU、RAM、ディスク、実行時間、出力ファイル、タイムステップ、CFL、解像度、デエイリアス処理の上限・下限を明示した、厳密な JSON 計画を作成します。
  4. 同梱のバリデーターとリソース推定ツールを実行します。
  5. ドライラン用スクリプトを生成して確認します。明示的に config-ID の承認を付けて実行しない限り、何も実行されません。
  6. 非常に小規模なシリアル試験を 1 回実行します。収支、発散・拘束条件、スペクトルの裾、CFL・タイムステップの履歴、出力の増加を確認します。
  7. 格子とタイムステップを個別に細分化します。保存則・収支の残差と、観測量の感度を確認します。
  8. その後に限り、サイト固有の MPI ジョブを準備します。MPI ジョブを自動で投入したり起動したりしてはいけません。
  9. 設定、スクリプト、uv.lock、パッケージ・プラットフォーム・バックエンドのバージョン、ログ、出力一覧、チェックサム、再起動の系譜を保存します。

物理的仮定、単位、境界条件、強制の意味、解像度の基準、リソース上限、または合格基準が不足している場合は中止します。

バージョンとインストール

2026-07-23 時点での確認内容:

  • PyPI の最新安定版リリース:fluidsim==0.9.0(2025-12-04)。
  • パッケージメタデータで必要とされる Python は >=3.11 で、Python 3.11~3.14 が記載されています。
  • 疑スペクトル法のパラメーター作成には FluidFFT が必要です。スモークテストでは fluidsim 単体のインポートは成功しましたが、fft エクストラをインストールするまでは ns2d.create_default_params() が失敗しました。
  • ここでテストした現在の関連パッケージのバージョン: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 のエクストラも宣言しています。対象クラスタ向けのネイティブソフトウェアスタックを監査し、バージョンを固定してください。

FluidFFT のドキュメントでは歴史的に cuFFT に言及していますが、FluidFFT 0.4.5 のパッケージメタデータでは CUDA エクストラもインストール済み GPU プラグインも宣言されておらず、CUDA のインストールページも未完成です。GPU アクセラレーションをうたったり、FluidSim のバックエンドとして無関係な CUDA ホイールをインストールしたりしてはいけません。GPU 利用は、別途検証が必要なソースレベルの実験的な統合として扱ってください。

システム依存関係、MPI ABI、HDF5-MPI、バックエンドの検出、検証については、インストールを参照してください。

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 配下の相対パスです。

ParamContainer は宣言されていない属性を拒否します。選択した Simul クラスから常にデフォルト値を生成し、値を変更する前に確認してください。 パラメーターを参照してください。

ソルバー

主な直交座標系 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.strat

0.9 のレジストリには、plate2d、sw1l の各種、waves2d、1D モデル、 0D モデル、球面ソルバー、フレームワークアダプターも含まれます。レジストリに 含まれているからといって、そのソルバーが科学的な問いに適しているとは限りません。 方程式、変数、幾何形状、境界条件、診断機能をソルバーのソースで確認してください。 ソルバーを参照してください。

強制と時間発展

強制の方法はソルバーごとに異なります。現在の正規化済み乱数の例:

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"

強制対象の変数、正規化の定義、波数帯、乱数シード/状態、注入目標、 実測された注入量を記録してください。FluidSim 0.9 は再起動用に状態パラメーターを 保存します。0.8.6 では時間相関のある強制に関する再起動時の動作が修正されました。

利用可能な擬スペクトル法には、Euler/RK2 の位相シフト変種、 RK2_trapezoid、RK4 があります。手法名の次数だけでは精度は保証されません。 CFL、高速波/拡散の制限、deltat_max、時間刻みの細分化を確認してください。 高度な機能を参照してください。

出力、読み込み、再起動

読み取り専用の解析には、次を使用します。

from fluidsim import load_sim_for_plot

sim = load_sim_for_plot("run-directory", hide_stdout=True)
sim.output.spatial_means.plot()
sim.output.spectra.plot1d()
sim.output.phys_fields.plot(time=1.0)

load_sim_for_plot は粗い演算子を使用し、保存とオンラインプロットを無効にします。 状態を保持するオブジェクトには、次を使用します。

from fluidsim import load_state_phys_file

sim = load_state_phys_file("run-directory", t_approx="last")

制御された再起動には、load_for_restart を使うか、まず fluidsim-restart --only-check を実行してください。信頼できないテキストに対して --modify-params を使用しないでください。このオプションに渡された Python コードを 上流の CLI が実行します。このスキルのジェネレーターは、このオプションを出力しません。 ソルバー、グリッド/領域、状態変数、バージョン、強制の状態、チェックサム、目標時刻、 出力先、リソース上限を確認してください。解像度の変更には、グリッドを黙って 編集するのではなく、専用のレビュー済みワークフローが必要です。 シミュレーションのワークフローと 出力解析を参照してください。

科学的な受け入れ基準

結果を解釈する前に、以下を確認してください。

  • 次元を持つ単位を明示するか、完全な無次元化の対応表を用意する。
  • 方程式、周期的な幾何形状/境界条件、初期状態、強制、診断の定義が正しい。
  • 解像度とエイリアス除去の根拠がある:スペクトル/裾、解像された勾配、ソルバーに適した小スケールの基準。
  • 時間刻みの根拠がある:CFL の履歴、最速波と散逸の制限、より小さい時間刻みとの比較。
  • 強制、散逸、移送、残差を含む保存則と収支を確認する。
  • 報告する観測量について、不確実性または感度評価を伴う格子/時間の細分化を行う。
  • 適切な場合は、解析解、製造解、ベンチマーク、または独立して再現された結果と比較する。
  • 完全な来歴と再起動の系譜を記録する。

パラメーター値やプロットだけを根拠に、実行結果を「DNS」「収束済み」 「検証済み」「定常」「物理的に正しい」と決して称さないでください。

同梱のローカルツール

すべてのツールは厳密な 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 を読み込み、上限付きのメタデータ/ハイパースラブを 調べます。外部リンクをたどったり、フィールド配列全体を読み込んだりすることはありません。

参考資料

日付付きの上流情報

2026-07-23 に PyPI 0.9.0、 FluidSim 0.9 のドキュメント、 リリースノート、 公式ソースミラー、 FluidFFT 0.4.5 のドキュメント、および FluidSim の主要論文(DOI 10.5334/jors.239) と FluidFFT の主要論文(DOI 10.5334/jors.238) に基づいて検証済みです。API に関する記述は公式ドキュメント/ソースを参照しています。参考資料に記載した手法/性能に関する記述は、引用した主要論文とそのベンチマーク設定の範囲に限定されています。

エージェントの運用手順

  1. 環境を確認します。 ライブラリのバージョン、単位、座標系、データ形式(FITS、CIF、HDF5、netCDF)を確認します。
  2. 入力を特定します。 データまたはユーザーから形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問してください。
  3. まず小規模なバージョンを実行します。 小さなグリッド、領域、またはサブセットで実行し、物理的に妥当か確認します。
  4. 上記の手順と参考資料を使用して、タスク全体を実行します。
  5. 結果を検証します。 単位と次元の整合性、保存則または既知の極限、数値収束を確認します。
  6. 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未解決の不確実性を明記します。
この状況が発生した場合対応
結果が既知の物理的限界に反する報告する前に単位、境界条件、ソルバーの許容誤差を確認します。
この手順に記載された関数、フラグ、エンドポイントがインストール済みバージョンに存在しないインストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認し、適宜調整してユーザーに伝えます。API を決して捏造しないでください。
必須の入力、識別子、パラメーターが曖昧ユーザーに質問するか、実行前に仮定を明示します。

誠実性に関するルール

  • 結果、パラメーター、識別子、引用、統計情報を決して捏造しないでください。実行または検証できない場合は、その旨を明確に伝えてください。
  • 定量的な結果には、必ず不確実性と数値許容誤差を記載してください。
  • ここに記載されたバージョン固有の詳細は古くなっている可能性があるため、インストール済みバージョンの公式ドキュメントで確認してください。
  • 費用が発生する操作、共有 GPU やクラウドクォータを消費する操作、個人データや患者データを扱う操作、または元に戻せない操作の前には、ユーザーに確認してください。

関連スキル

  • pylabrobot:PyLabRobot のラボ自動化リソース、液体ハンドリング計画、オフラインシミュレーション、対応デバイスとの統合を開発、レビューします。

コメント