日本語練習帳

つらみのラプソディを歌います

40分間の数値計算が無に帰しました.

40分なんて大規模量子系計算を日常的にやりつつ論文を書いている人たちからすれば大したことないタイムスケールだとは思うが,僕にとって今回のロスは由々しき事態だ.

一応述べておくと,何分,何時間,何日と無駄にしようとも「プログラムがまともに回っていて意味のある数値が吐き出されていれば,計算のモチベーションはともかく結果は無駄ではない」という考えに立っている.即ち,どういうことかというと,40分間真面目に計算するフリを続けていた.f90のプログラムが蓋を開けてみればひたすら0.000という数字を吐いていたのだ.それだけです.

計算機としては手元にあるMacBookProを使っていて,コードの構造としては.shに支配された.gpなり.awkなり.f90なりがひたすらクルクルと踊っては.datを投げて,またそれを別の役者が受け止めるような感じになっている.要は,パラメータの入力を.shが受け付け,それを.f90が引き継いでガンガン回すわけだ.そこで無効な数値を入れたりすると,.f90に渡った段階でSIGSEVなり何なりの致命的なエラーを初期段階で吐いてくれるため,基本的に「黙々と計算が回っている=計算結果も一応は非自明なものとして出てくる」という立場で物事を進めていた.しかし.f90のコードをよく見てみると,case文の選択で無効な数値を入れても何もされないというアホンダラなバグがあったため,そこで系は初期状態のconfigから何も時間発展していなかったのだ.今見ようとしているのは静的な物理ではなくて動的な物理なので,計算したい物理量も静的な量と量の間の「差」から出てくる.完全に失敗した模様.辛い.

何を言っているか分からないと思うが,数値計算で物理を見ようと思うと,長時間を投入してワーッとやる前にきちんとバグ取りをしましょうねという話.

(コード上の表面的なバグ取りなら猿でも出来るかも知れないが,自明な結果を防ぐためには,敢えて変な機構をちゃんと取り付ける必要がある.例えばcase文の分岐パラメータは,それ以外のパラメータがあった場合は事前にエラー終了を返すとか.ところで,孫請け状態の.f90が.shにエラー終了値を返すとかって出来るのだろうか…?)