メッシュ作成方法について

1,813 views
Skip to first unread message

noge

unread,
Jun 30, 2009, 2:24:52 AM6/30/09
to OpenFOAM
3DCADモデルを用いて流体解析を行うために、
STL形式ファイルをblenderにインポートし、メッシュ作成を行いたいのですが、どのように進めればよいのでしょうか?

blender上でモデルを開き、file→Export→BlockMesh Exporter GUIで6面体に分割されたblockを1つずつ選
択し、blockMeshDictへのExportを試みたのですが、この方法であれば、複雑な形状は分割されているblockの数が非常に多くなり、
全てを選択するのは困難で、上手くメッシュを作成できません。

今、扱っているモデルは円柱や直方体のものがいくつか組み合わさった様な形状です。
このような場合のメッシュ作成方法を教えください。よろしくお願いします。

E.Mogura

unread,
Jun 30, 2009, 4:59:46 PM6/30/09
to OpenFOAM
snappyHexMesh でいけると思いますが、ご存知?

noge

unread,
Jun 30, 2009, 7:28:43 PM6/30/09
to OpenFOAM
ありがとうございます。

snappyHexMeshについてはよく分かっていません。
進め方についてもあまり理解していない状態です。

kafu

unread,
Jun 30, 2009, 9:51:17 PM6/30/09
to OpenFOAM
STL形式で出力しているのであれば、enGridを使う方法もあります。OpenFAOMへの連携も簡単です。
Linux版は、なかなかインストールが難しそうですが、CPUが64ビットだったら、CAELinux2009に入っていますし、
Windows版なら簡単にインストール出来ます。
使い方は、ジロさんの、http://giropenfoam.web.fc2.com/enGrid/index_enGrid.html に詳しく
書かれています。

E.Mogura

unread,
Jul 1, 2009, 5:36:51 PM7/1/09
to OpenFOAM
STLファイルを使ったsnappyHexMeshのチュートリアルがあるので、
(tutorials/snappyHexMesh/motorBike)
まずは、それを動かしてみることからお勧めします。
(最初にblockMeshを実行、引き続きsnappyHexMeshを実行)

問題は、STL形式といっても、
Named Ascii STL といって、アスキー形式である点と、名前つきの部分の処理というか、対応です。
CADソフトも普通はバイナリ形式で出力するのが多いのと、名前つきの部分の解釈を出来ないCADがある点です。
(このあたりは、blenderを念頭にした説明ですが。。。)
blenderにプラグインを導入して、アスキー形式で出力できるようになるのですが、
blenderそのものに複数の名前付きブロックを取り込めないという問題があるという点です。

DEXCS2009-OpenFOAMでは、このあたりに色々工夫して、ごく簡単にメッシュ作成できるようにしているんですが、
まだ勉強会に参加した人向けに、限定配布したプロトタイプしかないので、
これを使って下さい、、、という訳にもいかず苦しい説明になりました。

On 7月1日, 午前8:28, noge <nogeno...@gmail.com> wrote:
> ありがとうございます。
>
> snappyHexMeshについてはよく分かっていません。
> 進め方についてもあまり理解していない状態です。
Message has been deleted

Sakuma

unread,
Jul 3, 2009, 11:02:39 PM7/3/09
to OpenFOAM
OpenFOAM超初心者ですが,この記事を見て早速やっています。なかなか絵になるバイクと思います。
そのため解析結果を早く見たいのですが。。。 書かれているようにsnappyHexMeshのディレクトリに移
動して,最初にblockMeshを実行、引き続きsnappyHexMeshを実行しました。

 snappyHexMeshが終わった後で,motoeBikeのディレクトリの下に1,2,3のホルダが出来ている事は
確認しましたが,ホルダ0と言って良いのか分かりませんが,初期条件,境界条件のホルダがありません
(東大での講習会ではそのように説明を受けたと記憶しています)。

 これはどのような値を設定してどのように作成するのでしょうか。また,この計算をさせるにはどのような
操作を次にすれば良いのでしょうか。この辺りがまだ良く分かりません。

 また,OpenFOAMとは直接関係はありませんが,snappyHexMeshの実行中にCPUの負荷状態を見よう
と思い,システムモニタを見ますとCPUが1個分しか認識されていません。Ubuntu 7.10は複数CPUに対応
しているのでしょうか?

