形状に沿ったメッシュの作り方

1,043 views
Skip to first unread message

takemitsu

unread,
Mar 8, 2021, 4:59:08 AM3/8/21
to OpenFOAM
いつもお世話になっております.
takemitsuです.

現在,NACA型の翼周りの数値解析を行っているのですが,
今後は,現在の解析範囲のレイノルズ数よりも高いレイノルズ範囲で解析を行おうとしております.
その際,境界層メッシュをSnappyHexMeshにて
挿入しようと試みたのですが,形状付近のメッシュの切り方を何度変更してもうまく
挿入されません.

皆様のご助言をいただきたいです.
現在のblockMeshとSnappyHexMeshを添付しましたので,よろしくお願いいたします.

また翼形状に沿った境界層メッシュを挿入することが難しい場合は,blockMeshで頂点を記述することで形状を再現し,その形状に対しての法線方向に格子を生成することで擬似的に境界層メッシュを作り出すというのも考えました.

しかし,私にはそのようなことが可能なのかどうかもよくわかりません.
こちらの考えに対しても,出来ればアドバイスをいただきたいです.
よろしくおねがいいたします.

snappyHexMeshDict.txt
blockMeshDict.txt

M.TANAKA

unread,
Mar 8, 2021, 6:50:18 AM3/8/21
to OpenFOAM
takemitsuさん

こんにちは.私も初心者で詳しくありませんので,後者の疑問にだけ回答します. 
2次元翼に沿った構造格子を生成して解くチュートリアルケースとして,以下のものが参考になりそうです.
 
ただ,GitHubからこのケースフォルダだけをダウンロードするのは難しいようです.foundation版(v4.x, v8など)でなくOpenCFD版(v2012など)のレポジトリであればフォルダをzipでダウンロードできるようですので,下記2つ目のリンクからOpenCFD版の対応するケースフォルダをダウンロードして,foundation版としきたりの異なる箇所(solverInfo -> residuals等)を書き直すと良いかもしれません.
2021年3月8日月曜日 18:59:08 UTC+9 takemitsu:

mitsu take

unread,
Mar 9, 2021, 3:35:32 AM3/9/21
to open...@googlegroups.com
TANAKAさん

ご助言ありがとうございます.
確かに,こちらのチュートリアルを参考にしたら形状に沿ったメッシュが切れそうです.

現在このチュートリアルケースを参考に自分が作りたい計算領域を再現しようとしているのですが,
blockMesh内の頂点指定の箇所に用いられている「project」というものの意味がわからない状況です.

インターネットで検索してみたのですが,よくわかりませんでした.こちらに関して経験や実際に使われている方が
いらっしゃったらぜひ教えてください.
また「project」の場合,その行の最後に(Cylinderもしくはaerofoil)と書かれています.
こちらに関してもぜひご理解がある方教えて下さい.

何卒よろしくお願いいたします.

2021年3月8日(月) 20:50 M.TANAKA <tanaka19m...@gmail.com>:
--
このメールは Google グループのグループ「OpenFOAM」のトピックを登録しているユーザーに送られています。
このトピックの登録を解除するには https://groups.google.com/d/topic/openfoam/KptAaD8-bc4/unsubscribe にアクセスしてください。
このグループを退会し、グループのすべてのトピックの登録を解除するには openfoam+u...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/openfoam/4b9811aa-e0c8-496a-ab4e-9c47c9ab1e52n%40googlegroups.com にアクセスしてください。

M.TANAKA

unread,
Mar 9, 2021, 5:13:25 AM3/9/21
to OpenFOAM
takemitsuさん

調べたところ,projectというのは点/線/面を指定の曲面上に投影する機能だそうです.

この機能によってgeometryで指定した曲面(今回はaerofoilとcylinder)に沿ったhex blocksが生成できるようです.ゴリ押しでblockMeshを切るなら,細切れのarcを繋ぎ合わせてNACA翼の曲線を再現するなんてことになりそうですので,その不便を解消するための機能かと思われます.
ただ,これはどうやらOpenFOAM5以降に採用されている機能のようですので,お使いのOpenFOAM4.xでは動かないと思います...

可能であればOpenFOAM8にインストールし直してから試されてはいかがでしょうか.
2021年3月9日火曜日 17:35:32 UTC+9 takemitsu:

mitsu take

