snappyHexMeshを使用したマルチリージョンメッシュの作成

1,243 views
Skip to first unread message

cfd

unread,
Jul 2, 2010, 9:22:20 PM7/2/10
to OpenFOAM
私は現在OpenFOAMのporousSimpleFoamソルバを使用して排気管中の
ポーラスメディアを通過する流れの解析に挑戦しています。このソルバのチュ
ートリアルには、3つのヘキサ領域からなるモデルをblockMeshによりメッシュ
を切って計算を行う事例がありますが、私はより一般的な形状において
snappyHexMeshを使用してメッシュを生成したいと考えています。

具体的な形状データは、次の3つのstlファイルに用意してあります。
1. 流れ領域(排気管、簡単な形状ではない)の形状データ housing.stl
2. 1つ目のポーラスメディアの形状データ porous1.stl
3. 2つ目のポーラスメディアの形状データ porous2.stl

但し、1の形状は2つのポーラスメディアの前後と真ん中の流体領域に分けた
ものではなく、1つの領域からなる形状です。

このような3つのstlデータからsnappyHexMeshを利用して、porousSimpleFoam
に使用できるマルチリージョンのメッシュを生成することは可能でしょうか?
snappyMultiRegionHeaterチュートリアルを参考に試行錯誤していますが
うまくいっていません。ご教授お願いいたします。

IMANO Masashi

unread,
Jul 3, 2010, 2:08:13 AM7/3/10
to open...@googlegroups.com

今野です。

> このような3つのstlデータからsnappyHexMeshを利用して、porousSimpleFoam
> に使用できるマルチリージョンのメッシュを生成することは可能でしょうか?

形状データを送付するのは難しいと思いますが、形状データを可視化した画像
やblockMeshDict、snappyHexMeshDictを添付するなどして、自分がどのような
問題を解こうとしているのかもう少し丁寧に説明して頂けますか?

> snappyMultiRegionHeaterチュートリアルを参考に試行錯誤していますが
> うまくいっていません。ご教授お願いいたします。

また、どう上手く行っていないのかも教えてください。

今野 雅 // IMANO Masashi

cfd

unread,
Jul 5, 2010, 10:26:37 PM7/5/10
to OpenFOAM
今野先生返信ありがとうございます。

snappyMultiRegionHeaterチュートリアルの場合は、blockMeshで定義した
外枠の計算領域とstl形状の和集合が一致していますが、snappyHexMesh
を使用してマルチリージョンメッシュを生成する場合には、必ずこのようにする
必要があるのでしょうか?(私の場合には、housing.stlと外枠の計算領域に
囲まれる領域のstlデータなども準備する必要があるのでしょうか?)

そのようなstlデータを準備しなくても可能であれば、その方法を教えて頂けますか?
お願い致します。

E.Mogura

unread,
Jul 8, 2010, 4:39:15 PM7/8/10
to OpenFOAM
E.Mogura です。


snappyMultiRegionHeaterチュートリアルの場合で、
たとえば、topAir.stl が存在しないとしてやってみました。
(bottomAir, heater, leftSolid, rightSolid はstlが存在して、
 cellZoneを作成済みという状態)


[makeCellSets.setSet]
cellSet topAir clear
cellSet topAir add zoneToCell bottomAir
cellSet topAir add zoneToCell heater
cellSet topAir add zoneToCell leftSolid
cellSet topAir add zoneToCell rightSolid
cellSet topAir invert

というファイルを作成しておいて、

setSet -batch makeCellSets.setSet
setsToZones -noFlipMap

を実行すれば、topAir というcellZones が出来てくれるようです。
(topAir.stl をベースにSHMで作成したものとは微妙に異なりますが)

以上

cfd

unread,
Jul 8, 2010, 11:34:48 PM7/8/10
to OpenFOAM
E.Mogura さん返信ありがとうございます。

> snappyMultiRegionHeaterチュートリアルの場合で、
> たとえば、topAir.stl が存在しないとしてやってみました。
> (bottomAir, heater, leftSolid, rightSolid はstlが存在して、
> cellZoneを作成済みという状態)

これは、デフォルトのsnappyMultiRegionHeaterチュートリアル
のsnappyHexMeshDictファイルのgeometryおよびrefinementSurfaces
から、topAirに関する部分のみをコメントアウトするという変更のみを行って、
blockMesh と
snappyHexMesh
を実行するという理解でよろしいでしょうか?


