2014年11月23日日曜日

ScilabによるFDTDの学習(1) 1次元方向への電磁波の伝播

 Scilabを使っていますが、ソースコードを掲載することはMatlabのFile Exchangeの規約に反すると思われ、掲載を見送っています。いつかオリジナルでプログラミングした際に、ソースコードを掲載したいと思います。

以前、あるドクターから宿題があり、FDTDによる電磁波伝播のシミュレーションの勉強をしたことがあります。

その際にMatlabクローンのScilabを使って、自由空間を1次元方向に進む電磁波をシミュレーションしてみたのが、下記のグラフです。

原点(0,0,0)で時間的にSineとして振動する電場を与え、それが垂直方向に磁場を作り、またその磁場が電場を作っていきます。実際はこの波が進んでいく様子が 経時的にアニメーションのように表示されます。

え~と、電場と磁場の向き関係あっているよな・・・(汗)





FDTDの原理とその実装については、英語になりますが、UTEP(テキサス大学エル・パソ校)のサイトが役に立ちました。講義はYoutubeにも掲げられています。

PMLといった境界条件の加え方やソースとなる波の与え方など細かい点でまだまだ理解が浅いのですが、まずは全体を俯瞰するにはもってこいのサイトでした。

今回のプログラムの大元はWashington州立大学の(当時)院生と思われる方のMatlabによるサンプルコードがあり、これをScilabのコードにして動かすことができました。

上記UTEPのものはソースコードがない他、係数の取り方に工夫を加えて私のような初学者には分かりづらくなっています。

その点、下記のものはマクスウェル方程式からYee格子を使って教科書通りに展開した式を使っており、私には分かりやすく感じました。

今回は媒質のパラメータを使わずに、原点でY方向に時間的に正弦波となるような電場(Ey)が発生した場合に自由空間(1次元 X方向)を伝わる電磁波をシミュレーションしてみました。

オリジナルに対していろいろ改良を加え、Hzの様子もグラフに加えました。

原点での電場の時間変化が磁場の変化を引き起こし、それに伴ってEy成分(青)とHz成分(赤:見栄えが良いように2*377倍で振幅を拡大)がそれぞれ波として空間的にも伝播していく様子が分かると思います。

これはこれで自分でも電磁波の理解が深まったのですが、当時の先生の宿題には直接適用できないことにやりながら気がつきました。先生の問題意識は「脳波の伝播」だったので波長がとても長く、このFDTDのモデルには合わないと思われるからです。

さて、この一連の学習を通して、「学び」について思いついたことをまとめました。よろしければ。
学びにおける「教科書や問題集からの自立」 ― いわゆる 「守・破・離」
 

0 件のコメント:

コメントを投稿