自分以外に使う人は皆無?なので、
60 億人くらいの人にとってはムダ情報。
A specification of the program coded by me was written down as following description. It might be a useless description for around 6 thousand million people,
because this description is a scribbled memo only for me.
--------------------------------
《概要》
用途:とあるフリーソルバ向けの 簡易形状データ作成プログラム
言語: fortran
プログラム名: CreateBlockMeshDict.f
入力: 実行ファイルのあるディレクトリに
CreateBlockMeshDict.ctl
という条件ファイルを用意
出力:上記の条件ファイル で指定したファイル
出力ファイルは とあるフリーソルバの 入力条件ファイルに
上記ファイルと同時に
CreateBlockMeshDict.ctl とほぼ同じ書式の、
ModifyMeshDistrib.ctl というファイルも生成される。
特記事項: 一回実行するとフリーソルバ向けのデータがでてくるが、メッシュ形状が
気に入らなかったら、また、 *.ctl ファイルを修正して処理実行すればいいのだが、
2回目以降の実行にあたってはModifyMeshDistrib.ctlの書式だと
より、細かい設定ができる。
《Outline》
usage: simple box-shape creation program for BlockMeshDict
language: fortran
program name: CreateBlockMeshDict.f
input:CreateBlockMeshDict.ctl should be located in current directory
output:user-indicated out file described above ctl file
this output file is described by the manner of blockMeshDict
ModifyMeshDistrib.ctl, nearly same format with CreateBlockMeshDict.ctl is also outputted simultanously.
Remarks : Users can change or modify first time configuration,
with using ModifyMeshDistrib.ctl, that have more detailed parameters.
--------------------------------
《条件ファイル CreateBlockMeshDict.ctl のサンプル記述》
《Sample control file description of, CreateBlockMeshDict.ctl》
############ CreateBlockMeshDict.ctl #########
1 ctrol file format flag
./sample.dict
0.10000E-04
5.000
10
1.000
0.000 0.000 0.000
500.000 500.000 300.000
----------
10
------------------------------
box
wall
150.000 150.000 20.000 50.000 50.000 30.000
------------------------------
box
wall
250.000 150.000 20.000 50.000 50.000 30.000
------------------------------
box
wall
150.000 150.000 50.000 150.000 50.000 30.000
------------------------------
west
patch
0.000 0.000 0.000 0.000 500.000 300.000
------------------------------
east
patch
500.000 0.000 0.000 0.000 500.000 300.000
------------------------------
box2
dummy
100.000 100.000 0.000 300.000 300.000 100.000
------------------------------
south
patch
0.000 0.000 0.000 500.000 0.000 300.000
------------------------------
north
patch
0.000 500.000 0.000 500.000 0.000 300.000
------------------------------
bottom
wall
0.000 0.000 0.000 500.000 500.000 0.000
------------------------------
top
wall
0.000 0.000 300.000 500.000 500.000 0.000
--------------------------------
《条件ファイル CreateBlockMeshDict.ctl の記述項目》
1行目:ヘッダ(読み飛ばし)
2行目:コントロールファイルフラグ (1 or 2 )
* 1 は CreateBlockMeshDict.ctl の書式スタイル
* 2 は ModifyMeshDistrib.ctl の書式スタイル
3行目:出力ファイル名(ファイルパス)
4行目:プログラム処理中に 0 (ゼロ値)として認識する閾値
5行目:aveDelta (1 Region内の平均格子幅:現在未使用パラメータ)
6行目:1 Region内の格子分割数(x, y, z 方向、最初はすべて同じ値)
7行目:Grading Ratio :1ブロック内の格子拡大・縮小率 (x, y, z 方向、最初はすべて同じ値)
8行目:解析領域の起点座標
9行目:解析領域を規定する座標値で、各方向最遠方座標
* 8行目、9行目は eps ファイルとかで使われる boundary box の座標指定
みたいなイメージ。
11 行目:設定する境界条件の個数
13 行目:境界条件の名前(自由)
14 行目:境界条件のタイプ名
*対象ソルバで用意されている名前のみ、wall, patch, symmetryPlane, ....
15 行目:境界条件のオブジェクト形状を表す座標情報
x0, y0, z0, dx, dy, dz
* (x0, y0, z0) と (x0+dx, y0+dy, z0+dz) で直方体規定
* PHOENICS とかと同じ考え
上記の、13 行目〜15 行目は 11 行目に書いてある境界条件数に応じて
繰り返し、同じような書式で 書き込んでいく。
--------------------------------
上記の条件にて fortran プログラムを実行し、
とあるフリーソルバの pre 処理 ユーチリティー にかけてやると、
という形状ができあがる。
この凱旋門的な形状は 柱部となる2ブロックと
梁部となる1ブロックからなり、上記の CreateBlockMeshDict.ctl
記述サンプルでは 'box' という 3 つの境界条件名に対応している。
境界条件名を同じ名前にしておけば、勝手に、1つの境界条件オブジェクト
としてマージしてくれる。
上記のCreateBlockMeshDict.ctlサンプルの中に 'box2' という境界条件名があり、
境界条件タイプとして 'dummy' というキーワードが使われている。
これは、格子分布を定義する Region 領域を規定するための
ダミー領域をもうける命令キーワードを意味する。
なので、今回対象にしているフリーソルバ側には
なにも影響を及ぼさない。
Region という言葉は PHOENICS で使われている用語と同義で、
メッシュの1分布を定規する最小領域名で、
解析領域内に 各 x, y, z 方向に 複数(あるいは単数)Region を有することになる。
上の図はわかりにくいが、内部に凱旋門形状を有しており、
1 Region に対して、上のサンプル *.ctl ファイル内で指定された '10'
という分割数が割り当てられる。
この図のように、今回はキリのいい位置、大きさ形状なので、
綺麗に当分割、直交格子となっている。
--------------------------------
《条件ファイル ModifyMeshDistrib.ctl のサンプル記述》
ModifyMeshDistrib.ctl は、上記の CreateBlockMeshDict.ctl の末尾に
以下の Region Information が付け加わる。
------------------------------
---- Region Information -----
------------------------------
7 ! total region number of X-direc
reg. num.| Length | nDim | aveDelta | initDelta | termDelta | GradingR | solid flag
-------------+ -------------+ -------------+ -------------+ -------------+ -------------+ -------------+ -------------+
1 100.000 20 5.000 5.000 5.000 1.000 0
2 50.000 10 5.000 5.000 5.000 1.000 0
3 50.000 10 5.000 5.000 5.000 1.000 1
4 50.000 10 5.000 5.000 5.000 1.000 1
5 50.000 10 5.000 5.000 5.000 1.000 1
6 100.000 20 5.000 5.000 5.000 1.000 0
7 100.000 20 5.000 5.000 5.000 1.000 0
5 ! total region number of Y-direc
reg. num.| Length | nDim | aveDelta | initDelta | termDelta | GradingR | solid flag
-------------+ -------------+ -------------+ -------------+ -------------+ -------------+ -------------+ -------------+
1 100.000 20 5.000 5.000 5.000 1.000 0
2 50.000 10 5.000 5.000 5.000 1.000 0
3 50.000 10 5.000 5.000 5.000 1.000 1
4 200.000 40 5.000 5.000 5.000 1.000 0
5 100.000 20 5.000 5.000 5.000 1.000 0
5 ! total region number of Z-direc
reg. num.| Length | nDim | aveDelta | initDelta | termDelta | GradingR | solid flag
-------------+ -------------+ -------------+ -------------+ -------------+ -------------+ -------------+ -------------+
1 20.000 4 5.000 5.000 5.000 1.000 0
2 30.000 6 5.000 5.000 5.000 1.000 1
3 30.000 6 5.000 5.000 5.000 1.000 1
4 20.000 4 5.000 5.000 5.000 1.000 0
5 200.000 40 5.000 5.000 5.000 1.000 0
--------------------------------
《条件ファイル ModifyMeshDistrib.ctl の記述説明》
大きく3つの書き込み情報ブロックにわかれる
x- 方向の region 情報
y- 方向の region 情報
z- 方向の region 情報
各方向とも書式は同じで
・region の総数
・第1 region の使用パラメータリスト
・第2 region の使用パラメータリスト
・第3 region の使用パラメータリスト
・ .....
・ .....
・第n region の使用パラメータリスト
という書式になる。
カラム方向(ヨコ方向)の記述はヘッダ部分の記述でわかるように
reg. num. ..... 第 n th Region
Length ..... 対象 Region の長さ
nDim ..... 対象 Region のセル数
aveDelta ..... 対象 Region の平均セル幅
initDelta ..... 対象 Region の init 位置セル幅
termDelta .... 対象 Region の term 位置セル幅
GradingR .... 対象 Region のセル幅拡大率
solid flag .... 対象 Region 内に solid オブジェクトがあるか?無いか?
流体に対して障害物があるかないか?
なければ 0, あれば 1
からなっている。
現時点 ( Fri. Sept. 22, 2011) では、上記の
nDim, GradingR のみに対して、設定変更が反映される。
ModifyMeshDistrib.ctlの書式読み込みにあたっては、
2行目の control file format flag を '2' にしておかなければならない。
--------------------------------
上記の ModifyMeshDistrib.ctl を使って、
二回目の CreateBlockMeshDict.f を実行した例
Regionによっては、分割数が減っているのがわかる。
上記は完成形じゃないので、もうすこし、Region と Region
の間で、cell 幅を連続的なサイズにしなきゃいけない。
--------------------------------
上記の west 面、 south 面に流入条件
east 面、north 面に 流出条件を設定してちょっくら
計算してみる。
セル数にして 576,688 ほど。
むかしは、この程度の計算、ヒーヒー言いながらやってたけど、
この文章を書いている、自宅の非力マシンでも、ちゃっちゃと計算してくれる。
SIMPLE solution converged in 66 iterations
というメッセージとともに計算終了。
0 件のコメント:
コメントを投稿