> [makeCellSets.setSet]
> cellSet topAir clear
> cellSet topAir add zoneToCell bottomAir
> cellSet topAir add zoneToCell heater
> cellSet topAir add zoneToCell leftSolid
> cellSet topAir add zoneToCell rightSolid
> cellSet topAir invert
>
> というファイルを作成しておいて、
>
> setSet -batch makeCellSets.setSet
> setsToZones -noFlipMap

上記を実行すると、以下のコメントが表示されました。

/
************************************************************************************************************/
Create
time

Create polyMesh for time = 0

Time:0 cells:3000 faces:9700 points:3751 patches:6 bb:(-0.1 -0.04
-0.05) (0.1 0.04 0.05)

Reading commands from file "makeCellSets.setSet"
Please type 'help', 'quit' or a set command after prompt.
Doing:"cellSet topAir clear"
Set:topAir Size:0 Action:clear
Writing topAir (size 0) to "constant/polyMesh/sets/topAir" and to
vtk file "VTK/topAir/topAir_1.vtk"

Doing:"cellSet topAir add zoneToCell bottomAir"
Set:topAir Size:0 Action:add
Adding all cells of cellZone bottomAir ...
--> FOAM Warning :
From function zoneToCell::combine(topoSet&, const bool)
in file sets/cellSources/zoneToCell/zoneToCell.C at line 87
Cannot find any cellZone named bottomAir
Valid names are
0
(
)

Writing topAir (size 0) to "constant/polyMesh/sets/topAir" and to
vtk file "VTK/topAir/topAir_1.vtk"

Doing:"cellSet topAir add zoneToCell heater"
Set:topAir Size:0 Action:add
Adding all cells of cellZone heater ...
--> FOAM Warning :
From function zoneToCell::combine(topoSet&, const bool)
in file sets/cellSources/zoneToCell/zoneToCell.C at line 87
Cannot find any cellZone named heater
Valid names are
0
(
)

Writing topAir (size 0) to "constant/polyMesh/sets/topAir" and to
vtk file "VTK/topAir/topAir_1.vtk"

Doing:"cellSet topAir add zoneToCell leftSolid"
Set:topAir Size:0 Action:add
Adding all cells of cellZone leftSolid ...
--> FOAM Warning :
From function zoneToCell::combine(topoSet&, const bool)
in file sets/cellSources/zoneToCell/zoneToCell.C at line 87
Cannot find any cellZone named leftSolid
Valid names are
0
(
)

Writing topAir (size 0) to "constant/polyMesh/sets/topAir" and to
vtk file "VTK/topAir/topAir_1.vtk"

Doing:"cellSet topAir add zoneToCell rightSolid"
Set:topAir Size:0 Action:add
Adding all cells of cellZone rightSolid ...
--> FOAM Warning :
From function zoneToCell::combine(topoSet&, const bool)
in file sets/cellSources/zoneToCell/zoneToCell.C at line 87
Cannot find any cellZone named rightSolid
Valid names are
0
(
)

Writing topAir (size 0) to "constant/polyMesh/sets/topAir" and to
vtk file "VTK/topAir/topAir_1.vtk"

Doing:"cellSet topAir invert"
Set:topAir Size:0 Action:invert
Writing topAir (size 3000) to "constant/polyMesh/sets/topAir" and
to vtk file "VTK/topAir/topAir_1.vtk"

End of batch file

End

/
************************************************************************************************************/

Create
time

Create polyMesh for time = 0.002

Searched : "0.002/polyMesh/sets"
Found :
0
(
)


Writing mesh.

End

/
************************************************************************************************************/

constant/polyMesh/sets/topAir は作成されましたが、中身を見ると要素数がblockMeshの
数の3000となっています。どこか私の設定に良くない点があったのでしょうか?

また、

> を実行すれば、topAir というcellZones が出来てくれるようです。
> (topAir.stl をベースにSHMで作成したものとは微妙に異なりますが)

このtopAirのcellZonesはどのファイルに記述されるのでしょうか?

最後に、
polyMesh/setsにtopAirのみではなく、デフォルトのチュートリアルのように全ての領域の
データが書き出されるようにするにはどのように設定を変更すればよろしいですか?

以上、よろしくお願いします。