unread,
Mar 9, 2021, 11:21:33 PM3/9/21
to open...@googlegroups.com
TANAKAさん

なるほど「Project」はそのような機能なのですね
確かに非常に便利ですね.
ありがとうございます.

OpenFOAMのVersionに関しては,私が現在利用しているOpenFOAMのインストール自体は
私の研究室の先輩が以前やったもので,versionは1806versionを利用しています.
テキストはなぜか4.xになっていますが,いままでもv1806として動いているので大丈夫だと思います.
ご心配ありがとうございます.

TANAKAさん
この議題に付き合ってくださりありがとうございます.
もう少しお助けして頂いてもよろしいでしょうか?
実は,自分の計算用のメッシュに変更したのですが,

--> FOAM FATAL IO ERROR:
Block hex (4 16 19 7 3 15 12 0) (120 300 1) simpleGrading (1(0.2) 1(0.2) 1(5) 1(5) 1(40) 1(40) 1(40) 1(40) 1(1) 1(1) 1(1) 1(1)) is inside-out

というエラーがblockMeshで発生しております.
またそれ以前に,
FOAM Warning :
    From function Foam::vector Foam::cellModel::centre(const labelList&, const Foam::UList<Foam::Vector<double> >&) const
    in file meshes/meshShapes/cellModel/cellModel.C at line 70
    zero or negative pyramid volume: -0.158924 for face 4

のような警告も出ております.
これらは,どのようなことが原因なのでしょうか?
おそらく初歩的な問題だと思いますが,教えていただけると助かります
よろしくお願いいたします



2021年3月9日(火) 19:13 M.TANAKA <tanaka19m...@gmail.com>:
このメールは Google グループのグループ「OpenFOAM」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには openfoam+u...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/openfoam/f005e51a-6565-4fea-8018-893498df9a00n%40googlegroups.com にアクセスしてください。
blockMeshDict.txt

nakagawa

unread,
Mar 9, 2021, 11:28:55 PM3/9/21
to OpenFOAM
takemitsu さん

なかがわです。

blockMeshで対応されているようですが,snappyHexMeshDictに気になる点があったのでコメントします。 
下記の部分です。

finalLayerThickness 0.00003;
minThickness 0.00003;  

挿入しようとするlayerの最も厚い部分と,許容する最小厚さが同じになっているように見えます。
これが原因で,layerが入らないということはないのでしょうか?
finalLayerThickness  >  minThickness  とした場合でも,layer は入りませんか?

なかがわ  


2021年3月8日月曜日 18:59:08 UTC+9 takemitsu:
いつもお世話になっております.

mitsu take

unread,
Mar 10, 2021, 7:29:56 PM3/10/21
to open...@googlegroups.com
なかがわさん

ご指摘ありがとうございます.
ご指摘頂いた内容を参考にし,SnappyHexMeshの以下の内容を以下に変更しました.

変更前
finalLayerThickness 0.00003;
minThickness 0.00003;

変更後
finalLayerThickness 0.0003;
minThickness 0.00003;  

その結果,2e-4%ほど境界層メッシュが挿入されました.
blockMeshの方法とこちらの方法の両方を今後も検討していきたいと思います.

しかしこの点に対して疑問がありまして,
finalLayerThickness とは,挿入したい境界層の最後の層(壁から一番離れた境界層)
の厚さを指定するものという認識だったのですが,こちらの認識は誤りだったのでしょうか?

なかがわさんのお話ですと,許容される最大の厚さの指定のように感じられました.
こちらに関してぜひ教えていただきたいです.

また境界層を入れる際,壁面近傍は細かくしたほうが一般的に入りやすいという傾向はあるのでしょうか?
壁面の細かさであるrefinmentsurfaceのレベルと細かくしてもあまり変化がなく時間ばかりかかってしまうので
気になっております.
こちらに関しても経験則などで構いませんの是非お聞きしたいです.

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

  


2021年3月10日(水) 13:28 nakagawa <snakag...@gmail.com>:
--
このメールは Google グループのグループ「OpenFOAM」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには openfoam+u...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/openfoam/2ecd3660-e4f2-43cc-9ef3-c4f2a1f702ddn%40googlegroups.com にアクセスしてください。

M.TANAKA

unread,
Mar 11, 2021, 4:03:09 AM3/11/21
to OpenFOAM
takemitsuさん

