1. openfoamを使う理由 1. openfoamを使う理由 · openfoam への計算機能 ......
TRANSCRIPT
OpenFOAMへの計算機能追加連続的データ同化法(VCA法)の実装
大阪大学大学院工学研究科
博士後期課程 松尾智仁
NEE研究会
第18回講演討論会
2015.01.27
於大阪大学中之島センター
内容
1.OpenFOAMを使う理由1.1 OpenFOAMの特徴
1.2 OpenFOAMを使うにあたって
2.OpenFOAMへの計算機能追加2.1 計算機能の追加の方法
2.2 VCA法によるデータ同化計算機能の追加
• VCA法とは
• 計算例
2
1.OpenFOAMを使う理由
3
1.1 OpenFOAMの特徴• オープンソースである
=> 内部でどのような計算が行われているかわかる
=> 式や処理を自由に改変することができる
• 研究で用いる場合…
• どのような計算条件(離散化の方法、乱流モデル、差分スキーム、……)で計算が行われているのかを明らかにする必要がある
• 従来とは違う計算手法を試したくなることがある
1.OpenFOAMを使う理由
4
1.1 OpenFOAMの特徴• 機能が多彩である
=> たいていの計算であれば、コードを自作しなくても実行できる
=> たとえば差分スキームの違いによる結果の差異などが容易に評価できる
• 研究で用いる場合…
• 適切なスキームは条件によって異なる
• コーディングは主な目的ではない
1.OpenFOAMを使う理由
5
1.2 OpenFOAMを使うにあたって• 導入のハードルが高い
• 日本語文献がまだ多くはない
• TutorialやUserGuideがあまり親切ではない
• Linux 上で動作する
• GUIが無い
1.OpenFOAMを使う理由
6
1.2 OpenFOAMを使うにあたって• 参考サイトなど
• OpenCAE学会(http://www.opencae.jp/)
• OpenFOAMのユーザガイド翻訳など
• PENGUINITIS(http://www.geocities.jp/penguinitis2002/study/OpenFO
AM/index.html)
• 計算実行、ソース解読などについての多くの情報
• OpenFOAM wiki (英語)
(https://openfoamwiki.net/index.php/Main_Page)
• OpenFOAMに関する情報多数(非公式)
• Google(https://www.google.co.jp/)
• 大抵のことは検索すれば見つけられます
1.OpenFOAMを使う理由
7
1.2 OpenFOAMを使うにあたって• 使用環境
• 仮想環境 : VMware player (Windows上で動作)
• 作業環境:ワークステーション上のLinux(ssh接続)
• Linux : Ubuntu1204 64bit
• OpenFOAM : OpenFOAM 2.3.0
• ソースコード操作:Eclipse ( with Pleiades )
• 結果処理 : paraView
2.OpenFOAMへの計算機能追加
8
2.1 計算機能の追加の仕方
• ソルバの場所 : /opt/openfoam2.3.0/applications/solver 以下
• ソースコードはC++で書かれている。
• いわゆるオブジェクト指向で
• クラスの継承
• オーバーロード(関数/演算子の多重定義)
• オーバーライド(関数の上書き)
といったC++に特有の機能が使われている
• 高度にモジュール化されている。
• 機能追加は比較的簡単に行なえる
2.OpenFOAMへの計算機能追加
9
2.1 計算機能の追加の仕方
• クラスや関数の定義はすでになされているため、主としてそれらを組み合わせることで任意のソルバを作成する。
• たいていはmain関数だけを作り変えれば足りる
例:simpleFoamのmain関数
simpleFoam : 非圧縮流体の定常流れを計算するソルバ
int main(int argc, char *argv[])
{
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
#include "createFields.H"
#include "createFvOptions.H"
#include "initContinuityErrs.H"
simpleControl simple(mesh);
計算ケースの読み込み
計算条件(時間)の読み込み
メッシュの作成
変数(速度、圧力など)の作成
オプションの設定
初期残差の計算
SIMPLEの繰返しの制御の作成
Info<< "¥nStarting time loop¥n" << endl;
while (simple.loop())
{
Info<< "Time = " << runTime.timeName() << nl << endl;
{
#include "UEqn.H"
#include "pEqn.H"
}
turbulence->correct();
runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
}
Info<< "End¥n" << endl;
return 0;
}
例:simpleFoamのmain関数(つづき)
結果ファイル書き出し
速度の計算
圧力の計算
乱流に関する計算
SIMPLEのループ
2.1 計算機能の追加の仕方
12
• 方程式を追加する場合
• 微分方程式は行列の形で表現される。
例:非圧縮定常流れの運動量方程式
( ) pUUU eff −∇=∇⋅∇+⋅∇ ν)(
fvScalarMatrix UEqn(
fvm::div(phi, U)
+ turbulence->divDevReff( U)
==
fvOptions(U)
);
solve( UEqn() == -fvc::grad(p) );
対流項
粘性項
オプション(何もしない)
圧力項
13
例:非定常の物質の保存式
( ) SCUCρt
C +∇Γ⋅∇=⋅∇+∂∂
)(
fvScalarMatrix Equation(
fvm::ddt(conc)
+fvm::div(phi,conc)
==
fvm::laplacian(turbulence->nuEff(), conc)
+fvOption(conc)
);
対流項
拡散項
オプション(ソース項)
非定常項
2.1 計算機能の追加の仕方
• 方程式を追加する場合
• 微分方程式は行列の形で表現される。
2.2 VCA法によるデータ同化計算機能の追加
14
Variational Continuous Assimilation method
データ同化法の一種で、観測データを用いてCFDモデルを修正しながら計算を行う手法
Derber(1989) “A variational continuous assimilation technique”
VCA法とは
数値解析 修正された数値解析
観測データ
データ同化
VCA法の概要- CFDモデルの修正式を定義
- 評価関数を用いて観測値との誤差を評価
- 誤差を最小化する修正項を求める
( ) ( )∑=
Ψ−ΨΨ−Ψ=P
p
ppppI1
T ~~2
1
計算値と観測値の差分
( ) 0~
1
T
=Ψ−Ψ
∂Ψ∂=
∂∂
∑=
P
p
pppI
φφ
φλnnnn A +Ψ=Ψ −1
修正項
CFDの支配方程式
I
φ
修正項φが評価関数 I を最小化するとき、 Iのφに
関する勾配が0になる。
2.2 VCA法によるデータ同化計算機能の追加
VCA法の計算フロー
修正項を更新
CFD解析
CFDCFDと観測値の誤差を評価
計算終了
観測値の読み込み
計算開始
2.2 VCA法によるデータ同化計算機能の追加
2.2 VCA法によるデータ同化計算機能の追加
・室内に未知の放出源があるケースを想定・吸込み口の濃度を観測データとして与える
・流れ場/放出時刻は既知。
・観測データ取得位置における濃度のデータから、放出源の位置と放出強度を推定。
計算例:未知の汚染放出源の放出源位置と濃度の推定
観測データ取得位置
U [m/s]
2.0
1.0
0.0
2.2 VCA法によるデータ同化計算機能の追加
計算条件流れ場 非圧縮等温定常流れ吸込口 1.0 m/s吹出し口 自由開放放出源大きさ 0.01 m2 (室内中央)放出強度 100.0 g/m2/s放出時間 1.0 秒間速度-圧力解法 SIMPLE時間の差分スキーム 1次精度オイラー法(Euler)対流の差分スキーム 2次精度中心差分+TVD制限(Gauss limitedLinear)勾配の差分スキーム 線形補間(Gauss Linear)拡散の差分スキーム 線形補間(Gauss linear corrected)
• CFD計算条件
19
2.2 VCA法によるデータ同化計算機能の追加
• 濃度分布計算結果
2.2 VCA法によるデータ同化計算機能の追加
• VCA計算条件
計算条件
流れ場 既知
放出源 未知(放出源がない場合の数値計算からスタート)
観測点数 10点
観測間隔 0.1 sec
観測点位置 吸込口
観測データ取得位置
U [m/s]
2.0
1.0
0.0
2.2 VCA法によるデータ同化計算機能の追加
• VCA推定結果
• 濃度分布
2.2 VCA法によるデータ同化計算機能の追加
• 正解値との比較
正解値 推定値
2.2 VCA法によるデータ同化計算機能の追加
• VCA推定結果
• 修正項 φ の分布φ [g/ms/s]
+0.03
+0.02
-0.02
+0.01
+0.00
-0.01
2.2 VCA法によるデータ同化計算機能の追加
• VCA計算条件
• 濃度、放出源位置ともに、実際よりも拡散している
• 観測される濃度が拡散していることを反映
• 制約条件として、「放出源強度は負にならない」という条件を与えてみる
2.2 VCA法によるデータ同化計算機能の追加
• 正解値との比較
正解値 推定値
2.2 VCA法によるデータ同化計算機能の追加
• VCA推定結果
• 修正項 φ の分布φ [g/ms/s]
0.06
0.05
0.00
0.04
0.03
0.02
0.01
2.2 VCA法によるデータ同化計算機能の追加
• VCA推定結果
• 制約条件がない場合に比べ、推定精度が向上?
適切な制約条件を与えることで、推定精度を高めることができる?
まとめ
• 前半では、オープンソースCFDライブラリであるOpenFOAMを用いて数値解析をおこなう理由と方法について簡単に触れました
• 後半では、実際にOpenFOAMに計算機能を追加して行った計算を紹介しました
– VCA法を用いたデータ同化計算機能を追加しました
– 計算例では、未知の物質放出源の位置/強度、および濃度分布の推定をおこなった例を紹介しました
28