TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

TreeFoam 操作マニュアル
ver 2.36-151212

TreeFoam は、 OpenFoam を GUI で操作できるツール。
OpenFOAM は、基本的に CUI ベースで操作する為、操作性（生産性）が悪く、初心者には敷居が高い。これを少しでも改善する為に、 OpenFOAM がGUI 上で操作できる様に工夫したものが、 TreeFoam 。
このマニュアルは、事例を多用してまとめている為、実際に試す事ができ理解が深まる。 特に 6 項の基本的な操作方法の例については、 tutorials の計算方法をまとめたもので、これをそのまま試す事で、TreeFoam の殆どが理解できるものと思う。
このマニュアルは、OpenFOAM-2.4 、 3.0
TreeFoam-2.36-151212
でまとめている。

15/12/12

1

藤井TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
変更経歴
ver 2.25-150308

新規作成

ver 2.32-150726

wx.version-3.0（ubuntu15.04）に対応。
topoSetEditor のコマンドを OF-2.3 に対応。
繰り返し処理用の resulyTyoe「sets」「zones」を追加
runParallel に preserve の設定を追加
createBaffles220 を修正（空 patch 作成部分を削除）
これにより、topoSetEditor、並列処理、内部 patch に関する部分のみ修正。
paraFoam による multiRegionCase の確認方法を追加
インストール方法を修正

ver 2.33-150809

TreeFoam のバージョンの記録方法を変更。
multiRegion の材料設定方法を追加。これに伴いマニュアルの一部を修正。

ver 2.34-150918

mesh 作成の区分に wall を追加。

ver 2.35-151010

mesh 作成の区分に empty, symmetry, symmetryPlane, wedge を追加。
cfMesh による mesh 作成を追加。
gridEditor に cell クリア（空白 cell 作成）を追加。
「#includeEtc」に対応。

ver 2.36-151212

ubuntu-1510、OpenFOAM-3.0.0 への対応。
SetFields, mapFields に新たなボタンを追加。
helyxOS を操作マニュアルから削除。
操作マニュアルは、基本的に OF-2.40 で作成しているが、ここに OF-3.0.0 の場合を
追加した。

2

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

目次
1.
2.

TreeFoam とは..............................................................................5
インストール方法...........................................................................6
2-1. 動作環境..............................................................................6
2-2. インストール..........................................................................6
2-3. configTreeFoam の設定内容..............................................................8
3. 起動方法..................................................................................113-1. 通常の起動方法.......................................................................11
3-2. 起動しない場合のエラー内容の確認.....................................................11
3-3. configTreeFoam の修正.................................................................12
4. TreeFoam の起動画面.......................................................................13
5. 基本的な操作方法..........................................................................145-1. メニュー構造とその内容...............................................................15
5-1-1. メニューバー、ツールバー........................................................15
5-1-2. ポップアップメニュー............................................................18
5-1-3. ダブルクリックによる操作........................................................20
6. 基本的な操作方法の例......................................................................21
6-1. 天井駆動のキャビティ流れ（cavity）の操作例...........................................21
6-1-1. myTutorials フォルダ作成.........................................................21
6-1-2. tutorials の「cavity」を「myTutorials」フォルダにコピー..........................22
6-1-3. blockMesh 作成...................................................................25
6-1-4. icoFoam の実行...................................................................26
6-1-5. paraFoam による結果の確認........................................................27
6-1-6. 境界条件を変更する場合..........................................................28
6-1-7. constant、system フォルダの内容確認..............................................29
6-1-8. controlDict の内容確認...........................................................31
6-2. ダムの決壊（damBreak）の操作例.......................................................32
6-2-1. tutorials の「damBreak」を「myTutorials」フォルダにコピー........................32
6-2-2. blockMesh の作成.................................................................35
6-2-3. setFields で値をセット...........................................................36
6-2-4. 境界条件の確認..................................................................37
6-2-5. interFoam の実行.................................................................37
6-2-6. 結果の確認......................................................................39
6-2-7. 並列計算........................................................................40
7. メッシュ作成の例..........................................................................43
7-1. snappyHexMesh による通常メッシュの作成................................................43
7-1-1. case の作成......................................................................43
7-1-2. モデル形状......................................................................45
7-1-3. 特徴線を抽出....................................................................47
7-1-4. メッシュ作成用の csv ファイル作成................................................48
7-1-5. メッシュ作成....................................................................50
7-1-6. レイヤ作成......................................................................52
7-2. snappyHexMesh による faceZone や cellZone を含むメッシュ作成の例........................57
7-2-1. メッシュ作成用 case の作成.......................................................57
7-2-2. モデル形状......................................................................57
7-2-3. 特徴線の抽出....................................................................58
7-2-4. メッシュ作成用の csv ファイル作成................................................58
7-2-5. メッシュ作成....................................................................59
7-2-6. 解析用 case の作成...............................................................59
7-2-7. setFields で値をセット...........................................................61
7-2-8. データセット状態の確認..........................................................66
7-2-9. baffle（内部パッチ）作成........................................................68
3

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
7-3. cfMesh による通常メッシュの作成.......................................................74
7-3-1. case の作成......................................................................74
7-3-2. レイヤ付きメッシュ作成用の csv ファイル作成......................................74
7-3-3. メッシュ作成....................................................................79
7-4. salome-Meca で作成したメッシュを FOAM 形式に変換する例.................................85
7-4-1. case の作成......................................................................85
7-4-2. salome-Meca によるメッシュ作成...................................................85
8. TreeFoam 内の主なアプリケーション.........................................................89
8-1. gridEditor...........................................................................89
8-1-1. 起動画面........................................................................89
8-1-2. gridEditor の起動と終了..........................................................90
8-1-3. メニュー構造と内容..............................................................91
8-1-4. field 内変数や patchGroup、include 文の扱い.......................................97
8-1-5. binary 形式の扱い...............................................................107
8-2. topoSetEditor.......................................................................112
8-2-1. topoSet のコマンド構造..........................................................112
8-2-2. topoSetEditor の画面............................................................113
8-2-3. topoSet コマンドの内容..........................................................113
8-2-4. topoSet コマンドの抽出について..................................................114
8-2-5. topoSetEditor の操作例..........................................................116
8-2-6. 繰り返しの Action について......................................................120
8-2-7. 組み合わせ（combined）Action について...........................................125
9. 応用例...................................................................................129
9-1. ファイルの操作・編集................................................................129
9-1-1. stl ファイルの編集..............................................................129
9-1-2. binary 形式ファイルの扱い方.....................................................141
9-1-3. internalField、boundaryField のクリア...........................................152
9-2. gridEditor の表示....................................................................159
9-2-1. 列（field）の表示..............................................................159
9-2-2. 行（patch 名など）の表示........................................................163
9-2-3. セル（patch 内容など）の表示....................................................166
9-2-4. 空 patch（face 数が「0」の patch）の作成、削除...................................169
9-2-5. 空白セルを zeroGradient で埋める................................................170
9-2-6. internalField をクリア..........................................................172
9-2-7. cell データを editor で編集（「...」付きデータの編集）...........................173
9-3. field へのデータセット...............................................................177
9-3-1. setFields によるデータセット....................................................177
9-3-2. mapFields によるデータセット....................................................184
9-4. case 内の操作........................................................................200
9-4-1. solver の入れ替え...............................................................200
9-4-2. mesh の入れ替え.................................................................205
9-5. 内部 patch の作成....................................................................207
9-5-1. cyclic、mapped、baffle の patch 作成方法.........................................207
9-5-2. cyclic、baffle を含む mesh の並列計算方法........................................217
9-6. multiRegion の case...................................................................222
9-6-1. case 作成例.....................................................................222
9-6-2. multiRegionCase：流体 region にレイヤを追加する例...............................256
9-6-3. multiRegionCase：形状変更したモデルの再解析例..................................261
9-6-4. multiRegionCase：region 名を変更する場合........................................270
9-6-5. multiRegionCase：region を追加する場合..........................................273
9-6-6. multiRegionCase：region を削除する場合..........................................281

4

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
1.

TreeFoam とはOpenFOAM を使いやすくする為の GUI ツールで、代表的には以下の機能を備えている。これら機能が GUI 上で行えるので、直感的に操作でき、case フォルダの管理もしやすくなる。
1)
2)
3)
4)
5)
6)
7)
8)

case がツリー表示される。
ツリー上に solver 名や計算結果フォルダ（数字フォルダ）の数等の case の概略が表示される。
FreeCAD、salome-Meca、paraView のランチャを備えている。
salome-Meca で作成したメッシュを Foam 形式に領域名ごと変換できる。
Dict ファイルを意識せずに、snappyHexMesh や cfMesh でメッシュが作成できる。
gridEditor を使って OpenFOAM の境界条件が表形式で編集できる。
topoSetEditor を使って、cell の抽出、加工が容易にできる。
TreeFoam や gridEditor は、マルチタスクに対応している為、複数起動して、お互いに copy &paste が可能。また TreeFoam と gnome（nautilus）間で、ファイルの copy & paste も可能。

TreeFoam で使用しているアイコンは、gnome に標準で装備されているアイコンと salome-Meca、paraView のアイコンを TreeFoam/icons フォルダ内にコピーして使っている。
利用しているユーティリティプログラムは、pyFoam と OpenFOAM 標準のユーティリティを使っている。また
CAELinux で配布された「unv2gmsh.py」「unv2x.py」に関しては、これを TreeToam/bin フォルダにコピーして使っている。
TreeFoamgridEditor

topoSetEditor

5TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
2.

インストール方法

TreeFoam は、Ubuntu（gnome デスクトップ）と wxGlade の環境下で、python と bash シェルスクリプトを使って開発しているので、この環境下（wxGlade、python2.7 以上）であれば、基本的に作動する。

2-1.

動作環境

以下の環境が整えば、TreeFoam を定められた folder にコピーするだけで作動する。また、これ以外にTreeFoam の操作対象である OpenFOAM、paraView が最低限インストールされている事が前提になる。
また、TreeFoam の機能をフルに使うのであれば、他に pyFoam、cfMesh。さらに、salome-Meca やFreeCAD、LibreOffice が動作する環境が望まれる。

2-2.

OS

Ubuntu-11.04 以上で gnome デスクトップ。Mint-17.1 以上
TreeFoam は、ファイルマネージャ nautilus との間で file や folder のcopy & paste をするので nautilus が必須。端末は gnome-terminal を使っている。

OpenFOAM

OpenFOAM-1.6 以上（OpenFOAM-2.3.0 以上を推奨。）
このマニュアルは、OpenFOAM-2.4、3.0 用で書いている。
バージョンによって、操作が異なるので GUI を変えている。
pyFoamParaView
cfMesh

必要アプリ

python-2.7 以上
nautilus, gnome-terminal
wxGladewmctrl、xwit （window の制御を行うコマンド）

インストール

インストール方法は、deb パッケージからインストールする方法と、ソースをインストール場所に直接コピーする方法がある。

2-2-1.

deb パッケージからインストール

以下の deb パッケージからインストールする。
Treefoam_2.36.151212_all.deb
treefoam-doc_2.36.151212_all.deb

TreeFoam の本体
ドキュメント（ヘルプファイル）

これらのファイルを使って、端末から以下の様に入力してインストールする。
$ sudo dpkg -i treefoam_2.36.151212_all.deb$ sudo dpkg -i treefoam-doc_2.36.151212_all.deb
インストール場所は、「/opt」であり、各ユーザの TreeFoam 設定ファイルは、「~/.TreeFoamUser」フォル
ダ内に設定される。（~/.TreeFoamUser フォルダは、TreeFoam 起動時に毎回チェックし、無ければ TreeFoam
が作成し、ここに TreeFoam の設定ファイルをコピーする。）
任意の場所にインストールしたい場合は、2-2-2 項の方法でインストールする。
6

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
このインストール方法では、TreeFoam が必要としている wxGlade(python-wxglade), python2.7, gedit,
wmctrl, xwit を確認して、これらがインストールされていない場合は、これらもインストールしてくれるので、インストール作業は楽になる。しかし、前記した様に、インストール場所や TreeFoam の設定ファイルの保存場所は決まっており、これらの場所を変更する事はできない。
TreeFoam をインストールした後は、「~/.TreeFoamUser/configTreeFoam」の内容を各自の環境に合わせな
いと、TreeFoam が起動しても、使う事ができない。最低限、OpenFOAM、paraFoam、editor の設定は必要になる。設定方法は、2-3、3-3 項を参照。
アンインストールする場合は、synaptic を起動して削除するか、端末を起動して以下の様に入力してアン
インストールする。
$ sudo dpkg -r treefaom$ sudo dpkg -r treefaom-doc

2-2-2.

ソースからインストール

ソースからのインストール方法は、インストール場所に TreeFoam をコピーするのみだが、コピー後、環境変数の設定が必要になる。
TreeFoam のフォルダ構成は以下。
$HOME
TreeFoam
app
bin
data
help
icons
pythontemp
wxg

ホーム Dir
ホームフォルダ直下に TreeFoam をコピー
TreeFoam 上から起動するアプリの起動用スクリプト
実行ファイルTreeFoam の各モジュールのデータ
help ファイルアイコンファイル
TreeFoam の python モジュール
テンポラリフォルダ
wxGlade で作成した TreeFoam の GUI データ

また、TreeFoam は、以下の環境変数を準備しており、これらを使って path の設定を行っている。
$TreeFoamPath#インストール場所$TreeFoamUserPath#user 用の data や temp ファイルの保存場所
この為、TreeFoam をインストール場所にコピーした後、これらの環境変数を設定し直すために、「TreeFoam/treefoam」ファイルと「TreeFoam/treefoam-2.36」ファイルの内容を以下の様に修正する。
-------------- TreeFoam/treefoam ------------------------------------------------------------#インストール場所に移動
cd /opt/TreeFoam#この Dir をインストールする Dir（TreeFoam をコピーした場所）に変更する。
#TreeFoam 起動
gnome-terminal --name=TreeFoam --geometry=80x10-0-0 --zoom=0.9 --hide-menubar -x ./treefoam-2.36----------------------------------------------------------------------------------------------------------- TreeFoam/treefoam-2.36 -------------------------------------------------------:#環境変数の設定（TreeFoam のインストール場所）
export TreeFoamPath=`pwd`#インストール場所を取得
export TreeFoamUserPath=~/.TreeFoamUser#ここを$HOME 内の任意の Dir に書き換える
7

TreeFoam 操作マニュアル （TreeFoam-2.36-151212):---------------------------------------------------------------------------------------------$TreeFoamUserPath フォルダ内には、「app」、「data」、「temp」フォルダが作成され、最低限の必要な設定ファルがコピーされる。TreeFoam 実行時には、ここの内容が参照される。
TreeFoam をインストールした後は、「$TreeFoamUserPath/configTreeFoam」の内容を各自の環境に合わせないと、TreeFoam が起動しても、使う事ができない。最低限、OpenFOAM、paraFoam、editor の設定は必要になる。設定方法は、次項を参照。

2-3.

configTreeFoam の設定内容$TreeFoamUserPath/configTreeFoam が TreeFoam の環境を決めているので、ここの内容のみ各自の環境に合わせれば、TreeFoam が正常に作動し、OpenFOAM が操作できる事になる。configTreeFoam 内での設定項目と設定内容は、以下の通り。
1)

language
TreeFoam 上で使用する言語を設定する。（設定は、Japanese or English のみ）
TreeFoam は、国際化されているので、ここを English に設定して再起動すると、表示内容が全て英語表示になる。
インストール後の初回起動時は、TreeFoam が linux の言語設定を調べ、言語が「ja_JP.UTF-8」の場合（正確には頭 2 文字が「ja」の場合）、ここの設定を Japanese、それ以外は English の設定して起動する。
（TreeFoam が起動すると、$HOME に隠しファイルをつくるので、このファイルが無ければ、初回
起動とみなし、前記した configTreeFoam の language 設定を行う。）
2 回目以降の起動時は、configTreeFoam 内の language 設定を確認し、Japanese ならば日本語、English ならば英語表示で TreeFoam を起動する。

2)

logFileTreeFoam の logFile を作成するかどうかを決定する（設定は、yes or no のみ）
yes の場合、logFile を作成し、その log が TreeFoam 下部のテキストボックスに逐次表示される。
no の場合、logFile は作成せず、端末に log が表示される。
尚、テキストボックス中のテキストは、文字数の制限（10 万文字）を設けており、必要以上にlog をため込まない。（folder 選択時に文字数を確認し、10 万文字以上を削除している。）全ての log 内容は、「$TreeFoamUserPath/temp」フォルダ内に log ファイルがあるので、これで確認
できる。

3)

OFversion
TreeFoam 起動時と TreeFoam 上から OpenFOAM 環境設定を変更した時、TreeFoam が環境変数「$WM_PROJECT_VERSION」を読み込み、その内容を TreeFoam がここに書き込む。

4)

rootDir
TreeFoam 上で表示される Tree 構造の最上位の dir を記述する。
この内容は、指定が無い、または存在しない dir の場合、起動時に$HOME に設定される。
ここの設定は、TreeFoam が終了する度に書き直される。

5)

workDir
TreeFoam が表示している Tree 構造内で選択されている dir（解析 caseDir）が書き込まれる。
rootDir 以下で実在しない dir の場合は、$HOME を書き込む。
ここの設定は、TreeFoam が終了する度にこの内容が書き直される。

8

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
6)

bashrcFoam
OpenFOAM 起動用のスクリプトを記述する。
この中には、起動用だけでなく、必要な箇所に PATH、PYTHONPATH を通しておく。
以下の例に従って、環境に合わせておく。
例：$TreeFoamUserPath/app/bashrc-FOAM-2.4.0

7)

paraFoamparaFoam 起動用のスクリプトを記述する。
以下の例を参照。
例：$TreeFoamUserPath/app/runParaFoam-2.4.0

8)salomeMeca
salome-Meca の起動用スクリプトを記述する。
以下の例を参照
例：$TreeFoamUserPath/app/runSalomeMeca.7.5.1-2015.2

9)

helyxos
Helyx-OS の起動用スクリプトを記述する。
以下の例を参照。
例：$TreeFoamUserPath/app/runHelyxos-2.2.0

10)

CAD
使用する CAD の起動用スクリプトを記述する。
以下の例を参照
例：$TreeFoamUserPath/app/runCAD-FreeCAD

11)

editor使用する editor の起動用スクリプトを記述する。
editor の設定は、裏で動く設定にしない。この設定にしないと、TreeFoam 上で binary ファイルの編集ができなくなる。（9-1-2 項参照。）
この為、gedit の場合、gedit の version によってオプションの設定が変わってくる。
・gedit-ver3（ubuntu 系）「--standalone」オプションを追加する。
例：$TreeFoamUserPath/app/runEditor-gedit3_ubuntu
・gedit-ver2（mint 系）「--new-window」オプションを追加する。
例：$TreeFoamUserPath/app/runEditor-gedit2_mint

インストールに当たっては、以下の例の様に設定する。（設定不要項目もある。）
OpenFOAM が使える設定にする為には、「bashrcFoam」、「paraFoam」、「editor」の設定は、最低限必要になる。
## TreeFoam の設定# ---------------##使用する言語
language Japanese#「Japanese」に設定#logFile 作成有無
logFile yes#「yes」に設定

9

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)# OpenFOAM のバージョン
OFversion 2.4.0# rootDir の設定
rootDir/home/caeuser

#設定不要

#設定不要

# 選択されている現在の case の設定#設定不要
workDir/home/caeuser/CAE/CAE-FOAM/OF-2.3.1/formyHex/testModel# FOAM 端末の環境設定ファイル#実際の作動環境に合わせておく# OpenFOAM の他、必要な箇所に PATH、PYTHONPATH を通しておく。
bashrcFOAM $TreeFoamUserPath/app/bashrc-FOAM-2.4.0# paraFoam の起動#実際の環境に合わせておく
paraFoam $TreeFoamUserPath/app/runParaFoam-2.4.0# HelyxOS の起動
helyxos $TreeFoamUserPath/app/runHelyxos-2.2.0# SalomeMeca の起動
salomeMeca $TreeFoamUserPath/app/runSalomeMeca.7.5.1-2015.2# CAD の起動
CAD $TreeFoamUserPath/app/runCAD-FreeCAD# editor の設定# editor が close するまで、待つ設定にする。
editor $TreeFoamUserPath/app/runEditor-gedit3_ubuntu

この configTreeFoam の内容は、TreeFoam の初期化の部分であり、その処理方法は、TreeFoam.initializeTreeFoam()の内容を参照。
configTreeFoam の修正は、editor で編集しても構わないが、TreeFoam 起動させた後、3-3 項の方法で行った方が、スムーズに行う事ができる。

10

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
3.
3-1.

起動方法
通常の起動方法「/opt/TreeFoam/treefoam」を実行すると TreeFoam が起動するので、ランチャを作る場合は、「treefoam」を起動するように設定する。
インストール後、初回の TreeFoam 起動時は、以下の画面が現れる。

3-2.

起動しない場合のエラー内容の確認

TreeFoam は、log を TreeFoam のテキストボックスに表示させている都合上、TreeFoam の画面が現れる前にエラーが発生してしまうと、何も表示されず止まってしまう。（エラーメッセージが表示されない。）
TreeFoam は、以下の順番で起動している為、treefoam
treefoam-2.36
treefoam.py

インストール場所に移動して端末を起動
TreeFoam の環境設定（数字は、バージョンを表している）
TreeFoam 本体（GUI）

端末を起動して、直接「treefoam-2.36」を実行しても TreeFoam が起動する。もし、エラーが発生していた
場合は、端末を起動して、その端末から treefoam-2.36 を実行すると、起動した端末にエラーメッセージが出力されるので、エラー内容が確認できる。
TreeFoam の GUI が起動すると、端末がデスクトップ上から消えてしまうが、これは、端末がアイコン化されているだけなので、端末のアイコンをクリックすると端末が確認できる。

11

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
3-3.

configTreeFoam の修正

TreeFoam が起動した後、TreeFoam の作動環境を決定している configTreeFoam を各自の環境に合わせる必要がある。（configTreeFoam の内容は、2-3 項参照。）
configTreeFoam の修正は、下図の様に TreeFoam 上の をクリックして現れた「TreeFoam の設定変更」画面上で行う。

各設定 file を選択

各 file の編集

各設定 file 追加・削除・ rename

各設定を反映この画面上で、各種設定ファイル名を設定したり、設定ファイルの内容を編集したりする事ができる。
（各設定ファイルは、「$TreeFoamUserPath/app」フォルダ内に保存されている。）
内容を修正した後は、「設定」ボタンをクリックして、configTreeFoam にその修正内容を反映させる。

12

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
4.

TreeFoam の起動画面

TreeFoam の画面ではフォルダがツリー表示され、OpenFOAM の case フォルダには設定している solver や計算結果フォルダ数等の情報が下図の様に表示される。

rootDircase フォルダ

solver

BCPn

計算結果フォルダ数

上記の画面では、 マークの付いているフォルダ「cavity」が解析 case として設定されている。TreeFoam
上から、この case は、以下の内容である事が判る。
solver :icoFoam（icoFoam が設定）
BCPn
:anP（ascii, 非圧縮, シングルコアでデータが保存されている。）
B:acii(a) or Binary(B)C:非圧縮(n) or 圧縮(C)ファイル
Pn :並列数（例：P4 は、4 並列の処理）
nR:6 （計算結果 folder 数が 6 ヶ）st:0.0（計算開始時間が「0.0」）ed:0.5（計算終了時間が「0.5」）
フォルダをツリー表示する時に、そのフォルダが OpenFOAM の case かどうか（system/controlDict が存在するかどうか）を確認し、case フォルダの場合は、controlDict を読み込み、solver 名や書式、計算結果フォルダ等を表示する。
TreeFoam では、ファイルの書式が binary や圧縮ファイルでも、その書式を判断して読み込む事ができるので、書式にかかわらず、違和感なく使う事ができる。通常、binary ファイルは editor で編集できないが、TreeFoam 上からファイルを開く時、binary を ascii に変換して editor で読み込み、保存する場合は、
ascii を binary に変換して保存するので、binary ファイルでも内容の確認・編集ができる様にしている。
（8-1-5、9-1-2 項を参照。）

13

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
5.

基本的な操作方法

TreeFoam には、メニューバー、ツールバー、ポップアップメニューで処理を選択して実行する形式をとっている。 また、選択行をダブルクリックして直接処理する方法もある。（ダブルクリックする位置によって処理が異なる。）
メニューバー、ツールバーは、解析 case（ 付きフォルダ）に対する処理で、ポップアップメニュー、ダブ
ルクリックは、選択行に対する処理になるので、使い分けて処理する。
下図の例では、メニューバー、ツールバーは、解析 case「cavity」に対する処理になり、ポップアップメ
ニュー、ダブルクリックは、選択行「dambreak」に対する処理となる。
各処理状況は、TreeFoam 下部のテキストボックスにその log が表示されるので、その処理結果を確認できる。
また、計算開始時間「startFrom」と計算終了時間「stopAt」は、修正する頻度が高いので、直接 TreeFoamの上部テキストボックスを操作し修正できる（controlDict を書き換える）様になっている。
メニューバーツールバー

解析 case
選択行

処理結果の log が表示される

TreeFoam の終了は、必ず TreeFoam 上の ボタンをクリックして終了させる。この方法で終了させると、終了処理を行って TreeFoam を閉じる為、現在の TreeFoam のパラメータ（windows サイズ等）を保存して、終了させる事ができる。
window 上部の ボタンで直接 wondow を閉じると、終了処理を行わず、強制的に window を閉じてしまい、次回起動時に、前回起動時の内容が反映されなくなる。
ボタンでも終了処理を行わせる事はできるが、こうした場合、もし終了処理中にエラーが発生してしまうと、window を閉じる事ができなくなってしまう。この為、終了処理は で終了させた時のみ行っている。
この方法は、TreeFoam 内の全てのアプリで同様な事を行っているので、各処理を終了させる時に ボタンで終了させない様にする。
また、FOAM 端末に関しては、使用頻度が高いので、メニューバー、ツールバー、ポップアップメニューのいずれでも起動できる。希望する directory で FOAM 端末を起動する場合は、その directory を TreeFoam 上
14TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
で選択し、ポップアップメニューから起動するのが、最もスムーズに起動できる。

5-1.

メニュー構造とその内容

メニューは、メニューバー、ツールバー、ポップアップメニューがある。また、ダブルクリックによって処理する方法もあるので、操作しやすい方法を選択する。
また、多用するコピーや貼り付け、case 貼り付けについては、ショートカットキーを準備している。
操作方法の例は、6 項を参照。

5-1-1.

メニューバー、ツールバー

解析 case（ 付きのフォルダ）に対する処理は、基本的にメニューバーとツールバー上で行う。
メニューバー
ツールーバー

これらのメニューバーとツールバーの処理は、以下になる。

1)

ファイル（F）
configTreeFoam の変更（T）
TreeFoam の環境を決定している「$TreeFoamUser/configTreeFoam」ファイルを GUI 上で編集する。$TreeFoamUser/app フォルダ内に各設定ファイルを準備する事で GUI 上でこれらファイルを編集する事ができる。
root の変更（C）
TreeFoam が表示している Tree 構造の最上位を設定する。
この root の directory は、$HOME 以下で設定する。
再読み込み（R）
TreeFoam が表示している Tree 構造を再読込して、再表示する。
端末、あるいはデスクトップ上でフォルダを追加したり、削除した場合は、TreeFoam 上のTree 構造が狂ってくる。この様な場合、これを実行して Tree を再表示させる。
閉じる（Q）
TreeFoam を終了する。
TreeFoam 終了時は、このボタンをクリックして終了させる。
window 上部の をクリックしても TreeFoam を終了させる事はできるが、これで終了させると、終了処理を行わず閉じてしまうので、 ボタンで TreeFoam を終了させる。

2)

case 作成変更（M）
解析 case として設定（S）
選択しているフォルダを解析 case として設定する。
15

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
この解析 case がメニューバー、ツールバーの操作対象になる。
新しい case 作成（N）
ここで以下の 3 種類の操作ができる。
・解析 case として設定しているフォルダ内に tutorials のケースをコピーする。
・解析 case 内の solver を別の case の solver に入れ替える。
・解析 case 内のメッシュを別の case のメッシュに入れ替える。
mesh 編集（M）
ここでメッシュに関する操作を行う。
・メッシュ作成
blockMesh や snappyHexMesh、cfMesh でメッシュを作成する。
・メッシュ変換
unv 形式のメッシュ（ファイル名：mesh.unv）を FOAM 形式に変換する。
メッシュの scale を変更する。
・内部パッチの作成
faceZone から内部 patch（baffle）を作成する。
・領域分割
mesh を分割して multiRegion タイプ case を作成する。
topoSetEditor 起動（T）
topoSetEditor を起動して、特定の mesh を抽出したり、加工できる。
multiRegion の設定（R）
multiRegion タイプの case を操作する。
・領域間の境界条件を設定する。
・region に設定されている全ての境界条件を保存したり、設定したりできる。
・region を削除したり、region 名を変更できる。
・region 内の file に容易にアクセスでき、その内容が編集できる。
HelyxOS による編集（H）
HelyxOS 用の case を作成し、その case 内容が HelyxOS で編集できる。

3)

編集（E）
開く（O）
解析 case のフォルダをファイルマネージャ（nautilus）で開く。
gridEditor の起動（G）
gridEditor を起動して、field の初期値や境界条件を編集する。
各 field の internalField と boundaryField の内容が表形式で編集できる。
field 編集（F）
解析 case の field を editor で開き、編集する。
fieldDataSet 又は clear（S）
setFields や mapFields を実行して、field にデータをセットしたり、指定した field のinternalField や boundaryField をクリアする。
properties 編集（P）
解析 case の constant フォルダ内の file 名を指定して、editor で開く。
デフォルトは、connstant フォルダの内容が見えるが、ここから親フォルダや子フォルダに
16TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
移動できるので、case 内の全ての file が editor で確認できる。
また、その file が圧縮 file や binary でも editor で開き、編集できる。
dictionary 編集（D）
解析 case の system フォルダ内の file 名を指定して、editor で開く。
デフォルトは、system フォルダの内容が見えるが、ここから親フォルダや子フォルダに移動できるので、case 内の全ての file が確認できる。
また、その file が圧縮 file や binary でも editor で開き、編集できる。
コピー（C） ctrl-C
選択しているフォルダを clipBoard にコピーする。
clipBoard は、system の clipBoard を使っているため、ここでコピーした folder をファイ
ルマネージャ（nautilus）でも貼り付ける事ができる。
ここの操作は、対象が解析 case ではなく、選択しているフォルダになる。
貼り付け（P） ctrl-V
clipBoard にコピーされている folder や file を選択しているフォルダに貼り付ける。
clipBoard は、system の clipBoard を使っているため、ファイルマネージャ（nautilus）側
で、コピーした folder や file も貼り付ける事ができる。
また、貼付け後、親フォルダ以下のリンクのチェックを行っているので、貼り付けたファ
イルの絶対参照リンクが壊れた場合も修復できる。
ここの操作は、対象が解析 case ではなく、選択しているフォルダになる。
case 貼り付け（B） ctrl-B
system の clipBoard にコピーされている case を、選択しているフォルダ内に貼り付ける。
この貼り付けを使うと、計算結果等の余分な folder や file は、貼り付けない。
また、貼付け後、親フォルダ以下のリンクのチェックを行っているので、貼り付けたファ
イルの絶対参照リンクが壊れた場合も修復できる。
ここの操作は、対象が解析 case ではなく、選択しているフォルダになる。
フォルダ名変更（R）
選択しているフォルダ名を変更する。
ここの操作は、対象が解析 case ではなく、選択しているフォルダになる。
新しいフォルダ追加（N）
選択しているフォルダ内に新しいフォルダを追加する。
ここの操作は、対象が解析 case ではなく、選択しているフォルダになる。
フォルダ削除（E）
選択しているフォルダをゴミ箱に移動する。
ここの操作は、対象が解析 case ではなく、選択しているフォルダになる。
解析 case に設定しているフォルダは、削除できない。

4)

計算（C）
case の初期化
計算結果フォルダや不要な folder、file を削除して、case を初期化する。
計算結果の削除
計算結果フォルダのみ削除する。
計算開始（G）
解析 case として設定している case の solver をシングルコアで実行する。
17

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
plotWatcher 起動（W）
解析 case の solver を実行中（実行後）、このボタンをクリックすると plotWatcher が起動するので、solver 実行時の残渣が確認できる。
並列計算（P）
ここで、並列計算を行う。
decomposeParDict の作成、各 processor 毎の領域分割、並列計算開始、計算結果の再構築、各 processor 内の file 操作（file コピーと削除）が行える。

5)

ツール（T）CAD の起動（C）
configTreeFoam で設定されている CAD を起動する。
FOAM 端末の起動（T）
configTreeFoam で設定されている FOAM 端末を起動する。
paraFoam の起動（P）
configTreeFoam で設定されている paraFoam を起動する。
salome-Meca の起動（S）
configTreeFoam で設定されている salome-Meca を起動する。

6)

ヘルプ（H）
使い方（U）
ヘルプを表示する。
バージョン表示（V）
TreeFoam のバージョンを表示する。

5-1-2.

ポップアップメニュー

ポップアップメニューは、基本的に選択行に対する処理を行う。ポップアップメニューは、右クリックする
場所で、メニュー内容が異なっている。

1) Tree 部

1)2) Tree 部以外

Tree 部のポップアップメニュー

18TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
開く
選択しているフォルダをファイルマネージャ（nautilus）で開く。
これにより、このフォルダ内のファイル操作ができる。
端末の起動
選択しているフォルダをカレントディレクトリとして、端末を開く。
この端末は、FOAM 端末ではない。
選択 case として設定選択しているフォルダを解析 case（ 付きフォルダ）として設定する。
FOAM 端末の起動
選択しているフォルダをカレントディレクトリとして、FOAM 端末を開く。
OpenFOAM 用に環境設定された端末を起動する。
gridEditor 起動
選択しているフォルダをカレントディレクトリとして、gridEditor を起動する。
コピー
選択しているフォルダを system の clipBoard にコピーする。system の clipBoard を使っている為、ここでコピーした folder は、ファイルマネージャ（nautilus）でも貼り付ける事ができる。
貼り付け
system の clipBoard にコピーされている folder や file を貼り付ける。system の clipBoard を使っている為、ファイルマネージャ（nautilus）でコピーした folder や file も貼り付ける事ができる。
case の貼り付け
system の clipBoard にコピーされている case を選択した folder 内に貼り付ける。
貼り付ける時、計算結果等余分な folder や file は、貼り付けない。
フォルダ名変更
選択しているフォルダ名を変更する。
新しいフォルダ追加
選択しているフォルダ内に新しいフォルダを追加する。
フォルダ削除選択しているフォルダをゴミ箱に移動する。
解析 case に設定しているフォルダは、削除できない。
CAD の起動
選択しているフォルダをカレントディレクトリとして CAD を起動する。
configTreeFoam で設定されている CAD が起動する。
salomeMeca の起動
選択しているフォルダをカレントディレクトリとして salome-Meca を起動する。
configTreeFoam で設定されている salome-Meca が起動する。

2)

Tree 部以外のポップアップメニュー
開く
19TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
選択しているフォルダをファイルマネージャ（nautilus）で開く。
これにより、このフォルダ内のファイル操作ができる。
端末の起動
選択しているフォルダをカレントディレクトリとして、端末を開く。
この端末は、FOAM 端末ではない。
選択 case として設定選択しているフォルダを解析 case（ 付きフォルダ）として設定する。
FOAM 端末の起動
選択しているフォルダをカレントディレクトリとして、FOAM 端末を開く。
OpenFOAM 用に環境設定された端末を起動する。
gridEditor 起動
選択しているフォルダをカレントディレクトリとして、gridEditor を起動する。

5-1-3.

ダブルクリックによる操作

ダブルクリックによる操作は、メニューを選択する必要がない為、素早く処理を行う事ができる。
この処理は、ダブルクリックする場所によって、処理が異なってくる。
操作対象は、ダブルクリックした行が操作対象になるが、ダブルクリックすると必然的にその行が選択される。その処理内容は以下。

1) 余白部

2) folder 名部3) solver 名部4) 結果部

1)

余白部をダブルクリック
ダブルクリックした行を解析 case（ 付きのフォルダ）として設定する。

2)

folder 名をダブルクリック
ダブルクリックした folder をファイルマネージャ（nautilus）で開く。

3)

solver 名をダブルクリック
ダブルクリックした case の controlDict を editor で開く。ただし、ダブルクリックした行が解析 case
ではない場合は、「解析 case として設定するか」の問い合わせを行い、解析 case として設定した後、controlDict が開く。

4)

結果部をダブルクリック
ダブルクリックした case をカレントディレクトリとして、paraFoam を起動する。ただし、ダブルクリックした行が解析 case ではない場合は、「解析 case として設定するか」の問い合わせを行い、解析
case として設定した後、paraFoam が起動する。

20

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
6.

基本的な操作方法の例

TreeFoam の基本的操作の例として、tutorials の cavity と damBreak を実行してみる。

6-1.

天井駆動のキャビティ流れ（cavity）の操作例

このキャビティ流れの計算を以下の様に実行してみる。まず、tutorials の cavity を、新しく作成したフォ
ルダ内にコピーして、この中で cavity を計算する。
1)
2)
3)
4)
5)
6)
7)
8)

6-1-1.

$HOME 直下に計算用のフォルダ「myTutorials」を作成する
tutorials の「cavity」を「myTutorials」フォルダにコピーする。
blockMesh を実行してメッシュを作成する。
solver「icoFoam」を実行する。
paraFoam で結果を確認する。
境界条件を変更して再計算
constant、system フォルダの内容確認
controlDict の内容確認

myTutorials フォルダ作成$HOME 直下に「myTutorials」を作成する。
rootDir（新しいフォルダを作成する場所）を選択して、右クリックでポップアップメニューを表示させ、「新しいフォルダ追加」をクリックして、新しいフォルダ名「myTutorials」を、現れたダイアログに入力
してフォルダを作成する。

21

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この後、下図の様に「myTutorials」フォルダが追加されている。
myTutorials フォルダ名の左側（部）をダブルクリックして マークを付けておく。

6-1-2.

tutorials の「cavity」を「myTutorials」フォルダにコピー

myTutorials フォルダができ上がったので、このフォルダに tutorials の「cavity」をコピーする。
まず、 ボタンをクリックする。

この後、以下の画面が現れる。この画面上で、「newCase の作成」タグ内の「tutorials」ラジオボタンが選択されていることを確認の上、「case 取得...」ボタンをクリックする。

22

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

次の画面上で、区分「incompressible:非圧縮性流れ」、solver「icoFoam」、case「cavity」を選択し、「OK」ボタンをクリックする。
ここで、もし、solver 名等が表示されない場合は、tutorials の場所が間違っているので、tutorials の「場所を変更する」をチェックし、「参照...」ボタンで tutorials の場所を指定すれば、その内容が表示される。また、solver 名を選択した時点で、その solver の処理内容が表示されるので、参考になる。

以上で、tutorials の「cavity」が選択できたことになる。下図の23

部に tutorials「cavity」のTreeFoam 操作マニュアル （TreeFoam-2.36-151212)
directory が取得できている。
この後、作成場所と case 名を確認して、「コピー開始」ボタンをクリックする事によって、「cavity」が「myTutorials」フォルダ内にコピーされる。
コピー後は、「閉じる」ボタンでダイアログを閉じておく。

この後、下図の様に ボタンをクリックして、ツリー構造を再読み込みし、「myTutorials/cavity」にマークを付けておく。

24

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

ダブルクリックして、

6-1-3.

マークをつける

blockMesh 作成

case 内に blockMeshDict が準備されているので、blockMesh を実行してメッシュを作成する。
ボタンをクリックして、現れた画面内の「blockMesh 実行」ボタンをクリックする事で、blockMesh を作成する事ができる。

25

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
6-1-4.

icoFoam の実行

contorolDict に設定されている solver（今回の場合、icoFoam）を実行する為には、る事で、実行できる。

ボタンをクリックす

ボタンをクリックすると、下図の様に FOAM 端末が起動し、この中で icoFoam が実行される。
solver 実行時の log は、cavity フォルダ内の「solve.log」ファイルに残されているので、実行後でも logが確認できる。

また、実行中（実行後）の残渣を確認するには、 ボタンをクリックすると、残渣が以下の様に表示される。
端末を起動した上で plotWatcher を起動している為、閉じる時は端末も閉じておく。

26

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
6-1-5.

paraFoam による結果の確認

結果の確認は、paraFoam を起動し確認する。TreeFoam 上から ボタンをクリックして、「paraFoam」を選択後、「OK」ボタンをクリックする事で、paraFoam が起動する。

27

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
6-1-6.

境界条件を変更する場合

今の境界条件（boundary、各 field の internalField と boundaryField の内容）は、TreeFoam 上のンをクリックする事で gridEditor が起動し、これらが確認できる。

ボタ

field 名InternalField の内容

patch 名gridEditor 上からは、上図のboundaryの内容

boundaryField の内容

内の項目全て編集ができる。

境界条件を変更する為に、U field の movingWall の内容を以下の様に変更してみる。修正は、該当するセルを選択し、「F2」キーを押すかダブルクリックして、セル内容を修正する。

修正 (1 0 0) → (2 0 0)28

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
上図の様に修正後、をクリックして修正内容を保存し、をクリックして、gridEditor を終了する。

gridEditor の終了は、必ず ボタンをクリックして終了させる。これは、 ボタンで終了させると、終了処理を行って、正常に gridEditor を閉じる為。（window 上部の ボタンで直接 wondow を閉じると、終了処理を行わず、強制的に window を閉じてしまう。）
以上の操作で、U field の movingWall patch 内容が修正された事になる。
また、この gridEditor は、ファイルの書式が ascii や binary、圧縮ファイルでも読み込み、保存ができる
ので、ファイルの書式を意識せず扱う事ができる。
この条件で再計算させるためには、TreeFoam 上から ボタンをクリックすれば、再計算を開始する。
下図が再計算させた結果になる。流速のレンジが「2」に変わっている。

レンジが「 2 」に変わっている6-1-7.

constant、system フォルダの内容確認

TreeFoam 上から、constant フォルダと system フォルダの内容は、それぞれ、 ボタンと ボタンをクリックする事で、そのフォルダ内のファイル名のリストが表示されるので、ここで確認できる。この画面上で、ファイル名をダブルクリックすると、editor が起動し、その内容を確認する事ができる。
この画面上でファイルを editor で開く場合、そのファイルが binary ファイルであっても、binary を asciiに変換して、editor で開き、編集が可能になる。保存する場合は、asii を binary に変換して保存する。この為、ファイルの書式に関わらず、ファイルの内容が確認・編集できる。
また、この画面内のフォルダ名をダブルクリックすると、そのフォルダに移動して、ファイル名のリストが表示される。フォルダ名「..」をダブルクリックすると、親フォルダに移動できるので、解析 case 内に存在する全てのフォルダに移動できる。（解析 case の外には、移動できない。）

29

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
今回の case 内では、constant/transportProperties を使っているので、容を確認してみる。
constant

ボタンををクリックしてこの内systemダブルクリックする

transportProperties のファイル名をダブルクリックして、この内容を editor で確認した結果が下図になる。

30

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
6-1-8.

controlDict の内容確認

計算方法の制御を行っている controlDict の内容の確認は、使用頻度が高いので、TreeFoam 上から直ぐに確認できる様にしている。その方法は、下図の「編集」ボタンをクリックするか、solver 名「icoFoam」をダ
ブルクリックする事で、controlDict の内容が editor で表示され、これを確認する事ができる。

クリック

ダブルクリック

以下が、controlDict の内容になる。同時に fvSchemes と fvSolution も同時に確認できる。

31

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
6-2.

ダムの決壊（damBreak）の操作例

ダムの決壊を以下の様に実行してみる。tutorials の damBreak をフォルダ「myTutorials」内にコピーして、
この中で、実行する。
1)
2)
3)
4)
5)
6)
7)

6-2-1.

tutorials の「damBreak」を「myTutorials」フォルダにコピーする。
blockMesh を実行してメッシュを作成する。
setFields で alpha.water のフィールドに値をセット
境界条件の確認solver「interFoam」を実行する。
paraFoam で結果を確認する。
並列計算の確認

tutorials の「damBreak」を「myTutorials」フォルダにコピー

tutorials の「damBreak」をコピーする為に、TreeFoam 上のボタンをクリックする。

この後、以下の画面が現れるので、この画面上で、「newCase の作成」タグ内の「tutorials」ラジオボタンが選択されていることを確認の上、「case 取得...」ボタンをクリックする。

この後、以下の画面が現れるので、区分「multuphase:多層流」、solver「interFoam」、
case「laminer/damBreak」を選択し、「OK」ボタンをクリックする。
尚、solver を選択した時点で、画面下部にその solver の内容が表示されるので参考になる。

32

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この操作により、tutorials 内の「damBreak」の directory が内の様に取得できる。

この後、newCase の作成場所が「/home/caeuser/myTutorials/cavity」になっているので、これを、「参照...」ボタンをクリックして、「home/caeuser/myTutorials」に変更する。
デフォルトのコピー先は、 マーク付きのフォルダに設定されており、これが cavity になっている。
（ マーク付きフォルダを予め「myTutorials」フォルダに設定しておけば、この操作は不要になる。）

33

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)「参照...」ボタンをクリックすると、以下の画面が現れるので、「myTutorials」を選択し、「決定」ボタンをクリックして、画面を閉じる。

newCase の作成場所「/home/caeuser/myTutorials」が取得できたので、「コピー開始」ボタンをクリック
して、damBreak をコピーする。

34

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
コピー後は、「閉じる」ボタンをクリックして、「新しい case の作成」画面を閉じておく。
画面を閉じた後、下図の様に ボタンをクリックして、ツリー構造を再読み込みし、部をダブルクリックして、「myTutorials/damBreak」に マークを付けて解析 case に設定しておく。

ダブルクリック

6-2-2.

blockMesh の作成

既に、blockMeshDict が準備されているので、blockMesh コマンドを実行すれば済む。この為、 ボタンをクリックして、現れた画面内の「blockMesh 作成」ボタンをクリックする事で blockMesh コマンドが実行できる。
でき上がったメッシュは、 ボタンをクリックすると、paraFoam が起動するので、これで確認できる。

35

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

6-2-3.

setFields で値をセット

damBreak は、「alpha.water」field に値をセットする必要があるが、この field は、case 内には存在しないので、「damBreak/0/alpha.water.org」をコピーして「damBreak/0/alpha.water」に名称を変更しておく。
myTutorials
damBreak0
Ualpha.water.org
p_rgh

→

myTutorials
damBreak0
Ualpha.water.org
alpha.waterp_rgh

コピーしてこの field を作成する。

この後、setFields を実行する事になる。setFields 実行は、TreeFoam 上の ボタンをクリックして、現れた画面上で、setFields タグ内の「setFields 実行...」ボタンをクリックする

setFields 実行時の log
は、TreeFoam 下部のテキストボックス内に表示されるので、これで実行時の状況が確認できる。
値がセットできたかどうかの確認は、 ボタンをクリックして parFoam で確認できる。paraFoam の起動方法は、6-2-6 項を参照。

36

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

6-2-4.

境界条件の確認

damBreak の境界条件（boundary, 各 field の internalField と baoundaryField の内容）は、TreeFoam 上のボタンをクリックする事で gridEditor が起動し、これらが確認できる。

field 名internalFfield の内容

patch 名 boundary の内容

6-2-5.

baoundaryField の内容

interFoam の実行

今の境界条件と初期値で計算させるには、TreeFoam 上の ボタンをクリックする事で、controlDict 内に記述されている solver：interFoam を実行する事ができる。
37

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
また、実行中（実行後）の残渣を確認する為には、TreeFoam 上の ボタンをクリックする事で、残渣を確認する事ができる。以下が solver：interFoam を実行した結果になる。（FOAM 端末を起動し、この中でinterFoam を実行している。）

下図が実行中（実行後）に ボタンをクリックして、plotWatcher 起動して残渣を確認した結果になる。
尚、残渣の画面を閉じる時は、端末内で plotWatcher が動いているので、端末を閉じる事により、
plotWatcher を停止させる事ができる。

38

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

6-2-6.

結果の確認

計算結果を確認するためには、TreeFoam 上で ボタンをクリックして、option 無しの「paraFoam」を選択
して「OK」ボタンをクリックする事で、paraFoam が起動するので結果を確認できる。下図が確認した結果
になる。

39

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
6-2-7.

並列計算

並列計算を行う前に現在の計算結果を削除しておく。削除は、 ボタンをクリックする事で、log や計算結果等の不要なファイルを削除し、case を初期化する事ができる。
計算結果を削除した後、TreeFoam 上からボタンをクリックする。クリックした時点で、TreeFoam は、
case 内に decomposeParDict があるかどうかを確認し、存在しない場合は、デフォルトの decomposeParDictをコピーして作成する。この為、decomposeParDict の存在を意識せず、並列計算ができる。
並列計算用の画面上で並列数（nCPU）を確認する。並列数を修正するようであれば、テキストボックス中の数字を直接変更し、「nCPU,method 設定」ボタンをクリックする。（「nCPU,method 設定」ボタンが非アクティブになっているが、nCPU 数を変更すると、アクティブに変わり、設定できる。）

また、同時に mesh 分割方法（method）も確認できるので、確認する。今回の場合、simple の(2 2 1)で設定されていることが確認できる。分割方法や分割数を変更するのであれば、ここで直接修正する。修正後は、「nCPU,method 設定」ボタンをクリックして、decomposeParDict に反映させる。
また、「Dict 確認・編集」ボタンで、decomposeParDict を editor で開く事ができるので、その設定内容を確認する事ができる。以下はその設定内容になる。

40

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この後は、メッシュを各 processor 毎に分割する。この為に、下図の「mesh 分割」ボタンをクリックする。
この時の処理状況が TreeFoam 下部のテキストボックス中に log が表示されるので、処理状況が確認できる。
分割後は、「並列計算開始」ボタンをクリックして並列計算を開始させる。
計算終了後は、「結果の再構築」ボタンにより、各 processor 毎に分割されている計算結果を集めて caseフォルダ直下に保存する。

計算結果を再構築した後は、各 processor 毎の計算結果は不要になる。これを削除する為に「各領域の file
操作」ボタンをクリックすると、下図の「processor 内の file 操作」画面が現れるので、この画面上で削除するフォルダを選択し、一括して削除できる。各 processor 内の time フォルダは、基本的に最初と最後のみ残しておけば、問題ない。これらを残しておくと、結果ファイルの容量が 2 倍になってしまう。

41

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

最初と最後の time フォルダ以外を選択し、「 processor
内から削除」ボタンをクリック
して削除する。

結果を再構築した後は、TreeFoam 画面上のができる。

ボタンをクリックして paraFoam を起動し、結果を確認する事

42

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
7.

メッシュ作成の例

snappyHexMesh と cfMesh を使ってメッシュを作成してみる。
snappyHexMesh の場合は、cellZone や faceZone を作成する事ができる為、内部 patch や multiRegion モデルの作成が容易にできる。
cfMesh の場合は、現段階では cellZone や faceZone の作成ができないので、上記した事が難しくなるが、これらを作成しない通常のメッシュを作成するだけであれば、snappyHexMesh よりも容易にメッシュを作成する事ができる。
上記した事を踏まえて、ここで、snappyHexMesh を使って通常のメッシュと cellZone や faceZone 付きのメッシュを作成してみる。さらに、cfMesh を使って通常のメッシュを作成してみる。
最後に、salome-Meca で作成したメッシュを FOAM 形式にグループ名（volume 名、face 名）付きで変換できる様にしているので、このメッシュも作成してみる。

7-1.

snappyHexMesh による通常メッシュの作成

snappyHexMesh は、stl ファイルさえ準備できれば、ほぼ自由な形状のメッシュを作成する事ができるので、重宝するが、その設定項目が多数あり、使いづらい面がある。この為、TreeFoam 上で snappyHexMesh を使ってメッシュを切る時、使いやすさに重点をおいてメッシュが作れる様にしている。具体的には、以下に示す
方針でメッシュが作れる様にした。
1)
2)
3)
4)

座標の入力はしない。（stl ファイルから座標を拾う）
blockMeshDict、snappyHexMeshDict を意識しなくても、メッシュが作れる。
メッシュの修正が楽に行える。
メッシュの微調整は、直接 dict ファイルを修正。

blockMesh については、そのメッシュ作成方法が座標入力と分割数でメッシュサイズを決めているので、直感的に判りにくい。この為、座標は stl ファイルから拾い、分割数はメッシュサイズを入力すれば済む方法にしている。snappyHexMesh については、準備した stl ファイルの区分（patch, faceZone, cellZone 等）とメッシュサイズを明確にする事で、メッシュが切れる様にしている。
前記したメッシュ作成の手続きを csv 形式で記述し、その csv データから blockMeshDict とsnappyHexMeshDict を作り出す方法をとっている。その手続きは csv 形式の為、office 等で簡単に編集できる事になる。
この作成方法で、メッシュを作成してみる。作成するメッシュは、通常のメッシュ（領域によってメッシュ
サイズを変え、レイヤ追加）を作成してみる。

7-1-1.

case の作成

まず基本となる case を作成する。mesh を作成するだけの為、case は「0」、「constant」、「system」
フォルダがあれば何でも構わないので、6-1 項で作成した「cavity」をコピーして使ってみる。
case のコピー方法は、「cavity」を選択して、右クリックでポップアップメニューを表示させ、「コピー」を選択する。この後、「myTutorials」フォルダを選択して、再びポップアップメニューを表示させ、「case の貼り付け」を選択して、case をコピーする。
この後、ポップアップメニューから「folder 名変更...」を選択して、case 名を「normalMesh」に変更する。
さらに、ポップアップメニューの「新しいフォルダ追加」を選択して、normalMesh フォルダ内に stl ファイ
ル保存用のフォルダ「model」を作成しておく。
43

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
最終的にフォルダの構成は、以下になる。
myTutorials
normalMesh0
constant
model
systemメッシュ作成用 casestl ファイル保存用フォルダ

最終的な状態（case 名が「normalMesh」に変更され、model フォルダが追加されている。）

44

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
7-1-2.

モデル形状

以下のモデルのメッシュを作ってみる。
R5 mm の半球形状

inW

sideW

80 x 20 x 20 mm
outW
100 x 40 x 40 mm
stl ファイルは、以下を作成する。（今回は salome-Meca を使って stl ファイルを作成している。）
部位
stl ファイル
備考–------------------------------------------------------------------------------------100x40x40
inW.stl, sideW.stl, outW.stl
patch を作成
80x20x20
fineReg.stl
cell サイズを細かくする為の領域を定義
半球
halfSp.stl
この部分をくり抜く（patch を作成）でき上がった stl ファイルは、TreeFoam 上で stl ファイルのフォーマットや寸法を確認しておく。
TreeFoam 上の ボタンをクリックして「snappyHexMesh による mesh 作成...」ボタンをクリック、「stlチェック...」ボタンをクリックして、「stl ファイルの編集」画面上でフォーマットと寸法を確認する。

フォーマットは、全て ascii だが、xyz の寸法が全て mm 単位の値になっている事が判る。
（もし、フォーマットが binary の場合は「ascii」変換ボタンをクリックして ascii に変換できる）
45

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

xyz 寸法フォーマットstl が mm 単位で作成されているので、全ての stl ファイルを 1/1000 に縮小する。
倍率変更は、画面上で変更するファイルを選択し、「scale 変更...」ボタンをクリック、倍率「0.001」を入力して、m 単位に変更する。

46

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
尚、この「stl ファイルの編集」画面上では、scale の変更の他に、solid 名の変更や、複数の stl ファイルを結合したり、face の向きを反転させる事ができる。操作方法は、いずれも対象ファイルを選択してボタンをクリックする事で実現できる。また、ポップアップメニューでファイルコピーや削除する事もできる。
（詳細は、9-1-1 項を参照）

7-1-3.

特徴線を抽出

sunappyHexMesh は、メッシュ作成時に、エッジの効いたメッシュを作る為に、節点を特徴線に snap して作
り出している。その特徴線を stl ファイルから抽出する。
方法は、下図の「Dict 編集...」ボタンをクリックして、全ての stl ファイルを選択し、「OK」ボタンをクリックして、特徴線抽出用の Dict ファイルを作成する。Dict ファイルができ上がると、editor が起動して、その Dict ファイルを表示するが、変更せずそのまま閉じておく。（stl ファイル毎に includeAngle を修正する場合は、ここで修正しておく。）
この後、「Dict 実行(抽出)...」ボタンをクリックする事で、特徴線が抽出できた事になる。
この操作で、constant/triSurface フォルダができ上がり、この中に stl ファイルがコピーされて「surfaceFeatureExtract」コマンドを実行して、特徴線を抽出する。（eMesh ファイルができ上がる。）
メッシュ作成を 7-1-5 項の方法で作成するのであれば、ここでの特徴線の抽出は、Dict ファイルを作成するところまでが必要な処理になる。7-1-5 項の方法（「snapptDict 作成...」ボタンをクリックする操作）は、ここで作成した Dict ファイルを使って特徴線を抽出する操作を TreeFoam が実行する
為、「Dict 実行(抽出)...」ボタンをクリックする必要はない。
メッシュ作成を「snappy 実行...」ボタンで作成する場合は、ここで「Dict 実行(抽出)...」ボタン
をクリックして、特徴線を抽出しておく必要がある。

47

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

7-1-4.

メッシュ作成用の csv ファイル作成

でき上がった stl ファイルと特徴線を使って、メッシュ作成用の csv ファイルを作成する。
方法は、「csv 作成...」ボタンをクリックして、ファイル名を入力すると、libreOffice のスプレッドシー
トが起動する。新しく csv ファイルを作成した場合（「csv 作成...」ボタンをクリックした場合）、下図の状態で立ち上がる。これは、準備された stl ファイルを読み込み、座標を調べて、それを表示している。
ここに stl ファイルの区分と作成したいメッシュサイズを入力して、csv ファイルができ上がる事になる。
stl ファイルの区分は、以下の区分を準備している。
区分
内容–-------------------------------------------------------------------------------patch
patch 用の stl ファイルwall
wall 用の stl ファイルempty
empty 用の stl ファイル
symmetrysymmetry 用の stl ファイル
symmetryPlane symmetryPlane 用の stl ファイル
faceZonefaceZone を作成する為の stl ファイルface
face 領域を定義する stl ファイル（領域定義のみで faceZone は作らない）
cellZonecellZone を作成する為の stl ファイルreg
volume 領域を定義する stl ファイル（領域定義のみで cellZone は作らない）
上表中の face と reg は、領域定義のみだが、その領域の cell サイズを変更したい時に使用する。今回の場
合、cell を細かくする領域 fineReg を作成するので、fineReg の区分は「reg」で設定する。

48

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

できあがった csv ファイル（デフォルトの状態）

でき上がった csv ファイルを修正追記した場所は、以下の赤枠
blockMesh の設定は、以下。
blockMesh の cellSize：
overBlockSize：snappyHexMesh の設定は以下。
mesh：fineReg：
halfSp：inW：
outW：
sideW：

内のみ修正している。

0.004（4mm）で設定。
5 cell 分
モデル全体よりも 5 cell 分（20mm）大きな blockMesh
を作成する。この値はデフォルトのまま

locationInMesh の座標を入力。デフォルトのまま。
デフォルトの値は、モデル全体の中心座標が入る。
reg：領域定義のみ。featureEdge と base は 0.001（1mm）wall の設定。featureEdge と base は 0.001（1mm）patch の設定。featureEdge と base は 0.004（4mm）↑wall の設定。featureEdge と base は 0.004（4mm）以上でメッシュ作成の手続きが、できた事になる。
TreeFoam がこのデータを元に blockMeshDict と snappyHexMeshDict を作成する事になる。
尚、要素サイズの設定は、以下の様に設定する事ができるので、必要に応じて設定する。
領域の要素サイズ（体積）face の要素サイズ（面）edge の要素サイズ（線）base cellSize で設定
fine cellSize で設定
featureEdge cellSize で設定

49

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
最終的な csv ファイル

この部分を修正、追記

edge

領域

face

の要素サイズを設定する

7-1-5.

メッシュ作成メッシュ作成のための csv ファイルから blockMeshDict と snappyHexMeshDict を作成し、メッシュを作成する。これらは、case 内にある Dict ファイルを修正して、Dict ファイルを作り出す。
今回は、cavity の case をコピーしているので、blockMeshDict は存在するが、snappyHexMeshDict は存在しない。Dict ファイルが存在しない場合は、デフォルトの Dict ファイルをコピーしてくる。今回の場合、デフォルトの snappyHexMeshDict ファイルをコピーしてくる事になる。
（デフォルトの Dict ファイルは、$TreeFoam/data/OFDict/フォルダ内で使用している OpenFOAM のバージョンに合わせた Dict ファイルをコピーしてくる。）
csv データからメッシュを作成する為には、以下の様に「snappyHexMesh による mesh 作成」画面上で、ドロップダウンテキストボックス中に、作成した csv ファイル名が表示されている事を確認の上、「snappyDict 作成...」ボタンをクリックする。
この後、・snappyHexMeshDict が存在しないので、Dict ファイルをコピーする
・Dict ファイルが完成した。mesh を作成するか？
旨のメッセージがでるので全て「OK」、「はい」で進んでいくと、メッシュが完成する。
もし、blockMesh、snappyHexMesh 実行中にエラーが発生するようであれば、blockMeshDict,snappyHexMeshDict ファイルを削除して再度実行してみる。（削除により default の Dict ファイルに置き換えるため。）
この操作でメッシュを作成する場合、TreeFoam が 7-1-3 項で作成した特徴線抽出用の Dict ファイル50

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)（surfaceFeatureExtractDict）を使って特徴線を抽出した上でメッシュを作成する。ただし、漏れ無く特徴線が抽出できているかどうかを csv ファイル内容をから確認して、漏れがある場合は、その stl ファイルを追加した Dict ファイルを再作成し、特徴線を抽出してくれる。（7-1-3 項の処理を行わなくても、ここでTreeFoam が Dict ファイルを作成し、特徴線を抽出してくれる。）
また、メッシュ作成後に不要な patch の削除や boundary の整合性も取ってくれる為、直ぐに paraFoam を使って、メッシュの確認ができる。

「snappy 実行...」ボタンをクリックしても、blockMesh と snappyHexMesh を実行してメッシュを作成する事ができる。この場合は、予め 7-1-3 項で特徴線を抽出しておく必要がある。またこの方法は、boundaryField の整合を取ってくれないので、paraFoam でメッシュを確認する為には、引き続き「patch 名修正...」ボタンをクリックして boundary の整合性をとり、余分な patch 名削除を行っておく必要がある。
でき上がったメッシュを確認した結果が以下になる。予定通りのメッシュが切れている。
また、できあがったメッシュの評価は、上図の「checkMesh」ボタンをクリックする事で、checkMesh を実行し、メッシュの評価結果を出力させる事ができる。

51

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

7-1-6.

レイヤ作成

今のメッシュには、レイヤが付いていないので、レイヤを付けてみる。
レイヤを付ける為には、まず、controlDict 内の startFrom が「startTime」に設定されている事を確認する。
startFrom が、startTime になっていると、layer を付けるための処理を try & error で何回行っても、ベースメッシュからレイヤを付ける処理を行ってくれる。しかし、latestTime になっていた場合、
latestTime のメッシュがベースメッシュになるので、layer を付ける処理を複数回行うと、layer がどんどん追加されていく事になってしまうので、処理を行う度に latestTime を削除する操作が必要になってくる。

startFrom が「startTime」に設定されている事を確認後、「snappyHexMesh による mesh 作成」画面上で、「Dict 作成...」ボタンをクリックして、「layer の設定画面」を表示させる。

52

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

layer を追加する場所は、側面の壁 sideW と半球 halfSp の patch になるので、これらの patch を選択し、「選択>>」ボタンをクリックして、layer を設定する patch 名側に移動する。
この画面の layer 設定は、全 patch 名に適用する「全体の設定」項目と patch 名毎に設定する「patch 毎の設定」項目がある。この為、layer を設定する場合、「全体の設定」項目の設定と共に、patch 名を選択して「patch 毎の設定」項目を洩れなく設定する。
下図は、「sideW」の patch 名の layer 設定が表示されている。「halfSp」側も同じ設定としている。
尚、layer の厚さ設定は相対厚さ設定（ralativeSizes: true）としているので、両 patch とも cell サイズ
に対する相対寸法の設定になっている。
この後、「OK」ボタンをクリックして画面を閉じる。この操作で、snappyHexMeshDict が修正され、書き直された事になる。

53

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この設定で、レイヤを追加してみる。レイヤを追加するためには、「layer 作成」ボタンをクリックする。
これにより、snappyHexMesh を実行し、レイヤが追加される。

レイヤが追加されたメッシュが「0.005」フォルダ内にあるので、これを paraFoam で確認すると、半球部分
halfSp にうまくレイヤが追加されていない事がわかる。（部分的に cellSize が変更されているので、相対寸法では layer を付け難い。）
この様な場合は、レイヤの厚さを cell サイズに対する相対寸法で設定するのではなく、絶対寸法で設定するとうまく設定できる。
絶対寸法で設定する為に、相対厚さ設定（relativeSizes）を以下の様に「false」に設定する。

54

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
この後、設定したい patch 名を選択して各々設定し直す。それぞれ以下の様に設定した。
halfSpsideW

設定後、「OK」ボタンをクリックして、「layer の設定画面」を閉じると、snappyHexMeshDict が書き直される。最終的に layer 作成部分の snappyHexMeshDict は、以下の様に設定されている。
addLayersControls{
layers{halfSp{nSurfaceLayers 3;
finalLayerThickness 0.0002;
minThickness 0.0001;
expansionRatio 1.2;
}
sideW
{
nSurfaceLayers 3;
finalLayerThickness 0.0008;
minThickness 0.0005;
expansionRatio 1.2;}}
nSurfaceLayers 3;
relativeSizes false;
finalLayerThickness 0.3;
minThickness 0.25;
expansionRatio 1.2;
nGrow 0;featureAngle 90;
slipFeatureAngle 30;
nRelaxIter 5;
nSmoothSurfaceNormals 1;
nSmoothNormals 3;
55

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
nSmoothThickness 10;
maxFaceThicknessRatio 0.5;
maxThicknessToMedialRatio 0.3;
minMedianAxisAngle 90;
nBufferCellsNoExtrude 0;
nLayerIter 50;
nRelaxedIter 20;}

これで layer を作成した結果が下図になる。うまくレイヤが作成されている。

56

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
7-2.

snappyHexMesh による faceZone や cellZone を含むメッシュ作成の例

モデル内に baffle を追加したり、tutorials の damBreak の様に特定領域に値をセットしたい場合には、予め faceZone や cellZone を作っておくと、baffle の作成や setFields がしやすくなる。この様な faceZoneと cellZone を含むメッシュを snappyHexMesh を使って作成し、そのモデルで計算してみる。

7-2-1.

メッシュ作成用 case の作成

前項（7-1-1 項）と同様な方法で、cavity をコピーして case を作成する。case 名は「faceCellZoneMesh」とした。最終的に以下の様なフォルダ構成とする。
myTutorials
faceCellZoneMesh0constant
model
system

7-2-2.

メッシュ作成用 casestl ファイル保存用フォルダ

モデル形状

下図の様なモデルを考えてみる。
atmosW

waterHi

baffle1
waterLobaffle2

