Fix element activation with MODE=AMPLITUDE not following the amplitude table

Closes #824 (closed)

!ELEMENT_ACTIVATION, MODE=AMPLITUDE が !AMPLITUDE の振幅テーブルに従わない。原因は独立した3件の不具合で、いずれも修正した。

修正内容

commit 不具合 影響範囲
664cf96a fstr_ctrl_get_AMPLITUDE がデータ行ループ内で fstr_ctrl_get_data_ex に行番号の定数 1 を渡しており、n行のテーブルが「1行目 × n個」になっていた 制御ファイルで !AMPLITUDE を2行以上で定義する全機能
8d693e9d apply_amplitude_control が未初期化の amp_val を hecmw_get_amplitude_value に渡していた。同引数は intent(inout) で、既定の VALUE=RELATIVE では入力値に乗算されるため活性判定が不定になっていた MODE=AMPLITUDE
bf0b1ce5 fstr_update_elemact_solid_by_value の呼び出し3箇所がサブステップ開始時刻 ctime を渡しており、fstr_ass_load(ctime+dtime)が設定した状態を上書きして切り替えが1サブステップ遅れていた MODE=AMPLITUDE

変更は4ファイル、7行追加5行削除。仕様変更はないためドキュメントの修正はない。

確認

  • issue #824 (closed) と同じ入力で、振幅値が0.5を下回る時刻に対象要素グループが不活性化することを確認
  • ctest 全360件(serial/openmp/mpi/hybrid)PASS。修正前後で ctest -L analysis 252件の結果に差がないことも確認

補足

  • 既存の振幅テスト30件はすべてメッシュファイル側で !AMPLITUDE を定義しており、今回修正した制御ファイル側パーサを通るテストは存在しなかった。
  • 閾値ちょうどでの丸め誤差は未対応。issue の4行テーブルは時刻0.5の補間値が 0.5000000000000002 となり amp_val > 0.5 を満たすため、切り替えは次のサブステップになる。

Merge request reports

Loading
Loading