この文書では、WSL2のUbuntu24.04上でLBM(格子ボルツマン法)流体解析ツールXLBを活用する方法を紹介します。
「XLB(Accelerated Lattice Boltzmann)」は、Autodeskが公開している、GPUによる高速計算と機械学習との連携を重視したPython製LBM(格子ボルツマン法)ライブラリです。
最大の特徴は、NVIDIA Warp、Google JAX、Autodesk Neonなどの計算バックエンドを利用できる点です。いずれも、PythonコードからGPUを活用した高速なLBM計算を比較的容易に実装できます。
XLB公式サイト:https://www.research.autodesk.com/publications/xlb-differentiable-massively-parallel-lattice-boltzmann-library-python/
XLB公式GitHubリポジトリ
この記事【05】は、以下のJAXのCPU計算の導入手順【01】を参考にして、JAXのGPU計算の検証を試みています。
Autodesk Neonに期待する理由
LBMにおけるマルチ解像度格子は、流れの変化が大きい場所だけを細かく計算し、計算量を削減するために重要です。例えば、円柱や球の周りの流れでは、物体表面付近に境界層が形成され、速度や圧力が急激に変化します。一方、物体から離れた領域では流れの変化が比較的小さいため、同じ細かさの格子を全領域に配置する必要はありません。
そこで、物体周辺には細かい格子を配置し、遠方には粗い格子を配置します。また、自動車周辺の空力解析では、車体表面や後流領域を高解像度にし、遠方の空間を低解像度にすることで、解析精度を維持しながら計算セル数を大幅に削減できます。
さらに、血流解析でも、血管壁付近を細かく、血管中心部を比較的粗くすることが考えられます。このようにマルチ解像度格子は、「必要な場所に計算資源を集中させる」ことで、精度と計算コストを両立する技術です。
現在のXLBには、マルチ解像度格子(Grid Refinement)の機能が公開されています。現在のXLB公式READMEでは、Neonバックエンドについて、以下の機能を実装していると記述されています。
「Multi-resolution simulations・Nested cuboid grids・Grid refinement・複数のkernel-fusion戦略」
ただし、重要な条件があります。マルチ解像度格子は、現在のXLBでは、【Neonバックエンド】 を対象としています。公式READMEでも、「 Neon backend enables ... single-GPU multi-resolution epresentations」と説明されています。
したがって、現在使われているJAX CPU/GPU環境で、そのままマルチ解像度例題を動かす、という話ではありません。 これまでに構築した「JAX-CPU・JAX-GPU」とは別に、環境構築します。
特に公式READMEでは、Neonの導入について、以下を使用する方法が示されており、Neonはカスタム版Warpを使用すると説明されています。また、WarpバックエンドとNeonバックエンドを同じ環境に入れないよう注意されています。
pip install '.[neon]'
このNeonは、XLBを開発したAutodeskの開発のバックエンドであり、ある意味で、XLBの性能を、最も発揮させるバックエンドかもしれません。導入に関しても、AutodeskのXLBリポジトリを用意してから、そこからバックエンドの「Neon」を導入し、さらにLBM解析ツール「XLB」も導入する手順です。
XLBに付属するマルチ解像度格子の例題
確認しました。XLBには、現在の main ブランチに実際に動かせるマルチ解像度格子の公開例題があります。 具体的に言うと、少なくとも次の3つが確認できます。
1:multires_flow_past_sphere_3d.py
XLB公式例題:multires_flow_past_sphere_3d.py
これの内容は、「3次元球周り流れ + マルチ解像度LBM」 です。具体的には、球の周辺や後流部分を細かくし、遠方を粗くする構成になっています。これは、【04:例題flow_past_sphere_3d.pyの分析】の、マルチ解像度格子対応となっています。
公式コードの説明でも、nested cuboidによるmulti-resolution domainの中で、球周りのPoiseuille流を計算する例題と明記されています。
2:multires_windtunnel_3d.py
XLB公式例題:multires_windtunnel_3d.py
こちらはさらに実用的で、「風洞+物体+マルチ解像度」 という構成です。球周り流れの例よりも、実際のCFDに近い形で、物体(自動車の簡易モデル)回りを全体よりも細かい格子として、効率的な計算を実現するのに適しています。現在のmainにも公開されています。
3:mlups_3d_multires.py,4:mlups_3d.py
こちらは物理現象を見るためというより、「マルチ解像度LBMの性能を測定するための例題」 です。
以上を踏まえると、最初にマルチ解像度例題を勉強するのであれば、【04:例題flow_past_sphere_3d.pyの分析】に対応した、1:multires_flow_past_sphere_3d.py から始めるのが良さそうです。
実はスクリプトを確認したところ、「1:multires_flow_past_sphere_3d.py」と「2:multires_windtunnel_3d.py」は、いずれもマルチ解像度の設定において、物体の定義にSTLファイルを利用します。
しかしなぜか?、どちらもXLBの公式リポジトリには含まれず、関連するウエブを検索しても対応するSTLファイルが見つかりません。
特に1は単純な球形ですので、対応したファイルが確定できませんでした。2は「Ahmed_25_NoLegs.stl」の指定があり、これに関連するファイルが見つけられたので、この【05】の検証では、「2:multires_windtunnel_3d.py」 を用いることにします。
この「Ahmed body(アメッド・ボディ)」とは、自動車の外部空力特性を研究・検証するために開発された簡略化された自動車の形状モデルです。1984年にS.R. Ahmed氏らによって初めて提案され、現在では数値流体力学(CFD)ソフトウェアの予測精度を測る世界的な標準ベンチマークとして広く用いられています。
この形状ファイルについては、次の【06】の記事で例題multires_windtunnel_3d.pyの分析で、詳しく調べたいと思います。ここでは、マルチ解像度の例題を、XLBで動作させることを目的とします。
この「マルチ解像度」は、実はかなり新しい機能です。今回確認して重要だったのが、XLBのコミット履歴です。マルチ解像度機能は、**3f8b350 — “Multi-res grid refinement + Neon backend support (#159)”**という大きな変更で追加されています。
このコミットでは、なんと92ファイル、11,577行以上の追加が行われています。つまり、単なる実験的な一機能ではなく、Grid Refinementを構成するためのかなり大きな機能群がXLBに追加されたと見ることができます。
なお、現在のXLBでは正式に位置付けられている機能であり、現在の公式READMEでも、「Neon backend provides grid refinement capabilities for multi-resolution simulations.」と明記されています。
また、インストールについても、以下のNeon専用の導入方法が掲載されています。NeonはWarpのカスタムforkを使用するため、通常のxlb[warp]やxlb[cuda]環境とは分ける必要があります。
これまで用いたバックエンド「Google JAX」は、CPU,GPUのいずれでも動作しました。しかし、Autodesk Neonは、GPUが前提のバックエンドなので、CPU環境では動作しません。
git clone https://github.com/Autodesk/XLB.git
cd XLB
pip install -r requirements.txt
pip install '.[neon]'
| 例題 | 内容 | バックエンド | マルチ解像度 |
|---|---|---|---|
multires_flow_past_sphere_3d.py |
球周り流れ | Neon | ✅ |
multires_windtunnel_3d.py |
風洞流れ | Neon | ✅ |
mlups_3d_multires.py・mlups_3d.py |
性能評価 | Neon | ✅ |
XLBのバックエンドとしてのNeon
XLBはLBMの高速処理を実現するために、GPUの活用を前提としています。今回は、マルチ解像度機能を実現するために、Autodesk Neonをバックエンドとして用いることにします。
【Autodesk Neonバックエンド】
大規模計算や格子細分化(Grid Refinement)を目的とした新しいバックエンドです。Neonは、GPU上の格子ベース計算を効率的に実行するためのプログラミングモデルです。XLBでは特に、大規模なLBM計算への対応を目的に利用されています。
特徴としては、
マルチGPU計算に対応 大規模格子に対応 格子細分化に対応 単一GPUでもマルチ解像度計算が可能 Warpを基盤とした高速計算技術を利用
例えば、通常は計算領域全体を同じ格子幅で計算します。Neonでは、必要な場所だけ細かくするような計算が可能です。そのため、物体周辺や渦の発生部分だけ計算精度を高めるといった大規模CFDに適しています。
Autodesk Neonの概要
Neonは、Autodeskが開発した、大規模計算や格子細分化(Grid Refinement)を目的としたPythonオープンソースライブラリです。
Neon公式解説サイト:https://www.research.autodesk.com/publications/neon-a-multi-gpu-programming-model-for-grid-based-computations/
Neon公式GitHubリポジトリ
失礼しました。**Autodesk Research の「Neon」**ですね。XLBとも関連する、AutodeskのHPC向けのグリッド計算フレームワークの Neon を指しているものとして書き換えます。
NeonはJAXとは性格がかなり異なり、グリッドベースの大規模数値計算をGPU・マルチGPUで高速化するためのフレームワークです。Autodesk Researchの論文では、LBM流体解析、有限差分Poisson解析、有限要素による線形弾性解析などへの適用が示されています。:chatgpt-content-reference{index="0"}
主な特徴
-
グリッドベース計算に適したプログラミングモデル:
Neonは、格子(Grid)上で計算を行う数値シミュレーションを対象としたフレームワークです。格子データを主要なデータ構造として扱い、流体解析、熱伝導解析、構造解析などの大規模な数値計算に利用できます。Autodesk Researchでは、LBMによる流体解析や有限要素法による線形弾性解析などへの適用例が示されています。 -
GPU・マルチGPUに対応:
NVIDIA GPUを利用した高速な計算に対応しており、単一GPUだけでなく、**1ノード内の複数GPU(Multi-GPU)**を利用した大規模計算を想定しています。研究論文では8 GPU構成によるベンチマークも報告されています。 -
バックエンドを意識せずに計算を記述:
Neonでは、アプリケーション側の計算記述と、CPU・単一GPU・マルチGPUなどの計算環境を分離する考え方が採用されています。そのため、計算の本質的な部分を変更せずに、異なるハードウェア構成へ展開できることを目指しています。 -
CUDAを利用したGPU高速化:
Neonの実装はNVIDIA GPUを対象としており、CUDAを利用してGPU上で計算を実行します。特に、大規模な格子計算において、メモリ転送と計算をオーバーラップさせるなど、GPUの性能を引き出すための最適化が考慮されています。 -
LBM・CFDとの親和性:
Neonは、Autodesk Researchが開発しているXLBなどの高速CFD技術とも関連しています。Autodesk Researchでは、非一様格子(Non-uniform Grid)やマルチGPUによるLBM計算へのNeonの利用が検討されています。:chatgpt-content-reference{index="5"}
Neonの動作環境
まず初めに、ここで取り組むNeonの動作環境の概要を示しておきます。
Windows 11
├─ NVIDIA GPU (Driver)
└─ WSL2 (Ubuntu 24.04 LTS: Ubuntu-24.04-Neon)
└─ Neon用のPython仮想環境(XLBneon)
├─ Neon
├─ CUDA (13.2)
└─ XLB (Lattice Boltzmann Method)
ここでは、Windowsで手軽に利用できるUbuntu環境として、「WSL2上のUbuntu 24.04 LTS」 を用いることにして、ここにAutodesk Neon用のXLB解析環境を構築することにします。
WSL2では、Windows側にインストールされたNVIDIA GPUドライバを利用して、WSL上のUbuntuからNVIDIA GPUを利用できます。そのため、Ubuntu側にWindows用のNVIDIA GPUドライバを改めてインストールする必要はありません。
一方、NeonはJAXのようにPythonパッケージをインストールするだけでGPU計算環境が完成するものではありません。NeonはNVIDIA GPUを対象としたHPC向けのフレームワークであり、CUDAを利用してGPU計算を実行します。Autodesk ResearchのNeon研究資料でも、実装はCUDAを利用し、NVIDIA GPUを対象としていることが説明されています。
また、Neonは単一GPUだけでなくMulti-GPUを強く意識した設計になっています。Autodesk Researchの資料では、CPU、単一GPU、単一ノードのMulti-GPUといったバックエンドを、ユーザーコードを変更せずに切り替えることを目指した設計が説明されています。
特に、「XLB → JAX → GPU」と「Neon → CUDA → GPU」の違いを説明すると、XLBを学んだ後にNeonへ進む流れがかなり理解しやすくなります。
なお、Autodesk Researchでは、NeonをXLBの高速化やMulti-GPUによるLBM計算と関連付けて研究しており、非一様格子(grid refinement)についてもNeonのMulti-GPU機能を利用する方向が示されています。
バックエンドNeonの条件
【対応オペレーティングシステム(OS)とアーキテクチャ】
Autodesk ResearchのNeonは、グリッドベースの数値計算を対象としたマルチGPUフレームワークです。Neonは現在、主にLinux環境のx86_64およびARM環境を対象としており、NVIDIA GPUを利用する場合はCUDAを使用します。Neonは研究プロジェクトとして継続的に開発されているため、バージョンによって対応環境やAPIが変わる可能性があります。
- Linux: x86_64 / ARM
- GPU: NVIDIA GPU
- GPUバックエンド: CUDA
- CPU: マルチコアCPUにも対応
- GPU計算: 単一GPUおよびマルチGPU
- Windows: Windowsネイティブ環境よりも、WSL2上のLinux環境を利用する構成が適しています
Neonの公開資料では、現在の実装は CUDAを利用し、NVIDIA GPUを対象としていると説明されています。また、単一ノード上の複数GPUを利用した計算を主な対象としています。
【推奨されるGPUハードウェアスペック】
NeonをNVIDIA GPUで利用する場合、JAXのように「Compute Capability 7.5以上」といったNeon独自の最低GPU条件を設定するよりも、使用するCUDAバージョンに対応したNVIDIA GPUを選択するという考え方が適切です。
- 基本利用(動作確認・小規模計算): NVIDIA GPU、VRAM 8GB程度以上
- 実用的なLBM・数値計算: NVIDIA GPU、VRAM 16GB〜24GB以上
- 大規模計算: NVIDIA GPU、VRAM 24GB以上
- マルチGPU計算: 複数のNVIDIA GPUに加えて、GPU間通信性能も重要
- GPUアーキテクチャ: 使用するCUDAが対象とするCompute Capabilityを持つNVIDIA GPU
- GPUメモリ: 計算する格子サイズや変数の数に応じて必要量が増加するため、大規模LBMではVRAM容量が重要
Neonの研究論文では、NVIDIA A100を用いた単一GPUおよび8 GPU構成によるLBM計算が評価されています。また、LBMだけでなく、有限差分によるPoisson方程式や有限要素法による線形弾性問題についても、8 GPU環境でのスケーリングが評価されています。
なお、「VRAM 8GB/16GB/24GB」という区分はNeon公式の最低要件ではありません。これはXLBやLBMなどの格子ベース数値計算を実際に行う場合の実用上の目安です。
特にLBMでは、格子点ごとに多数の分布関数や物理量を保持するため、格子サイズが大きくなるほどGPUメモリの使用量も増加します。そのため、NeonをXLBのバックエンドとして使用する場合には、GPUの演算性能だけでなくVRAM容量が重要な条件になります。
また、Neonの大きな特徴は、単一GPUの高速化だけではなく、複数GPUを利用した大規模計算にあります。Autodeskの研究では8基のNVIDIA GPUを用いた評価が行われており、GPU間通信性能がマルチGPU計算の性能に影響します。
NeonとJAXのGPU条件の違い
今回の説明では、ここを明確にしておくと分かりやすいと思います。
| 項目 | JAX | Neon |
|---|---|---|
| 主な用途 | 数値計算・機械学習 | グリッドベースHPC |
| GPU | NVIDIA GPU | NVIDIA GPU |
| GPU API | CUDA | CUDA |
| GPU条件 | CUDA対応GPU、CUDA 13ではSM 7.5以上 | 使用するCUDAに対応するNVIDIA GPU |
| VRAM | 計算規模に依存 | 計算規模に依存 |
| 単一GPU | ○ | ○ |
| マルチGPU | ○ | 主要な対象 |
| CPU | ○ | ○ |
| 主な計算対象 | 配列計算 | LBM・FDM・FEMなど |
| XLBとの関係 | XLBのJAXバックエンド | XLBのNeonバックエンド |
特にXLBでは、現在のREADMEで Neonバックエンドが「multi-GPU dense and single-GPU multi-resolution representations」を提供するバックエンドとして説明されています。また、Neonを使用する場合は .[neon] をインストールする構成になっており、Neon用wheelはLinux x86_64およびLinux ARMでPython 3.11〜3.14を対象としています。:chatgpt-content-reference{index="4"}
Neonの場合は「CUDA 13ならSM 7.5以上」のようなJAX固有の条件をそのまま移植しないことがポイントです。 NeonはCUDAを基盤とする研究用HPCフレームワークなので、「対応するCUDA+NVIDIA GPU+十分なVRAM+必要に応じて高速なGPU間通信」 という説明の方が適切です。
動作環境Ubuntu-24.04-XLBneonの準備
ここでは、「WSL2上のUbuntu24.04LTS」を用いることにして、XLB+Neon用のPython環境を作ることにします。初めて取り組む方は、以下の手順でWSL2上にUbuntu24.04を、導入してください。
WSL2上に複数のUbuntu24.04を利用する場合には、基盤となるUbuntuを導入して、これをexportしてから、目的の環境としてimportします。具体的な以下の手順で行います。環境名としては「Ubuntu-24.04-XLBneon」とします。
PS C:\Users\ryos> wsl --import Ubuntu-24.04-XLBneon .\WSL2VM\Ubuntu-24.04-XLBneon .\Ubuntu-24.04-Base.tar
[======================== 41.6% ]
↓
この操作を正しく終了しました。
PS C:\Users\ryos> wsl -l -v
NAME STATE VERSION
* Ubuntu-24.04 Stopped 2
Ubuntu-24.04-XLBneon Stopped 2
PS C:\Users\ryos> wsl -d Ubuntu-24.04-XLBneon
ryos@dalab2403sv01:/mnt/c/Users/ryos$
この導入で、作成したUbuntu-24.04-XLBjneonを起動したとき、プロンプトが#でroot環境の時には、先のQiitaに示した手順で、一般ユーザー(ここではryos)にしておきます。
Ubuntu環境を起動して、最新「Ubuntu 24.04.5 LTS」に更新しておきます。
ryos@dalab2509dt01:/mnt/c/Users/ryos$ cd
ryos@dalab2509dt01:~$ sudo apt update
[sudo] password for ryos:
:
ryos@dalab2509dt01:~$ sudo apt upgrade
:
ryos@dalab2509dt01:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.5 LTS
Release: 24.04
Codename: noble
NVIDIA GPUの確認
既にWindowsに、NVIDIA GPUのドライバが導入されている状態とします。ここでのGPUドライバは、最新版ではなく、NVIDIA Sim/Labの利用を前提として、バージョン595.97としています。
ここで、Neonで GPUを使用する場合、Neonが使用するCUDAバージョンに対応したNVIDIA Driverが必要となます。あとで確認してみます。
Windowsでの状態は、NVIDIA コントロールパネルで確認すると、以下の通りです。

WSL上のUbuntuでの状態は、コマンドnvidia-smiで確認すると、以下の通りです。
ryos@dalab2403sv01:~$ nvidia-smi
Thu Sep 24 09:46:30 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.58.02 Driver Version: 595.97 CUDA Version: 13.2 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA RTX A4500 On | 00000000:01:00.0 On | Off |
| 30% 32C P8 14W / 200W | 903MiB / 20470MiB | 1% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
CUDA Toolkitの導入と確認
NeonでCUDA Toolkitが必要となるのは、NeonがNVIDIA GPU上で実行するGPUカーネルやマルチGPU向けの数値計算処理をCUDA基盤上に実装しているためです。
CUDA Toolkitには、GPU用コードをコンパイルするnvcc、GPU実行時に必要なCUDA Runtime(libcudart)、行列演算を高速化するcuBLAS、疎行列・ベクトル演算などに利用されるcuSPARSEといったライブラリが含まれています。
NeonのPython APIから呼び出される共有ライブラリも、これらのCUDA Runtimeライブラリに依存します。
一方、NVIDIA DriverはGPUをOSから利用するための基盤であり、CUDA Toolkitとは役割が異なります。
Driverだけでは、Neonが必要とするCUDA Toolkit側の開発用コンパイラや各種ライブラリは提供されません。
そのため、Neonでは「NVIDIA Driver+CUDA Toolkit」という2層の環境が必要になります。
今回の環境では、Windows側のNVIDIA DriverをWSL2から利用し、Ubuntu側にCUDA Toolkitを導入して、その上でNeonとXLBを動作させる構成になります。
ここで、導入する CUDA Toolkitのバージョンを考えます。上記のnvidia-smiの出力により、「CUDA Version: 13.2」が確認できました。しかし、導入するNeon関連のバイナリは、CUDA 12系を前提としているようです。
そこで、「バージョン12.8」 を指定し、NVIDIA CUDA リポジトリを追加して、以下の手順でCUDA Toolkitを導入します。なお、CUDA 13.2は、直前までのバージョン12.8には対応しているようです。
CUDA Toolkit 12.8の導入
念の為、ここで重要なのは、sudo apt install nvidia-cuda-toolkit に変更しないことです。今回はNeonがCUDA 12系を必要としているので、NVIDIA公式CUDAリポジトリから12.8を入れましょう。
【1. NVIDIA CUDAリポジトリを登録】
Ubuntu 24.04 + WSL2なので、NVIDIA公式のCUDA 12.8リポジトリを使用します。以下の手順の最後に「developer.download.nvidia.com」が確認できたら、CUDAリポジトリが登録されています。
ryos@dalab2403sv01:~$ cd
ryos@dalab2403sv01:~$ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
:
cuda-keyring_1.1-1_all.d 100%[==================================>] 4.23K --.-KB/s in 0s
2026-09-26 21:08:13 (619 MB/s) - ‘cuda-keyring_1.1-1_all.deb’ saved [4328/4328]
ryos@dalab2403sv01:~$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
:
ryos@dalab2403sv01:~$ sudo apt update
Get:1 https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64 InRelease [1581 B]
:
All packages are up to date.
【2. CUDA Toolkit 12.8をインストール】
準備ができたので、以下のように「CUDA Toolkit 12.8」を導入します
ryos@dalab2403sv01:~$ sudo apt install cuda-toolkit-12-8
:
Setting up openjdk-21-jre:amd64 (21.0.12.1+1-1~24.04.4) ...
Setting up default-jre-headless (2:1.21-75+exp1) ...
Setting up default-jre (2:1.21-75+exp1) ...
Setting up cuda-nvvp-12-8 (12.8.93-1) ...
Setting up cuda-nsight-12-8 (12.8.90-1) ...
Setting up cuda-visual-tools-12-8 (12.8.2-1) ...
Setting up cuda-tools-12-8 (12.8.2-1) ...
Setting up cuda-toolkit-12-8 (12.8.2-1) ...
【3. インストール確認】
まず、正しくCUDA Toolkit 12.8が導入できたかを、含まれるコンパイラnvccで、以下の手順で確認します。
ryos@dalab2403sv01:~$ /usr/local/cuda-12.8/bin/nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Fri_Feb_21_20:23:50_PST_2025
Cuda compilation tools, release 12.8, V12.8.93
Build cuda_12.8.r12.8/compiler.35583870_0
上記のように、出力に「Cuda compilation tools, release 12.8」と表示されます。
さらに、ライブラリを、以下の手順で確認します。コマンドの出力のようになれば、大丈夫です。
ryos@dalab2403sv01:~$ ls -l /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcudart.so*
lrwxrwxrwx 1 root root 15 Feb 13 2025 /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcudart.so -> libcudart.so.12
lrwxrwxrwx 1 root root 20 Feb 13 2025 /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcudart.so.12 -> libcudart.so.12.8.90
-rw-r--r-- 1 root root 728800 Feb 13 2025 /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcudart.so.12.8.90
ryos@dalab2403sv01:~$ ls -l /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcublas.so*
lrwxrwxrwx 1 root root 15 Mar 20 2026 /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcublas.so -> libcublas.so.12
lrwxrwxrwx 1 root root 21 Mar 20 2026 /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcublas.so.12 -> libcublas.so.12.8.5.5
-rw-r--r-- 1 root root 116388640 Mar 20 2026 /usr/local/cuda-12.8/targets/x86_64-linux/lib/libcublas.so.12.8.5.5
確認ができたら、ホームディレクトリのファイル「cuda-keyring_1.1-1_all.deb」は削除してください。
Python環境の確認と準備
Pythonバージョンの条件
Autodesk/XLB および google/jax のGitHubにおける仕様やソースコードから、必要なPythonバージョンを確認します。
【XLB 側の根拠(GitHub ソースコードおよび公式解説より)】
ソースコード(setup.py / メタデータ)の仕様として、
XLBの最新版のパッケージ要件(python_requires)では、「>=3.11(Python 3.11以上)」 が明示的に指定されています。
【Neon側の根拠(GitHub公式READMEより)】
AutodeskのNeonは、もともとC++/CUDAを中心としたフレームワークであり、Neon本体のビルドにはPythonは必須ではありません。Neonの公式GitHubでは、C++17対応コンパイラとCUDA 11以降を用いてCMakeからビルドする構成が示されています。したがって、Neon本体について「Python 3.11以上」という必須条件はありません。
Pythonバージョンの確認とツールの導入
ここで用いるUbunut24.04では、以下の通り「3.12.3」で対応しています。
現在のPythonは、ほぼバージョン3を利用しますが、この状態だとコマンド「python3」と入力します。これを「python」だけでも起動できる設定にしておきます。
さらに、Python3.12で仮想環境を作るツール「python3-venv」と、Python3のインストールツールpip「python3-pip」も導入します。
ryos@dalab2509dt01:~$ python3 --version
Python 3.12.3
ryos@dalab2509dt01:~$ sudo apt install python-is-python3
:
ryos@dalab2509dt01:~$ python --version
Python 3.12.3
ryos@dalab2509dt01:~$ sudo apt install python3.12-venv
ryos@dalab2509dt01:~$ sudo apt install python3-pip
:
ryos@dalab2509dt01:~$ pip --version
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)
作業ディレクトリとPython仮想環境の準備
準備として、まずNeonを用いたXLBのファイルを保存する作業ディレクトリ「~/XLBneonWork」を作ります。
次に、Pythonの利用において、目的に応じて仮想環境「XLBneon」を作って行うことにします。以下のように準備し、sourceで有効にすると、プロンプトの表示が変わります。環境変数VIRTUAL_ENVに名称が設定されています。
ryos@dalab2403sv01:~$ cd
ryos@dalab2403sv01:~$ ls
ryos@dalab2403sv01:~$ mkdir XLBneonWork
ryos@dalab2403sv01:~$ ls
XLBneonWork
ryos@dalab2403sv01:~$ python -m venv XLBneon
ryos@dalab2403sv01:~$ ls
XLBneon XLBneonWork
ryos@dalab2403sv01:~$ source ~/XLBneon/bin/activate
(XLBneon) ryos@dalab2403sv01:~$ printenv | grep VIRTUAL
VIRTUAL_ENV=/home/ryos/XLBneon
VIRTUAL_ENV_PROMPT=(XLBneon)
さらに導入で用いるpipを更新しておきます
(XLBneon) ryos@dalab2403sv01:~$ pip install --upgrade pip
:
Successfully installed pip-26.2.1
CUDA Toolkit 12.8の確認
導入はできましたが、CUDAにパスの設定がないので、先ほどはルートからの絶対パスでnvccを起動しました。そこで、CUDAを環境変数に設定します。
以下の内容を、Python仮想環境の設定ファイル「~/XLBneon/bin/activate」に追加して、コマンドsourceで有効にします。
export CUDA_HOME=/usr/local/cuda-12.8
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$CUDA_HOME/targets/x86_64-linux/lib:$LD_LIBRARY_PATH
(XLBneon) ryos@dalab2403sv01:~$ vi ~/XLBneon/bin/activate
(XLBneon) ryos@dalab2403sv01:~$ source ~/XLBneon/bin/activate
(XLBneon) ryos@dalab2403sv01:~$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Fri_Feb_21_20:23:50_PST_2025
Cuda compilation tools, release 12.8, V12.8.93
Build cuda_12.8.r12.8/compiler.35583870_0
(XLBneon) ryos@dalab2403sv01:~$ printenv | grep CUDA
CUDA_HOME=/usr/local/cuda-12.8
Autodesk Neon+XLB の導入と確認
導入手順は、以下のNeonの公式資料を見ると、githubからリポジトリを準備して、CMAKEを用いてC++コンパイラで、ソースコードからビルドする手順が示されています。なんか大変そうです。
https://github.com/Autodesk/Neon
ただし、NeonはXLBも開発しているAutodeskのツールなので、以下のXLBの公式資料を見ると、XLBとNeonを同時に導入できそうです。ここでは、この方法で進めます。
https://github.com/Autodesk/XLB#installation-with-neon-support
導入手順は、以下の通りです。AutodeskのXLBのリポジトリから、Neon+XLBを同時に導入します。
Neonバックエンドは、マルチGPUでの密な(dense)表現や、シングルGPUでのマルチ解像度表現を可能にします。Neonサポートを含むXLBをインストールするには、以下のコマンドを使用してください。
git clone https://github.com/Autodesk/XLB-git
cd XLB-git
pip install -r requirements.txt
pip install '.[neon]'
要件:Neonのwheelパッケージは、Linux x86_64およびLinux ARM環境でのPython 3.11~3.14をサポートしています。なお、Neonはwarpのカスタムフォークを使用しています。
そこで、XLBの公式Githubから、以下のリポジトリを入手して、その中にある情報を用いて、Neon対応のXLBを準備します。
https://github.com/Autodesk/XLB.git
まずgitコマンドを導入しておきます。
(XLBneon) ryos@dalab2403sv01:~$ sudo apt install git
XLBneonの作業用ディレクトリ「XLBneonWork」の中に、リポジトリ「XLB-git」を作成するために、以下のようにgitコマンドを実行します。
(XLBneon) ryos@dalab2403sv01:~$ cd ~/XLBneonWork/
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork$ git clone https://github.com/Autodesk/XLB.git XLB-git
Cloning into 'XLB-git'...
:
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork$ ls
XLB-git
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork$ cd XLB-git/
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/XLB-git$ ls
AUTHORS CODE_OF_CONDUCT.md LICENSE assets examples requirements.txt setup.py xlb
CHANGELOG.md CONTRIBUTING.md README.md docs mkdocs.yml ruff.toml tests
次に、ツールや例題のバージョンを固定するために、以下の手順で、Gitでmainのcheckpoint(コミット)を固定しておくことにします。
そのうえで、XLBをリポジトリから導入します。
(XLBneon) ryos@dalab2403sv01:~$ cd ~/XLBneonWork/XLB-git/
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/XLB-git$ git checkout main
Already on 'main'
Your branch is up to date with 'origin/main'.
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/XLB-git$ git pull
Already up to date.
準備ができたので、Neon対応のXLBを導入します。まず、XLBの依存パッケージを「requirements.txt」を用いてインストールしてから、Neon版XLBをインストールします。
なお依存パッケージは、「requirements.txt」に記述された、以下のツールです。
jax[cuda] matplotlib numpy pyvista Rtree trimesh numpy-stl
pydantic nvtx pytest ruff usd-core h5py
まずは、XLBの依存パッケージを「requirements.txt」を用いて、pipインストールします。
(XLBneon) ryos@dalab2403sv01:~$ cd ~/XLBneonWork/XLB-git/
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/XLB-git$ ls
AUTHORS CODE_OF_CONDUCT.md LICENSE assets examples requirements.txt setup.py xlb
CHANGELOG.md CONTRIBUTING.md README.md docs mkdocs.yml ruff.toml tests
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/XLB-git$ pip install -r requirements.txt
:
Installing collected packages: jax-cuda12-pjrt, usd-core, urllib3, typing-extensions, six, scooby, ruff, Rtree, pyparsing, pygments, pluggy, platformdirs, pillow, packaging, opt_einsum, nvtx, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-nvcc-cu12, nvidia-cuda-cupti-cu12, nvidia-cuda-cccl-cu12, numpy, mdurl, kiwisolver, jax-cuda12-plugin, iniconfig, idna, fonttools, docstring-parser, cycler, charset_normalizer, certifi, attrs, annotated-types, typing-inspection, trimesh, scipy, requests, pyvista-validation, python-utils, python-dateutil, pytest, pydantic-core, nvidia-nvshmem-cu12, nvidia-cusparse-cu12, nvidia-cufft-cu12, nvidia-cublas-cu12, ml_dtypes, markdown-it-py, h5py, contourpy, rich, pydantic, pooch, nvidia-cusolver-cu12, nvidia-cudnn-cu12, numpy-stl, matplotlib, jaxlib, vtk, rich-rst, jax, cyclopts, pyvista
Successfully installed Rtree-1.4.1 annotated-types-0.8.0 attrs-26.1.0 certifi-2026.7.22 charset_normalizer-3.5.1 contourpy-1.4.0 cycler-0.12.1 cyclopts-5.0.0 docstring-parser-0.18.0 fonttools-4.66.0 h5py-3.16.0 idna-3.20 iniconfig-2.3.0 jax-0.11.2 jax-cuda12-pjrt-0.11.2 jax-cuda12-plugin-0.11.2 jaxlib-0.11.2 kiwisolver-1.5.1 markdown-it-py-4.2.0 matplotlib-3.11.2 mdurl-0.1.2 ml_dtypes-0.6.0 numpy-2.5.3 numpy-stl-4.0.1 nvidia-cublas-cu12-12.9.2.10 nvidia-cuda-cccl-cu12-12.9.27 nvidia-cuda-cupti-cu12-12.9.79 nvidia-cuda-nvcc-cu12-12.9.86 nvidia-cuda-nvrtc-cu12-12.9.86 nvidia-cuda-runtime-cu12-12.9.79 nvidia-cudnn-cu12-9.26.0.51 nvidia-cufft-cu12-11.4.1.4 nvidia-cusolver-cu12-11.7.5.82 nvidia-cusparse-cu12-12.5.10.65 nvidia-nccl-cu12-2.32.3 nvidia-nvjitlink-cu12-12.9.86 nvidia-nvshmem-cu12-3.8.0 nvtx-0.2.16 opt_einsum-3.4.0 packaging-26.3 pillow-12.3.0 platformdirs-4.11.15 pluggy-1.6.0 pooch-1.9.0 pydantic-2.13.5 pydantic-core-2.46.5 pygments-2.21.0 pyparsing-3.3.3 pytest-9.1.1 python-dateutil-2.9.0.post0 python-utils-4.0.1 pyvista-0.49.0 pyvista-validation-0.2.2 requests-2.34.2 rich-15.0.0 rich-rst-2.1.0 ruff-0.16.9 scipy-1.18.1 scooby-0.12.0 six-1.17.0 trimesh-5.1.0 typing-extensions-4.16.0 typing-inspection-0.4.4 urllib3-2.8.0 usd-core-26.8 vtk-9.7.0
つぎに、Neonに対応するXLBを、pipインストールします。
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/XLB-git$ pip install '.[neon]'
:
Installing collected packages: warp-lang, neon_gpu, xlb
Successfully installed neon_gpu-0.5.2a1 warp-lang-1.17.0 xlb-0.3.2
以上の準備ができたら、Neon+XLBが導入された状態を、改めて以下のスクリプトで確認します。
python - <<'PY'
from importlib.metadata import version, PackageNotFoundError
import xlb
from xlb.compute_backend import ComputeBackend
print("XLB:", xlb.__version__)
try:
print("Neon:", version("neon_gpu"))
except PackageNotFoundError:
print("Neon: package not found")
print("XLB Neon backend:", ComputeBackend.NEON)
try:
import warp as wp
print("Warp:", wp.__version__)
print("CUDA devices:", wp.get_cuda_device_count())
for i in range(wp.get_cuda_device_count()):
print("CUDA device", i, ":", wp.get_device(f"cuda:{i}"))
except Exception as e:
print("GPU check failed:", e)
PY
動作結果は、以下のように、「XLB:バージョン0.3.2」「Warp:バージョン1.7.2」「Neon:バージョン0.5.2a1」として、「XLB Neon backend: ComputeBackend.NEON」を用いて処理が行われることになります。途中の「Warp CUDA error」が気になりますが、Warpの利用ではなくNeonの活用なので、進めることにします。
XLB: 0.3.2
Neon: 0.5.2a1
XLB Neon backend: ComputeBackend.NEON
Warp: 1.7.2
Warp CUDA error: Failed to get driver entry point 'cuDeviceGetUuid' (CUDA error 1)
Warp CUDA error: Function cuDeviceGetUuid_f: a suitable driver entry point was not found
Warp CUDA error 36: API call is not supported in the installed CUDA driver (in function cuda_init, /workspace/extern/warp/warp/native/warp.cu:282)
Warp 1.7.2 initialized:
CUDA Toolkit 12.8, Driver 13.2
Devices:
"cpu" : "x86_64"
"cuda:0" : "NVIDIA RTX A4500" (20 GiB, sm_86, mempool enabled)
Kernel cache:
/home/ryos/.cache/warp/1.7.2
CUDA devices: 1
CUDA device 0 : cuda:0
XLBの公式例題の準備
作成したリポジトリ「XLB-git」の状態で、公式例題の中でNeonを使用しているものを検索します。
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/XLB-git$ grep -RIl "ComputeBackend.NEON" examples --include="*.py"
examples/performance/mlups_3d.py
examples/performance/mlups_3d_multires.py
examples/cfd/multires_windtunnel_3d.py
examples/cfd/windtunnel_3d.py
examples/cfd/multires_flow_past_sphere_3d.py
この中で、最初の説明で対象とする3次元の風洞内部の物体周囲の流れのマルチ解像度格子の例題「multires_windtunnel_3d.py」 を用いて、動作検証を行います。
XLB公式例題:multires_windtunnel_3d.py
multires_windtunnel_3d.py によるXLB-Neonの動作確認
この例題用のディレクトリ「MWIND3D」を、XLB作業ディレクトリ「XLBneonWork」に作り、この中に例題ファイル「multires_windtunnel_3d.py」をコピーします。ここでは、提供されたスクリプトと、異なる状態で実行するために、スクリプトを修正するので、オリジナルをコピーして保存しておきます。
(XLBneon) ryos@dalab2403sv01:~/XLBneon$ cd ~/XLBneonWork/
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork$ mkdir MWIND3D
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork$ ls
MWIND3D XLB-git
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork$ cd MWIND3D/
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/MWIND3D$ cp ~/XLBneonWork/XLB-git/examples/cfd/multires_windtunnel_3d.py .
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/MWIND3D$ ls
multires_windtunnel_3d.py
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/MWIND3D$ cp multires_windtunnel_3d.py multires_windtunnel_3d-org.py
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/MWIND3D$ ls
multires_windtunnel_3d-org.py multires_windtunnel_3d.py
この例題の実行では、2つの準備が必要です。
風洞内部の形状のSTLファイルの準備
スクリプトをviエディタなどで開くと、46-48行に、風洞内の物体もSTLモデルに関して、以下の記述があります。
46 # STL filename
47 stl_filename = "../stl-files/Ahmed_25_NoLegs.stl"
48 script_name = "Ahmed"
このファイル「Ahmed_25_NoLegs.stl」そのものは、ウエブを色々検査しても見つけられませんでした。
しかし、これは、「Ahmed body(アメッド・ボディ)」という、自動車の外部空力特性を研究・検証するために開発された簡略化された、有名な自動車の形状モデルです。
この研究用モデル自体は、色々と公開されており、以下のサイトには下図のような形状モデルが、ファイル「ahmed_25deg_m.stl
」として公開されています。
https://github.com/nathanrooy/ahmed-bluff-body-cfd/blob/master/geometry/ahmed_25deg_m.stl?utm_source=chatgpt.com
これを、表示の右上「Download raw file」から、ファイル「ahmed_25deg_m.stl」をダウンロードして、この例題ディレクトリに置きます。
このファイルを利用するために、スクリプト47行目をコメントにして、その下に以下の記述とします。
46 # STL filename
47 # stl_filename = "../stl-files/Ahmed_25_NoLegs.stl"
48 stl_filename = "./ahmed_25deg_m.stl"
49 script_name = "Ahmed"
結果比較検討用のJSONファイルの準備
スクリプトをviエディタなどで開くと、302-305行に、比較用のJSONデータに関して、以下の記述があります。
302 # Load reference data
303 import json
304
305 ref_data_path = "examples/cfd/data/ahmed.json"
これは、githubから入手したリポジトリの中にあるのですが、例題スクリプトを移動させているので、以下のように、移動させて使うことにします。
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/MWIND3D$ ls
ahmed_25deg_m.stl multires_windtunnel_3d-org.py multires_windtunnel_3d.py
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/MWIND3D$ cp ~/XLBneonWork/XLB-git/examples/cfd/data/ahmed.json .
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/MWIND3D$ ls
ahmed.json ahmed_25deg_m.stl multires_windtunnel_3d-org.py multires_windtunnel_3d.py
このファイルを利用するために、スクリプト305行目をコメントにして、その下に以下の記述とします。
302 # Load reference data
303 import json
304
305 # ref_data_path = "examples/cfd/data/ahmed.json"
306 ref_data_path = "./ahmed.json"
なお、Windowsなどから、WSLのUbuntuにファイルを移動しとき、拡張子「Identifier」のファイルが作られますが、これは不要なので、Windows側で削除してください。
以下のように、pythonを用いて、この例題スクリプトmultires_windtunnel_3d.pyを実行します。
なお、この計算環境ではNVIDIA GPU(NVIDIA RTX A4500)が1つあって、これを認識して、GPUで解析が進みます。
まず、「Initializing Neon」でNeonが初期化され、ログが進んで、4つのマルチ解像度の格子の設定が確認できます。次に、解析条件が表示され、最も細かい格子は0.005m、最も粗い格子は0.08mとなっています。
(XLBneon) ryos@dalab2403sv01:~/XLBneonWork/MWIND3D$ python multires_windtunnel_3d.py
Warp CUDA error: Failed to get driver entry point 'cuDeviceGetUuid' (CUDA error 1)
Warp CUDA error: Function cuDeviceGetUuid_f: a suitable driver entry point was not found
Warp CUDA error 36: API call is not supported in the installed CUDA driver (in function cuda_init, /workspace/extern/warp/warp/native/warp.cu:282)
Warp 1.7.2 initialized:
CUDA Toolkit 12.8, Driver 13.2
Devices:
"cpu" : "x86_64"
"cuda:0" : "NVIDIA RTX A4500" (20 GiB, sm_86, mempool enabled)
Kernel cache:
/home/ryos/.cache/warp/1.7.2
[13:23:40] [neon-py] [INFO ] Initializing Neon from /home/ryos/XLBneon/lib/python3.12/site-packages/neon
:
Full shape based on finest voxel size is (1664, 464, 336)
Processing level 0: Voxel size 1, Origin [574 176 0], Shape (314, 116, 84)
Processing level 1: Voxel size 2, Origin [520 148 0], Shape (226, 86, 54)
Processing level 2: Voxel size 4, Origin [456 96 0], Shape (148, 68, 38)
Processing level 3: Voxel size 8, Origin [368 64 0], Shape (92, 44, 22)
Processing level 4: Voxel size 16, Origin [0 0 0], Shape (104, 29, 21)
:
==================================================
Number of flow passes: 2
Calculated iterations: 4,160
Finest voxel size: 0.005 meters
Coarsest voxel size: 0.08 meters
Total voxels: 4,071,403
Total active voxels: 3,990,972
Active voxels per level: [2979185, 667092, 251239, 41252, 52204]
Solid voxels per level: [80431, 0, 0, 0, 0]
Total lattice updates per global step: 54,143,360
Number of refinement levels: 5
Physical inlet velocity: 38.0000 m/s
Lattice velocity (ulb): 0.05
Computed reference area (bc_mask): 5085 lattice units
Physical reference area (bc_mask): 0.127125 m^2
==================================================
:
この解析では、全体で4160ステップまで進み、ログ出力は40ステップ毎です。空力関係の数値Cd,Clなどが計算され、この時の速度分布が画像ファイル「Ahmed/Ahmed_4159.png」に保存されます。
続いて、CSVファイルに各種の解析結果の数値を保存しています。この部分については、続く記事【06】で例題ファイルmultires_windtunnel_3d.pyの分析において、調べたいと思います。
:
Completed step 4141/4160 (99.57% complete)
Flow Passes: 1.99
Time elapsed: 8.3s, Compute time: 7.5s, ETA: 00h 00m 03s
MLUPS: 295.2
Cd=0.906, Cl=-15.118, Drag Force (lattice units)=5.761
Generating XDMF file: /home/ryos/XLBneonWork/MWIND3D/Ahmed/Ahmed_4159.xmf
XDMF file written successfully
Writing HDF5 file
HDF5 file written in 0.2 seconds
Creating slice image of the field magnitude!
Slice image for field velocity_magnitude saved as /home/ryos/XLBneonWork/MWIND3D/Ahmed/Ahmed_4159.png
:
x1 is -0.21799999999999997
Creating csv plot for component 0 of the input field!
Line Plot for field velocity_0 saved as /home/ryos/XLBneonWork/MWIND3D/Ahmed/Ahmed_-1.162.csv
CSV path is /home/ryos/XLBneonWork/MWIND3D/Ahmed/Ahmed_-1.162_velocity_0.csv
:
実行すると、ステップ毎の解析結果が、フォルダ「Ahmed」に保存されます。可視化用結果画像pngファイルが、40ステップごとに、0000-4160ステップまでの103段階で保存されます。ファイルのタイムスタンプを見ると解析に約15分間必要でした。
なお、例題を実行したPCのGPUは、コマンドnvidia-smiで確認すると、「NVIDIA RTX A4500」です。
multires_windtunnel_3d.pyの結果確認
Windowsのファイルブラウザの左下に、Linuxの項目があり、ここにファイルシステム「\wsl.localhost\Ubuntu-24.04-XLBneon」があります。
例題ディレクトリ「\home\ryos\XLBneonWork\MWIND3D」を開きます。最後のステップの画像ファイル「Ahmed_4159_velocity_magnitude.png」は、以下のように解析最後の速度分布を表しています。
現在のまとめ
何とか、Autodesk Neonを利用して、XLBでマルチ解像度例題「multires_windtunnel_3d.py」を実行できました。実験結果との比較や各種の研究のデータが出力されているのですが、ここでは実行手順の検証のみとしておきます。

