はじめに
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というディレクトリになります
このディレクトリに移動して,公式通りに操作するとインストールが始まります.
$ git clone https://github.com/mathLab/ITHACA-FV
$ cd ITHACA-FV
$ source etc/bashrc
$ ./Allwmake
インストールに長時間かかるので,コーヒーブレイクが必要です(5杯ぶんくらい).
チュートリアルを試す
一番ベーシックなチュートリアルを動かしてみます.
https://mathlab.github.io/ITHACA-FV/01POD_8C-example.html
cd tutorials/01POD
./Allrun
ちなみに初期のファイル構成はこんな感じ
01POD.Cをいかに書くかが問題ですね.
0 01POD.C Allclean Allrun constant system
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の中身はこんな感じで固有値が入っている模様
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で可視化をためすと,こんな感じで可視化できました.
さいごに
典型的なやってみた記事になってしまいましたが,まあ,無いよりはいい派なので,許してください.