Sample Scripts from GB Books
ラプラス方程式、ポアッソン方程式

ここで紹介するスクリプトはGunnar Backstrom氏の承諾のもと、書籍 “Simple Fields of Physics by Finite Element Analysis” に記されている多数のFlexPDE適用事例 の中からその一部を紹介するものです。

PDF版 (860KB)

ここでは2次元の正方形領域において変数 U(x, y) に関するラプラス方程式

  

(1)

について考えることにします。実際の物理的な問題にFlexPDEを適用する前に、その計算精度を確認する意味で解析解との対比をまず行ってみましょう。良く知られているように正則な複素関数の実数部、あるいは虚数部はラプラス方程式を満足します。そこでここでは

(2)

という関数を想定し、境界上でこの関数値を指定することにします(Dirichlet型境界条件)。もちろんFlexPDEはこれが厳密解であることなど認識できるわけではないので、ひたすら有限要素法に基づき数値解を計算します。

1. Problem descriptor [ laplace01a.pde ]

まずタイトルを設定します。
  TITLE
    'Laplace Equation'      { laplace01a.pde }

次に演算精度に関するセレクタをセットします。デフォルトは 0.002 なのですが、問題の素性が良いため、ここでは精度を 1e-5 (= 10^(-5)) に引き上げることにします。
  SELECT
    Errlim = 1e-5           { Requested relative accuracy }


従属変数を定義します。
  VARIABLES
    U                       { Unknown }


偏微分方程式の定義に先立ち、パラメータ類を定義します。これらは境界の定義、及び境界条件の設定に際して使用されます。
  DEFINITIONS
    Lx = 1  Ly = 1
    U_ex = x^2 - y^2        { Exact solution }


ラプラス方程式を定義します。
  EQUATIONS
    div(grad(U)) = 0        { Laplace PDE }


次に境界の形状と境界条件を設定します。一辺が2の正方形の境界上で関数Uの値が数式(2)に従って与えられます。境界条件は各辺で共通なので指定は一度だけで済みます。
  BOUNDARIES
    Region 1                { Set exact values on boundaries }
      Start(-Lx, -Ly)
      Value(U) = U_ex  Line to (Lx, -Ly)
                            to (Lx, Ly)
                            to (-Lx, Ly)
                            to Close


最後に出力すべき情報を指定します。
  PLOTS
    Grid(x, y)
    Contour(U)
    Surface(U)
    Contour(U_ex)
    Contour(U - U_ex)

  END

2. 実行結果

(1) Grid(x, y)
問題が単純なため、計算に使用されたメッシュも没個性的なものとなっています。なお誤差の指標(RMS: 平均2乗偏差(Root Mean Square))が極めて小さな値となっている点に注意ください。

(2) Contour(U)
解析対象領域(ドメイン)上での関数 U(x, y) の等高線図は次のようになります。

(3) Surface(U)
関数 U(x, y) の曲面の形状をプロットしたものです。

(4) Contour(U_ex)
厳密解の等高線図ですが、見た目は Contour(U) と全く変わらないため省略します。

(5) Contour(U - U_ex)
これはFlexPDEの計算結果と理論曲面との差をプロットしたものです。スケールが E-8 (= 10^(-8)) という表示になっている点にご注意ください。

ここでは正方形領域を対象に計算結果の検証を行ったわけですが、境界の形状が円形であっても三角形であっても同様の操作で行えます。なお、境界上で値が指定されたとき、その条件を満たすラプラス方程式の解は一つに限られる点にご注意ください。

次へ

page_top_icon