というわけで、createPatchDirectの説明をする。
境界条件の概要はconstant/polymesh/boundaryファイルに書かれるが、このboundaryファイルをcreatePatchは作成してくれる。
その各中身の設定をするのがcreatePatchDictになる。
このファイルは通常は無いので、(実行ディレクトリ)/systemに新たに作る。拡張子はないがテキストファイルである。
テキストファイルの中に何を書くかだが、cavityの例だとこのような感じ。
C++などのプログラム言語と同じように{}括弧が使われているが、
{}の数が合わないと、プログラム言語と同じようにエラーとなる。
エラーが出てきたとき、原因となる場所が特定しにくいときがあるのも、プログラム言語に似ていて、
openFOAMが他の商用ソルバーに比べ使いにくい一因になってると私は思う。
ともかく内容についてみてみる。
最初の
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object createPatchDict;
}
はお決まりのヘッダで、例題のものをコピペでいいと思う。
次の
pointSync false;
マニュアルを詳しく読んでいないので、はっきりとしたことはいえないが、
周期対称性などがあるかどうかのフラグのようだ。
通常の解析はこのままでよいようだ。
続いての
patches
(
以下が境界条件の設定する本体になるが、詳細は次回。
- 2017/04/22(土) 20:51:30|
- openfoam
-
| トラックバック:0
-
| コメント:0
さて、autoPatchを実行して後のPatchファイルを見てみると、
このようにモデルの6つの面に相当するauto0からauto5のパッチが自動的に作られている。
どの面がどこに相当するかはparaview等のソフトで確認するしかない。
defaultFaceはnFaceが0になっているので、autoFaceに分配されたようだ。
typeがpatchとなっているがここを境界条件に相当するものに書き換え、0フォルダの各ファイルに具体的数値を書いていく。
ところで、auto0というように自動的につけられたままではわかりにくい。できればfix_wallとか境界条件がわかりやすい名前をつけたほうがあとあとのためにもよさそうだ。
また複数のパッチが同じ条件もあり、そういう場合はまとめておきたい。
そのために使用するのがcreatePatchである。
またその設定を、あらかじめcreatePatchDictというファイルに書き込んでおく必要がある。
- 2017/04/09(日) 21:09:54|
- openfoam
-
| トラックバック:0
-
| コメント:0
前回、patchわけが出来ました。
auto0、auto1、auto2・・・
残念ながらどのpatchがどこのあるかは一度paraviewでみてみないと、わかりません。
paraviewで場所を確認して、boundaryファイルにauto0等の境界条件書いてもよいのですが 、
auto0、auto1、auto2・・・
という名前ではわかりにくいので、
moving_wallやfixed_wallというような
境界条件がすぐわかるようなpatch名にできれば便利です。
それにはcreatePatchというツール使用すれば簡単に出来ます。
説明は後日。
もうひとつ新しくパッチわけしたファイルは0.005という新しいフォルダが作られて、その中のpolymesh/boundaryの中に記述されています。
openFOAMは時刻ごとにフォルダを作るのでこれでは0秒ではpatchわけは無くて0.005秒後からPatchが変わるということになってしまいます。
実際解析する際は0秒(初期条件)でのパッチわけ、つまりconstant/polymeshのboundaryの記述を変更、しなければなりません。
それを行うためにblockMeshが作った境界条件を上書きします。
そのためには上書きオプションを使います。
autoPatch 90 -overwrite
とすれば初期条件にpatchが上書きされます。
- 2017/04/04(火) 20:38:35|
- openfoam
-
| トラックバック:0
-
| コメント:0
さて、パッチを作ってみましょう。
openFOAMが持っているautoPatchというツールを使います。
使い方は、
autoPatch (分割したい面のなす角度) -(オプション)
隣り合う要素同士が90度以上角度がついているところを面の境界にしたいなら、
autoPatch 90
でOKです。
実行すると
何かパッチできたっぽいメッセージが出ています。
ディレクトリを見ると
0.005
というディレクトリが出てます。
(これはあまりよくないのですが)
でparaviewを立ち上げて、cavityディレクトリ(時間のフォルダがある階層)にあるダミーで作ったxxx.foamを開くのですが、
applyを押す前に、下図のように時間を0.005にしてください。
そうして、propertiesウインドウのスライダバーを少し下にずらすと
auto0、auto1、auto2、・・・
と言う名前でパッチが作られています。
見たいパッチのみにチェックをつけると、上図のようにどのパッチ名がどこに相当するか確認できます。
- 2017/04/03(月) 18:34:26|
- openfoam
-
| トラックバック:0
-
| コメント:0
前回、パッチについて説明したが、要するに
1.形状とメッシュ作成、境界条件を一度に設定
する方法と、
2.メッシュを作成してからそのメッシュ図を見ながら境界条件を設定
する2種類の方法があって、2の方法を採用するならパッチ分割をして、境界条件ごとの面に分けなければならない、
ということである。
blockMeshであれば1か2かどちらかで境界条件設定できるがsnappyHexMeshでは基本2しか出来ない。
blockMeshであれば1の方がやりやすいこと多いが、ここではあえて2でやってみよう。
まず、境界条件自体は前回と同じとして、やってみる。
最初に計算前のcavityの例題をコピーするか、./Allcleanで計算結果を消してしまおう。
次に、blockMeshで境界条件を指定している部分を消す。
bぉckMeshの設定をしているのは、systemフォルダにある、blockMeshDictというファイル((コピーしたフォルダ)/cavity/system/blockMeshDict)を開いて、boundaryの記述を削除する。
を
のようにです。
このときboundary()の命令自体は残しておきます。消すとエラーになるようです。
boundaryはここでは何も無いよ、という設定が必要なようです。
個人的には(こういうような必要が無いけど書いておかなければならない命令が多いのが、openFOAMが難しいところのひとつだと思う)
ここで
blockMesh
と入力してメッシュを作成すれば、境界条件なしのメッシュが切れます。
続いて、パッチを作成します。
- 2017/03/25(土) 09:39:56|
- openfoam
-
| トラックバック:0
-
| コメント:0
次のページ