解くべき方程式
1次元のSchrödinger方程式
Hψ=Eψ, H=p2/2m + V(x)を考えて、取りあえずV(x)は矩形の井戸型ポテンシャルとしましょう。 これだけなら指数関数と三角関数の接続さえ考えてやればよく、別に数値計算に 走る必要はないんですが、その後の展開があるかもしれないということで、 有限要素法で解いてみましょう。
井戸の深さはGaAs/AlGaAs系として300mV、井戸の幅は10nmにしますが、 計算そのものは無次元化(規格化というべきか?)した後にします。中身を見ると 分かるように、長さは有効Bohr半径、エネルギーは有効Rydberg定数を単位に していますが、これで全ての物理量が1のオーダーになり結果の理解がしやすく、 計算時の丸め誤差などを無駄に出さずに済みます。
境界条件は、系全体の大きさは30nmで、その両端では波動関数がゼロ (Dirichlet条件)としています。30nmという値に特に根拠はありません。
有限要素法数値解法としては、ルンゲ=クッタ法や差分法などの方法が良く知られていると 思います。これらの方法を用いた計算を解説した本は少なくありませんし、 私自身、学生時代はそういった本を参考に計算をして卒論を書きました。
それに対して、有限要素法を使って解くという解説は比較的少ないのでは ないかと思います(根拠は無いので断言はしません)。少なくとも、自分が 卒論を書こうとしたときには、「学術誌には量子力学を対象とした有限要素法 の論文があるけれど、市販の書籍にはないようだし、手を出せるような代物 ではないのかな」と思った記憶があります(今手元の小柴先生の本を見ると、 その時すでに出版されていたようですが、当時の私は全く知りませんでしたし、 知っていたとしても追い切れなかったでしょう)。
要素には最も単純な1次線要素を使用しており、大雑把な計算の流れは
有限要素法そのものについては、下記に挙げたような参考文献を読むか、 Internet College of FEMのような 優れたサイトがありますので、そちらをご覧になって下さい。取り扱う対象が 違っていても、考え方は同じです。
"Recipes"について
プログラムを見て分かる通り、参考文献に挙げた"Numerical Recipes in C"掲載
のプログラムに極めて依存した作りになっています(^^;
しかしながら、著作権の問題があると思いますので、"Recipes"掲載の
プログラムは削除してあります。本を購入するか
http://www.nr.com/からPDF版を
ダウンロードして手で打ち込むか、技術評論社からディスクを購入するか
して、ここにあるプログラムの最後に追加してください。ここでは"Recipes"
掲載のプログラムを、全てfloatをdoubleに置換して使っていますので、
matrix -> dmatrixのような変更も必要になります。その辺りはコンパイル
してみれば分かるということで(笑)
ファイル
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"をCに移植した"Numerical Recipes in C"の邦訳です。 本家はこちらで、今はC++やFortran90版も あるようです。C++版は現在書籍だけのようですが、それ以外は上記サイトで PDF版を入手できます。この本に載っているプログラムの入手は、書籍/PDF版 を読んでひたすら打ち込むか、ディスクを購入することになると思います。 この本には、修論で多変数関数の最適化問題を扱う必要があった時にお世話に なりました。「時代遅れ」という評価もあるようですが、私のような入門レベル の人間には十分難しいです。
Jianming Jin, "The Finite Element Method in Electormagnetics(2nd ed.)" (WILEY)
小柴先生のセミナーで「さらに有限要素法の勉強をする場合、英語が苦にならな ければこれを推薦する」と紹介されていた本です。苦にならない訳ではありませ んが、英語の勉強にもなると自分に言い聞かせて購入しました。電磁気学に Green関数が出てきたり、一般化固有値問題の処理の仕方が書かれていたりと、 有限要素法周辺の内容も充実している感じです。