42
数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価 FreeFem++数理指向プログラミング 大塚 厚二 * * 広島国際学院大学 広島市安芸区中野 6-20-1 広島大学 9 24 FreeFem++ http://www.freefem.org/ff++/ FreeFem++日本語 http://comfos.org/jp/ffempp/ 有限要素法で学ぶ現象と数理FreeFem++数理思考プログラミング http://comfos.org/jp/ffempp/book/

FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

Embed Size (px)

Citation preview

Page 1: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

FreeFem++数理指向プログラミング

大塚厚二 lowast

lowast 広島国際学院大学広島市安芸区中野 6-20-1

広島大学 9月 24日

bull FreeFem++ httpwwwfreefemorgff++

bull FreeFem++日本語 httpcomfosorgjpffempp

bull 有限要素法で学ぶ現象と数理―FreeFem++数理思考プログラミング

httpcomfosorgjpffemppbook

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

数学をプログラミング言語に

bull 十数年前コンピュータがあれば数学はいらない「数学よりプログラミングの方が修得が楽」と言われた

bull プログラミングが複雑にプレハブ工法オブジェクト指向プログラミングが登場

bull オブジェクト指向での重要なのは抽象化bull 数学をプログラミング言語に使えれば良いのではbull なぜ駄目なのか=rArr数学を修得するのが難しいbull しかしプログラミングの最先端は数学以上に難しく

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

数理指向プログラミング

bull プログラミング言語 (数学)の知識は寿命が短い (長い)例)アセンブラ (機械優先)rarrCrarrVisual C(GUI)rarrC++

bull 数学を学ぶことは抽象化の訓練にbull ただし抽象化によって下部構造が完全に隠蔽できたためしがない数学以外にも知識が必要bull 流れ制御 (分岐繰り返し)や入出力bull 数理情報の可視化

bull FreeFem++ vs数式処理 (Mathematicaのような)bull 矩形領域以外は解を数式で記述するのは難しいbull 数式処理で領域を分割するのは困難bull もし数式処理だけで有限要素法を記述すると膨大な計算

bull FreeFem++はホワイトボックス型問題解決環境 (PSE)bull 計算方法を細かく指定できるbull 計算 (途中)結果を抽出できる

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

FreeFem++の歴史1987 MacFemPCFem商用ソフト Pascalを使って

OPironneauが作成1992 FreeFEMC++で書き直し単一メッシュP1P0

要素アダプティブメッシュ(bamg) OPironneauDBernardi FHecht CPrudhomme

1996 FreeFem+複数メッシュP1P0要素関数の代数処理OPironneau DBernardi FHechtKOhtsuka

1998 FreeFem++複数メッシュ複数有限要素拡張機能FHecht OPironneau KOhtsuka

1999 FreeFem 3dSDel Pino2008 FreeFem++ V31d 2d 3dといったマルチ次元で

の有限要素計算を実現2014 [httpcomfosorgjpffemppbook]有限要素法で学

ぶ現象と数理―FreeFem++数理思考プログラミング―(共立出版)大塚厚二高石武史(以下の p~は本の場所)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

開発メンバーFrederic Hecht フランスパリ第 6大学

httpswwwljllmathupmcfrJLLions研究所 (LJLL)プロジェクトのリーダーアダプティブメッシュ有限要素空間など元 INRIA研究員

Olivier Pironneau LJLLINRIAコンサルタント元リーダー計算アルゴリズム流体解析マニュアルの第3章など

Antoine Le Hyaric CNRS LJLL並列計算数値可視化など統合環境 FreeFem++-csを開発

Jacques Morice LJLL(ポスドク) 3次元メッシュと可視化ツールmeditの組込

Sylvian Auliac LJLL(大学院生)非線形最適化ライブラリ(NLopt IPOPT)関数最適化計算アルゴリズム(CMA-ES)など

Kohji Ohtsuka 広島国際学院大学以前MS-Windowsのグラフィック表示などその後マニュアル作成で協力

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

統合開発環境 FreeFem++-cs

開発サイト wwwfreefemorgff++に無く下記からhttpwwwannjussieufrlehyaricffcs

並列計算などもサポート日本語は utf-8のみで直接入力不可

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

誰のため目的は

目的は (FHechtのスライドから)

1 研究開発 (RampD)

2 学術研究

3 有限要素法偏微分方程式弱解や変分形式の教育

4 アルゴリズムの実現性チェックに向けた試作

5 数値実験

6 計算科学や並列計算 (MPI)

誰のため研究者エンジニア大学教員学生hellip

メーリングリストFreefemppljllmathupmcfr一日に 5~20通377人のメンバー

1000人以上の実利用者 (月に 200以上のダウンロード)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) I

1 多くの有限要素連続 P1P2要素不連続 P0 P1RT0RT1BDM1-要素辺要素MINI要素など

2 メッシュ非依存性メッシュT 1で計算した有限要素関数 fを他のメッシュT 2の有限要素関数や配列に補間する

3 ベクトルや行列を使った弱形式による複素実問題の定義有限要素法のアルゴリズムの多くは行列やベクトルで記述される

4 不連続Galerkinによる定式化 (現在 (2010)は二次元のみ)

5 複数の行列解法 LU Cholesky Crout CG GMRESUMFPack SuperLU MUMPS HIPS SUPERLU DISTPASTIX sparse linear

6 固有値問題ARPACKを使った解法

7 統合環境FreeFem++-cs

8 境界の解析的表現

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) II

9 自動メッシュ分割Delaunay-Voronoı分割 (2d3d(tetgen))

10 メッシュや有限要素解の保存読み込み

11 アダプティブメッシュ解などのHessianを使った距離に基づく

