板厚の格納場所を材料から断面へ移す

概要

シェル要素と2次元要素の板厚は tMaterial の物性値配列に M_THICK として置かれていたが、板厚は材料の性質ではなく 要素の幾何的性質なので、tSection へ移して M_THICK を廃止した。

格納場所が材料だったことで、板厚の異なる複数の !SECTION が同一の !MATERIAL を参照すると、後に処理された断面の 板厚で先行する断面の値が上書きされていた。上書きされた値の読み手は固有値解析の質量行列だけで、剛性行列は 断面データから板厚を正しく読むため、質量だけが誤った板厚で組まれる。板厚が2倍に化けた断面の固有振動数は 1/√2 倍になる。

節点を共有しない2枚の片持ちシェル板(板厚0.02と0.04)を1つのメッシュに置き、2つの !SECTION が同じ !MATERIAL を 参照するモデルで確認した。2枚は力学的に独立なので、正しい固有値は各板を単独で解いた固有値の合併になる。

モード 板A単独 板B単独 修正前 修正後
1 72.676 145.34 51.390 72.676
2 455.47 910.81 145.34 145.34
3 1163.8 2324.7 322.06 455.47
4 1289.5 2578.3 822.63 910.81

修正前は板Aのモードがいずれも 1/√2 倍になっており、総質量も 4.806E-10 ではなく 6.408E-10 と、板Bの板厚を 2枚分足した値になっていた。修正後は単独解の合併と一致する。同じモデルを回帰テストとして tests/analysis/eigen/section_thickness に追加した。このテストは修正前のコードでは serial/mpi/openmp/hybrid の 4モードとも失敗する。

M_THICK は読み手が無くなるので定義ごと削除したが、variables 配列の4番目は未使用のままとし、他の M_ パラメータの 番号は詰めていない。番号を詰めると variables を読み書きする全箇所の意味が変わるためである。

Close #760 (closed)

変更内容

コミット 要約
5842ef05 fistr1: store the section thickness in tSection tSection に thickness を追加し、断面ごとに格納する。sections の確保と要素定式化の既定値設定を断面ループの前へ移し、断面ループが飛ばす INTERFACE 断面には既定値 1.0 を与える
0baf599e fistr1: use the section thickness for the eigen mass matrix 質量行列が板厚を断面から読むようにする。不具合はこのコミットで解消する
9d6122d0 fistr1: remove M_THICK from the material variables 読み手の無くなった M_THICK の書き込みと定義を削除する
e1665114 tests: add an eigen case for sections sharing a material 上記の回帰テストと参照結果を追加する

Merge request reports

Loading
Loading