blockMeshの不具合ですが,おそらく2次元翼のスパン方向をy軸からz軸に置き換えたのが関係していると思います.
下記ユーザーガイドにあるように,blockMeshで六面体を作成する場合,その節点を指定する順序が問題になります.今回はy軸とz軸を入れ替えたのにhex ()内の節点の順序がそのままなので,正常に六面体を構成できなくなったのだと思われます.(右手系の世界に左手系のルールで立体を作ろうとしている?)
スパン方向y軸のままで計算するか,節点の配置を考慮した順序に書き直すかすれば多分動くのではないでしょうか.


2021年3月11日木曜日 9:29:56 UTC+9 takemitsu:

mitsu take

unread,
Mar 11, 2021, 6:03:47 AM3/11/21
to open...@googlegroups.com
TANAKAさん

大変有り難うございます.
おかげさまで,大枠のblockMesh生成まで成し遂げることができました.

おそらくblockMeshでのこの翼形状に沿ったメッシュ生成に関して最後の疑問になると思います.
長く付き合ってくださり本当にありがとうございます.

実は,実行の後paraviewにて可視化したところz方向ではなくy方向がメッシュ数1になってしまうという不可思議なことが
起こっております.
blockMeshDict内はz方向のセル数に当たるところを1にしているのに,反映されいるのはy方向になっておりました.
これは,何が原因で座標変換がなされていると考えられますか?
blockMeshDictは前回のものを利用しております.以下paraviewの図を載せます.
よろしくお願いいたします.


2021年3月11日(木) 18:03 M.TANAKA <tanaka19m...@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/openfoam/054937f4-00a2-4ba1-bf38-48817a653f10n%40googlegroups.com にアクセスしてください。
caliculation.png

nakagawa

unread,
Mar 11, 2021, 9:08:10 PM3/11/21
to OpenFOAM
takemitsuさん

なかがわです。

finalLayerThickness の認識に問題はないと思います。

snappyHexMesh では,メッシュ数が過剰になることを抑止できるように,最小のセルサイズやレイヤー厚さが指定できます。

minThickness で,許容できる最小厚さを指示しています。ここで指示したより薄いレイヤーは作らないというものです。

ですから,当初の設定のように finalLayerThickness = minThickness だと,作ろうとする層の厚さが許容値より小さいと見なされた,レイヤーが作られなかったのだと想像します。

finalLayerThickness > minThickness でないと,レイヤーセルが作られないと思います。

2次元計算を実施されうのでしょうか?その場合,旧来のsnappyHexMeshだと,一旦はスパン方向にもセルを作るので,セル作成時の計算コストが大きくなります。

v1806で導入された 任意方向の分割機能 を使うと,負荷が低減できると思います。(ESI社さんのブログに記事あり。私は実行していないです。コツなど分かれば,後輩さんなどのためにも,ぜひ公開してください。)


2021年3月11日木曜日 9:29:56 UTC+9 takemitsu:
なかがわさん

nakagawa

unread,
Mar 11, 2021, 9:13:00 PM3/11/21
to OpenFOAM
takemitsuさん

blockMeshDict で指定しているのは,そのブロックでのローカルな座標系です。paraview で見ているグローバルな座標とは異なることに注意が必要です。

先にTANAKAさんからのアドバイスにあった下記マニュアルの Fig. 4.4 をご確認ください。節点0から x1, x2, x3 というローカル座標が書かれています。節点を並べる順で決まります。マニュアルにも説明されています。この方向とグローバル座標とが一致していないときに,お困りのような状態になります。
なかがわ
2021年3月11日木曜日 20:03:47 UTC+9 takemitsu:

mitsu take

unread,
Mar 16, 2021, 2:39:49 AM3/16/21
to open...@googlegroups.com
なかがわさん

blockMeshに関してのご指摘ありがとうございました.
図4.4を意識してローカル座標系とグローバル座標系が一致するように設定することができました.
ありがとうございます.

また,snappyHexMeshの任意方向の分割機能に関しても今後少し触れていきたいと思います


2021年3月12日(金) 11:13 nakagawa <snakag...@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/openfoam/1399cd79-626f-41d9-b117-71f7d6701c02n%40googlegroups.com にアクセスしてください。

mitsu take

unread,
Mar 16, 2021, 5:31:05 AM3/16/21
to open...@googlegroups.com