sideW
(3 面）

全体形状 :
baffle1:baffle2:waterLo:waterHi:

600x600x100 mm
高さ 500, 300x100 mm
高さ 400, 300x100 mm
300x500x100 mm
300x100x100 mm

57

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
stl ファイルは、以下を準備する。（今回の stl ファイルは、salome-Meca で作成している。）
stl ファイル
内容–---------------------------------------------------------------sideW.stl
wall:側面と底面の 3 面
atmosW.stl
patch:上面
frontBackW.stl
wall:表と裏面
baffle1.stl
faceZonebaffle2.stl
faceZonewaterLo.stl
cellZonewaterHi.stl
cellZone
これら全ての stl ファイルを faceCellZoneMesh/model 内に保存しておく。

7-2-3.

特徴線の抽出

前項（7-1-3 項）の方法で、stl ファイルのフォーマットと寸法を確認する。寸法が mm 単位の場合は、m 単位に変換しておく。
この後、全てのファイルを選択して、特徴線を抽出する。

7-2-4.

メッシュ作成用の csv ファイル作成

前項（7-1-4 項）の方法で、csv ファイルを作成する。以下の内容で作成した。デフォルトに対し修正した
箇所は、枠内のみ修正。
今回の場合、faceZone と cellZone を作成するが、これらは境界面が接しているので、stl ファイルの記述順に注意する。記述順を間違えると、境界面の face 面が正常に取得できなくなる。
記述順は、cellZonefaceZoneの様に、cellZone の後に faceZone を記述すると、これらの境界面が接していても、正常に faceZone が取得できる。下図は、stl のデータを B 列でソートして cellZone、faceZone の順番に設定し直している。

58

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

7-2-5.

メッシュ作成前項（7-1-5 項）の方法で、メッシュを作成する。
下図ができ上がったメッシュになる。cellZone や faceZone が取得できている。
meshParts

全体

cellZonefaceZonebaffle1

waterHi

baffle2waterLo

7-2-6.

解析用 case の作成

今回のメッシュは、tutorials の damBreak を想定したものである為、case の内容（field や properties
等）を damBreak の内容に揃える必要がある。この為に、6-2 項で実行した damBreak の case をコピーし、新しく「damBreakZone」の名称に変え、この case 内のメッシュを今回作成したメッシュに入れ替える事にする。
下図は、damBreak の case をコピーして case 名を「damBreakZone」に変更し、解析 case（ 付きフォルダ）として設定した状態。

59

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

今回作成した「faceCellZoneMesh」内のメッシュを「damBreakZone」へコピーして入れ替えるが、この方法は、以下の方法による。
TreeFoam 上の ボタンをクリックして、現れた画面上で「mesh の入れ替え」タグを選択する。メッシュのコピー元は、「faceCellZoneMesh」になるので、「case 変更（元）」ボタンをクリックして、「faceCellZoneMesh」を選択し、「決定」ボタンをクリックする。

選択する

60

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
以上の操作で、コピー元の case 名「faceCellZoneMesh」が下図の様に取得できた事になる。
この後、コピー元の「constant/polyMesh」とコピー先の「constant」を選択し、「コピー開始」ボタンをクリックする事で、メッシュが入れ替わる。

メッシュを入れ替える為、internalField と baoundaryField の内容は、全てクリアされる。

7-2-7.

setFields で値をセット「alpha.water」フィールドに setFields で値をセットする為、TreeFoam 上のボタンをクリックする。

setFields は、cellSet の領域に値をセットするが、今は waterLo と waterHi が cellZone の状態のため、この領域を cellSet として新たに作り出す必要がある。これを作り出す為に、「field へのデータセット」画
面上の「cellSet 作成」ボタンをクリックする。
「mesh 抽出」画面（topoSetEditor）が現れるので、この画面上で＜Action＞＜Source＞＜Result＞

newcellZonewaterHi
waterLosets

新しく object を作り出すコマンド
cellZone 内のwaterHi と
waterLo を選択
複数の source から複数の set（cellSet）を作り出すを選択して、「code 出力」ボタンをクリックする。この操作により、画面下部のテキストボックス中に、この処理を行うための topoSet のコマンド群が作成される。
この後、「ｸﾘｱ・追加・実行」ボタンをクリックする事で、topoSetDict の内容をクリア、作成した topoSet
コマンドを Dict に追加、topoSet を実行し、最終的に選択した cellZone から cellSet を作り出す。
61

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
最後に「閉じる」ボタンをクリックして、「mesh 抽出」画面を閉じ、「field にデータセット」画面に戻る。

62

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)「field へのデータセット」画面に戻ると、cellSets 内に「waterHi」と「waterLo」が取得できているので、これらと、値をセットする field（alpha.water）を選択し、「setFieldsDict 作成...」ボタンをクリックする。

現れた画面上には、現在設定されている setFieldsDict の内容が表示されている。（damBreak で使用してい63

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
る setFieldsDict は、box を使ってデータをセットしているので、(box)行が表示されている。）
この画面中で、まず、不要な(box)行を削除する。削除方法は、削除したい行を選択して「行(cellSet)削除」ボタンをクリックする事で行が削除できる。削除後、alpha.water 列中の waterHi と waterLo に「1」を入力する。最終的に以下になる。
データ入力後、「Dict 保存」ボタンをクリックすると、この内容で setFieldsDict が作成される。
この後、「閉じる」ボタンで画面を閉じておく。

以下が、でき上がった setFieldsDict になる。
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //defaultFieldValues(
volScalarFieldValue alpha.water 0);
regions(
cellToCell{
set waterHi;
fieldValues(
volScalarFieldValue alpha.water 1);}
cellToCell
64TreeFoam 操作マニュアル （TreeFoam-2.36-151212){

set waterLo;
fieldValues(
volScalarFieldValue alpha.water 1);});// ************************************************************************* //setFieldsDict ができ上がったので、画面上の「setFields 実行...」ボタンをクリックして、setFields コ
マンドを実行する。

データセット状況を paraFoam で確認すると、下図の様に、alpha.water フィールドに値がうまく設定できている。（waterHi、waterLo 領域に「1」がセットされている。）
alpha.water

65TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
7-2-8.

データセット状態の確認

今の状態は、baffle（内部パッチ）が設定されていない為、tutorials の damBreak と形状は異なるが同じ状態。ここで solver（interFoam）を実行してみる。
実行にあたっては、境界条件が設定されていないので、これを設定する。
境界条件は、tutorials の「damBreak」と今回の「damBreakZone」の内容 2 種類を gridEditor で表示させ、お互いに copy & paste で貼り付ければ済む。下図参照。
damBreak 側

この部分（壁の境界条件）を選択し、コピーする。
（ポップアップメニューから「 cell コピー」を選択）

damBreakZone 側

この部分を選択し、貼り付ける。
（ポップアップメニューから「 cell 貼り付け」を選択）

66

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
最終的に以下の状態（frontBackW は、「slip」に設定している。）になる。

この条件で計算させた結果が以下になる。baffle が無いため、tutorials の damBreak とほぼ同じ結果。
0.5s 後1.0s 後67

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
7-2-9.

baffle（内部パッチ）作成

このモデルには、faceZone を作成しているので、これを使って、baffle（内部パッチ）を作成してみる。
この為には、TreeFoam 上の ボタンをクリックして、「メッシュ操作」画面を表示させ、「内部 patch 作
成...」ボタンをクリックして、「内部 patch の作成」画面を表示させる。この画面上で、内部 patch を作成する事になる。

内部パッチ（baffle）は、上図「内部 patch の作成」画面上から、作成したい faceZone を指定して baffleを作り出す事になる。今回は、faceZone「baffle1」「baffle2」を使って、baffle「baffle1」「baffle2」を作成する。

68TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
その作成方法は、下図のように、faceZone「baffle1」を選択する。この選択により、patch 名の master,slave に、各々「baffle1_master」「baffle1_slave」が入力される。

今回の場合、baffle を作成するので、以下の様に、master、slave とも、同じ名前「baffle1」に変更する。
変更後、「patch 作成」ボタンをクリックして、名前リストに追加する。
名前リストは、下表の意味を持っている。
区分
faceZone 名
master 名
slave 名--------------------------------------------patch baffle1
baffle1baffle169TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

同様に、baffle2 の方も操作し、以下の様な名前リストを作成する。
この後、「Dict 作成」ボタンをクリックして createBafflesDict を作成し、「Dict 実行」ボタンをクリッ
クして createBaffle コマンドを実行し、baffle1 と baffle2 の内部パッチを作成する。

尚、内部パッチが作成される case は、現在の解析 case 内に新しく「subCase」フォルダが作成され、このcase 内に内部パッチを追加したメッシュが作られることになる。この為、以後の操作は、解析 case（マーク付き）を「subCase」に変更して、操作する。

70

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
また、解析 case 名が「subCase」で内部パッチを作成する場合は、subCase フォルダは作成されず、そのcase 内のメッシュに内部パッチが追加される。
尚、ここで作成された createBafflesDict ファイルは、以下の内容で作成されている。「Dict 実行」ボタン
をクリックする前に、この内容を修正して「Dict 実行」ボタンをクリックすると、修正した
createBafflesDict の内容で、baffle を作成する事ができる。
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //// Whether to convert internal faces only (so leave boundary faces intact).
// This is only relevant if your face selection type can pick up boundary// faces.
internalFacesOnly true;// Baffles to create.
baffles{
baffle1//baffles is created{//- Use predefined faceZone to select faces and orientation.
type
faceZone;zoneName
baffle1;
patches{master{//- Master side patch
namebaffle1;
type
patch;}
slave{//- Slave side patch
namebaffle1;
type
patch;}}}
baffle2//baffles is created{//- Use predefined faceZone to select faces and orientation.
type
faceZone;zoneName
baffle2;
patches{master{//- Master side patch
namebaffle2;
type
patch;}
slave{//- Slave side patch
namebaffle2;71TreeFoam 操作マニュアル （TreeFoam-2.36-151212)}

type

patch;}}}//************************************************************************* //でき上がったメッシュを paraFoam で確認すると、以下になり、内部パッチが追加されている事がわかる。

尚、今回の様な単純な baffle のみ追加するのであれば、7-2-4 項で作成した csv ファイル中で baffle1 と72

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
baffle2 の区分を、faceZone ではなく、patch に設定することで、内部パッチが作成できる。しかし、cyclic や mappedPatch の様に表裏（master、slave）のパッチを作る必要がある場合は、今回の方法で作成する事になる。
この case を実行してみる。
内部パッチを追加しても、既に設定されている internalField や boundaryField は、そのまま残っているが、新たに作成した内部パッチ（baffle1、baffle2）には、境界条件が設定されていないので、これを設定する。
baffle1、baffle2 とも壁の為、sideW と同じ設定にすれば済む。
TreeFoam 上のボタンをクリックして、grodEditor を起動して、sideW の境界条件を選択し、cell コピー、
cell 貼り付けする事で、同じ条件が設定できる。（下図参照）

境界条件が設定できたので、計算を開始する。下図が計算させた結果になる。baffle を追加した事によって、流れが変わっている。
1.0s 後0.5s 後73

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

7-3.

cfMesh による通常メッシュの作成

ここで、cfMesh を使って TreeFoam 上でメッシュを作成してみる。
cfMesh は、faceZone や cellZone を作る事ができないが、通常のメッシュを作る場合は、snappyHexMesh に比べて容易にメッシュを作る事ができるメリットがある。
TreeFoam 上で cfMesh を作成する場合、snappyHexMesh の場合と同様に、csv ファイルを予め作成しておき、これを元に TreeFoam が特徴線の抽出や meshDict を作成し、メッシュを作成する。

7-3-1.

case の作成

sanappyHexMesh で作成した通常メッシュと比較する為に、snappyHexMesh で作成した case「normalMesh」をコピーして、新しい case「normalMesh_cfMesh」を作成する。（7-1 項と同様な方法で新しい case を作成する。）
フォルダ構成は、最終的に以下の状態になる。noamalMesh_cfMesh が追加され、このフォルダ内に「model」フォルダが追加されている。

7-3-2.

レイヤ付きメッシュ作成用の csv ファイル作成

まず、cfMesh を使って stl ファイルからメッシュを作成する時の手順を確認すると、以下の手順で作成する。
1)

stl ファイルを準備

74

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
patch 毎の stl ファイルを準備する。
部分的にメッシュサイズを変更する場合は、その部分の形状の stl ファイルを準備する。
ここまでは、snappyHexMesh の場合と同じ。
2)

patch 用 stl ファイルの結合
patch 用に作成した全ての stl ファイルを 1 ヶの stl ファイルに結合する。

3)

特徴線の抽出と cfMesh 読み込み用の fms ファイルの作成
stl ファイルから特徴線を抽出するコマンド（cfMesh のユーティリティ）を実行することで、
cfMesh が読み込む形状データ（fms ファイル）も同時に作成できる。以下の様なコマンドを実行することで、特徴線を抽出した fms ファイルが作成できる。
$ surfaceFeatureEdges -angle 30 assy.stl model.fms
上記コマンドは、assy.stl ファイルから featureAngle 30 で特徴線を抽出し、その結果をmodel.fms で書き込む事になる。

4)

meshDict 作成
surfaceFile の設定と各 patch の cellSize の設定、部分的に cellSize を設定する場合は、そのcellSize と範囲を示す stl ファイルを設定して、meshDict ファイルを作成する。

5)

メッシュ作成meshDict が完成した後は、以下のコマンドを実行してメッシュを作成する。
$ cartesianMesh

これらの操作が、TreeFoam 上で楽に行える様にしてある。stl ファイルを準備した後は、2)〜4)までの手続
きを csv ファイルで指示し、後は、その指示に従って、stl ファイル結合、特徴線抽出、meshDict を作成する。meshDict 完成後は、「cartesianMesh」コマンドを実行してメッシュを作成する事になる。
以下に、具体的に説明する。
まず、TreeFoam 上で、case「normalMesh_cfMesh」が解析 case として設定されている事を確認後、TreeFoam
上の ボタンをクリックして、「メッシュ操作」画面を表示して、「cfMesh による mesh 作成...」ボタン
をクリックする。
これによって、「cfMesh による mesh 作成」画面が表示される。
メッシュ作成は、この画面上をを操作して、mesh を作成する事になる。

75

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

今回の場合、stl ファイルは、既に「model」フォルダ内に準備されている。また、この stl ファイルは、
snappyHexMesh で使用した stl ファイルそのものである為、これらファルの編集の必要はない。
（新規に stl ファイルを作成した場合は、「stl チェック...」ボタンをクリックして、stl ファイルの内容を確認しておくが、ここでは省略する。）
meshDict 作成用の csv ファイルを作成する。
下図の様に、cfMesh 作成画面上の「csv 作成...」ボタンをクリックして、現れた画面上でファイル名を入力して、「OK」ボタンをクリックする。

76

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

これにより、office が起動し、以下の画面が現れる。この内容は、default の内容が既にセットされた状態で表示されている。

この設定内容は、全体に対する設定と、stl ファイルに対する設定に分かれている。
モデル全体に対する設定は以下の 3 項目になる。
77

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
maxCellSize
minCellSize
featureAngle:モデル全体の最大 cellSize
default の設定値は、モデル全体を 30 分割した時の値。
:モデル全体の最小 cellSize
省略可能:特徴線を抽出する時の角度
defailt の設定は、30°

stl ファイルの設定は、以下の区分を準備している。
区分
内容---------------------------------------------------------------------------------patch:patchType を patch として設定
wall:patchType を wall として設定
empty:patchType を empty として設定
symmetry:patchType を symmetry として設定
symmetryPlane:patchType を symmetryPlane として設定
regBox:直方体領域（stl ファイルで指定）の cellSize を設定する時に使用
regSph:球領域（stl ファイルで指定）の cellSize を設定する時に使用
face:面領域（stl ファイルで指定）の cellSize を設定する時に使用
また、stl ファイルの設定には、区分の他に cellSize、レイヤの設定ができる。
今回の場合、csv ファイルは、下図の様に設定している。default の内容にに対し、下図の赤枠正している。

この内容は、モデル全体の cellSize を 0.004（4mm）で設定。
78

内を修TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
準備した stl ファイルの cellSize は、fineReg、halfSp を 0.001（1mm）、それ以外を 0.004（4mm）で設定。
また、patchType が wall（halfSp、sideW）については、レイヤを設定している。
レイヤの設定は、いずれも 3 層でレイヤの拡大率を 1.2 で設定している。maxThickness の項目は、レイヤの第 1 層の最大厚さを指定する為の項目で、今回は空白のため、この設定は使用していない。
尚 nLayer の内容が「空白」又は「0」の場合は、レイヤを作成しない設定。
これら設定は、snappyHexMesh で作成したメッシュと同じ設定にしている。

7-3-3.

メッシュ作成前項で設定した csv ファイルから、meshDict を作成し、これを元にメッシュを作成する。
meshDict の作成は、既に system フォルダ内にある meshDict を修正して、新しい meshDict を作成する。この為、csv ファイルで設定できない様な細かい設定内容は、修正されずそのまま残ることになる。
（今回の様に、system フォルダ内に meshDict が存在しない場合は、default で設定されている meshDict をコピーして作成する。）
meshDict を作成する為には、下図の「cfMesh による mesh 作成」画面上のドロップダウンテキストボックス
内に前項で作成した csv ファイル名が表示（選択）されている事を確認した上で、「mesh 作成...」ボタン
をクリックする。
以下の確認画面が出てくるが、これに「OK」と答えていくと、最終的に meshDict ができあがり、これに基づいたメッシュを作成する事ができる。

また、この画面上の「meshDict 編集」ボタンで meshDict ファイルを直接 editor で編集できる。
「cfMesh 実行...」ボタンで「cartesianMesh」コマンドを実行し、メッシュを作成する事ができる。しかし、このボタンで mesh を作成した場合、できあがった mesh と field との boundary の整合が取れていないので、この状態では paraFoam で形状確認ができないが、「boundary 整合...」ボタンで、boundary の整合を取ることができ、paraFoam で形状確認ができる様になる。
今回の csv ファイルから作り出した meshDict は、以下の内容になっている。レイヤを追加しているにも関
わらず、snappyHexMeshDict に比べて非常にシンプルに記述できている。
79

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)--------------------meshDict の内容-------------------------------------------// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //surfaceFile "model/model.fms";
maxCellSize 0.004;//cellSize of surfaces
surfaceMeshRefinement{}//cellSize of Objects
objectRefinements{
fineReg{cellSize 0.001;
centre(0.06 0.0 0.0);
lengthX 0.08;
lengthY 0.02;
lengthZ 0.02;
type
box;
}
}
//cellSize of patches
localRefinement{
halfSp{cellSize 0.001;}
inW{
cellSize 0.004;}
outW{
cellSize 0.004;
}
sideW
{
cellSize 0.004;}}//set patchName and patchType
renameBoundary{
newPatchNames{
halfSp{
newName halfSp;
type
wall;
}
inW
{
80

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
newName inW;
type
patch;}
outW{
newName outW;
type
patch;}
sideW{
newName sideW;
type
wall;
}
}
}
//set layersboundaryLayers{
patchBoundaryLayers{
halfSp{nLayers 3;
thicknessRatio 1.2;
}
sideW
{
nLayers 3;
thicknessRatio 1.2;}}}// ************************************************************************* //上記 meshDict を使って、作成されたメッシュを確認する。このメッシュは、既に boundary の整合がとれているので、直ぐに paraFoam でメッシュの状況を確認できる。以下は、今回の結果と snappyHexMesh を比較した結果になる。
snappyHexMesh によるメッシュ

cfMesh によるメッシュ

81TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

できあがったメッシュを snappyHexMesh と比較すると、fineReg 内のメッシュは、cfMesh の方が細かくなっている。半球の halfSp の直径は 10mm の為、1mm でメッシュを切ると、10 分割されるはずだが、cfMesh の方
は、倍の 20 分割されている。この状態は、モデルの大きさを 1000 倍に拡大してメッシュを切り直しても同じ状態。この為、メッシュサイズに関しては、指定した通りのメッシュサイズが必ずしも実現できていないので、メッシュ作成後、望みのメッシュサイズになっているか確認する事が必要か。
部分的にメッシュサイズを変更する為に、上記は、区分「regBox」を使って変更した。
regBox は、指定された stl ファイルから各方向の最大最小値を算出し、これらの値から中心座標と各方向の長さ求め、直方体の領域を決めている。
領域設定の方法として、区分「regBox」の他に、区分「regSph」と「face」準備しているので、これらを指定して確認してみる。

82

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)＜regSph を指定＞
stl ファイル「fineReg」は直方体だが、これを区分「regSph」として設定する。regSph は、球領域の設定になる為、球の中心座標と半径を設定するが、regBox と同様に、指定された stl 形状から各方向の最大最小値を読み込み、これら値から球の中心座標を求めている。半径は、各方向の最大最小値から各方向の長さを求め、この平均値から半径を算出して、球領域を設定している。以下の csv ファイルからメッシュを作成したが、設定通り球領域のメッシュが細かくなっている。

＜face＞
stl ファイル「fineReg」を区分「face」として設定する。区分「face」は、stl 形状の面の領域を指定しているので、stl ファイルの形状を忠実に再現して、メッシュを細分化してくれる。
以下の csv ファイルからメッシュを作成した結果は、設定通り fineReg 領域の面が細かくなっている。

今回は、レイヤの設定として「maxThickness」（第 1 層の最大厚さ）の項目を指定せずにレイヤを設定したが、これを指定してレイヤを作成してみる。以下が maxThickness の設定有無でレイヤを比較した結果になる。

83TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

maxThickness

設定なし

maxThickness

0.0005

レイヤの出来映えは、maxThickness 0.0005 の方が、レイヤの厚さが抑えられ、均一な厚さに設定されている事がわかる。

84TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
7-4.

salome-Meca で作成したメッシュを FOAM 形式に変換する例

salome-Meca で作成したメッシュを TreeFoam 上で FOAM 形式に変換できる様にしている。
変換方法は、salome-Meca で作成したメッシュを unv 形式で保存し、このメッシュを FOAM 形式に変換する。
メッシュ変換に当たって、通常「ideasUnvToFoam」コマンドを使って変換するが、この方法は、OpenFOAMの古いバージョンの場合、face のグループ名は変換してくれるが、volume のグループ名は変換できなかった。この為、face や volume のグループ名ごと変換できるように、新たに unv2gmshToFoam コマンドを作成し、これができるようにしている。このコマンドは、unv 形式→gmsh 形式→FOAM 形式でメッシュ変換している。
また、unv 形式の mesh 内で内部の face や volume をグループ化しておくと、変換時にこれらが faceZone や
cellZone として定義され、同時に faceSet や cellSet も作成してくれる。
（現在のバージョン：OpenFOAM-2.3.0 以降では、ideasUnvToFoam を使ってもうまく変換し、faceZone や
cellZone を作成してくれるが、faceSet や cellSet は作成しない。）

7-4-1.

case の作成

モデル形状を faceZone や cellZone を含むモデルとする為、7-2 項で作成したモデルを使うことにする。この為、TreeFoam 上で前項の case「faceCellZoneMesh」をコピー、case 貼り付けして、新たな「faceCellZoneSalomeMesh」を作成する。最終的に以下の様なフォルダ構成とする。
myTutorials
faceCellZoneSalomeMesh0constant
model
system

7-4-2.

メッシュ作成用 casesalome が作成したメッシュの保存先

salome-Meca によるメッシュ作成

このモデルは、元々 salome-Meca で作成しているので、salome-Meca 上でメッシュを作成する。
salome-Meca の起動は、TreeFoam 上から、 ボタンをクリックする事で、起動できる。
（2-3 項の configTreeFoam で salomeMeca の項目を設定しておく必要がある。）

85

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

起動後、salome-Meca 上で、メッシュを切る。
メッシュは、Netgen-1D-2D-3D でメッシュサイズ最大 20mm、最小 10mm で作成している。
このメッシュを face と volume でグループ分けし、7-2 項と同じ名称にしている。
下図参照。
グループ名

全体メッシュ

face グループ

volume グループ
waterHi
baffle1

waterLobaffle286TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
でき上がった Mesh_1 を、faceCellZoneSalomeMesh/model フォルダ内に、ファイル名を「mesh.unv」として保存する。（メッシュ変換する file 名は、「mesh.unv」に固定しているので、unv 形式の file 名は必ず「mesh.unv」にして保存する。）
この後、TreeFoam 上の ボタンをクリックして、「メッシュ操作」画面を表示させ、「unv2gmshToFoam...
(face,volume をグループ化）」ボタンをクリックする。
変換が終了すると、「モデルのスケール変更」画面が現れるので、画面上に表示されている「モデルの大きさ」を確認し、倍率を入力する。今回は、モデルが mm 単位で作成されている為、倍率を「0.001」に設定した。

このメッシュ変換は、変換と同時に boundaryField の整合も行っているので、変換後、直ぐに paraFoam でメッシュが確認できる。
でき上がった FOAM 形式のメッシュを paraFoam で確認すると、以下になる。
87

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
paraFoam からみた「Mesh Parts」にも patch、cellZone、faceZone が確認できる。各々のメッシュを確認した結果、その形状も確認できる。

全体メッシュ

cellZonefaceZonewaterHi

baffle1baffle2waterLo尚、ideasUnvToFoam コマンドでファイル変換（「ideasUnvToFoam...(face のみグループ化)」ボタンをクリック）した場合、volume グループ（cellZone）を作っている場合は、エラーが発生していたが、OpenFOAM-2.3.0 以降では、うまく変換してくれた。OpenFOAM の最新版を使う限りは、どちらでも構わない。

88TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
8.

TreeFoam 内の主なアプリケーション

8-1.

gridEditor

境界条件（boundary の patch 名と patchType、各 field の internalField や boundaryField）がを表形式で編集できる GUI ツールで以下の特徴がある。
・表形式の為、セル内のデータを他のセルに copy & paste ができる。また、copy & paste は、
gridEditor を複数起動して、この間でも copy & paste が可能になっている。
・field に欠陥（boundary の整合が取れていない）があっても、読み込むことができ、それを修復（整合をとる）する事ができる。
・field の書式が ascii、binary でも、圧縮形式でも、その field データを読み込んで編集でき、同じ形式で保存が可能になっている。
・OpenFOAM-2.1 以降 field 内で「".*"」の様な wildCard や「#include」文が使え、OpenFOAM-2.2 以降
では「$:wall.U」の様な変数や「inGroups(wall)」の様な patchGroup が使える様になっているがgridEditor でもこれらが扱える様にしている。また、「#includeEtc」文も読むことができる。

8-1-1.

起動画面

gridEditor が起動すると、以下の画面が表示される。以下の例は、tutorials の cavity の境界条件を表示させたものになる。この様に境界条件（boundary の patch 名と patchType、各 field の internalField とboundaryField）の内容が一望できる。また、下図の赤枠
内は編集ができる。

field 名InternalField の内容

patch 名patchTypeboundaryField の内容

field は、各 timeFolder 内に存在しており、gridEditor が表示している field 内容（internalField、
boundaryField の内容）の読み込み場所は、gridEditor のタイトルバー内に表示されている。今回の場合、「cavity/0/.」から読み込んでいる。読み込む timeFolder を変更する場合は、gridEditor のツールバー内の ボタンをクリックし、timeFolder を指定して読み込む事になる。
boundary ファイルも constant フォルダだけでなく、各 timeFolder 内に存在する場合もある。gridEditor
89

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
が表示している boundary の読み込み場所は、field を読み込む timeFolder から constant までさかのぼって
polyMesh/boundary を検索し、その timeFolder における最新の boundary を読み込む。今回の読み込み場所
は、patchType の列ラベルに表示されており「constant/.」から読み込んでいる。

8-1-2.

gridEditor の起動と終了

起動方法は、以下の 3 種類で起動できる。

1)

TreeFoam 上のメニューバー、ツールバーから起動（

ボタンで起動）

この場合は、TreeFoam 上で解析 case として設定されている case の境界条件を読み取り、gridEditor が起動する。
各 field の internalField と boundaryField の内容を読み取る時、controlDict 内の startFrom を確認し、その時間（firstTime、startTime、latestTime）に応じた timeFolder 内にある field から internalFieldと boundaryField の内容を読み取り、表示する。
boundary ファイルの読み込みも同様に、controlDict 内の startFrom を確認し、その時間（firstTime、
startTime、latestTime）から constant までさかのぼって、polyMesh/boundary を検索して最新の boundaryを読み込んでいる。

2)

TreeFoam 上のポップアップメニューから起動（「gridEditor 起動...」を選択して起動）

この場合は、選択している case の境界条件を読み取るので、表示させたい case が自由に選択できる。
ポップアップメニューの「gridEditor 起動...」を選択すると、読み込む timeFolder をきいてくるので、これを指定して、境界条件（各 field や boundary）を読み込む事になる。
boundary の読み込みは、読み込む timeFolder から constant までさかのぼって、polyMesh/boundary を検索して、最新の boundary を読み込む。

3)

FOAM 端末から起動

TreeFoam 上から起動した FOAM 端末から、以下を入力しても gridEditor を起動させる事ができる。
$ gridEditor
この場合、カレントディレクトリの case の境界条件を読み込む事になるが、この場合も読み込む
timeFolder をきいてくるので、以後の処理は、2)項と同様に処理して表示する。

gridEditor の終了方法は、ツールバー上の ボタンをクリックして終了させる。window 上部の ボタンで終了させない。 ボタンで終了させると、終了処理を行った上で終了するが、 ボタンで直接 window を閉
じると、終了処理を行わず終了する為。
複数の gridEditor を起動して、これらの間で copy & paste ができる様にする為には、gridEditor が何個起動しているか、gridEditor が表示している field と polyMesh の directory はどこかを把握する必要がある
ので、gridEditor が起動する度に No を振り、対応する field と polyMesh の directory を保存する様にしている。終了する時はその No を削除するので、終了処理が必要になる。
ボタンで終了処理を行わせる事ができるが、もし、終了処理中でエラーが発生した場合、gridEditor を閉じる事ができなる為、 ボタンの場合、終了処理を行なっていない。

90

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
8-1-3.

メニュー構造と内容

gridEditor は、メニューバー、ツールバー、ポップアップメニュー、ダブルクリック操作、ショートカッ
トキーを備えている。
ダブルクリック操作は、マウスカーソルをその場所に合わせると、toolTip が表示され、ここにダブルクリックした時の処理内容が表示される。
ショートカットキーは、プルダウンメニューやポップアップメニュー表示内に、ショートカットキーが可能
なメニューについて、その項目の右端に「ctrl-C」の様なショートカットキーが表示される。
gridEditor の基本的操作としては、ポップアップメニューを充実させているので、ポップアップメニューを多用した方がスムーズに操作できる。

8-1-3-1.

メニューバーとツールバー

下図の様なメニューバーとツールバーを備えている。
メニューバー
ツールバー

これらの項目と内容は以下。

1)

ファイル（F)開く（O)現在の case 内のフォルダ（timeFolder や regionFolder）を指定して、baoundary と field
データを読み込み、新しい gridEditor を起動する。
保存（S)
表示されている cell のデータ（boundary と field データ）を保存する。
CSV 保存（V)
表示されている gridEditor のイメージ（ラベル名と全ての cell データ）を csv 形式で保存する。
再読み込み（R)boundary と各 field データを再読み込みし、再表示する。cell データを初期化できる。
閉じる（Q）
gridEditor を終了する。
終了時は、このボタンをクリックして終了させる。

2)

編集（E）
patch 名変更
91

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
選択した行の patch 名を変更する。
patch 削除
選択した空パッチ（face が「0」のパッチ）を削除する。選択した行が空パッチでない場合
は、削除できない。
cell コピー（C） ctrl-C
選択した cell データを TreeFoam の clipBoard にコピーする。
使用頻度が高いのでショートカットキーを割り当てている。
cell 貼り付け（P） ctrl-V
TreeFoam の clipBoard にコピーされた cell データを cell に貼り付ける。
使用頻度が高いのでショートカットキーを割り当てている。
cell 内容を Editor で編集
cell には、決められた行数しか表示できていない。全て表示しきれていない cell データの場合、データの最後が「...」で終わっている。
この様な cell データの全てを確認したい、編集したい場合には、このメニューを選択する。
cell に表示する行数は、「cell 内の表示行数・データ数変更」メニューで決定される。

3)

表示（V）
全表示/非表示 field の切り替え（A）
非表示設定した field を隠す、または表示する（全表示）の切り替えを行う。非表示の場合
は、ラベルフォントの色が濃い青に変わるので、今の画面が非表示なのか全表示なのかは、判断できる。
選択した field を非表示（H）
選択した field を非表示設定にする。
field の再表示、表示順変更（R）
非表示設定した field を表示設定に変える、また field の表示順を変更する。（任意の順番で表示させることができる。）
ここの設定は、firstTime のフォルダ内に「.displayField」の隠しファイルが作成され、ここにその設定が保存されるので、次回起動時には、その設定を読み込み同じ設定で起動する。
cell 内の表示行数・データ数変更
ここで、cell 内に表示する行数を指定する。
計算結果が入っている timeFolder を指定して gridEditor を起動した時、internalField やbaoundaryField には、nonuniform 形式（List 形式）のデータが入っており、データの行数
は膨大な量になる。この為、全てのデータが cell 内に表示できないので、ここで表示行数を設定し、その行数のみ表示させる設定としている。
また、読み込む field が binary 形式の場合は、そのデータを ascii 変換して表示させているが、binary 形式はファイルサイズが小さくなるので、大規模モデルの場合が多く、データ量も多くなる。（圧縮ファイルも同様。）この為、binary 形式のデータ全てを ascii に変換せずに、指定したデータ数（行数）のみ変換するようにしている。この変換するデー
タ数をここで指定する。
ascii でも同様な処理を行い、指定した行数以上の余分なデータは取り込まない様にしている。これにより、gridEditor が扱うデータ数が減少するので、処理速度が早く、軽快に動作する。ここで指定するデータ数の値は、cell で表示させる行数以上のデータを指定しておく。