12 動的リンク機能parview gmsh vtk medit gnuplotといった外部のプログラムを追加することで機能を拡張できるような機構

13 並列処理のMPIをフルにサポート

14 非線形最適化ツールCG Ipopt NLOpt stochastic

15 豊富なサンプルNavier-Stokes (2d3d) elasticity (2d3d)流体構造連成問題固有値問題 Schwarzの領域分割法残差誤差指標

「有限要素法で学ぶ現象と数理」には形状最適化設計や反応拡散問題の計算 (高石)がある

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 2: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

数学をプログラミング言語に

bull 十数年前コンピュータがあれば数学はいらない「数学よりプログラミングの方が修得が楽」と言われた

bull プログラミングが複雑にプレハブ工法オブジェクト指向プログラミングが登場

bull オブジェクト指向での重要なのは抽象化bull 数学をプログラミング言語に使えれば良いのではbull なぜ駄目なのか=rArr数学を修得するのが難しいbull しかしプログラミングの最先端は数学以上に難しく

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

数理指向プログラミング

bull プログラミング言語 (数学)の知識は寿命が短い (長い)例)アセンブラ (機械優先)rarrCrarrVisual C(GUI)rarrC++

bull 数学を学ぶことは抽象化の訓練にbull ただし抽象化によって下部構造が完全に隠蔽できたためしがない数学以外にも知識が必要bull 流れ制御 (分岐繰り返し)や入出力bull 数理情報の可視化

bull FreeFem++ vs数式処理 (Mathematicaのような)bull 矩形領域以外は解を数式で記述するのは難しいbull 数式処理で領域を分割するのは困難bull もし数式処理だけで有限要素法を記述すると膨大な計算

bull FreeFem++はホワイトボックス型問題解決環境 (PSE)bull 計算方法を細かく指定できるbull 計算 (途中)結果を抽出できる

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

FreeFem++の歴史1987 MacFemPCFem商用ソフト Pascalを使って

OPironneauが作成1992 FreeFEMC++で書き直し単一メッシュP1P0

要素アダプティブメッシュ(bamg) OPironneauDBernardi FHecht CPrudhomme

1996 FreeFem+複数メッシュP1P0要素関数の代数処理OPironneau DBernardi FHechtKOhtsuka

1998 FreeFem++複数メッシュ複数有限要素拡張機能FHecht OPironneau KOhtsuka

1999 FreeFem 3dSDel Pino2008 FreeFem++ V31d 2d 3dといったマルチ次元で

の有限要素計算を実現2014 [httpcomfosorgjpffemppbook]有限要素法で学

ぶ現象と数理―FreeFem++数理思考プログラミング―(共立出版)大塚厚二高石武史(以下の p~は本の場所)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

開発メンバーFrederic Hecht フランスパリ第 6大学

httpswwwljllmathupmcfrJLLions研究所 (LJLL)プロジェクトのリーダーアダプティブメッシュ有限要素空間など元 INRIA研究員

Olivier Pironneau LJLLINRIAコンサルタント元リーダー計算アルゴリズム流体解析マニュアルの第3章など

Antoine Le Hyaric CNRS LJLL並列計算数値可視化など統合環境 FreeFem++-csを開発

Jacques Morice LJLL(ポスドク) 3次元メッシュと可視化ツールmeditの組込

Sylvian Auliac LJLL(大学院生)非線形最適化ライブラリ(NLopt IPOPT)関数最適化計算アルゴリズム(CMA-ES)など

Kohji Ohtsuka 広島国際学院大学以前MS-Windowsのグラフィック表示などその後マニュアル作成で協力

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

統合開発環境 FreeFem++-cs

開発サイト wwwfreefemorgff++に無く下記からhttpwwwannjussieufrlehyaricffcs

並列計算などもサポート日本語は utf-8のみで直接入力不可

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

誰のため目的は

目的は (FHechtのスライドから)

1 研究開発 (RampD)

2 学術研究

3 有限要素法偏微分方程式弱解や変分形式の教育

4 アルゴリズムの実現性チェックに向けた試作

5 数値実験

6 計算科学や並列計算 (MPI)

誰のため研究者エンジニア大学教員学生hellip

メーリングリストFreefemppljllmathupmcfr一日に 5~20通377人のメンバー

1000人以上の実利用者 (月に 200以上のダウンロード)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) I

1 多くの有限要素連続 P1P2要素不連続 P0 P1RT0RT1BDM1-要素辺要素MINI要素など

2 メッシュ非依存性メッシュT 1で計算した有限要素関数 fを他のメッシュT 2の有限要素関数や配列に補間する

3 ベクトルや行列を使った弱形式による複素実問題の定義有限要素法のアルゴリズムの多くは行列やベクトルで記述される

4 不連続Galerkinによる定式化 (現在 (2010)は二次元のみ)

5 複数の行列解法 LU Cholesky Crout CG GMRESUMFPack SuperLU MUMPS HIPS SUPERLU DISTPASTIX sparse linear

6 固有値問題ARPACKを使った解法

7 統合環境FreeFem++-cs

8 境界の解析的表現

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) II

9 自動メッシュ分割Delaunay-Voronoı分割 (2d3d(tetgen))

10 メッシュや有限要素解の保存読み込み

11 アダプティブメッシュ解などのHessianを使った距離に基づく

12 動的リンク機能parview gmsh vtk medit gnuplotといった外部のプログラムを追加することで機能を拡張できるような機構

13 並列処理のMPIをフルにサポート

14 非線形最適化ツールCG Ipopt NLOpt stochastic

