Asdfgの日記

freefemを使いこなそう

2次元TMモード 電磁波動方程式 弱形式 その1(とfreefemをはじめた経緯など)

今日は2次元の場合のTMモード電磁波方程式の弱形式について記録しておきます


\displaystyle    \int \Big( {  \frac{1}{n^2}\nabla v \cdot \nabla H_z } \Big) d\Omega
                              - \int \Big( { k_0^2vH_z  } \Big) d\Omega 
                              -\int \Big( {  \frac{1}{n^2}\ v \nabla H_z \cdot {\bf n} } \Big) d\Gamma
                              =0


以下 /*  から */まではコメントなのでお急ぎの方は下へ

/**************************************************************
私がfreefemを取り組み始めたのは
2014年の春からだと思う
会社に入って3年目
ちょっとした仕事上の要件で偏微分方程式を解きたい案件に出会ったものの
物理実験系出身で昔、差分法プログラムを実習でちょっと習ったくらいなもの
ぜーんぜん扱ったことありませんでした
そこで積読していた
「有限要素法で学ぶ現象と数理 ―FreeFem++数理思考プログラミング― 」で
上手くいくんじゃね??と思い出会ったのがきっかけです
その後仕事は大成功でその年、社内で一番大きな技術大会で最年少表彰されました!!


この本は和書で唯一freefemを解説している本なので一定の価値はあるものの
優れたfreefem独習本であるとはいいがたい出来であると思う

freefemはフリーのソフトなのにすごい!
さらっと実用で使うことさえできてしまう!
みんなももっと使ったらいいし、私ももっと勉強したい!
大学でどんな講義が行われているかはわからないけども(いつもセミナー行きそびれてる。。。)
不慣れな社会人の学習環境が整っているとは言い難い状況だと思います
それの一助になればと&自分の勉強のためにブログをはじめました

なので多少冗長であっても初心者向けに計算は約さないで書くように努めます
(紙媒体から離れた利点)
ただし見やすさを考慮してまとめは初めに

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


さて改めて
今日は2次元の場合のTMモード電磁波方程式の弱形式について記録しておきます
freefemを扱う場合はまずは自分の扱いたい系の微分方程式(強形式と呼ばれる)から
弱形式と呼ばれる積分型の方程式に直す必要がある

強形式 \displaystyle  \nabla  \cdot \Big ( \frac{1}{n^2} \nabla H_z \Big )+ k_0^2 H_z= 0

座標 x:右正、y:上正、z:紙面手前正
n:屈折率、H_z:z方向の磁場、k_0:真空での波数(=2\pi/\lambda_0)\lambda_0:真空での波長

これはヘルムホルツ方程式と呼ばれるタイプの方程式で
∇と∇の間に屈折率nの逆数の二乗が入っているのが印象的な方程式である
屈折率は普通物の境目で、例えばガラスと空気とか ― 不連続で変化するのが物理的に自然な配置
ただ数学的に、そこでの微分∇ってどうなてるんだ?微分方程式として成り立ってんのか?
というようなことを数学徒は考えるようだ

この方程式の導出自体はまたほかの機会に、今日はさらっと弱形式を強形式から導きましょう

強形式 \displaystyle  \nabla  \cdot \Big ( \frac{1}{n^2} \nabla H_z \Big ) + k_0^2 H_z= 0

両辺にテスト関数vをかけて積分
(テスト関数はとりあえずはおまじないということにしておきましょうか)
\displaystyle  \int \Big( { v \nabla  \cdot \Big ( \frac{1}{n^2} \nabla H_z \Big ) + k_0^2vH_z  } \Big) d\Omega= 0
ここでd\Omegaは微小体積素、次元に合わせて体積素、面積素は変えて読む

第一項に第1スカラーのグリーンの定理(部分積分の高次元バージョン)をつかって
First scalar Green's theorem
\displaystyle   \int \Big( {  a \nabla \cdot ( u \nabla b) + u (\nabla a)\cdot (\nabla b)  } \Big) d\Gamma
                              =\int \Big( {  au \nabla b \cdot {\bf n} } \Big) d\Omega
ここでd\Gammaは微小境界要素、次元に合わせて面積素、辺素は変えて読む


\displaystyle   \int \Big( {  \frac{1}{n^2}\ v \nabla H_z \cdot {\bf n}} \Big) d\Gamma
                              -\int \Big( {  \frac{1}{n^2}\nabla v \cdot \nabla H_z } \Big) d\Omega

セットにして

\displaystyle    \int \Big( {  \frac{1}{n^2}\nabla v \cdot \nabla H_z } \Big) d\Omega
                              - \int \Big( { k_0^2vH_z  } \Big) d\Omega 
                              -\int \Big( {  \frac{1}{n^2}\ v \nabla H_z \cdot {\bf n} } \Big) d\Gamma
                              =0

境界条件積分の部分が重要で
反射壁なのか、吸収壁なのか、波源なのかで
自分で設定していくことになる

書きなれていないのか
ここまで来るのに結構時間がかかったので
今回はここまで