形状関数の勾配を面積座標で評価する関数は それぞれ以下のようになる。 これは、全節点の形状関数について一度に計算される。
/* 形状関数の勾配(面積座標で評価) */
void WH_Fem__Simplex2D6N__whP_N_whV_x_arrayIn
(double whV_x0[2],
double whV_x1[2],
double whV_x2[2],
double L0, double L1, double L2,
double OUT__whP_N_whV_x_arrayIn[6][2])
/*
入力引数:
whV_x0, whV_x1, whV_x2 はベクトルで、各頂点の位置
L0, L1, L2 はスカラーで、面積座標
出力引数:
OUT__whP_N_whV_x_arrayIn はベクトルの節点配列で、
形状関数の勾配
*/
{
double S;
double b0, b1, b2;
double c0, c1, c2;
WH_Fem__Simplex2D__S
(whV_x0, whV_x1, whV_x2,
&S);
WH_Fem__Simplex2D__bc
(whV_x0, whV_x1, whV_x2, S,
&b0, &b1, &b2,
&c0, &c1, &c2);
OUT__whP_N_whV_x_arrayIn[0][0]
= 4.0 * b0 * L0 - b0;
OUT__whP_N_whV_x_arrayIn[1][0]
= 4.0 * b1 * L1 - b1;
OUT__whP_N_whV_x_arrayIn[2][0]
= 4.0 * b2 * L2 - b2;
OUT__whP_N_whV_x_arrayIn[3][0]
= 4.0 * b1 * L0 + 4.0 * b0 * L1;
OUT__whP_N_whV_x_arrayIn[4][0]
= 4.0 * b2 * L1 + 4.0 * b1 * L2;
OUT__whP_N_whV_x_arrayIn[5][0]
= 4.0 * b0 * L2 + 4.0 * b2 * L0;
OUT__whP_N_whV_x_arrayIn[0][1]
= 4.0 * c0 * L0 - c0;
OUT__whP_N_whV_x_arrayIn[1][1]
= 4.0 * c1 * L1 - c1;
OUT__whP_N_whV_x_arrayIn[2][1]
= 4.0 * c2 * L2 - c2;
OUT__whP_N_whV_x_arrayIn[3][1]
= 4.0 * c1 * L0 + 4.0 * c0 * L1;
OUT__whP_N_whV_x_arrayIn[4][1]
= 4.0 * c2 * L1 + 4.0 * c1 * L2;
OUT__whP_N_whV_x_arrayIn[5][1]
= 4.0 * c0 * L2 + 4.0 * c2 * L0;
}