15 豊富なサンプルNavier-Stokes (2d3d) elasticity (2d3d)流体構造連成問題固有値問題 Schwarzの領域分割法残差誤差指標

「有限要素法で学ぶ現象と数理」には形状最適化設計や反応拡散問題の計算 (高石)がある

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 3: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

数理指向プログラミング

bull プログラミング言語 (数学)の知識は寿命が短い (長い)例)アセンブラ (機械優先)rarrCrarrVisual C(GUI)rarrC++

bull 数学を学ぶことは抽象化の訓練にbull ただし抽象化によって下部構造が完全に隠蔽できたためしがない数学以外にも知識が必要bull 流れ制御 (分岐繰り返し)や入出力bull 数理情報の可視化

bull FreeFem++ vs数式処理 (Mathematicaのような)bull 矩形領域以外は解を数式で記述するのは難しいbull 数式処理で領域を分割するのは困難bull もし数式処理だけで有限要素法を記述すると膨大な計算

bull FreeFem++はホワイトボックス型問題解決環境 (PSE)bull 計算方法を細かく指定できるbull 計算 (途中)結果を抽出できる

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

FreeFem++の歴史1987 MacFemPCFem商用ソフト Pascalを使って

OPironneauが作成1992 FreeFEMC++で書き直し単一メッシュP1P0

要素アダプティブメッシュ(bamg) OPironneauDBernardi FHecht CPrudhomme

1996 FreeFem+複数メッシュP1P0要素関数の代数処理OPironneau DBernardi FHechtKOhtsuka

1998 FreeFem++複数メッシュ複数有限要素拡張機能FHecht OPironneau KOhtsuka

1999 FreeFem 3dSDel Pino2008 FreeFem++ V31d 2d 3dといったマルチ次元で

の有限要素計算を実現2014 [httpcomfosorgjpffemppbook]有限要素法で学

ぶ現象と数理―FreeFem++数理思考プログラミング―(共立出版)大塚厚二高石武史(以下の p~は本の場所)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

開発メンバーFrederic Hecht フランスパリ第 6大学

httpswwwljllmathupmcfrJLLions研究所 (LJLL)プロジェクトのリーダーアダプティブメッシュ有限要素空間など元 INRIA研究員

Olivier Pironneau LJLLINRIAコンサルタント元リーダー計算アルゴリズム流体解析マニュアルの第3章など

Antoine Le Hyaric CNRS LJLL並列計算数値可視化など統合環境 FreeFem++-csを開発

Jacques Morice LJLL(ポスドク) 3次元メッシュと可視化ツールmeditの組込

Sylvian Auliac LJLL(大学院生)非線形最適化ライブラリ(NLopt IPOPT)関数最適化計算アルゴリズム(CMA-ES)など

Kohji Ohtsuka 広島国際学院大学以前MS-Windowsのグラフィック表示などその後マニュアル作成で協力

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

統合開発環境 FreeFem++-cs

開発サイト wwwfreefemorgff++に無く下記からhttpwwwannjussieufrlehyaricffcs

並列計算などもサポート日本語は utf-8のみで直接入力不可

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

誰のため目的は

目的は (FHechtのスライドから)

1 研究開発 (RampD)

2 学術研究

3 有限要素法偏微分方程式弱解や変分形式の教育

4 アルゴリズムの実現性チェックに向けた試作

5 数値実験

6 計算科学や並列計算 (MPI)

誰のため研究者エンジニア大学教員学生hellip

メーリングリストFreefemppljllmathupmcfr一日に 5~20通377人のメンバー

1000人以上の実利用者 (月に 200以上のダウンロード)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) I

1 多くの有限要素連続 P1P2要素不連続 P0 P1RT0RT1BDM1-要素辺要素MINI要素など

2 メッシュ非依存性メッシュT 1で計算した有限要素関数 fを他のメッシュT 2の有限要素関数や配列に補間する

3 ベクトルや行列を使った弱形式による複素実問題の定義有限要素法のアルゴリズムの多くは行列やベクトルで記述される

4 不連続Galerkinによる定式化 (現在 (2010)は二次元のみ)

5 複数の行列解法 LU Cholesky Crout CG GMRESUMFPack SuperLU MUMPS HIPS SUPERLU DISTPASTIX sparse linear

6 固有値問題ARPACKを使った解法

7 統合環境FreeFem++-cs

8 境界の解析的表現

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) II

9 自動メッシュ分割Delaunay-Voronoı分割 (2d3d(tetgen))

10 メッシュや有限要素解の保存読み込み

11 アダプティブメッシュ解などのHessianを使った距離に基づく

12 動的リンク機能parview gmsh vtk medit gnuplotといった外部のプログラムを追加することで機能を拡張できるような機構

13 並列処理のMPIをフルにサポート

14 非線形最適化ツールCG Ipopt NLOpt stochastic

15 豊富なサンプルNavier-Stokes (2d3d) elasticity (2d3d)流体構造連成問題固有値問題 Schwarzの領域分割法残差誤差指標

「有限要素法で学ぶ現象と数理」には形状最適化設計や反応拡散問題の計算 (高石)がある

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 4: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

FreeFem++の歴史1987 MacFemPCFem商用ソフト Pascalを使って

OPironneauが作成1992 FreeFEMC++で書き直し単一メッシュP1P0

要素アダプティブメッシュ(bamg) OPironneauDBernardi FHecht CPrudhomme

1996 FreeFem+複数メッシュP1P0要素関数の代数処理OPironneau DBernardi FHechtKOhtsuka

1998 FreeFem++複数メッシュ複数有限要素拡張機能FHecht OPironneau KOhtsuka

1999 FreeFem 3dSDel Pino2008 FreeFem++ V31d 2d 3dといったマルチ次元で

