目次
ラジコンボディの空力をみるのに。。
もうなんか笑っちゃいますが。。内部流のシミュレーションはできるのに、外部流のシミュレーションがぜんぜんできない(笑) それができないと、ラジコンボディのエアロダイナミクスを見れないのですよね。 でもTutorialの中に、motorBikeというのがあって、それならできるらしいのですが、なぜかぜんぜんできなくて。。困っていました。
DEXCS2017の最初のチュートリアルも、なんか入れ忘れが多くてうまく動かせなく。。
あきらめかけていました。
.vtkファイルにするのが簡単な回避方法??
が・・・どうも、モデルの表面のMeshがきれいに生成されていないことに原因がありそうだということを見つけました。
https://github.com/blueCFD/Core/issues/38
https://bugs.openfoam.org/view.php?id=2298
https://bugs.openfoam.org/view.php?id=2395
よくわからないのですが、VTKファイルにすると大丈夫だということ。
F14のシミュレーションでは
http://hmf.enseeiht.fr/travaux/projnum/book/export/html/901
checkMesh Utilityを使ってメッシュを確認することが書かれています。
一番最初にWindows版のOpenFOAM入れたCfd-supportのMoterBikeのページでは
surfaceCheckを使って表面の連続性をチェックし
surfaceConvertで .obj ファイルを .vtkファイルに変換するように指定しています。
これCfd-support版のOpenFOAMでは動かなかったのと、blue-CDFに入っているOpenFOAM-5.x系には、そもそもsurfaceCheckが入っていないので使えません。
しかし、DEXCS2017版のOpenFOAM Plus(OpenFOAM-v1706)にコマンドがあることがわかり、それで試してみると、やっとmotorBikeを動かすことができました。
これが通るということは、仮想風洞実験ができるってことですね。。では、そのやり方を( ..)φメモメモしておきます。
ちなみに、日本語のOpenFOAMのUtilityの説明を見つけました。
https://www.softflow.jp/foam_plaza/utilities/
OpenFOAM tutorials motorBikeの動かし方
基本的にCFD-supportのmotorBikeの説明の通りです。
surfaceCheck surfaceConvertがUtilityに入っているバージョンのOpenFOAM。ここではDEXCS2017のOpenFOAM-v1706のTerminalでほとんど作業します。
DEXCS2017のインストールについては、こちらを参照してみてください。
motorBike tutorialのコピー
cd $FOAM_RUN
僕の場合は、~/OpenFOAM/tominaga-v1706/run に行きました。
チュートリアルをコピー
cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike ./ cd motorBike
Surfaceモデルを、コピー
cp $FOAM_TUTORIALS/resources/geometry/motorBike.obj.gz constant/triSurface/
モデルを展開して、paraviewで確認
gzip -d constant/triSurface/motorBike.obj.gz paraview constant/triSurface/motorBike.obj
そうすると、バイクが出てきます。
左クリックを押しながらドラッグすると、いろんな角度からモデルが見れます。
で、このモデルをチェックしてみると、エラーがでます。
cd constant/triSurface surfaceCheck motorBike.obj > log.surfaceCheck
surfaceCheckは少し時間かかります10秒~15秒くらい?
どこが悪いのかを見るのは、illegal trianglesというキーワードのようです。
grep 'illegal triangles' log.surfaceCheck
Surface has 60941 illegal triangles.
って出てきます。6万個もあります(笑)こんなん手で修正できないですよね。
VTKファイルに変換
Visualisation Toolkit (VTK)というファイル形式に変換するとよいとのこと。変換には、surfaceConvertの不要モデルの削除(-clean)を使うようです。
surfaceConvert motorBike.obj motorBike-1.obj -clean > /dev/null
surfaceConvert motorBike.obj motorBike.vtk
paraview motorBike.vtk paraview motorBike-1.obj
でモデル見れますが、見ても違いが判りません(笑)
モデルをチェックします。
surfaceCheck motorBike-1.obj | grep 'illegal triangles'
そうすると、
Surface has no illegal triangles.
とエラーがないことがわかります。ので、motorBike.objに名前を変更します。
mv motorBike-1.obj motorBike.obj
BlockMeshの実行
モデル用の仮想風洞実験室を作るって感じですかね?
blockMeshとblockMeshDictの説明は、こちらを見てください。
more system/blockMeshDict
で確認できます。
motorBikeのディレクトリから
blockMesh
を実行すると、 constant/polyMeshの下にboundary faces neighbour owner pointsというファイルが出来ます。
snappyHexMeshの実行
これは、モデルの周りを細かくメッシュ作るというものです。
で。。その前に、file “motorBike.eMesh” を作らなくてはいけないそうで、それには、surfaceFeatureExtractというUtilityを使うそうです。
surfaceFeatureExtract
とうつと。。Warningも出ていますが。。こんな表示がでて、motorBike.eMeshができます
Writing featureEdgeMesh to “/opt/OpenFOAM/tominaga-v1706/run/motorBike/constant/triSurface/motorBike.eMesh”
ExecutionTime = 5.57 s ClockTime = 6 s
snappyHexMesh -overwrite
として、風洞と、バイクのモデルのメッシュを作ります。これ結構時間かかります。
Finished meshing without any errors
Finished meshing in = 422.36 s.
End
って出たら成功。 これが、できなかったので、うまくいかなかったようです。
checkMesh
でチェックしてOKだったら。。
paraFoam
でメッシュを見てみると、こんな感じに
初期条件のコピー
cp -r 0.orig/* 0
0 ってフォルダに初期条件をコピーするようです。
並列計算の確認
more system/decomposeParDict.6
並列計算のための分割数などの条件が入っているファイル。
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: plus | | \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; object decomposeParDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // numberOfSubdomains 6; method hierarchical; // method ptscotch; simpleCoeffs { n (6 1 1); delta 0.001; } hierarchicalCoeffs { n (3 2 1); delta 0.001; order xyz; } manualCoeffs { dataFile "cellDecomposition"; } // ************************************************************************* //
この中の以下の部分で6個のパラレルにしろと言っています。
numberOfSubdomains 6;
で、cd system でcp decomposeParDict.6 decomposeParDict
としてこのファイルを使います。その後、 cd .. で元のディレクトリに戻って
いよいよ実行の前に(笑) メッシュの分割
decomposePar
そうすると0~5に分割されたファイルができます。
初期条件を計算して、計算実行
mpiexec -np 6 potentialFoam -noFunctionObjects -parallel
potentialFoam を 6個で並列計算しろってコマンドらしいです。
いよいよ計算
mpiexec -np 6 simpleFoam -parallel> log &
プロセスが動いているか確認すると
$ ps PID TTY TIME CMD 3125 pts/2 00:00:00 bash 6664 pts/2 00:00:00 mpiexec 6666 pts/2 00:00:12 simpleFoam 6667 pts/2 00:00:12 simpleFoam 6668 pts/2 00:00:12 simpleFoam 6669 pts/2 00:00:12 simpleFoam 6670 pts/2 00:00:12 simpleFoam 6671 pts/2 00:00:12 simpleFoam 6685 pts/2 00:00:00 ps
と出てきます。
これ、かなり時間かかります。
計算されているかの確認用のGnuplotのスクリプト
- residuals というファイル名で以下のGnuplotのスクリプトを保存
# Gnuplot script file for plotting data from file "log" set title "Convergence process" set xlabel "Iterations" set ylabel "Reziduals" set logscale y plot "< cat log | grep Ux | cut -d' ' -f9 | tr -d ','" title 'u', \ "< cat log | grep Uy | cut -d' ' -f9 | tr -d ','" title 'v', \ "< cat log | grep Uz | cut -d' ' -f9 | tr -d ','" title 'w' pause 10 # pause mouse
- 動いている時に、以下のコマンドを打つと
gnuplot residuals
こんな図が出てきます。
で。。
ExecutionTime = 218.32 s ClockTime = 1338 s
くらいの時間かかります。ってこれだと23分くらいですけど。。もっと時間かかってるような気もします(笑)
再結合
reconstructPar
で並列計算のファイルを再結合します。
表示
paraFoam
で表示します。
ちょこちょことparaviewをいじらないと、こういう図は描けないですが、バイクにかかる圧力と、流線を表示しています。
Cd, Clの値の取得
controlDict ファイルに、Cd(抗力係数) Cl(浮力係数)を計算するように記述してあるとその値が取れるようです。その計算結果は、以下のファイルに入っています。
postProcessing/forceCoeffs1/0 の下の
coefficient.dat coefficient_0.dat
このファイルをGnuplotで見るために、plotCdCl と名前をつけたScriptを置いて
# Gnuplot script file for plotting data from file "forceCoeffs.dat" set title "Convergence process" set xlabel "Iterations" set ylabel "Aerodynamics Coefficients" plot [ ][-0.2:0.8]\ "postProcessing/forceCoeffs1/0/coefficient_0.dat" using 1:3 title 'Cd', \ "postProcessing/forceCoeffs1/0/coefficient_0.dat" using 1:4 title 'Cl' pause mouse
gnuplot plotCdCl
とうつと
Cd と Clが出てきます。 ちなみに、今回の計算は、定常流を計算するので
値の評価などは、おいておくとして(笑)
一応、これで、やりたいことの手順の確認ができました。
まずはMeshがきっちりできてないと、計算できないと。。
あと、メッシュの大きさなども、レイノルズ数や摩擦係数によっても違うそうなので、理論的にある程度わかってないとダメなようですね。。
まぁ、そのあたりは、おいおい 考えましょう<おぃおぃ!(笑)
やっと・・風洞実験ができる(笑)
こんなに難しいのね(笑)
ちなみに、最新のメッシュの切り方は、cfMesh だそうです(笑)
でも、これ面白いですねぇ~
ちなみに、PCは、こんなのです。
GPUにGTX1050Tiが入っているノートパソコンですが、今回の計算では、GPUは使えていません(笑) なので、Core i7あたりのパソコンなら計算時間は20分~30分でしょうね。
i5でも、6並列計算が、4並列になるくらいなので、60分~90分で計算できるとすると、
これくらいのノートパソコンでも、一応、計算できるって感じですね。
DeepLearningよりは、計算コストは安そうです(笑)
GPUを使えるようにしたら、きっと数分で終わるんだろうなぁ。。
参考
上記は、定常流(RANS)の計算です。非定常流(LES)の計算もできるようですね。
https://www.xsim.info/articles/OpenFOAM/tutorials/incompressible-pisoFoam-les-motorBike.html
コメントを残していただけるとありがたいです