gmsh / gnuplot / openfoam / paraviewによる...

65
Gmsh / Gnuplot / OpenFOAM / ParaView による Open Source CAE Suite for Windows 建築分野向けチュートリアル 大嶋 拓也 新潟大学工学部 D R A F T 2008 年 4 月 18 日版

Upload: others

Post on 09-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

Gmsh / Gnuplot / OpenFOAM / ParaView による

Open Source CAE Suite for Windows建築分野向けチュートリアル

大嶋 拓也新潟大学工学部

D R A F T2008年 4月18日版

Page 2: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

目次

基礎事項11 31.1 数値シミュレーションとは 31.2 微分とは 31.3 微分方程式とは 41.4 解析解の求め方 41.4.1 一般解 4

1.4.2 初期条件・特殊解 4

1.5 数値解の求め方 41.5.1 離散化 4

1.5.2 差分方程式の解法 5

1.5.3 離散化誤差 6

1.6 偏微分方程式・メッシュ・セル・境界条件 81.6.1 偏微分方程式 8

1.6.2 メッシュ 9

1.6.3 境界条件 9

1.7 シミュレーションの手順 101.7.1 プリプロセッシング 10

1.7.2 解析実施 10

1.7.3 ポストプロセッシング 11

1.8 本チュートリアルで使用するソフトウエア 111.8.1 Gmsh 11

1.8.2 OpenFOAM 12

1.8.3 ParaView 12

1.8.4 Gnuplot 12

キャビティ流れの解析 121 52.1 概要 152.2 CFD とは 152.3 支配方程式 162.4 解析対象 162.5 解析の実行手順 172.5.1 FoamX の起動 17

2.5.2 メッシュの作成 18

2.5.3 境界条件・初期条件の作成 21

2.5.4 動粘性係数の設定 22

2.5.5 実行条件の設定 22

2.5.6 データの保存 23

2.5.7 メッシュの確認 23

2.5.8 解析の実行 24

2.5.9 結果の表示 24

2.5.10 流線を描く 27

2.6 速度成分のプロット 282.6.1 sample ユーティリティの実行 28

2.6.2 Gnuplot による抽出したデータのプロット31

2.7 メッシュの分割数を上げる(コマンドラインによる操作) 32

2.7.1 ケースのコピー 32

2.7.2 blockMeshDict ファイルの編集とメッシュの

生成 34

2.7.3 初期値と境界条件の確認 34

2.7.4 物性値の確認 35

2.7.5 実行条件の制御 36

2.7.6 メッシュの確認 37

2.7.7 解析の実行 37

2.7.8 結果の確認 37

2.7.9 速度成分のプロット 38

高層ビル周り気流の解析 431 13.1 概要 413.1.1 本章解析ケースの紹介 41

3.1.2 解析ケース概要 42

3.2 メッシュの作成 423.2.1 等間隔メッシュの作成 44

3.2.2 メッシュの再分割 46

3.2.3 メッシュの再々分割 49

3.2.4 建物内のメッシュの除去 50

3.2.5 高層建物周辺のメッシュ再分割 51

3.2.6 高層建物内のセルを取り除く 54

3.2.7 低層建物周辺メッシュの再分割 55

3.3 初期値の設定・実行条件の設定 573.4 ソルバの実行 583.5 実行結果の確認 583.5.1 ベクトルプロットの作成 59

3.5.2 流線のプロット 61

3.6 風洞実験結果との比較 63

Page 3: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

1

3

1 基礎事項

数値シミュレーションとは1.1 世の中の様々な物理現象の多くは、数学的には微分方程式によって記述される。その微分方程式

の数値解をコンピュータを使って求めることを、数値シミュレーションと呼んでいる。

微分とは1.2 ここでは質点の運動を例にとって、微分の復習から始めよう。

ある点 Pが直線上を運動する場合を考えると、運動している物体の速度は、移動距離÷経過時間

で与えられる。すなわち、物体の位置 xが時刻 t の関数であるとすると、ある時刻 t0からΔtの間に

x(t0)から x(t0 + Δt)まで移動したときの平均的な速度 Uは

U =x(t0+∆t )− x(t0)

∆t (1.1)

である(図 1.1)。この平均的な速度を一般化していえば、x(t)の平均変化率である。

さらに、点 Pの運動は急には変化しない、すなわち滑らかであると仮定して、Δtを 0へ近づけた

極限を考える。このとき点 Pの移動量 x(t0 + Δt) - x(t0)も小さくなって、上式は Δtによらないある一

定値に近づくと期待できる。これを数式で表すと

U (t0) = lim

∆t→0

x(t0+∆t )− x(t0)

∆t= x (t0)

(1.2)

となる。この x'(t0)を x(t)の t = t0における微分係数といい、上式は時刻 t0における速度が位置の微

分係数で与えられることを表している。

さらに、上式の t0は任意の時刻に置き換えら

れるから、速度 Uを tの関数と考えると

U (t ) = lim∆t→0

x(t +∆t )− x(t )

∆t= x (t )

=d x(t )

d t

(1.3)

と書くことができる。これら x'(t)および dx(t)/dt

を x(t)の導関数または微分といい、上式は任意

基礎事項1

t

x(t)

O t0 t0 + ∆t

x(t + ∆t)− x(t)

∆t

平均変化率の概念図 1.1

Page 4: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

4

の時刻における速度が位置の微分で与えられることを表している。この関係は、x(t)がどのような形

の未知の関数であっても、滑らか、すなわち微分可能であれば成り立つことに注意してほしい。

微分方程式とは1.3 前節では物体の位置の微分が速度であることを示したが、このように「微分」という概念を用いる

ことで、「位置」と「速度」などの物理的な量を表す関数を、それらの形が未知のままであっても、

微分を介して一般的な形で結びつける、すなわち等式として表すことができる。未知の関数の微分

を含む等式を微分方程式という。

例えば、速度が時間によらず一定値 U0である場合、x(t)は以下の微分方程式を満たす。

d x(t )

d t= U0 (1.4)

微分方程式を満たす関数は、その微分方程式の解であるといい、全ての解を求めることを、その

微分方程式を解くという。この微分方程式を解く方法としては、大きく分けて 2種類が挙げられる。1

つは微分方程式を満たす関数の式を求める方法であり、もう一つは微分方程式を満たす関数の値を

求める方法である。前者によって求められた解を解析解、後者による解を数値解と呼ぶ。

解析解の求め方1.4 

一般解1.4.1 

式 (1.4)の微分方程式における微分の項、すなわち左辺は未知関数 x(t)の tによる微分であるから、

x(t)を求めるには式 (1.4)の両辺を tで積分すればよい。そのようにすると、

x(t ) = U0 t + C (1.5)

が得られる。ただし、Cは任意の定数である。微分方程式を解くと一般に、任意の定数を含んだ解

が得られる。この解の形式を一般解という。

初期条件・特殊解1.4.2 

式 (1.5)の定数 Cを定めるには、さらに条件が必要である。一般に数値シミュレーションでは、初

期時刻 t = 0における xの値、すなわち x(0)をあらかじめ決めて与えることで、Cの値が定まるよう

にする。この時刻 t = 0において与える条件のことを初期条件という。

例えば式 (1.5)の場合、t = 0において x(0) = 1と定めれば、C = 1と定まる。よって式 (1.5)は

x(t ) = U0 t + 1 (1.6)

となる。このように、一意に定まった解の形式を特殊解という。

数値解の求め方1.5 

離散化1.5.1 

数値解の求め方の全ての出発点は、式 (1.3)の微分の定義式において Δtが無限に 0に近いと

Page 5: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

5

1 基礎事項

考えたのに対し、式 (1.1)のように、ある有限の大きさを持つと考えることにある。すなわち、微分

dx(t)/dtを、微分の定義式から limを外した形の

d x(t )

d t≈

x(t +∆t )− x(t )

∆t (1.7)

または、t軸方向の対称性を考慮して

d x(t )

d t≈

x(t +∆t/2)− x(t −∆t/2)

∆t (1.8)

によって近似することにある(≈は近似を表す)。これらの式の形を総称して差分といい、式 (1.7)を

特に前進差分、式 (1.8)を中心差分と呼んでいる。さらに、微分方程式の微分を差分に置き換えるこ

とを離散化、離散化された微分方程式を差分方程式という。

離散化は 2階以上の微分に関しても可能であり、例えば x(t)の 2階微分に対して式 (1.8)の中心

差分を 2回適用すると、以下の離散化式が得られる。

d 2x(t )

d t 2=

d

d t

d x(t )

d t≈

x (t +∆t/2)− x (t −∆t/2)

∆t

≈x(t+∆t )−x(t )

∆t − x(t )−x(t−∆t )∆t

∆t

=x(t +∆t )− 2x(t )+ x(t −∆t )

∆t 2

(1.10)

式 (1.4)を前進差分によって離散化すると、以下となる。

x(t +∆t )− x(t )

∆t= U0 (1.9)

差分方程式の解法1.5.2 

式 (1.9)の両辺に Δtをかけ、整理すると

x(t +∆t ) = x(t )+U0∆t (1.11)

のように、初期条件 x(0)が与えられるとΔtだけ後の x(t)の値が順次算出される、一種の漸化式となる。

ここでU0は問題の条件から与えられ、Δtは解析者が任意に決定する。Δtの決め方にはある程度の

指針があり、2.5.5節で詳述する。この Δtを、時間刻みという。

ここでは例えば、U0 = 2、Δt = 0.1であるとすると、式 (1.11)は

x(t + 0.1) = x(t )+ 0.2 (1.12)

となり、さらに 1.4.2節で特殊解を求めた場合と同様、t = 0において x(0) = 1の初期条件を与えると

x(0) = 1

x(0.1) = x(0)+ 0.2 = 1 + 0.2 = 1.2

x(0.2) = x(0.1)+ 0.2 = 1.4

x(0.3) = x(0.2)+ 0.2 = 1.6

· · ·

(1.13)

Page 6: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

6

のように、x(t)の値が t = 0から 0.1、すなわち Δtごとに数値解が順次算出される。これが数値解の

求め方の基本である。

さらに 1.4.2節で得られた特殊解である式 (1.6)にU0 = 2を与えた

x(t ) = 2t + 1 (1.14)

と式 (1.13)の数値解を重ねてグラフにプロットすると、図 1.2のようになる。この場合、解析解と数

値解が一致していることがわかる。

解析解は厳密である一方、実際的な問題で解くべき微分方程式は、例えば第 2章の式 (2.2)、式 (2.3)

に示すように通常、式 (1.4)より遥かに複雑である。したがって、ほとんどの場合において、式 (1.5)

のような解析解を求めることができない。一方、式 (1.7)、式 (1.8)に示したような差分化を微分方程

式の各項に対してシステマティックに適用することで、解析解を求められない多くの複雑な微分方程

式を数値解として解くことができる。このため実際的な問題ではぼ必ず、数値解を求めることとなる。

本章冒頭で述べたとおり、数値シミュレーションとは通例、コンピュータを使って数値解を計算するこ

とを指す。

離散化誤差1.5.3 

それでは、解析解と数値解は必ず一致するか?

今度は図 1.3のように、質点が重力下で自由落下する問題を考えてみよう。高さ方向に x軸を取り、

初期時刻 t = 0において高さ10 mの点で静止状態にあるとする。この自由落下を表す微分方程式は、

重力加速度を 9.8 m/s2とすると、時刻 0において速度 0の等加速度運動であるから、以下となる。

d x(t )

d t=−9.8t (1.15)

まず、この微分方程式の解析解を求めよう。一般解は、両辺を積分して

x(t ) =−4.9t 2 + C (1.16)

解析解と数値解の比較図 1.2

0

0.5

1

1.5

2

2.5

3

3.5

4

0 0.2 0.4 0.6 0.8 1

x(t)

t

x(t) = 2x + 1Numerical solution

x(t)

質点

0

10 m

自由落下する質点図 1.3

Page 7: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

7

1 基礎事項

ただし、Cは積分定数である。さらに、

x(0) = 10 [m]の初期条件からC = 10

[m]が求められ、特殊解は以下のよう

に決まる。

x(t ) =−4.9t 2 + 10 (1.17)

つぎに数値解については、まず式

(1.14)左辺の微分を前進差分で離散

化すると、以下の差分方程式が得ら

れる。

x(t +∆t )− x(t )

∆t=−9.8t (1.18)

上式を整理すると、以下の漸化式が

得られる。

x(t +∆t ) = x(t )− 9.8t∆t (1.19)

初期条件 x(0) = 10 [m]から始めて、Δt = 0.1 [s]として1.5.2節と同様に上式を漸化式的に計算すると、

次の結果が得られる。

x(0) = 10

x(0.1) = 10− 9.8× 0× 0.1 = 10

x(0.2) = 10− 9.8× 0.1× 0.1 = 10− 0.098 = 9.902

x(0.3) = 9.902− 9.8× 0.2× 0.1 = 9.706

x(0.4) = 9.706− 9.8× 0.3× 0.1 = 9.412

· · ·

(1.20)

式 (1.17)の解析解と式 (1.20)の数値解をグラフにプロットすると、図 1.4のようになる。今度は図

1.2と異なり、時間の経過に伴って数値解のプロットが解析解の曲線から外れており、解析解と数値

解の間で差異が生じていることがわかる。このような数値解特有の誤差を、離散化誤差と呼んでいる。

離散化誤差を抑制するには、どのようにすれば良いのだろうか。

次は時間刻み Δtの値を 4分の 1に小さくして、Δt = 0.025 [s]として式 (1.18)を計算してみよう。

x(0) = 10

x(0.025) = 10− 9.8× 0× 0.025 = 10

x(0.05) = 10− 9.8× 0.025× 0.025 = 9.994

x(0.075) = 9.994− 9.8× 0.05× 0.025 = 9.982

x(0.1) = 9.982− 9.8× 0.075× 0.025 = 9.963

· · ·

(1.20)

この計算結果を解析解と共にグラフにプロットすると、図 1.5のようになる。図 1.4の Δt = 0.1 [s]の

場合と比べると、解析解と数値解の差が小さい、すなわち離散化誤差が小さくなっていることがわか

る。一般に離散化における刻みを小さくすると、離散化誤差が小さくなる。ただし刻みを小さくすれ

5

6

7

8

9

10

11

0 0.2 0.4 0.6 0.8 1

x(t)

[m]

t [s]

x(t) = 10 - 4.9x2

Numerical solution (Δt = 0.1)

解析解と数値解の比較(時間刻み 0.1 秒)図 1.4

Page 8: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

8

ばその分、同じ時間幅を計算するた

めに必要な時刻上の点数は増え、こ

の場合は 4倍となる。その分、計算

量も増え、数値シミュレーションにお

いてはより多くの所要時間を必要とす

ることとなる。

偏微分方程式・メッシュ・セル・1.6 境界条件

ここまで時間の離散化について説明

してきたが、実際に我々がシミュレー