92

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
空白 cell に zeroGradient をセット
boundary の整合が取れていない field ファイルを gridEditor で読み込んだ場合、必要な
patch 名のデータが存在しない（例：他の case から field をコピーした場合、mesh を入れ替えた場合に相当）為、該当する cell は「空白」で表示される。
この様な場合、このメニューの実行により、全ての空白 cell を boundary の patchType に応じて以下の様に cell 内容を設定する為、boundary の整合を図る事ができる。
boundary の patchTypecell 内容--------------------------------------------------empty
type empty;
symmetry
type symmetry;symmetryPlane
type symmetryPlane;
cyclictype cyclic;
cyclicAMI
type cyclicAMI;
cyclicACMI
type cyclicACMI;
cyclicSlip
type cyclicSlip;wedge
type wedge;
その他
type zeroGradient;internalField のクリア選択した internalField の内容をクリアする。
指定した internalField が「uniform」形式の場合は、クリアせずそのまま。
「nonuniform」形式（List 形式）の場合、データが scalar、vector、symmTensor、tensor
等のデータタイプを判断して、値を「0」設定にクリアする。

8-1-3-2.

ポップアップメニュー

右クリックで表示されるポップアップメニューは、右クリックする場所によって、メニューが異なる。場所
ごとのメニュー内容は以下。
一部のメニュー項目は、メニューバーやツールバーのメニュー項目と同じ項目が存在する。

列名を右クリックcell 内を右クリック

行名を右クリック93

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

1)cell 内のポップアップメニュー
cell コピー ctrl-C
選択した cell データを TreeFoam の clipBoard にコピーする。
使用頻度が高いのでショートカットキーを割り当てている。
cell 貼り付け ctrl-V
TreeFoam の clipBoard にコピーされた cell データを cell に貼り付ける。
使用頻度が高いのでショートカットキーを割り当てている。
cell 内容を Editor で編集
cell には、決められた行数しか表示できていない。全て表示しきれていない cell データの場合、データの最後が「...」で終わっている。
この様な cell データの全てを確認したい、編集したい場合には、このメニューを選択する。
cell に表示する行数は、「cell 内の表示行数・データ数変更」メニューで決定される。
internalField のクリア選択した internalField の内容をクリアする。
指定した internalField が「uniform」形式の場合は、クリアせずそのまま。
「nonuniform」形式（List 形式）の場合、データが scalar、vector、symmTensor、tensor
等のデータタイプを判断して、値を「0」設定にクリアする。
空白 cell に zeroGradient をセット
boundary の整合が取れていない field ファイルを gridEditor で読み込んだ場合、必要な
patch 名のデータが存在しない（例：他の case から field をコピーした場合、mesh を入れ替えた場合に相当）為、該当する cell は「空白」で表示される。
この様な場合、このメニューの実行により、全ての空白 cell を boundary の patchType に応じて以下の様に cell 内容を設定する為、boundary の整合を図る事ができる。
boundary の patchTypecell 内容--------------------------------------------------empty
type empty;
symmetry
type symmetry;symmetryPlane
type symmetryPlane;
cyclictype cyclic;
cyclicAMI
type cyclicAMI;
cyclicACMI
type cyclicACMI;
cyclicSlip
type cyclicSlip;wedge
type wedge;
その他
type zeroGradient;cell 内容をクリア（空白 cell 作成）
選択した cell 内容をクリア（空白 cell で埋める）する。このコマンドは、上記の「空白cell に zeroGradient をセット」コマンドと併用すると、cell 内容を default の状態に設定することができる。
「delete」キーでも同様に空白 cell を作成する事ができる。
全表示/非表示 field の切り替え
非表示設定した field を隠す、または表示する（全表示）の切り替えを行う。非表示の場合
は、ラベルフォントの色が濃い青に変わるので、今の画面が非表示なのか全表示なのかは、判断できる。
選択した field を非表示
94

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
選択した field を非表示設定にする。
field の表示順変更
非表示設定した field を表示設定に変える、また field の表示順を変更する。（任意の順番で表示させることができる。）
ここの設定は、firstTime のフォルダ内に「.displayField」の隠しファイルが作成され、ここにその設定が保存されるので、次回起動時には、その設定を読み込み同じ設定で起動する。
cell 内の表示行数・データ数変更
ここで、cell 内に表示する行数を指定する。
計算結果が入っている timeFolder を指定して gridEditor を起動した時、internalField やbaoundaryField には、nonuniform 形式（List 形式）のデータが入っており、データの行数
は膨大な量になる。この為、全てのデータが cell 内に表示できないので、ここで表示行数を設定し、その行数のみ表示させる設定としている。
また、読み込む field が binary 形式の場合は、そのデータを ascii 変換して表示させているが、binary 形式はファイルサイズが小さくなるので、大規模モデルの場合が多く、データ量も多くなる。（圧縮ファイルも同様。）この為、binary 形式のデータ全てを ascii に変換せずに、指定したデータ数（行数）のみ変換するようにしている。この変換するデー
タ数をここで指定する。
ascii でも同様な処理を行い、指定した行数以上の余分なデータは取り込まない様にしている。これにより、gridEditor が扱うデータ数が減少するので、処理速度が早くなっている。
ここで指定するデータ数は、cell で表示させる行数以上のデータを指定する。

2)

列名のポップアップメニュー
全表示/非表示 field の切り替え
非表示設定した field を隠す、または表示する（全表示）の切り替えを行う。非表示の場合
は、ラベルフォントの色が濃い青に変わるので、今の画面が非表示なのか全表示なのかは、判断できる。
選択した field を非表示選択した field を非表示設定にする。
field の表示順変更
非表示設定した field を表示設定に変える、また field の表示順を変更する。（任意の順番で表示させることができる。）
ここの設定は、firstTime のフォルダ内に「.displayField」の隠しファイルが作成され、ここにその設定が保存されるので、次回起動時には、その設定を読み込み同じ設定で起動する。
field コピー
選択している field を TreeFoam の clipBoard にコピーする。（複数をコピーしたい場合は、コピーしたい field を複数個選択して、右クリックする。）
貼り付ける対象は、自身の gridEditor でも、他の case の gridEditor でも貼り付けはできる。
field 貼り付け（挿入）TreeFoam の clipBoard にコピーされている field を選択している列に貼り付ける。（挿入する。）貼り付ける field 名が存在する場合は、field 名を数字付き field 名に変更して挿入する。（同名の field が存在しても、置き換える様な貼付けはしない。）
field 名変更
95

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
選択している field 名を変更する。
field 削除
選択している field を削除する。

3)

行名のポップアップメニュー
行コピー
選択している行を TreeFoam の clipBoard にコピーする。
行貼り付け
TreeFoam の clipBoard にコピーされた行を貼り付ける。
patch 名 sort する/しない切り替えpatch 名を sort してアルファベット順に並べ替えて、表示する。これは、表示方法を変更するのみで、保存の順番は変わらない。
cell 内の表示行数・データ数変更
ここで、cell 内に表示する行数を指定する。
計算結果が入っている timeFolder を指定して gridEditor を起動した時、internalField やbaoundaryField には、nonuniform 形式（List 形式）のデータが入っており、データの行数
は膨大な量になる。この為、全てのデータが cell 内に表示できないので、ここで表示行数を設定し、その行数のみ表示させる設定としている。
また、読み込む field が binary 形式の場合は、そのデータを ascii 変換して表示させているが、binary 形式はファイルサイズが小さくなるので、大規模モデルの場合が多く、データ量も多くなる。（圧縮ファイルも同様。）この為、binary 形式のデータ全てを ascii に変換せずに、指定したデータ数（行数）のみ変換するようにしている。この変換するデー
タ数をここで指定する。
ascii でも同様な処理を行い、指定した行数以上の余分なデータは取り込まない様にしている。これにより、gridEditor が扱うデータ数が減少するので、処理速度が早くなっている。
ここで指定するデータ数は、cell で表示させる行数以上のデータを指定する。
patch 名変更
選択した行の patch 名を変更する。
新しい空 patch 追加
追加したい空 patch の個数分の行を選択し、メニューを実行すると、選択した個数分の空
patch が追加される。
空 patch 削除
削除したい空 patch を選択して、メニューを実行すると、選択した空 patch が削除される。
全ての空 patch 削除
gridEditor が表示している全ての空 patch（internalField を除く黄色の行）を削除する。
変数定義行（空）の表示/非表示切り替え
field 内で「$iniTemp」等の変数を定義する行（水色の行）を追加する。ただし、既に変数を定義している field を読み込んだ場合は、この設定にかかわらず、変数行は、表示される。
（この場合は、変数行を消す事ができない。）
変数行は、boundaryField 内と外に定義できるので、この設定を「表示する」にするとこの行が 2 行現れる。

96

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
8-1-3-2.

ダブルクリック操作

ダブルクリックする場所によって、その処理が異なってくる。

1)patchType 部2)field 名部4)cell 部3)patch 名部

1)field 名部をダブルクリック
ダブルクリックした field を editor で開く。
field が binary 形式の場合は、データを ascii 変換した後で表示する。
データ形式が nonuniform 形式（List 形式）の場合は、データ量が膨大になるので、ascii、binary にかかわらず、List 形式のデータは、「cell 内の表示行数・データ数変更」で設定したデータ数に省いて、editor で開く様にしている。この為、editor で編集できるデータは、List 形式以外の項目が編集できることになる。

2)

patchType 部をダブルクリック
boundary ファイルを editor で開く。

3)

patch 名部をダブルクリック
ダブルクリックした patch 名をが変更できる。

4)

cell 部をダブルクリック
cell 内容が編集できる。cell 内容の最後が「...」で終わっている場合、全ての内容が表示されていな
い状態になっており、この場合は、ダブルクリックにより、その cell 内容の全てを editor で開き、確認・編集ができる。

8-1-4.

field 内変数や patchGroup、include 文の扱い

field 内で「$iniTemp」や「$:wallBC.U」の様な変数、「".*"」の様な wildCard、boundary で設定したpatchGroup（inGroups）が使えるが、この内「$:wallBC.U」の変数タイプ、wildCard、patchGroup は、構造が複雑で、その設定内容が直感的に理解できない。この為、gridEditor 上では、これらを解釈したした97

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
結果を表示させるようにしている。
ただし、「$iniTemp」の変数タイプについては、階層がなく直感的に理解できる事と、この変数がある事によって修正が楽に行える為、gridEditor 上では解釈せずそのまま残して表示させている。field 内の「#include」や「#includeEtc」の内容についてもその内容を読み込み、同様な処理を行っている。
保存は、gridEditor が表示している内容（変数を解釈した結果）を保存する。「#include」や「#includeEtc」を含む行を保存する場合は、これを解釈した結果を保存する為、include 行は不要になるが、変数定義の上部にそのまま残している。（変数定義の上部に残している為、include で変数が定義されていても次で書きなおされるので実害はない。8-1-4-4 項参照。）

8-1-4-1.

gridEditor による field 内変数の入力例

tutorials の cavity を例にとって、gridEditor 上で field 内変数を入力してみる。
以下のリストは、オリジナルの boundary と U field の内容になる。この内容を gridEditor で表示させると以下になる。

＜ U field ＞＜ p field ＞// * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * //dimensions
internalField[0 1 -1 0 0 0 0];

boundaryField{
movingWall
{
type
value
}
fixedWalls
{
type
value
}

}

frontAndBack
{
type
}

uniform (0 0 0);

dimensions
internalField[0 2 -2 0 0 0 0];
uniform 0;

