歪みを求める 関数は、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);
}
}
}