1299 {
1301
1306
1307 int nb_integration_pts = row_data.
getN().size1();
1308 int row_nb_dofs = row_data.
getIndices().size();
1309 int col_nb_dofs = col_data.
getIndices().size();
1310
1314
1315 &
m(r + 0,
c + 0), &
m(r + 0,
c + 1), &
m(r + 0,
c + 2), &
m(r + 0,
c + 3),
1316 &
m(r + 0,
c + 4), &
m(r + 0,
c + 5),
1317
1318 &
m(r + 1,
c + 0), &
m(r + 1,
c + 1), &
m(r + 1,
c + 2), &
m(r + 1,
c + 3),
1319 &
m(r + 1,
c + 4), &
m(r + 1,
c + 5),
1320
1321 &
m(r + 2,
c + 0), &
m(r + 2,
c + 1), &
m(r + 2,
c + 2), &
m(r + 2,
c + 3),
1322 &
m(r + 2,
c + 4), &
m(r + 2,
c + 5),
1323
1324 &
m(r + 3,
c + 0), &
m(r + 3,
c + 1), &
m(r + 3,
c + 2), &
m(r + 3,
c + 3),
1325 &
m(r + 3,
c + 4), &
m(r + 3,
c + 5),
1326
1327 &
m(r + 4,
c + 0), &
m(r + 4,
c + 1), &
m(r + 4,
c + 2), &
m(r + 4,
c + 3),
1328 &
m(r + 4,
c + 4), &
m(r + 4,
c + 5),
1329
1330 &
m(r + 5,
c + 0), &
m(r + 5,
c + 1), &
m(r + 5,
c + 2), &
m(r + 5,
c + 3),
1331 &
m(r + 5,
c + 4), &
m(r + 5,
c + 5)
1332
1333 );
1334 };
1341
1345
1346 auto v = getVolume();
1347 auto t_w = getFTensor0IntegrationWeight();
1348
1349 auto t_approx_P_adjont_dstretch =
1350 getFTensor2FromMat<3, 3>(
dataAtPts->adjontPdstretchAtPts);
1351 auto t_dot_log_u =
1352 getFTensor2SymmetricFromMat<3>(
dataAtPts->logStretchDotTensorAtPts);
1353 auto t_u = getFTensor2SymmetricFromMat<3>(
dataAtPts->stretchTensorAtPts);
1354 auto t_diff_u =
1355 getFTensor4DdgFromMat<3, 3, 1>(
dataAtPts->diffStretchTensorAtPts);
1356 auto t_eigen_vals = getFTensor1FromMat<3>(
dataAtPts->eigenVals);
1357 auto t_eigen_vecs = getFTensor2FromMat<3, 3>(
dataAtPts->eigenVecs);
1359
1360 int row_nb_base_functions = row_data.
getN().size2();
1362
1363 auto t_D = getFTensor4DdgFromMat<3, 3, 0>(
dataAtPts->matD);
1364
1365 const double ts_a = getTSa();
1366 for (int gg = 0; gg != nb_integration_pts; ++gg) {
1368
1370
1372
1373
1375 t_sym(
i,
j) = (t_approx_P_adjont_dstretch(
i,
j) ||
1376 t_approx_P_adjont_dstretch(
j,
i));
1383 ((t_diff2_uP2(
i,
j,
k,
l) + t_diff2_uP2(
k,
l,
i,
j)) * t_L(
k,
l,
J)) /
1384 2.;
1385 } else {
1387 }
1388
1389 t_dP(
L,
J) -= (1 +
alphaU * ts_a) *
1391 ((t_D(
i,
j,
m,
n) * t_diff(
m,
n,
k,
l)) * t_L(
k,
l,
J)));
1392
1393 int rr = 0;
1394 for (; rr != row_nb_dofs / 6; ++rr) {
1396 auto t_m = get_ftensor2(
K, 6 * rr, 0);
1397 for (int cc = 0; cc != col_nb_dofs / 6; ++cc) {
1398 const double b =
a * t_row_base_fun * t_col_base_fun;
1399 t_m(
L,
J) +=
b * t_dP(
L,
J);
1400 ++t_m;
1401 ++t_col_base_fun;
1402 }
1403 ++t_row_base_fun;
1404 }
1405
1406 for (; rr != row_nb_base_functions; ++rr) {
1407 ++t_row_base_fun;
1408 }
1409
1410 ++t_w;
1411 ++t_approx_P_adjont_dstretch;
1412 ++t_dot_log_u;
1413 ++t_u;
1414 ++t_diff_u;
1415 ++t_eigen_vals;
1416 ++t_eigen_vecs;
1417 }
1419}
FTensor::Index< 'n', SPACE_DIM > n
FTensor::Index< 'm', SPACE_DIM > m
FTensor::Index< 'i', SPACE_DIM > i
const double c
speed of light (cm/ns)
const double v
phase velocity of light in medium (cm/ns)
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
FTensor::Ddg< double, 3, 3 > getDiffDiffMat(Val< double, 3 > &t_val, Vec< double, 3 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2< double, 3, 3 > &t_S, const int nb)
static constexpr auto size_symm
static boost::function< double(const double)> dd_f
static enum StretchSelector stretchSelector
static boost::function< double(const double)> d_f
static boost::function< double(const double)> f
MatrixDouble K
local tangent matrix
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
const VectorInt & getIndices() const
Get global indices of dofs on entity.