どなたがご存じの方がおられましたら、教えて下さい。
> > 進め方についてもあまり理解していない状態です。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

E.Mogura

unread,
Jul 4, 2009, 5:27:44 AM7/4/09
to OpenFOAM
Sakuma さん、いい質問でしたね。確かに、そのあたりの説明はどこにもないかも。。。

snappyHexMeshのチュートリアルは、あくまでメッシュ作成だけの用途なので、
境界条件や物性ファイルまた計算スキームファイルなどはやりたい解析の種類に応じて
必要なファイルは別物になります。

tutorialsを色々触っているうちに自得した方法を簡単にまとめられないかと思いましたが説明も難しいですね。

以下、simpleFoam(定常非圧縮流れ)を例に説明しますが、長文になってしまいました。ご容赦のほど。


【OpenFOAM の通常の作法】

1.tutorials/simpleFoamの下にケースファイルがあるので、そのどれか(ここではpitzDaily)をコピーしてきて、適当な名
前をつける。
2.コピーしたケースのconstantフォルダーの下にpolyMeshフォルダーがあるので、そのpolyMeshフォルダーを、
 snappyHesMeshにて作成した最終ステップ(3)の下のpolyMeshフォルダーと入れ替える。
3.このpolyMeshフォルダーの中に、boundaryというファイルがあって、これで境界面を定義している。
 またparaFoamにてメッシュ確認、patch名表示させることで境界面の具体的配置を確認しながら、
 この境界面の名前を使って、初期条件ファイル(pitzDailyからコピーした 0 フォルダー以下に
 収納されているU,p,k,epsilon)の内容を所望の条件になるように書き換える。

 たとえば、U(速度)は、

 pitzDailyからコピーしてきたもの

dimensions [ 0 1 -1 0 0 0 0 ];
internalField uniform (0 0 0);
boundaryField
{
inlet
{
type fixedValue;
value uniform (10 0 0);
}

outlet
{
type zeroGradient;
}

upperWall
{
type fixedValue;
value uniform (0 0 0);
}

lowerWall
{
type fixedValue;
value uniform (0 0 0);
}

frontAndBack
{
type empty;
}
}

となっているはずですが、これを、類似の条件
(X方向に10m/sの風を流す。全周をスリップ壁)という想定で、
以下のように書き換える。

dimensions [ 0 1 -1 0 0 0 0 ];
internalField uniform (0 0 0);
boundaryField
{
maxZ
{
type slip;
}
maxX
{
type zeroGradient;
}
maxY
{
type slip;
}
minX
{
type fixedValue;
value uniform (10 0 0);
}
minY
{
type slip;
}
minZ
{
type slip;
}
motorBike_rear-brake-caliper%62
{
type fixedValue;
value uniform (0 0 0);
}
motorBike_frame:016%16
{
type fixedValue;
value uniform (0 0 0);
}

(途中省略)

motorBike_fuel-tank%30
{
type fixedValue;
value uniform (0 0 0);
}
}


なお、途中を省略してありますが、motorBikeのSTLファイルは表面を分割して別々の名前をつけてあるので、
境界面の数も、かなりたくさん(全部で73のはず)になってしまいます。境界面の名前は、
先のboundaryファイルからコピペするしかないでしょうが、これらを全部定義し直すことが必要になります。

なかなか面倒な作業ですねぇ。。。そこで、DEXCSの出番です。

【DEXCS2009の作法】

1.適当な名前で解析フォルダを新規に作成する。
2.メッシュ2のパネルにて、メッシュ確定ボタンを押して、tutorialケースで作成したメッシュ(3/polyMesh)を選択する。

3.境界条件のパネルにて、patch名取得ボタンを押してから、境界条件編集すると、
 すべての境界面がリストアップされている。但し、境界のタイプはすべて、
type zeroGradient;
 となっているので、必要部のみ変更してやればよい。U(速度)は上で見たように変更する。
  motorBike_***の面はたくさんありますが、ずべてカット&ペーストで
type fixedValue;
value uniform (0 0 0);
 とせにゃならんところは少々面倒ですが、あとは小変更。

 その他、p(圧力)は、

maxX
{
type fixedValue;
value uniform 0.0;
}

k
minX
{
type fixedValue;
value uniform 0.375;
}

