円筒座標系・格子について

2,250 views
Skip to first unread message

hanihani

unread,
Nov 19, 2013, 11:53:21 PM11/19/13
to open...@googlegroups.com
皆様,こんにちは
 
少し質問したいことがあり,投稿させていただきました.
1、過去の質問でデカルト座標系を円筒座標系に変換するというものは見たのですが,OpenFOAMのpolyMesh/blockMeshDictにおいて円筒座標系で記述するということはOpenFOAMインストール後すぐには出来ないのでしょうか?
つまり(x y z)で記述しているのを(r θ z)で記述したいのです.
x=rsinθ
y=rcosθ
z=z
 
というのも,平板流れと円管流れは最も基礎的な流れでこれらの解析ができれば,応用的に他の複雑な流れに移行できると考えています.ところが,平板流れなどはデカルト座標系であるのに対し円管は円筒座標系です.研究室で円管の研究をされている方は初めからその座標系を使用されています.
そこで,OpenFOAMでも初めに定義する座標系を自由に変えられないものかと思ったのです.
又,Mesh作成時も平板では壁付近を密にしますが,円管では当然楔状に広がっていきます.このようなメッシュを作成するのも非常に簡単だと思いました.
 
2、OpenFOAMではデフォルトでコロケート格子を用いてるようですが,スタガードに変更できるのでしょうか?
こちらは上のとは別でChannelの計算をしているときに思いました.計算後Paraviewで計算した流れを見ていたときに,パラメータ選択で○Uと□Uがあってこの違いが何なんだろうかと考えたときにコロケート格子とスタガード格子なのかなと思いましたが違いますか?
 
以上の2点についてよろしければご意見をよろしくお願いいたします.
 
 
 

Youhei Takagi

unread,
Nov 20, 2013, 1:21:06 AM11/20/13
to open...@googlegroups.com
hanihani様

高木と申します。

1. blockMeshで円筒座標系格子を作成することは可能ですが、(r θ z)で指定するような記法はありません。ユーザガイドの応力解析チュートリアルやCFD Onlineの記事を参考にされるとよいと思います。
http://www.cfd-online.com/Forums/openfoam-meshing-blockmesh/61796-help-could-anyone-post-simple-cylinder-mesh.html
この掲示に書かれているように、m4マクロのようなスクリプトでblockMeshDictを生成するのが今のところ簡単だと思います。マニュアルでblockMeshDictを編集すると、円弧上の点(edgesのarc)を指定するのが面倒です。

2. 有限体積法の離散化がコロケート格子を利用しているので、スタッガードは利用できません。確かにスタッガードの方が圧力とのカップリングにおいて優位ですが、各変数ごとに定義位置が異なると一般座標系や非構造格子ではメトリック計算が煩雑となり、必要なメモリも増大してしまいます。Paraviewでの表示は、セルごとに値をそのまま出力するか(□)、補間して表示するか(○)の違いです。

以上ご参考までに。

hanihani

unread,
Nov 21, 2013, 2:30:03 AM11/21/13
to open...@googlegroups.com
高木様

返事が遅くなり大変申し訳ございませんでした.

サイトの方をじっくり読んでみます.m4マクロ(初めて聞きました・・)について勉強してみます
マニュアルでblockMeshDictを編集すると、円弧上の点(edgesのarc)を指定するというのは,単純な話四角形の4辺を曲線にして円を構成するということでしょうか?だとしたら計算はデカルト座標で行われ,それを円筒座標系に変換するという流れになるのでしょうか?

たしかにメモリの増大という欠点がありますね・・・
これから先の数値計算を見据えるとコロケートの方がいいのかもしれませんね
ただ多様性という点から見たら両方使える方がいいのですが・・・

最後になりましたが参考になるご意見ありがとうございました.

Youhei Takagi

unread,
Nov 21, 2013, 3:18:35 AM11/21/13
to open...@googlegroups.com
hanihani様

