グローバル座標系の3階テンソルをローカル座標系へ変換する関数、および、 ローカル座標系の3階テンソルをグローバル座標系へ変換する関数を、 それぞれ以下のように実装する。
/* 3階テンソルをグローバルからローカルへ */ void WH_Tensor2D__globalToLocal_whCS_whT3_OUT_whT3 (double whCS_LCS[2][2], double whT3_B[2][2][2], double OUT__whT3_bar_B[2][2][2]) /* 入力引数: whCS_LCS はローカル座標系 whT3_B はグローバル3階テンソル 出力引数: OUT__whT3_bar_Bはローカル3階テンソル */ { double whT_P[2][2]; /* 座標変換テンソル */ int i, j, k; int r, s, t; WH_Tensor2D__transformationTensor (whCS_LCS, whT_P); for (r = 0; r < 2; r++) { for (s = 0; s < 2; s++) { for (t = 0; t < 2; t++) { double tmp = 0; for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { for (k = 0; k < 2; k++) { tmp += whT_P[r][i] * whT_P[s][j] * whT_P[t][k] * whT3_B[i][j][k]; } } } OUT__whT3_bar_B[r][s][t] = tmp; } } } } /* 3階テンソルをローカルからグローバルへ */ void WH_Tensor2D__localToGlobal_whCS_whT3_OUT_whT3 (double whCS_LCS[2][2], double whT3_bar_B[2][2][2], double OUT__whT3_B[2][2][2]) /* 入力引数: whCS_LCS はローカル座標系 whT3_bar_B はローカル3階テンソル 出力引数: OUT__whT3_Bはグローバル3階テンソル */ { double whT_P[2][2]; /* 座標変換テンソル */ int i, j, k; int r, s, t; WH_Tensor2D__transformationTensor (whCS_LCS, whT_P); for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { for (k = 0; k < 2; k++) { double tmp = 0; for (r = 0; r < 2; r++) { for (s = 0; s < 2; s++) { for (t = 0; t < 2; t++) { tmp += whT_P[i][r] * whT_P[j][s] * whT_P[k][t] * whT3_bar_B[r][s][t]; } } } OUT__whT3_B[i][j][k] = tmp; } } } }