はじめに
OUxSBLI はCUDA Fortranベースの圧縮性流体ソルバーです.なお,SBLIは衝撃波/境界層干渉(Shock/Boundary Layer Interaction:SBLI)です.OpenSBLI に着想を得て開発がスタートし,以下のような研究・学習ニーズを想定しています.
- 圧縮性乱流(SBLI・Taylor-Green Vortesx:TGVなど)のDNS / LES を自前で回したい
- 手間をかけてでもGPU向けに最適化されたコードを実装したい
- PythonからCFDコードを呼び出したい
CFDコードを書きたい欲を満たしたい
OUxSBLIは直交格子上および曲線座標上で圧縮性 Euler / Navier-Stokes / LES 方程式を高次精度有限差分法で解くことができ,2026年6月22日時点でv0.0.2がリリースされています.
| 要素 | 内容 |
|---|---|
| 言語 | CUDA Fortran(NVIDIA HPC SDK 24.x / 25.x) |
| 並列化 | MPI(GPU-aware 対応) |
| 出力 | VTK(.vtr, .vts)形式 → ParaView で可視化 |
| ビルド | CMake + fypp プリプロセッサ |
ソルバーの種類
| ソルバー | 用途 |
|---|---|
3D_solver/ |
3D 直交格子(DNS/LES) |
2D_solver/ |
2D 直交格子(動作確認・収束精度検証) |
3D_solver_curv/ |
3D 一般曲線座標格子(翼周り・圧縮コーナー) |
主な特徴
対流スキーム
| スキーム | 特徴 | 適したケース |
|---|---|---|
| KEEP | 運動エネルギーとエントロピーを離散的に保存.数値散逸なし | 滑らかな渦流(亜音速TGV) |
| SLAU / HRSLAU2 | 低散逸 AUSM 系.衝撃波に強い | SBLI,超音速TGV |
| Hybrid | Ducros センサでKEEP↔SLAU を自動切替 | 衝撃波と乱流が共存する領域 |
| Roe | 古典的な近似リーマン解法 | 強い衝撃波 |
GPU 最適化:AoS+SoA ハイブリッドメモリレイアウト
保存変数は Q(nx, 5, ny, nz) — Array of Structures(AoS)と Structure of Arrays(SoA)を組み合わせたハイブリッドレイアウトを採用しています.これにより,フラックス計算カーネルでのメモリアクセスパターンを GPU のキャッシュ特性に合わせて最適化しています.
GPU 最適化:Shared Memory タイル化
対流カーネル・粘性カーネルでは,スレッドブロック単位での Shared Memory タイリング を実装しています.グローバルメモリへのアクセスをオンチップのShared Memoryにステージングすることで,メモリ帯域幅の消費を抑えています.粘性カーネルでは pipelineMemcpyAsync を用いた非同期パイプライン転送も試験的に導入されています.
Python API
ouxsbli パッケージを使うと,Python から config.fypp と mod_globals.f90 を動的に書き換え,CMake ビルドからシミュレーション実行まで一括で行えます.スキームの比較研究などのパラメトリックスイープに便利です.将来的には機械学習モデルとの融合を見据えています.
クイックスタート
前提条件
- NVIDIA HPC SDK 24.x または 25.x
- CMake 3.18 以上
- fypp(
pip install fypp) - NVIDIA GPU(Ampere 以降推奨)
CUDA Fortran から実行
# 1. リポジトリをクローン
git clone https://github.com/htymjun/OUxSBLI.git
cd OUxSBLI
# 2. fypp をインストール
pip install fypp
# 3. NS Taylor-Green 渦ケースをビルド
cd 3D_solver/NSTGV
cmake -B build && cmake --build build -j
# 4. 実行(2 MPI ランク)
cd build && mpirun -n 2 ./a.out
VTK ファイル(Q00000.vtr, Q00001.vtr, …)が data/ ディレクトリに出力されます.ParaView で時系列として読み込めます.
スキームや精度を変える
config.fypp を編集して再ビルドするだけです.
# 3D_solver/NSTGV/config.fypp
#:set VISC = 'NS' # 'Euler', 'NS', 'LES'
#:set SCHEME = 'Hybrid' # 'KEEP', 'SLAU', 'Roe', 'Hybrid'
#:set ORDER = 6 # 2, 4, 6
#:set TVD = 'hybrid' # 'none', 'tvd', 'hybrid'
#:set BC_X = False # False → 周期境界
fypp が .f90.fypp テンプレートを展開し,設定に特化した Fortran コードを生成します.ランタイム分岐がなく,コンパイル時にスキームが確定するため,実行効率が高いです.
Python API から実行
from ouxsbli import Case
case = Case(
source = "3D_solver/NSTGV",
workdir = "/tmp/nstgv_run",
visc = "NS",
scheme = "SLAU",
accuracy = 6,
tvd = "hybrid",
nx = 128, ny = 128, nz = 128,
Re = 1600.0,
)
case.build()
case.run(nranks=2)
Case クラスが config.fypp と mod_globals.f90 を自動でパッチし,CMake ビルドと mpirun 実行をラップします.
バリデーション
超音速 Taylor-Green 渦(Re=1600, Ma=1.25)
Lusher & Sandham (2021, AIAA J.) の参照データと比較した結果,運動エネルギーとエンストロフィーの時間発展が良好に一致しています.
衝撃波境界層干渉(SBLI)
見栄えの良い可視化を示します.白色の等値面が衝撃波,カラフルな等値面が渦構造を表しています.

おわりに
OUxSBLIはCUDA Fortran による圧縮性流体シミュレーションコードとして,計算精度・GPU 性能・使いやすさのバランスを目指して開発を続けています.
詳細は公式ドキュメントおよび GitHub リポジトリをご参照ください.
- GitHub: https://github.com/htymjun/OUxSBLI
- ドキュメント: https://htymjun.github.io/OUxSBLI/
- DOI: https://doi.org/10.5281/zenodo.19396475
Issue や PR も歓迎しています.

