2008年7月7日月曜日

マイナーチェンジ

とりあえず、試作品にいろいろマイナーチェンジを試みる。前の経験から、NRGで励起スペクトルを求めるにはN/N+2 trickといわれる方法を使うと、分割幅がでかくなっても連続的なスペクトルが得られるというのは分かっている。対数分割をCampoの方法でやって、それにz-trickを適応して、スペクトルをN/N+2で求めれば、そこそこ高水準とされるやり方になるんじゃないかと思って2channel system用の拡張の仕方を考えている。
そりゃ、単純に格納用の行列の数を2倍にして全く同じに作ればできるんだけど、どうするのが一番効率よく動くプログラムになるんだとか考え出すと悩みが。2channelはタダでさえ計算時間が異様にかかるので。結局同じ動作を二回繰り返す部分が増えるので、一時的な保持に使う配列は使いまわしにして、行列を引数として渡してサブルーチンを二回呼び出すのがいいのか、アホみたいだけど、作用する行列が違うだけの同じ動作をべたに書いてしまうのがいいのかとかとか。まぁ計算なんて基本動けばいいんだけど、なんとなく。見た目、賢そうなのは関数やサブルーチンに汎用性が高いものを作ってそれを何回も呼び出すタイプな気もするのだけど、呼び出しのときに、Fortranだと形状引継ぎ配列を引数として渡すと、サブルーチン内の仮変数として配列コピーが作られて、サイズがでかい配列を渡すのはメモリ使用量が上がるとか言う噂もあるしオーバーヘッドとかも聞くしどうなんだろう。たぶん専門的にやってないからよく知らないけど、一般的なルールとか、ノウハウがあるんだろうな。そもそも変数名のつけ方とかも無茶苦茶だしな。
せっかく本業で結構使うんだからその辺のことも、もうちょい詳しくなりたいなぁ。後期は演習のTAも飽きたし計算機実験の担当になろうかな。ただ問題は、計算機実験の言語がJavaなことだ。3年のときパソコンもろくに使ってないのに、「ハイじゃあJavaで一週間で課題のプログラム作ってきてね~!」とかやられて散々だった。「一生プログラミングなんてするかい!」ってそのとき凄く思った。(計算物理にプログラミングがいるなんて研究室入ってから分かった、思わぬ落とし穴だった。)それ以来なんかオブジェクト指向系には苦手イメージがあるんだな。使えりゃ便利そうなんだけど。

0 コメント: