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