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