OpenFOAMは任意形状に対応できる非構造格子ですので、計算格子の定義及び計算自体はデカルト座標で行われます。m4マクロは円筒座標でblock形状を指定したものをデカルト座標系標記のblockMeshDictに変換するだけです。円筒座標系での離散化をOpenFOAMに実装するのはかなり大変だと思いますので、円筒座標系スタッガード格子にこだわるのでしたら、別のソースコードを自作されるのが良いと思います。

hanihani

unread,
Nov 22, 2013, 2:01:50 AM11/22/13
to open...@googlegroups.com
高木様
 
ご返事ありがとうございます.
tutorialsのmixerVessel2Dと教えていただいたCFD onlineの方(書き方はPrzemekPL様のと同じです)を見てblockMeshDictを作成したのですが,以下のエラーが出てしまいました.
m4マクロで変換した場合,直接指定した場合共にエラーがでます・・・
 
>> FOAM FATAL IO ERROR:
"ill defined primitively starting at keywaod 'blocks' on line 66 and ending at line 141"
 
file: /****/***/*****/***/blockMeshDict at line 141.
 
   From function primitiveEntry::readEntry(const dictionary&, Istream&) in file Include/I0error.C at line 132
 
FOAM exiting
 
blockMeshDictを見るにblocksの部分の始まりと終わりがおかしいのかなと思ったのですが,
blocks
(
hex(* * * * * *)
(Nx Ny Nz)     //格子点数
simpleGrading(1 1 1)
・・・
);
 
のように他の正確にメッシュが作れるファイルと同様の書かれ方をしています.
またat line 141とありましたがファイル自体は139までしかなく,どうすればいいのか見当がつきません・・・
 
どなたかご教授していただけませんでしょうか?
 

Youhei Takagi

unread,
Nov 22, 2013, 2:33:39 AM11/22/13
to open...@googlegroups.com
hanihani様

高木です。

blockMeshDictを見ていないので適切なことは言えませんが、blocksの前後で書き方が
間違っている場合もあります。指定する値の個数やスペル間違いなどをチェックして
見てください。

hanihani

unread,
Nov 22, 2013, 8:04:34 AM11/22/13
to open...@googlegroups.com
高木様
 
確認しましたがちょっとわかりませんでした.
どなたかご教授していただけませんでしょうか?
 
あともうひとつ別途質問したいことがあるのですがご意見いただければ幸いです.
別途計算しているchannel(LES)で摩擦速度Utauを求めようとしているのですが・・・
RANSの場合WallShearstressから壁面せん断応力Ttauが求められるのでUtau=sqrt(Ttau/ρ)から算出できます.
LESの場合そのようなユーティリティがないのでy+より算出すればいいと思います.以前ここでy+は壁面の格子幅により決まるというのを見たのですが
y+=(yUtau)/ν
であることから
Utau=(νy+)/y
となります.
とするとここでのyは壁面の格子幅Δyのことでしょうか?
その場合,gradUとU,Δyを用いて
(U-0)/Δy=∂U/∂y
から求めればいいと思ったのですが計算が合いません.考え方が間違っているのでしょうか?
blockMeshDict

Youhei Takagi

unread,
Nov 22, 2013, 10:30:20 AM11/22/13
to open...@googlegroups.com
hanihani様

高木です。

blockMeshDictを拝見しました。気づいた点をいくつか。

1. hexの後にはスペースが必要です。
2. arcの座標指定にはコンマ(,)は必要ありません。
3. boundary patchの記述方法がおかしい?と思います。ユーザガイドに従って書いてください。

あと、u_tau、y+の話ですが、y+は壁面摩擦速度u_tauから求めます。同じような質問が
いくつかあがっていたと思いますので、少し探してみてください。

以上ご参考までに。


2013年11月22日 22:04 hanihani <kanade...@kke.biglobe.ne.jp>:

--
このメールは Google グループのグループ「OpenFOAM」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、openfoam+u...@googlegroups.com にメールを送信します。
このグループに投稿するには、open...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/openfoam からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

hanihani

unread,
Nov 25, 2013, 12:45:10 PM11/25/13
to open...@googlegroups.com
高木様

なんとか作り出すことに成功いたしました.ありがとうございます.
また質問することがあると思いますが,よろしくお願いします・・・
Reply all
Reply to author
Forward
0 new messages