hecmw_streqr を read only の述語にする

概要

名前の一致を判定する hecmw_streqr が、比較の前に hecmw_strupr を実引数に対して呼んでいたため、判定するだけで呼び出し側の hecMESH やcnt由来の名前バッファが大文字に書き換わっていた。intent(in) の仮引数を渡す呼び出し経路もあり、規格違反でもあった。比較用の大文字化を、iachar で取り出した文字コードの局所変数の上で行う形に変え、s1 と s2 を intent(in) で宣言した。判定結果は変わらない。

副作用を除くと、書き換えられていた実引数を保存している3箇所のうち fstrSOLID%materials%name だけ入る値が変わる。ここは同じフィールドを設定するもう一方の代入に合わせて hecMESH%material%mat_name から取るようにした。副作用が入れていた値と同一である。残る2箇所は、保存される値が元から大文字であるか、参照が大文字小文字を問わない比較だけであるため変更していない。

あわせて、副作用による大文字化に頼らず == で比較していた !CONTACT_INTERFERENCE の接触ペア名に fstr_strupr を適用した。!CONTACT と !EMBED が同じ関数内で既に行っているのと同じ形である。これにより、接触ペア名を小文字で書くと Inconsistence of contact_pair in CONTACTS で停止する問題が直る。

変更内容

コミット 要約
0c506eda Make hecmw_streqr a read-only predicate 比較を局所変数上の大文字化に変えて s1 と s2 を intent(in) にする。fstrSOLID%materials%name の設定元を hecMESH%material%mat_name に揃える
62e37035 Convert !CONTACT_INTERFERENCE pair name to uppercase 接触ペア名の読み込み時に fstr_strupr を適用する

Close #838 (closed)

Merge request reports

Loading
Loading