の有限要素計算を実現2014 [httpcomfosorgjpffemppbook]有限要素法で学

ぶ現象と数理―FreeFem++数理思考プログラミング―(共立出版)大塚厚二高石武史(以下の p~は本の場所)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

開発メンバーFrederic Hecht フランスパリ第 6大学

httpswwwljllmathupmcfrJLLions研究所 (LJLL)プロジェクトのリーダーアダプティブメッシュ有限要素空間など元 INRIA研究員

Olivier Pironneau LJLLINRIAコンサルタント元リーダー計算アルゴリズム流体解析マニュアルの第3章など

Antoine Le Hyaric CNRS LJLL並列計算数値可視化など統合環境 FreeFem++-csを開発

Jacques Morice LJLL(ポスドク) 3次元メッシュと可視化ツールmeditの組込

Sylvian Auliac LJLL(大学院生)非線形最適化ライブラリ(NLopt IPOPT)関数最適化計算アルゴリズム(CMA-ES)など

Kohji Ohtsuka 広島国際学院大学以前MS-Windowsのグラフィック表示などその後マニュアル作成で協力

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

統合開発環境 FreeFem++-cs

開発サイト wwwfreefemorgff++に無く下記からhttpwwwannjussieufrlehyaricffcs

並列計算などもサポート日本語は utf-8のみで直接入力不可

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

誰のため目的は

目的は (FHechtのスライドから)

1 研究開発 (RampD)

2 学術研究

3 有限要素法偏微分方程式弱解や変分形式の教育

4 アルゴリズムの実現性チェックに向けた試作

5 数値実験

6 計算科学や並列計算 (MPI)

誰のため研究者エンジニア大学教員学生hellip

メーリングリストFreefemppljllmathupmcfr一日に 5~20通377人のメンバー

1000人以上の実利用者 (月に 200以上のダウンロード)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) I

1 多くの有限要素連続 P1P2要素不連続 P0 P1RT0RT1BDM1-要素辺要素MINI要素など

2 メッシュ非依存性メッシュT 1で計算した有限要素関数 fを他のメッシュT 2の有限要素関数や配列に補間する

3 ベクトルや行列を使った弱形式による複素実問題の定義有限要素法のアルゴリズムの多くは行列やベクトルで記述される

4 不連続Galerkinによる定式化 (現在 (2010)は二次元のみ)

5 複数の行列解法 LU Cholesky Crout CG GMRESUMFPack SuperLU MUMPS HIPS SUPERLU DISTPASTIX sparse linear

6 固有値問題ARPACKを使った解法

7 統合環境FreeFem++-cs

8 境界の解析的表現

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) II

9 自動メッシュ分割Delaunay-Voronoı分割 (2d3d(tetgen))

10 メッシュや有限要素解の保存読み込み

11 アダプティブメッシュ解などのHessianを使った距離に基づく

12 動的リンク機能parview gmsh vtk medit gnuplotといった外部のプログラムを追加することで機能を拡張できるような機構

13 並列処理のMPIをフルにサポート

14 非線形最適化ツールCG Ipopt NLOpt stochastic

15 豊富なサンプルNavier-Stokes (2d3d) elasticity (2d3d)流体構造連成問題固有値問題 Schwarzの領域分割法残差誤差指標

「有限要素法で学ぶ現象と数理」には形状最適化設計や反応拡散問題の計算 (高石)がある

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 5: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

開発メンバーFrederic Hecht フランスパリ第 6大学

httpswwwljllmathupmcfrJLLions研究所 (LJLL)プロジェクトのリーダーアダプティブメッシュ有限要素空間など元 INRIA研究員

Olivier Pironneau LJLLINRIAコンサルタント元リーダー計算アルゴリズム流体解析マニュアルの第3章など

Antoine Le Hyaric CNRS LJLL並列計算数値可視化など統合環境 FreeFem++-csを開発

Jacques Morice LJLL(ポスドク) 3次元メッシュと可視化ツールmeditの組込

Sylvian Auliac LJLL(大学院生)非線形最適化ライブラリ(NLopt IPOPT)関数最適化計算アルゴリズム(CMA-ES)など

Kohji Ohtsuka 広島国際学院大学以前MS-Windowsのグラフィック表示などその後マニュアル作成で協力

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

統合開発環境 FreeFem++-cs

開発サイト wwwfreefemorgff++に無く下記からhttpwwwannjussieufrlehyaricffcs

並列計算などもサポート日本語は utf-8のみで直接入力不可

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

誰のため目的は

目的は (FHechtのスライドから)

1 研究開発 (RampD)

2 学術研究

3 有限要素法偏微分方程式弱解や変分形式の教育

4 アルゴリズムの実現性チェックに向けた試作

5 数値実験

6 計算科学や並列計算 (MPI)

誰のため研究者エンジニア大学教員学生hellip

メーリングリストFreefemppljllmathupmcfr一日に 5~20通377人のメンバー

1000人以上の実利用者 (月に 200以上のダウンロード)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) I

1 多くの有限要素連続 P1P2要素不連続 P0 P1RT0RT1BDM1-要素辺要素MINI要素など

2 メッシュ非依存性メッシュT 1で計算した有限要素関数 fを他のメッシュT 2の有限要素関数や配列に補間する

3 ベクトルや行列を使った弱形式による複素実問題の定義有限要素法のアルゴリズムの多くは行列やベクトルで記述される

4 不連続Galerkinによる定式化 (現在 (2010)は二次元のみ)

5 複数の行列解法 LU Cholesky Crout CG GMRESUMFPack SuperLU MUMPS HIPS SUPERLU DISTPASTIX sparse linear

