562 {
564
567
569 int nb_integration_pts = data.
getN().size1();
570 auto v = getVolume();
571 auto t_w = getFTensor0IntegrationWeight();
572 auto t_approx_P_adjont_log_du =
573 getFTensor1FromMat<size_symm>(
dataAtPts->adjontPdUAtPts);
574 auto t_log_streach_h1 =
575 getFTensor2SymmetricFromMat<3>(
dataAtPts->logStretchTotalTensorAtPts);
576 auto t_dot_log_u =
577 getFTensor2SymmetricFromMat<3>(
dataAtPts->logStretchDotTensorAtPts);
578
579 auto t_D = getFTensor4DdgFromMat<3, 3, 0>(
dataAtPts->matD);
580
585 auto get_ftensor2 = [](
auto &
v) {
587 &
v[0], &
v[1], &
v[2], &
v[3], &
v[4], &
v[5]);
588 };
589
590 int nb_base_functions = data.
getN().size2();
592 for (int gg = 0; gg != nb_integration_pts; ++gg) {
594 auto t_nf = get_ftensor2(
nF);
595
598 t_D(
i,
j,
k,
l) * (t_log_streach_h1(
k,
l) +
alphaU * t_dot_log_u(
k,
l));
600 t_residual(
L) =
a * (t_approx_P_adjont_log_du(
L) - t_L(
i,
j,
L) * t_T(
i,
j));
601
602 int bb = 0;
603 for (; bb != nb_dofs / 6; ++bb) {
604 t_nf(
L) += t_row_base_fun * t_residual(
L);
605 ++t_nf;
606 ++t_row_base_fun;
607 }
608 for (; bb != nb_base_functions; ++bb)
609 ++t_row_base_fun;
610
611 ++t_w;
612 ++t_approx_P_adjont_log_du;
613 ++t_dot_log_u;
614 ++t_log_streach_h1;
615 }
617}
FTensor::Index< 'i', SPACE_DIM > i
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
VectorDouble nF
local right hand side vector
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.