epsilon
minX
{
type fixedValue;
value uniform 14.855;
}

 といったあたりの変更だけで済ませられるはずです。
> > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Sakuma

unread,
Jul 6, 2009, 11:36:51 AM7/6/09
to OpenFOAM
E.Moguraさん こんばんわ

 いつも色々と教えて頂きありがとうごさいます。

 snappyHexMeshでメッシュを切ったバイクをParaFoamで見ると,サイコロが積み上がったような形状に
なっています。ユーザーズガイドの5.4.6章 "面へのスナップ"の図5.15のように,stlの表面にメッシュが
乗るようにするには,snappyHexMeshDictのどの部分をどのように書き換えればよいのでしょうか。

 ご存じでしたら教えてください。

E.Mogura

unread,
Jul 6, 2009, 5:06:48 PM7/6/09
to open...@googlegroups.com
Sakuma さん、以下確認ください。
 
最終ステップ(3)まで計算は実行できていますか?
最終ステップ(3)のメッシュを表示できていますか?

2009/07/07 0:36 Sakuma <sakura....@gmail.com>:

Sakuma

unread,
Jul 7, 2009, 11:30:43 AM7/7/09
to OpenFOAM
E.Moguraさん ありがとうごさいます。

 お恥ずかしい限りで。。。
最終ステップ(3)のメッシュでなく(1)を見ていました。
ステップ(1)はサイコロ状のメッシュですが,ステップ(2),ステップ(3)の違いはあまり無いよう見えますが。
どこが違うでしょうか。何か大きな差があるのでしょうか。

 メッシュは出来ましたので,simpleFoamで解いてみたいと思います。そこで少し教えて頂きたいのですが,
岐阜高専での講習会のようにpotentialFoamで解析した後にsimpleFoamで解析するといった手法
が必要でしょうか?


On 7月7日, 午前6:06, "E.Mogura" <seikun...@gmail.com> wrote:
> Sakuma さん、以下確認ください。
>
> 最終ステップ(3)まで計算は実行できていますか?
> 最終ステップ(3)のメッシュを表示できていますか?
>
> 2009/07/07 0:36 Sakuma <sakura.maru...@gmail.com>:

E.Mogura

unread,
Jul 7, 2009, 4:38:21 PM7/7/09
to OpenFOAM
ステップ(2),ステップ(3)の違いですが、多分、物体(motorByke)の表面だけを見ているからわからないのだと思います。
=>物体を通過する断面を作成して空気部分のメッシュを比較して下さい。

あと、simpleFoamの解析ですが、DEXCS2009のランチャーを使って、デフォルトのパラメタセットを使うのであれば、
potentialFoamは使わないでも収束するはずです。(こちらでは96回程度で収束しました。計算時間は15分ほど)。
但し、境界条件は上に記した方法で変更したとしてという前提です。

それでは、あと少しでゴール。頑張ってください。
> ...
>
> もっと読む >>- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Sakuma

unread,
Jul 11, 2009, 2:30:31 AM7/11/09
to OpenFOAM
E.Moguraさんへ

 色々と教えて頂いた方法でDEXCS2009を利用してやっていますが,エラーで止まってしまいます。
何か設定がおかしいとは思いますがよく分かりません。

 速度の設定:maxZ,maxY,minZ,minYはtype slip
maxXはtype zeroGradient
minXはtype fixedValue; value uniform (10 0 0)
         その他のmotoBike***はtype fixedValue; value uniform (0 0 0)としています。

 圧力の設定:maxXのみtype fixedValue; value uniform 0;
         その他は全部type zeroGradientとしています。

 kの設定:minXのみtype fixedValue; value uniform 0.375;
         その他は全部type zeroGradientとしています。

 epsilonの設定:minXのみtype fixedValue; value uniform 14.855;
         その他は全部type zeroGradientとしています。

  また,kやepsilonの定数は,乱流モデル(k-epsilonモデル)での定数で決まっているものでしょうか?
 それとも,この値はユーザーが調整するなどする値でしょうか?

これらのファイルは解析フォルダの/exe/0に入っています。

 計算実行は、DEXCS2009の計算実行/simpleFoamの実行ボタンで行っています。

 計算が始まると,下記のようなワーニングが出ます。
Starting time loop

