【OpenFOAM】motorBikeのチュートリアルが動かない!!モデルはつながってないとダメらしい【CFD】

スポンサーリンク
広告

ラジコンボディの空力をみるのに。。

もうなんか笑っちゃいますが。。内部流のシミュレーションはできるのに、外部流のシミュレーションがぜんぜんできない(笑) それができないと、ラジコンボディのエアロダイナミクスを見れないのですよね。 でもTutorialの中に、motorBikeというのがあって、それならできるらしいのですが、なぜかぜんぜんできなくて。。困っていました。

DEXCS2017の最初のチュートリアルも、なんか入れ忘れが多くてうまく動かせなく。。

あきらめかけていました。

.vtkファイルにするのが簡単な回避方法??

が・・・どうも、モデルの表面のMeshがきれいに生成されていないことに原因がありそうだということを見つけました。

Tutorial 'incompressible/simpleFoam/motorBike' shows non-zero velocities on the surfaces of the pilot and motorbike · Issue #38 · blueCFD/Core
As the title states, the values are not zero on the patches for the motorBike group. The values seem to be the ones for the internal mesh, which leads to believ...
0002298: Bug using paraFoam in the simpleFoam tuto motorBike and windAroundBuilding - OpenFOAM Issue Tracking
0002395: Motorbike tutorial run from Allrun doesn't work - OpenFOAM Issue Tracking

よくわからないのですが、VTKファイルにすると大丈夫だということ。

F14のシミュレーションでは

OpenFOAM : Run-time post-processing

checkMesh Utilityを使ってメッシュを確認することが書かれています。

一番最初にWindows版のOpenFOAM入れたCfd-supportのMoterBikeのページでは

Test case: motorBike
Test case: motorBike

surfaceCheckを使って表面の連続性をチェックし

surfaceConvertで .obj ファイルを .vtkファイルに変換するように指定しています。

これCfd-support版のOpenFOAMでは動かなかったのと、blue-CDFに入っているOpenFOAM-5.x系には、そもそもsurfaceCheckが入っていないので使えません。

しかし、DEXCS2017版のOpenFOAM Plus(OpenFOAM-v1706)にコマンドがあることがわかり、それで試してみると、やっとmotorBikeを動かすことができました。

これが通るということは、仮想風洞実験ができるってことですね。。では、そのやり方を( ..)φメモメモしておきます。

ちなみに、日本語のOpenFOAMのUtilityの説明を見つけました。

OpenFOAMのユーティリティ | 株式会社ソフトフロー
OpenFOAM に付属しているメッシュ設定用のユーティリティについて解説します。

OpenFOAM tutorials motorBikeの動かし方

基本的にCFD-supportのmotorBikeの説明の通りです。

Test case: motorBike
Test case: 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を使えるようにしたら、きっと数分で終わるんだろうなぁ。。

コメントを残していただけるとありがたいです

Loading Facebook Comments ...
%d人のブロガーが「いいね」をつけました。