ITHACA-FV(OpenFOAMで使えるPODライブラリ)を試す

# はじめに

OpenFOAMで次元削減モデルを扱えるようにするライブラリITHACA-FVを試してみました．
https://github.com/mathLab/ITHACA-FV
POD(固有直交分解)などを簡単に行えるようです．
ライセンスはLGPLv3とのこと．

# インストール

公式通りにやれば問題なくインストールできるはずですが，念のためメモとして書いておきます．
前提としてOpenFOAMの6.0，5.0,v1812がインストールされている必要があります．

ITHACA-FVはOpenFOAMの**${FOAM_APP}/utilities**にインストールします．
**${FOAM_APP}**は具体的には，**OpenFOAM/OpenFOAM-*/applications/utilities**というディレクトリになります

このディレクトリに移動して，公式通りに操作するとインストールが始まります．

``` terminal
$ git clone https://github.com/mathLab/ITHACA-FV
$ cd ITHACA-FV
$ source etc/bashrc
$ ./Allwmake 
```

インストールに長時間かかるので，コーヒーブレイクが必要です（５杯ぶんくらい）．

# チュートリアルを試す

一番ベーシックなチュートリアルを動かしてみます．
https://mathlab.github.io/ITHACA-FV/01POD_8C-example.html

``` terminal
cd tutorials/01POD
./Allrun
```

チュートリアルの計算対象はよくあるcavity流れでした．
<img width="1440" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132299/bbe97f8f-5cc9-c33d-00d8-acdbb432330d.png">


ちなみに初期のファイル構成はこんな感じ
01POD.Cをいかに書くかが問題ですね．

```
0  01POD.C  Allclean  Allrun  constant  system
```

Allrunの中を見てみましょう

``` txt:Allrun
#!/bin/sh
cd ${0%/*} || exit 1    # Run from this directory

# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions

runApplication icoFoam
runApplication perform_POD
```

**perform_POD**と打つだけで簡単に実行できるようです．

計算結果のファイル構成はこうなりました．

```
0       0.0095  0.019   0.0285  0.038   0.0475  0.057   0.0665  0.076   0.0855  0.095
0.0005  0.01    0.0195  0.029   0.0385  0.048   0.0575  0.067   0.0765  0.086   0.0955
0.001   0.0105  0.02    0.0295  0.039   0.0485  0.058   0.0675  0.077   0.0865  0.096
0.0015  0.011   0.0205  0.03    0.0395  0.049   0.0585  0.068   0.0775  0.087   0.0965
0.002   0.0115  0.021   0.0305  0.04    0.0495  0.059   0.0685  0.078   0.0875  0.097
0.0025  0.012   0.0215  0.031   0.0405  0.05    0.0595  0.069   0.0785  0.088   0.0975
0.003   0.0125  0.022   0.0315  0.041   0.0505  0.06    0.0695  0.079   0.0885  0.098
0.0035  0.013   0.0225  0.032   0.0415  0.051   0.0605  0.07    0.0795  0.089   0.0985
0.004   0.0135  0.023   0.0325  0.042   0.0515  0.061   0.0705  0.08    0.0895  0.099
0.0045  0.014   0.0235  0.033   0.0425  0.052   0.0615  0.071   0.0805  0.09    0.0995
0.005   0.0145  0.024   0.0335  0.043   0.0525  0.062   0.0715  0.081   0.0905  0.1
0.0055  0.015   0.0245  0.034   0.0435  0.053   0.0625  0.072   0.0815  0.091   01POD.C
0.006   0.0155  0.025   0.0345  0.044   0.0535  0.063   0.0725  0.082   0.0915  Allclean
0.0065  0.016   0.0255  0.035   0.0445  0.054   0.0635  0.073   0.0825  0.092   Allrun
0.007   0.0165  0.026   0.0355  0.045   0.0545  0.064   0.0735  0.083   0.0925  constant
0.0075  0.017   0.0265  0.036   0.0455  0.055   0.0645  0.074   0.0835  0.093   ITHACAoutput
0.008   0.0175  0.027   0.0365  0.046   0.0555  0.065   0.0745  0.084   0.0935  log.icoFoam
0.0085  0.018   0.0275  0.037   0.0465  0.056   0.0655  0.075   0.0845  0.094   log.perform_POD
0.009   0.0185  0.028   0.0375  0.047   0.0565  0.066   0.0755  0.085   0.0945  system

```

0.03などの時間のフォルダは通常のOpenFOAMの結果で中身は特に変化なさそうです．時間方向に大量のデータを保存する必要のある非定常計算は闇が深いですね．．

**THACAoutput/POD/**の中を見ると以下の構成でした．

```
0  10  3  5  7  9         CumEigenvalues_p  Eigenvalues_p  system
1  2   4  6  8  constant  CumEigenvalues_U  Eigenvalues_U

```

例えば，Eigenvalues_pの中身はこんな感じで固有値が入っている模様

``` txt:Eigenvalues_p
MatrixMarket matrix array real general
10 1
0.98598269642487645914
0.01333412670236625193
0.00041428833177079141
0.00022875185314061281
0.00002708055184500610
0.00000964132052745271
0.00000296734318563279
0.00000035202349614126
0.00000007256768979182
0.00000002288110189711

```

他はOpenFOAMと同じファイル構成なのでParaviewで可視化をためすと，こんな感じで可視化できました．

<img width="1440" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132299/e732d00c-b550-2ec8-5634-d89bf95877ae.png">

<img width="1440" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132299/78e26b95-7918-b3f9-acbe-7ef267252b91.png">


# さいごに

典型的なやってみた記事になってしまいましたが，まあ，無いよりはいい派なので，許してください．