6 固有値問題ARPACKを使った解法

7 統合環境FreeFem++-cs

8 境界の解析的表現

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) II

9 自動メッシュ分割Delaunay-Voronoı分割 (2d3d(tetgen))

10 メッシュや有限要素解の保存読み込み

11 アダプティブメッシュ解などのHessianを使った距離に基づく

12 動的リンク機能parview gmsh vtk medit gnuplotといった外部のプログラムを追加することで機能を拡張できるような機構

13 並列処理のMPIをフルにサポート

14 非線形最適化ツールCG Ipopt NLOpt stochastic

15 豊富なサンプルNavier-Stokes (2d3d) elasticity (2d3d)流体構造連成問題固有値問題 Schwarzの領域分割法残差誤差指標

「有限要素法で学ぶ現象と数理」には形状最適化設計や反応拡散問題の計算 (高石)がある

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 6: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

統合開発環境 FreeFem++-cs

開発サイト wwwfreefemorgff++に無く下記からhttpwwwannjussieufrlehyaricffcs

並列計算などもサポート日本語は utf-8のみで直接入力不可

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

誰のため目的は

目的は (FHechtのスライドから)

1 研究開発 (RampD)

2 学術研究

3 有限要素法偏微分方程式弱解や変分形式の教育

4 アルゴリズムの実現性チェックに向けた試作

5 数値実験

6 計算科学や並列計算 (MPI)

誰のため研究者エンジニア大学教員学生hellip

メーリングリストFreefemppljllmathupmcfr一日に 5~20通377人のメンバー

1000人以上の実利用者 (月に 200以上のダウンロード)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) I

1 多くの有限要素連続 P1P2要素不連続 P0 P1RT0RT1BDM1-要素辺要素MINI要素など

2 メッシュ非依存性メッシュT 1で計算した有限要素関数 fを他のメッシュT 2の有限要素関数や配列に補間する

3 ベクトルや行列を使った弱形式による複素実問題の定義有限要素法のアルゴリズムの多くは行列やベクトルで記述される

4 不連続Galerkinによる定式化 (現在 (2010)は二次元のみ)

5 複数の行列解法 LU Cholesky Crout CG GMRESUMFPack SuperLU MUMPS HIPS SUPERLU DISTPASTIX sparse linear

6 固有値問題ARPACKを使った解法

7 統合環境FreeFem++-cs

8 境界の解析的表現

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) II

9 自動メッシュ分割Delaunay-Voronoı分割 (2d3d(tetgen))

10 メッシュや有限要素解の保存読み込み

11 アダプティブメッシュ解などのHessianを使った距離に基づく

12 動的リンク機能parview gmsh vtk medit gnuplotといった外部のプログラムを追加することで機能を拡張できるような機構

13 並列処理のMPIをフルにサポート

14 非線形最適化ツールCG Ipopt NLOpt stochastic

15 豊富なサンプルNavier-Stokes (2d3d) elasticity (2d3d)流体構造連成問題固有値問題 Schwarzの領域分割法残差誤差指標

「有限要素法で学ぶ現象と数理」には形状最適化設計や反応拡散問題の計算 (高石)がある

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 7: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

誰のため目的は

目的は (FHechtのスライドから)

1 研究開発 (RampD)

2 学術研究

3 有限要素法偏微分方程式弱解や変分形式の教育

4 アルゴリズムの実現性チェックに向けた試作

5 数値実験

6 計算科学や並列計算 (MPI)

誰のため研究者エンジニア大学教員学生hellip

メーリングリストFreefemppljllmathupmcfr一日に 5~20通377人のメンバー

1000人以上の実利用者 (月に 200以上のダウンロード)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) I

1 多くの有限要素連続 P1P2要素不連続 P0 P1RT0RT1BDM1-要素辺要素MINI要素など

2 メッシュ非依存性メッシュT 1で計算した有限要素関数 fを他のメッシュT 2の有限要素関数や配列に補間する

3 ベクトルや行列を使った弱形式による複素実問題の定義有限要素法のアルゴリズムの多くは行列やベクトルで記述される

4 不連続Galerkinによる定式化 (現在 (2010)は二次元のみ)

5 複数の行列解法 LU Cholesky Crout CG GMRESUMFPack SuperLU MUMPS HIPS SUPERLU DISTPASTIX sparse linear

6 固有値問題ARPACKを使った解法

7 統合環境FreeFem++-cs

8 境界の解析的表現

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) II

9 自動メッシュ分割Delaunay-Voronoı分割 (2d3d(tetgen))

10 メッシュや有限要素解の保存読み込み

11 アダプティブメッシュ解などのHessianを使った距離に基づく

12 動的リンク機能parview gmsh vtk medit gnuplotといった外部のプログラムを追加することで機能を拡張できるような機構

13 並列処理のMPIをフルにサポート

14 非線形最適化ツールCG Ipopt NLOpt stochastic

15 豊富なサンプルNavier-Stokes (2d3d) elasticity (2d3d)流体構造連成問題固有値問題 Schwarzの領域分割法残差誤差指標

「有限要素法で学ぶ現象と数理」には形状最適化設計や反応拡散問題の計算 (高石)がある

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 8: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) I

1 多くの有限要素連続 P1P2要素不連続 P0 P1RT0RT1BDM1-要素辺要素MINI要素など

2 メッシュ非依存性メッシュT 1で計算した有限要素関数 fを他のメッシュT 2の有限要素関数や配列に補間する

3 ベクトルや行列を使った弱形式による複素実問題の定義有限要素法のアルゴリズムの多くは行列やベクトルで記述される

4 不連続Galerkinによる定式化 (現在 (2010)は二次元のみ)

