MPCCG法(MPCMETHOD=2)を削除する

概要

多点拘束の処理方式のうち、MPCCG法(MPCMETHOD=2)を削除した。

MPCCG法は行列を縮約せず、反復法には元の行列 K を渡したまま、行列ベクトル積のたびに T^t K T を計算する方式である。前処理は K に対して構成されるため縮約後の行列には対応せず、効きが悪い。長らくメンテナンスされておらず、tests 配下に MPCMETHOD=2 を使うテストも無い。

この方式のために、行列ベクトル積の入口には「通常の積か、拘束を適用した積か」を選ぶ分岐が必要だった。判定に使う mpcmatvec フラグを立てるのはMPCCGの経路だけなので、方式の削除にともなってフラグと、フラグが選んでいたルーチン群をまとめて削除できる。削除の対象 は、自由度別の T^t K T ルーチン5本とその振り分け、およびそれらからしか呼ばれていなかった自由度2・4・6の変換ルーチンである。消去法が使う自由度3版と可変自由度版の変換は残した。分岐が消えて転送だけになった行列ベクトル積の入口には、内部ルーチンを統合した。

MPCMETHOD=2 を指定した既存の入力ファイルは、そのまま実行できる。警告を出したうえで、反復法なら消去法、直接法ならペナルティ法という既定の手法にフォールバックする。直接法と接触を併用する経路は値域判定を独自に持つため、そちらも2をフォールバックの対象に含めた。

MPCCG以外の経路の結果は変わらない。tests 配下のMPCを使う3件(mpc_elim_iter、mpc_pena_iter、contact_slag_mpc_pena_iter)を変更前後のバイナリで実行し、反復履歴と結果ファイルがバイト単位で一致することを確認している。比較は1スレッドで行った。内積のリダクショ ン順序が実行ごとに変わると反復回数が再現しないためである。

Close #611 (closed)

変更内容

コミット 要約
242f4f20 solver: remove MPCCG MPCCG法と、それを支えていたフラグ・行列ベクトル積の経路を削除し、MPCMETHOD=2 を既定へフォールバックさせる

Merge request reports

Loading
Loading