もし、 ベクトル未知数の自由度が各軸方向の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; } }