5 複数の行列解法 LU Cholesky Crout CG GMRESUMFPack SuperLU MUMPS HIPS SUPERLU DISTPASTIX sparse linear

6 固有値問題ARPACKを使った解法

7 統合環境FreeFem++-cs

8 境界の解析的表現

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) II

9 自動メッシュ分割Delaunay-Voronoı分割 (2d3d(tetgen))

10 メッシュや有限要素解の保存読み込み

11 アダプティブメッシュ解などのHessianを使った距離に基づく

12 動的リンク機能parview gmsh vtk medit gnuplotといった外部のプログラムを追加することで機能を拡張できるような機構

13 並列処理のMPIをフルにサポート

14 非線形最適化ツールCG Ipopt NLOpt stochastic

15 豊富なサンプルNavier-Stokes (2d3d) elasticity (2d3d)流体構造連成問題固有値問題 Schwarzの領域分割法残差誤差指標

「有限要素法で学ぶ現象と数理」には形状最適化設計や反応拡散問題の計算 (高石)がある

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 9: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

主な機能 (2d3d) II

9 自動メッシュ分割Delaunay-Voronoı分割 (2d3d(tetgen))

10 メッシュや有限要素解の保存読み込み

11 アダプティブメッシュ解などのHessianを使った距離に基づく

12 動的リンク機能parview gmsh vtk medit gnuplotといった外部のプログラムを追加することで機能を拡張できるような機構

13 並列処理のMPIをフルにサポート

14 非線形最適化ツールCG Ipopt NLOpt stochastic

15 豊富なサンプルNavier-Stokes (2d3d) elasticity (2d3d)流体構造連成問題固有値問題 Schwarzの領域分割法残差誤差指標

「有限要素法で学ぶ現象と数理」には形状最適化設計や反応拡散問題の計算 (高石)がある

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 10: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

有限要素法とは有限要素法は偏微分方程式境界値問題の数値解法で変分法に基づため数学理論が明確である次の5つのステップから構成される

1 メッシュTh(Ω)自動生成 三角形分割 (2d)四面体分割 (3d)

2 有限要素空間 Vh(Th(Ω) bull)を生成3 弱形式から連立方程式の生成

強形式 minus∆u = f (Ω上) u = 0 (partΩ上)

弱形式 a(u v) minus ℓ(v) = 0 ℓ(v) =intΩ

f v dx

a(u v) =intΩ

nablau middot nablav だたし u = 0(partΩ上)

4 連立方程式 Au = Fを解く A =(a(ϕ j ϕi)

)F =

(ℓ(ϕi)

)5 解の評価 (数値可視化解の改良など)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 11: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) I

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

(図 3参照)3 fespace Vh(ThP1) 2有限要素空間 Vh P1要素4 Vh uv u visinVh5 func f = -1 既知関数 f (x y) = minus16 func g = 0 g(x y) = 07 problem Poisson(uv) = 3弱形式 弱形式 (2)8 int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

        a(u v) =intΩnablaumiddotnablav

9 - int2d(Th)(fv) minusℓ(v) =intΩ

f v10 + on(Cu=g) u = g (partΩ上)11 Poisson 4数値解を求める12 plot(u) 5解の等高線表示 図 2 参照

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 12: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

ex01edp (p28) II

図 三角形分割 Th(= Th(Ω)) 図 plot(u)等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 13: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

22メッシュ(p32) 31 メッシュ分割 (p69)

FreeFem++では三角形分割四面体分割といったメッシュ生成について複数の方法を提供している

1 標準的な方法では領域の境界 partΩを複数の曲線Γi i = 1 middot middot middot Lで構成しΓiを次のようにパラメータ表示する

Γi = (φx(t) φy(t)) α le t le β2 縦横の分割数を指定して長方形を分割する (square)有限要素法のテストアルゴリズムの検証そして計算精度をチェックする場合には便利である

3 CADソフトなどで生成したメッシュファイル xxxxxmshを

mesh Th = readmesh(xxxxxmsh)

で読み込む以後メッシュは Thを参照するだけで利用できる(31p69)

4 画像の境界を認識してメッシュを生成する(31p72)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 14: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

11境界を定義

1 border C(t=02pi)x=cos(t) y=sin(t) 単位円周2 mesh Th = buildmesh (C(50)) 1メッシュ生成 Th

図 2 三角形分割 Th(= Th(Ω))

領域 Ω を決めメッシュ分割Th(Ω) を生成使われる予約語は border mesh buildmesh

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 15: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) I

F

E1 E2

C0

C1 C2

C3

C4

図 笑う顔 (smile face)曲線

三角形分割の例) 図 4 ではFE1E2C0C1C2C3C4 と8曲線が使われている

3次元領域 Ω の境界 cupΓ j(曲面)はmovemesh23で生成し内部への4面体分割は tetg()で生成 (p83)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 16: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

smilefaceedp(p37) II

図 笑う顔の三角形分割

図 5のような領域になるには曲線の向きが重要になる境界には buildmeshで指定した順番でF(1) E1(2) E2(3)C1(4) C2(5) C3(6) C4(7)C0(8)と番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 17: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(境界=曲面の和)p833次元領域Ωを境界面

Γ = cupJj=1Γ j (曲面の和) Γ j = Φ

j(Π j)

ここでΠ jは平面Φ j(x y)は写像

mesh3 Th(Γ j)=movemesh23(Th(Π j)transfo=[Φj1Φ

j2Φ

j3])

として 3次元曲面のメッシュTh(Γ j)を作り

mesh3 Th(Γ)=Th(Γ1) + middot middot middot + Th(ΓJ)