ションしようとする対象は、例えば、

ビル周りの風、室内における音響伝

搬のように、空間的にある程度の広がり

を持っている。このシミュレーションす

べき対象の空間を解析領域という。解

析領域は、どのように離散化されるのだ

ろうか。

偏微分方程式1.6.1 

「空間内のある点 xにおける時刻 t +

Δtでの物理量 Tが、時刻 tにおいて点

xからΔxだけ離れた周囲の点における

物理量の平均値として与えられる」という現象を、一次元で考えてみよう(図 1.6)。この現象は拡散

と呼ばれ、建築における壁材料中の熱伝導、室内へのガスの放散等、身近な物理現象の多くにか

かわっている。この現象を式で表すと、次のようになる。

T (x, t +∆t ) =1

2{T (x −∆x, t )+T (x +∆x, t )} (1.21)

上式を形式的に変形して、微分方程式を導こう。まず両辺からT(x, t)を引くと

T (x, t +∆t )−T (x, t ) =1

2{T (x −∆x, t )− 2T (x, t )+T (x +∆x, t )} (1.22)

となり、両辺を ΔtとΔx2で割ると

1

∆x2

T (x, t +∆t )−T (x, t )

∆t=

1

2∆t

T (x −∆x, t )− 2T (x, t )+T (x +∆x, t )

∆x2 (1.23)

さらに整理して

5

6

7

8

9

10

11

0 0.2 0.4 0.6 0.8 1

x(t)

[m]

t [s]

x(t) = 10 - 4.9x2

Numerical solution (Δt = 0.025)

解析解と数値解の比較(時間刻み 0.025 秒)図 1.5

T(x - Δx, t)

T(x, t + Δt)

T(x + Δx, t)

x - Δx x + Δxx

t

t + Δt

12

×12

×

Time

Space

一次元における拡散のモデル図 1.6

Page 9: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

9

1 基礎事項

T (x, t +∆t )−T (x, t )

∆t=∆x2

2∆t

T (x −∆x, t )− 2T (x, t )+T (x +∆x, t )

∆x2 (1.24)

となる。上式と式 (1.7)および式 (1.10)を比較すると、左辺は時刻 tに関する前進差分、右辺は位

置 xに関する 2階中心差分となっており、上式全体が差分方程式となっていることがわかる。さらに

簡単のため右辺の Δx2/(2Δt)が 1となるような関係を保ちながら、上式における ΔtとΔxを 0に近

づけていくと、上式の差分が微分に置き換えられて、以下の拡散方程式と呼ばれる微分方程式となる。

∂ T

∂ t=

∂ 2T

∂ x2 (1.25)

上式における微分は、被微分関数が時刻 t、位置 xの 2つの独立変数を含むために偏微分となり、

したがって上式は偏微分方程式と呼ばれる。

メッシュ1.6.2 

式 (1.21)と式 (1.24)は形式的には同値であるから、式 (1.25)の偏微分方程式の数値解を求める

には式 (1.21)を計算すれば良い訳であるが、そのためには 1.5節で時間軸を Δtごとに区切ったよう

に、空間方向にもΔxごとに区切って、その区切られた各点ごとに物理量を計算すると都合が良い。

すなわちそのように区切ることで、ある時刻における全ての区切られた点の値を式 (1.21)によって計

算し、次に時刻を Δtだけ進めて、また同様に全ての点の値を式 (1.21)によって計算することで,数

値解を順次求めることができる。

この区切りを 2次元・3次元空間に対して行うと、区切りが網の目のように見えることから、メッシュ、

グリッド、格子などと呼ばれる。また、区切られたそれぞれのマス目のことをセルという。

境界条件1.6.3 

微分方程式を時間方向に解くときに、最初の時刻において初期条件が必要であったように、空間

方向にも、解析領域の境界においては条件が必要である。これを境界条件という。

境界条件の主なものとしては、境界上における関数の値を定める種類の条件、および境界におけ

る関数の法線方向微分値を定める種類の条件が挙げられる。前者をディリクレ(Dirichlet)型境界

条件、後者をノイマン(Neumann)型

境界条件という。

数値解の計算においては、図 1.7に

示すように、境界上で境界外の値を参

照することはできないため、式 (1.21)の

ような数値解の計算式そのものを使用す

ることができない。したがって境界上の

値は、境界条件から計算することになる。

x = Lが解析領域の境界、x < Lが解析

領域内部であるとすると、式 (1.21)の計

T(L - Δx, t)

T(L, t + Δt)

T(L + Δx, t)

L - Δx L + ΔxL

t

t + Δt

12

×12

×

Time

Space

境界外の値は存在しないので境界上の Tの値を計算できない

境界上の数値解図 1.7

Page 10: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

10

算においてディリクレ型境界条件を課す場合は、境界値を与える関数 f(t)によって

T (L, t ) = f (t ) (1.26)

として境界上の Tの値を定める。またノイマン型境界条件の場合は、境界上の法線方向微分値を与

える関数 g(t)によって

T (L, t ) = T (L−∆x)+ g (t )∆x (1.27)

のように境界値を定める。これらを図示すると図 1.8のようになる。

シミュレーションの手順1.7 以上が数値シミュレーションのごく簡単な原理である。それでは、この数値シミュレーションを具体

的にどのように実施するのだろうか。

数値シミュレーションを実施することを、単に解析と呼ぶことが多い。本チュートリアルでも、以後

そのように呼ぶこととする。解析の大まかな手順は、図 1.9のようになる。

プリプロセッシング1.7.1 

解析のためには、まず解析対象の形状を何らかの方法によってコンピュータに入力して、メッシュ

データを作成する必要がある。ついで境界条件および初期条件を決定し、解析終了時刻、離散化手

法、時間刻みなどの実行条件を指定しなければならない。これら一連の、解析前の準備のことをプ

リプロセッシング、プリプロセッシングを行うためのソフトウエアをプリプロセッサと呼んでいる。本

チュートリアルでは、メッシュ作成にはOpenFOAM(本チュートリアルにおける使用ソフトウエアの

詳細は後述)付属の blockMeshユーティリティ、および gmshFoamを使用する。境界条件、初期条件、

実行条件の設定においては、OpenFOAMの場合、付属のプリプロセッサである FoamXを使用する

方法と、テキストエディタによる設定ファイルの直接編集およびキーボードからのコマンド入力の組

合せで操作する方法の、2とおりが用意されている。前者の方が習得内容が少なく入門向けであるが、

上級ユーザの多くは高度な設定を迅速に行える後者を好む。本チュートリアルでは両方を実施する。

解析実施1.7.2 

解析の準備が整ったら、解析を実行する。この解析を実行するソフトウエアのことを、ソルバと呼ぶ。

T(L - Δx, t)

L - Δx L

t

+g(t)Δx

Time

SpaceT(L, t)

(b) Neumann boundary condition

L - Δx L

t

f(t)

Time

SpaceT(L, t)

(a) Dirichlet boundary condition

境界条件の取扱い図 1.8

Page 11: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

11

1 基礎事項

ソルバは、各種の物理現象の支配方程式を前述の離散化手法によってプログラムコード化したソフト

ウエアであり、数値シミュレーションにおいて最も重要なソフトウエアといえる。OpenFOAMの場合、

解析すべき問題の種類に応じてソルバが分かれており、非圧縮性流体解析では icoFoam、弾性体構

造解析では solidDisplacementFoam等と名付けられている。

ポストプロセッシング1.7.3 

解析解析が無事終了したら、結果のデータを分析する。数値シミュレーションの特徴の一つは、

解析対象を時空間的に細分割して高解像度のデータが得られることであるが、それゆえに解析結果

のデータは大量となる。従って解析結果データそのままの数値で評価することは難しく、多くの場合、

コンピュータグラフィックスの技法によって解析対象の形状ににデータを重ね合わせ、人間が目で見

て理解しやすいように表現する。この作業のことを可視化と呼んでいる。むろん、解析結果データ

の一部を取り出して、図 1.2のような 2次元グラフにプロットすることも可能である。これらの手法に

よって解析結果を評価することをポストプロセッシング、ポストプロセッシングを行うためのソフトウ

エアをポストプロセッサと呼ぶ。本チュートリアルでは、ポストプロセッサとして gmshFoamおよび

paraFoamを使用する。

本チュートリアルで使用するソフトウエア1.8 本チュートリアルで使用するソフトウエアは、以下各節で述べるものを元にしている。これらのソフ

トウエアは全て、人間が読み書きできる形式であるプログラムコード、すなわちソースコードが無償

で公開されているオープンソースソフトウエアである。

Gmsh1.8.1 

ベルギーのUniversity of Liège(リージェ大学)および Catholic University of Louvain(ルーヴァン・

カトリック大学)のスタッフによって開発されている、オープンソースソフトウエアとしては珍しいプリ・

解析実施の手順と使用ソフトウエア図 1.9

解析の準備

(プリプロセッシング ) 境界条件の設定

初期条件の設定実行条件の設定

解析の実行

結果の分析

(ポストプロセッシング)

可視化

結果の抽出 sample、Gnuplot

FoamX、またはテキストエディタで直接編集

解析の手順 本チュートリアルで使用するソフトウエア

gmshFoam、paraFoam

メッシュの作成 blockMesh、gmshFoam

OpenFOAMの各種ソルバ(icoFoam等)

Page 12: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

12

ポストプロセッシング両用ソフトウエアである。CADデータおよび独自の形状・メッシュ記述言語に

よるメッシュ作成機能に重点を置いて開発されている。一方でポストプロセッシング機能も、この種

のソフトウエアとしては使用法が非常に簡便でありながら、洗練されたグラフィックス表示を特徴とし

ており、学習用途には最適である。

本チュートリアルで使用する gmshFoamは、Gmshバージョン 2.0.8をベースに、OpenFOAM向

けにカスタマイズされたソフトウエアである。

OpenFOAM1.8.2 

ソルバを中心に、プリプロセッシング・ポストプロセッシングのユーティリティをパッケージしたソ

フトウエア群である。本チュートリアルでは主にソルバを使用する。従来、英国Nabla社の商用シミュ

レーションソフトウエアであった FOAM(Field Operation and Manipulationの略)が、2004年 12

月にオープンソース化されたものであり、現在は英国 OpenCFD社からリリースされている。流体・

構造・熱伝導・金融デリバティブ問題、あるいはそれらが組み合わされた連成問題など、非常に多

くの問題を解くことが出来るマルチフィジックスコードである。オープンソースであって、なおかつソー

スコードが非常によく整理されていることから、問題に合わせたソルバを容易に開発可能であること

が特徴である。本チュートリアルでも、チュートリアルの目的に合わせて作成されたソルバを使用する。

無償でありながら商用コードに劣らない多機能さから、世界の大学、研究機関はもとより、航空機

メーカー・自動車メーカー等、産業界における製品開発の現場でも使用されている。

本チュートリアルでは、OpenFOAMバージョン 1.4を使用する。

ParaView1.8.3 

米国 Kitware社からリリースされているポストプロセッサである。開発には Kitware社のほか、

Sandia National Laboratories(米国サンディア国立研究所)、Los Alamos National Laboratory(米国

ロスアラモス国立研究所)、U. S. Army Research Laboratory(米陸軍研究所)等の、主に米国の国

立研究機関が参加している。最初のリリースは 2002年 10月であり、ポストプロセッサとして比較的

後発の部類に入るが、活発な開発によって急速にオープンソースポストプロセッサとしてスタンダー

ドの地位を確立した。

本チュートリアルで使用する paraFoamは、ParaViewバージョン 3.2.1をベースに、OpenFOAM

向けにカスタマイズされたソフトウエアである。

Gnuplot1.8.4 

汎用のグラフ作成ソフトウエアである。1986年に米国ダートマス大学からリリースされて以来、長

年にわたって改良が続けられてきた。現在は Gnuplotコミュニティによって開発が続けられており、

オープンソースのグラフ作成ソフトウエアとして、ほぼスタンダードである。本チュートリアルでは、

Gnuplotバージョン 4.2.3を使用する。

Page 13: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

13

1 基礎事項

参考文献薩摩順吉、「物理のための数学」、岩波書店(東京)、1995年[1.1]

大矢雅則、岡部恒治ほか、「新編 数学 III」、数研出版(東京)、2005年[1.2]

荒川忠一、「数値流体工学」、東京大学出版会(東京)、1994年[1.3]

葛生和人、「CFD入門テキスト」、流体物理研究所、2001年[1.4]

Christophe Geuzaine and Jean-François Remacle: [1.5] Gmsh: a three-dimensional finite element mesh

generator with built-in pre- and post-processing facilities, http://www.geuz.org/gmsh/

OpenCFD Ltd.: [1.6] OpenFOAM: The Open Source CFD Toolbox, http://www.openfoam.org/

Kitware Inc.: [1.7] ParaView - Parallel Visualization Application, http://www.paraview.org/

gnuplot homepage[1.8] , http://www.gnuplot.info/

Page 14: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

14

Page 15: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

2

15

2 キャビティ流れの解析

概要2.1 「キャビティ」とは、「キャビティ流れ」とは、空洞の内部の流れのことである。本章では、図 2.1

のような空洞の周囲の壁の一部を動かしたときに、空洞内部の流体がどのように動くかを解析する。

流体の流れを解くシミュレーションとして、一般に最もポピュラーなケースである。なお、解析する個々

の問題のことを、ケースという。流体シミュレーションソフトウエアの性能評価や操作法習熟のため

の例題として、ほぼ必ず使われる問題である。

CFD とは2.2 流体とは、外から加えられた力に対して容易に変形する物質のことであり、一般には液体および気

体を指す。流体力学は、その流体の挙動に関する力学である。われわれの身近に普遍的に存在する

空気・水が流体であることからもわかるように、流体力学の応用範囲は非常に幅広い。具体的には、

航空機・自動車・鉄道車両・船舶・ターボ機械等の開発・設計、土木分野における水理計算、建

築分野における環境アセスメント、気象予報、さらには医学における人体血管内流れの解析におい

ても流体力学は活用されている。

これら流体にかかわる諸現象を数値シミュレーションによって解明したり、その数値シミュレーショ

ン手法そのものを研究する学問分野を、計算流体力学、ないし数値流体力学という。英語で称すれ

ば Computational Fluid Dynamicsであり、略して CFDと呼ばれている。CFDでは、流体の挙動を

表す支配方程式を書き下したコンピュータプロ

グラムを実行することで、コンピュータ内に流

れ場を再現し、諸現象の解明や予測を行う。

さらに先端的な応用では、流体物質間の化学

反応(エンジン内部の燃焼問題など)、固体と

の力学的な相互干渉問題(構造物と流体の連

成問題)なども解く。

流体の力学的な状態を決める物理量は流体

の速度および圧力である。したがって最も基

本的な CFDの目的は、流れの各点でのこれ

ら速度と圧力の値を求めることと言える。

キャビティ流れの解析

