メッシュ生成
Netgen
定常伝熱問題
|
メッシュ生成Netgen3-D finite element mesh generator有限要素法に使うメッシュジェネレーター Netgen のインストールと使い方を説明します. 目次はじめに有限要素法 (FIM: Finite Element Method) のプログラム作成で,最も面倒なのはメッシュ生成の部分です.以前は自分でメッシュ生成のプログラムも書いていましたが,しばらくプログラム作成に離れると,メッシュ生成のソースコードの修正が面倒になりました.そんな折,急ぎで有限要素法のプログラムの作成が必要となりました.「自作するかフリーのプログラム使うか?」選択に迫られました.時間は1日,フリーのプログラムを使うことに決定. ネットで調べたところ,(1) NETGEN – automatic mesh generator,(2) Triangle (A Two-Dimensional Quality Mesh Generator and Delaunay Triangulator) が良さそうです. インストールLinux私の ubuntu 14.04 には,Joachim Schöberl/ngsolve-docu の installdebian に従い Netgen と NGSolve をインストールしました.もし,Netgen のみであれば,「sudo apt-get install netgen」でインストールできます.
WindowsWindows へのインストールは,結構問題があります.私は上手くどうさせることができていません. とりあえず実行してみようTutorial on Using NGSpy にあるサンプルファイルを使い Netgen/NGSolve の実行の確認をしましょう. 解くべき問題 (ラプラス方程式)図1と式(\ref{eq:laplace})–(\ref{eq:G2})に,解くべき問題の領域及び境界条件を示します.二次元ラプラス方程式を特問題です. \begin{align} -\nabla\cdot(\varepsilon\nabla u)&=0 &&\text{on}\,\Omega \label{eq:laplace}\\ \cfrac{\partial u}{\partial\vm{n}}&=0 &&\text{on}\,\Gamma_0 \label{eq:G0}\\ u&=1 &&\text{on}\,\Gamma_1 \label{eq:G1}\\ u&=0 &&\text{on}\,\Gamma_2 \label{eq:G2} \end{align}ここで,\(u\)はポテンシャル (電圧です).内部には二つの電極があり,それぞれ 1 [V] と 0 [V] の電位が与えられています.比誘電率 (\(\varepsilon\)) が 1 と 10 と異なる領域に分かれています.計算領域の外周では,電場の法線成分がゼロという境界条件が課せられています.このような条件で,ポテンシャル \(u\) を計算せよ — というのが問題です.
メッシュ生成実行先に示したポテンシャルを有限要素法で計算します.そのためには,最初にメッシュ生成を行わたくてあなりません.ここでは,Netgen を使いメッシュを生成します.手順は,以下のとおりです.
以上で,メッシュの生成は完了です.Netgen はそのまま (停止しないで) ,次のラプラス方程式の有限要素法の計算を行います.
インプットファイル蛇足ですが,インプットファイルの文法について簡単に説明します. 001 # FILE NAME: circleplate.in2d. (Geometry for electrostatics problem.) 002 003 # keyword for 2D geometry, version 2 004 splinecurves2dv2 005 006 # a global grading factor 007 2 008 009 010 # +-------------------------------------------+ (2,2) 011 # |11 10 | 012 # | Subdomain 1 | 013 # | | 014 # | | 015 # | | 016 # | | 017 # | 4 3 2 | 018 # | --- Disk of radius | 019 # | 5( o )1 0.25 centered | 020 # | --- at o=origin | 021 # |12 6 7 8 9 | 022 # +-------------------------------------------+ (2,-0.35) 023 # | 15 +----------------+ (0.5,-0.5) | 024 # | +----------------+ (0.5,-0.6) | 025 # | 16 13 | 026 # | | 027 # | | 028 # | | 029 # |17 Subdomain 2 18 | 030 # +-------------------------------------------+ (2,-2) 031 # (-2,-2) 032 033 034 035 036 points 037 # FORMAT FOR THIS SECTION: 038 # <pn> <px> <py> -maxh=<ph> 039 # <pn> = point number 040 # <px> = x coordinate 041 # <py> = y coordinate 042 # <ph> = local mesh size 043 1 +0.25 +0.00 044 2 +0.25 +0.25 045 3 +0.00 +0.25 046 4 -0.25 +0.25 047 5 -0.25 +0.00 048 6 -0.25 -0.25 049 7 +0.00 -0.25 050 8 +0.25 -0.25 051 9 +2.00 -0.35 052 10 +2.00 +2.00 053 11 -2.00 +2.00 054 12 -2.00 -0.35 055 13 +0.50 -0.60 056 14 +0.50 -0.50 057 15 -0.50 -0.50 058 16 -0.50 -0.60 059 17 -2.00 -2.00 060 18 +2.00 -2.00 061 062 segments 063 # FORMAT FOR THIS SECTION: 064 # 065 # <ml> <mr> <nc> <p1> <p2> <p3> -bc=<en> -maxh=<eh> 066 # 067 # Curved or straight segments, either on boundary, 068 # or on material interfaces, are defined by two or more control points, using: 069 # <p1> : starting point of the segment 070 # <p2>, <p3> : if <p3> is omitted, 071 # then <p2> is endpoint of a straight segment, 072 # if <p3> is included, 073 # then <p2> is middle control point where tangents 074 # of the curved segment at <p1> and <p3> meet. 075 # <ml> : number of left material when traversing segment 076 # starting from <p1>. (Note that region outside meshing 077 # domain has material number 0.) 078 # <mr> : number of material on the right. 079 # -bc=<en> : boundary condition number on this segment. 080 # -maxh=<eh> : local mesh size near this segment. 081 # 082 # 083 # <ml> <mr> <nc> <p1> <p2> <p3> -bc=<en> -maxh=<eh> 084 # 085 0 1 3 1 2 3 -bc=1 -maxh=0.05 086 0 1 3 3 4 5 -bc=1 -maxh=0.05 087 0 1 3 5 6 7 -bc=1 -maxh=0.05 088 0 1 3 7 8 1 -bc=1 -maxh=0.05 089 1 0 2 9 10 090 1 0 2 10 11 091 1 0 2 11 12 092 1 2 2 12 9 093 0 2 2 13 14 -bc=2 -maxh=0.05 094 0 2 2 14 15 -bc=2 -maxh=0.05 095 0 2 2 15 16 -bc=2 -maxh=0.05 096 0 2 2 16 13 -bc=2 097 2 0 2 17 18 098 2 0 2 18 9 099 2 0 2 12 17 100 101 materials 102 1 upper -maxh=0.3 103 2 lower -maxh=0.3
有限要素法の計算実行
インプットファイル蛇足ですが,インプットファイルの文法について簡単に説明します. \begin{align} \int_\Omega\varepsilon\nabla U\cdot\nabla v\,\diff V+\int_{\partial \Omega}\alpha uv\,\diff s=\int_\Omega fv\,\diff V \label{eq:MWR} \end{align}001 geometry = circleplate.in2d 002 mesh = circleplate.vol.gz 003 004 fespace V -type=h1ho -order=2 -dirichlet=[1,2] 005 006 coefficient dielectric 007 1.0, 10.0 008 009 bilinearform a -fespace=V -symmetric 010 laplace dielectric 011 012 linearform f -fespace=V 013 source (0.0) 014 015 coefficient extendone 016 1.0, 0.0 017 018 gridfunction ue -fespace=V 019 020 numproc setvalues n1 -gridfunction=ue -coefficient=extendone -boundary 021 022 # see the extension 023 024 numproc bvp n2 -bilinearform=a -linearform=f -gridfunction=ue -solver=direct 025 026 numproc drawflux np2 -bilinearform=a -solution=ue -label=flux -applyd 027 028 numproc visualization npv1 -scalarfunction=ue -subdivision=2 -nolineartexture インプットファイルの各行の意味は,以下のとおりです.
二次元のメッシュ生成有限要素フラグ
ページ作成情報参考資料
更新履歴
|