で境界面の三角形分割が出来るただしメッシュ曲面 Th(Γ j)はΓ jとはずれるためcupJ

j=1Γ jと一致しないだけでなく閉曲面になら

ない場合もある曲面から内部への分割は Tetgenを使って次のように内部に切っていく

mesh3 Th=tetg(Th(Γ)switch=paAAQyregionlist=domain)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 18: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3次元メッシュ(Buildlayers) p84

平面領域Πで定義された関数 zl(x y) lt zu(x y)があるとき空間

Ω = (x y z) (x y) isin Π zl(x y) lt z lt zu(x y)

を4面体分割する命令として buildlayers()(p84)があり回転体生成にも使える

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[zl zu])

ここで nzは z軸方向の分割数 (層の数)z軸方向をパラメータにして平面Πの回転体を次のように作ることができる

mesh3 Th(Ω)=buildlayers(Th(Π) nz zbound=[0eπ]transfo=[y cos(z) y sin(z) x])

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 19: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 I正方形領域 Ω = (0 1)2 を横4分割縦5分割する場合は

mesh Th = square(45)

とする長方形領域 Ω = (x0 x1) times (y0 y1)を n timesmに分割する場合は

mesh Th = square(nm [x0 + (x1 minus x0) lowast x y0 + (y1 minus y0) lowast y])

とするたとえばプログラム

real x0=01x1=15

real y0=02y1=08

int n=5m=10

mesh Th=square(nm[x0+(x1-x0)xy0+(y1-y0)y])

による四角形は図 6のようになり境界 (辺)には番号が付く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 20: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

12長方形 (square) p33 II

図 squareによる三角形分割

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 21: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

13メッシュデータファイル

生成したメッシュを他のプログラムで再利用したいCADなどで生成したメッシュを FreeFem++で利用したい

savemesh 生成したメッシュを再利用するために外部記憶装置に保存 (p70)

readmesh データ形式 (BAMG表 31(p89))のファイルを読み込んでメッシュを生成する

mesh Th=readmesh(xxxxxmesh) 2次元mesh3 Th=readmesh3(xxxxxmesh) 3次元

2次元の場合はより単純なデータ形式 (msh図31(p71))がある

mesh Th=readmesh(xxxxxmsh)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 22: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

14画像データからの生成

図 biwako2edp(p72)元画像 (3行目)縁を抽出した画像 (15行目)生成されたメッシュ(30行目)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 23: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 I

fespace Vh(Th bull) =v v = v1ϕ1 + middot middot middot + vMϕM vi isin IR

型の指定 bullは基底関数を選択することを表す

Vh f=cos(pi(x-05))sin(pi(y-05)) Vh =Vh( Th bull)

100

050

050100

000

f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

100050

050

050

100

bull = P0

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 24: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 II

050100

050

100

bull =P1050 100

bull =P2

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))のグラフと有限要素空間への射影 (補間)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 25: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 III

bull =P1nc 1次非適合要素

bull =P1b 流体バブル要

素MINI要素

図 f (x y) = cos(π(x minus 12 )) cos(π(y minus 1

2 ))

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 26: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

2 有限要素空間を生成 IV

P0P1P2P1b 3次元問題 (P03dP13dP23dP1b3d)もOK(p89)

P3 2次元問題のみ OK

Raviart-Thomas要素 三角形要素の各辺を通過する流束を使うベクトル値関数3次元問題もOK (bull =RT03d)(p92) (p92)

P1dc P2dc 1次2次不連続要素 (マニュアル)

Edge03d ベクトル値関数に対する 0次エッジ要素 (マニュアル)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 27: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 I2階偏微分方程式境界値問題を FreeFem++はH1(Ω)でしか解けないそのため Dirichlet境界条件をペナルティ法で解く

minus ∆u = f Ω内 u = g Γ上 (Γ = partΩ) (1)

FreeFem++では強形式 (1)をペナルティ法を使って双線形a(middot middot)及び線形 ℓ(middot)とに分け

a(u v) = ℓg(v) forallv isin Vh

といった弱形式で解くP1要素のときは

a(u v) =intΩ

nablau middot nablav dΩ+ on(Γu = 0) (2)

ℓg(v) =intΩ

f v dΩ+ gϵi (3)

gϵi = ϵminus1g(qi) qi isin Γそれ以外 gϵi = 0 (4)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 28: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

3 弱形式から連立方程式の生成 II

連立方程式 Au = Fを解く

A = (ai j) =intΩ

nablaϕ j middot nablaϕi dΩ (i j) (5)

aii = ϵminus1 (節点 qi isin partΩのとき) aii =

intΩ

nablaϕi middot nablaϕi dΩ qi lt partΩ

F = Fi Fi = ℓ(ϕi) =intΩ

fϕi dΩ(+ϵminus1g(qi) qi isin partΩのとき

)【注意】剛性行列 Aを生成するとき数値計算法により要素の格納法 (圧縮)が異なるためsolver=を使って数値計算法を指定できる指定しない場合はバージョンごとに異なる数値計算法LUCroutCholeskyUMFPACKCGGMRES

が使われる (p50)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 29: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

弱形式による記述 I

境界を Γ = cupΓ jとしてで u = 0 (Γi上)なら境界値問題の名前をProbとして

func f= f (x y)func g=g(x y)Vh uv uvisin Vh(Ω)とするproblem Prob(uv)=

a(uv)例えば

intΩnablaunablav=int2d(Th)(dx(u)dx(v)+dy(u)dy(v))

-ℓ(v) 例えばℓ(v)=int1d(fv)+on(iu=g)

連立方程式の解法を bullに選択する場合は

problem Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 30: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

