chtMultiRegionFoamにおける領域指定

153 views
Skip to first unread message

Nishiguchi

unread,
May 10, 2024, 2:59:08 AMMay 10
to OpenFOAM
 お世話になっております。nishiguchiと申します。

 chtMultiRegionFoamを導入する際にわからない点が生じましたので質問させていただきます。

 現在、以下の図1のような部屋において今までは、buoyantPimpleFoamを用いて計算していたものを、壁などの熱伝導等を考慮するためにchtMultiRegionFoamに移行しようと考えています。
 そこでまず、このソルバーの使用になれるために、室内の居間にあたる部分にベッドを想定した直方体を設置し、その中の熱伝導を含めた計算を行いたいと考えています。
(領域は空気部とベッド内部の2つ)

 色々調べて、手順としては、
メッシュを切る→領域を指定→各領域の物性や境界条件を設定する
 のようなものになると把握しています。

その際、どのようにして領域を設定するのでしょうか。
splitMeshRegionsによってどこかのファイルに記載された領域名と座標から読んでいると思うのですが、それがどこなのか、またどのように設定すればいいかわからない状態です。座標で設定する場合、複雑な形状だと大変だとも考えています。

この計算はDexcs2022を使用して行っているのですがそれを利用できるのであればそれも教えていただきたいです。

お手数おかけしますが、ご教授いただけると幸いです。

スクリーンショット 2024-05-10 155429.png
図1.部屋のモデル(真ん中の直方体部がベッド)


Hideaki Kominami

unread,
May 10, 2024, 10:50:58 AMMay 10
to open...@googlegroups.com
nishiguchiさん

kominamiです。どっかで見たことのあるような間取りですね(笑)。

chtMultiRegionFoam用のメッシュのデータ構成はかなり難解です。
図をみると、blockMeshで何とかなるレベルではなく、3D-CADのジオメトリから出発する積りだと思います。。
したがって、OpenFOAMに対応した商用のメッシャーで 持っているなら、それを使うのが手っ取り早いです。

chtMultiRegionFoam用のメッシュのデータ構成についてのザクっとしたイメージなら、この記事で良いと思います。
しかし、このサイトの記事だけで、メッシュ生成をするのは無理だと思います。

OpenFOAM付属のユーティティだけで行いたいのならば、メッシュのデータ構成を勉強する必要があります。
ちなみに私がやった方法は、下記の【A】と【B】の両方です。おそらく、これくらいの勉強をしないと、任意の3D-CAD形状でのメッシュ作成ができるようにならないと思います。

【A】chtMultiRegionFoamとchtMultiRegionSimpleFoamのチュートリアルを実行して、./Allrunスクリプトのコマンドを1つずつ実行していき、ケースファイルの内容の変化を調べる。

【B】DEXCSに同梱されているTreeFOAMを使う方法を、とりあえず真似してみる。こちらの方法も、最初は通しで行い、次は、ひとつずつの操作の結果、OpenFOAMのケースファイルの内容の変化を調べる。
資料は ↓

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

2024年5月10日(金) 15:59 Nishiguchi <tsubasa....@gmail.com>:
--
このメールは Google グループのグループ「OpenFOAM」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには openfoam+u...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/openfoam/646e854a-af84-47a5-9867-4bbd7fe4e743n%40googlegroups.com にアクセスしてください。

k k

unread,
May 12, 2024, 8:30:27 AMMay 12
to OpenFOAM
こんにちは。kです。

チュートリアルではtopoSetを使った方法とsnappyHexMeshを使った方法があります。
自分が調べたときの覚書ですが、ご参考ください。

(1)topoSet
  1. blockMesh:ベースメッシュの作成
  2. topoSet:cellZoneの作成
  3. cp -r 0.orig 0:0.origフォルダをコピー
  4. splitMeshRegions:topoSetで作成したcellZoneを使って領域分割
  5. changeDictionary:境界条件の変更
  6. chtMultiRegionFoam:計算実行

(2)snappyHexMesh
  1. blockMesh:ベースメッシュの作成
  2. snappyHexMesh:メッシュ作成とcellZoneの作成
  3. cp -r 0.orig 0:0.origフォルダをコピー
  4. splitMeshRegions:snappyHexMeshで作成したcellZoneを使って領域分割
  5. changeDictionary:境界条件の変更
  6. chtMultiRegionFoam:計算実行

(2)snappyHexMeshの方法が良いと思いますが、0、constant、systemのすべて領域ごとに用意するので、オリジナルのモデル作成はすごく面倒です(できなくはないです)。

自分が過去にやった方法(2)snappyHexMeshとsplitMeshRegionsについて流れを記載します。
■FreeCADでモデルを作成→stlで出力
■snappyHexMeshでメッシュ設定
↓こういう形で各領域でcellZoneができます。heaterやrightSolidは任意の名前

    locationsInMesh
    (
        (( 0.005 0.005  0.005) heater)
        (( 0.05  0.005  0.005) rightSolid)
        ((-0.05  0.005  0.005) leftSolid)
        ((-0.05  0.015  0.005) topAir)
        ((-0.05 -0.015  0.005) bottomAir)
    );

