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