表面上の面積積分の変換子 を評価する 関数は以下のようになる。
/* 表面上の面積積分の変換子 */ void WH_Fem__Isoparam3D__Hexa__J_S_Iface (int Iface, double whPt_whV_x_whV_xi[3][3], double *OUT__J_S) /* 入力引数: Iface は整数で、要素面ID whPt_whV_x_whV_xi はテンソルで、Jacobian 出力引数: OUT__J_S はスカラーで、面積積分の変換子 */ { double whP_whV_x_xi[3]; double whP_whV_x_eta[3]; double whP_whV_x_zeta[3]; double whV_tmp[3]; whP_whV_x_xi[0] = whPt_whV_x_whV_xi[0][0]; whP_whV_x_xi[1] = whPt_whV_x_whV_xi[0][1]; whP_whV_x_xi[2] = whPt_whV_x_whV_xi[0][2]; whP_whV_x_eta[0] = whPt_whV_x_whV_xi[1][0]; whP_whV_x_eta[1] = whPt_whV_x_whV_xi[1][1]; whP_whV_x_eta[2] = whPt_whV_x_whV_xi[1][2]; whP_whV_x_zeta[0] = whPt_whV_x_whV_xi[2][0]; whP_whV_x_zeta[1] = whPt_whV_x_whV_xi[2][1]; whP_whV_x_zeta[2] = whPt_whV_x_whV_xi[2][2]; switch (Iface) { case 5: /* -xi */ case 3: /* +xi */ WH_Tensor3D__whV_times_whV_OUT_whV (whP_whV_x_eta, whP_whV_x_zeta, whV_tmp); break; case 2: /* -eta */ case 4: /* +eta */ WH_Tensor3D__whV_times_whV_OUT_whV (whP_whV_x_zeta, whP_whV_x_xi, whV_tmp); break; case 0: /* -zeta */ case 1: /* +zeta */ WH_Tensor3D__whV_times_whV_OUT_whV (whP_whV_x_xi, whP_whV_x_eta, whV_tmp); break; default: assert(0); break; } WH_Tensor3D__whLen_whV_OUT_s (whV_tmp, OUT__J_S); }