fluidsim について
FluidSimは、計算流体力学の研究者向けPythonフレームワークです。周期領域の流れを扱う擬スペクトルソルバーを備え、設定から実行、解析までを支援します。コンパイルによる高速化とMPI並列化にも対応します。
主な機能
- 012D・3D Navier–Stokesソルバー
- 02浅水流・成層流ソルバー
- 03FFTを用いた擬スペクトル法
- 04Pythran/TransonicコンパイルとMPI
- 05シミュレーション出力・解析ツール
活用シーン
- 012D乱流と渦ダイナミクスの研究
- 02海洋・大気の成層流シミュレーション
- 03MPIによる高解像度シミュレーション
- 04物理場・空間平均・スペクトルの解析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ crazymsn/ academic-skills --skill fluidsimインストール後、Claude Code で/fluidsimを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced_features.mdinstallation.mdoutput_analysis.mdparameters.mdsimulation_workflow.mdsolvers.md詳細
FluidSim
概要
FluidSim は、高性能な数値流体力学(CFD)シミュレーションのためのオブジェクト指向の Python フレームワークです。FFT を用いた擬スペクトル法により、周期領域の方程式を解くソルバーを提供し、Python の使いやすさを保ちながら Fortran/C++ に匹敵する性能を実現します。
主な強み:
- 複数のソルバー: 2D/3D ナビエ–ストークス、浅水方程式、成層流
- 高性能: Pythran/Transonic によるコンパイル、MPI 並列化
- 完全なワークフロー: パラメーター設定、シミュレーション実行、出力解析
- インタラクティブな解析: Python ベースの後処理と可視化
主な機能
1. インストールとセットアップ
適切な機能フラグを指定して、uv で fluidsim をインストールします:
# Basic installation
uv pip install fluidsim
# With FFT support (required for most solvers)
uv pip install "fluidsim[fft]"
# With MPI for parallel computing
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 ナビエ–ストークス (ns2d): 2D 乱流、渦力学
from fluidsim.solvers.ns2d.solver import Simul
3D ナビエ–ストークス (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ä frequency
浅水方程式 (sw1l): 地球物理学的流れ、回転系
from fluidsim.solvers.sw1l.solver import Simul
params.f = 1.0 # Coriolis parameter
ソルバーの完全な一覧と選択の指針については references/solvers.md を参照してください。
4. パラメーター設定
パラメーターは階層化されており、ドット記法でアクセスします:
領域と解像度:
params.oper.nx = 256 # grid points
params.oper.Lx = 2 * pi # domain size
物理パラメーター:
params.nu_2 = 1e-3 # viscosity
params.nu_4 = 0 # hyperviscosity (optional)
時間刻み:
params.time_stepping.t_end = 10.0
params.time_stepping.USE_CFL = True # adaptive time step
params.time_stepping.CFL = 0.5
初期条件:
params.init_fields.type = "noise" # or "dipole", "vortex", "from_file", "in_script"
出力設定:
params.output.periods_save.phys_fields = 1.0 # save every 1.0 time units
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()
高度な可視化: 3D 可視化には .h5 ファイルを ParaView または VisIt で開いてください。
詳細な解析ワークフロー、パラメトリックスタディの解析、データのエクスポートについては references/output_analysis.md を参照してください。
6. 高度な機能
カスタム強制: 乱流を維持する、または特定の力学を駆動する
params.forcing.enable = True
params.forcing.type = "tcrandom" # time-correlated random forcing
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()
# Analyze energy cascade
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 # stratification strength
params.nu_2 = 5e-4
params.time_stepping.t_end = 20.0
# Initialize with dense layer
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()
# Validate energy decay
df = sim.output.spatial_means.load()
# Compare with analytical solution
クイックリファレンス
ソルバーのインポート: 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、パラメトリックスタディ、カスタムソルバー