FEM(1) - 1D quantum well -

業務でFEMによる2次元電磁場解析をやろうとしているのですが、その前に1次元 問題を…ということで、学生時代に戻った気分で量子井戸問題を。今のところは 単なる矩形量子井戸ですが、そのうちもう少し面白い内容にしたいと考えていま す。


qwell1d.jpg

解くべき方程式

1次元のSchrödinger方程式

Hψ=Eψ, H=p2/2m + V(x)
を考えて、取りあえずV(x)は矩形の井戸型ポテンシャルとしましょう。 これだけなら指数関数と三角関数の接続さえ考えてやればよく、別に数値計算に 走る必要はないんですが、その後の展開があるかもしれないということで、 有限要素法で解いてみましょう。

井戸の深さはGaAs/AlGaAs系として300mV、井戸の幅は10nmにしますが、 計算そのものは無次元化(規格化というべきか?)した後にします。中身を見ると 分かるように、長さは有効Bohr半径、エネルギーは有効Rydberg定数を単位に していますが、これで全ての物理量が1のオーダーになり結果の理解がしやすく、 計算時の丸め誤差などを無駄に出さずに済みます。

境界条件は、系全体の大きさは30nmで、その両端では波動関数がゼロ (Dirichlet条件)としています。30nmという値に特に根拠はありません。

有限要素法

数値解法としては、ルンゲ=クッタ法や差分法などの方法が良く知られていると 思います。これらの方法を用いた計算を解説した本は少なくありませんし、 私自身、学生時代はそういった本を参考に計算をして卒論を書きました。

それに対して、有限要素法を使って解くという解説は比較的少ないのでは ないかと思います(根拠は無いので断言はしません)。少なくとも、自分が 卒論を書こうとしたときには、「学術誌には量子力学を対象とした有限要素法 の論文があるけれど、市販の書籍にはないようだし、手を出せるような代物 ではないのかな」と思った記憶があります(今手元の小柴先生の本を見ると、 その時すでに出版されていたようですが、当時の私は全く知りませんでしたし、 知っていたとしても追い切れなかったでしょう)。

要素には最も単純な1次線要素を使用しており、大雑把な計算の流れは

Galerkin法による離散化(ここは手計算)

全体行列の作成

境界条件の処理

一般化固有値問題(Ax=λBx)を解く

固有値と固有ベクトルのsort

ファイルに結果を出力

という感じになっています。「一般化」固有値問題なので一捻り必要で、 実対称行列を扱う場合はCholesky分解を使って処理するのが普通らしく、 ここでもそうしています。

有限要素法そのものについては、下記に挙げたような参考文献を読むか、 Internet College of FEMのような 優れたサイトがありますので、そちらをご覧になって下さい。取り扱う対象が 違っていても、考え方は同じです。

"Recipes"について

プログラムを見て分かる通り、参考文献に挙げた"Numerical Recipes in C"掲載 のプログラムに極めて依存した作りになっています(^^;
しかしながら、著作権の問題があると思いますので、"Recipes"掲載の プログラムは削除してあります。本を購入するか http://www.nr.com/からPDF版を ダウンロードして手で打ち込むか、技術評論社からディスクを購入するか して、ここにあるプログラムの最後に追加してください。ここでは"Recipes" 掲載のプログラムを、全てfloatをdoubleに置換して使っていますので、 matrix -> dmatrixのような変更も必要になります。その辺りはコンパイル してみれば分かるということで(笑)

また、関数eigsrt内にあるif文では、不等号の向きは逆にした方がExcelなどで 処理しやすくなります(降順→昇順)。

ファイル

Linux用binary (Debian sidにてgcc-3.2.3 20030221でコンパイル)か source、必要であれば Makefileをどうぞ。同じディレクトリに"Recipes"の nrutil.hとnrutil.cを置いておくのを忘れずに。

LAPACK版

LAPACKを利用するように 書き換えたqwell1d.cppと、 Makefileを置いておきます。 配列を動的に確保するのが簡単なので、中途半端にC++にしていますが、 これで"Recipes"に依存したコードはなくなっています。

LAPACKの利用方法はgoogleで検索すればいろいろ見つかるかと…

動的に割り当てた配列の解放が"delete"になっていたので、"delete []"に修正 しました(2003.04.12)


参考文献:

小柴正則 著「光・波動のための有限要素法」(森北出版)

電磁気、圧電効果、量子井戸など、有限要素法についてかなり広範囲に 書かれていますが、その分内容が浅くなっているということもないと思います。 私はこの著者が講師だった有限要素法セミナーに参加したことがあるのですが、 分かり易い説明で、その時配布されたテキストも良かったと思っています。 具体的な計算をして覚えるという意味では、セミナーのテキストの方が良かった かも(^^;

河野健治、鬼頭勤 著「光導波路解析の基礎 ─ マクスウェル方程式と シュレディンガー方程式を解くために ─」(現代工学社)
著者の計算ノート的な雰囲気があり、具体的な計算を追い掛けるのに有用な 参考書になると思います。鬼頭さんが講師の有限要素法のセミナーに出たことが ありますが、セミナーの主旨と私の参加目的の間にズレがあり、私的には ちょっと肩透かし気味でした(^^;

丹慶勝市他 訳 「Numerical Recipes in C - C言語による数値計算のレシピ - 」(技術評論社)
"Numerical Recipes"をCに移植した"Numerical Recipes in C"の邦訳です。 本家はこちらで、今はC++やFortran90版も あるようです。C++版は現在書籍だけのようですが、それ以外は上記サイトで PDF版を入手できます。この本に載っているプログラムの入手は、書籍/PDF版 を読んでひたすら打ち込むか、ディスクを購入することになると思います。 この本には、修論で多変数関数の最適化問題を扱う必要があった時にお世話に なりました。「時代遅れ」という評価もあるようですが、私のような入門レベル の人間には十分難しいです。

Jianming Jin, "The Finite Element Method in Electormagnetics(2nd ed.)" (WILEY)

小柴先生のセミナーで「さらに有限要素法の勉強をする場合、英語が苦にならな ければこれを推薦する」と紹介されていた本です。苦にならない訳ではありませ んが、英語の勉強にもなると自分に言い聞かせて購入しました。電磁気学に Green関数が出てきたり、一般化固有値問題の処理の仕方が書かれていたりと、 有限要素法周辺の内容も充実している感じです。


(最終更新:2003.04.12)