799 {
801
802 if (
dAta.
tEts.find(getNumeredEntFiniteElementPtr()->getEnt()) ==
805 }
806
807
808 if (row_type != MBVERTEX)
810
812 if (nb_dofs == 0)
814
815 {
816
829 for (
int dd = 0;
dd < 3;
dd++) {
832 }
833
835 int nb_gauss_pts = row_data.
getN().size1();
839
840 int nb_active_vars = 0;
841 for (int gg = 0; gg < nb_gauss_pts; gg++) {
842
843 if (gg == 0) {
844
846
847 for (int nn1 = 0; nn1 < 3; nn1++) {
850 nb_active_vars++;
851 }
852 for (int nn1 = 0; nn1 < 3; nn1++) {
855 [gg][nn1];
856 nb_active_vars++;
857 }
859 .size() > 0) {
860 for (int nn1 = 0; nn1 < 3; nn1++) {
861 for (int nn2 = 0; nn2 < 3; nn2++) {
864 nn1, nn2);
866 if (nn1 == nn2) {
868 }
869 }
870 nb_active_vars++;
871 }
872 }
873 for (int nn1 = 0; nn1 < 3; nn1++) {
877 nb_active_vars++;
878 }
879 }
881 for (int nn1 = 0; nn1 < 3; nn1++) {
882 for (int nn2 = 0; nn2 < 3; nn2++) {
885 nn2);
886 nb_active_vars++;
887 }
888 }
889 }
891
895
900 auto t_invH =
902 auto t_dot_u =
904 auto t_dot_w =
906 auto t_dot_W =
909 auto t_a_res =
911
915 t_F(
i,
j) = t_h(
i,
k) * t_invH(
k,
j);
916 } else {
917 t_F(
i,
j) = t_h(
i,
j);
918 }
919
920 t_dot_u(
i) = t_dot_w(
i) + t_F(
i,
j) * t_dot_W(
j);
921 t_a_res(
i) = t_v(
i) - t_dot_u(
i);
923
924
926 res.resize(3);
927 for (int rr = 0; rr < 3; rr++) {
928 a_res[rr] >>= res[rr];
929 }
930 trace_off();
931 }
932
933 active.resize(nb_active_vars);
934 int aa = 0;
935 for (int nn1 = 0; nn1 < 3; nn1++) {
938 }
939 for (int nn1 = 0; nn1 < 3; nn1++) {
943 }
945 0) {
946 for (int nn1 = 0; nn1 < 3; nn1++) {
947 for (int nn2 = 0; nn2 < 3; nn2++) {
951 nn1, nn2) +
952 1;
953 } else {
956 nn1, nn2);
957 }
958 }
959 }
960 for (int nn1 = 0; nn1 < 3; nn1++) {
964 }
965 }
967 for (int nn1 = 0; nn1 < 3; nn1++) {
968 for (int nn2 = 0; nn2 < 3; nn2++) {
971 nn2);
972 }
973 }
974 }
975
978 if (gg > 0) {
979 res.resize(3);
981 r = ::function(
tAg, 3, nb_active_vars, &
active[0], &res[0]);
982 if (r != 3) {
984 "ADOL-C function evaluation with error");
985 }
986 }
987 double val = getVolume() * getGaussPts()(3, gg);
988 res *= val;
989 } else {
992 for (int nn1 = 0; nn1 < 3; nn1++) {
994 }
996 r = jacobian(
tAg, 3, nb_active_vars, &
active[0],
998 if (r != 3) {
1000 "ADOL-C function evaluation with error");
1001 }
1002 double val = getVolume() * getGaussPts()(3, gg);
1004
1005 }
1006 }
1007 }
1009}
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
@ MOFEM_OPERATION_UNSUCCESSFUL
#define CHKERR
Inline error check.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
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)
ublas::matrix< T, ublas::row_major, ublas::bounded_array< T, N > > MatrixBoundedArray
MoFEMErrorCode invertTensor3by3(ublas::matrix< T, L, A > &jac_data, ublas::vector< T, A > &det_data, ublas::matrix< T, L, A > &inv_jac_data)
Calculate inverse of tensor rank 2 at integration points.
static auto determinantTensor3by3(T &t)
Calculate the determinant of a 3x3 matrix or a tensor of rank 2.
Range tEts
elements in block set
std::map< std::string, std::vector< VectorDouble > > dataAtGaussPts
std::vector< std::vector< double * > > jacVelRowPtr
std::vector< VectorDouble > valVel
std::vector< MatrixDouble > jacVel
std::map< std::string, std::vector< MatrixDouble > > gradAtGaussPts
VectorBoundedArray< adouble, 3 > v
VectorBoundedArray< adouble, 3 > dot_u
VectorBoundedArray< adouble, 3 > a_res
std::vector< double > active
MatrixBoundedArray< adouble, 9 > H
VectorBoundedArray< adouble, 3 > dot_w
VectorBoundedArray< adouble, 3 > dot_W
MatrixBoundedArray< adouble, 9 > h
MatrixBoundedArray< adouble, 9 > F
MatrixBoundedArray< adouble, 9 > invH
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 degrees of freedom on entity.