Get second directive of matrix.
\[
LS_{klmn} =
S_{ij} \frac{\partial^2 B_{ij}}{\partial A_{kl} \partial A_{mn} }
\]
1072 {
1073
1074 for (auto aa = 0; aa != Dim; ++aa)
1076
1077 for (auto aa = 0; aa != Dim; ++aa)
1079
1080 for (auto aa = 0; aa != Dim; ++aa)
1082
1083 for (auto aa = 0; aa != Dim; ++aa)
1084 for (auto bb = 0; bb != aa; ++bb) {
1086 aF(bb, aa) = -
aF(aa, bb);
1087 aF2(aa, bb) =
aF(aa, bb) *
aF(aa, bb);
1088 }
1089
1094
1095 for (auto aa = 0; aa != Dim; ++aa) {
1096 for (auto bb = 0; bb != Dim; ++bb) {
1097 if (aa != bb) {
1099 const auto &
M =
aM[aa];
1101 for (auto mm = 0; mm != Dim; ++mm) {
1102 for (auto nn = mm; nn != Dim; ++nn) {
1104 S(
i,
j,
k,
l) *
M(mm, nn);
1105 }
1106 }
1107 }
1108 }
1109 }
1110
1111 for (auto aa = 0; aa != Dim; ++aa) {
1112 for (auto mm = 0; mm != Dim; ++mm) {
1113 for (auto nn = mm; nn != Dim; ++nn) {
1115 }
1116 }
1117 }
1118
1119 if constexpr (NB == 3)
1120 for (auto aa = 0; aa != Dim; ++aa) {
1121 for (auto bb = 0; bb != Dim; ++bb) {
1122 if (aa != bb) {
1124 for (auto mm = 0; mm != Dim; ++mm) {
1125 for (auto nn = mm; nn != Dim; ++nn) {
1129 }
1130 }
1131 }
1132 }
1133 }
1134
1135 if constexpr (NB == 2)
1136 for (auto aa = 0; aa != Dim; ++aa) {
1137 for (auto bb = 0; bb != Dim; ++bb) {
1138 if (aa != bb) {
1140 if (aa == 1 || bb == 1)
1142 else
1144 for (auto mm = 0; mm != Dim; ++mm) {
1145 for (auto nn = mm; nn != Dim; ++nn) {
1149 }
1150 }
1151 }
1152 }
1153 }
1154
1155 if constexpr (NB == 1)
1156 for (auto aa = 0; aa != Dim; ++aa) {
1157 for (auto bb = 0; bb != Dim; ++bb) {
1158 if (aa != bb) {
1160 for (auto mm = 0; mm != Dim; ++mm) {
1161 for (auto nn = mm; nn != Dim; ++nn) {
1165 }
1166 }
1167 }
1168 }
1169 }
1170
1171 for (auto aa = 0; aa != Dim; ++aa) {
1172 for (auto mm = 0; mm != Dim; ++mm) {
1173 for (auto nn = 0; nn != Dim; ++nn) {
1174 if (nn != mm)
1176 }
1177 }
1178 }
1179
1180 if constexpr (NB == 3)
1181 for (auto aa = 0; aa != Dim; ++aa) {
1182 for (auto bb = 0; bb != Dim; ++bb) {
1183 if (aa != bb) {
1185 const auto v0 =
aF(aa, bb);
1186 for (auto cc = 0; cc != Dim; ++cc) {
1187 for (
auto dd = 0;
dd != Dim; ++
dd) {
1188 if (cc != dd) {
1189 const double v1 =
fVal(cc) *
aF(cc, dd);
1191 (v1 * v0) * S(
i,
j,
k,
l);
1192 }
1193 }
1194 }
1195 }
1196 }
1197 }
1198
1199 if constexpr (NB == 2)
1200 for (auto aa = 0; aa != Dim; ++aa) {
1201 for (auto bb = 0; bb != Dim; ++bb) {
1202 if (aa != bb)
1203 for (auto cc = 0; cc != Dim; ++cc) {
1204 for (
auto dd = 0;
dd != Dim; ++
dd)
1205 if (cc != dd) {
1206
1208
1209 if ((cc == 1 || dd == 1) && (aa == 1 || bb == 1))
1211 else if (cc != 1 && dd != 1 && aa != 1 && bb != 1) {
1212
1213 if ((aa != bb && bb != dd) && (aa != dd && bb != cc))
1215 else
1217
1218 } else if ((cc != 1 && dd != 1) && (aa == 1 || bb == 1))
1220 else if ((cc == 1 || dd == 1) && (aa != 1 && bb != 1)) {
1221
1222 if ((cc == 2 && dd == 1) || (cc == 1 && dd == 2))
1224
1226
1228
1229 ) *
1231
1232 else
1234
1235 } else
1237
1238 if (r)
1241 }
1242 }
1243 }
1244 }
1245
1246 if constexpr (NB == 1)
1247 for (auto aa = 0; aa != Dim; ++aa) {
1248 for (auto bb = 0; bb != Dim; ++bb) {
1249 if (aa != bb) {
1250 for (auto cc = 0; cc != Dim; ++cc) {
1251 for (
auto dd = 0;
dd != Dim; ++
dd) {
1252 if (cc != dd) {
1253 if ((bb != dd) && (aa !=
dd && bb != cc)) {
1254 const double r =
ddfVal(cc) / 4;
1257 }
1258 }
1259 }
1260 }
1261 }
1262 }
1263 }
1264
1265 using THIS = EigenMatrixImp<T1, T2, NB, Dim>;
1267
1268 T3 t_diff_A;
1269 GetDiffDiffMatImpl<THIS, V, T3, T>(*this, t_diff_A, t_S)
1270 .set(Number<Dim>(), Number<Dim>(), Number<Dim>(), Number<Dim>());
1271 return t_diff_A;
1272 }
const double v
phase velocity of light in medium (cm/ns)
auto get_nodiag_index(const Number< N1 > &, const Number< N2 > &, const Number< Dim > &)
const Tensor2_symmetric_Expr< const ddTensor0< T, Dim, i, j >, typename promote< T, double >::V, Dim, i, j > dd(const Tensor0< T * > &a, const Index< i, Dim > index1, const Index< j, Dim > index2, const Tensor1< int, Dim > &d_ijk, const Tensor1< double, Dim > &d_xyz)
FTensor::Tensor1< V, Dim > fVal
FTensor::Ddg< V, Dim, Dim > d2MType0[Dim][(Dim *(Dim+1))/2]
FTensor::Tensor2_symmetric< V, Dim > aF2
FTensor::Ddg< V, Dim, Dim > d2MType1[Dim][(Dim *(Dim+1))/2]
FTensor::Tensor1< V, Dim > ddfVal
FTensor::Ddg< V, Dim, Dim > aSM[(Dim - 1) *Dim][(Dim *(Dim+1))/2]
FTensor::Tensor2< V, Dim, Dim > aF
FTensor::Tensor1< V, Dim > dfVal