4階のテンソルは、一般には4次元配列変数として実装される。 ただし、対称テンソルの場合には、2次元配列変数として実装できる。 この場合の対称とは、 について、 と とが対称で、 かつ、 と 、 と ともそれぞれ対称な場合を意味する。 ここでも、二次元対称テンソルで用いたインデックスの既約を用いる。
/* (4階)テンソル変数 whT4_C は、以下のように定義される。 外側から内側へ順に、i、j、k、lとする double whT4_C[3][3][3][3]; 4次元配列 whT4_C の配列添字 0, 1, 2 は、それぞれ x, y, z 成分を表す。 [0][0][0][0]=xxxx, [0][0][0][1]=xxxy, [0][0][0][2]=xxxz [0][0][1][0]=xxyx, [0][0][1][1]=xxyy, [0][0][1][2]=xxyz [0][0][2][0]=xxzx, [0][0][2][1]=xxzy, [0][0][2][2]=xxzz [0][1][0][0]=xyxx, [0][1][0][1]=xyxy, [0][1][0][2]=xyxz [0][1][1][0]=xyyx, [0][1][1][1]=xyyy, [0][1][1][2]=xyyz [0][1][2][0]=xyzx, [0][1][2][1]=xyzy, [0][1][2][2]=xyzz [0][2][0][0]=xzxx, [0][2][0][1]=xzxy, [0][2][0][2]=xzxz [0][2][1][0]=xzyx, [0][2][1][1]=xzyy, [0][2][1][2]=xzyz [0][2][2][0]=xzzx, [0][2][2][1]=xzzy, [0][2][2][2]=xzzz [1][0][0][0]=yxxx, [1][0][0][1]=yxxy, [1][0][0][2]=yxxz [1][0][1][0]=yxyx, [1][0][1][1]=yxyy, [1][0][1][2]=yxyz [1][0][2][0]=yxzx, [1][0][2][1]=yxzy, [1][0][2][2]=yxzz [1][1][0][0]=yyxx, [1][1][0][1]=yyxy, [1][1][0][2]=yyxz [1][1][1][0]=yyyx, [1][1][1][1]=yyyy, [1][1][1][2]=yyyz [1][1][2][0]=yyzx, [1][1][2][1]=yyzy, [1][1][2][2]=yyzz [1][2][0][0]=yzxx, [1][2][0][1]=yzxy, [1][2][0][2]=yzxz [1][2][1][0]=yzyx, [1][2][1][1]=yzyy, [1][2][1][2]=yzyz [1][2][2][0]=yzzx, [1][2][2][1]=yzzy, [1][2][2][2]=yzzz [2][0][0][0]=zxxx, [2][0][0][1]=zxxy, [2][0][0][2]=zxxz [2][0][1][0]=zxyx, [2][0][1][1]=zxyy, [2][0][1][2]=zxyz [2][0][2][0]=zxzx, [2][0][2][1]=zxzy, [2][0][2][2]=zxzz [2][1][0][0]=zyxx, [2][1][0][1]=zyxy, [2][1][0][2]=zyxz [2][1][1][0]=zyyx, [2][1][1][1]=zyyy, [2][1][1][2]=zyyz [2][1][2][0]=zyzx, [2][1][2][1]=zyzy, [2][1][2][2]=zyzz [2][2][0][0]=zzxx, [2][2][0][1]=zzxy, [2][2][0][2]=zzxz [2][2][1][0]=zzyx, [2][2][1][1]=zzyy, [2][2][1][2]=zzyz [2][2][2][0]=zzzx, [2][2][2][1]=zzzy, [2][2][2][2]=zzzz */ /* 対称の(4階)テンソル変数 whST4_D は、以下のように定義される。 外側から内側へ順に、ij、klとする double whST4_D[6][6]; 2次元配列 whST4_D の配列添字 0, 1, 2, 3, 4, 5 は、 それぞれ xx, yy, zz, xy, yz, zx 成分を表す。 [0][0]=xx xx, [0][1]=xx yy, [0][2]=xx zz, [0][3]=xx xy, [0][4]=xx yz, [0][5]=xx zx [1][0]=yy xx, [1][1]=yy yy, [1][2]=yy zz, [1][3]=yy xy, [1][4]=yy yz, [1][5]=yy zx [2][0]=zz xx, [2][1]=zz yy, [2][2]=zz zz, [2][3]=zz xy, [2][4]=zz yz, [2][5]=zz zx [3][0]=xy xx, [3][1]=xy yy, [3][2]=xy zz, [3][3]=xy xy, [3][4]=xy yz, [3][5]=xy zx [4][0]=yz xx, [4][1]=yz yy, [4][2]=yz zz, [4][3]=yz xy, [4][4]=yz yz, [4][5]=yz zx [5][0]=zx xx, [5][1]=zx yy, [5][2]=zx zz, [5][3]=zx xy, [5][4]=zx yz, [5][5]=zx zx */
また、4階テンソルと対称4階テンソルとの変換を 関数として以下のように実装する。
/* 4階テンソルから対称4階テンソルへ変換する */ void WH_Tensor3D__convert_whT4_OUT_whST4 (double whT4_X[3][3][3][3], double OUT__whST4_Y[6][6]) /* 入力引数: whT4_X は4階テンソルで、これは対称テンソルでなければならない 出力引数: OUT__whST4_Yは対称4階テンソル */ { int ij, kl; for (ij = 0; ij < 6; ij++) { for (kl = 0; kl < 6; kl++) { OUT__whST4_Y[ij][kl] = whT4_X[WH_Tensor3D__I[ij]][WH_Tensor3D__J[ij]] [WH_Tensor3D__I[kl]][WH_Tensor3D__J[kl]]; } } } /* 対称4階テンソルから4階テンソルへ変換する */ void WH_Tensor3D__convert_whST4_OUT_whT4 (double whST4_X[6][6], double OUT__whT4_Y[3][3][3][3]) /* 入力引数: whST4_X は対称4階テンソル 出力引数: OUT__whT4_Yは4階テンソル */ { int i, j, k, l; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { for (k = 0; k < 3; k++) { for (l = 0; l < 3; l++) { OUT__whT4_Y[i][j][k][l] = whST4_X[WH_Tensor3D__IJ[i][j]] [WH_Tensor3D__IJ[k][l]]; } } } } }