消去法の固有値解析で固有ベクトルの正規化がスレーブ自由度の成分に依存する

概要

MPCを消去法で処理する固有値解析で、固有ベクトルの正規化が破綻することがある。fstr_EIG_tridiag.f90 は最大成分を1にするために maxval(eigvec(:,j)) で割るが、絶対値を取っていない。物理成分がすべて負のモードでは、最大値はスレーブ自由度に残る正の微小成分になり、それで割ると固有ベクトル全体が 1e15 倍になる。

スレーブ成分が残るのは、Lanczos の初期ベクトルに掛ける filter が !BOUNDARY の自由度しか0にせず、縮約系ではスレーブの質量が0のため質量直交化でも取り除かれないためである。逆変換で上書きされるので結果ファイルには本来現れないが、その前の正規化には影響する。MPCを含まないモデルでは固定自由度が厳密に0で最大値が0になり、正規化が飛ばされるだけで実害はない。

再現

tests/analysis/eigen/mpc_elim/tie(issue #742 (closed) の修正で追加)の1次モードで、結果ファイルの変位が全節点で -1e15 のオーダーになり、Abs. Residual に 7E+14 が出る。固有値と有効質量は正しい。

絶対値で最大を取り、スレーブ自由度を除く(または逆変換の後に正規化する)ことで直せる。hecmw_mpc_tback_eigvec にある need normalization??? のコメントが該当箇所である。