■そのあとに、
splitMeshRegions -cellZones -overwrite
のコマンドでsnappyHexMeshで出力したcellZoneに従って、メッシュ情報(constant/polyMesh)内で領域分割されます。
確か0フォルダ内も領域に分割されたはず(←記憶があいまい)

■あとはひたすら0フォルダ、systemフォルダも領域ごとに全部設定していく

■境界条件の整合性をとるためにchangeDictionaryを使う(使わなくてもよいが・・・)

かなり手間ですが、自力でやるならば(2)の方法で試してください。
2024年5月10日金曜日 23:50:58 UTC+9 Hideaki Kominami:

Nishiguchi

unread,
May 12, 2024, 9:25:32 PMMay 12
to OpenFOAM
kominami様、k様ご返事ありがとうございます。
nishiguchiです。

kominami様には本当にいつもお世話になっております(笑)
ご提案いただいた各方法を検討してみます。

何か進展があればまた投稿させていただきます。

Nishiguchi

unread,
May 23, 2024, 2:36:55 AMMay 23
to OpenFOAM
皆様、お世話になっております。nishiguchiです。

この度、進展とさらに質問したいことが生じたため、投稿させていただきます。

領域を分けることにつきましては、k k様から頂いたtoposetについてのurlを参照しながら進めることができ、結果的に計算まで進めることができました。
順序的には
DEXCSでcfMeshを用いてメッシュを切る→toposet、splitMeshRegionsを実行し、領域を分ける→境界条件、各種計算条件を作る→計算実行
という順序で進めました。

以下の図1にtopoSetDict、また、図2に領域の様子を示します。

スクリーンショット 2024-05-23 150024.png
図1 topoSetDict

スクリーンショット 2024-05-23 150320.png
図2 領域の様子

スクリーンショット 2024-05-23 151352.png
図3 固体領域部分

図1からわかるように今回は固体側の領域が簡単であったため、topoSetDictでは、固体側の領域を指定してその部分を差し引いたものを空気側の領域と設定しました。

しかし、図2、図3(固体領域の細部)より、部分的にきれいな平面として領域が切れていない部分が生じてしまいました。
色々、調べて固体周りのメッシュを細かくすることで対応しようと考えたのですが、結果的にうまくいっておりません。
何かわかる方がいらっしゃれば、ご教授いただきたいです。

以下の図4に固体周りのメッシュの様子を示しておきます。

スクリーンショット 2024-05-23 152618.png
図4 固体周りのメッシュの様子


また、chtMultiRegionFoamはYEqnという化学種の保存式が含まれていると思うのですが、今後その方程式の使用を考えています。
その際、どのようにすればその式の計算もしてくれるようになるのでしょうか。0ファイルにYについて境界条件ファイルを用意すればいいのでしょうか。

よろしくお願いいたします。

Hideaki Kominami

unread,
May 23, 2024, 7:51:28 AMMay 23
to open...@googlegroups.com
Nishiguchiさん

kominamiです。


おそらく気が付いていると思いますが、ベースメッシュ作成用のメッシャーをblockMeshでなくcfMeshにしたためです。(cfMeshでは、メッシュ作成の方向がXYZに沿わない部分がどうしても出ます。toposetコマンドでは、選択された領域に含まれるセルをセットに入れるだけですから。)

この流れでの対策方針は、toposetDictで指定している領域の面の付近のメッシュサイズを細かくすることでしょうね。

DEXCS版を使っているなら、おそらく既にobjectRefinementsとlocalRefinementについては知っていると思います。DEXCS版のGUIで指定できない、今回の対応のために使えそうな機能は、surfaceMeshRefinementとanisotropicSourcesの2つだと思います。

cfMeshによるメッシュ作成入門(富山県立大学)
https://eddy.pu-toyama.ac.jp/openfoam/cfmesh/about-cfmesh/

cfMeshによるメッシュ作成入門(秋山)
https://eddy.pu-toyama.ac.jp/opencae-sg-tym-files/20150822_035/cfMesh%E3%81%AB%E3%82%88%E3%82%8B%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5%E4%BD%9C%E6%88%90_%E5%85%AC%E9%96%8B%E7%89%88.pdf

ただし、“cfMeshでは、メッシュ作成の方向がXYZに沿わない部分がどうしても出”るため、完璧ではありません。

kさんが書いている
>(2)snappyHexMesh
のほうで、ベースメッシュをblockMeshでなく、cfMeshで作れば良いと思います。
ただし、snappyHexMeshで入れようとしている内部壁の付近に、ヘキサ以外の形状のメッシュがあったり、メッシュサイズレベルが2(?)以上異なっているとエラーが出ます。

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

