板厚の格納場所を材料から断面へ移す
概要
シェル要素と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 | 上記の回帰テストと参照結果を追加する |