表面の面積を求める 関数は以下のようになる。
/* 表面の面積 */ void WH_Fem__Simplex3D__S (double whV_x0[3], double whV_x1[3], double whV_x2[3], double whV_x3[3], int Iface, double *OUT__S) /* 入力引数: whV_x0, whV_x1, whV_x2, whV_x3 はベクトルで、各頂点の位置 Iface は0から3までの整数で、稜線ID 出力引数: OUT__S はスカラーで、表面の面積 */ { double whV_tmp0[3]; double whV_tmp1[3]; double whV_tmp2[3]; switch (Iface) { case 0: WH_Tensor3D__whV_sub_whV_OUT_whV (whV_x1, whV_x2, whV_tmp0); WH_Tensor3D__whV_sub_whV_OUT_whV (whV_x2, whV_x3, whV_tmp1); break; case 1: WH_Tensor3D__whV_sub_whV_OUT_whV (whV_x0, whV_x3, whV_tmp0); WH_Tensor3D__whV_sub_whV_OUT_whV (whV_x3, whV_x2, whV_tmp1); break; case 2: WH_Tensor3D__whV_sub_whV_OUT_whV (whV_x0, whV_x1, whV_tmp0); WH_Tensor3D__whV_sub_whV_OUT_whV (whV_x1, whV_x3, whV_tmp1); break; case 3: WH_Tensor3D__whV_sub_whV_OUT_whV (whV_x0, whV_x2, whV_tmp0); WH_Tensor3D__whV_sub_whV_OUT_whV (whV_x2, whV_x1, whV_tmp1); break; default: assert(0); break; } WH_Tensor3D__whV_times_whV_OUT_whV (whV_tmp0, whV_tmp1, whV_tmp2); WH_Tensor3D__whLen_whV_OUT_s (whV_tmp2, OUT__S); *OUT__S /= 2; }