歪みを求める 関数は、2次元と3次元について、それぞれ以下のようになる。
/* 歪みテンソル:2次元 */ void WH_SolidFemLinear2D__whT_epsilon (int nNodes, int nDofs,, double U_arrayInId[/* nNodes * nDofs */], double whT_N_epsilon_arrayInId[/* nNodes * nDofs */][2][2], double OUT__whT_epsilon[2][2]) /* 入力引数: nNodes は要素節点数 nDofs は節点自由度数 U_arrayInId はスカラーの配列(節点、自由度)で、 一般化変位 whT_N_epsilon_arrayInId はテンソルの配列(節点、自由度)で、 歪みの補間関数テンソル 出力引数: OUT__whT_epsilon はテンソルで、歪みテンソル */ { int In, Id; WH_Tensor2D__assign_whT_OUT_whT (WH_Tensor2D__whT_O, OUT__whT_epsilon); for (In = 0; In < nNodes; In++) { for (Id = 0; Id < nDofs; Id++) { double whT_tmp[2][2]; WH_Tensor2D__whT_mul_s_OUT_whT (whT_N_epsilon_arrayInId[In * nDofs + Id], U_arrayInId[In * nDofs + Id], whT_tmp); WH_Tensor2D__whT_add_whT_OUT_whT (OUT__whT_epsilon, whT_tmp, OUT__whT_epsilon); } } } /* 歪みテンソル:3次元 */ void WH_SolidFemLinear3D__whT_epsilon (int nNodes, int nDofs,, double U_arrayInId[/* nNodes * nDofs */], double whT_N_epsilon_arrayInId[/* nNodes * nDofs */][3][3], double OUT__whT_epsilon[3][3]) /* 入力引数: nNodes は要素節点数 nDofs は節点自由度数 U_arrayInId はスカラーの配列(節点、自由度)で、 一般化変位 whT_N_epsilon_arrayInId はテンソルの配列(節点、自由度)で、 歪みの補間関数テンソル 出力引数: OUT__whT_epsilon はテンソルで、歪みテンソル */ { int In, Id; WH_Tensor3D__assign_whT_OUT_whT (WH_Tensor3D__whT_O, OUT__whT_epsilon); for (In = 0; In < nNodes; In++) { for (Id = 0; Id < nDofs; Id++) { double whT_tmp[3][3]; WH_Tensor3D__whT_mul_s_OUT_whT (whT_N_epsilon_arrayInId[In * nDofs + Id], U_arrayInId[In * nDofs + Id], whT_tmp); WH_Tensor3D__whT_add_whT_OUT_whT (OUT__whT_epsilon, whT_tmp, OUT__whT_epsilon); } } }