Try   HackMD

2次元Poisson方程式に対するIGA

これは数値計算Advent Calendar 2018の12月12日の記事ですが, 公開日は2018年12月26日です.
遅くなってしまい大変申し訳ありません.

みなさん, IGA(Isogeometric Analysis)はご存知でしょうか.
IGAは日本語の情報が少なく, たぶん知らない方も多いなので, 今回の記事ではざっくりと解説することを目標にします.

tl;dr

ざっくり, 本当にざっくり言えばIGAは「数値計算・ミーツ・形状表現」です.
ここでの数値計算とはFEM(Finite Element Method, 有限要素法)でも使われているGalerkin法のことで, 形状表現とはNURBS(Non-uniform Rational B-spline)のことです.

通常のFEMでは, 近似解を構成するために解析対象の形状をメッシュ分割します.
それに対してIGAでは三角形分割のようなメッシュ分割は行いません.
これを可能にしているのがNURBSで, 近似解構成のための基底関数が形状表現から自然に誘導される事を利用しています.

IGAで解ける問題は幾つかありますが, 本記事では2次元Poisson方程式を例として解説します.

2次元Poisson方程式

領域

ΩがNURBS多様体で表されているとします.
次の2次元Poisson方程式を考えます.

2ux2+2uy2+f=0u|ΓD=gu\boldsymboln|ΓN=0

ここで,

fは与えられた
Ω
上の関数で,
u
が求めるべき未知関数です.
ΓD
はDirichlet境界,
ΓN
はNeumann境界で
ΓDΓN=Ω,ΓDΓN=
を満たします.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

とくに

f=0であればLaplace方程式と呼ばれ, その解
u
は調和関数と呼ばれます.

定常の熱伝導方程式と思えば,

uが温度,
f
Ω
上の熱源,
g
が境界
ΓD
上の温度,
u\boldsymboln|ΓN=0
ΓN
上での断熱条件に相当します.

数値解析の方針

IGAの手順を書けば次のようになります:

  1. 偏微分方程式を弱形式に書き直す
  2. 領域をNURBSで表す
  3. 解の精度のためにNURBS多様体の細分(refinement)を取る
  4. NURBSから誘導される基底関数で弱形式の解空間を離散化して近似解を求める(Galerkin法)

通常のFEMとは基底関数の作り方が違うだけなので, 計算手順も基本的に同じになります.

1. 弱形式の導出

Galerkin法のために弱形式に書き換えます.

ΓD上で
0
を取るテスト関数
w
を掛けて
Ω
で積分します.

0=Ωw(2ux12+2ux22+f)dx1dx2=Ω(x1(wux1)+x2(wux2))dx1dx2Ω(wx1ux1+wx2ux2)dx1dx2+Ωwf dx1dx2=Ω(n1(ux1)+n2(ux2))w dsΩ(wx1ux1+wx2ux2)dx1dx2+Ωwf dx1dx2=w,u+[w,f]

ここで

\boldsymboln=(n1,n2)は外向き単位法線ベクトルで, 記号
,,[,]
は次のように定めました.

u,v=Ω(vx1ux1+vx2ux2)dx1dx2[u,v]=Ωuv dx1dx2

つまり, 任意のテスト関数

wに対して

w,u=[w,f]

が充たされるような

uを求めれば良いということになります.
これを弱形式と言います.
これに対して元の偏微分方程式は強形式と呼ばれ, 弱形式と(数学的な厳密さを言わなければ)等価です.

2. NURBSによる領域の形状表現

NURBSの詳細はNURBS多様体による形状表現pdfに書いたのでそちらを参照してください.
今回使う性質で重要なものは次の2点です.

  • 矩形領域
    D=[a1,b1]×[a2,b2]R2
    から
    R2
    への写像
    \boldsymbolp
    で,
    Ω
    をパラメータ付けます.
  • そのパラメータ付けは
    n
    個の基底関数
    Bi:DR
    と制御点
    \boldsymbolaiR2
    の線型結合で表されます.
    \boldsymbolp(t1,t2)=i1,i2Bi1i2(t1,t2)\boldsymbolai1i2
    といった具合です.

領域

Ωの具体例として次の図のような円環領域の半分を考えましょう.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

この形状

Ωは次のようにして作れます.

  • ノット列
    \boldsymbolk1=(0,0,1,1),\boldsymbolk2=(0,0,0,1,1,2,2,2)
  • 次数
    p1=1,p2=2
  • 重み
    wi1i2
    (図の通り)
  • 制御点
    \boldsymbolai1i2
    (図の通り)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

図には書いてませんが, 内半径1, 外半径2としています.

Dは矩形領域で
D=[0,1]×[0,2]
です.

3. NURBS多様体の細分

IGAにおける基底関数という用語には次の2つの意味があるため注意が必要です.

  • NURBSの形状表現のための基底関数
    Bi1i2:DR
  • Galerkin法で使う基底関数
    Ni:ΩR

Galerkin法で使う基底関数

NiはNURBS基底関数
Bi1i2
から誘導されるため実質的にこれらは同じで, 混乱の恐れはありません.
(
Bi1i2
\boldsymbolp(t1,t2)=i1,i2Bi1i2(t1,t2)\boldsymbolai1i2
のために2つの添字が走りますが, Galerkin法での基底関数は添字一つで十分なので束ねて
Ni
と書いています)

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

ただしNURBSによる形状表現が決まった段階で基底関数(と制御点)の数は決まってしまい, このままでは近似解を得るためには不十分という問題があります.

つまり近似解の精度向上には基底関数を増やす必要があり, ここで細分(refinement)と呼ばれる操作が役立ちます.
細分はパラメータ付け