キャビティ流れ図 2.1

u = 1 m/s

1 m

1 m

x

Fixed wall

Moving wall

y

Page 16: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

16

支配方程式2.3 CFDで解く流れ場の支配方程式は、大別して流体の圧縮性、すなわち密度変化を考慮したものと、

非圧縮性、すなわち密度変化を考慮しないものに分けれられる。液体の流れ場を解析する場合は、

通常は非圧縮性の流体として扱う。気体の場合は、流れのマッハ数、すなわち音速 c0に対する流れ

場の代表的な速度 Uの比

M =U

c0 (2.1)

によって分けられる。概ねマッハ数が 0.3以下では非圧縮性、それ以上では圧縮性の支配方程式を

解く必要があるとされる。常温、1気圧における音速はおよそ 343 m/sであるので、圧縮性・非圧

縮性の境界となる流速は概ね 100 m/sとなる。したがって、高層建築物における風荷重解析および

周辺風環境アセスメント、室内通風・気流解析、給排水管内流れなど、建築分野で行われるCFD

は概ね、非圧縮性の支配方程式を解くと考えてよい。本チュートリアルでも、非圧縮性流体の支配

方程式を解く。

三次元の空間座標を (x, y, z)、空間座標 (x, y, z)および時刻 t における流体速度の x、y、z軸成分

を u、 v、w、圧力を pとすると、非圧縮性流体の支配方程式は、以下の連続の式および運動方程式

を連立した連立偏微分方程式となる。

∂ u

∂ x+

∂ v

∂ y+

∂ w

∂ z= 0 (2.2)

∂ u

∂ t+ u

∂ u

∂ x+ v

∂ u

∂ y+w

∂ u

∂ z=

∂ p

∂ x+ ν

∂ 2u

∂ x2+

∂ 2u

∂ y2+

∂ 2u

∂ z2

∂ v

∂ t+ u

∂ v

∂ x+ v

∂ v

∂ y+w

∂ v

∂ z=

∂ p

∂ y+ ν

∂ 2v

∂ x2+

∂ 2v

∂ y2+

∂ 2v

∂ z2

∂ w

∂ t+ u

∂ w

∂ x+ v

∂ w

∂ y+w

∂ w

∂ z=

∂ p

∂ z+ ν

∂ 2w

∂ x2+

∂ 2w

∂ y2+

∂ 2w

∂ z2

(2.3)

ここでνは流体の動粘性係数であり、この値が大きいほど「粘り気が強い」流体である。動粘性係

数は粘性係数μ、および密度ρを用いて以下で表される。

ν =µ

ρ (2.4)

動粘性係数の値は流体ごとに定まり、空気の場合 1.5× 10- 5 m2/s、水は 1.0× 10- 5 m2/sである。

解析対象2.4 図 2.1に示した、一辺 1 mの壁面で囲まれた、正方形空洞内の流れを解析対象とする。壁面のう

ち一辺は、壁面と平行に 1 m/sで駆動される。動粘性係数は 0.01 m2/sとする(空気や水より粘り気

が非常に強いことになる)。

なお、流れの現象の規模を表す代表的な大きさを Lとすると、以下の無次元数はレイノルズ数と

呼ばれる。

Page 17: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

17

2 キャビティ流れの解析

Re =U L

ν (2.5)

異なる代表的スケールまたは代表流速域の流体現象であっても、レイノルズ数が等しければ相似

な現象であるとされる。本ケースでは

Re =1m/s× 1m

0.01m2/s= 100 (2.6)

となる。

解析の実行手順2.5 OpenFOAM で は、

ケースごとにそのケース

専用のフォルダを作成す

る。このフォルダのこと

を以下、ケースフォルダ

と呼ぶ。本ケースでは解

析に必要な入力データの

ほとんどが既に準備され

ており、以下のフォルダ

に存在する。

z:\OpenFOAM\run\tutorials\icoFoam\cavity

各ケースフォルダの下は、図 2.2に示す構成になっている。サブフォルダ名 0の下には解析上の時

刻 0におけるデータ、すなわち初期条件および境界条件が格納される。解析結果データは、データ

を書き出す各時刻ステップをフォルダ名とするフォルダに格納される。例えば、時刻ステップ 1ごと

にデータを書き出せば、1、2、3、...と名付けられたサブフォルダが作成される。constantサブ

フォルダには、時間によって変化しない各種の

定数などが格納される。本ケースの場合、動粘

性係数を記したデータがこのフォルダに格納さ

れる。さらにconstantサブフォルダの下には、polyMeshサブフォルダにメッシュデータが格

納される。systemサブフォルダには、解析終

了時刻、時間刻み、離散化手法などの解析実

行条件が格納される。

FoamX の起動2.5.1 

OpenFOAMでは前述のとおり、FoamXとい

うアプリケーションを使用して操作する方法、テ

ケースフォルダ

0

1

...

constant

polyMesh

system

初期条件、境界条件

各時刻ステップの解析結果データ

時間によって変化しない、各種定数など

メッシュ設定ファイル、メッシュデータ

実行条件(解析終了条件、時間刻みなど)

(解析実行時に作成されるので、最初は存在しない)

ケースフォルダの構成図 2.2

ケースを開く図 2.3

1.

2.

3.

1.、2.、3. の順にダブルクリック

Page 18: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

18

キストエディタによって設定ファイルを

編集し、キーボードからのコマンド入

力の組合せで操作する方法の 2とおり

が用意されている。ここでは比較的初

心者向けの FoamXによる操作を行っ

てみよう。

まず、FoamXを起動する。Windows

の〔スタート〕メニューから〔すべて

のプログラム〕▶〔OpenFOAM〕▶

〔FoamX〕を選択する。

FoamXが起動したら、図 2.3のよう

にホスト名をダブルクリックし、さらに

〔$FOAM_RUN/tutorials/icoFoam〕▶〔cavity〕をダブルクリックすると、キャビティ流れの解析ケー

スが開く。

メッシュの作成2.5.2 

ここでは図 2.1の解析領域を x軸、y軸方向ともに 20分割したメッシュを作成する。なお、図 2.1

に示すとおり、解析ケース自体は 2次元の問題であるが、OpenFOAMでは必ず 3次元で作成する

必要がある。そのため 2次元問題のメッシュを作成する場合は、z軸方向についてはセル数を 1とし

て、寸法を適当に決める。ここでは z軸方向の寸法を 0.1 mとする。

メッシュの作成にはメッシュ作成専用のソフトウエアを使用するなど、様々な方法があるが、ここで

はOpenFOAM付属の blockMeshユーティリティを使用する。まず、直方体形状をした解析領域の

8つの端点に、図 2.4のように 0番から 7番までの番号を振る。OpenFOAMにおいては、番号は 0

番から始まることに注意されたい。ついで、OpenFOAMでは全ての境界面に名前を付ける必要があ

るので、同図のとおり名付ける。なお、各部位に区切られた境界面のことを、パッチ(patch)という。

以上を blockMeshの設定ファイルにすると以下のようになる。なおこのファイルは、ケースフォル

ダの下の

constant\polyMesh\blockMeshDict

である。

/*---------------------------------------------------------------------------*\| ========= | || \\ / F ield | OpenFOAM: The Open Source CFD Toolbox || \\ / O peration | Version: 1.4 || \\ / A nd | Web: http://www.openfoam.org || \\/ M anipulation | |\*---------------------------------------------------------------------------*/

FoamFile{

x

z

y

0 (0, 0, 0)

4 (0, 0, 0.1)

1 (1, 0, 0)5 (1, 0, 0.1)

6 (1, 1, 0.1)7 (0, 1, 0.1)2 (1, 1, 0)3 (0, 1, 0)

movingWall

�xedWalls

frontAndBack

解析領域のメッシュ分割図 2.4

Page 19: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

19

2 キャビティ流れの解析

version 2.0; format ascii;

root ""; case ""; instance ""; local "";

class dictionary; object blockMeshDict;}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

convertToMeters 1; ←縮尺の設定(以下の座標を 1倍 = 原寸大)

vertices ←解析領域の端点座標の設定( (0 0 0)  ← 0番目の端点座標 (1 0 0)  ← 1番目 (1 1 0)  ← 2番目 (0 1 0)  ← 3番目 (0 0 0.1) ← 4番目 (1 0 0.1) ← 5番目 (1 1 0.1) ← 6番目 (0 1 0.1) ← 7番目);

blocks ←解析領域端点をどのように結んで解析領域を作成し、メッシュ分割するかを設定( hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)); 8つの端点を結んで直方体(hexahedron)を作成し、x、y軸に沿った各辺を等間隔に 20分割

edges ←端点どうしを曲線で結ぶ場合の設定。本ケースでは使用しない();

patches ←境界面の設定( wall movingWall ←上端の壁は壁面(wall)。movingWallと名づける。 ( (3 7 6 2) ←上端壁面の端点番号。解析領域内側から見て時計回り(以下同様)。 ) wall fixedWalls ←左右、下端の壁面は fixedWallと名づける。 ( (0 4 7 3) ←左側壁面の端点番号 (2 6 5 1) ←右側壁面 (1 5 4 0) ←下端壁面 ) empty frontAndBack ← 2次元問題を 3次元で扱うためのダミー境界面なので、空(empty)。 ( (0 3 2 1) ← back側の面 (4 5 6 7) ← front側の面 )

Page 20: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

20

);

mergePatchPairs ←複数ブロック作成時、接続する境界面の設定。本ケースでは使用しない();

// ************************************************************************* //

blockMeshDictの内容を確認したら、図 2.5のとおり、FoamX画面で〔cavity〕をマウスの右ボ

タンでクリック▶〔Foam Utilities〕▶〔mesh〕▶〔generation〕▶〔blockMesh〕を選択して、

blockMeshプログラムを走らせる。

すると図 2.6の画面が開くので、〔Execute〕ボタンをクリックする (ここで〔Edit dictionary〕ボタ

ンを押すと blockMeshDictファイルを編集することが出来るが、ここでは編集不要 )。blockMeshの

実行が終わったら、ケースフォル

ダの下の constant\polyMesh

デ ィ レ クト リ に boundary、faces、neighbor、owner、pointsというファイルが作成

される。これらがメッシュファ

イルである。メッシュファイルは

〔Mesh〕を右クリックして〔Read

Mesh&Fields〕をクリックして読み

込む。

blockMesh プログラムの選択図 2.5

1.

1. を右クリック▶ 2. を左クリック▶図 2.6 の blockMesh 実行後、3. を 右 ク リ ッ ク ▶〔Read Mesh&Fields〕を選択

2.

blockMesh の実行図 2.6

constant

polyMesh

boundary

faces

neighbor

owner

points

メッシュファイル図 2.7

3.

Page 21: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

21

2 キャビティ流れの解析

境界条件・初期条2.5.3 

件の作成

 メッシュを読み込

ん だ ら、 図 2.8 に 示

す〔Mesh〕の左側の鍵

マークをクリックして、さ

ら に〔Patches〕 の 左

側の鍵マークをクリッ

クする。〔movingWall〕、

〔 f i x e d W a l l s 〕

〔frontAndBack〕 を ダ

ブルクリックして、それ

ぞれメッシュ生成時に

blockMeshDict で 指 定

したとおり、boundary

type が〔wall〕、〔wall〕、

〔empty〕となっていることを確認する。これらが境界条件の種類となる。

つぎに境界値と解析領域内部の初期値を指定する。〔Fields〕の左側の鍵マークをクリックすると、

〔U〕、〔p〕の 2項目が現れる。〔U〕は速度、〔p〕は圧力に関する項目である。まず〔U〕をダブルクリッ

クし、〔Internal Field Value〕をクリック、さらに右端の〔...〕をクリックして現れる画面で〔uniform 0.0

0.0 0.0〕となっていることを確認する。これは解析領域内部の速度の初期値が全て 0であることを示

している。次に同様に〔movingWall〕をクリック、今度は速度の x成分が 1.0となっていることを確

認する。これは x軸方向に 1.0 m/sで動く壁を境界条件として指定したこと示す。〔fixedWall〕は固定

された壁という境界条件なので、全て 0であることを確認する。

〔p〕については初期値のみを指定する。〔Internal Field Value〕が 0であることを確認する。

これらの境界条件・初

期条件はケースフォルダ

の下の 0というフォルダ

に作成される。各変数に

つき 1つのファイルが、

変数の名前をファイル名

として作成される。本ケー

スでは U、pが作成され

る。

境界条件・初期条件の設定図 2.8

5.

1.2.

3.

6.

1.、2. をクリック▶ 3. を上から順にダブルクリックして境界条件を確認▶ 4. をクリック▶ 5. をダブルクリック▶ 6. をクリック

4.

controlDict の設定項目図 2.9

赤丸で囲んだ 3 項目が重要

Page 22: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

22

動粘性係数の設定2.5.4 

動粘性係数の設定は〔Dictionaries〕▶〔transportProperties〕の左側の鍵マークをクリックし、〔nu〕

をダブルクリックすると現れる画面で〔0.01〕が指定されていることを確認する。

実行条件の設定2.5.5 

時間刻みなどの実行条件は〔Dictionaries〕▶〔controlDict〕で設定する。設定項目は多数あるが、

特に重要なのは〔endTime〕、〔deltaT〕、〔writeInterval〕の 3項目である。

〔endTime〕では、解析を終了する解析上の時刻を設定する。ここでは〔5.0〕(5 s)を設定する。

〔deltaT〕では時間刻みを設定する。一般には時間刻みを大きく取れば計算時間は少なくて済むが、

シミュレーションの精度は悪くなる。また本ケースでは、以下の式を満たすように時間刻みを設定し

なければならない。

C =|U |∆t

∆x< 1 (2.6)

ここでUは解析領域内の最大値、Δtは時間刻み、Δxは流体が流れる方向のセル幅である。この C

の値をクーラン数という。上式は直感的に解釈すると、「時間刻みごとの流体の移動距離が、セルの

幅を超えてはならない」ことを表している。本ケースに限らず、多くのシミュレーションでクーラン数

による時間刻みの制限が存在する。本ケースでは想定されるUの最大値をmovingWallの移動速度

の 1.0 m/sと見積もり、Δx = 1.0 / 20 = 0.05 mとして Δtを見積もると

∆t <∆x

|U |=

0.05

1.0= 0.05 [s]

(2.7)

となるので、この値をセット

する。

〔writeInterval〕では、 時

間刻みを何回進める度に解

析結果を保存するかを指定す

る。例えば 20と設定すると、

計算が 0.05× 20 = 1 s進む

ごとに解析結果を保存するこ

とになる。時間刻みを進め

る度に解析結果を保存すると

データ量が大量になり、また

保存処理にも余分な時間が

かかるので、通常はこの程度

の値を使用する。 gmshFoam の起動画面図 2.10

1. をクリック▶〔Options〕をクリック

1.

Page 23: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

23

2 キャビティ流れの解析

データの保存2.5.6 

