|
_ 勉強のため、既にC言語で作った1次元量子井戸を平面波展開で解くプログラムを、Fortranで書き直してみた。本を最初から順に読んでいくよりも、やりたいことを実装するために調べながらやる方が面白いし吸収も速いのだが、余りに予備知識がないとかえって辛いかも知れない(苦笑)。サブルーチンとの変数の引き渡しなどがよく分からず、C言語風に言うと「全てを main 関数の中に書いてしまった」状態になってしまったが、一応、それらしい動作をするものができた。
_ ただし、未解決の問題が残っている。バンド計算の真似事をするために、do ループで波数をシフトさせようとしているのだが、このループの中で zheev を呼び出すと、1回目のループだけまともな値が出力されて、2回目以降はおかしな値が得られてしまう。何かが意図せぬ形で上書きされてるのかも知れないが、Fortranの文法、LAPACKの使い方、あるいは他の箇所、いずれが間違っているのかよく分からない。配列の初期化などを全てループの中に入れても同じなので、そこは無関係のようだ…今日は煮詰まってきたのでこの辺にしておく。昨日の午後に何となくやり始めて、実質半日程度を費やしただろうか。
_ 配列のインデックスに負の数を使えると、紙と鉛筆での計算結果をそのままの形で実装出来るので、C言語と違って無駄な混乱をしなくて済むのはありがたい。そういえば、FORTRAN77だと do ループには行番号が必要だったと思うのだが、そういう点でも扱いやすくなっている。これで多重ループを一気に抜ける必要がない限り goto は使わないだろうから、コードのメンテナンスもしやすくなるのだろう。まぁ、もっと慣れてからの話だけれど。