大変申し訳ございません.
うまく行ったと思ったのですが,まだ不完全でした.
前回の図で見られたparaviewの軸と私がblockMeshで設定した軸の不一致に関しては
解決しました.

一方で,この図では,翼の形状を再現できておらず,
その原因は格子数が少なくためだと考えていました.

しかし,格子数を増加してもうまく翼の形状に切ることができませんでした.
以前TANAKAさんに示していただいた,OpenFOAMの「project」に関してのURLから調べると,tutorialではfaceという項目がないのですが,
リンク先にはfaceとい項目があります.
これが関与しているのかと考え,blockMeshにfaceの項目を追加すると,先程までうまく切れていたblockMeshがコアダンプしてしまいました.

Creating block edges
Creating block faces
Creating topology blocks
#0  Foam::error::printStack(Foam::Ostream&) at ??:?
#1  Foam::sigFpe::sigHandler(int) at ??:?
#2  ? in /lib/x86_64-linux-gnu/libc.so.6
#3  Foam::blockFaces::projectFace::project(Foam::blockDescriptor const&, int, Foam::Field<Foam::Vector<double> >&) const at ??:?
#4  Foam::blockDescriptor::correctFacePoints(Foam::FixedList<Foam::Field<Foam::Vector<double> >, 6u>&) const at ??:?
#5  Foam::block::createPoints() at ??:?
#6  Foam::block::block(Foam::dictionary const&, int, Foam::Field<Foam::Vector<double> > const&, Foam::PtrList<Foam::blockEdge> const&, Foam::PtrList<Foam::blockFace> const&, Foam::Istream&) at ??:?
#7  Foam::block::New(Foam::dictionary const&, int, Foam::Field<Foam::Vector<double> > const&, Foam::PtrList<Foam::blockEdge> const&, Foam::PtrList<Foam::blockFace> const&, Foam::Istream&) at ??:?
#8  void Foam::PtrList<Foam::block>::read<Foam::block::iNew>(Foam::Istream&, Foam::block::iNew const&) at ??:?
#9  Foam::blockMesh::createTopology(Foam::IOdictionary const&, Foam::word const&) at ??:?
#10  Foam::blockMesh::blockMesh(Foam::IOdictionary const&, Foam::word const&) at ??:?
#11  ? in /opt/OpenFOAM/OpenFOAM-v1806/platforms/linux64GccDPInt32Opt/bin/blockMesh
#12  __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
#13  ? in /opt/OpenFOAM/OpenFOAM-v1806/platforms/linux64GccDPInt32Opt/bin/blockMesh
浮動小数点例外 (コアダンプ)

これは何が原因なのでしょうか?
またチュートリアルの方では,このface項目がなくてもきれいな翼形状を再現できていました.
こちらに関しても,どなたかご助言をいただけないでしょうか?
よろしくおねがいいたします.


2021年3月16日(火) 15:39 mitsu take <ikimono.s...@gmail.com>:
blockMeshDict.txt
naca0012.obj

mitsu take

unread,
Mar 17, 2021, 8:07:03 PM3/17/21
to open...@googlegroups.com
いつもお世話になっております.

先日ご相談させていただいた「project」がうまく適用されておらず,図に示すような変なメッシュが生成されてしまいました.
ぜひ,ご意見やアドバイスを頂きたいです.
また,これはメッシュ生成が特におかしくなっている方向からの写真で,計算領域を裏から見ている写真なので形状が逆向きになっております.

何卒よろしくお願いいたいします.


2021年3月16日(火) 18:30 mitsu take <ikimono.s...@gmail.com>:
caliculation2.png

mitsu take

unread,
Mar 29, 2021, 4:58:43 AM3/29/21
to open...@googlegroups.com
いつもお世話になっております.takemitsuです.

前回「project」がうまく反映されないという点を述べさせていただきましたが,
この原因は「geometry」に入れているobjまたはstlの形状ファイルに対して適切な
座標を設定していなかったことが原因でした.

blockMeshで指定しているaerofoilの指定している座標が形状ファイルの形状の上になければ
うまく反映されません.
したがって,前回の図のようにかくかくした,ただの直線でつながってしまった形状になってしまったということでした.
皆様に多く助言を頂いたので,目標達成の報告させていただきます.
ありがとうございます.
引き続きよろしくおねがいします.

2021年3月18日(木) 9:06 mitsu take <ikimono.s...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages