flag=1 で c_hat の結合(オフ対角)成分の副対称性が欠落

Bug #2 (closed)-2 — flag=1 で c_hat の結合(オフ対角)成分の副対称性が欠落

対象バージョン: FrontISTR 5.9 — commit 6d3a1684 (2026-05-19) 修正コミット: ce5ba6de(ブランチ debug/bug2-c-hat-symmetry、Bug #2 (closed)-1 fdf8efbe に続く)


1. 位置づけ(Bug #2 (closed)-1 との関係)

Bug #2 (closed)-1(fdf8efbe)は flag=1 ブランチで構成テンソル c_hat の副対称性が欠落する問題を、 変換ループ直後に副対称 9 成分を明示代入することで補完した。ただしその補完は 純せん断の対角成分(G12 / G23 / G31、すなわち c_hat(1,2,1,2) c_hat(2,3,2,3) c_hat(3,1,3,1) とその入れ替え)に限られていた。

D_hat には対角のせん断成分のほかに結合(オフ対角)成分がある。直交異方性でも 繊維角 angle ≠ 0 の場合、構成行列の回転によって法線–せん断の連成項(せん断–伸び結合)が 生じ、これらオフ対角成分が非ゼロになる。Bug #2 (closed)-1 の対角限定の補完ではこの結合成分の 副対称性が補完されず、依然として対称性が崩れる。


2. 原因

fistr1/src/lib/physics/ElasticLinear.f90、flag=1 ブランチの D_hat(5×5) → c_hat 変換ループ。 Bug #2 (closed)-1 はループ外で対角せん断成分のみ補完していた。結合成分を含む全成分に対して 副対称性を保証するには、ループ内で各 (is, js) 成分を代入する際に 4 つの副対称 置換すべてに同じ値を設定する必要がある。

c(i,j,k,l) = c(j,i,k,l) = c(i,j,l,k) = c(j,i,l,k)

繊維角 0°(軸整列直交異方性)では結合成分が 0 のため Bug #2 (closed)-1 の補完で足りるが、 θ≠0 では結合成分が非ゼロになり不足する。


3. 修正

ElasticLinear.f90 の変換ループ本体で、各 D_hat 成分を 4 つの副対称インデックスへ 同時に代入する(Bug #2 (closed)-1 のループ外 9 行補完は本修正に置き換え)。

           c_hat(ii, ij, ik, il) = D_hat(is, js)
+          c_hat(ij, ii, ik, il) = D_hat(is, js)   ! i↔j
+          c_hat(ii, ij, il, ik) = D_hat(is, js)   ! k↔l
+          c_hat(ij, ii, il, ik) = D_hat(is, js)   ! both

4. 検証の考え方(0 固有値の出現)

副対称性を欠いた c_hat は θ≠0 で剛性 K を欠陥化し、拘束された片持ち梁に本来現れない 零エネルギーモード(λ=0, 0 Hz)が生じる。正しい c_hat なら現れない。これを修正前後で比較する。

angle はラジアン入力:本バイナリ(fdf8efbe/ce5ba6de)は Bug#3(度→ラジアン変換)未修正の ため angle はラジアン解釈。+45°=+0.785398 rad、−45°=−0.785398 rad を入力。


5. テストモデル・ケース構成

強異方性素材を ±45° で配置した片持ち梁(MITC3 デローニ不規則格子)。x=0 端全 DOF 拘束、 5 モードの固有値解析(!SOLUTION, TYPE=EIGEN)。

物性(flag=1, !ITEM=1, SUBITEM=9): E1=140000, E2=10000, ν12=0.3, G12=G23=G31=5000 MPa, ρ=1.6E-9 t/mm³。要素 731 / 165 節点・268 要素 / 板厚 10mm。

シナリオ angle 入力 物理繊維角
case_p45(01_before / 03_after) +0.785398 rad +45°
case_m45(02_before / 04_after) −0.785398 rad −45°

フラット構成(before=01,02 / after=03,04)。before=fdf8efbe(②適用前)、after=ce5ba6de(②適用後)。 各ケースは入力一式(Job_1.msh / Job_1.cnt / hecmw_ctrl.dat)と run.log / FSTR.msg / 結果 Job_1.res.0.* を含む。


6. 検証結果

固有値 λ と振動数(5 モード)。before=fdf8efbe、after=ce5ba6de。TOTAL MASS=8.0000E-04。

−45°(case_m45)— 0 固有値の出現

実行 mode1 mode2 mode3 mode4 mode5
02_case_m45_before 12.216 0.000(λ=0, 残差15.7=非収束の零モード) 362.30 364.74 528.72
04_case_m45_after 29.561 172.82 258.49 274.38 520.00

修正前は λ=0 の零エネルギーモードが出現(残差も収束しない)。修正後は全モード正値で零モード消失 ✅。 拘束された片持ち梁に零エネルギーモードは本来現れないため、これは c_hat の副対称性が崩れている兆候と読める。

+45°(case_p45)— 値は変わるが零モードは出ない

実行 mode1 mode2 mode3 mode4 mode5
01_case_p45_before 30.244 204.66 245.29 289.02 516.50
03_case_p45_after 24.227 175.63 206.73 270.59 455.87

欠落していた結合項は sin2θ に odd(符号が方位で反転)。−45° 対角では零モードを生み、 +45° 対角では正定値を保ったまま誤値、と方位で症状が異なる。

01_case_p45_before.7z

04_case_m45_after.7z

03_case_p45_after.7z

02_case_m45_before.7z

0002-fix-c_hat-minor-symmetry-Bug-2.patch