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