以上の設定が終わったら、FoamX画面

上端のフロッピーディスクのアイコンをク

リックして設定を保存する。

メッシュの確認2.5.7 

これで解析を実行する準備が整った

が、その前にメッシュと初期条件を表示

して確認しておこう。図 2.5と同様にして

〔cavity〕で右クリック▶〔Foam Utilities〕

▶〔gmshFoam〕をクリックし、さらに

〔Execute〕をクリックすると、図 2.10の

画面が現れる。

図 2.10の赤丸で囲んだ部分をクリッ

クし、開いたメニューの一番下の項目

〔Options...〕をクリックすると、図 2.11

の画面となる。図で示した通りに順にクリッ

クしていくと、図 2.12のようにメッシュが

表示される。図 2.12では、メッシュの色が圧力の値、矢印の大きさと色が速度の値を表している。

圧力は解析領域全体で 0となっており、速度はmovingWallの境界面速度のみ矢印の色から 1となっ

ている。よってメッシュ、初期条件、境界条件が正しくセットされていることがわかる。

gmshFoamを終了するには、〔File〕▶〔Quit〕を選択する。

1.

2.

1. をクリック▶2. をクリックして

〔Dimension - 2〕を選択

Options 画面図 2.11

メッシュ表示図 2.12

Page 24: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

24

解析の実行2.5.8 

解析を実行するには、FoamX画面上端の を

クリックする。本ケースは非常に小さなケースなので、

解析は数秒で終了する。

結果の表示2.5.9 

解析が終了したら、結果を表示させてみよう。2.5.7節と同じ手順で gmshFoamを起動する。

グラフィック画面の表示角度・表示サイズのリセット、時刻ステップ間の移動は、図 2.13に示すよ

うに、グラフィック表示ウインドウ下端のボタンで操作する。計算終了時刻の 5 sまでコマ送りで見ると、

時刻によってあまり変化しないほぼ一定の状態、つまり定常状態に落ち着いていくことがわかる。

さらに解析領域境界面に囲まれて内部が見えないので、図 2.14のように、解析領域を切断面によっ

て薄切りにして内部が見えるようにする。解析領域の切断面を設定するには、まず切断面の方程式

Ax +By +C z +D = 0 (2.8)

アニメーション・画面リセットボタン図 2.13

再生

コマ戻し最初に戻す

コマ送り

縮尺を戻す

回転をリセット時刻

切断面の設定図 2.14

1. 2.

3.1. を選 択 ▶ 2. の View[0]、[1]、[2]を Shift+ クリックで選択▶ 3. のとおり入力▶ 4. をクリックして完了

x

z

y

法線ベクトル(0, 0, -1)

残す領域

取除く領域

切断面(z = 0.05)

切断面の設定図 2.15

4.

Page 25: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

25

2 キャビティ流れの解析

の形で決める必要がある。ここでは z軸方向の解析領域中心である z = 0.05の面で切断することとす

ると、A、B、C、Dの組合せは、C、Dの符号によって

(A,B ,C , D) = (0,0,1,−0.05), (0,0,−1,0.05) (2.9)

の 2とおりが存在することになる。gmshFoamの場合、「平面の法線ベクトル (A, B, C)の向いている

方向の解析領域が切断後に残され、法線ベクトルと逆方向の解析領域が切り取られる」仕組みになっ

ているので、画面手前側が切り取られるように法線ベクトルとしては (0, 0, -1)を指定することになる。

従って A、B、C、Dの組合せは

(A,B ,C , D) = (0,0,−1,0.05) (2.10)

に決まる。

このように決まった切断面を入力するには、図 2.15左のように〔Tool〕メニューから〔Clipping

Planes〕を選択し、続いて現れる図 2.15右の画面で A、B、C、Dの値を入力する。すると図 2.16

のように、内部の速度ベクトルが見えるようになる。図中の解析領域内の塗り潰しは、色で圧力を表

している。青色が圧力の低い部分を、赤色が圧力の高い部分を表している。矢印は流体の速度ベク

トルで、矢印の大きさと色で速度の大きさ(速さ)を表している。圧力は解析領域左上で低く、画

面右端で高くなっていることがわかる。速度ベクトルの表示からは、流体が解析領域全体を周回する

渦を描いており、渦の中心は解析領域やや右上寄りにあることが読み取られる。速さは解析領域上

端のmovingWallの近くが大きく、解析領域左右下端で小さくなっていることがわかる。なお phiは、

セル間の界面を流れる流体の流量(フラックス)を表す。

解析結果の切断表示図 2.16

流体の速度ベクトル。色と大きさは速度の大きさ(速さ)を表す(青 = 遅い、赤 = 速い)

解析領域内の塗り潰された面の色は圧力を表す。(青= 圧力が低い、赤 = 高い)

Page 26: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

26

1.

4.

3.

流線描画の設定図 2.17

2.

1. をクリックして、描画を消す▶ 2. をクリックしてメニューを表示し、さらに〔Plugins...〕を選択▶ 3. を選択▶ 4. のとおり入力▶ 5. をクリック▶ 6. をクリックして完了

5. 6.

Page 27: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

27

2 キャビティ流れの解析

流線を描く2.5.10 

今度は、解析領域内に散布した粒子が、流体と共に運動したときに描く軌跡を描いてみよう。この

ような軌跡のことを、流線という。流線の計算原理は、粒子の初期位置 (x, y, z) = (x0, y0, z0)を適当

に決定し、式 (1.11)を x、y、zそれぞれについて計算する。さらに各時刻における粒子位置の間を

直線で結ぶことで、近似的に流線が計算される。ただしこのとき、式 (1.4)では定数であった速度 U0

は、各時刻での粒子の位置を含むセルにおける速度の値が使用される。

まず、流線を見やすいように、図 2.17の手順 1.で圧力・速度・フラックスの描画を消去し、手順 2.、

3.で、流線描画設定画面を表示させよう。粒子は、点 (X0, Y0, Z0)を起点とする 2つのベクトル

U = (X1,Y1,Z1)− (X0,Y0,Z0),

V = (X2,Y2,Z2)− (X0,Y0,Z0) (2.11)

によって張られる平面に均等に配置される。ここでは、解析領域全体に均等に粒子を配置することに

すると、

(X0,Y0,Z0) = (0,0,0.05),

(X1,Y1,Z1) = (1,0,0.05),

(X2,Y2,Z2) = (0,1,0.05) (2.12)

座標軸の表示設定図 2.18

1.

2.

3.

4.

5.

6.1. をクリックしてメニューを表示し、さらに

〔Options...〕を選択▶ 2. をクリック▶ 3. で〔Box〕を選択▶ 4. のチェックマークを消す

▶ 5. のとおり入力▶ 6. をクリックして完了

Page 28: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

28

とするのがよい。粒子の個数は、U、V

方向ともに 10個ずつ、平面全体で合計

10× 10 = 100個とする。時間刻みは式

(2.7)と同様の理由から 0.05秒とし、100

時刻ステップを計算することにすると、ちょ

うど解析終了時刻の 5 sまで計算されるこ

とになる。

以上の数値を図 2.17のように入力し、

〔Run〕をクリックする。さらに、このま

までは解析領域の境界が判らず見辛いの

で、図 2.18に示すとおりに操作して箱型

の座標軸を表示させる。そして再生ボタ

ンをクリックすると、流線描画のアニメー

ションが開始される。

100ステップ経過後の最終状態は図

2.19のようになる。色は各粒子の初期位

置からの移動距離で、青は移動距離の短

い部分、赤は移動距離の長い部分を表す。

画面上端のmovingWall以外の壁面近くでは一般に流れが遅く、また画面左右下端のほか、中央や

や右上の渦中心部にも、流体がほとんど動かず、淀みとなっている部分があることがわかる。

画像を保存するときは、〔File〕▶〔Save As...〕をクリックして現れる画面で、〔Format:〕に〔PNG

(*.png)〕を選択し、〔Filename:〕欄に保存したいファイルの名前を入力する。ただし、ファイル名の

最後を必ず .pngとすること。

以上で、解析の手順をひととおり実行したことになる。

速度成分のプロット2.6 本ケースは、キャビティ流れの信頼できる解析データを提供す

る論文の一つとされる、文献 [2.1]における Re = 100のケースと

同一の解析対象となっている。文献 [2.1]では、x = 0.5 mの断面

における速度の x成分、および y = 0.5 mの断面における速度の

y成分が与えられている(図 2.20)。これらの値と本ケースの同断

面における速度成分を、グラフにプロットして比較してみよう。

sample ユーティリティの実行2.6.1 

解析領域内のデータを、ある線分に沿って抽出(サンプリング)

するには sampleユーティリティを、ある断面に沿って抽出するに

流線表示画面(最終状態)図 2.19

淀み

x

z

y

y = 0.5 m

x = 0.5 m

データの抽出面図 2.20

Page 29: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

29

2 キャビティ流れの解析

は sampleSurfaceユーティリティを使用する。本ケースは二次元なので、x = 0.5 m、y = 0.5 mのい

ずれの断面についても、どちらのユーティリティを使用しても本質的には同じである。ここでは、より

簡単に使用できる sampleユーティリティを使用する。

sampleユーティリティの設定ファイルは、ケースフォルダの下の

system/sampleDict

である。内容は以下のようになっている。

/*---------------------------------------------------------------------------*\| ========= | || \\ / F ield | OpenFOAM: The Open Source CFD Toolbox || \\ / O peration | Version: 1.4 || \\ / A nd | Web: http://www.openfoam.org || \\/ M anipulation | |\*---------------------------------------------------------------------------*/

FoamFile{ version 2.0; format ascii;

root ""; case ""; instance ""; local "";

class dictionary; object sampleDict;}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

interpolationScheme cellPoint; ←各サンプル点の値を、セル中心の値から補間して与える

writeFormat raw; ←出力データのフォーマット指定。最も簡単なフォーマットを使用

sampleSets ←サンプリングする直線の指定( uniform ←線分上を等間隔にサンプリングする { name xCenter; ←出力データの名前。ファイル名に使用される axis y; ←出力データの座標に y座標のみを出力する start (0.5 0 0.05); ←線分の始点の座標 end (0.5 1 0.05); ←線分の終点の座標 nPoints 129; ←サンプリングする点数の指定 } uniform ←もう一組のデータ。意味は上と同様 { name yCenter; axis x; start (0 0.5 0.05); end (1 0.5 0.05); nPoints 129; }

Page 30: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

30

);

fields ←サンプリングする変数(速度、圧力など)の指定( U ←速度をサンプリングする);

// ************************************************************************* //

なお、以降のファイル内容例では、各ファイル冒頭の

