はじめに
前回から有限要素法による解析プログラムを自分で作成してみています。
前回はメッシュを作成するところまでやったので、今回はプログラムを書くにあたって重要になる材料力学上の関係式を整理します。
重要な式だけ抜き出しましたが、数式が多くて今回はコードなしです。
関係式の整理
まずは静弾性問題における要素内の関係式を整理します。
応力とひずみの関係式
要素内の任意の点に働く応力ベクトルを、ひずみベクトルをとすると以下の関係になります。
ここでは応力-ひずみマトリクス(Dマトリクス)と呼ばれ、材料特性によって決まる値です。
今回の2次元問題の場合は、2次元近似の方法の違いで以下の2種類があります。
- 平面応力(plane-stress): Z方向の応力をゼロと仮定したもので主に薄い板の解析に使用される
- 平面ひずみ(plane-strain): Z方向のひずみをゼロと仮定したものでZ方向に大きいものに使用される(棒とかトンネルとかを輪切りにして解析するイメージ)
今回は薄い板の解析を対象にしたいと思うので平面応力状態とします。その場合、応力とひずみの関係は以下のようになります。
ここではヤング率、はポアソン比です。よっては以下で求められます。
ひずみと変位の関係式
要素内の任意の点におけるひずみと変位ベクトルは以下の関係式で表すことができます。
ここでは以下と置いています。
変位ベクトルは要素内の任意の位置の変位です。
仮想仕事の原理の式
要素内で微小な変位を仮定した場合、その変異によってなされる仕事は釣り合うという関係式です。ここで要素に働く体積力(重力とか)はないとすると下記のようにあらわすことができます。
ここで、は要素の厚み、は要素に働く表面力は仮想ひずみベクトルです。
先の2式を使って式変形すると、以下の形になります。
は等価節点力といい、各節点に働く荷重をまとめたベクトルです。
要素内でdxdyの2重積分がありますが、この積分を簡単に計算するために全部の要素が同じ整った形状になるような座標変換(正規化)を行います。
形状関数の導入
具体的には以下のように、の座標系から、各要素が以下の正方形になるような座標系に変換します。
この座標系で考えることで積分が非常に簡単になります。
座標系における要素の節点の座標をまとめた節点座標ベクトルをとします。要素内の任意の点の座標ベクトルを座標系で表した場合、以下のようになります。
ここで各ノードの座標(座標系)をとすると節点座標ベクトル、形状関数は以下のようになります(4角形1次要素の場合)。
は以下になります。
先程4角形1次要素という話をしましたが、4角形1次要素というのは、4つのノードで1つの要素を表す要素です。計算が簡単ですが、曲げとかのモードには精度が低いです。
4角形2次要素もあり、これは4つのノードにそれぞれの中点4つも加えた8つのノードで表します。こちらは精度がいいのでよく使われます。
ただ、今回は簡単なので4角形1次要素で行きます。2次要素に関しては形状関数の形とか色々でまわっているので調べてみてください。
形状関数の変位への適用
先ほどは要素の座標において形状関数を用いて座標系に変更しましたが、要素内の任意の点の変位も同じ式を適用できます。
つまり、各節点の変位を用いて要素内任意の点の座標系における変位ベクトルをとした場合に、下記の式で表すことができます。
ここでは要素の各節点の変位をまとめた節点変位ベクトルであり、各ノードの変位(座標系)をとすると以下です。
このように座標と変位に同じ形状関数を用いれる要素をアイソパラメトリック要素といい、計算が非常に簡単になることからFEMではこの要素を主に使用します。
仮想仕事の原理の式に代入
それでは最初に挙げた3つの式に座標変換の式を代入してみましょう。
まずはひずみと変位の関係式です。
ここでBマトリクスと呼ばれるは以下の形になります。
はの関数で表されるため、で偏微分できません。ヤコビアンを使って以下のように変形して求めます。
次は応力とひずみの関係式です。
最後に仮想仕事の原理の式です。
二重積分の部分は座標変換したのちにガウスルジャンドル積分を用いて以下のように書き表せます。
この辺りは実際に要素剛性マトリクスを求めるときに詳しくやります。
よって、要素剛性マトリクスを用いて以下のようにあらわします。
これで各要素における力=剛性×変位の関係式を導くことができました。
最後にこれを全要素分足し合わせて以下の形になるようにします。
ここでは全節点の荷重をまとめたベクトル、は全体剛性マトリクス、は全節点の変位をまとめたベクトルです。
ここに節点の荷重や変位の境界条件を入れてについて解くことで荷重による最終的な変形量がわかるわけです。
終わりに
今回はコード書く余裕なかったですね。式変形省いて割とポイントのみ紹介したつもりでしたが、非常に数式が多くなってしまいました。
次回からはこの数式をもとに実際にコードを書いていきましょう!!