2024年5月23日(木) 15:37 Nishiguchi <tsubasa....@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/openfoam/2348c5d3-23a0-4c31-91a6-c8ac3d052c15n%40googlegroups.com にアクセスしてください。

Nishiguchi

unread,
May 27, 2024, 4:42:09 AMMay 27
to OpenFOAM
kominami様

nishiguchiです。
返信ありがとうございます。

GUIを用いて感覚的にできるcfMeshでやろうと考えたのですが、アドバイスも受け、少し複雑になりそうなので、推奨されたsnappyHexMeshでの対応に変更しようと考えています。
stlファイルを作成し、blockMeshの作成、特徴線の作成、その後snappayHexMeshを実行したところ以下の図1のようなblockMeshとRegionで制作した領域における細分化のみしか再現されていませんでした。

logを確認したところ、おそらくうまくstlファイルを読み込めていないか、特徴線をうまくよみこめていないのかと個人的には思っています。
個人的にもまだ原因を模索中なのですが、何かわかる方がいらっしゃれば幸いです。

スクリーンショット 2024-05-27 173105.png
図1 snappyHexMesh実行後のparaviewでの可視化

よろしくお願いします。

※stlファイルの名前に誤字があり、romm_cht_test2となってしまっています。
log.snappyHexMesh
snappyHexMeshDict
romm_cht_test2.eMesh

Nishiguchi

unread,
May 28, 2024, 3:58:49 AMMay 28
to OpenFOAM
皆様、お世話になっております。

nishiguchiです。

今回、とりあえずの進捗があったため、投稿させていただきます。
snappyHexMeshDictの22行目において、refinementSurfacesの指定したstlファイルのlevelを(1 1)とすることで解決しました。
(調べてそのような対策をとったのですが、なぜ解決したかまでは具体的にはわかっていません。)

以下に今回、作成したメッシュを示します。

スクリーンショット 2024-05-28 165229.png
図1

スクリーンショット 2024-05-28 163244.png
図2

スクリーンショット 2024-05-28 163404.png
図3

以上の図2、3からわかるようにbedの一部の面に模様のようなものが出てしまいました。厚みがないようにも見えるのですが、これがどういうものなのでしょうか
(自分のミスで、paraViewの設定により、これが出ていた場合はすみません。)

また以下の図4のように部分的に奇妙な線が入っているのも気になるため、教えていただけると幸いです。


スクリーンショット 2024-05-28 163447.png
図4

よろしくお願いいたします。

Hideaki Kominami

unread,
May 28, 2024, 4:58:38 AMMay 28
to open...@googlegroups.com
nishiguchiさん

kominamiです。

図2と図3の表示には、おそらく、paraviewのFeature Edgesフィルターを使っていると思います。面セルの一部が作成されず結果的に市松模様のようになったか、平面を意図していても実際に平面で無いと思います。extructBlockで対象の面パッチを表示して確認してください。
対策は、snappyHexMeshDictのrefinementSurfacesのlevelを(1 1)を上げるか、ベースメッシュのサイズを局所的に小さくしておくらいしか、思いつきません。

図4は、メッシュがdecomomposedのままだからでは?
paraviewのClean to Gridを試してみてください。

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

追伸、2025年度のオープンCAEシンポジウムでの発表を目指して頑張ってください。

2024年5月28日(火) 16:58 Nishiguchi <tsubasa....@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/openfoam/99a56f4f-4dec-4593-84f2-299edeb98ac6n%40googlegroups.com にアクセスしてください。

Nishiguchi

unread,
Jun 3, 2024, 3:53:33 AMJun 3
to OpenFOAM
kominami様,皆様

nishiguchiです。

返信ありがとうございます、これからも頑張っていきたいと思います。

アドバイスもあり,メッシュを切ることを進めているのですが,境界層を作る段階で問題が生じたので再び投稿させていただきます。
また、メッシャーについてもお尋ねしたいと考えています。


以下図1,2に境界層を作る前の様子を示します。

スクリーンショット 2024-06-03 155709.png
図1

スクリーンショット 2024-06-03 155735.png
図2

以上のように大方、かける部分もなく切れています。この際のsnappyHexMeshDictも添付しておきます。
この段階では addLayers はfalseとなっているのですが、境界層を入れると以下の図3,4のように隅の部分が欠けてしまいます。

スクリーンショット 2024-06-03 155343.png
図3

スクリーンショット 2024-06-03 155415.png
図4

項目が多く、どの部分を修正すればよいのかわかっていません。何かわかる方は教えていただけると幸いです。


また、今後、stlファイルを変更するたびにメッシュを切りなおすのも大変だと感じ、外部のメッシャーの使用も考えています。
フリーのものや商用のものでも、一般的につかわれているものやおすすめのものがあれば教えていただきたいです。

このサイトを参考にし、領域を分けることも考え、SALOMEの導入を考えているのですが、問題なく使えるでしょうか。

よろしくお願いします。
snappyHexMeshDict
Reply all
Reply to author
Forward
0 new messages