動解析のリスタート機能で応力がゼロになる不具合

結論から申し上げますと,実装ミスがあったのは src>analysis>dynamic>transit>fstr_dynamic_nlimplicit.f90の関数 fstr_solve_dynamic_nlimplicit(あるいはfstr_solve_dynamic_nlimplicit_contactSLag)でした.

弾塑性体の場合にはひずみ/応力更新でUpdate Lagrange法のループに入りますが, ここでgausses%strain_bakが参照されます.(src>lib>static_LIB_Fbar.f90のl.533です) これがリスタート解析の場合には(本来はリスタート直前の値であるべきなのに)0になっているようでした. 理由としては,gausses%strain_bakの値を入れ込むfstr_UpdateStateの位置が原因で, リスタートする際は最初の求解の時点でgausses%strain_bakに値が入っておらず, リスタート直後で応力更新の際の式;gausses%strain = gausses%strain_bak + dstrain が,gausses%strain = 0.0d0 + dstrainになっておりました.

これが,リスタート解析の場合に弾塑性体のみ応力/ひずみの情報が失われてしまう原因でした. (弾性体の場合はTL法なのでstrain_bakが参照されず,このような状況にならなかったというわけです)

ということで,リスタート解析の場合はfstr_solve_dynamic_nlimplicitの求解ループが始まる前に fstr_UpdateStateの処理をする記述を加えることで,このバグが改善されることが確認できました. (具体的には,l.118~のif分岐に,else call fstr_UpdateState( hecMESH, fstrSOLID, fstrDYNAMIC%t_delta )を挿入したところ,改善されました.)