--> FOAM Warning :
From function polyBoundaryMesh::patchSet(const wordList& patchNames)
in file meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C at line
429
Cannot find any patch names matching dexcs_Font
--> FOAM Warning :
From function polyBoundaryMesh::patchSet(const wordList& patchNames)
in file meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C at line
429
Cannot find any patch names matching dexcs_Font
--> FOAM Warning :
From function polyBoundaryMesh::patchSet(const wordList& patchNames)
in file meshes/polyMesh/polyBoundaryMesh/polyBoundaryMesh.C at line
429
Cannot find any patch names matching dexcs_Font

 そしてTime=14で止まってしまいます。
Time = 14

DILUPBiCG: Solving for Ux, Initial residual = 1, Final residual =
0.0807294, No Iterations 2
DILUPBiCG: Solving for Uy, Initial residual = 1, Final residual =
0.013639, No Iterations 3
DILUPBiCG: Solving for Uz, Initial residual = 1, Final residual =
0.0174439, No Iterations 3
DICPCG: Solving for p, Initial residual = 0.780814, Final residual =
0.00712181, No Iterations 6
time step continuity errors : sum local = 1.34912e+64, global =
1.83178e+48, cumulative = 1.83178e+48
#0 Foam::error::printStack(Foam::Ostream&) in "/home/seminar/OpenFOAM/
OpenFOAM-1.5.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#1 Foam::sigFpe::sigFpeHandler(int) in "/home/seminar/OpenFOAM/
OpenFOAM-1.5.x/lib/linuxGccDPOpt/libOpenFOAM.so"
#2 Uninterpreted:
#3 Foam::PBiCG::solve(Foam::Field<double>&, Foam::Field<double>
const&, unsigned char) const in "/home/seminar/OpenFOAM/OpenFOAM-1.5.x/
lib/linuxGccDPOpt/libOpenFOAM.so"
#4 Foam::fvMatrix<double>::solve(Foam::Istream&) in "/home/seminar/
OpenFOAM/OpenFOAM-1.5.x/lib/linuxGccDPOpt/libfiniteVolume.so"
#5 Foam::lduMatrix::solverPerformance Foam::solve<double>
(Foam::tmp<Foam::fvMatrix<double> > const&) in "/home/seminar/OpenFOAM/
OpenFOAM-1.5.x/lib/linuxGccDPOpt/libincompressibleRASModels.so"
#6 Foam::incompressible::RASModels::kEpsilon::correct() in "/home/
seminar/OpenFOAM/OpenFOAM-1.5.x/lib/linuxGccDPOpt/
libincompressibleRASModels.so"
#7 main in "/home/seminar/OpenFOAM/OpenFOAM-1.5.x/applications/bin/
linuxGccDPOpt/simpleFoam"
#8 __libc_start_main in "/lib/tls/i686/cmov/libc.so.6"
#9 Foam::regIOobject::readIfModified() in "/home/seminar/OpenFOAM/
OpenFOAM-1.5.x/applications/bin/linuxGccDPOpt/simpleFoam"
Floating point exception (core dumped)

 まずはどの辺りがおかしいかヒント等がありましたら,教えてください。

 まだまだ先は長いような気がしますが,なんとかクリアしたいと思います。

E.Mogura

unread,
Jul 11, 2009, 9:58:25 AM7/11/09
to open...@googlegroups.com
Sakumaさん。
 
E.Moguraです。
多分、乱流計算で発散してしまったんだと思います。
 
⇒ exe フォルダー以下を書庫に作成してメール添付送付ください。
 

--> FOAM Warning :
これは物体力を計算するところで、設定が誤っているのですが、
本計算には関係ないのでとりあえず気にしなくていいです。
 
>また,kやepsilonの定数は,乱流モデル(k-epsilonモデル)での定数で決まっているものでしょうか?
>それとも,この値はユーザーが調整するなどする値でしょうか?
特に指定しなければデフォルトの値がセットされます。
変更したい場合は、
constantフォルダーの下にあるRASPrppertiesです。
2009/07/11 15:30 Sakuma <sakura....@gmail.com>:

E.Mogura

unread,
Jul 11, 2009, 9:44:34 PM7/11/09
to OpenFOAM
DEXCS(計算実行)にて、
simpleFoamを実行する前に、potentialFoamを実行て、
再度simpleFoamを実行したらどうなりますか?

また、乱流モデル定数は、
DEXCS(流体特性)-乱流モデル
にて設定を変更可能です(何もしなければデフォルト値を使用)