/*---------------------------------------------------------------------------*\| ========= | || \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |...(中略)... class dictionary; object sampleDict;}

の部分を省略する。

抽出する点数を 129点としたのは文献 [2.1]に合わせたためであるが、それに対して本ケースの x、

y各方向のメッシュ分割数は各 20しか無いので、そのままプロットすると不連続なプロットとなる。こ

こでは interpolationSchemeを cellPoint、すなわちメッシュを構成する各セル間の値を補間することに

より、滑らかなプロットとなるようにしている。

sampleユーティリティは、図 2.5と同様にして、〔cavity〕を右クリック▶〔Foam Utilities〕▶

〔postProcessing〕▶〔miscellaneous〕▶〔sample〕をクリックする。ここでは最後に保存された時刻ステッ

プのみを抽出するために、続いて現れる図 2.21左端の画面で、〔Edit Arguments〕をクリックしよう。

さらに図 2.21の手順で操作し、〔latestTime〕のオプション設定を〔on〕として sampleユーティリティ

を実行する。抽出されたデータは、ケースフォルダの下の samples/5ディレクトリに、xCenter_

U.xyおよび yCenter_U.xyの名前で作成される。参考までに xCenter_U.xyの最初の5行は、

以下のようになっている(ここでは見やすいよう、列を揃えている)。

↓ 1列目 : y座標 ↓ 2列目から 4列目 : 速度の x、y、z各成分

1.2.

3.

4.

5.

6.1. を ク リ ッ ク ▶2. の右端をクリック▶ 3. をクリック▶ 4. をクリック▶5.をクリック▶ 6.をクリック

sample ユーティリティの実行図 2.21

Page 31: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

31

2 キャビティ流れの解析

0 0 0 00.0078125 -0.00469095 6.12964e-05 0 ←この行の 3列目は、6.12964× 10

-5の意0.015625 -0.00938189 0.000122593 00.0234375 -0.0140728 0.000183889 00.03125 -0.0187638 0.000245186 0

Gnuplot による抽出したデータのプロット2.6.2 

グラフ作成ソフトの Gnuplotを使っ

て、sample ユーティリティで抽出し

たデータを、文献 [2.21]のデータと

重ねてプロットしてみよう。なお文献

[2.21]のデータは、ケースフォルダ

に velocityUat100.txt(x = 0.5

mにおける速度の x成分)、およびvelocityVat100.txt(y = 0.5 m に

おける速度の y成分)の名前で用意され

ている。

Windowsの「スタート」メニュー▶〔す

べてのプログラム〕▶〔Gnuplot〕を選

択し、起動する。すると

gnuplot> _

と表示されて入力待ちの状態となる。

Gnuplotの操作は、ここからコマンド

をキー入力することで進める。なお

Gnuplotでは、上向き矢印キー〔↑〕

を押すことで、過去のキー入力を呼び出

すことが出来る。これによって、類似し

たキー入力を続けて行う場合の労力を軽

減できるようになっているので、活用さ

れたい。

まずは横軸に y座標、縦軸に x = 0.5

mにおける速度の x成分をプロットしたグラフを作成するため、以下のコマンドを入力しよう。なお

以下のコマンド行末の "\"は、紙面の都合で次の行に折り返したコマンドであり、実際は次の行まで

続けて入力することを表す。

cd "z:/OpenFOAM/run/tutorials/icoFoam/cavity" ←ケースフォルダに移動するset xlabel "y [m]" ← x軸ラベルの設定 set ylabel "u-velocity [m/s]" ← y軸ラベルの設定

x = 0.5 m における速度の x 成分のプロット図 2.22

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

0 0.2 0.4 0.6 0.8 1

u-ve

loci

ty [m

/s]

y [m]

OpenFOAM calculationSolution by Ghia

-0.25

-0.2

-0.15

-0.1

-0.05

0

0.05

0.1

0.15

0.2

0 0.2 0.4 0.6 0.8 1

v-ve

loci

ty

x [m]

OpenFOAM calculationSolution by Ghia

y = 0.5 m における速度の y 成分のプロット図 2.23

Page 32: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

32

plot "samples/5/xCenter_U.xy" u 1:2 t "OpenFOAM calculation", "velocityUat100.txt"\ t "Solution by Ghia" ←データをプロットする

最後のコマンドの "u 1:2"は、3列以上のデータを持つデータファイルをプロットする際に、1列目を

横軸、2列目を縦軸とすることを意味する。以上のコマンドにより、図2.22のようにグラフが表示される。

本ケースのデータが赤色の点で、文献 [2.1]のデータが緑色でプロットされており、両者が比較的良

好に一致していることがわかる。

表示させたグラフをグラフィックデータとして保存するには、以下のように入力する。

set terminal emf ←保存する形式を EMF(Windowsの標準グラフィック形式)とするset output "cavity-u-velocity.emf" ←ファイル名を cavity-u-velocity.emfとするplot "samples/5/xCenter_U.xy" u 1:2 t "OpenFOAM calculation", "velocityUat100.txt"\ t "Solution by Ghia" ←データを再度プロットするset output ←ファイル名をリセットするset terminal windows ←保存する形式をリセットする

これらのコマンドによって、グラフが EMF形式(Windowsの標準的なグラフィック形式)で保存される。

このファイルはMicrosoft Word等のワードプロセッサに取り込むことができる。

つぎに、y = 0.5 mにおける速度の y成分をプロットしてみよう。x成分の場合と同様に、以下のよ

うに入力する。

set xlabel "x [m]"set ylabel "v-velocity"plot "samples/5/yCenter_U.xy" u 1:3 t "OpenFOAM calculation", "velocityVat100.txt"\ t "Solution by Ghia" ←速度の y成分を取り出すため、u 1:3となっていることに注意

すると図 2.23のようにプロットされる。今度は、x = 0.2 mと x = 0.8 mの速度成分が最大・最小値

を取る近辺で、本ケースの結果と文献 [2.1]のデータが一致していないことがわかる。

メッシュの分割数を上げる(コマンドラインによる操作)2.7 前節までの解析では、速度が文献 [2.1]と合わなかったが、今度はメッシュの分割数を x、y軸方

向にそれぞれ倍の 40× 40として解析してみよう。さらにここまでは FoamXを使用して操作してきた

が、2.5.1節で述べたとおり、OpenFOAMではエディタでの設定ファイルの編集と、キーボードから

のコマンド入力による操作が可能である。ここではそれら設定ファイルと主要なコマンドのイントロダ

クションも兼ねて、この方法による解析を行う。

ケースのコピー2.7.1 

まず FoamX画面上端の をクリックし、前節で行っていた解析ケースを閉じる。つぎに図 2.24

のとおり操作し、cavityケースをコピーしてcavityFineケースを作成する。さらに〔File〕メニュー▶〔Exit〕

により、FoamXを終了する。ここから先はキーボードによる操作となる。

Windowsの「スタート」メニュー▶〔すべてのプログラム〕▶〔OpenFOAM〕▶〔OpenFOAM

Terminal〕をクリックし、図 2.25のコマンド入力画面を開く。なお、このコマンド入力画面では、黄

Page 33: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

33

2 キャビティ流れの解析

色字で表示されている現在いるフォルダを基準にしてファ

イルのコピー、移動、削除などの操作を行うようになっ

ている。現在いるフォルダを移動するには、cdコマンド

(change directory)コマンドを入力して cavityFineのケー

スフォルダに移動する。

cd OpenFOAM/run/tutorials/icoFoam/cavityFine

ここで "/"は、フォルダ階層の区切り文字を表す。上記フォ

ルダの場合、エクスプローラで見ると図 2.26のフォルダ

階層に対応する。なお、このコマンド入力画面では、以

下の機能があるので活用されたい。

上矢印キー〔↑〕:過去に入力したコマンドを再表示•

タブキー〔TAB〕: ファイル名やフォルダ名を途中まで入力して押すと、名前の残りが一意に決•

ケースのコピー図 2.24

4.

3.

2.

1.

1. を右クリック▶ 2. をクリック▶ 3. のとおり入力▶4. をクリック▶続いて現れる画面で〔Yes〕をクリック

コマンド入力画面図 2.25

黄色字 : 現在いるフォルダ("~" は z:/ を表す)

このように入力する

フォルダ階層図 2.26

Page 34: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

34

まるところまで補完される

FoamXによるケースのコピーでは、ケースフォルダの下の constantフォルダと systemフォル

ダのみがコピーされ、初期値の入った 0フォルダがコピーされないので、以下の cp(copy)コマン

ドで cavity/0フォルダを cavityFineのケースフォルダにコピーする。ここで "-r"はフォルダごとコ

ピーすること、".."は現在いるフォルダの上の階層のフォルダ、"."は現在いるフォルダを表す。

cp -r ../cavity/0 .

これで必要なファイルが全てコピーされた。

blockMeshDictファイルの編集とメッシュの生成2.7.2 

つぎに blockMeshDictファイルを修正する。「スタート」メニュー▶〔すべてのプログラム〕▶〔秀

丸エディタ〕で constant/polyMesh/blockMeshDictファイルを開き、45行目の

hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)

のメッシュ分割数を記述している (20 20 1)を (40 40 1)に変更し、

hex (0 1 2 3 4 5 6 7) (40 40 1) simpleGrading (1 1 1)

として保存する。

さらに、blockMeshを実行してメッシュを生成する。blockMeshに限らず、OpenFOAMのほぼ全

てのコマンドは、コマンド名の後に 2つのフォルダ名を記述するようになっている。最初のフォルダ

名はコマンドを実行するケースフォルダの一つ上のフォルダ(ルートパス)、次のフォルダ名はケース

フォルダ名である。本ケースでは、ルートパスは現在いるケースフォルダの上の階層のフォルダなの

で ".."、ケースフォルダ名は cavityFineである。

blockMesh .. cavityFine

以上によってメッシュが生成された。

初期値と境界条件の確認2.7.3 

こんどは初期値と境界条件を確認する。ケースフォルダの下の 0/Uが速度、0/pが圧力の設定ファ

イルとなっている。0/Uファイルは以下のとおりである。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions [0 1 -1 0 0 0 0]; ←単位。左から kg、m、s、K、mol、A、cdの乗数。この場合、m/sを表す

internalField uniform (0 0 0); ←解析領域内部の速度は一様に、全座標軸成分とも 0

boundaryField ←境界条件の指定{

Page 35: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

35

2 キャビティ流れの解析

movingWall ← movingWallの境界条件 { type fixedValue; ←境界面での値を指定(Dirichlet境界条件) value uniform (1 0 0); ←一様に x方向成分のみ 1 m/s、その他は 0 }

fixedWalls ← fixedWallsの境界条件 { type fixedValue; value uniform (0 0 0); ←固定壁なので、全座標軸成分とも 0 }

frontAndBack ← frontAndBackの境界条件 { type empty; ← 2次元問題を扱うためのダミー境界なので、empty }}

// ************************************************************************* //

0/pファイルは以下のとおりである。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions [0 2 -2 0 0 0 0]; ←単位。物理的な圧力を密度で除していることに注意

internalField uniform 0; ←解析領域内部の圧力初期値は一様に 0

boundaryField{ movingWall { type zeroGradient; ←境界面での圧力勾配が 0(Neumann境界条件) }

fixedWalls { type zeroGradient; }

frontAndBack { type empty; }}

// ************************************************************************* //

圧力の単位は通例、SI単位系で [N/m2]、すなわち [kg・m-1・s-2]であるが、OpenFOAMでは圧力

を密度([kg/m3])で除した [m2・s-2]で与えていることに注意されたい。

物性値の確認2.7.4 

動粘性係数はケースフォルダ下の constant/transportPropertiesファイルで設定する。内

容は以下のとおりである。

Page 36: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

36

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

nu nu [0 2 -1 0 0 0 0] 0.01; ←単位は m2/s。最後の 0.01が動粘性係数

// ************************************************************************* //

実行条件の制御2.7.5 

時間刻み、終了時刻などの設定はケースディレクトリ下の system/controlDictファイルで行う。

内容は以下のとおりである。なお、時刻の単位は全て [s](秒)である。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

application icoFoam;

startFrom startTime; ←計算開始時点の指定。latestTimeなら保存された最終時刻

startTime 0; ←計算開始時刻

stopAt endTime;

endTime 10; ←計算終了時刻。元の設定の倍である 10 sに変更すること

deltaT 0.025; ←時間刻み。元の設定の半分である 0.025 sに変更すること

writeControl timeStep; ← writeIntervalの単位。runTimeなら、解析上の時刻

writeInterval 20; ← writeControlが timeStepのとき、何 deltaT毎に保存するか

purgeWrite 0;

writeFormat ascii; ←データをテキスト形式で保存。binaryならバイナリ形式

writePrecision 6; ←テキスト形式でデータを保存する際の数値精度

writeCompression uncompressed; ←保存データのデータ圧縮(gzip)の有無

timeFormat general;

timePrecision 6; ←時刻の取扱い上の精度

runTimeModifiable yes;

// ************************************************************************* //

セル幅を半分にしたことに合わせて、(2.6)式のクーラン条件から時間刻みも半分の 0.025 sとしてい

ることに注意されたい。また今度は定常状態まで計算するため、解析終了時刻も倍の 10 sまで計算

することとしよう。その他の controlDictファイルの設定内容概略は上記のとおりであるが、さらなる

詳細については、OpenFOAMユーザーガイド [2.2]の 4.3節を参照されたい。

ソルバの実行を制御するためのファイルとしては、controlDictの他にもsystem/fvSchemes

ファイルと system/fvSolutionファイルがある。いずれも離散化手法の詳細を設定するため

Page 37: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

37

2 キャビティ流れの解析

のファイルであるが、やや高度な内容

であるため、ここでは説明を省略する。fvSchemes に つ い て は OpenFOAM

ユーザーガイドの 4.4節、fvSolution

については 4.5節を参照されたい。

メッシュの確認2.7.6 

以上でソルバの実行に必要なファイル

をひととおり見たことになる。全てのファ

イルの確認が完了したら、ソルバの実行

前にメッシュと境界条件を gmshFoamで

表示させて確認しよう。

gmshFoam .. cavityFine

gmshFoamが起動した後、2.5.7節と同様

に操作すると、図 2.27のように表示され

る。図 2.12と比較すると、メッシュが細

かくなっていることがわかる。

解析の実行2.7.7 

メッシュの確認が済んだら、解析を実行しよう。以下のように入力すると、ソルバが起動して解析

の実行が始まる。

icoFoam .. cavityFine

メッシュ分割数が 20× 20の時より、メッシュ数と時刻ステップ数が増えた分、解析に多少の時間が

かかる。画面に多数のメッセージが表

示された後、数十秒から数分程度で実

行が終了する。

結果の確認2.7.8 

2.7.6節と同様に、再度

gmshFoam .. cavityFine

で gmshFoamを実行し、結果を確認し

よう。〔p〕と〔phi〕をクリックして圧力

とフラックスの表示を消し、速度ベクト

ルの表示のみを残してアニメーション再

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

0 0.2 0.4 0.6 0.8 1

u-ve

loci

ty [m

/s]

y [m]

OpenFOAM calculationSolution by Ghia

x = 0.5 m における速度の x 成分のプロット図 2.28

cavityFine ケースのメッシュ図 2.27

Page 38: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

38

生すると、次第に定常状態へ落ち着い

ていく様子がわかる。

速度成分のプロット2.7.9 

2.6節と同様に、sampleユーティリ

ティによって図 2.20に示した断面にお

ける速度成分を抽出し、Gnuplotによっ

てプロットする。sampleDictは 2.6.1節

と同一のものを使用することができるの

で、sampleユーティリティをすぐに実行

することができる。ただし、最終時刻ス

テップのみのデータを取り出すため、コ

マンドの最後に -latestTimeと書く。

sample .. cavityFine -latestTime ←最後に "-latestTime"を追加する

以上によってデータが抽出されたので、2.6.2節と同様にしてGnuplotでプロットする。Gnuplot

を起動後、以下のように入力する。

cd "z:/OpenFOAM/run/tutorials/icoFoam/cavityFine" ←ケースフォルダに移動するset terminal emf ←保存する形式を EMF(Windowsの標準グラフィック形式)とするset xlabel "y [m]" ← x軸ラベルの設定 set ylabel "u-velocity [m/s]" ← y軸ラベルの設定set output "cavityFine-u-velocity.emf" ←ファイル名を cavity-u-velocity.emfとするplot "samples/10/xCenter_U.xy" u 1:2 t "OpenFOAM calculation", \"../cavity/velocityUat100.txt" t "Solution by Ghia" ← x成分データをプロットするset xlabel "x [m]"set ylabel "v-velocity [m/s]"set output "cavityFine-v-velocity.emf"plot "samples/10/yCenter_U.xy" u 1:3 t "OpenFOAM calculation", \"../cavity/velocityVat100.txt" t "Solution by Ghia" ← y成分データをプロットするset output ←ファイル名をリセットするset terminal windows ←保存する形式をリセットする

以上によって得られるグラフは、図 2.28および図 2.29となる。メッシュ分割数 20× 20での結果で

ある図 2.22、図 2.23と比べると、Ghiaの結果と良く一致していることがわかる。

演習問題セルの間隔は必ずしも一定である必要はなく、位置によって異なる大きさのセルを生成することも

できる。blockMeshDictの以下の行

hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1)

の末尾に書かれている (1 1 1)は隣り合うセル同士のセル幅比率であり、例えば (1.05 0.95 1)

x = 0.5 m における速度の x 成分のプロット図 2.29

-0.25

-0.2

-0.15

-0.1

-0.05

0

0.05

0.1

0.15

0.2

0 0.2 0.4 0.6 0.8 1

v-ve

loci

ty [m

/s]

x [m]

OpenFOAM calculationSolution by Ghia

Page 39: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

39

2 キャビティ流れの解析

等とすることによってセル幅を連続的に変化させることができる。このようなメッシュを作成して、解

析を行え。なお、クーラン条件に注意すること。

参考文献U. Ghia, K. N. Ghia and C. T. Shin, "High-Re solutions for incompressible flow using the [2.1]

Navier-Stokes equations and a multigrid method," Journal of Computational Physics, 48, pp.

387-411, 1982.

OpenCFD Ltd.: [2.2] OpenFOAM: The Open Source CFD Toolbox User Guide, Version 1.4, 2007

山根隆一郎 , 中村雅英 , 「基礎流体科学」, 朝倉書店 , 1994[2.3]

梶島岳夫 , 「乱流の数値シミュレーション」, 養賢堂 , 1999[2.4]

Page 40: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

40

Page 41: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

3

41

3 高層ビル周り流れの解析

概要3.1 

本章解析ケースの紹介3.1.1 

本章では、前章に続いてCFDを取扱う。

CFD技術はその発達により、建築分野でも様々な実用的問題の解決に利用されるようになった。

例を挙げれば、室内では空調・機械換気・自然換気による温熱快適性・通風・汚染ガス濃度など

の環境的要素の予測がある。さらに屋外では、ビル風の予測に代表される市街地風環境のアセスメ

ント、強風時に高層ビルに加わる構造的風荷重の予測、さらには都市規模でのヒートアイランド現象

の解明などを挙げることができる。

なかでも本章では、ビル風を取り上げたい。ビル風とは、高層建物の周辺に発生する突風を含ん

だ強風のことである。一般に市街地では、建物が密集して建てられているため、建物群が気流に対

して障害物として働く。そのため市街地地表付近の風速は、上空の風速の 2~ 3割程度にまで弱め

られ、気象条件や季節的要因による風速の変動も緩和されている。そこに高層ビルが建設されると、

高層ビルによってせき止められた上空の強い気流が地上まで吹き下ろす(図 3.1)。これがビル風の

発生原理であり、特に既存の市街地風環境を破壊する環境障害として認識されたとき、風害と呼ば

れる。

ビル風は 1970年代の都心における高層ビル建設に伴って社会問題化し、当時は主に風洞実験に

よる予測手法が確立された。それが近年は、全国的に激増した高層化したマンションの建設に伴う

風害が多発しており、設備・費用・時間を多く必要とする風洞実験に代わり、CFDを主体とした予

測技術が求められている。

予測技術の確立に関しては、コンピュータの高速化、CFDソフトウエアの急速な機能向上および

普及によって目処が立った段階である。その

一方で、まさに予測技術の確立によって、高

度な専門的知識を持たない技術者でもCFD

の実施が可能となった。また、CFDによっ

て解析された結果は、前章でも見たように、

コンピュータグラフィックスによって判りやすく

説得力のあるプレゼンテーションが可能であ

る。それゆえ、適用された解析方法の妥当

高層ビル周り気流の解析

ビル風

ビル風図 3.1

Page 42: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

42

性および解析結果の信頼性に疑

問のある解析結果でも、絶対的

な結果として通用してしまう危険

性がある。ここに、次なる課題で

ある予測技術の標準化が問題とし

て浮かび上がる。

ここで取り上げる解析ケースは、

そのような問題意識からCFDに

よるビル風予測技術の標準化を

目指して活動した日本建築学会の

ワーキンググループによって策定

された、ベンチマークテスト問題のひとつである。ベンチマークテストとは、複数のソフトウエアの

計算速度や精度等の性能評価および検証のために行われる、比較テストのことである。本ベンチマー

クテスト問題には、問題設定の400分の1スケールモデルによる風洞実験の計測結果が付されており、

それと比較することで解析結果の妥当性を評価できるようになっている。

解析ケース概要3.1.2 

解析対象は、文献 [3.1]の「街区内に建つ高層建物モデル」である。実スケールでの平面形状は、

40 m× 40 mの正方形で高さ10 mのブロック状にモデル化された街区が均等に並んでおり、その

中心の一街区に 25 m× 25 m× 100 mの高層建物が建っている。風は建物正面から吹き付けるこ

ととする。ただし、この実スケールでの解析対象をそのままコンピュータ上で再現するのはコンピュー

タの能力的に不可能であるため、今回ここで解析を行うのは、その 100分の 1の縮尺であるスケー

ルモデルである。風洞実験では、100分の 1ス

ケール換算で高層ビルを中心として直径 6.4 m

の範囲が再現されているので、それに合わせて

市街地の範囲を設定する。解析対象の形状およ

び寸法は、図 3.2のようになる。

メッシュの作成3.2 本ケースは、解析領域が閉じていない流れ(外

部流れ)であるため、本来であれば無限に大き

な解析領域を設定する必要がある。しかしなが

ら、数値シミュレーションにおいて無限に広い

解析領域を設定することは不可能である。した

がって、本来の領域を適当な部分で区切り、そ

の部分に対してメッシュを作成する。ここでは、

6.4 m

1 m

解析対象形状図 3.2

xy z

解析領域

7.2 m

粗いメッシュで良い

細かいメッシュが必要

解析領域図 3.3

Page 43: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

43

3 高層ビル周り流れの解析

図 3.3に示すように、街区のスケール

モデルをすっぽり覆う形の、一辺 7.2

mの立方体状の解析領域を設定する

こととしよう。

なお解析領域の設定にあたっては、

経験的に、以下の条件を満たすこと

が望ましいとされている。

建物周辺の市街地・敷地の再1.

現範囲は、少なくとも建物外縁

から測って高さの 2倍の水平範

囲を再現すること。

風向に対して垂直な解析領域2.

断面積に対する建物の見付面積

(断面への投影面積)は、3%

以下とすること。なおこの割合

は、閉塞率と呼ばれる。

本ケースの場合、1.に関しては建物高さのおよそ 3倍の半径を再現しており、2.の閉塞率は 0.5%

である。したがって、両者ともに充分に条件を満たしている。

また、前章で見たとおり、一般にメッシュ分割は細かいほど計算精度が良好となるが、一様に近い

単純な流れとなることが確実な領域に対しても細かいメッシュ分割を実施することは、計算上無駄で

ある。したがって、流れが単純になると見込まれる領域のメッシュは粗く分割し、複雑になると見込

まれる領域については細かく分割することが望ましい。本ケースでは、障害物の無い上空は比較的

単純な流れ、建物等の障害物の影響を受ける地表近く、特に建物の近傍部では複雑な流れとなるこ

とが予想される。従ってここでは、上空から地上、さらに建物近傍へ行くに従って細かくなるようなメッ

シュを生成してみよう。

本ケースでは、前章でも使用した blockMeshをはじめとして、OpenFOAM付属のプログラムを使

用してメッシュを作成する。メッシュ作成のための大まかな手順は、以下のようになる。

blockMeshを使用して、直交で等間隔なメッシュを作成する。1.

1. で生成したメッシュに対して、cellSet、refineMeshを使用して、解析領域の高さ1/2以下の2.

部分に関して、メッシュを等方的に細分割する。

2.と同様にして、さらに高さ1/4以下の領域のメッシュを等方的に細分割する。3.

insideCell、cellSet、subsetMeshを使用して、低層建物内のメッシュを除去 する。 4.

autoRefineMeshを使用して、高層建物周辺の格子を等方的に細分割する。5.

insideCell、cellSet、subsetMeshを使用して、高層建物内の格子を除去する。6.

writeCellCentres、cellSet、refineMeshを使用して、地表面付近で粗い格子を等方的に細分割7.

する。

ベースメッシュの頂点座標・頂点番号・境界名図 3.4

inlet

outlet

ground

skyside1

side2

xy z

0 (-3.6, -3.6, 0)

1 (3.6, -3.6, 0)

2 (-3.6, 3.6, 0)

3 (3.6, 3.6, 0)4 (-3.6, -3.6, 7.2)

6 (-3.6, 3.6, 7.2)

7 (3.6, 3.6, 7.2)

5 (3.6, -3.6, 7.2)

Page 44: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

44

以下各節で上記の作業を順に説明するが、作業開始前に、Windowsの「スタート」メニュー▶〔す

べてのプログラム〕▶〔OpenFOAM〕▶〔OpenFOAM Terminal〕をクリックし、コマンド入力画面

を開く。画面が開いたら、cd コマンドで本ケースのケースフォルダに移動しておこう。

cd /cygdrive/z/OpenFOAM/run/tutorials/simpleFoamMeancd windEnvironmentAroundHighRiseBuilding

また、本ケースは初期時刻フォルダ 0が存在していない。メッシュ作成後に初期値を設定するが、メッ

シュ作成中に空の初期時刻フォルダが必要になるので、あらかじめ作成しておく。

mkdir 0 ← mkdirは、フォルダを作成するコマンド

等間隔メッシュの作成3.2.1 

まずは blockMeshを使用して、以後のメッシュのベースとなる、直交かつ等間隔なメッシュを作成

しよう。メッシュ分割数は、各座標軸方向に 18(セル間隔 0.4 m)とし、さらに図 3.4のように頂点

座標、頂点番号、境界面の名前を決めると、blockMeshDictは以下のようになる。この時点では、

建物の形状はメッシュに全く表現されていないことに注意してほしい。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

convertToMeters 1;

vertices ←頂点座標の設定( (-3.6 -3.6 0) ← 0番 ( 3.6 -3.6 0) (-3.6 3.6 0) ( 3.6 3.6 0) (-3.6 -3.6 7.2) ( 3.6 -3.6 7.2) (-3.6 3.6 7.2) ( 3.6 3.6 7.2) ← 7番);

blocks ( hex (0 1 3 2 4 5 7 6) (18 18 18) simpleGrading (1 1 1) ←頂点番号の並びに注意);

patches ( patch inlet ←流入境界は一般に inletと呼ばれる。patchは、壁面でない境界を表す ( (0 4 6 2) ←解析領域内側から見て時計回りに番号を振る ) patch outlet ←流出境界は一般に、outletと呼ばれる ( (1 3 7 5) ) wall ground

Page 45: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

45

3 高層ビル周り流れの解析

( (0 1 3 2) ) patch sky ( (4 5 7 6) ) patch side1 ( (2 3 7 6) ) patch side2 ( (0 1 5 4) ));

// ************************************************************************* //

本 blockMeshDictは、ケースフォルダの下の constant/polyMesh.orgフォルダに置かれている

ので、blockMeshから読み込まれるよう、フォルダ名を constant/polyMeshに変更する。

paraFoam の初期画面図 3.5

Page 46: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

46

cp -r constant/polyMesh.org constant/polyMesh ← "-r"はフォルダごとコピーの意

ついで、blockMeshを実行する。なお、blockMeshコマンドに与えるケースフォルダ名は、前章ど

おりであれば ".. windEnvironmentAroundHighRiseBuilding"であるが、本ケース名は長

いので、より短く入力できる ". ."としよう(2つのピリオドの間に、スペースが入ることに注意され

たい)。

blockMesh . .

メッシュの生成が終了したら、画面表示して確認してみよう。前章では可視化ソフトウエアとして

gmshFoamを使用したが、本章では paraFoamを使用する。paraFoamを起動するには、ケースフォ

ルダで paraFoamとのみ入力すればよい。

paraFoam

すると図 3.5の画面が現れるので、〔Apply〕をクリックする。さらに図 3.6に示す要領で操作すると、

画面右側にメッシュが表示される。画面に表示されているグラフィックスを保存する場合は〔File〕▶

〔Save Screenshot〕を、paraFoamを終了するには、〔File〕▶〔Quit〕を選択する。

メッシュの再分割3.2.2 

前節で生成したメッシュは、上空の流れが比較的一定となる領域の解析にのみ適した粗いメッ

シュなので、地表面に近い解析領域の下半分について、セル間隔が半分に細かくなるよう再分割を

行う。そのためにはまず、再分割するメッシュ領域を cellSetコマンドによって選択する必要がある。

cellSetの設定ファイルは、ケースフォルダの下の system/cellSetDictであるが、本ケースでは

paraFoam によるメッシュの表示図 3.6

1.

2.

3.1. をクリック▶ 2. で〔Solid Color〕を選択▶ 3. で〔Surface With Edges〕を選択

メッシュ表示(マウス操作で回転可)

Page 47: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

47

3 高層ビル周り流れの解析

system/cellSetDict_halfのファイル名で用意されている。内容は以下のとおりである。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Name of set to operate onname set; ←選択した領域の名前。ここでは setという名前を付ける

// One of clear/new/invert/add/delete|subset/listaction new; ←選択範囲を新規に作成するので new

// Actions to apply to cellSet. These are all the topoSetSource's ending// in ..ToCell (see the meshTools library).topoSetSources(boxToCell ←各面が座標軸に沿った箱形(直方体形状)の領域を選択{box (-3.6001 -3.6001 -0.0001) (3.6001 3.6001 3.6001); ←箱の対角となる頂点を指定。メッシュ領域が確実に収まるよう、箱形領域を僅かに広く設定していることに注意});

// ************************************************************************* //

まず、このファイルのファイル名を system/cellSetDictへ変更し、その後 cellSetを実行する。

なおsystemサブフォルダには既にcellSetDictファイルが存在しているが、上書きして構わない。

cp system/cellSetDict_half system/cellSetDictcellSet . .

無事に実行されれば、constant/polyMesh/sets/set.gzというファイルが作成される。このファ

イルに選択範囲の情報が書き込まれている。

次に、メッシュを再分割するコマンドである refiineMeshを実行する。refineMeshの設定ファイルは、system/refineMeshDictである。内容は以下のとおりである。refineMeshは局所座標系なども扱

えるようになっているので、設定はやや複雑となっている。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Cells to refine; name of cell setset set; ← cellSetで選択した領域の名前

// Type of coordinate system:// - global : coordinate system same for every cell. Usually aligned with// x,y,z axis. Specify in globalCoeffs section below.// - patchLocal : coordinate system different for every cell. Specify in// patchLocalCoeffs section below.coordinateSystem global; ←メッシュを再分割する方向。解析領域全体で同じ方向を使用//coordinateSystem patchLocal;

// .. and its coefficients. x,y in this case. (normal direction is calculated// as tan1^tan2)globalCoeffs ← x軸、y軸の方向ベクトル。両ベクトルの外積が z軸方向となる

Page 48: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

48

{ tan1 (1 0 0); tan2 (0 1 0);}

patchLocalCoeffs ←本ケースでは関係ないので、説明省略{ patch outside; // Normal direction is facenormal of zero'th face of patch tan1 (1 0 0);}

// List of directions to refinedirections ← globalCoeffsで指定した方向ベクトルのうち、再分割する方向の指定。x、y、z軸方向ともに再分割する( normal tan1 tan2);

// Whether to use hex topology. This will// - if patchLocal: all cells on selected patch should be hex// - split all hexes in 2x2x2 through the middle of edges.useHexTopology true; ←六面体セルを各方向 2分割する。本ケースも該当するので true

// Cut purely geometric (will cut hexes through vertices) or take topology// into account. Incompatible with useHexTopologygeometricCut false; ←本ケースでは関係ないので、説明省略

// Write meshes from intermediate stepswriteMesh false; ←再分割処理中の途中結果を保存するか。不要なので false

// ************************************************************************* //

以上の内容を確認したら、refineMeshを実行する。

refineMesh . . -dict ←最後に "-dict"を付ける

refineMeshによって再分割されたメッシュは、ケースフォルダの下の 1/polyMeshサブフォルダに作

成されるので、constant/polyMeshサブフォルダに存在する再分割前のメッシュを消去してから

移動する。

rm -rf constant/polyMesh ←再分割前のメッシュを消去。"-rf"はフォルダごと削除の意mv 1/polyMesh constant/polyMeshrm -rf 1 ←サブフォルダ "1"は不要なので消去

以上が終了したら、前節と同様に paraFoamを

起動して、メッシュをチェックしてみよう。ただ

し今回は paraFoamの技術的制限により、内部Internal Mesh の選択を外して読み込む図 3.7

2.

1. をクリック▶ 2. をクリック1.

Page 49: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

49

3 高層ビル周り流れの解析

メッシュを読み込むとメッシュ分割が変わる部分のメッシュが正しく表示されない。そこで内部メッシュ

を読み込まず、解析領域境界面の表面メッシュのみを読み込むため、paraFoamの起動直後の画面

で図 3.7のように操作する。正しくメッシュ分割されていれば、図 3.8に示すように、下半分が細かく

分割されたメッシュが表示される。

メッシュの再々分割3.2.3 

地表面のごく近くではさらに気流が複雑となるため、解析領域の下から4分の 1の部分については、

もういちどメッシュを分割する。この分割を行う領域を指定するための cellSetコマンド設定ファイルは、system/cellSetDict_quarterに用意されている。内容は前節の cellSetDict_quarter

とほぼ同一であるが、選択範囲を指定する boxToCellの部分のみが異なる。

boxToCell{box (-3.6001 -3.6001 -0.0001) (3.6001 3.6001 1.8001); ←箱の高さが 1.8001となっている}

refineMeshDictは、前節と同じものをそのまま使用する。

コマンドの実行は、ファイル名が cellSetDict_halfからcellSetDict_quarterに変わっ

たほかは、前節と同様である。

cp system/cellSetDict_quarter system/cellSetDictcellSet . .refineMesh . . -dictrm -rf constant/polyMeshmv 1/polyMesh constant/polyMeshrm -rf 1

xy zxy z

再分割後のメッシュ図 3.8 再々分割後のメッシュ図 3.9

Page 50: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

50

操作を終えたら、前節同様に paraFoamを操作して、

メッシュをチェックしよう。図 3.9のように、上から下

へ行くに伴って細かくなるメッシュとなっていれば良い。

建物内のメッシュの除去3.2.4 

以上で生成したメッシュの全体形は単なる立方体で

あり、建物の形状が含まれていない。そこで、まずは

高層建物周囲に存在する低層建物の形状をメッシュに

反映させよう。そのためには、以下の 3段階の操作に

よって、メッシュから低層建物の部分のセルをくり抜く

ことになる。

低層建物の CAD形状データと insideCellsコマ1.

ンドを使用して、低層建物の内側を選択する。

cellSetコマンドを使用して、選択領域を反転する。2.

subsetMeshコマンドを使用して、選択された領3.

域だけを抜き出す。

insideCellsコマンドに読み込ませるCAD形状データは、STL (stereolithographyの略)形式と

呼ばれる、CADで最も標準的なファイル形式で用意する。本ケースでは、ケースフォルダ中にotherBuildings.stlの名前で、図 3.10に示すような低層建物のCADデータが用意されている。

insideCellsコマンドは設定ファイルは不要であり、コマンド実行時にCADデータファイルを指定する。

insideCells . . otherBuildings.stl otherBuildings ←最後の "otherBuildings"は、選択領域につける名前

以上によって低層建物内のセルが選択されたので、つぎに cellSetによって選択領域を反転させる。

そのための設定ファイルは system/cellSetDict_otherBuildingsの名前で用意されており、

内容は以下のとおりである。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Name of set to operate onname otherBuildings; ←先の insideCellsコマンドで指定した選択領域名

// One of clear/new/invert/add/delete|subset/listaction invert; ← "invert"で選択領域を反転させることを表す

// Actions to apply to cellSet. These are all the topoSetSource's ending// in ..ToCell (see the meshTools library).topoSetSources ←何も指定しない();

// ************************************************************************* //

xy z

低層建物の CAD データ(実線部。図 3.10

点線は参考のため示した解析領域)

Page 51: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

51

3 高層ビル周り流れの解析

この設定ファイルを system/cellSetDictにコピーし、cellSetを実行する。

cp system/cellSetDict_otherBuildings system/cellSetDictcellSet . .

さらに subsetMeshによって、選択されたセルを抽出する。subsetMeshは設定ファイル不要で、コ

マンド実行時に選択範囲名を指定する。最後に、作成されたメッシュを constantサブフォルダに

移動する。

subsetMesh . . otherBuildings ←最後の "otherBuildings"で、選択領域名を指定するrm -rf constant/polyMeshmv 1/polyMesh constant/polyMeshrm -rf 1

以上の操作によって生成されたメッシュには、低層建物の境界面が新たに作成されている。この

境界面には oldInternalFacesという名前が subsetMeshによって自動的に付けられるが、わかりや

すい名前として otherBuildingWallにし、境界面のタイプを wallとしたい。そのためには、エディ

タで constant/polyMesh/boundaryファイルを開き、ファイル末尾近くの oldInternalFacesを

otherBuildingWallに変更し、保存する。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

7(inlet{ type patch; nFaces 1782; startFace 315196;}

...(中略)...

oldInternalFaces ← otherBuildingWallに変更する{ type empty; ← emptyを wallに変更する nFaces 2624; startFace 326520;})

// ************************************************************************* //

保存を終えたら、paraFoamを操作してメッシュをチェックしよう。正しく操作されていれば、図 3.11

に示すように、メッシュ底面の低層建物の部分のセルがくり抜かれている。

高層建物周辺のメッシュ再分割3.2.5 

次は、高層建物周辺は特に流れが複雑になることが予想されるため、当該部分のメッシュを特

に細かく分割したい。3.2.2節および 3.2.3節で解析領域下半分のメッシュを再分割した際には

Page 52: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

52

refineMeshを使用したが、高層建物周辺のみを特に分割するため、ここでは CAD形状データを読

み込んで、形状の周囲のメッシュを再分割するコマンドである autoRefineMeshを使用する。高層建

物のCAD形状データファイルはtargetBuilding.stlであり、形状は図3.12に示すとおりである。

設定ファイルは system/autoRefineMeshDictである。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Surface to keep tosurface "targetBuilding.stl"; ←高層ビルの CADデータファイル名

// What is outside. These points have to be inside a cell (so not on a face!)outsidePoints ((0 0 2)); ←メッシュ内かつ、再分割領域の外側の点を適宜指定

//// Selection of cells to refine//

// If smallest edge of mesh > maxEdgeLen select all cut cells for refinement.// If < maxEdgeLen select only those cut cells which are closer than// curvatureDistance to surface// and with cos of angle between normals on surface < curvature.maxEdgeLen 0; ←この値よりセルの最短辺長が長いセルを分割する。0なので全てcurvatureDistance 1.0; ←本ケースでは関係ないので、説明省略curvature 0.9; ←本ケースでは関係ないので、説明省略

// if > 0: Remove inside cells at every step. Inside is given by number of// layers separating outside from inside.// (note that we cannot remove outside// cells since these contain the outsidePoints)// Do not use this option if you want mesh to spill through a hole which is

xy z

低層建物部セル除去後の底面図 3.11 高層建物の CAD データ図 3.12

Page 53: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

53

3 高層ビル周り流れの解析

// not visible on the coarsest level but only becomes visible after refinementnCutLayers 1;

// Refine until smallest edge of mesh < minEdgeLenminEdgeLen 0.025; ←セルの辺長がこの長さになるまで、分割を行う

// Or until the number of cells would become more than (stops one level before// this)cellLimit 2500000; ←ただし、メッシュ全体のセル数がこの値を超えない範囲で

//// Selection of final set//

// Select based on side of surface. Usually select inside cells and project// outwards or select outside cells and project inwards.selectCut false; ← CADデータの形状表面と交差するセルを選択するかselectInside false; ← CADデータの内側となるセルを選択するかselectOutside false; ← CADデータの外側となるセルを選択するか// Leave out cell closer than nearDistance to the surface. Usually// 0.5*minEdgeLen. Set to -1 to disable.nearDistance -1; ← CADデータの形状表面近傍のセルを残さない

// Some cells on the surface of the selected cells might have all their// points on the 'outside'. These would get flattened when projecting so// are either kept and refined (selectHanging) or removed from the setselectHanging false; ←本ケースでは関係ないので、説明省略

//// Refinement parameters ↓以下、refineMeshDictと同様 (3.2.2節参照 )//

// Type of coordinate systemcoordinateSystem global;//coordinateSystem patchLocal;

// .. and its coefficients. x,y in this case. (normal = tan1^tan2)globalCoeffs{ tan1 (1 0 0); tan2 (0 1 0);}

patchLocalCoeffs{ patch outside; // Normal direction is facenormal of zero'th face of patch tan1 (1 0 0);}

// List of directions to refinedirections( tan1 tan2 normal

Page 54: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

54

);

// refinement level difference between neighbouring cells. Set to large if// there is no need for a limit.splitLevel 2;

// Cut purely geometric (will cut hexes through vertices) or take topology// into account.geometricCut false;

// Whether to use hex topology. This will never cut hex through vertices.useHexTopology yes;

// Write meshes from intermediate stepswriteMesh false;

// ************************************************************************* //

本ファイルはコピー不要であり、そのまま autoRefineMeshを実行できる。autoRefineMeshの実行に

よって生成されたメッシュは0サブフォルダの中に保存されるので、実行終了後にconstantサブフォ

ルダに移動する。また0/region0フォルダにメッシュの再分割回数に関する情報が書き出されるが、

本ケースでは不要なので削除する。

autoRefineMesh . .rm -rf constant/polyMeshmv 0/polyMesh constant/polyMeshrm -rf 0/region0

以上が終了したら、paraFoamで確認しよう。

高層建物内のセルを取り除く3.2.6 

前節で生成されたメッシュには高層建物内にもメッシュが含まれたままなので、3.2.4節と同様にし

て、当該部分のセルをくり抜く。

insideCells . . targetBuilding.stl targetBuildingcp system/cellSetDict_targetBuilding system/cellSetDictcellSet . .subsetMesh . . targetBuilding ←最後の "targetBuilding"で、選択領域名を指定するrm -rf constant/polyMeshmv 1/polyMesh constant/polyMeshrm -rf 1

以上が終了したら、エディタで constant/polyMesh/boundaryを開き、oldInternalFaces

を targetBuildingに変更する。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

8(oldInernalFaces ← targetBuildingWallに変更する{ type empty; ← emptyを wallに変更する

Page 55: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

55

3 高層ビル周り流れの解析

nFaces 1667; startFace 322718;}

...(後略)...

変更を保存したら、paraFoamで図 3.13のように高層

建物部分のセルがメッシュ底面から取り除かれている

ことを確認しよう。

低層建物周辺メッシュの再分割3.2.7 

一般に地面に最も近い部分は、高さ方向の流れの

速度変化が大きいため、充分に細かいメッシュ分割

が必要とされる。そこで最後のステップとして、地面

に最も近い層のセルを再分割しよう。主要な手順は

以下の 3段階となる。

writeCellCentresコマンドによって、全てのセル1.

中心の x、y、z座標を値とするスカラー場を書

き出す。

1. で書き出したセル中心の2. z座標値から、cellSetによって地面最近傍のセルを選択する。

refineMeshによって、選択されたセルを再分割する。3.

writeCellCentresコマンドには設定ファイルはなく、そのまま実行可能である。実行後、0サブフォ

ルダに全セルのセル中心 x、y、z座標値が ccx、ccy、cczの名前で書き出される。

cellSetで使用する設定ファイルは、以下の内容で system/cellSetDict_groundの名前で用

意されている。

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Name of set to operate onname set;

// One of clear/new/invert/add/delete|subset/listaction new;

// Actions to apply to cellSet. These are all the topoSetSource's ending// in ..ToCell (see the meshTools library).

topoSetSources( // values of field within certain range fieldToCell ←場の値が指定した範囲内のセルを抜き出す { fieldName ccz; ←場の名前。セル中心の z座標を対象とする min 0.04900; ←セル中心の z座標が 0.049~ max 0.05001; ← 0.05001の範囲のセルを抜き出す }

高層建物部(赤丸部分)セル除去図 3.13

後の底面

Page 56: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

56

);

// ************************************************************************* //

3.2.1節で blockMeshによってメッシュを生成したと

きには各座標軸方向に 18分割したため、セル幅は

7.2/18 = 0.4 mであった。それが 3.2.2節、3.2.3節

の 2度の再分割によって、地面側セル幅は 7.2/18/2/2

= 0.1 mとなっている。すなわち、地面最近傍セルの

セル中心 z座標値は 0.1/2 = 0.05 mである。従って、

cellSetによって cczが 0.05 mのセルを抜き出せば良

い。なお、実際には 0.049 m~ 0.05001 mと、多少

の幅を持たせていることに注意してほしい。

そのようにして選択されたセルに対して、以前と同

様に refineMeshを実行する。実行後に生成されるメッ

シュは 1フォルダに置かれるので、それを constantフォルダに移動する。

以上の手順をまとめて実行すると、以下のようになる。

writeCellCentres . .cp system/cellSetDict_ground system/cellSetDictcellSet . .refineMesh . . -dictrm -rf constant/polyMeshmv 1/polyMesh constant/polyMeshrm -rf 1

これらの実行が終了すると ccx、ccy、cczは不要なので、0フォルダごと消去する。

rm -rf 0

これでメッシュの作成が終了した。最終的なメッシュは図3.14のとおりである。図3.13と比較すると、

底面のメッシュが細かくなっていることがわかる。

最後に、checkMeshコマンドを実行して、作成されたメッシュにエラーが無いことを確認しよう。

checkMesh . .

実行するとセル数などの情報が出力される。かなり長い出力になるが、以下のように、最後にMesh

OK.と表示されればエラーの無いメッシュとなっている。

...(前略)...

Face flatness (1 = flat, 0 = butterfly) : average = 1 min = 1 All face flatness OK.

Mesh OK. ←この表示が出れば OK

最終的なメッシュ底面図 3.14

Page 57: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

57

3 高層ビル周り流れの解析

End

初期値の設定・実行条件の設定3.3 初期値の設定はまず、本ケースでは初期値フォルダは

0.orgという名前で用意されているので、これを 0にコピー

する。

cp -r 0.org 0

本章冒頭に記したように、市街地の風速は通常、地表面

から上空へ行くに伴って増加する分布を持っている。したがっ

てそのような風速分布を、解析領域への流入側境界(inlet)

の境界条件として再現しなければならない。本ベンチマーク

テストでは、この風速分布が風洞実験による測定データとし

て与えられている。system/setProfileRANSDictがそ

のデータファイルであり、高層ビル高さ風速 UHで基準化し

た相対風速で図 3.15のように与えられている。本ケースに限らず、屋外風環境解析では通常、解析

結果中のある基準点の風速に対する速度比は一定であり、基準点風速を変えることで結果を任意に

スケーリングできる。例えば、基準点における風速が 1 m/sのとき、ある点における風速が 3 m/sで

あれば、基準点における風速が 2 m/sのときには、当該点における風速は 6 m/sとなる。したがって、

このように基準点(本ケースでは流入側境界の高層ビル高さ点)に対する風速比で風速を与えること

が多い。ただし、本データは風洞実験における測定点と境界面のメッシュの座標は一致しないので、

setProfileRANSコマンドによってデータファイルを読み込み、補間処理を行う。

setProfileRANS . .

なお、解析領域内部は U/UH = 1で初期化される。

以上で初期値の設定は完了であり、次に実行条件設定ファイルのsystem/controlDictをチェッ

クしよう。重要なのは以下の部分である。

...(前略)...endTime 10;

deltaT 1;

writeControl timeStep;

writeInterval 10;...(後略)...

本ケースで使用するソルバは定常解析、つまり時間の経過によらず一定な場を解析することを前提と

0

1

2

3

4

5

6

7

8

0 0.5 1 1.5 2

z [m

]

U/UH [m/s]

風速分布の測定データ図 3.15

Page 58: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

58

している。そのため本来、時間の概念は意味を持たないが、定常解に達するために時間ステップ進

行と類似した反復計算を行う。ここで endTimeおよび deltaTを指定することで、(endTime/deltaT)

回の反復を指定できる。本ケースの場合、最終的な定常解に達するには 500回以上の反復が必要

であるが,ここでは計算が進行することを確認するために、最初の 10回を計算させよう。そのため

には上記のように、deltaTを 1、endTimeを 10とするのがわかりやすい。

ソルバの実行3.4 ソルバは simpleFoamMeanを使用する。以下のように実行する。

simpleFoamMean . .

実行結果の確認3.5 解析が終了したら、paraFoamで結果を確認しよう。paraFoamを起動して、〔Apply〕をクリックし

たら、図 3.16に示す、画面上部ツールバーの中にある「次のコマへ」ボタンで時刻を 10 sに進める。

なお、ツールバーの各ボタンによって、図 3.16のとおり視点のリセット、時刻ステップの移動などを

行うことができる。また、マウスによるオブジェクトの回転・拡大縮小などの基本的な操作は、表 3.1

paraFoam ツールバーの主要なボタン図 3.16

ズームをリセット

凡例を表示

視点をリセット

形状を着色する場の選択最初のコマへ

前のコマへ 次のコマへ

最後のコマへ再生開始

ループ再生 時刻ステップを直接入力

形状表現方法の選択 回転中心をリセット

回転中心を表示 回転中心を選択

操作 マウスの操作法

形状の回転 左ボタンでドラッグ

形状の回転(画面中心軸) 〔Shift〕+左ボタンでドラッグ

形状の拡大縮小 右ボタンでドラッグ、

マウスホイール、

〔Control〕+左ボタンでドラッグ

形状の移動 〔Shift〕+右ボタンでドラッグ

paraFoam のマウス操作表 3.1

Page 59: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

59

3 高層ビル周り流れの解析

を参照されたい。

paraFoamでは、これらの基本的な操作に加え、

ある断面のデータを抽出する、ベクトル矢印を描

くといった、データを加工する機能が多数用意さ

れており、それぞれの機能をフィルタと呼んでい

る。1つのデータに対してフィルタを複数適用する

ことも可能であり、あるデータに対して順次適用さ

れたフィルタの並びをパイプラインと呼んでいる。

パイプラインの状態は、図 3.17に示す Pipeline

Browserで確認することが可能である。なお、こ

の Pipeline Browserの画面中、controlDict.foam

は、読み込まれたデータを表している。

ここでは、フィルタを使ったベクトル図のプロッ

トを行ってみよう。

ベクトルプロットの作成3.5.1 

市街地全体の各点で、どちらの風向からどの程度の風速の風が吹いているのかを把握するため、

地表面からの高さ0.015 m(実寸で 1.5 m、すなわち概ね人の背の高さに相当する)における風速

ベクトルプロットを作成してみよう。本プロットでは、読み込まれたデータに対して、以下の 3つのフィ

データ読み込みパネルと Extract Datasets フィルタパネルの対応図 3.17

データ読み込みパネルの境界名の順と、Extract Datasets フィルタの block の順が対応する(ただし、block 0 は内部メッシュを表す)

データ読み込みパネル ExtractDatasetsフィルタパネル

選択したら、〔Apply〕をクリックする

抽出された形状図 3.18

Page 60: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

60

ルタを順次使用する。

Extract Blockフィルタを使って、地表・建1.

物壁面の形状を抽出する。

Sliceフィルタを使って、地表面近くの速度2.

データを抽出する。

Glyphフィルタを使って、ベクトルをプロッ3.

トする。

まず 1.である。時刻を 10 sに進めた直後の

フィルタを使用しない状態では、メッシュ全体

を解析領域外側から見ているため、肝心の内

部がどのような状態かが判らない。したがって

Extract Datasetsフィルタによって地表面・建物

壁面以外の形状を隠し、内部を見通せるように

しよう。paraFoamのメニューから〔Filters〕▶

〔Alphabetical〕 ▶〔Extract Datasets〕 を 選 択

すると、図 3.17右側のデータセット選択パネル

が現れる。ここでリストされている block 0から

block 8のデータセットは、図 3.17左側に示す

データ読み込みパネルの内部メッシュおよび境

界面選択リストと順番に対応している。高層建物

壁面の targetBuildingWall、地面の ground、低

層建物壁面の otherBuildingWallを選択したいの

で、両リストの順を対応させると block 1、block 4、

block 8を選択すれば良いことになる。そのように

選択したら、〔Apply〕ボタンをクリックする。さらに、

この状態では形状が圧力で色づけされているが、

色づけは不要なので図 3.16の「形状を着色する

場の選択」メニューから〔Solid Color〕を選択す

る。また、現在設定されているマウスによる回転

操作の中心は高層建物上空にあり、拡大時にマウ

スによる回転操作を行いづらいので、「回転中心

をリセット」をクリックしておこう。これによって高

層建物に回転中心が移り、回転操作を行いやすく

なる。以上の操作によって、市街地の形状が図 3.18のように表示される。

つぎに 2.である。ある断面のデータ抽出は Sliceフィルタによって行うが、Extract Datasetsによっ

て抽出されたデータは建物壁面および地表面のデータしか存在しないため、ある断面全体を抽出す

クリックする

controlDict.foam の選択図 3.19

Slice フィルタの適用図 3.20

1. のとおり入力▶ 2. をクリックして切断面を消去▶ 3. をクリック

1.

3.

2.

Slice フィルタ適用後の表示図 3.21

Page 61: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

61

3 高層ビル周り流れの解析

るためには、Extract Datasetsフィルタ適用前の

元のデータに対してフィルタを適用する必要があ

る。したがって Sliceフィルタの実行前に、図 3.19

に示すように controlDict.foamをクリックして選

択しておく。その後、〔Filters〕▶〔Slice〕を選

択すると、図 3.20の Sliceフィルタ設定画面が現

れる。前章における gmshFoamでは切断平面方

程式の係数を入力したが、paraFoamの場合は平

面に含まれる点 1点の座標(Origin)と平面の

法線ベクトル(Normal)を入力するようになって

いる。Originは z = 0.015 [m]の点ならどこでも

良いので (0, 0, 0.015)とし、Normalは z軸に平

行なので (0, 0, 1)としよう。それぞれ図 3.20の

ように入力する。また、切断面自体の表示は不

要なので、〔Show Plane〕をクリックして切断面を

消去する。さらに、〔Apply〕をクリックする。すると、

図 3.21のように切断面が表示される。なお色の

表現は、圧力を表している。

引続いて、3.のベクトルプロットである。〔Filters〕

▶〔Glyph〕を選択すると、図 3.22のGlyphフィ

ルタ設定画面が現れる。速度の平均的な値をプ

ロットしたいので、Vectorsとして〔CellToPoint/

UMean〕を選択し、〔Apply〕をクリックする。さ

らに、2.で作成した切断面の表示を消去するため

に、Pipeline Browser上の Cut1左側の目のアイ

コンをクリックし、薄いグレー表示とする。以上に

よってベクトル表示が見えるが、ベクトルを速度に

よって色づけるため、ツールバーで〔GlyphVector〕

を選択する。以上によって、図 3.23の表示となる。市街地では低層建物が障害物となって風速が遅

くなっているが、高層建物周囲だけは逆に、風速が速くなっていることがわかる。

表示されている画像は、〔File〕▶〔Save Screenshot〕で保存することができる。保存ダイアログ最

下部の Files of type: から選択できる保存形式は、〔PNG image (*.png)〕もしくは〔BMP image (*.bmp)〕

が望ましい。

流線のプロット3.5.2 

paraFoamでも gmshFoamと同様、流線をプロットすることが可能である(ただし、アニメーション

Glyph フィルタの適用図 3.22

1.

2.

1. で〔CellToPoint/UMean〕を選択▶ 2. をクリック▶ 3. をクリック▶4. で〔GlyphVector〕を選択3.

4.

Glyph フィルタ適用後の表示図 3.23

Page 62: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

62

は出来ない)。流線をプロットするためのフィルタ

は、Stream Tracerフィルタである。ここでは前節

のベクトルプロットに引き続いて、高層建物上流

の風上に向かってやや左側を流線源として、高

層建物周辺で気流がどのような流線を描くかをプ

ロットしてみよう。

まず前節で Sliceフィルタを適用したときと同Stream Tracer フィルタの適用図 3.24

7.

1.

2.

3.

4.

5.

6.

1. ~ 5. のとおり入力または選択▶ 6. をクリック▶ 7. で

〔CellToPoint/U〕を選択

設定項目 説明

Vectors 流線を描くベクトル場を選択する

Max.

Propagation

流線の最大長を指定する

Initial Step

Length

1回の積分で流線を進める長さ

Integration

Direction

流線を積分する方向

FORWARD: 下流方向

BACKWARD: 上流方向

BOTH: 両方

Max. Steps 積分する回数

Term.

Speed

粒子の速度がこの速度になった

ところを流線の終点とする

Integrator

Type

積分する方法を指定する

Seed Type Point Source: 球状粒子源を生成

Line Source: 線状粒子源を生成

Point1 Seed Typeに Line Source を選ん

だ場合の粒子源の始点

Point2 同・終点

Resolution 粒子の数

Point Seed Typeに Point Sourceを選ん

だ場合の粒子源の中心点

Number of

Points

粒子の数

Radius 粒子発生源の半径

Stream Tracer フィルタの設定一覧表 3.2

Page 63: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

63

3 高層ビル周り流れの解析

様、図 3.19 に示す controlDict.foamをクリッ

クし、データ全体に対して Stream Tracerフィル

タが適用されるようにする。つぎに〔Filter〕▶

〔Stream Tracer〕を選択すると、図 3.24に示す

Stream Tracerフィルタの設定画面が現れるので、

同図のように操作する。各設定項目の意味は、表

3.2のとおりである。前節のベクトルプロットでは

UMeanのベクトル場を描いたが、UMeanの流

線プロットは初期条件の影響を強く受けるので、

ここでは Uを使用する。また積分間隔の Initial

Step Lengthは初期設定の 0.5では粗いので、こ

こでは 0.2としている。

図 3.24のとおり操作すると、流線が図 3.25の

ように描かれる。なお、流線描画中に以下のメッ

セージが出力されることがあるが、paraFoamの実行には影響ないので無視されたい。

ERROR: In ..\..\..\ParaView3.2.1\VTK\Filtering\vtkPolyLine.cxx, line 195vtkPolyLine (15847FB8): Coincident points in polyline...can't compute normals

図中に赤く囲んだ部分で、上流側の低層建物上を流れてきた風が高層建物に遮られ、高層建物側面

に回り込みながら吹き降ろしとなっていることがわかる。

風洞実験結果との比較3.6 最後に、本解析結果と風洞実験による風速測定値との比較を行おう。

まず、数値解析で算出される風速は大きさと方向を持ったベクトルであるが、実験結果は風速の大

きさ(絶対値)で表されている。そこで、magUMeanコマンドを使用して、最終反復のUMeanから

風速の大きさmagUMeanを算出する。

magUMean . . -latestTime ←最終反復のみを計算するため、"-latestTime"と書く

さらに、system/sampleDictには、図 3.26に示す風洞実験における風速測定点に対応する座標

のリストが以下のように書き込まれている。なお、測定点の地表面からの高さは全て 0.02 m(実物

換算で 2 m)である。

...(前略)... (-0.55 0.25 0.02) //1 (-0.55 -0.25 0.02) //2 (-0.45 0.25 0.02) //3...(後略)...

Stream Tracer による流線図 3.25

吹き降ろし

流線の始点

Page 64: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

64

sampleコマンドを使用してこれらの点での

magUMeanを抽出する。

sample . . -latestTime ←最終反復からのみ抽出するため、"-latestTime"と書く

以上で samples/10フォルダに抽出結果が書き出

される。

抽出結果は、実験結果データファイルのvelociity.datと併せて Gnuplotでプロット

する。比較グラフのプロットはやや複雑なので、

Gnuplotに入力するコマンドをあらかじめ記述した

ファイルが velocity.gpに用意されており、そ

れをGnuplotから読み込めば良いようになってい

る。ただし、velocity.gpを読み込む前に、エディタを使用して以下の行の行頭に #を追加し、

保存する。

set terminal postscript enhanced eps 15 ←行頭に #を追加する

修正後 Gnuplotを起動し、以下のように入力する。

cd "z:/OpenFOAM/run/tutorials/simpleFoamMean/windEnvironmentAroundHighRiseBuilding"load "velocity.gp"

以上によってプロットされる比較結果は、図 3.27のようになる。図 3.26の測定点と対応させて見ると、

測定点 35番から 64番付近の高層建物風下側周辺では、両者があまり一致していないことがわかる。

演習問題3.3節でも述べたとおり、本ケースが定常解に達するには、およそ 500回の反復が必要である。1.

実行条件を調整して、500回の反復を行う解析を実施し、風洞実験結果と比較せよ。ディスク

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9

1

0 5 10 1 5 20 25 30 3 5 40 45 50 55 60 65 70 75 80

Ratio

of v

eloc

ity

Measurement point number

Present CFDExperiment

風洞実験における風速測定点図 3.26

低層建物

高層建物

1

2

3

4

5 15

16

17

18

19

20

21

22

25

26

31

32

27

28

29

30

39

40

41

42

43

44

33

34

35

36

37

38

23

24

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67 75

76

68

69

70

71

72

73

74

6

7

8

9

10

11

12

13

14

78

77

風速実験測定データとの比較図 3.27

Page 65: Gmsh / Gnuplot / OpenFOAM / ParaViewによる …oshima.eng.niigata-u.ac.jp/OpenFOAM/ja/archTutorials.pdf3.3 初期値の設定・実行条件の設定 57 3.4 ソルバの実行 58

65

3 高層ビル周り流れの解析

へのデータ書き出し回数を調整して、ディスク容量が溢れないよう注意せよ。

さらに実測値との対応を改善するため、メッシュ、実行条件などを適宜工夫して解析を行え。メッ2.

シュ分割を細かくする場合は、メモリとディスクの残量にも注意せよ。

参考文献日本建築学会、「市街地風環境予測のための流体数値解析ガイドブック -ガイドラインと検[3.1]

証用データベース-」、丸善(東京)、2007年、参照 URL: http://www.aij.or.jp/jpn/publish/

cfdguide/index.htm