boundaryField{
movingWall
{
type
}

fixedValue;
uniform (1 0 0);

fixedValue;
uniform (0 0 0);

fixedWalls
{
type
}

empty;

frontAndBack
{
type
}

//************************************** //}zeroGradient;zeroGradient;empty;//************************************** //98TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この内容に対し、gridEditor 上で field 変数を追加して保存し、結果を確認してみる。
field 変数を追加するためには、patch 名（行ラベル）部を右クリックしてポップアップメニューを開き「変数定義行（空）の表示/非表示切り替え」を選択する。この操作により、下図の様に gridEditor 上に変数定義行（水色の行）が現れる。

水色の変数定義行が 2 本表示されているが、これは上段が boundaryField の外で変数を定義し、下段が99

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
boundaryField の中で変数を定義する為のもの。上段で定義した変数は、internalField や boundaryField
内で使用できる。下段は、boundaryField 内のみでしか使用できない。
ここで、以下の様に変数を定義してみる。上段で初期値 iniU、iniP を定義してこの変数を internalField
で使い、下段で moveU と zeroU を定義してこの変数を boundaryField で使う設定にしている。

この状態で、

ボタンをクリックして、保存する。保存後、U, p field の内容を確認すると、以下になる。

＜ U field ＞// * * * * * * * * * * * * * * * * * * * //＜ p field ＞// * * * * * * * * * * * * * * * * * * * //dimensions
iniU (0 0 0);[0 1 -1 0 0 0 0];

dimensions
iniP 0;internalField

uniform $iniU;

uniform $iniP;boundaryField{

boundaryField{
moveU (1 0 0);
zeroU (0 0 0);
movingWall
{
type
value
}
fixedWalls
{
type
value
}
frontAndBack
{
type
}

internalField[0 2 -2 0 0 0 0];

movingWall{
type}
fixedWalls{
type}
frontAndBack
{
type
}

fixedValue;
uniform $moveU;

fixedValue;
uniform $zeroU;

zeroGradient;zeroGradient;empty;}//************************************** //empty;}//************************************** //100

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
各々の field に変数が boundaryField の内外に追加されている事が判る。
今の設定は、値を変数に置き換えたのみの為、このまま実行しても結果は変わらない。しかし、変数が定義できる事は、変数の値を修正する事で、その変数を使っている場所の値を全て変更できるメリットがある。

8-1-4-2.

patchGroup と wildCard の使用例

前項と同様に tutorials の cavity を使って、patchGroup と wildCard を使って設定してみる。
尚、wildCard については、正規表現であり、gridEditor 側も正規表現でマッチングを確認している。
U field について、patchGroup と wildCard を使って以下の様に内を書き換え、gridEditor で読み込み表示させた結果が以下になる。patchGroup と wildCard を解釈した結果が表示されている。
＜ boundary ＞// * * * * * * * * * * * * * * * * * * * //＜ U field ＞// * * * * * * * * * * * * * * * * * * * //3(dimensions)

movingWall{
type
inGroups
nFacesstartFace}
fixedWalls{
typeinGroups
nFacesstartFace}
frontAndBack{
type
inGroups
nFacesstartFace}internalField[0 1 -1 0 0 0 0];

wall;
2(move wall);
20;
760;

boundaryField
{
move
{
Type
Value
}

wall;
1(wall);60;
780;"fix.*"
{
type
value
}

empty;
1(empty);
800;
840;
}

frontAndBack
{
type
}

uniform (0 0 0);

fixedValue;
iniform (1 0 0);

fixedValue;
uniform (0 0 0);

empty;//************************************** ////************************************** //101

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
gridEditor で表示させた結果（解釈した結果が表示）

この状態を保存すると、解釈した結果を保存するので、結果的に field の内容は、表示通りのイメージの状
態が保存される。（wildCard や move の patch 名は削除される。）

8-1-4-3.

tutorials 内での使用例

tutorials 内で field 内変数を多用している「compressible/rhoPimpleDyMFoam/annuarThermalMixer」の内容を確認してみる。
まず、該当する tutorials をコピーして新しい case を作成し、「./Allrun」を実行して case を完成させる。
この後、U field を確認すると、以下の様に設定されている。非常にシンプルに記述されているが、patch
内容はこの他に include ファイルの内容や boundary の内容を確認しないと解らない。
また、include ファイル中に include 文を含む場合もあり、さらに「$:outlet.U」タイプの変数は、「$:ini.outlet.U」の様に、ネスティングさせて記述ができる様になっているので、patch 内容を理解する事が難しくなっている。gridEditor では、これらの解釈方法を再帰的呼び出しで解釈させている為、これらのネスティング深さの制限なく解釈して表示できる。
＜U field＞// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //#include "${FOAM_CASE}/constant/caseSettings"
dimensions[0 1 -1 0 0 0 0];
internalField
uniform (0 0 0);
boundaryField{
innerInlet{type
fixedValue;
value
uniform $:innerInlet.U;}
outerInlet{
102TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
type
value

fixedValue;
uniform $:outerInlet.U;}
outlet{ $:outlet.U; }staticWalls { $:wall.U; }movingWalls { $:movingWall.U; }#includeEtc "caseDicts/setConstraintTypes"}// ************************************************************************* //この内容をそのまま gridEditor で表示させた結果が以下になる。
U field を editor で開いた結果は難解であるが、これを gridEditor で表示させた場合は、以下の様に表示され、各 patch の境界条件が素直に理解できる状態になっている。
（#include や#includeEtc 文も解釈できている。）
尚、gridEditor 上の boundary の内容はそのまま表示させると、行数が多くなってしまうので、inGroups の行を 1 行にまとめ直して、表示させている。

103

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この結果を保存すると、変数を解釈した状態が保存される為、以下の様に書き直されて保存される。

104

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
include ファイルは、消さずに上部に残している。上部に残している為、include ファイルで定義されたものがあっても、次の定義で書き直されるので、実害はない。（8-1-4-4 項参照）// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //#include "${FOAM_CASE}/constant/caseSettings"
dimensions[0 1 -1 0 0 0 0];
internalField
uniform (0 0 0);
boundaryField{#includeEtc "caseDicts/setConstraintTypes"
innerInlet{type
fixedValue;
value
uniform (0 0 0.2);}
outerInlet{type
fixedValue;
value
uniform (0 0 0.1);}
innerOutlet{
typepressureInletOutletVelocity;value
uniform (0 0 0);}
outerOutlet{
typepressureInletOutletVelocity;value
uniform (0 0 0);}
rotorBlades{
type
movingWallVelocity;value
uniform (0 0 0);}
rotorBlades_slave{
type
movingWallVelocity;value
uniform (0 0 0);
}
shaft
{
type
movingWallVelocity;value
uniform (0 0 0);}
statorBlades{
type
fixedValue;
value
uniform (0 0 0);}
statorBlades_slave{
type
fixedValue;
value
uniform (0 0 0);105TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
}
walls
{
type
value
}
AMI1
{
type
}
AMI2
{
type
}

fixedValue;
uniform (0 0 0);

cyclicAMI;

cyclicAMI;}// ************************************************************************* //gridEditor が変数を解釈し保存した結果が正しいかどうかを確認する為に、保存前のデータと保存後のデータを使って solver を走らせ、計算初期の残渣を確認してみた結果が以下になる。
両者とも同じ結果になっており、正しく解釈している事が判る。
保存前の残渣

保存後の残渣

106

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

8-1-4-4.

変数、wildCard、patchGroup 解釈の優先順位

変数、wildCard、patchGroup を解釈するに当たって、OpenFOAM の解釈方法を試行錯誤的に確認した。この方法に基づき gridEditor 側も解釈している。
変数と wildCard（又は変数と wildCard の組み合わせ）を記述順に解釈していき、この結果を patchGroup ま
たは patch 名に入れる。この後、patchGroup を解釈し、この結果を patch 名に入れる。最後に、patch 名の内容を記述順に確認し、その内容に書き換える。
この様に、解釈していく途中で patch 名の内容を逐次書き換えて行くので、最終的に「patch 名に直接記述」したものがあれば、この内容で確定する。（wildCard や patchGroup でその patch 内容が決定されていても、それに関係なく「patch 名に直接記述」があれば、その内容で確定する。）
同じタイプの中では、記述順に内容を書き換えていく。（最後の記述内容で決定される。）
patchGroup については、inGroups 内で定義された順で値を書き換えていく。
例：「inGroups 3(moveWall1, fixWall, sideWall)」の場合、moveWall→fixWall→sideWall の順で確認し、最後に確定した内容で決定される。
タイプ
例
解釈順
–---------------------------------------------------変数、wildCard$:outlet.U、".*"
patchGroupinGroups 1(wall)
patch 名に直接記述
movingWall

8-1-5.

binary 形式の扱い

gridEditor では、field の書式が binary でも、それを読み込み表示して、編集できる。
binary 形式の編集・保存は、binary を ascii 形式に変換して編集し、保存時は ascii を binary に変換して保存する。

8-1-5-1.

OpenFOAM の binary 形式

実際に tutorials の cavity を使って、binary 形式のファイルの内容を確認してみる。
この case の要素数を減らすために、blockMesh の分割数を（3 x 3 x 1）に変更してメッシュを切り直す。
controlDict 内の writeFormat を「binary」に変更して、solver を走らせ、binary 形式のファイルを作成する。でき上がった timeFolder 内の U field を editor で開き内容を確認すると、以下が表示される。
ファイルの書式は、FoamFile 中の「format」の内容で、そのファイルが ascii か binary か判断できる。
binary 部は、部のみで他は ascii で記述されている。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.0
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||107

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatbinary;
この内容で ascii か binary かを判断
class
volVectorField;
location"0.1";
objectU;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //dimensions[0 1 -1 0 0 0 0];

internalField
nonuniform List<vector>
9(&\B5\B5\AFU`\A6\BF\96##\FB\88\AB\A3?\00\00\00\00\00\00\00\00ْX^\A1\8F\B7\B\A8#^
Efo?\00\00\00\00\00\00\00\00\FF\DB\F5\DA\E4R\A5\BF@e\AC#ap\A4\BF\00\00\00\00\00\
vector 形式で 9 組の binary データ
00\00\00\E6M\A5\8BX&\A6\BF\E2\B2_\E4\D7\D7\C1?\00\00\00\00\00\00\00\00\B9u\F9_\E（ 8 byte☓3☓9 ヶ = 216 byte ）4E\BD\BF\83F,\BAm\F3o\BF\00\00\00\00\00\00\00\00\E6\90\C5EA\BC\97\BFWXW\F9\AC\BE\00\00\00\00\00\00\00\00\C8/\FC\F7#\A0\CC?#\C8?f\EE\00\00\00\00\00\00\00\00\81\A
A\C1\FA1\84\C5Ԝ\8B=\E9\BD?\00\00\00\00\00\00\00\00\C1\F0\CF<|#\CE?\B1##<H\B9\B
F\00\00\00\00\00\00\00\00);boundaryField{
movingWall
{
type
value
}
fixedWalls
{
type
value
}
frontAndBack
{
type
}
}

fixedValue;
uniform (1 0 0);

fixedValue;
uniform (0 0 0);

empty;// ************************************************************************* //binary 部を読む為には、直前の変数（vector 等）とその組数（今回の場合、vector が 9 組）を確認した上で、その個数分の binary データを読み込む事になる。変数は以下のものを読み込む事ができる。
変数type
byte 数–---------------------------------------------scalar
double1 x 8 byte
vectordouble3 x 8
symmTensor
double6 x 8tensordouble
9 x 8
label
int
1 x 4
108

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
faceListbool

8-1-5-2.

int
bool

1 x 4
1 x 1

binary ファイルの読込・編集・保存の方法

binary ファイル自体に ascii 文字と binary データが混在しているので、ascii 部と binary 部に分けて読み込む。binary 部は、予め設定されているデータ数分を ascii 変換する。
ascii 変換するデータ数は、以下の様に cell のポップアップメニューの「cell 内の表示行数・データ
数変更」を選択して表示される「表示行数・データ数の設定」画面内で設定する。

ascii 変換するデータ数

109

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
この後、分けて読み込んだ ascii 部のデータに、ascii 変換した binary 部を挿入して、ascii ファイルとして完成させる。でき上がった ascii ファイルを「TreeFoam/temp/」フォルダに「U.0/U」として保存し、このファイルを editor で読み込み編集する方法をとっている。
gridEditor 上から、binary 形式のファイルを実際に開いてみる。下図が、cavity を binary で計算させた後、timeFolder「0.5」を gridEditor で表示させた結果になる。binary データが ascii 変換されて表示されている。

この後、U field を editor で開く為に、field 名「U」（列ラベル「U」）をダブルクリックする。この操作で、editor で U field を開き、その内容が確認できる。
以下が editor で U field を開いた結果になる。binary 部（部）が ascii 変換されて、数字が確認できる。
基本的に binary データ部は編集できないが、ascii 部は編集できる。ascii 部を編集後、保存すると、
binary 部に元の binary データを挿入し保存される。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.0
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatbinary;class
volVectorField;
location"0.5";
objectU;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //110

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
dimensions[0 1 -1 0 0 0 0];

internalField
nonuniform List<vector>
9((-0.0462046515435 0.0408637298982 0.0)(-0.0972003750338 0.00480091815208 0.0)(-0.0434501396518 -0.0425435040631 0.0)(-0.0449110781197 0.144268555566 0.0)(-0.116741501046 -0.00457649800858 0.0)(-0.0216978539534 -0.152800969997 0.0)
(0.226799172932 0.112710025279 0.0)
(0.174552642635 0.00922281531272 0.0)
(0.240340455548 -0.100962433547 0.0)...U.0...
);boundaryField{
movingWall
{
type
value
}
fixedWalls
{
type
value
}
frontAndBack
{
type
}
}

ascii 変換された binary 部
20 行分あるはずだが、データは全部で9 ヶしかない為、 9 行を表示している。
（この部分は編集できない。）

fixedValue;
uniform (1 0 0);

fixedValue;
uniform (0 0 0);

empty;// ************************************************************************* //111

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
8-2.

topoSetEditor

特定のメッシュを抽出して、加工する OpenFOAM ユーティリティの topoSet を GUI 上で操作できる様にしたもの。このメッシュ操作は、topoSetDict を作成し topoSet を実行するだけだが、topoSetDict の作成が重要で、ここが GUI 上で行える様にしている。

8-2-1.

topoSet のコマンド構造

例として、cellZone「waterHi」から cellSet「waterHiSet」を作り出すコマンドを考えると、以下になる。
以下の様に、toposetDict の actions 内に、この処理を書き込むことになる。
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //actions({
namewaterHiSet;//作り出す名前
type
cellSet;//作り出すタイプ（今回は、「cellSet」）
action new;//新しく作り出す為、action は「new」
source zoneToCell;//作り出す方法（今回は「zoneToCell」）
sourceInfo{name "waterHi";//元となる cellZone 名}});// ************************************************************************* //この構造を分解すると、下記の様に 3 ヶに分類できる。
namewaterHiSet;
type
cellSet;action new;source zoneToCell;sourceInfo{name "waterHi";}

1) result ：結果のタイプと名称
2) action ：処理内容

3) source ： source と result の組み合わせと、 source 名

topoSet は、action 内容によって source 不要の action もあるが、全てこの構造になっている。
この為、GUI 上で
action を選択 どうするか
source を選択 何からresult を選択 何を作り出すかを操作する事によって、topoSetDict を作り出すように設定している。（直感的に操作できる）

112

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
8-2-2.

topoSetEditor の画面

TreeFoam 上の ボタンをクリックして topoSetEditor を起動すると、以下の画面が現れる。
この画面は、「Action」「Source」「Result」の 3 ブロックに分かれており、各々のブロックから項目を選択するだけで、topoSetDict の内容（下部のテキストボックス中に表示される）が作成できる。
テキストボックス中に表示された内容は、ボタン操作で topoSetDict にコピーして、topoSet を実行する事ができ、メッシュ操作が楽に行える。
また、Result の Type に「sets」と「zones」があるが、これは、複数の source 名を選択して、繰り返しの処理が行える様に準備している。詳細は、8-2-6 項を参照。

8-2-3.

topoSet コマンドの内容

topoSet コマンドの構成を OpenFOAM-3.0.0 で調べた結果、下表の構成となっている。
action「clear」「invert」「remove」は、source 不要で、直接 result を指定する。
action「new」「add」「delete」「subSet」については、source とそれに対する result の組み合わせを指定する。
各々の action について、source と result の組み合わせを確認した結果が、下表になる。表中で空欄部は、
113

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
組み合わせが存在していない事を示している。
topoSetEditor 画面上で、action と source、result を選択すると、topoSetEditor は、それに対応するコマ
ンド内容を検索してテキストボックス中に表示する。存在しない組み合わせの場合、source の内容が表示されない。（result の内容は表示される。）
actionsource Typeclear
invertremovenew
add
deletesubsetcellSetfaceSetpointSetsets(setの複数)
cellZonefaceZonepointZone
surface
label
shape
box
cylindersphererotatedBox
targetVolume
searchableSurface
nearestboundaryfield
regionpatch
normal8-2-4.

cellSetfaceSetpointSet

result Type
cellZone

cellSetfaceSetpointSet

cellZoneSet

cellToCell
faceToCell
pointToCell

cellToFace
faceToFace
pointToFace

cellToPoint
faceToPoint
pointToPoint

setToCellZone

faceZonefaceZoneSet

pointZone
pointZoneSet

setToFaceZone
setToPointZone
setsToFaceZone

zoneToCell
faceZoneToCell
surfaceToCell
labelToCell
shapeToCell
boxToCell
cylinderToCell
sphereToCell
rotatedBoxToCell
targetVolumeToCell

zoneToFace

labelToFace

zoneToPoint
surfaceToPointlabelToPoint

boxToFaceboxToPoint

searchableSurfaceToFaceZone
nearestToCell

nearestToPoint
boundaryToFace

fieldToCell
regionToCell

regionToFace
patchToFace
normalToFace

topoSet コマンドの抽出について

topoSetEditor は、前項の様に与えられた「Action」「Source」「Result」の情報から、該当する topoSet
コマンドを抽出してくる必要がある。
この方法は、「$WM_PROJECT_DIR/applications/utilities/mesh/manipulation/topoSet/topoSetDict」を読
み込み、ここから該当する部分を抜き出している。この為、OpenFOAM のバージョンによってコマンドの書式が変わっていても、そのバージョンに応じたコマンド内容が抽出できることになる。（実際にバージョン
によって書式が変わっているコマンドもある。）
以下は、そのファイルの一部であるが、コマンドを抜き出す部分は、「//」でコメントアウトされた部分を使って抜き出している。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.4.0
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatascii;
class
dictionary;114

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
objecttopoSetDict;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //// List of actions. Each action is a dictionary with e.g.
//// name of set
//
name
c0;
//
//
// type: pointSet/faceSet/cellSet/faceZoneSet/cellZoneSet//
type
cellSet;////// action to perform on set. Two types://// - require no source : clear/invert/remove////
clear : clears set or zone////
invert : select all currently non-selected elements////
remove : removes set or zone//// - require source: new/add/delete/subset
//
//
new
: create new set or zone from source
//
//
add
: add source to contents////
delete : deletes source from contents////
subset : keeps elements both in contents and source//
action new;//// The source entry varies according to the type of set://// cellSet// ~~~~~~~////// Select by explicitly providing cell labels//
source labelToCell;//sourceInfo//{//
value (12 13 56);// labels of cells
//
}
//
//
// Copy elements from cellSet//
source cellToCell;//sourceInfo//{//
set c1;//}////// Cells in cell zone//
source zoneToCell;//sourceInfo//{//name ".*Zone";// Name of cellZone, regular expressions allowed
//
}
//
//
// Cells on master or slave side of faceZone//
source faceZoneToCell;//sourceInfo//{//name ".*Zone";// Name of faceZone, regular expressions allowed115

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//

option master;}// master/slave// Select based on faceSet
source faceToCell;sourceInfo{
set f0;// Name of faceSet//option neighbour; // cell with neighbour in faceSet//option owner;
// ,,
owner
option any;// cell with any face in faceSet//option all;// cell with all faces in faceSet}// Select based on pointSet
source pointToCell;sourceInfo{
set p0;
option any;// cell with any point in pointSet//option edge;// cell with an edge with both points in pointSet
}
:
:
以下省略

8-2-5.

topoSetEditor の操作例

実施例として「box で cell を抽出」、「cellZone から cellSet を抽出する」事を行ってみる。

8-2-5-1.

box でメッシュ（cellSet）を抽出

tutorials の damBreak を使って、box 領域の cellSet を抽出してみる。
まず、6-2 項と同様な方法で tutorials の damBraek をコピーし、この case を解析 case（ マーク付き）に設定して、blockMesh を作成しておく。
この後、TreeFoam 上の ボタンをクリックして topoSetEditor を起動する。
起動後、画面上で以下を選択する。
actionsourceresultnewbox（幾何図形）
cellSetset neme:water 入力

この選択により、下図の様に画面下部にこの処理を行う為の topoSetDict の内容が表示される。
ここまでの操作で topoSetDict の内容は、殆ど出来上がっているが、抽出する為の box の座標が default の116TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
値になっているので、この値を修正する。修正は、テキストボックス内に表示されている座標を直接編集する。

box の座標を以下の様に修正し、この内容を toposetDict に書き込み・実行する為に、「topoSetDict ｸﾘｱ」
「topoSetDict 追加」「topoSet 実行」ボタンを順にクリックすると、メッシュが抽出できる。

でき上がった topoSetDict は、「topoSetDict 編集」ボタンをクリックすると確認できる。以下がその内容になる。テキストボックスの内容そのもので topoSetDict ができ上がっている。
117

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //actions(// new To cellSet{
namewater;
type
cellSet;action new;// Cells with cell centre within box ('box') or multiple boxes ('boxes')
source boxToCell;sourceInfo{box(0 0.196 -1) (0.34 0.292 1);//boxes((0 0 0) (1 1 1) (10 10 10)(11 11 11));}});// ************************************************************************* //抽出された、cellSet「water」の内容を paraFoam で確認すると、以下の様に抽出できている。
全体のメッシュ

topoSet で抽出した cellSet「water」部

water

8-2-5-2.

cellZone を cellSet として抽出

メッシュ作成時に cellZone を作った場合等を想定して、その cellZone から cellSet を作り出してみる。
まず、case を作成する必要がある為、7-2 項で作成した case をコピーして、メッシュ操作（cellZone から
cellSet を抽出）してみる。コピーした case を解析 case に設定（ マーク付き）した上で、TreeFoam 上のボタンをクリックして topoSetEditor を起動する。
topoSet の処理は、cellZone「waterHi」から cellSet「waterHiSet」を作成してみる。
この処理を行う為に、topoSet の画面上で以下を選択し、cellSet の名称を入力すると、テキストボックス
中に、その処理を行う為の topoSetDict の内容が表示される。
actionsourcenewcellZonename 「waterHi」を選択
118

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
resultcellSetset neme 「waterHiSet」を入力

今回の場合、表示された topoSetDict の内容は修正する必要がなく、このまま topoSetDict として使えるので、1)項と同様に「topoSetDict ｸﾘｱ」「topoSetDict 追加」「topoSet 実行」ボタンを順にクリックする事
で、cellSet「waterHiSet」が作成できる。
今回の操作は、cellZone から cellSet を作り出す操作だが、source と result を入れ替えて操作すると、cellSet から cellZone を作り出すことができる。
また、ボタンをクリックする時、topoSetDict をクリアせずに、「topoSetDict 追加」「topoSet 実行」ボタ
ンのみをクリックした場合は、今回の topoSetDict の内容を、既にある system/topoSetDict に追加してtopoSet を実行する。この為、topoSetEditor 上で、単一処理の topoSetDict を追加しながら、最終的に複数の処理を行う topoSetDict を作成する事ができる。

119

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
8-2-6.

繰り返しの Action について

複数の cellZone（又は faceZone, pointZone）を一括して同名の cellSet（又は faceSet, pointSet）を作成したり、逆に複数の cellSet を一括して同名の celZone を作り出せる様に、Result type に「sets」と「zones」を準備している。下図参照。

Result type で「sets」または「zones」を選択した場合は、source 名を複数選択でき、選択した Action を繰り返して処理する事ができる。
この時の Action は、
newadd
deleteclear
no source
invertno source
removeno sourceが使える。
上記 Action の内、clear, invert, remove は、source を必要としない Action の為、複数の source 名が選択できない事になるが、この場合は、複数の Result 名を選択して、繰り返し処理を行う事になる。
これらの繰り返しの処理は、対象がたくさんある場合、楽に処理でき、非常に便利になる。
次項以降に new, add, remove Action についての例を示す。

8-2-6-1.

new Action の繰り返し処理の例

一例として、7-2-7 項と同じ処理を行ってみる。
この処理は、faceZone「waterHi」「waterLo」から、同名の cellSet「waterHi」「waterLo」を作り出す処理になる。new Action を 2 回繰り返す処理を行う事になる。
具体的には、以下の様に選択する。（Source 名を複数選択し、Result type で sets を選択する。）

120

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

Result type として「sets」を選択しており、これだけでは Result type が cellSet, faceSet, pointSetなのか確定しない事になるが、Source type で cellZone を選択している為、Result type は、「cellSet」に設定される。この様に、Result type は、Source type で決定される事になる。
以上の操作により、以下の topoSetDict ができ上がる。
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //actions(// new To cellSet{
namewaterHi;
type
cellSet;action new;// Cells in cell zone
source zoneToCell;sourceInfo{name "waterHi" ;// Name of cellZone, regular expressions allowed}}// new To cellSet{
121

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
namewaterLo;
type
cellSet;action new;// Cells in cell zone
source zoneToCell;sourceInfo{name "waterLo" ;}// Name of cellZone, regular expressions allowed});// ************************************************************************* //8-2-6-2.

add Action の繰り返し処理の例

cellSet「waterHi」「waterMd」「waterLo」が存在するものとして、これらの cellSet 全てを加えた
cellSet を作りだしてみる。
考え方としては、waterHi に残りの waterMd と waterLo を加えていけば、合計の cellSet ができあがる。
具体的には、以下の様に選択する。
source 名は、waterHi を除いた全て（waterMd と waterLo）を選択し、result 名は、waterHi を入力する。
これにより、waterHi に waterMd と waterLo を加える事になる。

以上の操作により、以下の topoSetDict ができあがる。
122

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //actions(// add To cellSet{
namewaterHi;
type
cellSet;action add;// Copy elements from cellSet
source cellToCell;sourceInfo{
set waterLo;}}// add To cellSet{
namewaterHi;
type
cellSet;action add;// Copy elements from cellSet
source cellToCell;sourceInfo{
set waterMd;}});// ************************************************************************* //8-2-6-3.

remove Action の繰り返し処理の例

cellZone「waterHi」「waterMd」「waterLo」を全て削除してみる。
remove Action は、source を必要としない Action の為、result 名を複数選択することになる。
具体的には、以下の様に選択する。

123

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以上の操作により、以下の topoSetDict ができあがる。
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //actions(// remove To cellSet{
namewaterHi;
type
cellSet;action remove;}// remove To cellSet{
namewaterLo;
type
cellSet;action remove;}// remove To cellSet{
namewaterMd;
type
cellSet;action remove;});// ************************************************************************* //124

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

8-2-7.

組み合わせ（combined）Action について

topoSet の action は、単一処理しかできない為、例えば「cellZone の名称を変更する」場合は、topoSet のaction を複数組み合わせて実現することになる。
この為、よく使用する処理については、これらを組み合わせて処理するコマンドを作っているので、これを使用する。下図の部分参照。

以下に、これら組み合わせ Action の具体的使用例を示している。
尚、newAddsSet と newZonesToSets Action については、前項の繰り返し処理で同様な事が実現できる為、これらの使用例を省略している。この為、使用例としては、renameSetZone と newCellToFace を載せている。

1)

renameSetZone

cellSet、faceSet、cellZone、faceZone の名称を変更したい時に使用する。
以下の例は、cellSet「waterMiddle」を cellSet「waterMd」に rename する操作を示している。（以下の様にクリックするだけで、この操作を行う topoSetDict ができあがる。）

125

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以上の操作により、以下の topoSetDict ができあがり、これを実行する事で、「waterMiddle」が「waterMd」に rename できる。
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //actions(// new To cellSet{
namewaterMd;
type
cellSet;action new;// Copy elements from cellSet
source cellToCell;sourceInfo{
set waterMiddle;}}// remove To cellSet{
namewaterMiddle;
type
cellSet;action remove;});// ************************************************************************* //126

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

2)

newCellToFace

選択した cellZone 又は cellSet から、外表面の face を抜き出し、faceZone 又は faceSet を作り出す。
以下の例は、cellSet「waterHi」の外表面を faceSet「waterHiFace」として取得する例になる。

以上の操作で、以下の topoSetDict ができあがり、これを実行して外周面の faceSet「waterHiFace」を取得することができる。
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //actions(// new To faceSet
{
name
temp;
type
faceSet;action new;// Select based on cellSet
source cellToFace;sourceInfo{
set waterHi;
127

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
option both;//option both;// All faces of cells// Only faces whose owner&neighbour are in cellSet}}// new To faceSet{
namewaterHiFace;
type
faceSet;action new;// Select based on cellSet
source cellToFace;sourceInfo{
set waterHi;
option all;// All faces of cells//option both;// Only faces whose owner&neighbour are in cellSet}}// delete To faceSet{
namewaterHiFace;
type
faceSet;action delete;// Copy elements from faceSet
source faceToFace;sourceInfo{
set temp;}}// remove To faceSet
{
name
temp;
type
faceSet;action remove;});// ************************************************************************* //128

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9.

応用例

9-1.

ファイルの操作・編集

9-1-1.

stl ファイルの編集

snappyHexMesh や foamyHexMesh を使ってメッシュを作成する時、stl ファイルを元にメッシュを作成している。この stl ファイルを編集（scale 変更、binary を ascii に変換する、stl ファイルの結合、face の向き反転等）を GUI で行なえるツールを作成している。次項以降にその操作方法について示す。

9-1-1-1.

起動方法、起動画面

TreeFoam 上で本格的に stl ファイルを扱う場面は、現在のところ、snappyHexMesh と cfMesh を使う時しか無いので、「snappyHexMesh による mesh 作成」又は「cfMesh による mesh 作成」画面上の「stl チェック...」ボタンから起動する。起動する前に、stl ファイルの保存場所を確認した上で、「stl チェック...」ボタンをクリックして起動する。

この例は、7-1 項のメッシュ作成の例になる。
129

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)「stl チェック...」ボタンで「stl ファイルの編集」画面を起動すると、以下の画面が現れる。

この画面に表示されている stl ファイルは、「./model」フォルダ内に保存されている全ての stl ファイルが表示されている。この中で以下の stl ファイルは、FreeCAD で作成した stl ファイルと salome-Meca で作成した stl ファイルを追加している。
CAD
stl ファイル名
保存形式
solid 名–--------------------------------------------------------------------------------FreeCAD
cubeFreecadBin.stl
binaryMESH-MESH-MESH-MESH....
salome-Meca
cubeSalomeAscii.stl
ascii
（空白）
salome-Meca
cubeSalomeBin.stl
binary（空白）
これらのファイルを使って、stl ファイルの編集を次項以降で行ってみる。

9-1-1-2.

ascii 変換stl ファイルには ascii 形式と binary 形式の 2 種類の形式が存在しているが、OpenFOAM で扱う場合、ascii
形式の方が扱いやすい。ファイルの書式が binary 形式の場合は、ここで ascii 形式に変換できる。
変換の前に、ascii 形式と binary 形式の保存形式を確認すると、これらは、1)、2)項に示す形式になっている。

1)

ascii 形式

ascii 形式の場合以下の様に、1 行目と最終行に solid 名「inW」が記述され、この間には三角形の数分の向130

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
きと座標のセットが記述されている。
1 solid inW
2 facet normal -1 -0 -03outer loop
4
vertex 0 0.02 0.02
5
vertex 0 0.02 -0.02
6vertex 0 -0.02 0.02
7
endloop
8 endfacet
9 facet normal -1 0 0
10outer loop
11
vertex 0 0.02 -0.02
12
vertex 0 -0.02 -0.02
13
vertex 0 -0.02 0.02
14
endloop
15 endfacet
16 endsolid inW

2)solid 名「inW」を定義
三角形の向き（単位ベクトル）
三角形の座標三角形の向き（単位ベクトル）
三角形の座標最後に solid 名「inW」が記述

binary 形式

binary 形式の場合、以下の様に、先頭から 80 byte が header、4 byte が三角形の数、この後、三角形の数分の向きと座標のセットが続く。
1 80 byte
2 4 byte
3 4 byte
4 4 byte
5 4 byte
6 4 byte
7 4 byte
8 4 byte
9 4 byte
10 4 byte
11 4 byte
12:

string
int
float
float
float
float
int
float
float
float
float

header（この部分は規定がないが、solid 名やコメントが記述される場合がある）
三角形の数
三角形の向き三角形の座標↑↑三角形の数
三角形の向き三角形の座標↑↑これを踏まえた上で ascii 変換してみる。
「stl ファイルの編集」画面では、stl ファイルが ascii でも binary でもその形式を判断して読み込む事ができ、そのファイル形式、solid 名（binary の場合は、header の内容）、stl ファイルのモデルの大きさを表示している。
ファイルリスト中の「cubeFreecadBin.stl」と「cubeSalomeBin.stl」は、binary 形式である事が判る。
（全ての stl ファイル形式を読み込む必要があるので、stl ファイルが多数ある場合やファイルサイズが大きい場合は、表示に多少の時間がかかる場合がある。）
これら FreeCAD や salome-Meca で作成した binary 形式を ascii 形式に変換してみる。その変換方法は、以下の様に ascii 変換したい stl ファイルを選択し、「ascii 変換」ボタンをクリックする。

131

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

変換が完了すると、以下の様に、ファイル形式が「ascii」に変わる。

この処理は、log を見て判るように「surfaceTransformPoints -scale '(1.0 1.0 1.0)'」を実行しているのみ。このコマンドを実行すると、形式を ascii に変換してくれるので、このコマンドを使っている。

9-1-1-3.

scale 変更

作成したモデル（stl ファイル）の単位が揃っていない場合、このボタンで scale を変更して、統一することができる。単位が揃っているかどうかは、リスト中の「現在のサイズ(xyz)」欄に表示されている大きさから判断できる。
この例では、以下のファイルが、mm 単位で作成されている事が判るので、これらを 1/1000 に縮小する。
132

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
cubeFreecadBin.stl
cubeSalomeAscii.stl
cubeSalomeBin.stl
scale を変更するためには、以下の様に、変更したいファイルを選択し、「scale 変更」ボタンをクリック
して、倍率「0.001」を入力する。

scale が変更されると、以下の様に「現在のサイズ(xyz)」の値が 1/1000 のサイズに変わる。

133

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-1-1-4.

solid 名設定

現在の solid 名は、scale 変更時に surfaceTransformPoints コマンドが、勝手に設定した solid 名の為、この名称を stl ファイルの名称に変更する事で、solid 名を意味のある名称に変更する事ができる。
この方法は、以下の様に変更したいファイルを選択（今回は、全てのファイルを選択）し、「solid 名設定」ボタンをクリックする。

以下が、変更した結果になる。solid 名が、ファイル名に変更されている。

134

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-1-1-5.

solid 名変更

前項は、一括して solid 名を設定したが、これを個別に特別な名称を設定した場合は、以下の様に変更した
いファイル 1 ヶを選択し「solid 名変更...」ボタンをクリックして新しい solid 名を入力して変更できる。

以下が変更後の画面になる。solid 名が変更されている。

135

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-1-1-6.

stl 結合複数の stl ファイルを solid 名付きで結合したい場合には、この方法を用いる。
例えば、以下の様なモデルの場合、「inW」「sideW」「outW」でモデル全体を表しているので、これらをsolid 名付きで 1 ヶの stl ファイルを作りたい場合に用いる。
sideW （側面の 4 面）
outW

outW

その方法は、以下の様に、結合したい stl ファイル名を選択し、「stl 結合」ボタンをクリックして、ファイル名を入力する事で、結合された stl ファイルを作成する事ができる。

以下が結合した結果の画面になる。「assy.stl」ファイルが追加され、solid 名「inW, outW, sideW」が確認できる。内部の solid 名が表示されるので、何を結合したものかが確認できる。

136

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-1-1-7.

内部 solid 名削除

前項で stl ファイルの内部に solid 名を含んだ stl ファイルを作成したが、この solid 名を削除して、1 ヶの塊とした stl ファイルを作成する場合は、この方法を用いる。
その方法は、以下の様に、修正したい stl ファイルを選択し、「内部 solid 名削除」ボタンをクリックする
事で修正できる。

以下が、内部 solid 名を削除した結果になる。solid 名が「assy」に変わっている。

137

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-1-1-8.

face の向き反転

stl ファイルの face の向きを反転させたい場合には、これを用いる。
face の向きを反転させる方法は、三角形のベクトルの向きと、三角形の座標の順番を入れ替えて実現している。以下の例では、2 行目のベクトルの向きを変えて、5 行目と 6 行目を入れ替えている。
＜変更前＞
1 solid inW
2 facet normal -1 -0 -03outer loop
4
vertex 0 0.02 0.02
5
vertex 0 0.02 -0.02
6vertex 0 -0.02 0.02
7
endloop
8 endfacet:＜ face 向き反転＞
1 solid inW
2 facet normal 1 0 0
3outer loop
4
vertex 0 0.02 0.02
5
vertex 0 -0.02 0.02
6
vertex 0 0.02 -0.02
7
endloop
8 endfacet:

face の向きを反転させたい場合は、以下の様に反転させたい stl ファイルを選択し、「face 向き反転」ボタンをクリックする事により、反転させた stl ファイルができ上がる。

138

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

face の向きを反転させた「sideW_rev.stl」ファイルが追加されている。

face の向きを paraView で確認した結果が以下になる。ベクトルの向きが反転されている。
face 向き反転後（ sideW_rev.stl ）変更前（ sideW.stl ）139

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-1-1-9.

ポップアップメニュー

stl ファイルのリスト上で右クリックして、以下の様にポップアップメニューを開く事ができ、ここでコピーや削除等のファイル操作を行う事ができる。

140

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-1-2.

binary 形式ファイルの扱い方

TreeFoam 上で binary 形式の file を扱う事ができる。file の書式が ascii なのか binary なのかは、
TreeFoam 上の「BCPn」欄から判断できる。下図参照。
BCPn の最初の文字が「B」の場合は binary で、「a」の場合は ascii になる。
従って、下図の「cavity」は ascii で、「cavity_copy0」は binary になる。
TreeFoam は、controlDict 内の「writeFormat」の内容を確認して ascii、binary を表示している。

9-1-2-1.

binary 形式の読込、保存の方法

OpenFOAM の binary 形式は、8-1-5-1 項に示している様に、ファイル上部の FoamFile 部は、必ず ascii 形式になっている。この為、ファイル読み込み時、FoamFile 内の format の内容を確認する事によって、そのファイルの形式が ascii なのか binary なのかが判断できる。
また、そのファイル内に binary データがどのように組み込まれているかは、foamFile 内の class によって異なっている。（class によって読み込み方法を変える必要がある。）/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.0
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
141

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
FoamFile{
version
2.0;
formatbinary;
この内容で ascii か binary かを判断
class
volVectorField;
location"0.1";
objectU;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //以下に class 名を示しているが、class に応じた方法で binary データ部を検出し、読み込んでいる。
区分
polyMeshclasslabelList

読み込み形式
list 形式

faceList
faceCompactList

binary 部検出方法
例：9(*********)
binary 部
ascii 文字の"("を検索して、その個数分の binary を取得。

refinementHistory
cellSetfaceSetpointSet
regIOobject

field 形式

vectorField
field

volScalarField

例：List<scalar> 9(*********);
binary 部
ascii 文字の"List<"を検索して、その個数分の binary を取得

volVectorField
volSymmTensorField
volTensorField
surfaceScalarField
その他***Listlist 形式-

以外

field 形式-

binary データを検出した後は、そのデータの変数（vector 等）とその組数を確認した上で、その個数分のbinary データを読み込む事になる。変数と byte 数は、以下の関係にある。
変数type
byte 数–---------------------------------------------scalar
double1 x 8 byte
vectordouble3 x 8
symmTensor
double6 x 8tensordouble
9 x 8
label
int
1 x 4
faceList
int
1 x 4
bool
bool
1 x 1

binary データの変数型と個数が判断できれば、これを読み込み ascii 文字に変換できる。
142

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
そのファイルの読み込みに当たっては、ファイル内に ascii と binary が混在しているので、ascii 部とbinary データ部を分けて読み込み、binary データ部は、予め定められた個数分の binary データを ascii 文字に変換して、ascii 部に挿入し、ファイル全体として ascii 文字ファイルを完成させる。完成した ascii
文字ファイルを「TreeFoam/temp」フォルダに一時保管し、これを editor で開く方法をとっている。
予め定められた ascii 変換する個数は、gridEditor 側で設定されている個数になる。8-1-5-2 項参照。
以下は、binary 形式の field を editor で開いた状態になる。
この内容は、tutorials の「multuRegionHeater」の書式を binary に変更して「./Allrun」を実行し、その内容を editor で確認した結果になる。このファイルには、binary 部が 2 箇所ある。それぞれの箇所に
binary データのインデックスを付加し、binary データが後で挿入できる様に設定している。
また、元々の ascii データ部は編集が可能だが、binary 部（以下の例では、「List<vector>」から「...U.0...」のインデックスまで）は、編集できない。この部分を書き換えてしまうと、binary データを挿入し直す事ができなくなってしまう。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.1
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatbinary;class
volVectorField;
location"10/topAir";
objectU;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //dimensions[0 1 -1 0 0 0 0];

internalField
nonuniform List<vector>
1200((0.0972284617686 0.000962489909812 0.000800001759558)(0.0962197597556 0.00129743737363 0.00120081857665)(0.0943667588041 0.00133511945142 0.00135689008691)(0.0918866260156 0.00130688233755 0.00142134114643)(0.0893461141406 0.00125937530975 0.00144390041349)(0.0869376236364 0.00119499655179 0.0014343884845)(0.0846515862731 0.00111987828276 0.00140002066518)(0.0824622386228 0.00104126135528 0.0013493287964)
binary データ部（ 1200 ヶの vector データ）
(0.0803676646035 0.000963383303472 0.00128911743283)
binary を ascii 文字に変換して表示。
(0.0783742611278 0.000888111205211 0.00122382768851)
変換する行数は、予め定められた行数分(0.076485229254 0.000816172389472 0.00115639764947)
を ascii 変換する。
(0.0746998550755 0.000747639365533 0.00108903704277)
ascii 変換行数は、 gridEditor 側で(0.0730158634677 0.000682037389793 0.00102368757018)
決定されている。（ 8-1-5-2 項参照）
(0.0714295937315 0.000619574158534 0.000962616609982)(0.0699355729695 0.000559253252976 0.000907191542603)
143

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)(0.0685277228326 0.000500796886277 0.000857453141507)(0.0672003687207 0.000444431043638 0.000812611515159)(0.0659487011099 0.000390667926519 0.000771524874159)(0.0647688357713 0.00034011541731 0.000733091684066)(0.0636575817407 0.000293300893773 0.000696513412845)...U.0...
);binary データのインデックス
boundaryField
{
maxY
{
type
fixedValue;
value
uniform (0 0 0);
}
minX
{
type
fixedValue;
value
uniform (0.1 0 0);
}
maxX
{
type
inletOutlet;
inletValue
uniform (0 0 0);
value
nonuniform List<vector>
40((0.055683056417 3.7381459595e-05 0.000307644111694)(0.0911708959769 0.000217452513024 0.000556139881553)(0.0906610051146 -0.000522416709669 0.00053342825514)(0.0557214369188 -0.000168090767077 0.000199110902365)(0.0793714677545 7.27172801494e-05 0.000780484945166)(0.125751195706 0.000279342072753 0.00102485007502)(0.125120231553 -0.000664690666303 0.000938273723701)(0.0798125947138 -0.000261577718551 0.000325489467223)(0.0841102455769 -1.76933859644e-05 0.000808970812252)(0.132447694997 0.000216108863418 0.000501563720774)(0.131589725751 -0.000593147136692 0.000373341167492)
binary データ部（ 40 ヶの vector データ）
(0.0845429672062 -0.000202325527195 -0.000101885753763)(0.0841930124845 0.000311827214104 0.00115406827675)(0.13218551605 0.000796856416352 -2.48674522348e-05)(0.13252281893 -0.000192590341716 -0.000224296117474)(0.0851048968908 -6.74618554409e-05 -0.000394807987696)(0.0829037483249 0.00126062269493 0.000678843121059)(0.128968343445 0.00242704533856 -0.000244173483344)(0.132895934354 0.000908346978078 -0.000423933698924)(0.0856451980135 0.000302336591309 -0.000375218256195)...U.1...
);
}
minZ
{
type
fixedValue;
value
uniform (0 0 0);144

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
}
maxZ
{
type
value

}

fixedValue;
uniform (0 0 0);}
topAir_to_rightSolid{
type
fixedValue;
value
uniform (0 0 0);}
topAir_to_heater{
type
fixedValue;
value
uniform (0 0 0);}
topAir_to_leftSolid{
type
fixedValue;
value
uniform (0 0 0);}// ************************************************************************* //上記の内容を修正し、保存する場合は、ascii 変換されている binary データ部に、元の binary データを挿入し直して、一旦「TreeFoam/temp」内に保存し、この後で元の場所に戻している。
この様に、編集後保存して editor を閉じた後、前記した後処理が必要になってくるので、configTreeFoam
内の editor の設定は、2-3 11)項に示してある様に、editor を裏で起動しない様に、ubuntu の場合、editor「gedit」をオプション「--standalone」の設定で起動する様にしている。editor を閉じた後、前記した後処理（binary データを挿入し直して保存）を行っている。（editor を閉じないと、修正内容が反映されない。）

9-1-2-2.

binary ファイルを editor で確認する方法

binary ファイルを editor で開いて編集する方法は、以下の 3 種類の方法がある。
1)
2)
3)

gridEditor から editor を開く
8-1-5 項を参照。（T, U, p 等の field に限る）
properties または dictionary の編集画面で editor を開く
解析 case 内の全ての binary ファイルを editor で開くことができる。
端末から editor を開く
解析 case 内の全ての binary ファイルを editor で開くことができる。

1)項は、gridEditor を使う為、扱える binary ファイルは、case 内の field ファイルに限られるが、gridEditor 上で field 名をダブルクリックするだけで開くので、容易そのファイルを開く事ができる。使い方は、8-1-5 項を参照。
2)項は、その case 内の全ての binary ファイルが扱える。
その使い方は、TreeFoam 上の ボタン、または ボタンをクリックする。
145

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

これにより以下の画面が表示されるので、ここからファイルを選択して、editor で開くことになる。
この画面上で、「folder を選択」のリストボックス中のフォルダ名をダブルクリックすると、そのフォルダに移動し、右側のリストボックス内にファイル名のリストが表示される。また、フォルダのリストボック
ス内の「..」をダブルクリックすると親フォルダに移動できる。この為、case 内の全てのフォルダに移動でき、全てのファイルを editor で確認できることになる。
ファイルを editor で開くときは、ファイル名をダブルクリックするか、ファイルを選択して「OK」ボタンをクリックする事で開くことができる。

ここから実際に binary ファイルを開いてみる。
editor で開くファイルは、tutorials の「multiRegionHeater」case の controlDict 内の writeFormat を「binary」に書き換え、「./Allrun」を実行して、binary の case を完成させた後、case 内の「constant/polyMesh/cellZones」の binary ファイルを開いてみる。
下図の「properties file の編集」画面上で、「polyMesh」フォルダと「cellZones」ファイルを以下の様に選択し、「OK」ボタンをクリックするかダブルクリックすると、editor が起動して binary 形式のファイルを開く事ができる。

146

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以下が、editor で開いた結果になる。本来であれば、binary データが存在しているので editor で開くことはできないが、binary データを ascii 文字に変換することで editor で内容が確認できる。
ascii 文字データ部は編集できるので、editor 上で cellZone 名を変更する事もできる。ただし、binary 部（以下の例では、「List<label>」から「...cellZones.0...」のインデックスまで）は、編集できない。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.1
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatbinary;class
regIOobject;location"constant/polyMesh";objectcellZones;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //5(heater{type cellZone;
cellLabels
List<label>
80
(
1273
1274
763
147

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
1275
163
164
165
166
binary データ部（ 80 ヶの label データ）
1603
binary を ascii 文字に変換して表示。
1604
変換する行数は、予め定められた行数分
1605
を ascii 変換する。
1606
ascii 変換行数は、 gridEditor 側で1963決定されている。（ 8-1-5-2 項参照）
1964
1573
1965
1574
1966
1063
1575
binary データのインデックス...cellZones.0...
);}
leftSolid{
type cellZone;
cellLabels
List<label>
130
(
457
458
459
160
161
162
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
760
761
762
2850
...cellZones.1...
);}
rightSolid{type cellZone;
148

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
cellLabels
List<label>
130
(
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
167
168
169
170
171
172
173
...cellZones.2...
);}
topAir{type cellZone;
cellLabels
List<label>
1200
(
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
...cellZones.3...
149

TreeFoam 操作マニュアル （TreeFoam-2.36-151212));}
bottomWater{
type cellZone;
cellLabels
List<label>
1460
(
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...cellZones.4...
);})// ************************************************************************* //端末を起動して、コマンド入力で binary 形式のファイルを開く事もできる。
この場合は、TreeFoam 上から端末を起動して、以下のコマンドを入力する事で、binary 形式のファイルを開く事ができる。
$ editFoamFile.py constant/polyMesh/cellZones

上記入力で、前記した結果と同じ内容が editor で確認できる。
また、以下の様にオプションを追加することで、binary データの表示個数を 5 行に変更する事もできるので、表示内容をシンプルにする事ができる。
$ editFoamFile.py -n 5 constant/polyMesh/cellZones

このコマンドのオプションの詳細は、-h オプションで確認する事ができる。以下はその help の内容になる。
----- editFoamFile.py の使い方-----------------------------150

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
OpenFOAM のファイルを編集する。
ファイルが、gzip、binary でも editor で編集できる。
データ部の行数を省略して表示するので editor の動作が軽くなるがデータ部の編集はできない。
使い方
editFoamFile.py [option] <file0> <file1>...
[option]-ttemporary folder の指定
デフォルトは、「~/TreeFoam/temp」-n
データ部の表示行数を設定
デフォルトは、「~/TreeFoam/data/griEditor_data」内のnMaxLinesBinToAscii の設定による。
全て表示させる場合は、表示行数を「-1」に設定。
-hhelp の表示

151

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-1-3.

internalField、boundaryField のクリア完成した case（うまく計算できる case）を手本に、新たな case を作成する場合、メッシュを入れ替えることになる。また、他の case の field をコピーして持ってくる場合もある。この様な場合、メッシュと fieldの整合が取れていないので、paraFoam が起動できず、メッシュの確認もできなくなる。
この為、TreeFoam 上で、メッシュを再作成したり、メッシュをコピーした場合には、必ず field 内のinternalField と boundaryField を確認し、整合が取れていない場合は、これらをクリアして整合をとる様にしている。
しかし、cp コマンドや nautilus 等のファイルマネージャを使って、メッシュや field をコピーした場合は、メッシュと field の整合が取れていないので、この場合は、internalField や boundaryField を手動でクリアする必要が生じる。
TreeFoam 上では、これらの整合を容易に取る事ができる様にしている。その方法は、field を指定してクリアする方法と gridEditor 上でクリアする方法の 2 種類がある。
次項以降にその方法を示す。

9-1-3-1.

field を指定してクリア

例として、tutorials の cavity の計算結果 folder「0.5」を例に取ってみる。この folder「0.5」に、
damBreak の field「alpha.water」もコピーしておく。
以上の状態は、U、p field の internalField には、nonuniform 形式（List 形式）でデータが入っており、
alpha.water field は、boundaryField の整合が全く取れていない状態になる。
下図は、timeFolder「0.5」を gridEditor で開いた状態になる。internalField には、List 形式でデータがり、field「alpha.water」は、boundary の整合が取れていないので、patch 内容が空白になっている。

これらの internalField と boundaryField をクリアしてみる。
TreeFoam 上からボタンをクリックして、「field へのデータセット」画面を表示させる。この画面上で、
152

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
まず操作する timeFolder を「latestTime:0.5」に設定しておく。
この画面は、field のデータを意図的に操作する画面であり、操作する timeFolder を変更すると言う事は、この時間から計算を開始したいと言う意味が込められているとみなし、controlDict のstartFrom が「latestTime」に書き直される。
この後、field をクリアする為に「internalField...」ボタンをクリックする。

「internalField...」ボタンをクリックすると、以下の画面が現れるので、クリアしたい field（今回は全ての field）を選択して、「OK」ボタンをクリックする。
この操作で選択した field の internalField が全て uniform 形式に変更される。
この変更は、internalField が nonuniform 形式（List 形式）の場合、その形式を uniform 形式に変更する
もので、元々 uniform 形式の場合は、変更せずそのまま。

153

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以上で、internalField がクリアできたので、boundaryField をクリアする。
boundaryField のクリアは、「field へのデータセット」画面上の「boundaryField...」ボタンをクリック
し、クリアしたい field を選択（今回は全ての field）し、「OK」ボタンをクリックする。

154

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以上の操作で、各 field の boundaryField の内容が全てクリアされ、メッシュとの整合がとれた状態になる。
クリアの方法は、boundary ファイルの patchType に応じて以下の様にクリアされる。
boundary の patchTypeboundaryField の patchType-------------------------------------------------------empty
type
empty;
symmetry
type
symmetry;symmetryPlane
type
symmetryPlane;
cyclictype
cyclic;cyclicAMI
type
cyclicAMI;
cyclicACMI
type
cyclicACMI;
cyclicSlip
type
cyclicSlip;
wdge
type
wedge;
その他
typezeroGradient;
以下が、再び gridEditor で timeFolder「0.5」の内容を確認した結果になるが、全ての internalField とboundaryField の内容がクリアされている。boundaryField の場合は、patchType に応じてクリアされる為、patch 名「frontAndBack」については、patchType が「empty」の為、全ての field が「type empty;」でクリアされている。

9-1-3-2.

gridEditor 上でクリア

前項では、field を指定して、internLField や boundaryField をクリアしたが、gridEditor 上でも同様な事が可能。gridEditor 上で行う事は、視覚的に操作内容が確認できるメリットがある。
前項の「field を選択してクリア」する方法は、視覚的に訴えられないが、ボタンをクリックするだけなので、アクション回数が少なく、素早くクリアできるメリットがある。
前項と同じ例で、internalField や boundaryField をクリアしてみる。

155

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
該当する timeFolder を gridEditor で開く。以下が timeFolder「0.5」を開いた状態になる。
空白 cell が存在しており、boundaryField の整合が取れていない状態。

まず、全ての internalField を選択し、ボタンをクリックして、internalField をクリアする。

下図が internalField をクリアした状態になる。

156

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

boundaryField のクリアは、以下の様に全ての boundaryField を選択して、「Delete」キーを押す。（又はセルのポップアップメニューから「cell 内容をクリア（空白 cell 作成）を選択する。）

上記操作により、下図の様に、選択した cell が全て空白 cell になる。この状態で空白 cell に default の cell 内容を設定する。

ボタンをクリックして下図が空白 cell に default の内容がセットされた状態になる。全ての boundaryField が default の内容でクリアされている。
この状態は、gridEditor 上で修正されているだけの為、最終的に ボタンで保存して、ファイルがクリアされた事になる。
157

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以上の操作で、internalField と boundaryField の内容が全てクリアできた事になる。
gridEditor 上では、以上の様に、視覚的に何をどうしているかが理解できるメリットがあるが、アクショ
ン回数が増えるので、操作が煩雑になってしまう。

158

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-2.

gridEditor の表示

9-2-1.

列（field）の表示

gridEditor は、各 field の patch 内容が表形式で確認できる為、理解しやすいが、field が多数あると横長の表ができあがり、表の内容が一望できなくなる。
この為、不要な field を非表示したり、表示順を変更したりできる様にしている。

9-2-1-1.

field の非表示

tutorials の simpleFoam：pitzDaily を例にとって確認する。
まず、tutorials の「incompressible/simpleFoam/pitzDaily」の blockMesh を作成し、gridEditor で境界条件を確認した結果が、以下になる。

上図は、全ての field を表示しているが、この内、k, epsilon を非表示にしてみる。
その方法は、下図の様に非表示させたい field（epsilon, k）を選択して、選択列ラベル部、またはセル部
を右クリックしてポップアップメニューを表示させ、「選択した field を非表示」を選択する。（下図は、列名部を右クリックした状態。）

159

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

ポップアップメニューの「選択した field を非表示」を選択すると、epsilon と k field が下図の様に非表示状態となる。非表示設定の場合は、ラベル名の色が濃い青に変わるので、現在の状態が非表示設定なのかそうでないかが判断できる。

尚、一度非表示設定を行うと、その状態が firstTime フォルダ内に隠しファイル「.displayField」が作成されるので、次回起動時には、これを読み込み起動するので非表示設定が反映された状態で起動する。
今の状態の「.displayField」ファイルの内容は、以下の様に、表示する field が記述されている。
---------------- .displayField の内容 --------------U
nuTildanutp----------------------------------------------------また、非表示設定された状態を元に戻す（全表示）為には、ポップアップメニューから、「全表示/非表示
field の切替え」を選択する。これにより、元の状態にもどる。

160

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-2-1-2.

field の表示順を変更

前項では、field の非表示設定を行ったが、ここでは、field の表示順を変更してみる。
下図が、field を全表示させている状態だが、この表示順を「U, p, k, epsilon」とし、これ以外は非表示
設定してみる。

その方法は、下図の様に、列ラベル部を右クリックしてポップアップメニューを表示させ、「field の表示順変更」を選択する。

この後、以下の画面が表示される。この画面上で、隠す field（nuTilda, nut）と、表示する field の表示
順を設定する。

161

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この画面を、最終的に以下の様に設定して、「OK」ボタンをクリックする事で、表示する field とその表示順が決定される。

この順番で表示する

以下がこの設定で、gridEditor を表示させた結果になる。field が「U, p, k, epsilon」の順番で表示され
ている。

162

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
尚、この設定は、前項と同様に firstTime フォルダ内に「.displayField」の隠しファイルができあがっている。この内容は、以下であり、表示する field 名が表示順に記載されている。次回起動時にもこの設定が反映される。
---------------- .displayField の内容 --------------Up
表示順に記載されているkepsilon----------------------------------------------------尚設定を元に戻す（全 field を表示する）には、前項と同様に、ポップアップメニューから、「全表示/非表示 field の切替え」を選択する事で、元の状態にもどる。

9-2-2.

行（patch 名など）の表示

gridEditor の行ラベルについては、patch 名が入るが、この patch 名の表示順は、boundary に記述されている順番で表示される。この表示順を patch 名で sort させて表示させる事ができる。
また、通常は表示されていない変数定義行を表示させる事ができる。field 内で「$iniTemp」等の変数を定義したい時に、この行を表示させて、この中で変数を定義する。

9-2-2-1.

patch 名を sort して表示

patch 名が多くある場合は、patch 名を sort させて表示させると判りやすくなる。
その方法は、以下の様に、行ラベル名部で右クリックしてポップアップメニューを表示させ、このメニューの「patch 名 sort する/しない切替え」を選択する。この操作により patch 名を sort して表示させる事がで
きる。

163

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以下が patch 名を sort して表示させた状態になる。尚、patch 名を sort して表示させた状態は、以下の様に、「<sort patch>」が表示される。
また、この内容は、gridEditor 上の表示方法を変更しているのみで、実際の file の内容（patch の記述順）は、変わらない。

尚、patch 名を sort するかしないかの設定は、「$TreeFoamUser/data/gridEditor_data」ファイルに記録される。
この為、次回起動時もこの設定が反映される。
以下は、現在の「gridEditor_data」の設定内容になる。
-------------------------- gridEditor_data の内容---------------##
gridEDitor の設定##patch 名を sort させて表示させる
sortPatchName yes#cell 内の表示行数
maxLinesCellInternal 5
maxLinesCellPatch 10#binnary→ascii 変換する行数
nMaxLinesBinToAscii 20---------------------------------------------------------------

164

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-2-2-2.

変数行の表示gridEditor 上では、「$iniTemp」等の変数を使うことができるが、使うためには変数を定義する必要がある。gridEditor では、変数を定義する場所として変数定義行を準備しているが、default の状態は、これが非表示になっているので、変数を定義することができない。
変数定義行を表示させるためには、以下の様に行ラベル上で右クリックしてポップアップメニューを表示させ、「変数定義行（空）の表示/非表示の切替え」を選択する事で、変数定義行を表示する事ができる。

以下が、変数定義行を表示させた状態になる。変数定義行（水色）が 2 行が表示されている。
otherNames：boundaryField の外側で定義
otherNames（boundary）：boundaryField の中で定義

165

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

尚、変数が定義されている field があると、以下のような表示となり、変数定義行を消す事ができなくなる。
（「iniPress 0;」を定義したため、変数定義行が表示された状態になる。）

9-2-3.

セル（patch 内容など）の表示

gridEditor は、表形式で internalField や patch データを表示している。field に計算結果が入ると、internalField や patch 内には、膨大なデータが入っており、これを表形式で表示させる事はできない。
166

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
この為、表のセルに表示させる行数の制限を設けており、設定された行数以上は表示させない設定になっている。
この行数の設定は、gridEditor のセル部分を右クリックしてポップアップメニューを表示させ、「cell 内の表示行数・データ数変更」を選択して、現れた「表示行数・データ数の設定」画面上で、設定する。

上記画面上で、internalField は 5 行、boundaryField は 10 行に設定されている。
この行数を両方共 6 行に設定して、gridEditor を表示させた結果が以下になる。6 行に変更されて表示され
ている。
167

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この設定は、「$TreeFoamUser/data/grideditor_data」ファイルに保存されるので、次回起動時にもこの設定が反映される。
以下が「gridEditor_data」の内容になる-------------------- gridEditor_data の内容 --------------##
gridEDitor の設定##patch 名を sort させて表示させる
sortPatchName yes#cell 内の表示行数
maxLinesCellInternal 6
maxLinesCellPatch 6

cell 内の表示行数設定内容#binnary→ascii 変換する行数
nMaxLinesBinToAscii 20------------------------------------------------------------

168

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-2-4.

空 patch（face 数が「0」の patch）の作成、削除

モデル内部に patch を作る場合には、face の数が「0」の空 patch を予め作成しておく必要があった。
（OPENFOAM-2.2 以降は空 patch を作成しなくても内部 patch が作成できる様になっている。）
また、snappyHexMesh でメッシュを作成した時などは、空 patch が多数発生してしまうことがある。
この様な場合に、次項以下にあるように gridEditor を使うことで、容易に空 patch を作成したり、削除する事ができる。

9-2-4-1.

空 patch の作成方法

tutorials の cavity を使って、空 patch を追加してみる。空 pacth を追加する為には、gridEditor 上でpatch 名部（行ラベル部）を選択した後、右クリックしてポップアップメニューを表示させ、「新しい空patch 追加」を選択する事によって、1 ヶの空 patch を追加する事ができる。
複数の空 patch を追加する場合は、複数行を選択して、ポップアップメニューを表示させる事によって、複数行（選択した行数分）の空 patch を追加する事ができる。
以下の例は、3 行の空 pacth を追加する例になる。
下図の様に 3 行選択した上で、patch 名部（行ラベル部）を右クリックしてポップアップメニューを表示させ、「新しい空 patch 追加」を選択すると、3 行の空 patch が追加される。

以下は、3 行の空 patch を追加した状態になる。空 patch（face の数が「0」のパッチ）は、黄色で表示される。また、追加と同時に各 field の boundaryField の整合性も取るので、空 patch の boundaryField には、「zeroGradient」が設定される。
さらに追加する場合は、引き続き、追加する行数分の行を選択して同様な操作を行う事により、追加できる。

169

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

また、patch 名は「newPatch_0」の様な patch 名が付加されている。この patch 名を変更する場合は、変更
したい patch 名部をダブルクリックする事によって、patch 名が修正できる。

9-2-4-2.

空 patch の削除

空 patch を削除する場合は、削除したい空 patch を選択して、前項と同様にポップアップメニューを表示させ、「空 patch 削除」を選択すると、選択行の空 patch が削除される。
全ての空 patch を削除する場合は、ポップアップメニューから「全ての空 patch 削除」を選択すると、全ての空 patch を削除してくれる。

9-2-5.

空白セルを zeroGradient で埋めるモデルが異なる他の case から field をコピーすると、boundary の整合が取れなくなる。このような fieldを gridEditor で読み込むと、boundary の整合が取れていない patch の内容が空白で表示される。
以下は、boundary の整合が取れていない field を読み込んだ状態になる。T field が boundary の整合が取れていない。
この状態で、 ボタンをクリックすると、空白セルを「zeroGradient」で埋める事ができる。（正確には、
boundary の patchType に応じた内容で埋める。）これにより、boundary の整合が取れる。

170

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以下は、 ボタンをクリックした状態になる。空白セルが boundary の patchType に応じた cell 内容で埋められている。（今回の場合は、「zeroGradient」と「empty」で埋められている。）

今の状態は、gridEditor 上のみで整合が取れている状態なので、 ボタンをクリックして、保存する必要がある。（保存して最終的に boundary の整合が取れた状態になる。）

171

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-2-6.

internalField をクリア

計算結果が入っている timeFolder を gridEditor で開くと、internalField 内には、nonuniform 形式（List
形式）で膨大なデータが入っている。
この nonuniform 形式のデータを uniform 形式に変更して、internalField をクリアする事ができる。
以下は、計算結果が入っている timeFolder を gridEditor で表示した状態になる。この中で T, U, p fieldの internalField をクリアしてみる。

まず、以下の様に、クリアしたい internalField を選択し、右クリックしてポップアップメニューを表示させ、「internalField のクリア」を選択する。

以上の操作で、以下の様に internalField がクリアされた状態になる。この後、 ボタンをクリックしてクリアした状態を保存して、field を書き換える。（保存しないと、クリアした結果が反映されない。）

172

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

尚、選択した internalField の内容が uniform 形式の場合は、変更せずそのまま。その内容が nonuniform
形式の場合にクリア（nonuniform 形式を uniform 形式に変更）する。
また、uniform 形式への変更は、そのデータタイプ（scalar、vector、symmTensor, tensor）に応じて、値を「0」クリアする。

9-2-7.

cell データを editor で編集（「...」付きデータの編集）

gridEditor では、cell に表示する最大行数を設定して、その行数以上は、表示させない様にしている。
この理由は、計算結果が入った field を gridEditor で開いた場合、cell 内のデータ量が膨大になり、表示しきれなくなる為。（特に internalField 内のデータは、1 ヶの cell 内では表示しきれない。
この為、cell に表示する最大行数を設定して、それ以上は表示させない様に設定し、データの最後には「...」を追加して、まだデータが続く事を表示させている。
これにより、gridEditor の扱うデータが減るので、gridEditor を軽快に作動させる事ができる。
cell 内に表示させる最大行数の設定は、9-2-3 項に示す方法で設定している。
これにより、cell 内に表示できる行数（デフォルトの設定は 10 行）に制限があるので、この行数以上の境界条件を設定・編集する事ができなくなってしまうので、これが編集できる様に工夫している。
例えば、tutorials の incompressible/pimpleFoam/TJunction の境界条件を下図に示しているが、
field「p」の patch「inlet」部の境界条件が、cell 内の最大表示行数を超えている。（cell 内の最後が「...」で終わっている。）

173

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この様な場合、これを編集する為には、その cell をダブルクリックすると、editor でその cell が編集できるようになる。内容を編集後、editor を閉じる事によって、その内容が field に反映される。

また、計算結果が入った field を gridEditor で開いた場合も同様な状態になる。以下は、damBreak のtimeFolder「1」を gridEditor で開いた結果になる。

174

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

全ての internalField と p field の patch 内容が全て表示されていない。（nonuniform 形式のデータの為、データ量が膨大であり、cell 内に表示しきれない。）
U field の internalField 部と、p field の leftWall patch 内容をダブルクリックして、editor で開いた状態を確認すると、以下の様に確認できる。（同時に 2 ヶの editor を開くことができないので、下図は 1 ヶづつ editor で開いている。）
同時に複数の editor を開いて確認する場合は、該当する列ラベル部（field 名部）をダブルクリック
して、field 内容全体を editor で開く様にする事で、複数の editor を開き、同時に確認できる。
データ部の表示は、データ数の制限を設けているので、データ部の最後は「...U.0...」の様なインデック
スが付加されている。このデータ数制限の設定は、8-1-5-2 項を参照。
この為、「nonuniform List<vector>...」から「...U.0...」のインデックスまでは、編集できない事になる。
この為、この例では、U の internalField の内容は、編集できない。p field の leftWall の patch 内容につては、「type calculated;」の行のみ編集でき、後は編集できない事になる。

175

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

176

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-3.

field へのデータセット

9-3-1.

setFields によるデータセット

tutorials の damBreak の様に、field 内の特定部分に値をセットする場合、setFieldsDict を作成し、setFields コマンド実行して、作成する。値をセットする field や特定領域が多数ある場合は、単純作業が続くことになるので、ここで説明する方法を使った方が楽に setFieldsDict を作成する事ができる。

9-3-1-1.

起動方法と起動画面

起動は、TreeFoam 上の ボタンをクリックして現れた「fields へのデータセット」画面上の「setFields」
タグ上の「setFieldsDict 作成...」ボタンをクリックして起動する。
尚、「field へのデータセット」画面内には、この case 内に setFieldsDict が存在する場合、これを読み込
んで、Dict 内で使用している cellSet や field を選択した状態に設定する。setFieldsDict が存在しない場
合は、リストのみ表示されて選択された状態にはならない。
今回の例では、解析 case を 7-2 項で作成した case「damBreakZone」にしているので、setFieldsDict 内に記述してある cellSet（waterHi、waterLo）と field（alpha.water）が選択された状態になっている。

177

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
上記状態から「setFieldsDict 作成...」ボタンをクリックすると、以下の画面が表示される。この画面上にデータを入力して、setFieldsDict を作成する事になる。

9-3-1-2.

cellSet、field 追加

前項で、選択した cellSet と field で、表を作成しているので、これらの洩れがあった場合、この画面上でも追加できる。
cellSet を追加する場合は、「cellSet 追加...」ボタンをクリックして、追加したい cellSet 名を選択して追加することになる。新たに cellSet を追加するためには、追加したい cellSet が存在している必要がある
ので、cellSet がない場合には「topoSetEditor 起動」ボタンをクリックして、cellSet を新たに作りだしておく必要がある。

178

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
field を追加する場合は、「field 追加...」ボタンをクリックして、追加したい field を選択する。

以上の操作を行って、cellSet と field を追加した結果が以下になる。新たに cellSet「waterMiddle」とfield 「U」が追加されている。

9-3-1-3.

box、cylinder、shpere 追加

box を追加する場合は、「box 追加」ボタンをクリックする事で、以下の様に box を追加する事ができる。
cylinder（円柱）、sphere（球）の場合も同様に、各ボタンをクリックする事で追加できる。
これらの場合は、最終的に box の座標を入力し直す必要がある。

179

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-3-1-4.

データ入力

該当する cell にデータを直接入力する。今回の場合、以下の様に入力した。
waterHi、waterMiddle、waterLo、box には alpha.water を「1」にセット
waterMiddle には、Y 方向の初速 0.01 をセット表形式にしていることによって、何をどうしたいのかが、直感的に理解できる様になっている。

180

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-3-1-5.

setFieldsDict 作成

入力した状態で setFieldsDict を作成する場合は、「Dict 保存」ボタンをクリックする事で、setFieldsDict が作成できる。また、「Dict 保存・実行」ボタンをクリックする事で、setFieldsDict を作成して、setFields を実行する事もできる。
以下が前項の設定で、作成した setFieldsDict の内容になる。
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //defaultFieldValues(
volScalarFieldValue alpha.water 0
volVectorFieldValue U (0 0 0));
regions(
cellToCell{
set waterHi;
fieldValues(
volScalarFieldValue alpha.water 1);}
cellToCell
181

TreeFoam 操作マニュアル （TreeFoam-2.36-151212){

set waterLo;
fieldValues(
volScalarFieldValue alpha.water 1);}
cellToCell{
set waterMiddle;
fieldValues(
volScalarFieldValue alpha.water 1
volVectorFieldValue U (0 0.01 0));}
boxToCell{box (0 0.19 -1) (0.34 0.29 1);
fieldValues(
volScalarFieldValue alpha.water 1);});// ************************************************************************* //9-3-1-6.

csv 保存、読み込み作成した表形式のデータを表形式のまま csv 形式で保存し、読み込む事ができる。
今回のデータを csv 形式で保存して、office で読み込んだ結果が以下になる。

182

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
表形式のイメージをそのまま保存する。また、この csv 形式を読み込む事ができるので、cellSet が多数ある場合は、office などでデータを入力して、読み込むこともできる。

9-3-1-7.

その他編集

前記した以外の編集方法として、行・列の削除、copy & paste、cell のクリアを表示しているボタンやポップアップメニューを表示させて、編集を行う事ができる。
これらの操作は、いずれも予め、対象の行・列・cell を選択した後、ボタンやポップアップメニューを選択して操作する事になる。

183

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-3-2.

mapFields によるデータセット

pimpleDyMFoam の様な移動メッシュを扱う場合、メッシュ移動と共にメッシュが潰れて歪になり、メッシュ
エラーで停止する事がある。このような場合、メッシュエラーの直前で停止させ、改めてメッシュを切り直して、新しいメッシュに今までの計算結果をマッピングする事によって、計算を継続させる事ができる。
また、メッシュを作成して、setFields で field にデータをセットした後、メッシュにレイヤを追加してし
まうと、メッシュが変わってしまっている為、field へのデータセットをやり直す必要が生じる。この場合も、setFields でデータをセットした field をレイヤを追加したメッシュに mapFields でデータを再セットする事ができる。
TreeFoam は、mapFields でデータをマッピングする GUI を備えている為、この様な場合、容易にデータをマッピングする事ができる。次項以降にその例を示す。

9-3-2-1.

移動メッシュの例

pimpleDyMFoam を使って、移動メッシュの計算を行ってみる。

9-3-2-1-1.

case の作成

solver は、pimpleDyMFoam を使うので、tutorials から「incompressible/pimpleDyMFoam/movingCone」をコ
ピーし、case 名を「movingValve」に変更しておく。この後、blockMesh を実行し、case を完成させておく。

9-3-2-1-2.

モデルの作成（メッシュ作成）

解析モデルは、以下のモデルを考える。
大きさは、200 x 10 x 40 mm のダクトにバルブ（スリット部：10 x 10 x 20 mm）が存在する。
バルブ（スリット部）は、inW 側から 40 mm の場所に存在する。

topW

frontBackW （ 2 面）

inW
valveTop
outW
40

bottomW

valveSide（ 2 面）

解析は、valveTop 部を上方へ移動させ、ダクトを狭める様に移動（流路が次第に狭くなっていく）させた
場合の流速や圧力分布を確認する。
184

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
stl ファイルは、以下のものを作成する。以下の 5 ヶの stl ファイルで閉じた形状になっている。
inW.stl
outW.stl
topW.stlbottomW
frontBackW
valveTop.stl
valveSide.stl

流入側
流出側
上面（壁）
底面（壁）
表裏 2 面（slip）
移動させる面（壁）移動とともに伸びる面（壁）これらの stl ファイルを「movingValve/model」フォルダを作成し、この中に保存しておく。
保存後、stl ファイルの、scale や solid 名を修正し、以下の様に作成した。

この stl ファイルを使ってメッシュを作成する。以下の csv ファイルでメッシュを切っている。
内が追記した内容。

185

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以下ができあがった mesh になる。
メッシュ作成時に、エラーが発生したが、手本にした tutorials の movingCone の blockMeshDict が複雑だったので、エラーが発生。この為、blockMeshDict を削除して、再実行した。（blockMeshDict が存在しない場合は、TreeFoam がデフォルトの blockMeshDict に置き換えて、実行する。デフォルトのblockMeshDict は、単純な構造の為、エラーは発生しない。）

186

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-3-2-1-3.

メッシュ移動の確認

作成したメッシュで、メッシュのみを移動させ、どこまで移動が可能なのか（メッシュエラーが発生しないか）確認してみる。
メッシュ移動用の case を作成する為、今の case をコピーして、新しく「movingMesh」の case を作成する。
この後、controlDict の内容を以下の様に修正する。（0.1s 間隔で 1s まで計算する設定。）/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.1
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatascii;
class
dictionary;location"system";objectcontrolDict;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ////application
application

pimpleDyMFoam;
moveMesh;startFrom

startTime;startTime

0;

stopAtendTime;endTime

1.0;

deltaT

0.1;//writeControl
writeControl

timeStep;adjustableRunTime;writeInterval

0.1;

purgeWrite0;

writeFormat

binary;writePrecision6;

writeCompression off;timeFormat

general;timePrecision

6;
187

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
runTimeModifiable true;
adjustTimeStep

no;

maxCo
0.2;
/*
functions{#include "cuttingPlane"}*/// ************************************************************************* //また、constant/dynamicMeshDict」を以下の様に修正する。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.1
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatascii;
class
dictionary;location"constant";
objectdynamicMeshDict;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //dynamicFvMesh

dynamicMotionSolverFvMesh;motionSolverLibs ( "libfvMotionSolvers.so" );solvervelocityComponentLaplacian;velocityComponentLaplacianCoeffs{
componentz;diffusivity
uniform;//componentx;//diffusivity
directional ( 1 200 0 );}// ************************************************************************* //さらに、system/fvSsolution 内に solver に「cellMotionUz」を追加しておく。
-----------------fvSolution の内容----------------------------------188

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)}:
UFinal{$U;
tolerance
relTol}cellMotionUx{
solverpreconditioner
tolerance
relTol}cellMotionUz{
solverpreconditioner
tolerance
relTol
}1e-05;
0;

PCG;
DIC;
1e-08;
0;

PCG;
DIC;
1e-08;
0;:-------------------------------------------------------------

境界条件は、gridEditor を起動して設定する。
移動方向が Z 方向になる為、field 名を「pointMotuinUx」を「pointMotuinUz」に修正する。
この後、境界条件を設定する。
移動させる設定：
固定する設定：valveTop 面を 0.01 m/s で移動させる。（1 s 間で 10 mm 移動する。）
bottomW、topW を固定する。

189

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以上の条件で solver を 1 s 間走らせる。（valveTop 面が 10 mm 移動する。）
この後、FOAM 端末を起動して、「checkMesh」を実行して、メッシュエラーを確認する。確認した結果、以下の状態になる。
0.6 s（6 mm 移動）までは、Mesh OK だが、0.7 s（7 mm 移動）では、メッシュエラーが発生している。
この為、このメッシュでは、0.6mm まで移動させる事が限界になる。
:
Time = 0.6
Checking geometry...
Overall domain bounding box (0 0 0) (0.2 0.01 0.04)
Mesh (non-empty, non-wedge) directions (1 1 1)
Mesh (non-empty) directions (1 1 1)
Boundary openness (8.96406e-18 -3.77545e-16 5.56993e-17) OK.
Max cell openness = 2.25524e-16 OK.
Max aspect ratio = 4.67778 OK.
Minimum face area = 3.33818e-07. Maximum face area = 1.75026e-05. Face area magnitudes OK.
Min volume = 3.32802e-09. Max volume = 3.26405e-08. Total volume = 7.73917e-05. Cell
volumes OK.
Mesh non-orthogonality Max: 44.2808 average: 3.36092
Non-orthogonality check OK.
Face pyramids OK.
Max skewness = 0.982128 OK.
Coupled point location match (average 0) OK.
Mesh OK.
Time = 0.7
Checking geometry...
Overall domain bounding box (0 0 0) (0.2 0.01 0.04)
Mesh (non-empty, non-wedge) directions (1 1 1)
Mesh (non-empty) directions (1 1 1)
Boundary openness (-2.44473e-18 6.81512e-17 5.56996e-17) OK.
Max cell openness = 2.3732e-16 OK.
Max aspect ratio = 8.76424 OK.
Minimum face area = 7.80121e-07. Maximum face area = 1.94884e-05. Face area magnitudes OK.
Min volume = 1.69806e-09. Max volume = 3.54536e-08. Total volume = 7.72917e-05. Cell
volumes OK.
Mesh non-orthogonality Max: 125.061 average: 4.36297***Number of non-orthogonality errors: 8.
<<Writing 8 non-orthogonal faces to set nonOrthoFaces***Error in face pyramids: 12 faces are incorrectly oriented.
<<Writing 8 faces with incorrect orientation to set wrongOrientedFaces
Max skewness = 3.88886 OK.
Coupled point location match (average 0) OK.
Failed 2 mesh checks.
Time = 0.8:
190TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-3-2-1-4.

pimpleDyMFoam による計算

inW 側から 1 m/s の流速を与え、valveTop 面を 0.01 m/s の速度で上昇させる設定で、計算する。
「movingValve」を解析 case に設定し、まず、constant/dynamicMeshDict を前項と同じ内容に修正しておく。
この後、境界条件を以下の様に設定した。

system/controlDict は、以下の様に修正している。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.1
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatascii;
class
dictionary;location"system";objectcontrolDict;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //application

pimpleDyMFoam;

191

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
startFromlatestTime;startTime

0;

stopAtendTime;endTime

0.6;

deltaT

5e-06;//writeControl
writeControl

timeStep;adjustableRunTime;writeInterval

0.1;

purgeWrite0;

writeFormat

binary;writePrecision6;

writeCompression off;timeFormat

general;timePrecision

6;

runTimeModifiable true;
adjustTimeStep

yes;

maxCo
0.5;
/*
functions{#include "cuttingPlane"}*/// ************************************************************************* //以上の設定で、0.6 s まで計算させる。
0.6 s 以上は、メッシュエラーが発生するので、計算は 0.6 s まで行い、これ以降は新たに作り直したメッシュ（0.6 s 時点の状態:valveTop が 6 mm 移動した状態）で計算を継続する。

9-3-2-1-5.

メッシュの作り直しとデータのマッピング

0.6 s までの計算が終了した段階で、valveTop を 6 mm 移動させた状態のメッシュを新たに作り直す。このメッシュに 0.6 s 後の計算結果を各 field にマッピングする事になる。
まず、「movingValve」の case をコピーし、case 名を「movingValve_0.6s」とし、「0」folder を「0.6」に修正しておく。この case 内のメッシュを 9-3-2-1-2 項と同様な方法で、メッシュを再作成する。

192

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)＜計算結果＞
movingValve0:0.6＜メッシュを作りなおした case＞
movingValve_0.6s
0.6
このフォルダにデータをマッピングする

データのマッピング方法は、マッピングする case「movingValve_0.6s」を解析 case に設定した上で、TreeFoam 上の ボタンをクリックして、「Field へのデータセット」画面を表示させ、「mapFields」タグを選択する。以下この画面上で、データをマッピングする事になる。
まず、編集する timeFolder が「latestTime:0.6」に設定されている事を確認する。
この後、sourceCase、sourceTime、fields、method を以下の様に設定する。
sourceCase：「参照...」ボタンをクリックして、計算結果が入っている case「movingValve」
を選択して、sourceCase を確定する。
sourceTime：「latestTime:0.6」に設定する。
fields：
U、p、pointMotionUz を選択する。（OF-3.0.0 以降は不要。）
method：(default)を選択する。
OF-3.0.0 以降は、すべての field が対象になるので、field の選択は不要になる。
以上を設定後、「mapFields 実行...」ボタンをクリックして、データをマッピングする。
マッピングには多少時間がかかるので、終了するまで待つ。

OF-3.0.0 以降は、 fieldの選択はしなくても可。

193

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

上記の選択で、以下のコマンドを実行したことになる。
$ mapFields /home/caeuser/myTutorials/movingMesh/movingValvepointMotionUz)' -sourceTime 0.6 -sourceRegion .

-fields '(U p

データをマッピングした結果が以下になる。
（このマッピングにより、pointMotionUz のファイル名が pointMotionUz.unmapped に変わっているので、このファイル名を元に戻しておく。）<movingValve_0.6s><movingValve> 0.6s 後U

U （マッピングした結果）

p

p （マッピングした結果）

データがマッピングできているので、さらに計算を継続してみる。
境界条件は、変わっていないので、このまま計算を継続する。1s まで計算させた。
下図が、最初(0s)から最後(1s）まで計算させた結果になる。
以下は、連続した結果を得るために、「movingValve_0.6s」の 0.6 フォルダに polyMesh をコピーし、0.6〜
1.0 s の結果を元の case「movingValve」にコピーして全体の結果を得た上で表示させている。
U （ 0.1s ）（ 1.0s ）（ 0.5s ）194TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
p （ 0.1s ）9-3-2-2.

（ 1.0s ）（ 0.5s ）setFields でデータセット後、レイヤを追加する例

damBreak の様に setFields でデータをセットする必要がある case でモデルにレイヤを追加する場合を考えてみる。
この場合は、データをセットするエリアを、予めメッシュ作成時に cellZone として定義しておくことで、
このエリアに容易にデータがセットできる。しかし、モデルにレイヤを付けてしまうと、メッシュが変わってしまう為、データをセットした結果が狂ってくる。この為、レイヤを追加する時に再度 cellZone を定義
し直して、データをセットし直す事になる。
しかし、snappyHexMesh を使わずにメッシュを作成した場合は、上記の方法が使えない為、以下の方法でレイヤを追加する事になる。また multiRegion の流体部にレイヤを追加する場合も、この方法を取る方がス
ムーズに修正できる。
1)
2)
2)
3)

cellZone を定義したメッシュを作成する。
seiFields でデータをセットする。
メッシュにレイヤを追加する。
レイヤ付きのメッシュに mapFields を使ってデータをマッピングする。

snappyHexMesh を使わずにメッシュを作った場合について、次項以降でその具体例を示す。
メッシュは、salome-Meca でメッシュを作成する。

9-3-2-2-1.

case の作成

まず case が必要になるので、6-2 項で作成した damBreak をコピー、case 貼り付けして、新しく「damBreak_layer」を作成する。この case フォルダ直下に model フォルダを作成しておく。このモデル
フォルダ内に、salome-Meca で作成したメッシュ（mesh.unv）を保存する事になる。

9-3-2-2-2.

モデルの作成（メッシュ作成、データセット）

モデルは、以下の形状を作成する。salome-Meca で作成している。

195

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

atmos
leftW
water
FrontBackW（ 2 面）
rightWbottomW

全体の大きさ ： 600 x 600 x 100 mm
water の大きさ ： 200 x 400 x 100 mm, R100 mm

以上のサイズで、そのまま、salome-Meca 上でメッシュを作成した。
メッシュサイズは、netgen-1D-2D-3D で、max:20, min:10 でメッシュを作成している。

water

できあがったメッシュを「damBreak_layer/model」フォルダ中に「mesh.unv」として保存しておく。
この unv 形式のメッシュを 7-3 項の方法で、FOAM 形式にメッシュ変換しておく。
メッシュ変換後、このメッシュの cellZone「water」から sellSet を topoSetEditor で作り出し、これにsetfields でデータをセットする。この結果が、以下になる。

196

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-3-2-2-3.

メッシュにレイヤ追加

レイヤを追加する為に、case「damBreak_layer」をコピー、case 貼り付けして、新しく「damBreak_addLayer」を作り出し、この case 中でメッシュにレイヤを追加する。
レイヤの追加は、7-1−6 項の方法でレイヤを追加する。レイヤを追加するパッチは、bottomW、rightW、leftW になるので、これらパッチのレイヤの設定を以下で設定。（全 patch とも同じ設定でレイヤを追加し
ている。）

197

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

下図がレイヤを追加した結果になる。うまくレイヤが追加されている。

9-3-2-2-4.

mapFields でデータをセットできあがったレイヤ付きのメッシュに、mapFields でデータをセットする。
方法は、9-3-2-1-5 項の方法でデータをマッピングする。下図が、マッピングした結果になる。

既存のメッシュにレイヤを追加した為に、メッシュの座標が微妙に変化しているので、water の R 部で 1 以
下の値が入っているが、データはマッピングできている。
尚、データをセットする領域が小さい場合（cell 数が少ない場合）は、mapMethod を通常は「(default)」
でマッピングするが、「mapNearest」を選択した方が、うまく設定できる。

198

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)（セットする領域が小さい場合）

199

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-4.

case 内の操作

9-4-1.

solver の入れ替え

simpleFoam 等の定常解を求めた後、モデル（メッシュ）を変更せずに、solver を変更して異なる解析（icoFoam や pisoFoam 等の非定常解）をする時にこれを用いる。
ただし、この方法は、コピー先から必要な file をコピーして持ってくるので、これを繰り返すと不要な
file が溜まってくる。
この例として、tutorials の pitzDaly で simpleFoam で計算し、この後、solver を非定常の icoFoam に変更
し、さらに非圧縮性の pisoFoam に変更して計算してみる。

9-4-1-1.

simpleFoam による計算

TreeFoam 上の tutorials の ボタンをクリックして、tutorials から、区分:incompessible、
solver:simpleFoam、case:pitzDaily を選択して、myTutorials フォルダにコピーする。
コピー後は、blockMesh を作成した後、実行する。
下図が、実行した結果になる。
速度 U

9-4-1-2.

速度 p

icoFoam に入れ替えて計算

前項で計算したモデルをそのまま使い、solver を icoFoam に変更して、計算してみる。
まず、前項で計算した case をコピー、case 貼り付けで新しい case「pitzDaly_icoFoam」を作成し、このcase を「解析 case」に設定しておく。
この case の solver を icoFoam に入れ替える為に、TreeFoam 上のの作成」画面上で、「solver の入れ替え」タグを選択する。

ボタンをクリックして、「新しい case

この後、ラジオボタン「tutorials」を選択して、「参照...」ボタンをクリックして、現れた画面上で、区分「incompressible」、 solver「icoFoam」、case「cavity」を選択し、「OK」ボタンをクリックして、
icoFoam の case を選択する。

200

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以上の操作で、「新しい case の作成」画面に戻った時、下図の様に、tutorials の icoFoam を使った caseの directory が内の様に取得できている。
この後、「コピー開始」ボタンをクリックして、solver を icoFoam に入れ替える。

201

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

solver を入れ替える操作は、コピー先の case から以下の file をコピーしてくる。
・constant フォルダ内の全 file をコピー（上書き）・system フォルダ内の全 file をコピー（上書き）・field に関しては、不足している field のみコピーして、boundary の整合をとる。
simpleFoam と icoFoam の solver を比較した時、以下の状態の為、timeFolder 内の U, p field に関しては、
コピーせず、入れ替わっていない。constant 内の transportProperties と、system 内の controlDict,
fvScemes, fvSolution は、コピーして入れ替わる。
＜simpleFoam/pitzDaily＞
timeFolderUepsilonk
nuTildanut
pconstant
RASProperties
transportProperties
systemcontrolDict
fvSchemes
fvSolution＜icoFoam/cavity＞
timeFoladerUpconstanttransportProperties
syatemcontrolDict
fvSchemes
fvSolution

transportProperties の内容は、icoFoam の cavity（コピー元）のデータが入っているので、動粘性係数がnu = 0.01 m2/s になっている。この為、この値を、simpleFoam：pitzDaly と同じ値（1e-5 m2/s）に変更
202

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
する。
constolDict の内容は、deltaT と endTime を設定し直す。
deltaT は、クーラン数が 0.5 程度になる様な deltaT に設定する。最小 cell サイズ約 0.5e-3 m、流速 10m/s なので、deltaT = 0.5e-3 / 10 * 0.5 = 0.00002 s 程度に設定する。
endTime は、流束 10 m/s で、モデル寸法約 0.3 m なので、充分安定する為には、10 回程度通過する時間が必要になる。この為、endTime = 0.3 / 10 * 10 = 0.3 s 程度の時間が必要になる。
以上により、以下の様に設定した。
deltaT
endTimewiteControl
witeInterval

0.000020.1（0.1 に縮めて計算）
adjustableRunTime
0.01

これで計算した結果が以下になる。
速度 U

9-4-1-3.

速度 ppisoFoam に入れ替えて計算

前項の icoFoam で計算した case をコピーして、「pitzDaily_pisoFoam」に case 名を変更しておく。
この後、前項と同様に、tutorials から、区分「incompressibel:非圧縮性流れ」、solver「pisoFoam」、
case「les/pitzDaily」の solver に入れ替える。
icoFoam と pisoFoam の solver を比較すると、以下の差がある為、solver の入れ替えに際し、timeFolder 内の nuSgs, nuTilda をコピー先からコピーして、boundary の整合をとる。尚、U, p, (k), (nuTilda)については、既に存在しているので、コピーせずそのまま。
constant 内の LESProperties, transportProperties, turbulenceProperties と system 内の controlDict,
fvScemes, fvSolution も、solver の入れ替えに際し、コピー先からコピーして、入れ替える。
＜icoFoam/cavity＞
timeFolderUp(epsilon)(k)(nuTilda)(nut)
constant＜pisoFoam/les/pitzDaily＞
timeFoldeUknuSgs （OF-2.4 以下の場合）
nuTildapconstant203

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
transportProperties(RASProperties)
systemcontrolDict
fvSchemes
fvSolution

LESProperties
transportProperties
turbulenceProperties
systemcontrolDict
fvSchemes
fvSolution

transportProperties 内の動粘性係数 nu を確認すると、1e-05 m2/s であり、変更せずそのまま。
controlDict の内容は、deltaT
endTimewiteControl
witeInterval

0.00001
0.1
timeStep100

なので、そのまま。
field に関しては、OF-2.4 以下の場合、nuSgs をコピー先からコピーしてきているので、この境界条件を以下の様に設定した。（OF-3.0.0 以上の場合、境界条件の再設定は不要。）

この設定で計算させた結果が以下になる。

204

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-4-2.

mesh の入れ替え

このメッシュの入れ替えは、2 ヶの case を準備し、この case 間でメッシュを入れ替える。この方法は、7-1項の方法で作成したメッシュを計算したい case にメッシュをコピーする場合に用いると便利。
例として、cavity と damBreak のメッシュを入れ替えてみる。（cavity のメッシュを damBreak 側にコピーする。）その方法は、以下の様に「damBreak」側を解析 case に設定し、 ボタンをクリックし、現れた画
面上で、「mesh の入れ替え」タグを選択し、このタグ内でメッシュ入れ替えを行う事になる。

上記「新しい case の作成」画面内は、メッシュのコピー元、コピー先とも「damBreak」に設定されているので、コピー元を「cavity」に設定する。この為に、「case 変更（元）」ボタンをクリックして、「cavity」に変更する。以下がコピー元を「cavity」に変更した状態になる。
コピー元を「cavity」に変更した状態で、以下の様に、各々メッシュの場所を選択して、「コピー開始」ボタンをクリックする。今の状態は「cavity/constant/polyMesh」を「damBreak/constant」フォルダにコピーする設定になる。

205

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この様にメッシュを入れ替えたい case を 2 ヶ準備して、この間でメッシュを入れ替える事ができる。準備する case は、multiRegion の case であっても、問題なくコピーできる。
また、メッシュを入れ替えるという事は、internalField の内容や boundary の整合が全く取れなくなってしまうので、これらは、全てクリアされる。

206

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-5.

内部 patch の作成

9-5-1.

cyclic、mapped、baffle の patch 作成方法

モデル内部に cyclic, mapped, baffle の内部 patch を作成してみる。モデルは、以下の様にモデル内部の中心に内部 patch 用の円柱形状を定義する。この円柱形状の面に cyclic, mapped, baffle の内部 patch を定義してみる。

sideW （ 4 面）

inW

back

cylinderW

outW
front
＜モデルのサイズ＞
解析領域： 100 x 40 x 40 mm
円柱： Φ20 x 15 mm

このモデルで以下の stl ファイルを作成する。
front.stl, back.stl, sideW.stl
patch 用inW.stl, outW.stl, cylinderW.stl
内部 patch 用
内部 patch と stl ファイルを以下の様に設定し作成する。
cylinderWbaffleinW.stl
mappedPatch
outW.stl
cycliccase は、tutorials の cavity をコピーして作成した case を使っている。
この case 内にて、上記 stl ファイルを使って、7-2 項の方法（snappyHexMesh）で、メッシュを作成する為の csv ファイルを以下の様に作成した。内部 patch を作成する為に定義した cylinderW, inW, outW は、
faceZone として設定している。

207

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
できあがったメッシュが以下になる。予定通りに faceZone ができあがっている。

内部 patch 用の円柱
（ faceZone ）全体

できあがったメッシュに、内部 patch を作成する為に、TreeFoam 上の ボタンをクリックして、現れた画
面上で、「内部 patch 作成...」ボタンをクリックして、「内部 patch の作成」画面を表示させ、ここで内部 patch を作成する。

208

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

内部 patch は、faceZone を元に作成するので、前記「内部 patch の作成」画面が表示された時点で、いま存在している faceZone のリストが表示されている。
今回は、各々の faceZone から以下の内部 patch を作成するので、以下順番に説明する。
FaceZone
内部 patch----------------------------cylinderW
baffleinW
mappedPatch
outW
cyclic1)cylinderW（baffle）名前リスト作成

以下の様に faceZone「cylinderW」を選択する。この選択により、master、slave に patch 名が表示されるが、ここでは baffle を作成するので、master、slave とも、同じ名称に変更する。
このあと、「patch 作成」ボタンをクリックして、名前リストに登録しておく。

209

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
尚、誤って名前リストに登録してしまった場合は、該当する名前リストを選択して、「行削除」ボタンをクリックして、その行（名前リスト）を削除して、再度登録し直す。

2)

inW（mappedPatch）名前リスト作成

前項と同様に、faceZone「inW」を選択する。master、slave 名は、そのままにしておく。
このあと「mappedPatch 作成」ボタンをクリックして、名前リストに登録する。

3)

outW（cyclic）の名前リスト作成

前項と同様に faceZone「outW」を選択する。master、slave 名は変更せずそのまま。
このあと、「cyclic 作成」ボタンをクリックして、名前リストに登録する。

210

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

4)

createBafflesDict 作成、実行

以上の操作により、内部 patch を作成する為の全ての名前リスト（下表）が取得できた事になる。
Type
faceZonemasterslave
備考-----------------------------------------------------------------------patch
cylinderWcylinderWcylinderWbaffle 用
mappedinW
inW_masterinW_slave
mappedPatch 用
cyclicoutW
outW_master
outW_slave
cyclic 用
この情報を元に createBafflesDict を作成する。その方法は、「Dict 作成」ボタンをクリックする。これにより、Dict ができあがる。引き続き「Dict 実行」ボタンをクリックして、内部 patch を作成する。

211

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以下ができ上がった、createBafflesDict になる。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.4.0
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatascii;
class
dictionary;location"";
objectcreateBafflesDict;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //// Whether to convert internal faces only (so leave boundary faces intact).
// This is only relevant if your face selection type can pick up boundary212

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)// faces.
internalFacesOnly true;// Baffles to create.
baffles{cylinderW//baffles is created{//- Use predefined faceZone to select faces and orientation.
type
faceZone;zoneNamecylinderW;patches{master{//- Master side patch
namecylinderW;
type
patch;}
slave{//- Slave side patch
namecylinderW;
type
patch;}}}
inW//baffles is created{//- Use predefined faceZone to select faces and orientation.
type
faceZone;zoneName
inW;
patches{master{//- Master side patch
nameinW_master;
type
patch;}
slave{//- Slave side patch
nameinW_slave;type
mappedPatch;sampleRegion region0;
sampleMode nearestPatchFace;samplePatch inW_master;
}
}
}
outW
//baffles is created{//- Use predefined faceZone to select faces and orientation.
213

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)}

type
faceZone;zoneName
outW;
patches{master{//- Master side patch
nameoutW_master;
type
cyclic;neighbourPatch outW_slave;
}
slave
{
//- Slave side patch
nameoutW_slave;type
cyclic;neighbourPatch outW_master;}}}//************************************************************************* //5)

内部 patch の確認

内部 patch は、「Dict 実行」ボタンをクリックする事で、現在の解析 case 内に、「subCase」フォルダが作成され、この case に内部 patch が追加されたメッシュができあがっている。
この為、TreeFoam 上で ボタンをクリックして、Tree 構造を再読み込みし、「subCase」フォルダを解析
case に設定し直して、できあがった内部 patch を確認する。
解析 case 名が元々「subCase」で、この中で、内部パッチを作成した場合は、subCase フォルダは作成されず、その case 内のメッシュに内部パッチが追加される。
gridEditor を起動して、内部 patch を確認すると、以下の様に確認できる。

214

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)6)

境界条件の設定

内部 patch 付きのメッシュができあがったので、この patch を使って計算できる状態にあるが、計算する為には、境界条件を設定する必要があるので、ここで設定する。
計算は、以下の様に設定する。
inW_masterinW_slavecylinderW
outW_master
outW_slave

p を「0」
p を「10」壁
cycliccyclicinW の表裏に圧力差を設定し、 cylinder 内に流入させる

outW の表裏は、 cyclic に設定し、流出させる

以下が、設定した結果になる。
この設定は、モデル内部に送風器を設置したイメージで、outW から流出して広がり、そのまま回りこんで215

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
inW 側に流れこむ状態を計算している。

bafflemappedPatch

cyclic

6)

計算開始

設定した境界条件で、計算を開始してみる。この case は、元々 tutorials の cavity をコピーして作成した
case の為、メッシュ以外は、cavity の設定がそのまま残っている。
この設定のまま、計算を開始させた結果が以下になる。
そのままの設定では、計算がうまく収束しなかった為、controlDict 内の deltaT を 0.005→0.001 に変更して計算させている。
圧力 U

速度 U

216

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
以上の方法で、cyclic や mapped、baffle の内部 patch を作成する事ができる。
尚、OF-2.1 以前では、内部 patch を作成する為には、空 patch（face の数が「0」の face）が必要だったが、OF-2.2 以降からは、空 patch は不要で、faceZone さえあれば、今回のように内部 patch を作成する事ができる。

9-5-2.

cyclic、baffle を含む mesh の並列計算方法

cyclic や baffle の patch を作成したモデルを並列計算する場合には、注意が必要になる。
cyclic の場合、表裏のペアとなる face を持っている。baffle についても、表裏のペアになる face を持っている。これらペアになる face が並列計算の為のメッシュ分割時に、ペアの face が分割されてしまい、同
じ cpu でペアになる相手の face が存在しない事が生じてしまうと、実行時にエラーが発生する。
この時のエラーの症状は、シングルコアでは、計算がうまく走る。並列計算させると、分割数（cpu 数）によって、エラーが発生したり、しなかったりする。
mappedPatch も同様にペアになる face を持っているが、mappedPatch の場合は、patch 間の計算をする
時に、全 cpu が持っている相手側の face の値を取得した上で、自身の face の値を計算しているので、エラーの発生はない。
multiRegion の計算（chtMultiRegionFoam の計算）では、region 間の patch が mappedPatch（mappedWall）で設定されているが、並列計算が問題なく計算できていることからも、これが伺える。
この様なエラーが発生した場合、以下の設定を行うことで、エラーを回避する事ができる。
TreeFoam 上の ボタンをクリックして、「並列計算」画面を表示させる。
この後、「preserve」をチェックして、「preserve 設定...」ボタンをクリックし、「preserve 設定」画面を表示させる。この画面上で、設定を行う事になる。
1) cyclic の設定
cyclic の場合、「outW_master」「outW_slave」に設定されている。この為、patches 欄で「outW_master」と「outW_slave」を選択して「選択>>」ボタンをクリックして、preservePatches 側に移動させる。
2) baffle の設定「preserveBaffles の設定」にチェックをつける。
以上の設定を行った後、「preserve 設定」ボタンをクリックして、設定を行う。この操作により、decomposeParDict が書き換わる。
修正された decomposeParDict を使って、メッシュ分割をやり直す事によって、表裏のペアになる face が分割されず、ペア間の計算が同じ cpu で計算できる事になる。

217

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以下が、修正された decomposeParDict の内容になる。

218

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //numberOfSubdomains 4;
preserveBaffles true;preservePatches(
outW_master outW_slave);

5 行が追加//- Keep owner and neighbour on same processor for faces in zones:// preserveFaceZones (heater solid1 solid3);//- Keep owner and neighbour on same processor for faces in patches:// (makes sense only for cyclic patches)//preservePatches (cyclic_left cyclic_right);//- Keep all of faceSet on a single processor. This puts all cells// connected with a point, edge or face on the same processor.
// (just having face connected cells might not guarantee a balanced// decomposition)// The processor can be -1 (the decompositionMethod chooses the processor// for a good load balance) or explicitly provided (upsets balance).
//singleProcessorFaceSets ((f0 -1));//- Keep owner and neighbour of baffles on same processor (i.e. keep it// detectable as a baffle). Baffles are two boundary face sharing the// same points.
//preserveBaffles true;
method// method// method// method// method// method

scotch;hierarchical;
simple;scotch;metis;
manual;simpleCoeffs
{
n
delta
}
hierarchicalCoeffs
{
n
delta
order
}

( 2 2 1 );0.001;( 2 2 1 );0.001;
xyz;/*
scotchCoeffs{
processorWeights ( 1 1 1 1 );219

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)}*/
metisCoeffs{
processorWeights ( 1 1 1 1 );}manualCoeffs{
dataFile}
distributed

"";

no;

roots
( );
//// Is the case distributed//distributed
yes;//// Per slave (so nProcs-1 entries) the directory above the case.
//roots//(//"/tmp"//"/tmp"//);// ************************************************************************* //以上の設定で、decomposePar を実行（メッシュ分割）すると以下のメッセージが出力される。
/*---------------------------------------------------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.4.0
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
Build : 2.4.0-f0842aea0e77
Exec: decomposePar
Date: Jul 12 2015
Time
: 15:00:49
Host: "caeuser-virtual-machine"
PID: 7268Case: /home/caeuser/CAE/CAE-FOAM/cyclicPatch/cyclicMappedBaffle/subCase_copy0
nProcs : 1
sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMasterallowSystemOperations : Allowing user-supplied system call operations// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //Create time220

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
Decomposing mesh region0
Create meshCalculating distribution of cells
Selecting decompositionMethod scotch
Keeping owner of faces in patches2(
outW_master
outW_slave)on same processor. This only makes sense for cyclics.
Keeping owner of faces in baffles

cyclic と baffle の設定部分のメッセージの内容

on same processor.

Finished decomposition in 0.13 s
Calculating original mesh data
Distributing cells to processors
Distributing faces to processors
Distributing points to processors
Constructing processor meshes
Reading hexRef8 data : cellLevel
Reading hexRef8 data : pointLevel
Reading hexRef8 data : level0Edge
Processor 0
Number of cells = 4864
Number of faces shared with processor 1 = 477
Number of faces shared with processor 2 = 444
Number of processor patches = 2
Number of processor faces = 921
Number of boundary faces = 1421:
省略

以上の操作で並列計算用にメッシュが分割できた事になる。この分割メッシュを使って並列計算を行う事によって、エラーの発生はなくなる。

221

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-6. multiRegion の case
9-6-1.

case 作成例

実際的な応用として、multiRegion の case を作成してみる。
解析の内容は、空気と固体間の熱移動を計算する為の case を作成する。この case は、新しいモデルでメッ
シュを切り直し、region も作り直す事で進める。

9-6-1-1.

case の作成

tutorials 内の流体・固体間の熱移動が計算できる case「multiRegionHeater」をコピーして、これを基本に計算を進めていく。
コピー方法は、6-1-2 項と同様な方法でコピーする。
区分「heatTransfaer」、solver「chtMultiRegionFoam」、case「multiRegionHeater」を選択して、このcase を myTutorials フォルダにコピーする。
コピー後は、「./Allrun」を実行して、case を完成させておく。case が完成した後は、TreeFoam 上の ボ
タンをクリックして、計算結果等の不要なファイルやフォルダを削除して case を初期化しておく。
この後は、次項以降に従って、必要なファイルの保存と region を削除して multuRegion 用の masterCase となるものを作成していく。

9-6-1-1-1.

region 内のファイルを保存

メッシュを新しく作り直して multiRegion の case を作成する場合、region も作り直す事になる為、今のcase 内にある region は、全て削除する事になる。この為、region 内にある properties や fvSchemes 等の必要なファイルを保存した上で region を削除する。
各 region 内にある必要なファイルは、「0」、「constant」、「system」フォルダ内に散らばっている為、TreeFoam では、これらの各フォルダ内に、保存用のフォルダを準備して、この中に保存する方法をとっている。
その保存方法は、以下の様に TreeFoam 上の ボタンをクリックして、「region 内 file 操作...」ボタンをクリックして現れた「region のファイル操作」画面上で行う。
この画面上では、region や各フォルダ（0、constant、system）の選択が容易にできるので、ファイルのコ
ピーをスムーズに行うことができる。

222

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

223

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
この画面が起動した時点で、region 内の必要なファイルを保存するフォルダ（fluidRegions,solidRegions）が、「0」「constant」「system」フォルダ内に作成されるので、ここに必要なファイルを以下に示す方法で保存しておく。

1)

constant フォルダ内のファイル保存

今回の解析では、空気と固体の熱移動を計算する為、以下のファイルが必要になる。
流体側：「topAir」region 内の全てのファイル。
tutorials では、流体の計算を層流（laminar）で行っている為、層流の設定で今回計算する。もし、乱流の設定をするのであれば、bottomWater 内の「RASProperties」も保存しておき、乱流の設定にし直す必要がある。
固体側：必要なファイルは、どの region でも同じなので「heater」内の全てのファイル。
固体側では、材料の物性値を thermophysicalProperties で設定しており、このファイルの内容が各々の region で異なってくるはずだが、この物性値は、9-6-1-7 項で設定するので、この段階では、thermophysicalProperties のファイルが存在していれば問題ない。
これらファイルを保存する為に、「region のファイル操作」画面上で、以下の様に region とファイルを選択する。この後、流体側の「<<戻す」ボタンをクリック、同じく固体側の「<<戻す」ボタンをクリックする
事で、選択したファイルが fluidRegions, solidRegions フォルダ内にコピーされる。

以下がファイルを戻した状態になる。fluidRegion, solidRegions フォルダ内にファイルがコピーされている。今の状態は、ファイル名が「****.topAir」の様に、どの region からファイルを戻したかが、判る様に
224

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
なっているが、以後の操作の為に、ファイル名に付加されている region 名を削除したファイル名に変更しておく。
ファイル名から region 名を削除する方法は、ファイルを選択（複数選択可能）後、ポップアップメニューを表示し、「名前から region 名を削除」を選択して、region 名を削除する。
「<<戻す」ボタンでファイルを戻した場合は、必ず「****.topAir」の様にファイル名に region 名が付加されてファイルがフォルダ内に戻される。逆に「配布>>」ボタンをクリックした場合は、フォルダ内のファイルを各 region 内にコピー配布するが、「****.topAir」の様に region 名が付加されたファイルは、その region のみにコピーする。region 名が付加されていないファイルは、全てのregion にそのファイルをコピーして配布する。
この為、region 名を削除したファイル名に変更しておく事で、「配布>>」ボタンでそのファイルを全ての region に配布する事ができる。
意図的に特別な region のみに配布したい時は、ファイル名に region 名を付加しておく事で実現できる。
ファイル名修正後ファイルを戻した直後

2)

system フォルダ内のファイル保存

ここでは、必要になるファイルは、fvSchemes, fvSolution のみになるので、これを同様な方法で保存する。
以下の様に選択し「<<戻す」ボタンをクリックし、constant フォルダと同様に戻したファイル名から
region 名を削除したファイル名に変更しておく。

225

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

3)「0」フォルダ内のファイル保存「0」フォルダについても、topAir と heater 内の cellToRegion を除いた全てのファイルを選択し「<<戻す」ボタンをクリックして戻し、region 名を削除したファイル名に変更しておく。

226

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-6-1-1-2.

case 内の全 region を削除必要なファイルが保管場所に保存できたので、ここで不要な全 region を削除する。
今回の場合、新しいモデルでメッシュを作り直し、region も作り直す為、今の状態で存在している全てのregion は不要な為、全て削除する。
全ての region を削除する方法は、TreeFoam 上で ボタンをクリックして、「multiRegion の設定」画面を表示させる。この画面上で、以下の様に、「region 名の変更・追加・削除」ボタンをクリックして、「region の追加・削除」画面を表示させる。この後、この画面上で「全 region 削除...」ボタンをクリックする事で、全ての region を削除する事ができる。

この操作で、この case が multiRegion の case ではなくなり、通常の case になるので、再び TreeFoam 上のボタンをクリックした場合、「現在の case は multiRegion の case ではありません」と言う旨のエラーが出るようになる。
以上の操作で、multiRegion 作成用の case ができあがった事になる。
この case の名称を「multiRegionAirMaster」としておき、後で汎用的に利用できる様にしておく。

227

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-6-1-2.

モデルの作成（メッシュ作成）

モデルは、固体（材料：Cu）と空気との間で熱移動が発生する様な、以下のモデルを考える。
解析領域：80 x 40 x 40 mm
fineReg：20 x 20 x 30 mm
heater：Φ6 x 20 mm

底面中央に配置
底面中央に配置

解析内容は、heater 底面（heaterW）に熱流束を与え、heater を加熱させる。inW から流れを与え、heater
を冷やし、outW に抜けていく。この状態の温度分布を求める解析を行ってみる。

heater （ Cu ）sideW

fineReg（ mesh 細かい領域）

inW

outW

heaterW(heater の底面）

上記モデルの為、以下の stl ファイルを作成。
解析領域：
その他領域：

inW.stl, outW.stl, sideW.stl, heaterW.stl
air.stl, fineReg.stl, heater.stl

閉じた解析領域を構成

上記の中で、air.stl は、解析領域全体を air.stl としておく。（heater を抜いた領域にしない。）
fineReg.stl も同様に heater を抜いた形状にしない。（単純な直方体）
これらの stl ファイルでメッシュを作成することになる。メッシュ作成方法は、7-1 項と同様な方法でメッシュを作成する。
まず、作成した stl ファイルの保存先として、「multiRegionAirMaster/model」フォルダを作成し、この中に全ての stl ファイルを保存しておく。
保存した stl ファイルは、「snappyHexMesh による mesh 作成」画面上の「stl チェック...」ボタンをクリックして、scale などを確認しておく。今回は、以下で作成している。

228

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この後、特徴線を抽出する為に、「snappyHexMesh による mesh 作成」画面上の「Dict 編集...」ボタンをクリックして、特徴線を抽出する stl ファイルを、以下の様に選択して「OK」ボタンをクリックする。editor
が開くが、そのまま閉じておく。ファイルの選択は、fineReg.stl 以外の全てを選択。fineReg.stl は細かいメッシュの領域を作成するだけの為、特徴線の抽出は不要。
その後、「Dict 実行...」ボタンをクリックする事で特徴線が抽出できる。

特徴線を抽出した後は、「snappyHexMesh による mesh 作成」画面上の「csv 作成...」ボタンをクリックして、以下の様に、メッシュ作成用のデータを作成する。
fineReg は特徴線を抽出しないので、featureEdge 部は「空白」に設定しておく。
stl ファイルの記述順は、air を最後に記述する。
air は、元々、heater も含んだ解析領域全体の形状を stl ファイルにしているので、air を heater よりも先に記述すると、air の cellZone が先にできあがる事になる。この後で heater の cellZone は作れない。（cellZone の中に cellZone が作れない。）heater の cellZone を先に作ると、cellZone の外側に
air の cellZone を作ることになるので、heater 以外の領域全てが air の cellZone として定義される為。

229

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以上の設定でメッシュを作成した結果が以下になる。
air 領域
heater 領域

9-6-1-3.

温度の初期値の設定

今回の場合、流体、固体とも初期温度 300 K として計算する。この為、今の状態で、TreeFoam 上のンをクリックして、graidEditor を起動して、初期値を設定する。

ボタ

下図は、region「air」の内容を下図の内の様に設定した。region「heater」も同様に設定しておく。
初期値の設定は、温度 T のみ設定する。温度以外は、9-6-1-8 項で internalFields の値を変数として設定す
る為。

230

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

今回の場合は、region 数が少なく、また温度分布が無いので、前記した方法で問題ないが、部分的に温度設定を変えたい場合は、setFields で温度の値を設定する。この方法は、7-2-7、9-3-1 項を参照。

9-6-1-4.

領域分割

ここで、cellZone 毎に領域分割する。TreeFoam 上の ボタンをクリックして、「メッシュ操作」画面を表示する。この後、「領域分割(region)...」ボタンをクリックして、領域分割する。

231

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)「領域分割(region)...」ボタンをクリックすると、領域分割が開始される。分割中の log が TreeFoam 下部のテキストボックス中に表示されるので、確認できる。この領域分割は、「splitMeshRegions-cellZonesOnly」を実行している。
領域分割が終了すると、以下の画面が表示されるので、ここで、cellZone を選択して、それを流体、固体に分けて指定する。

232

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
設定前画面

設定後の画面以上の操作で、どの region が流体で固体なのか明確になったので、TreeFoam 側は、この情報を元に、regionProperties を作成し、timeFolder、constant、system フォルダ内の fulidRegions と solidRegionsに保存されているファイルを各 region にコピー配布する。
この後、changeDictionary を実行して、各 region 内の boundaryField の整合をとってくれる。
最後に、regionWallBoundaryConditions を実行して、region 間の境界条件を設定してくれる。
233

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
また、領域分割した case 名は「regCase」として、現在の case「multiRegionAirMaster」内に作成される。
この為、領域分割がうまく行かなかった場合は、regCase をフォルダ毎削除すれば、分割前の状態に戻る事ができる。
以後の操作の為、領域分割した case「regCase」を解析 case として設定しておく。

領域分割した case

9-6-1-5.

領域分割後の状態

領域分割した後のファイルの構成は、fluidRegions、solidRegions 内のファイルが各 region に配布されているので、以下の構成になっている。
multuRegionAirMaster0
model
regCase0
air
TU
epsilonkpp_rgh
heaterTpconstant
polyMeshairgradiationProperties
thermophysicalProperties
turbulenceProperties

親 casestl ファイルの保存先
領域分割した case0/fluidRegions 内の field

0/solidRegions 内の field

constant/fluidRegions 内のファイル

234

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
heaterpolyMeshrediationProperties
thermophysicalProperties
systemairchangeDictionaryDict
fvSchemes
fvSolution
heaterchangeDictionaryDict
fvSchemes
fvSolution
includeboundaryConditionsFluid
boundaryConditionsSolidvariableSetting

constant/solidRegions 内のファイル

この内容により親 case の境界条件が継承される
system/fluidRegions 内のファイル
この内容により親 case の境界条件が継承される
system/solidRegions 内のファイル
regionWallBoundaryConditions 実行により作成される
この内容により、 regin 間の境界条件が決定される

今の状態で、以下の内容が既に設定されている事になる。
・各 region が必要としているファイルが既に配布されている。
・親 case の境界条件が changeDictionary で各 region に継承されている。
領域分割前に patch の境界条件を設定すると、この内容が region の境界条件に反映される。
（分割前に境界条件を設定しても構わない。）
・region 間の境界条件が、regionWallBoundaryConditions により設定されている。
今の設定は、default の設定の為、regionWallBaoundaryConditionsDict を修正し、再度実行すること
で内容を修正できる。修正方法は、9-6-1-8 項参照。

9-6-1-6.

g の設定

tutorials の重力加速度 g の方向が Y 軸方向になっているので、これを今回のモデル Z 軸方向に合わせる。
方法は、まず、「regCase」が解析 case に設定されていることを確認後、TreeFoam 上の ボタンをクリッ
クして「region のファイル操作」画面を表示させ、「region 内の file 操作...」ボタンをクリック、「constant」タグを選択して、fluidRegions 内の「g」ファイルをダブルクリックして editor で開く。

235

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以下が「g」を開いて、重力加速度の方向を Z 軸方向に修正した状態。修正後、上図の「配布>>」ボタンをクリックして、流体 region にコピー配布する。region「air」内の g ファイルを直接編集しても構わない。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.1
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatascii;
classuniformDimensionedVectorField;
objectg;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //dimensions
value[0 1 -2 0 0 0 0];(0 0 -9.81);//Z 軸方向に修正// ************************************************************************* //9-6-1-7.

固体領域の物性値設定

固体領域の物性値は、固体 region（heater）内の thermophysicalProperties に記述するので、この内容を236

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
設定する。
設定方法は、TreeFoam 上の ボタンをクリックして、「region 内 file 操作...」ボタンをクリックし、「region のファイル操作」画面を表示する。この画面上で「固体の材料設定」タグを選択する。以下がこの画面を表示させた状態になる。この画面上で、固体 region の材料を設定する事になる。
TreeFoam は、固体材料のデータベースを持っており、このデータベースを開いた状態が表示されている。
この材料データベースの保存場所は、デフォルトでは、「~/OpenFOAM/multiRegionDB」に設定されている。
この場所にデータベースが存在しない場合（初めて「region のファイル操作」画面を表示した時）は、
TreeFoam がその場所にデータベースを作成する。
このデータベースを使えば、材料名を指定して、物性値が設定できる。デフォルトの材料は、Al, Cu, Fe,
ceramic, mold が設定されているが、新たな材料をデータベースに登録する事もできる。

この画面上で、固体 region の heater に Cu 材料を設定する。
設定方法は、材料 DB 内の「Cu」を選択する。この後、材料設定内の heater 行の「設定候補」欄をダブルクリックして設定する。（または、材料名とその材料を設定する region を選択（複数選択可）して ボタン
をクリックして設定する。）

237

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

選択
ダブルクリック

この状態で、Cu 材が設定候補として設定されたので、この材料を region に設定する為に、以下の様に「新材料を設定」ボタンをクリックする。この操作で、Cu 材が heater に設定されたことになる。

Cu 材料が設定されている

この内容を editor で確認する場合は、heater 行の「現在の設定」欄をダブルクリックする事で、確認できる。以下が確認した結果になる。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.2.0
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatascii;
class
dictionary;238

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
objectthermophysicalProperties;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //material

Cu;

thermoType{
type
heSolidThermo;
mixturepureMixture;transport
constIso;thermohConst;equationOfState rhoConst;
speciespecie;energysensibleEnthalpy;}
mixture{specie{nMolesmolWeight}
transport
{
kappa
}

1;
63;

372;

thermodynamics
{
Hf
0;
Cp
419;
}

}

equationOfState
{
rho
8960;
}

// ************************************************************************* //9-6-1-8.

region 間の境界条件

region 間の境界条件は、gridEditor で確認できるので、これで確認する。
TreeFoam 上から ボタンをクリックして、gridEditor を起動する。この状態は、region0 の内容が表示されているので、さらに、gridEditor 上から をクリックして、region 名を指定してこの内容を読み込み、
gridEditor で再表示させる事になる。
239

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
以下は、region「air」を選択して、gridEditor を開こうとしている状態。

air 側

以下が、air と heater の境界条件になる。field 内変数が定義され、その変数を使って region 間の境界条件が設定されている。
air 側

240

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

heater 側

例として、air/T field の内容を editor で確認すると、以下の内容で記述されており、シンプルな記述になっている。この内容は、regionWallBoundaryConditionsDict に基づき、regionWallBoundaryConditions
を実行して設定された内容になる。（include 行と「".*._to_.*"」の wildCard が追加される。）/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.1
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.0;
formatascii;
class
volScalarField;
location"0/air";objectT;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //dimensions[ 0 0 0 1 0 0 0 ];#include "${FOAM_CASE}/include/variableSetting"#include "${FOAM_CASE}/include/boundaryConditionsFluid"
internalField

uniform 300;

boundaryField
{
inW
{
241

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
type

}
outW
{

}

zeroGradient;

type
zeroGradient;
}
sideW
{
type
zeroGradient;}".*._to_.*"{$:wallToRegion.T;}// ************************************************************************* //この設定結果は、gridEditor で確認でき、修正も可能だが、region が多数ある場合は、regionWallBoundaryConditionsDict を修正する方が容易に行う事ができる。
RegionWallBoundaryConditionsDict の修正方法は、TreeFoam 上の ボタンをクリックして、「regionWallBCsEditor 編集・設定」ボタンをクリックし、「regionWallBCsEditor」を起動して、この画面上で修正する事になる。この画面上では、以下の内容が設定できる。
・定義する変数名とその値
・各 field の internalField の値を、定義した変数名の値を使うかどうかを設定
・各 field の境界条件の内容を設定
以下の画面上では、流体・固体とも T field が選択されているので、それぞれの T field の設定内容が表示されている。
内容を変更したい場合は、変更する field を選択し、その内容が表示されているテキストボックス内を直接編集する。編集後「設定」ボタンをクリックする事で、編集内容が reginWallBoundaryConditionsDict に反映され、各 field 内容も書き換えられ、field の内容が再設定される事になる。
k、epsilon の初期値については、今回は、層流で計算するので、default の設定で問題ない。
もし、乱流（k-ε）で計算する様であれば、ここで修正しておく。修正方法は、「変数名・値の定義」欄の「turbK」と「turbEpsilon」の値を直接修正する。

242

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

また、同じ画面上で、以下の「textEditor による Dict 編集」ボタンをクリックした場合は、editor でregionWallBoundaryConditiondDict が編集できる。

243

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
以下が、regionWallBoundaryConditionsDict を editor で開いた内容になる。
この内容を直接編集しても構わない。編集した内容を各 field に反映する為には、上図の「Dict 実行（設定）」ボタンをクリックして、各 field にその内容を反映させる。
/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 2.3.0
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.3;
formatascii;
class
dictionary;location"";
objectregionWallBoundaryConditionsDict;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ////directory of include files// Below include 3 files are createed at next below directory.
// If its directory does not exist, its directory is created.
// - variableSetting// - boundaryConditionsFluid// - boundaryConditionsSold//
includeDir"${FOAM_CASE}/include";// variable setting
variableSetting{
iniTemp300;
iniVelocity(0 0 0);zeroVelocity(0 0 0);iniPress
100000;turbEpsilon
0.01;
turbK
0.1;
}

//internal fields setting for variableName// If field does not exist in region, is not apply, so is not change.
// And if internalField type is nonuniform, should not be applied.
//// example://
U
iniVelocity;//// InternalField of U is set 'internalField uniform $iniVelocity;'.
//internalFields
244TreeFoam 操作マニュアル （TreeFoam-2.36-151212){

fluidRegions{Uepsilonkpp_rgh}
solidRegions{p}

iniVelocity;
turbEpsilon;
turbK;
iniPress;
iniPress;

iniPress;}//boundary conditions of walls between regions// If the field does not exist in region, its boundary condition is not changed.
//
regionWallBoundaryConditions{
fluidRegions{
T{type compressible::turbulentTemperatureCoupledBaffleMixed;
value uniform $iniTemp;
Tnbr T;
kappa fluidThermo;
kappaName none;
}
U
{

}

type fixedValue;
value uniform $zeroVelocity;

epsilon{type compressible::epsilonWallFunction;
value uniform $turbEpsilon;
}
k
{

}
p
{

type compressible::kqRWallFunction;
value uniform $turbK;type calculated;value uniform $iniPress;
245

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
}
p_rgh
{
type fixedFluxPressure;value uniform $iniPress;
gradient uniform 0;}}
solidRegions{
T{type compressible::turbulentTemperatureCoupledBaffleMixed;
value uniform $iniTemp;
Tnbr T;
kappa solidThermo;
kappaName none;}p{type calculated;value uniform $iniPress;}}}//special setting// If you want to set the special boundaryCondition to special region wall,// you can get it using wild card of patch name from below setting.
//// This setting is that heat flux does not flow between *Solid and topAir.
////"topAir_to_.*.Solid"//{//
fluidRegions
//
{
//
T
//
{
//
type zeroGradient;
//
}
//
}
//}
//".*.Solid_to_topAir"//{//
solidRegions
//
{
//
T
//
{
//
type zeroGradient;
//
}
246

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
//
//}

}

// ************************************************************************* //regionWallBoundaryConditionsDict は、region 間の境界条件を「".*._to_.*"」の様な wildCard（正規表現）で設定している。
この様な方法を取った事で、上記リストの最後でコメントアウトしている場所（「special setting」内）で使っている様な wildCard を追加する事により、特別な region 間が指定でき、これに特別な境界条件を設定する事もできる様になっている。
regionWallBoundaryConditionsDict を直接 editor で編集する場合、これが実現できるメリットがある。

9-6-1-9.

境界条件の設定

region 間以外の境界条件が未設定の為、ここで設定する。
境界条件を設定する patch とその内容は、今回の場合、以下になる。
流体側（空気）inW
流入面：x 方向に 300 K の流速 1 m/s を与える
outW
流出面：圧力 1e-5 Pa を設定
saideW壁
固体側（Cu）
heaterW

一定の温度勾配▽T 500 K/m を与える
材料が Cu の為、q = -κ・▽T = -186e3 W/m2 の熱流束を与える事になる

k, epsilon の設定については、今回は層流で計算する為、default の設定で問題ない。
最終的に、流体・固体に分けて以下の様に設定した。
air 側

247

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

heater 側

heater 側

248

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-6-1-10.

計算開始

以上で全ての設定が終了したので、計算開始させる。設定が誤っていないか確認する為に、まず、 ボタン
をクリックして、シングルコアで計算させる。問題なく計算できるようであれば、6-2-7 項と同様に、 ボ
タンをクリックして、並列計算の設定を行う。以下の設定は、scotch で mesh を 4 並列用に分割する設定。
multiRegion の場合、メッシュを分割する為の decomposeParDict が各 region 毎に存在する。
ボタンをクリックして「並列計算」画面を表示した段階で、各 region 内の decomoseParDict の存在を確認し、存在しない場合は、default の decomposeParDict を各 region 内に作成する。
並列数や、mesh 分割方法を修正するようであれば、「並列計算」画面上で、直接修正し、「nCPU,method 設定」ボタンをクリックする。これにより、全ての region 内の decomposeParDict が修正される。この修正は、decomposeParDict 内の、nCPU と method のみ書き換える為、特別な region に特別な decomposeParDict を作成しても、この内容（nCPU と method 以外）は保存されることになる。

下図は、「Dict 確認・編集」ボタンをクリックして「region 間のファイル操作」画面を表示させた状態。
下図の画面の様に、decomposeParDict は、今回の場合、3 箇所（選択している場所）存在している。
特別な region に特別な decomposeParDict を設定する場合は、region を選択して、その region 内のdecomposeParDict を開き、編集する事になる。

249

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

decomposeParDict を完成させた後は、6-2-7 項と同様に「mesh 分割」ボタンでメッシュを processor 毎に分割し、「並列計算開始」ボタンで、計算を開始させる。
計算終了後、「結果の再構築」ボタンで各 processor 毎の計算結果を結合し case フォルダ直下に保存する。
計算結果を再構築後は、各 processor に散らばっている結果データを削除しておく。（削除方法は、6-2-7
項を参照。）
結果を確認する為に、TreeFoam 上の ボタンをクリックして paraFoam を起動するが、今回の場合、下図の様に「paraFoam -builtin」のオプションを選択して paraFoam を起動した。

250

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
multiRegion の case 場合、paraFoam をオプション無しで起動すると、起動後、各 region を読み込む必要があり、region が多くあると、手間がかかる。「paraFoem -builtin」で paraFoam を起動すると、
全 region の全 field を読み込む設定で paraFoam が起動するので、結果が直ぐに確認できるが、欠点もあるので、状況に合わせて確認する。（9-6-1-11 項を参照）
下図は、1s 後の計算結果を paraFoam で確認した結果になる。
温度 T

速度 U

圧力 p

multiRegion の計算ができたが、今の状態は、流体「air」にレイヤが付いていない状態。
流体 region にレイヤを付ける事もできるので、付ける場合は、9-6-2 項を参照。

9-6-1-11.

paraFoam による計算結果の確認について

multiRegionCase の場合、計算結果が各 region に散らばっているので、通常通りに paraFoam を起動すると、各 region の結果を読み込む必要が生じ、region が多くある場合は、手間が増えてしまう。
この手間を省く方法として、TreeFoam では、以下の 2 点の方法を準備している。
1)
2)「-builtin」オプション付きで paraFoam を起動する。
オプション無しで paraFoam を起動して、結果を読み込むマクロを使って処理する

その詳細な使い方は、次項以下で示す。

1)「-builtin」オプション付きで paraFoam を起動

この方法は、最も簡単に結果を確認できる方法になる。その方法は、TreeFoam 上の ボタンをクリックして、表示された「paraFoam の起動オプション」画面上で、下図の様に「-builtin」オプションを選択して「OK」ボタンをクリックする。これにより、paraFoam が「-builtin」オプション付きで起動する。

251

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この方法で paraFoam を起動すると、各 region、各 fieldのデータを読み込んだ状態で paraFoam が起動する。
右図は、paraFoam が起動した直後の状態を示しているが、この様に各 region、各 field が既にチェックされた状態で paraFoam 起動している。
この為、後は緑色の「Apply」ボタンをクリックするだけ
で、結果が確認できる。
ただし、この方法（「-builtin」オプション付きでparaFoam を起動）は、field 内の実データしか読めない。
今回の case の場合、計算前の境界条件を設定している
field には、9-6-1-8 項で記している様に、#include を使って$iniTemp 等の変数を定義しているが、この変数が読めなくなってしまい、エラーが発生する。
このような場合は、paraFoam をオプション無し（次項の方法）で起動して読み込む。
計算結果が保存された field には、変数はなく、実データが入っているので、そのまま読み込む事ができる。

2)

オプション無しで paraFoam を起動して、結果を読み込むマクロを使って処理

paraFoam をオプション無しで起動してしまうと、起動後に各 region の各 field のデータを読み込む操作が必要になり、操作が煩雑になってしまう。しかし、前項では読めなかった実データ以外の変数の値も読み込む事ができる。
操作の煩雑さを少しでも軽減できる様にする為に、全 region と全 field を読み込むマクロを準備しているので、これを使用する。
マクロの使用方法は、以下の方法による。

252

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)(1)

paraFoam の起動

TreeFoam 上のボタンをクリックして、表示された「paraFoam の起動オプション」画面上で、下図の様にオプション無しを選択して「OK」ボタンをクリックして paraFoam を起動する。

(2)

paraFoam にマクロボタン設定

paraFoam が起動した後、マクロを設定する。
下図のようにメニューバー「Macros」＞「Add new macro...」を選択する。
macro は、「$TreeFoamPath/TreeFoam/python/paraView」フォルダ内に「loadRegionsCheckFields.py」が準備してあるので、これを選択して「OK」ボタンをクリックする。

253

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
以上の操作により、マクロボタンが下図のように追加される。
このマクロボタンは、一度追加すると、次回起動時も保持されたままなので、この操作を一回行えば済む。マクロボタンを削除する場合は、メニューバー「Macros」＞「Delete...」＞「loadRegionsCheckFields」を選択すれば、選択したマクロを削除する事ができる。

(3)

結果の読み込み

結果を読み込む為に、設定したマクロボタン「loadRegionsCheckFields」をクリックする。下図がマ
クロボタンをクリックした後の状態になる。全ての region と全ての field が読み込まれた状態の為、後は緑色の「Apply」ボタンをクリックすれば読み込みが完了する。
この状態でも、結果を確認する事ができるが、次項の様に読み込んだ全 region を DataSets としてGroup 化する事でさらに使いやすくなる。

全 region のinternalMesh と全 fieldにチェックが付く

254

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)(4)

region を DataSets として Group 化

読み込んだ全 region を選択し、ボタンをクリックして Group 化する。

この後、最終的に最下行の GroupDataSets1 を選択して、結果を確認することになる。
この GroupDataSets1 は、全ての region を 1 セットとして確認する事ができる為、使いやすくなる。

255

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-6-2.

multiRegionCase：流体 region にレイヤを追加する例

9-6-1 項で multiRegion の case を作成したが、流体部にレイヤが付いていないので、この部分にレイヤを付けてみる。
レイヤを付ける方法は、付けたい region（今回は air）のメッシュを multiRegion ではなく、通常の caseにコピーし、ここで snappyHexMesh を使ってメッシュにレイヤを付ける。この後、元の multiRegion の caseにメッシュを戻す方法をとる。
具体的には、次項以降の手順を踏んで作成することになる。

9-6-2-1.

メッシュを通常の case にコピー

レイヤをつける為の仮の case が必要になる。tutorials の cavity を使うことにする。この為、cavity のcase を tutorials からコピーし「./Allrun」を実行後、 ボタンをクリックして、計算結果等の不要なファイルを削除して、case を初期化しておく。
メッシュのコピー先の case が準備できたので、9-4-2 項の方法でメッシュを入れ変える。この為に、 ボ
タンをクリックして、「mesh の入れ替え」タグを選択して、以下の様に「コピー元：regCase」「コピー先：cavity」に設定して、各々のメッシュ保存先を選択して、メッシュを入れ替える。
メッシュを入れ替えた後は、cavity 側で layer を付けることになる。

9-6-2-2.

レイヤの追加cavity 上でレイヤを作成する。作成方法は、7-1-6 項と同様な方法で、レイヤを付けることになる。
TreeFoam 上で ボタンをクリックし、「snappyHexMesh による mesh 作成...」ボタンをクリックして、以下の様に、「Dict 作成」ボタンをクリックし、「layer の設定」画面を表示させ、この画面上で追加するレイヤの設定を行う。

256

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

レイヤを付ける patch は、「air_to_heater」と「sideW」になるので、それぞれ、以下で作成している。
レイヤは、絶対寸法で指定する様に設定し、レイヤの厚さのみをそれぞれで変更して設定している。
＜ air_to_heater ＞

257

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)＜ sideW ＞

上記の設定で、レイヤを作成した結果が以下になる。
断面の状態

9-6-2-3.

heater 部の拡大

レイヤ付きのメッシュを multiRegion の case に戻す

前項のレイヤ付きメッシュを元の multiRegion の case に戻して、最終的にレイヤ付きの multiRegion のcase にする。
方法は、9-6-2-1 項の反対の操作をする事になる。以下の様にレイヤ付きのメッシュ「cavity/0.05/polyMesh」を「regCase/constant/air」に戻すことになるので、各々これらのメッシュを選択して、コピーする。
コピー時に「internalField をクリアする」内容のメッセージがでるが、これは、メッシュにレイヤを追加した為、cell の総数が変わっている。この為、internalField にセットされている「nonunifoem」形式のデータは、意味を持たなくなる為、このメッセージがでる。今回は、全ての internalField が「uniform」
形式のデータの為、問題ない。
もし、setFields などでデータをセットしていた場合は、これがクリアされてしまう事になる。
この場合は、再度 setFields を使って再セットするか、mapFields で再セットし直す事になる。

258

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
setFields を使う場合は、再度 cellSet を作る事になるが、mapFields の場合は、データがセットされている field を使うので、この方が手間が省ける。mapFields の方法は、9-3-2 項参照。

以下が、最終的にできあがったメッシュになる。
断面

9-6-2-4.

heater 部拡大

計算開始

レイヤ付きのメッシュで計算させてみる。前項と同様な方法で 1s まで計算させた結果が、以下になる。
レイヤを付けた事によって、境界部の速度分布の精度が向上した為、air 部の温度分布が 9-6-1 項のレイヤ

259

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
無しに比べて若干変化している。
温度 T

速度 U

圧力 p

260

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-6-3.

multiRegionCase：形状変更したモデルの再解析例

multiRegion の場合、各 region 毎に境界条件を設定する必要があるので、region が多数あると設定が煩雑となりミスも増える。これを少しでも軽減する為に、9-6-1-8 項の様に regionWallBoundaryConditionsDictを作成して設定できるようにしている。
さらに、完成した境界条件については、各 region の境界条件の全てが保存できる状態にしている。この為、これを使うことによって、領域分割後、保存した境界条件を速やかに再設定する事ができる。
この為、region と patch 名が変わらず、形状のみを変更したモデルの場合、境界条件の設定が速やかに行えることになる。
上記したことを想定して、9-6-1 項の case を例に取って、全ての境界条件を保存、設定してみる。

9-6-3-1.

全境界条件の取得・保存

その方法は、対象とする multiRegion の case を「解析 case」に設定した上で、 ボタンをクリックして、「multiRegion の設定」画面を表示させ、「現設定を取得・作成」ボタンをクリックして、境界条件を保存するファイル名を入力する。これにより、境界条件の内容が保存される。（今回の場合、「system/changeDictionaryAllRegionsDict-auto」に保存した。）

この中に、全ての region の境界条件が保存されている。このファイルの内容は、以下になる。
この内容からわかる様に、全 region の baoundary と各 field の boundaryField の内容（zeroGradient 以外）が保存されている。
また、この内容は、各 region に対する changeDictionaryDict を、各 region 毎にまとめた書式になっている為、この内容を適用するためには、ここから各 region に対応する部分を抜き出し、各 region に配布して、
changeDictionary を実行するだけで、その境界条件が適用できることになる。
261

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)/*--------------------------------*- C++ -*----------------------------------*\| =========||| \\/ F ield| OpenFOAM: The Open Source CFD Toolbox|| \\/O peration| Version: 1.6.x
|
|
\\ /
A nd
| Web:
www.OpenFOAM.org||\\/
M anipulation ||\*---------------------------------------------------------------------------*/
FoamFile{
version
2.3.1;
formatascii;
class
dictionary;location"system";objectchangeDictionaryAllRegionsDict;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //air{
dictionaryReplacement{boundary{
air_to_heater{
type mappedWall;inGroups 1(wall);sampleMode nearestPatchFace;sampleRegion heater;
samplePatch heater_to_air;}inW{type wall;inGroups 1(wall);}outW{
type wall;inGroups 1(wall);
}
sideW
{
type wall;inGroups 1(wall);}}T{

iniTemp 300;
iniVelocity (0 0 0);
zeroVelocity (0 0 0);262

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
iniPress 100000;
turbEpsilon 0.07;
turbK 0.01;
internalField uniform 300;
boundaryField{
air_to_heater{
type compressible::turbulentTemperatureCoupledBaffleMixed;
value uniform $iniTemp;
Tnbr T;
kappa fluidThermo;
kappaName none;}
inW{
type fixedValue;
value uniform 300;}
outW{
type inletOutlet;
value uniform 300;
inletValue uniform 300;
}
sideW
{
type zeroGradient;
}
}
U
{

}

iniTemp 300;
iniVelocity (0 0 0);
zeroVelocity (0 0 0);
iniPress 100000;
turbEpsilon 0.07;
turbK 0.01;
internalField uniform $iniVelocity;boundaryField{
air_to_heater{
type fixedValue;
value uniform $zeroVelocity;}
inW{
type fixedValue;
value uniform ( 1.0 0 0 );}263

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
outW{
type inletOutlet;
value uniform ( 1 0 0 );inletValue uniform ( 0 0 0 );

}

}
sideW
{
type fixedValue;
value uniform $zeroVelocity;}}
epsilon{iniTemp 300;
iniVelocity (0 0 0);
zeroVelocity (0 0 0);
iniPress 100000;
turbEpsilon 0.07;
turbK 0.01;
internalField uniform 0.003;
boundaryField
{

}
k
{

}

air_to_heater{
type compressible::epsilonWallFunction;
value uniform $turbEpsilon;}
inW{
type fixedValue;
value uniform 0.003}
outW{
type inletOutlet;
value uniform $turbEpsilon;
inletValue uniform 0.003;
}
sideW
{
type compressible::epsilonWallFunction;
value uniform 0.003;}

iniTemp 300;
iniVelocity (0 0 0);
zeroVelocity (0 0 0);
iniPress 100000;
264TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
turbEpsilon 0.07;
turbK 0.01;
internalField uniform 0.005;
boundaryField
{

}
p
{

}

air_to_heater{
type compressible::kqRWallFunction;
value uniform $turbK;}
inW{
type fixedValue;
value uniform 0.005;}
outW{
type inletOutlet;
value uniform $turbK;
inletValue uniform 0.005;
}
sideW
{
type compressible::kqRWallFunction;
value uniform 0.005;}

iniTemp 300;
iniVelocity (0 0 0);
zeroVelocity (0 0 0);
iniPress 100000;
turbEpsilon 0.07;
turbK 0.01;
internalField uniform $iniPress;
boundaryField{
air_to_heater{
type calculated;value uniform $iniPress;}
inW{
type calculated;value uniform $iniPress;}
outW{
type calculated;
265TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
value uniform $iniPress;
}
sideW
{
type calculated;value uniform $iniPress;
}
}
}
p_rgh
{
iniTemp 300;
iniVelocity (0 0 0);
zeroVelocity (0 0 0);
iniPress 100000;
turbEpsilon 0.07;
turbK 0.01;
internalField uniform $iniPress;
boundaryField{}}

air_to_heater{
type fixedFluxPressure;value uniform $iniPress;
gradient uniform 0;}
inW{
type fixedFluxPressure;value uniform $iniPress;}
outW{
type fixedValue;
value uniform $iniPress;
}
sideW
{
type fixedFluxPressure;value uniform $iniPress;}}}
heater{dictionaryReplacement{boundary{heaterW
266

TreeFoam 操作マニュアル （TreeFoam-2.36-151212){

type wall;inGroups 1(wall);}heater_to_air{
type mappedWall;inGroups 1(wall);sampleMode nearestPatchFace;sampleRegion air;samplePatch air_to_heater;
}
}
T
{

}
p
{

iniTemp 300;
iniVelocity (0 0 0);
zeroVelocity (0 0 0);
iniPress 100000;
turbEpsilon 0.07;
turbK 0.01;
internalField uniform 300;
boundaryField{}

heaterW{
type fixedGradient;gradient uniform 500;
value uniform $iniTemp;}
heater_to_air{
type compressible::turbulentTemperatureCoupledBaffleMixed;
value uniform $iniTemp;
Tnbr T;
kappa solidThermo;
kappaName none;}

iniTemp 300;
iniVelocity (0 0 0);
zeroVelocity (0 0 0);
iniPress 100000;
turbEpsilon 0.07;
turbK 0.01;
internalField uniform $iniPress;
boundaryField{

267

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
heaterW{
type calculated;value uniform $iniPress;}
heater_to_air{
type calculated;value uniform $iniPress;
}
}

}

}

}

//************************************************************************* //9-6-3-2.

保存した全境界条件の適用

境界条件を適用したい case を「解析 case」に設定する。この case 内に前項で境界条件を保存したファイル「changeDictionaryAllRegionsDict-auto」が system フォルダ内に存在している事を確認し、存在しない場
合は、コピーしてくる。
境界条件を保存したファイル「changeDictionaryAllRegionsDict-auto」を適用する為には、TreeFoam 上のボタンをクリックして、「multiRegion の設定」画面を表示させる。この画面上の「changeDict 編集・実
行...」ボタンをクリックして、保存したファイルを選択して、「実行...」ボタンをクリックする事で適用
できる。

268

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

この適用方法は、境界条件が保存された「changeDictionaryAllReginsDict-auto」ファイルの内容を各
region 毎に抜き出して、changeDictionaryDict を作り出し、これを system 内の各 region に配布して、
changeDictionary コマンドを実行して、保存した境界条件を適用している。
以上の様に、全ての region の境界条件を保存した「changeDictionaryAllRegionsDict-auto」を作成しておけば、モデル形状が変わっても、region 名と patch 名が変わっていなければ、境界条件が速やかに設定できる事になる。

269

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-6-4.

multiRegionCase：region 名を変更する場合

多大な時間を掛けてできあがった multiRegion の region 名を変更したい場合には、それが関連する箇所が多数あり、editor で修正する事は、不可能に近い。通常であれば、領域分割前に戻り、cellZone 名を変更
して、領域分割し直すところから始める事になる。
この様な手間を省くために、TreeFoam では、region 名を一括して変更できる方法を準備している。
9-6-1 項で作成した multiRegion の case で region 名を変更してみる。
変更方法は、変更したい multiRegion の case を「解析 case」に設定し、 ボタンをクリックして「multiRegion の設定」画面を表示させ、「region 名の変更・追加・削除...」ボタンをクリックして、現れた「region の追加・削除」画面上で、region 名を変更する事になる。

「region の追加・削除」画面上で、今の case 内には、「air」と「heater」の region が存在している事が判る。ここで、「heater」region を「cylHeater」に変更してみる。
変更する region 名は、「_」を含まない文字列で表現する。この理由は、region 間の patch 名が「***_to_***」の様に表現されているので、今回の様な region 名変更時の検索に引っかからない様にする為。
その変更方法は、以下の様に変更したい region「heater」を選択し、「変更」ボタンをクリックする。これにより、新しい region 名をきいてくるので、変更後の region 名「cylHeater」を入力する。

270

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

region 名の入力により、以下の様に region 名が「cylHeater」変更される。

変更後の region 名に変わっている。

この変更は、以下の内容を修正している。
regionProperties
0, constant, system 内
全 region の boundary
全 region 内の全 field

heater → cylHeater へ修正
region のフォルダ名を修正「heater_to_」と「_to_heater」の文字列を修正
heater → cylHeater へ修正
patch 名の「heater_to_」と「_to_heater」の文字列を修正

変更内容を確認する為に、gridEditor を起動してみる。以下が air と cylHeater の region を確認した結果になる。patch 名と boundary の内容が変更されている事が判る。
271

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

air 側

272

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-6-5.

multiRegionCase：region を追加する場合

既にできあがった multiRegion の case に新たな region を追加する場合を考えてみる。
この場合は、既にできあがっている patch の形状に合わせて、新しい region を追加する事になるので、追加できる region の形状には制限がある。自由な patch 形状の region を追加するのであれば、cellZone を定義して領域分割からやり直した方が早い。
今回は、9-6-1 項で作成した multiRegion の case に新しい region「cover」を追加してみる。

9-6-5-1.

追加する region の形状

今の形状は、下図の形状なので、sideW、heaterW の patch に接する cover を追加してみる。
sideW と heaterW を加えた形状は、直方体の側面（4 面）の形状になる。cover は、これに接する形状にする。
sideW と heaterW

sideW （ 4 面）

inW

heateroutW
heaterW(heater 底面）

sideW と heaterW の patch に接する cover の形状は、下図の様に、厚さ 6mm に設定する。
＜ cover 形状＞
coverInW

coverSideW （ 4 面）

coverOutW

cover_to_air
cover_to_heater

patch 名内容----------------------------------------coverInW:air の inW 側
coverOutW:air の outW 側
coverSideW:cover の外周面（ 4 面）
cover_to_air:air と接する内面
cover_to_heater:heater と接する内面

patch が互いに接する箇所の形状は、合わせておく必要があるので、cover 内面に heater 底面（heaterW）と同形状の「cover_to_heater」面を作成している。

273

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
前記形状で cover のメッシュを作成する為に、適当な case をコピーして新しい case「newRegion」を作成し、ここでメッシュを作成する。（メッシュ作成方法は、7-1 項参照。
今回の場合、以下の csv ファイルでメッシュを作成している。このモデルの場合、中心に穴が開いているので、mesh の座標値の入力に注意する。

円形の「cover_to_heater」の patch に snap が効かない場合は、snappyHexMeshDict の snapControls 内の設定で、「multiRegionFeatureSnap false;」を「multiRegionFeatureSnap true;」に変更すると、円形の「cover_to_heater」が取得できる。
下図が、メッシュを作成した状態。円形の「cover_to_heater」が取得できている。

274

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

9-6-5-2.

multiRegionCase に region 追加

region を追加する操作は、「0」、「constant」、「system」folder 内に region 名のフォルダを追加し、この folder 内に必要なファイルを配布する必要がある。この操作を TreeFoam が行ってくれるので、追加した region に配布するファイルが予め準備されている事が必要になる。（ファイルが準備されていないと、追加した region にファイルが配布されない。）
従って、まず region に配布する必要なファイルが、「0」、「constant」、「system」フォルダ内のfluidRegion と solidRegions フォルダ内に、準備されている事を確認する。これが準備されていない場合は、
9-6-1-1-1 項の方法で、必要なファイルを準備しておく。
region に配布するファイルが準備されている事を確認後、対象の multiRegionCase を「解析 case」に設定する。この case に新たな region「cover」を追加する為に、 ボタンをクリックして、「multiRegion の設定」画面を表示させ、「region 名の変更・追加・削除...」ボタンをクリックして、「region の追加・削除」画面を表示させる。
追加する region は、固体の「cover」region を追加するので、「region の追加・削除」画面上で固体のregion「追加」ボタンをクリックする。追加する region 名をきいてくるので、新しい region 名「cover」を入力する。

275

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

region 名を入力すると、「region の追加・削除」画面に戻り、下図の様に、固体側に region 名が追加された状態になる。

「 cover 」 region が追加されている

この region の追加の操作は、regionProperties の修正と、「0」、「constant」、「system」フォルダ内に、「cover」region を追加し、この region 中に、必要なファイル（今回は、固体 region の為、solidRegions
フォルダに保存されているファイル）をコピー配布している。

9-6-5-3.

メッシュのコピー

今の状態は、メッシュが未だ準備されていないので、このメッシュをコピーする。
メッシュコピーは、TreeFoam 上の ボタンをクリックして、「新しい case の作成」画面を表示させ、「mesh の入れ替え」タグを選択後、コピー元を 9-6-5-1 項で作成した「newRegion」case に設定する。この後、コピー元の「constant/polyMesh」とコピー先の「constant/cover」を選択する。（以下の図の状
態。）
以上の設定で、「コピー開始」ボタンをクリックすると、newRegion のメッシュが、constant/cover にコピーされる。

276

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)

以上の操作で、メッシュがコピーされたので、この形状を paraFoam で確認すると、以下の様に、cover が追加されている事が確認できる。
air を除いた状態

全体

9-6-5-4.

追加した region の材料設定追加した region の材料を設定する。設定は、TreeFoam 上の ボタンをクリックし、「region 内 file 操
作...」ボタンをクリックし、「region のファイル操作」画面を表示させ、「固体の材料設定」タグを選択する。
追加 region の材料は Cu を設定する。この為に、この画面上で、材料 DB 側の「Cu」を選択し、材料設定側の「cover」行をダブルクリックして、Cu を設定候補とし、「材料を設定」ボタンをクリックして、cover277

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)に Cu 材料を設定する。（詳細は、9-6-1-7 項を参照）

下図が Cu 材料を設定した状態。

9-6-5-5.

境界条件の設定

計算を開始する為には、境界条件を再設定する必要があるので、これを設定する。
境界条件は、cover の外周面（coverSideW 面）に熱流速を与え、この熱量が air や heater region に伝わっていくか確認する。
278

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)「air」region は、sideW の patch が cover と接する為、「air_to_cover」に rename し、「air_to_heater」の内容をコピーしておく。その後、patchType を「mappedWall」に変える。T field の patch 内容も修正しておく。下図の内を修正。

「heater」region は、heaterW の patch が cover と接している為、「heater_to_cover」に rename し、「heater_to_air」の内容をコピーする。その後、patchType を「mappedWall」に変え、T field の patch 内
容も修正しておく。

「cover」region については、cover_to_air が air と接する為、この patchType を「mappedWall」に修正し、279

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
T field の patch 内容を修正する。また、cover_to_heater が heater と接する為、同様に patchType を「mappedWall」に修正し、T field も修正しておく。
coverSideW には、熱流速を与える境界条件「fixedGradient」に変更する。
p field については、internalField や patch 内容を、heater region の p field と合わせておく。
また、各 field で変数を使用している為、各 field に変数「iniTemp」、「iniPress」を定義する。
最終的に、以下の状態に設定した。（以下の9-6-5-6.

内を修正。）

計算開始

全ての設定が終了したので、計算を開始する。以下が、1s 後の状態を示している。cover の外周面から熱がair や heater に伝わっている状態が確認できる。
温度 T

280

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
9-6-6.

multiRegionCase：region を削除する場合

前項では、multiRegion の case に新たな region を追加したが、ここでは、region を削除してみる。
region の追加は、境界条件の変更を伴うので煩雑だが、削除は、簡単にできる。
前項で追加した「cover」region を削除してみる。
まず、操作対象の case を「解析 case」に設定し、 ボタンをクリックして「multiRegion の設定」画面をを表示させ、この画面上の「region 名の変更・追加・削除...」ボタンをクリックし、「region の追加・削除」画面を表示する。
「region の追加・削除」画面上で、削除したい region（今回は cover）を選択して、「削除」ボタンをクリックする。

以上の操作で、cover region が削除される。
削除の動作内容は、regionProperties が修正され、「0」、「constant」、「system」内の「cover」region が削除される。
また、削除に伴い、cover が関係していた「air」と「heater」region の boundary と baoundaryField が、以下の様に修正される。
「air」 region の場合は、下図の様に、cover と接していた patch「air_to_cover」が「air_to_coverrDel」に変更され、patchType が「mappedWall」から「patch」に変わり、patch 内容が全ての field で「zeroGradient」に変更される。

281

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)「heater」region の場合も同様に、cover と接していた「heater_to_cover」が「hreater_to_coverDel」に変更され、patchType も「mappedWall」から「patch」変更され、全ての field の patch 内容が「zeroGradient」に変更される。

以上の様に cover と接していた patch 名が cover を削除した事により、通常の patchType に変わり、ここのpatch 内容が「zeroGradient」に修正される。この為、このまま solver を実行させてもエラーは発生せず、実行できる状態にある。
282

TreeFoam 操作マニュアル （TreeFoam-2.36-151212)
しかし、今の状態は、発熱させる境界条件が無くなっているので、以下の様に設定し直す事により、9-6-19 項と同じ状態に戻る。
＜air 側＞

air_to_heater と同じ設定

wall に変更＜heater 側＞

heater_to_air と同じ設定

発熱させる設定

上記設定で計算させた結果が以下になる。9-6-1-10.項と同じ状態が得られる。
温度 T283