On 7月11日, 午後10:58, "E.Mogura" <seikun...@gmail.com> wrote:
> Sakumaさん。
>
> E.Moguraです。
> 多分、乱流計算で発散してしまったんだと思います。
>
> => exe フォルダー以下を書庫に作成してメール添付送付ください。
>
> --> FOAM Warning :
> これは物体力を計算するところで、設定が誤っているのですが、
> 本計算には関係ないのでとりあえず気にしなくていいです。
>
> >また,kやepsilonの定数は,乱流モデル(k-epsilonモデル)での定数で決まっているものでしょうか?
> >それとも,この値はユーザーが調整するなどする値でしょうか?
>
> 特に指定しなければデフォルトの値がセットされます。
> 変更したい場合は、
> constantフォルダーの下にあるRASPrppertiesです。
> 2009/07/11 15:30 Sakuma <sakura.maru...@gmail.com>:

Sakuma

unread,
Jul 12, 2009, 1:03:57 AM7/12/09
to OpenFOAM
E.Mogura さんへ

 potentialFoam,simpleFoamの順に計算をしました。Time=86で計算が終わりました?
E.Mogura さんの解析ではpotentialFoamを行うことなく96回程度で終了と書かれていますが,
simpleFoamを行う前にはpotentialFoamをした方が良いのでしょうか?。potentialFoamが必
要か必要でないかはどのように考えればよいのでしょうか。

Time = 86
DILUPBiCG: Solving for Ux, Initial residual = 7.7353e-06, Final
residual = 7.7353e-06, No Iterations 0
DILUPBiCG: Solving for Uy, Initial residual = 0.000130239, Final
residual = 1.26505e-05, No Iterations 2
DILUPBiCG: Solving for Uz, Initial residual = 0.000415633, Final
residual = 3.39452e-05, No Iterations 2
DICPCG: Solving for p, Initial residual = 0.000926518, Final residual
= 8.70868e-06, No Iterations 51
time step continuity errors : sum local = 1.84064e-07, global =
-7.69582e-08, cumulative = 2.76744e-05
DILUPBiCG: Solving for epsilon, Initial residual = 7.65337e-06, Final
residual = 7.65337e-06, No Iterations 0
DILUPBiCG: Solving for k, Initial residual = 2.29395e-05, Final
residual = 5.3853e-06, No Iterations 1
ExecutionTime = 415.76 s ClockTime = 441 s

reached convergence criterion: 0.001
latestTime = 86
End

E.Mogura

unread,
Jul 12, 2009, 8:38:41 AM7/12/09
to OpenFOAM
失礼しました。

potentialFoamを行うことなく96回程度で終了したのは、境界条件が少々違ってました。
改めてやり直したら、Sakumaさんと同じように発散して、potentialFoamで前処理したら収束したので、先のコメントになった次第で
す。

potentialFoamの必要性に関するご質問ですが、ケースバイケースでかような使い方をするもんだと思っていただくしかないのでは?

Sakuma

unread,
Jul 12, 2009, 9:23:27 AM7/12/09
to OpenFOAM
E.Mogura さんへ

 ありがとうごさいます。少しずつですがOpenFOAMの操作環境が分かってきた気がします。
 もう少し教えて頂きたいのですが,96回で終了した境界条件はどのような設定でしょうか?

 また,このバイクのモデルを初めからDEXCSでやりたいと思い,BlenderにmotorBike.stlを読み込もうとすると
バイクの一部と思われる部分しか読めません。paraFoamで読み込むと全体のモデルが読み込めるのですが。
バイクのモデルは,File/import/STLで読み込んでいます。

E.Mogura

unread,
Jul 12, 2009, 4:09:43 PM7/12/09
to OpenFOAM
96回で終了した境界条件は,k,epsilon で、
流入条件(minX)でなく、流出条件(maxX)を規定しておりました。

また、STLの名前ブロックを複数表示できない点に関しては、
先の講習会の資料中
http://www.ofwikija.org/images/20090513_nomura_DEXCS_v1.pdf
11ページにも記してありますように、
DEXCSというかblenderの仕様のようなので、
DEXCSで取り扱えるようにするには、
名前ブロック毎に別々のファイルにしておく必要があります。
Reply all
Reply to author
Forward
0 new messages