mcpField
F
fluidsim

fluidsim

github.com/crazymsnその他2335 回インストール22 週間前に更新
リポジトリ

fluidsim について

FluidSimは、計算流体力学の研究者向けPythonフレームワークです。周期領域の流れを扱う擬スペクトルソルバーを備え、設定から実行、解析までを支援します。コンパイルによる高速化とMPI並列化にも対応します。

主な機能

  1. 012D・3D Navier–Stokesソルバー
  2. 02浅水流・成層流ソルバー
  3. 03FFTを用いた擬スペクトル法
  4. 04Pythran/TransonicコンパイルとMPI
  5. 05シミュレーション出力・解析ツール

活用シーン

  1. 012D乱流と渦ダイナミクスの研究
  2. 02海洋・大気の成層流シミュレーション
  3. 03MPIによる高解像度シミュレーション
  4. 04物理場・空間平均・スペクトルの解析

インストール

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

$npx skills add https://github.com/crazymsn/academic-skills --skill fluidsim

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

同梱ファイル

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

references/
advanced_features.md
installation.md
output_analysis.md
parameters.md
simulation_workflow.md
solvers.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、パラメトリックスタディ、カスタムソルバー

コメント