E.Mogura

unread,
Jul 9, 2010, 5:24:36 PM7/9/10
to OpenFOAM
E.Mogura です。

> これは、デフォルトのsnappyMultiRegionHeaterチュートリアル
> のsnappyHexMeshDictファイルのgeometryおよびrefinementSurfaces
> から、topAirに関する部分のみをコメントアウトするという変更のみを行って、
> blockMesh と
> snappyHexMesh
> を実行するという理解でよろしいでしょうか?

snappyHexMesh の実行時には、

snappyHexMesh -overwrite

としてください。

On 7月9日, 午後12:34, cfd <fumiya.noz...@gmail.com> wrote:
> E.Mogura さん返信ありがとうございます。
>
> > snappyMultiRegionHeaterチュートリアルの場合で、
> > たとえば、topAir.stl が存在しないとしてやってみました。
> > (bottomAir, heater, leftSolid, rightSolid はstlが存在して、
> > cellZoneを作成済みという状態)
>
> これは、デフォルトのsnappyMultiRegionHeaterチュートリアル
> のsnappyHexMeshDictファイルのgeometryおよびrefinementSurfaces
> から、topAirに関する部分のみをコメントアウトするという変更のみを行って、
> blockMesh と
> snappyHexMesh
> を実行するという理解でよろしいでしょうか?
>
> > [makeCellSets.setSet]
> > cellSet topAir clear
> > cellSet topAir add zoneToCell bottomAir
> > cellSet topAir add zoneToCell heater
> > cellSet topAir add zoneToCell leftSolid
> > cellSet topAir add zoneToCell rightSolid
> > cellSet topAir invert
>
> > というファイルを作成しておいて、
>
> > setSet -batch makeCellSets.setSet
> > setsToZones -noFlipMap
>
> 上記を実行すると、以下のコメントが表示されました。
>
> /
> ***************************************************************************-*********************************/
> ***************************************************************************-*********************************/
>
> Create
> time
>
> Create polyMesh for time = 0.002
>
> Searched : "0.002/polyMesh/sets"
> Found :
> 0
> (
> )
>
> Writing mesh.
>
> End
>
> /
> ***************************************************************************-*********************************/

cfd

unread,
Jul 11, 2010, 4:38:54 AM7/11/10
to OpenFOAM
E.Mogura様のご指摘の方法により、この点は解決いたしました。
ありがとうございます。

話は変わりますが、例えば、円柱状の管の途中にこれと同じ断面
のポーラスメディアがあるような流れ場をsnappyHexMeshを使用し
てメッシュを生成するという場合を考えます。この際、stlデータ
として

Case1) 円柱状の管(cylinder.stl)と(円柱状の)ポーラスメディア(porous.stl)

の2つを用意する場合と、流れを流体領域とポーラスメディアの領域に分けて

Case2) 管の流入面からポーラスメディアまでの流体領域(inlet.stl)
とポーラスメディアから管の流出面までの流体領域(outlet.stl)
   とポーラスメディア(porous.stl)

の3つを用意する場合とが考えられると思います。

Case1では流体領域のcadデータをつくる必要がない分手間がかか
らないと思い、私は現在Case1で進めております。計算のためには、

1. ポーラスメディアのゾーン情報(cellZones) および
2. 円柱表面をポーラスメディアと接するか流体と接するかにより区別する

ということが必要だと思うのですが、これらはCase1とCase2のどちらでも
可能なのでしょうか?

因みに私は、Case1において、円柱状の管全体を包含する形でblockMeshをはり、
snappyHexMeshDictにおいて、

refinementSurfaces
{
cylinder
{
level (1 1);
}
porous
{
level (1 1);
faceZone porous;
cellZone porous;
zoneInside true;
}
}

と設定することで、マルチリージョンのメッシュをはり、
1)ポーラスメディアの領域のcellZonesを作成することは
できたのですが、2ができていません。

現在使用しているstlデータはポーラスメディアの円柱表面と
管全体の円柱表面が共通部分をもつような形状となっている
のですが、2は可能でしょうか?

お願いいたします。

また、壁との熱交換やポーラスメディアを考えた内部流れを
snappyHexMeshを使用して解析した例などはあるのでしょうか?
ご存知の方がいらっしゃればご教示お願いいたします。
Reply all
Reply to author
Forward
0 new messages