形状関数の勾配を体積座標で評価する関数は それぞれ以下のようになる。 これは、全節点の形状関数について一度に計算される。
/* 形状関数の勾配(体積座標で評価) */ void WH_Fem__Simplex3D4N__whP_N_whV_x_arrayIn (double whV_x0[3], double whV_x1[3], double whV_x2[3], double whV_x3[3], double L0, double L1, double L2, double L3, double OUT__whP_N_whV_x_arrayIn[4][3]) /* 入力引数: whV_x0, whV_x1, whV_x2, whV_x3 はベクトルで、各頂点の位置 L0, L1, L2, L3 はスカラーで、体積座標 出力引数: OUT__whP_N_whV_x_arrayIn はベクトルの節点配列で、 形状関数の勾配 */ { double V; double b0, b1, b2, b3; double c0, c1, c2, c3; double d0, d1, d2, d3; WH_Fem__Simplex3D__V (whV_x0, whV_x1, whV_x2, whV_x3, &V); WH_Fem__Simplex3D__bcd (whV_x0, whV_x1, whV_x2, whV_x3, V, &b0, &b1, &b2, &b3, &c0, &c1, &c2, &c3, &d0, &d1, &d2, &d3); OUT__whP_N_whV_x_arrayIn[0][0] = b0; OUT__whP_N_whV_x_arrayIn[1][0] = b1; OUT__whP_N_whV_x_arrayIn[2][0] = b2; OUT__whP_N_whV_x_arrayIn[3][0] = b3; OUT__whP_N_whV_x_arrayIn[0][1] = c0; OUT__whP_N_whV_x_arrayIn[1][1] = c1; OUT__whP_N_whV_x_arrayIn[2][1] = c2; OUT__whP_N_whV_x_arrayIn[3][1] = c3; OUT__whP_N_whV_x_arrayIn[0][2] = d0; OUT__whP_N_whV_x_arrayIn[1][2] = d1; OUT__whP_N_whV_x_arrayIn[2][2] = d2; OUT__whP_N_whV_x_arrayIn[3][2] = d3; }