next up previous contents
: 速度 : 歪み : 歪み   目次

実装

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



Hiroshi KAWAI 平成15年4月19日