next up previous contents
: 領域積分 : ベクトル未知数の勾配 : ベクトル未知数の勾配   目次

実装

もし、 ベクトル未知数の自由度が各軸方向の2成分により表現される場合、 補間関数勾配テンソルを計算する 関数は以下のようになる。 これは、全節点の全自由度について一度に計算される。

/* 補間関数勾配テンソル */
void WH_Fem__Isoparam3D__whT_N_x_arrayInId
(int nNodes, 
 double whP_N_whV_x_arrayIn[/* nNodes */][3],
 double OUT__whT_N_x_arrayInId[/* nNodes */][3][3][3])
/*
  入力引数:
    nNodes は整数で、要素節点数
    whP_N_whV_x_arrayIn はベクトルの節点配列で、形状関数の勾配
  出力引数:
    OUT__whT_N_x_arrayInId はスカラーの節点自由度配列で、
      補間関数勾配テンソル
*/
{
  int In;

  for (In = 0; In < nNodes; In++) {
    double whP_N_x = whP_N_whV_x_arrayIn[In][0];
    double whP_N_y = whP_N_whV_x_arrayIn[In][1];
    double whP_N_z = whP_N_whV_x_arrayIn[In][2];

    OUT__whT_N_x_arrayInId[In][0][0][0] = whP_N_x;
    OUT__whT_N_x_arrayInId[In][0][0][1] = whP_N_y;
    OUT__whT_N_x_arrayInId[In][0][0][2] = whP_N_z;
    OUT__whT_N_x_arrayInId[In][0][1][0] = 0.0;
    OUT__whT_N_x_arrayInId[In][0][1][1] = 0.0;
    OUT__whT_N_x_arrayInId[In][0][1][2] = 0.0;
    OUT__whT_N_x_arrayInId[In][0][2][0] = 0.0;
    OUT__whT_N_x_arrayInId[In][0][2][1] = 0.0;
    OUT__whT_N_x_arrayInId[In][0][2][2] = 0.0;

    OUT__whT_N_x_arrayInId[In][1][0][0] = 0.0;
    OUT__whT_N_x_arrayInId[In][1][0][1] = 0.0;
    OUT__whT_N_x_arrayInId[In][1][0][2] = 0.0;
    OUT__whT_N_x_arrayInId[In][1][1][0] = whP_N_x;
    OUT__whT_N_x_arrayInId[In][1][1][1] = whP_N_y;
    OUT__whT_N_x_arrayInId[In][1][1][2] = whP_N_z;
    OUT__whT_N_x_arrayInId[In][1][2][0] = 0.0;
    OUT__whT_N_x_arrayInId[In][1][2][1] = 0.0;
    OUT__whT_N_x_arrayInId[In][1][2][2] = 0.0;

    OUT__whT_N_x_arrayInId[In][2][0][0] = 0.0;
    OUT__whT_N_x_arrayInId[In][2][0][1] = 0.0;
    OUT__whT_N_x_arrayInId[In][2][0][2] = 0.0;
    OUT__whT_N_x_arrayInId[In][2][1][0] = 0.0;
    OUT__whT_N_x_arrayInId[In][2][1][1] = 0.0;
    OUT__whT_N_x_arrayInId[In][2][1][2] = 0.0;
    OUT__whT_N_x_arrayInId[In][2][2][0] = whP_N_x;
    OUT__whT_N_x_arrayInId[In][2][2][1] = whP_N_y;
    OUT__whT_N_x_arrayInId[In][2][2][2] = whP_N_z;
  }
}



Hiroshi KAWAI 平成15年8月11日