fluidsim
Pythonを使った数値流体力学シミュレーションのフレームワーク。Navier-Stokes方程式(2D/3D)、浅水方程式、成層流などの流体シミュレーションの実行や、乱流・渦動力学・地球物理流体の解析を行う際に使用します。FFTを用いた擬スペクトル法、HPC対応、充実した出力解析機能を提供します。
description の原文を見る
Framework for computational fluid dynamics simulations using Python. Use when running fluid dynamics simulations including Navier-Stokes equations (2D/3D), shallow water equations, stratified flows, or when analyzing turbulence, vortex dynamics, or geophysical flows. Provides pseudospectral methods with FFT, HPC support, and comprehensive output analysis.
SKILL.md 本文
FluidSim
概要
FluidSimは、高性能な計算流体力学(CFD)シミュレーション向けのオブジェクト指向Pythonフレームワークです。FFTを用いた疑似スペクトル法で周期領域方程式のソルバーを提供し、Fortran/C++に匹敵するパフォーマンスとPythonの使いやすさを両立しています。
主な強み:
- 複数のソルバー: 2D/3D Navier-Stokes、浅水方程式、成層流
- 高パフォーマンス: Pythran/Transonic コンパイル、MPI並列化
- 完全なワークフロー: パラメータ設定、シミュレーション実行、出力解析
- インタラクティブな解析: Pythonベースの後処理と可視化
コア機能
1. インストールとセットアップ
uvを使用して、適切な機能フラグでfluidsimをインストールします:
# 基本インストール
uv uv pip install fluidsim
# FFTサポート付き(ほとんどのソルバーに必須)
uv uv pip install "fluidsim[fft]"
# 並列計算用MPI付き
uv uv pip install "fluidsim[fft,mpi]"
出力ディレクトリ用の環境変数を設定します(オプション):
export FLUIDSIM_PATH=/path/to/simulation/outputs
export FLUIDDYN_PATH_SCRATCH=/path/to/working/directory
APIキーや認証は不要です。
完全なインストール手順と環境設定については references/installation.md を参照してください。
2. シミュレーションの実行
標準的なワークフローは5ステップで構成されます:
ステップ1: ソルバーをインポート
from fluidsim.solvers.ns2d.solver import Simul
ステップ2: パラメータを作成・設定
params = Simul.create_default_params()
params.oper.nx = params.oper.ny = 256
params.oper.Lx = params.oper.Ly = 2 * 3.14159
params.nu_2 = 1e-3
params.time_stepping.t_end = 10.0
params.init_fields.type = "noise"
ステップ3: シミュレーションをインスタンス化
sim = Simul(params)
ステップ4: 実行
sim.time_stepping.start()
ステップ5: 結果を解析
sim.output.phys_fields.plot("vorticity")
sim.output.spatial_means.plot()
完全な例、シミュレーションの再開、クラスタデプロイメントについては references/simulation_workflow.md を参照してください。
3. 利用可能なソルバー
物理的な問題に応じてソルバーを選択します:
2D Navier-Stokes (ns2d): 2D乱流、渦動力学
from fluidsim.solvers.ns2d.solver import Simul
3D Navier-Stokes (ns3d): 3D乱流、現実的な流れ
from fluidsim.solvers.ns3d.solver import Simul
成層流 (ns2d.strat, ns3d.strat): 海洋・大気流
from fluidsim.solvers.ns2d.strat.solver import Simul
params.N = 1.0 # Brunt-Väisälä周波数
浅水方程式 (sw1l): 地球物理的流れ、回転系
from fluidsim.solvers.sw1l.solver import Simul
params.f = 1.0 # Coriolis パラメータ
完全なソルバーリストと選択ガイダンスについては references/solvers.md を参照してください。
4. パラメータ設定
パラメータは階層的に構成され、ドット表記でアクセスします:
領域と解像度:
params.oper.nx = 256 # グリッドポイント
params.oper.Lx = 2 * pi # 領域サイズ
物理パラメータ:
params.nu_2 = 1e-3 # 粘度
params.nu_4 = 0 # ハイパー粘度(オプション)
時間ステッピング:
params.time_stepping.t_end = 10.0
params.time_stepping.USE_CFL = True # 適応的なタイムステップ
params.time_stepping.CFL = 0.5
初期条件:
params.init_fields.type = "noise" # または "dipole", "vortex", "from_file", "in_script"
出力設定:
params.output.periods_save.phys_fields = 1.0 # 1.0時間単位ごとに保存
params.output.periods_save.spectra = 0.5
params.output.periods_save.spatial_means = 0.1
Parametersオブジェクトはタイプミスに対して AttributeError を発生させ、サイレント設定エラーを防ぎます。
包括的なパラメータドキュメントについては references/parameters.md を参照してください。
5. 出力と解析
FluidSimは複数の出力タイプを自動生成し、シミュレーション中に保存します:
物理場: HDF5形式の速度、渦度
sim.output.phys_fields.plot("vorticity")
sim.output.phys_fields.plot("vx")
空間平均: 体積平均量の時系列
sim.output.spatial_means.plot()
スペクトラ: エネルギーとエンストロフィスペクトラ
sim.output.spectra.plot1d()
sim.output.spectra.plot2d()
前回のシミュレーションを読み込む:
from fluidsim import load_sim_for_plot
sim = load_sim_for_plot("simulation_dir")
sim.output.phys_fields.plot()
高度な可視化: .h5ファイルをParaViewやVisItで開いて3D可視化します。
詳細な解析ワークフロー、パラメトリック研究解析、データエクスポートについては references/output_analysis.md を参照してください。
6. 高度な機能
カスタム外力: 乱流を維持または特定の動力学を駆動
params.forcing.enable = True
params.forcing.type = "tcrandom" # 時間相関のある乱数外力
params.forcing.forcing_rate = 1.0
カスタム初期条件: スクリプト内で場を定義
params.init_fields.type = "in_script"
sim = Simul(params)
X, Y = sim.oper.get_XY_loc()
vx = sim.state.state_phys.get_var("vx")
vx[:] = sin(X) * cos(Y)
sim.time_stepping.start()
MPI並列化: 複数のプロセッサで実行
mpirun -np 8 python simulation_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}"
sim = Simul(params)
sim.time_stepping.start()
外力タイプ、カスタムソルバー、クラスタ投入、パフォーマンス最適化については references/advanced_features.md を参照してください。
一般的なユースケース
2D乱流研究
from fluidsim.solvers.ns2d.solver import Simul
from math import pi
params = Simul.create_default_params()
params.oper.nx = params.oper.ny = 512
params.oper.Lx = params.oper.Ly = 2 * pi
params.nu_2 = 1e-4
params.time_stepping.t_end = 50.0
params.time_stepping.USE_CFL = True
params.init_fields.type = "noise"
params.output.periods_save.phys_fields = 5.0
params.output.periods_save.spectra = 1.0
sim = Simul(params)
sim.time_stepping.start()
# エネルギーカスケードを解析
sim.output.spectra.plot1d(tmin=30.0, tmax=50.0)
成層流シミュレーション
from fluidsim.solvers.ns2d.strat.solver import Simul
params = Simul.create_default_params()
params.oper.nx = params.oper.ny = 256
params.N = 2.0 # 成層化強度
params.nu_2 = 5e-4
params.time_stepping.t_end = 20.0
# 密度層で初期化
params.init_fields.type = "in_script"
sim = Simul(params)
X, Y = sim.oper.get_XY_loc()
b = sim.state.state_phys.get_var("b")
b[:] = exp(-((X - 3.14)**2 + (Y - 3.14)**2) / 0.5)
sim.state.statephys_from_statespect()
sim.time_stepping.start()
sim.output.phys_fields.plot("b")
MPI対応高解像度3Dシミュレーション
from fluidsim.solvers.ns3d.solver import Simul
params = Simul.create_default_params()
params.oper.nx = params.oper.ny = params.oper.nz = 512
params.nu_2 = 1e-5
params.time_stepping.t_end = 10.0
params.init_fields.type = "noise"
sim = Simul(params)
sim.time_stepping.start()
以下で実行します:
mpirun -np 64 python script.py
Taylor-Green 渦の検証
from fluidsim.solvers.ns2d.solver import Simul
import numpy as np
from math import pi
params = Simul.create_default_params()
params.oper.nx = params.oper.ny = 128
params.oper.Lx = params.oper.Ly = 2 * pi
params.nu_2 = 1e-3
params.time_stepping.t_end = 10.0
params.init_fields.type = "in_script"
sim = Simul(params)
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.solver import Simul
パラメータを作成: params = Simul.create_default_params()
解像度を設定: params.oper.nx = params.oper.ny = 256
粘度を設定: params.nu_2 = 1e-3
終了時刻を設定: params.time_stepping.t_end = 10.0
シミュレーションを実行: sim = Simul(params); sim.time_stepping.start()
結果をプロット: sim.output.phys_fields.plot("vorticity")
シミュレーションを読み込む: sim = load_sim_for_plot("path/to/sim")
リソース
ドキュメント: https://fluidsim.readthedocs.io/
リファレンスファイル:
references/installation.md: 完全なインストール手順references/solvers.md: 利用可能なソルバーと選択ガイドreferences/simulation_workflow.md: 詳細なワークフロー例references/parameters.md: 包括的なパラメータドキュメントreferences/output_analysis.md: 出力タイプと解析方法references/advanced_features.md: 外力、MPI、パラメトリック研究、カスタムソルバー
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- davila7
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。