ToDo:
誤差付きOpticsをINTRA EMITすると BINTが NaNを出して まともに動かない件を昨日から真面目に調べていて分かったこと
というわけで、呼出側(tintrb)での前後関係を洗ってゆくと、NaNが発生する 前の計算で、3x3行列の固有値がおかしいことが発覚。 周辺のコードから、固有値は正定値であることが期待されているのに、 零や負の値が帰ってきている。
固有値分解関数eigs33()へ与えている行列と帰ってきた固有値を 正常時と異常時で比較してゆくと、一番小さい固有値が失われているのが 直接の原因と判明。
内部の2x2部分行列の固有値分解で桁落ちしている部分を修正したら、 多少マシになったが、完治していない。
多分、対角化操作で行列を回転する際に桁落ち or 情報落ちしているものと 思われる。対処法としては、
3x3行列なので、(1)はあまり余地は無いかもしれない。 (2)は、Fortran標準では実装必須にはなっていないので、 動作がコンパイラ依存になるのが難。 (3)は、実装が面倒くさいのが難。C++とかだと class化すれば 表面上のコードは綺麗にかけるけど、FortranからC++を呼び出すのは 木に竹を継ぐような話だから避けたい所である。
ECCが役立ってる! まだ動いてるけど、メンテナンスが必要だよね... テスト中の新鯖筐体を前倒しで投入か?
MCE 0 CPU 0 4 northbridge TSC 369bda1dc841b [at 3214 Mhz 3 days 11:1:15 uptime (unreliable)] ADDR c9a23a50 Northbridge RAM Chipkill ECC error Chipkill ECC syndrome = 8 bit46 = corrected ecc error bit62 = error overflow (multiple errors) bus error 'local node response, request didn't time out generic read mem transaction memory access, level generic' STATUS d404400000080a13 MCGSTATUS 0 MCGCAP 106 APICID 0 SOCKETID 0 CPUID Vendor AMD Family 16 Model 10 MCE 1 CPU 0 4 northbridge TSC 4affe0da89b2e [at 3214 Mhz 4 days 18:1:14 uptime (unreliable)] ADDR 1d8587c30 Northbridge RAM Chipkill ECC error Chipkill ECC syndrome = 8 bit46 = corrected ecc error bit62 = error overflow (multiple errors) bus error 'local node origin, request didn't time out generic read mem transaction memory access, level generic' STATUS d404400000080813 MCGSTATUS 0 MCGCAP 106 APICID 0 SOCKETID 0 CPUID Vendor AMD Family 16 Model 10
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記