テンソル・ベクトル積およびベクトル・テンソル積を 関数として以下のように実装する。
/* テンソル・ベクトル積 */ void WH_Tensor3D__whT_cdot_whV_OUT_whV (double whT_X[3][3], double whV_a[3], double OUT__whV_b[3]) /* 入力引数: whT_X はテンソル whV_a はベクトル 出力引数: OUT__whV_bはベクトルで、whT_X と whV_a のテンソル・ベクトル積 */ { OUT__whV_b[0] = whT_X[0][0] * whV_a[0] + whT_X[0][1] * whV_a[1] + whT_X[0][2] * whV_a[2]; OUT__whV_b[1] = whT_X[1][0] * whV_a[0] + whT_X[1][1] * whV_a[1] + whT_X[1][2] * whV_a[2]; OUT__whV_b[2] = whT_X[2][0] * whV_a[0] + whT_X[2][1] * whV_a[1] + whT_X[2][2] * whV_a[2]; } /* ベクトル・テンソル積 */ void WH_Tensor3D__whV_cdot_whT_OUT_whV (double whV_a[3], double whT_X[3][3], double OUT__whV_b[3]) /* 入力引数: whV_a はベクトル whT_X はテンソル 出力引数: OUT__whV_bはベクトルで、whV_a と whT_X のベクトル・テンソル積 */ { OUT__whV_b[0] = whV_a[0] * whT_X[0][0] + whV_a[1] * whT_X[1][0] + whV_a[2] * whT_X[2][0]; OUT__whV_b[1] = whV_a[0] * whT_X[0][1] + whV_a[1] * whT_X[1][1] + whV_a[2] * whT_X[2][1]; OUT__whV_b[2] = whV_a[0] * whT_X[0][2] + whV_a[1] * whT_X[1][2] + whV_a[2] * whT_X[2][2]; }
また、対称テンソルの場合には、 以下のようになる。
/* 対称テンソル・ベクトル積 */ void WH_Tensor3D__whST_cdot_whV_OUT_whV (double whST_X[6], double whV_a[3], double OUT__whV_b[3]) /* 入力引数: whST_X は対称テンソル whV_a はベクトル 出力引数: OUT__whV_bはベクトルで、whST_X と whV_a のテンソル・ベクトル積 */ { OUT__whV_b[0] = whST_X[WH_TENSOR3D__ST00] * whV_a[0] + whST_X[WH_TENSOR3D__ST01] * whV_a[1] + whST_X[WH_TENSOR3D__ST02] * whV_a[2]; OUT__whV_b[1] = whST_X[WH_TENSOR3D__ST10] * whV_a[0] + whST_X[WH_TENSOR3D__ST11] * whV_a[1] + whST_X[WH_TENSOR3D__ST12] * whV_a[2]; OUT__whV_b[2] = whST_X[WH_TENSOR3D__ST20] * whV_a[0] + whST_X[WH_TENSOR3D__ST21] * whV_a[1] + whST_X[WH_TENSOR3D__ST22] * whV_a[2]; } /* ベクトル・対称テンソル積 */ void WH_Tensor3D__whV_cdot_whST_OUT_whV (double whV_a[3], double whST_X[6], double OUT__whV_b[3]) /* 入力引数: whV_a はベクトル whST_X は対称テンソル 出力引数: OUT__whV_bはベクトルで、whV_a と whST_X のベクトル・テンソル積 */ { OUT__whV_b[0] = whV_a[0] * whST_X[WH_TENSOR3D__ST00] + whV_a[1] * whST_X[WH_TENSOR3D__ST10] + whV_a[2] * whST_X[WH_TENSOR3D__ST20]; OUT__whV_b[1] = whV_a[0] * whST_X[WH_TENSOR3D__ST01] + whV_a[1] * whST_X[WH_TENSOR3D__ST11] + whV_a[2] * whST_X[WH_TENSOR3D__ST21]; OUT__whV_b[2] = whV_a[0] * whST_X[WH_TENSOR3D__ST02] + whV_a[1] * whST_X[WH_TENSOR3D__ST12] + whV_a[2] * whST_X[WH_TENSOR3D__ST22]; }