4 連立方程式を解く

3 弱形式から連立方程式の生成における連立方程式

Au = F

は弱形式の名前を書くだけ

Prob

plot(u) 数値解 u= uhの等高線を表示

弱形式を書いて同時に連立方程式を解く次の命令がある

solve Prob(uvsolver=bull)=a(uv)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 31: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

algebraedp (p109)

1 border C(t=02pi)x=cos(t) y=sin(t)2 mesh Th = buildmesh (C(10))

3 fespace Vh(ThP1)

4 Vh uvF 解 uテスト関数 v5 func f= -1000 6 func g=10

7 Step1 3での uv はダミー8 varf a(uv) = int2d(Th)( dx(u)dx(v) + dy(u)dy(v))

+ on(Cu=0)

9 matrix A=a(VhVh) Step2

10 varf b(uv) = int2d(Th)( fv )+on(Cu=0 ) Step3

11 F[] = b(0Vh) Step4

12 matrix B=b(VhVh) B = (bi j) bii = ϵminus1 qiisinΓ 以外 013 Vh gh = g

14 F[] += Bgh[] +ϵminus1g(qi) qˆiisinΓ15 u[]=Aˆ-1F[] 連立方程式 Au[] = F[] を解く

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 32: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 I数値計算結果 u= uhはメッシュTh= Th(Ω)上の有限要素関数uh isin Vh(Th(Ω) bull)uaisin aVh(T a

h (Ω) bull) such that ua(qi)=u(qi) qi isin Ω(節点)を生成

aVh ua = u 異なるメッシュへの補間

【応用例】1 誤差評価 異なるメッシュサイズ h lt hprimeでの uh isin Vh(Th(Ω) bull) uhprime isin Vhprime(Thprime(Ω) bull)を比較 (precision02edp p99)

∥uh minus uhprime∥L2(Ω)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 33: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 II2 領域分割法 schwarz-overlapedp (p102)

図 schwarzの overlap法

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 34: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

メッシュ非依存性 III3 ズーミング airfoiledp (p106)

図 左側が全域で右側が翼周り上から翼周りの流れ下が揚力の等高線

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 35: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する I

数値計算可視化 膨大な数となる数値計算結果をコンピュータグラフィックで表示してデータに含まれる科学的な特徴や意味を直感的に理解する

plot(a(10)+b(10)+c(10)) 曲線 acupbcupc を表示plot(Th) メッシュThを表示plot(u) 有限要素関数 u を表示plot([uv]) ベクトル値 [uv]= (u v)のベクトル表示

データ抽出 FreeFem++にはホワイトボックステストができる各種操作がある

1 付録 A9(メッシュ分割での操作p227)メッシュ要素 (P0要素)節点サイズなどを取り出せる

2 付録 A10(有限要素空間での操作p228)有限要素関数の基底数 (自由度)第 k要素の i番目節点番号など

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 36: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する II数学評価 厳密解と近似解とを L2ノルムなどで評価する

∥u minus uh∥L2(Ω) le Ch2 (p208)

における係数 Cを推定する (precision02edp p99)統計処理 計算結果をファイルに保存しグラフにするなど統計処理を行う

1 冷却の問題での温度変化 (heatSedp p64)

2 熱方程式を空間有限要素時間差分 θ法で解くときの誤差評価 (evolutionedpp214)θ = 0前進差分θ = 1

2 Crank-Nicolsonθ = 1後退差分

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 37: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する III

000

005

010

015

020

025

030

035

040

005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295

0

01

02

03

04

05

06

07

08

09

1

図 n = 0 1 middot middot middot での相対誤差 ∥unh(θ) minus uex(nτ)∥L2(Ω)∥uex(nτ)∥L2(Ω) をプ

ロット

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 38: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する IV評価用プログラム メッシュサイズを変えてみたりアダプティブメッシュを使うなど試行して可視化データ抽出などにより最適なメッシュを検討する【例】L字領域で minus∆u = minus1 u = 0 (partΩ上)(p36)

ba

bb

bc

bd

be

bf

(10)

(0505)

(01)

(00)

図 三角形分割 Th 図 plot(u)による解の等高線表示

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 39: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VTh = adaptmesh(Thu) (p61)

i = 1 plot(u)

i = 2 plot(u)

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 40: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VITh = adaptmesh(Thuerr=bull) (p62)

i = 1 err=01

i = 2 err=006

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 41: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VII

i = 3 err=004

i = 4 err=003

図 オプション err=を制御したアダプティブメッシュ

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価
Page 42: FreeFem++数理指向プログラミング - comfos.orgcomfos.org/jp/ffempp/pdf/MSJ-pre-2014-autumn.pdf · 数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成

数理指向 はじめに 有限要素法超入門 メッシュ生成 有限要素空間を生成 弱形式 解く 評価

5 解を評価する VIIIFreeFem++では行列Mを使った2点 PQ間の距離

∥minusrarrPQ ∥M =

radic⟨minusrarrPQM

minusrarrPQ⟩ M =

(m11 m12m12 m22

)の下に Delaunay-Voronoiアルゴリズムを適用することでアダプティブメッシュ

Th = adaptmesh(Th fオプション)

を実現している

M = 1ϵ|H| H = nablanabla f =

(part2 fpartx2 part2 fpartxpartypart2 fpartxparty part2 fparty2

)(6)

通常は f = u (有限要素解)解の漸近挙動 u ≃ uSを使い f = uS(p79)

オプション err=ϵ (p61)

  • 数理指向
  • はじめに
  • 有限要素法超入門
  • メッシュ生成
  • 有限要素空間を生成
  • 弱形式
  • 解く
  • 評価