4階のテンソルは、一般には4次元配列変数として実装される。 ただし、対称テンソルの場合には、2次元配列変数として実装できる。 この場合の対称とは、 について、 と とが対称で、 かつ、 と 、 と ともそれぞれ対称な場合を意味する。 ここでも、二次元対称テンソルで用いたインデックスの既約を用いる。
/* (4階)テンソル変数 whT4_C は、以下のように定義される。 外側から内側へ順に、i、j、k、lとする double whT4_C[2][2][2][2]; 4次元配列 whT4_C の配列添字 0, 1 は、それぞれ x, y 成分を表す。 [0][0][0][0]=xxxx, [0][0][0][1]=xxxy [0][0][1][0]=xxyx, [0][0][1][1]=xxyy [0][1][0][0]=xyxx, [0][1][0][1]=xyxy [0][1][1][0]=xyyx, [0][1][1][1]=xyyy [1][0][0][0]=yxxx, [1][0][0][1]=yxxy [1][0][1][0]=yxyx, [1][0][1][1]=yxyy [1][1][0][0]=yyxx, [1][1][0][1]=yyxy [1][1][1][0]=yyyx, [1][1][1][1]=yyyy */ /* 対称の(4階)テンソル変数 whST4_D は、以下のように定義される。 外側から内側へ順に、ij、klとする double whST4_D[3][3]; 2次元配列 whST4_D の配列添字 0, 1, 2 は、 それぞれ xx, yy, xy 成分を表す。 [0][0]=xx xx, [0][1]=xx yy, [0][2]=xx xy [1][0]=yy xx, [1][1]=yy yy, [1][2]=yy xy [2][0]=xy xx, [2][1]=xy yy, [2][2]=xy xy */
また、4階テンソルと対称4階テンソルとの変換を 関数として以下のように実装する。
/* 4階テンソルから対称4階テンソルへ変換する */ void WH_Tensor2D__convert_whT4_OUT_whST4 (double whT4_X[2][2][2][2], double OUT__whST4_Y[3][3]) /* 入力引数: whT4_X は4階テンソルで、これは対称テンソルでなければならない 出力引数: OUT__whST4_Yは対称4階テンソル */ { int ij, kl; for (ij = 0; ij < 3; ij++) { for (kl = 0; kl < 3; kl++) { OUT__whST4_Y[ij][kl] = whT4_X[WH_Tensor2D__I[ij]][WH_Tensor2D__J[ij]] [WH_Tensor2D__I[kl]][WH_Tensor2D__J[kl]]; } } } /* 対称4階テンソルから4階テンソルへ変換する */ void WH_Tensor2D__convert_whST4_OUT_whT4 (double whST4_X[3][3], double OUT__whT4_Y[2][2][2][2]) /* 入力引数: whST4_X は対称4階テンソル 出力引数: OUT__whT4_Yは4階テンソル */ { int i, j, k, l; for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { for (k = 0; k < 2; k++) { for (l = 0; l < 2; l++) { OUT__whT4_Y[i][j][k][l] = whST4_X[WH_Tensor2D__IJ[i][j]] [WH_Tensor2D__IJ[k][l]]; } } } } }