1. はじめに
最近流体シミュレーションに興味を再度持ち始めたのですが、そんな中でデータ同化というものがあるのを知りました。それを試せるリポジトリがあるということで、自分が持っているUbuntu22.04の環境でも動かくのかを試してみたのがこの記事の内容です。
なお、対象としたリポジトリは、書籍『データ同化流体科学 − 流動現象のデジタルツイン(共立出版)』に付随する GitHub 公開リポジトリのコードだそうです。ただし、この記事では書籍の内容には踏み込みません。また、私自身は流体分野の素人であり、EnKF や 4D-Var などのアルゴリズム解説も行いません(誤った説明で混乱を招きたくないためです)。本記事は、あくまで公開されているコードを自分の環境で実行して動作を確認しただけの記録です<(_ _)>
2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OS: Ubuntu22.04(WSL2ではなくPCに直接インストール)
3. 使用した GitHub リポジトリ(すべて公開情報)
この3つは 誰でもアクセスできる GitHub 公開リポジトリで、書籍で紹介されている「付録コード」が含まれているそうです。なお、データ同化とは、実際の計測データを数値シミュレーションへ取り込み、シミュレーション結果の精度を高める手法の総称です(具体的な取り込み方法にはさまざまなアプローチがあります)。ただし、このリポジトリで扱われているのは実観測データではありません。シミュレーション結果から疑似的な観測データを生成し、それを用いてデータ同化を行う構成になっているようです。
4. 構築手順
4.1 必要パッケージのインストール
sudo apt update
sudo apt install -y git make gfortran python3 python3-pip
sudo pip3 install numpy scipy matplotlib
4.2 リポジトリを clone
mkdir ~/dae && cd ~/dae
git clone https://github.com/DAE-Code/NS2D_EnKF
git clone https://github.com/DAE-Code/NS2D_4DVar
git clone https://github.com/DAE-Code/NS2D_DataAssimilation
4.3 コンパイル
"https://github.com/DAE-Code/NS2D_EnKF" でクローンしてきたEnKFのコードのコンパイル
cd ~/dae/NS2D_EnKF/src
make
"https://github.com/DAE-Code/NS2D_4DVar" でクローンしてきた4D-Varのコードのコンパイル
cd ~/dae/NS2D_4DVar/src
make
4.4 統合スクリプトの実行
cd ~/dae/NS2D_DataAssimilation
./runALL.sh
- EnKF の複数ケース
- 4D-Var の複数ケース
- Python による可視化
がすべて一括で実行されます。
生成された図は:
~/dae/NS2D_DataAssimilation/figures
にまとめられます。
■ 出力された図(例)
このような図が出力されます:
添付したものは"EnKF_Periodic_BSL_est0600step.png"という名前の図で、est と書かれているものは「データ同化の結果(estimate)」ref と書かれているものは「真値(reference)」を表しているそうです。
※ 詳細な意味やアルゴリズムは書籍を参照してください。
5. まとめ
今回は、公開されているリポジトリを用いて、自分の環境(Ubuntu 22.04)上でデータ同化の一連の処理を実行し、動作を確認することができました。今後は、コードの仕組みや処理内容をより理解するために、どの部分をカスタマイズできるのかを調べつつ、OpenFOAM を用いた流体シミュレーションとの連携や応用の可能性についても検討していきたいと考えています。