\boldsymbolp:DΩを変えることなく, 基底関数と制御点の数を増やす操作のことです.
(こちらも詳しくはNURBS多様体による形状表現pdfを参照して下さい)
Ω
に対して細分を行って制御点を増やした例が次の図です.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

この細分の操作は, 有限要素法で言えばメッシュを細かくする操作に相当します.

4. Galerkin法による近似解構成

理論的背景は他の文献を当ってもらうとして, ここでは解法のみ簡単に述べます.

wをテスト関数とした弱形式は次のように表されるのでした.

w,u=[w,f]

NURBS基底関数

Ni (iI={1,,n})を用いて, 厳密解
u
u~
で近似します:

u~=iI[u]iNi=v~+g~v~=iID[v]iNig~=iI[g]iNi

ここで

[u]i,[v]i,[g]iRは係数です.
ID
はDirichlet条件から決まる添字の集合で, 次を満たします.

iIDNi|ΓD=0

g~
g
ΓD
上で近似できるように係数
[g]i
を決定して構成されます. (
[g]i
の決定は難しくなく, とくに今回の例では定数のみを考えるのでより簡単です)
[u]i=[v]i+[g]i
なので, あとは
[v]i
を求めればよいことになります.

wも同様に
w~=Nj (jID)
のようにして離散化します.
これらを先の弱形式に代入すれば,
[v]i
を未知変数とする連立方程式(
jID
)に帰着されます.

iID[v]iNj,Ni+iI[g]iNj,Ni=[Nj,f]

積分はNURBS多様体で入る座標

(t1,t2)で行うため, 次のようにして変数を取り替えます.

Nj,Ni=Ω(Njx1Nix1+Njx2Nix2)dx1dx2=D(m,k,ltkxmtlxmNjtkNitl)detk,l(xktl)dt1dt2[Nj,f]=ΩNjf dx1dx2=DNjfdetk,l(xktl)dt1dt2

計算例 A-1

簡単のために

f=0とし, 次のように
ΓD,g
を定めます.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

この条件で数値計算した結果が次のグラフです.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

厳密解

uが調和関数になることを思い出せば, これは
log(z)
の実部と同じ形になることが分かります.
つまり
u
は対数関数のグラフを原点中心に回転させたものに一致し, 次の図はその断面です.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

計算例 A-2

簡単のために

f=0とし, 次のように
ΓD,g
を定めます.

この条件で数値計算した結果が次のグラフです.

厳密解

uが調和関数になることを思い出せば, これは
log(z)
の虚部と同じ形(常螺旋面)になることが分かります.

計算例 A-3

全てDirichlet条件として

f=4とすれば次のようになります.

この条件で解いた結果が次のグラフです.

この計算結果では, 中央付近に不自然な山があるように見えます.
これは基底関数の数が十分でないために起こっており, もう少し細かい細分を取ると改善できます.

新しい基底関数で計算した結果が次の図です.
不自然な山は見える範囲では現れず, 近似解の精度が上がっている事が確認できます.

これまでの例と異なり, この条件に対する厳密解

uを陽に書き下すのは難しそうです.
前述のようにこれも物理的解釈が出来て, 「
Ω
全体に熱源
f
があって境界での温度が
g
で固定された定常状態」というものです.

計算例 B-1

f=4に対しても厳密解(
u=1x12x22
)が得られるような形状(単位円板)・境界条件として次を与えましょう.

この領域

ΩのNURBSによる形状表現は次のようになります.

  • ノット列
    \boldsymbolk1=(0,0,0,1,1,1),\boldsymbolk2=(0,0,0,1,1,1)
  • 次数
    p1=2,p2=2
  • 重み
    wi1i2
    (図の通り)
  • 制御点
    \boldsymbolai1i2
    (図の通り)

基底関数

Niは次のようになります.

この条件で解いた結果が次のグラフです.

厳密解

u=1x12x22と近似解
u~
の差を取れば次のようになります.
ただし差を大きく見せるため, 高さ方向に200倍して表示しています

細分を取って基底関数の数を増やすと次のようになります.

これらの基底関数を使って近似解

u~を構成すると次のようになりました.

u~の見た目だけでは細分前後の変化が分かり難いですが, 同じように差
uu~
を取ると誤差が減っていることが確認できます.

まとめ

isoは「等しい」, geometricは「幾何的に」という意味なので, IGA(isogeometric analysis)は直訳すれば「幾何的に等しい解析」ということになります.

通常の有限要素法では, 領域

Ωを三角形分割する必要があるため, その意味で形状に対する近似が入ります.
これに対してIGAでは, 今回見たように
Ω
がNURBSで表現されていれば形状に対する近似無しに数値解を得ることが出来ます.
これが「幾何的に等しい解析」の意味する所です.

CADなどで使われる形状の多くはNURBSで表現可能であり, その意味でNURBSは非常に柔軟に様々な形状を表すことが可能です.
IGAではNURBSで表現可能な形状しか扱えませんが, これはデメリットでは無く, 寧ろCADで作成した形状からシームレスに数値計算を行えるためにメリットと考える方が適切です.

コード

今回の数値計算のためのコードはJuliaで書きました.
全然綺麗には書けてませんが, 一応githubに上げておきます.
https://github.com/hyrodium/IGA-PoissonEquation

参考文献

数学的にはGalerkin法を使っているため, 有限要素法に関する文献も有用です.

おわりに

QiitaではなくHackMDで書いたため, コメントなどが出来ません.
質問・間違いなどありましたら筆者のTwitterまでご連絡ください.