797 {
799
800 if (
dAta.
tEts.find(getNumeredEntFiniteElementPtr()->getEnt()) ==
803 }
804
805
806 if (row_type != MBVERTEX)
808
810 if (nb_dofs == 0)
812
813 {
814
827 for (
int dd = 0;
dd < 3;
dd++) {
830 }
831
833 int nb_gauss_pts = row_data.
getN().size1();
837
838 int nb_active_vars = 0;
839 for (int gg = 0; gg < nb_gauss_pts; gg++) {
840
841 if (gg == 0) {
842
844
845 for (int nn1 = 0; nn1 < 3; nn1++) {
848 nb_active_vars++;
849 }
850 for (int nn1 = 0; nn1 < 3; nn1++) {
853 [gg][nn1];
854 nb_active_vars++;
855 }
857 .size() > 0) {
858 for (int nn1 = 0; nn1 < 3; nn1++) {
859 for (int nn2 = 0; nn2 < 3; nn2++) {
862 nn1, nn2);
864 if (nn1 == nn2) {
866 }
867 }
868 nb_active_vars++;
869 }
870 }
871 for (int nn1 = 0; nn1 < 3; nn1++) {
875 nb_active_vars++;
876 }
877 }
879 for (int nn1 = 0; nn1 < 3; nn1++) {
880 for (int nn2 = 0; nn2 < 3; nn2++) {
883 nn2);
884 nb_active_vars++;
885 }
886 }
887 }
889
893
898 auto t_dot_u =
900 auto t_dot_w =
902 auto t_dot_W =
905 auto t_a_res =
907
911 t_F(
i,
j) = t_h(
i,
k) * t_invH(
k,
j);
912 } else {
913 t_F(
i,
j) = t_h(
i,
j);
914 }
915
916 t_dot_u(
i) = t_dot_w(
i) + t_F(
i,
j) * t_dot_W(
j);
917 t_a_res(
i) = t_v(
i) - t_dot_u(
i);
919
920
922 res.resize(3);
923 for (int rr = 0; rr < 3; rr++) {
924 a_res[rr] >>= res[rr];
925 }
926 trace_off();
927 }
928
929 active.resize(nb_active_vars);
930 int aa = 0;
931 for (int nn1 = 0; nn1 < 3; nn1++) {
934 }
935 for (int nn1 = 0; nn1 < 3; nn1++) {
939 }
941 0) {
942 for (int nn1 = 0; nn1 < 3; nn1++) {
943 for (int nn2 = 0; nn2 < 3; nn2++) {
947 nn1, nn2) +
948 1;
949 } else {
952 nn1, nn2);
953 }
954 }
955 }
956 for (int nn1 = 0; nn1 < 3; nn1++) {
960 }
961 }
963 for (int nn1 = 0; nn1 < 3; nn1++) {
964 for (int nn2 = 0; nn2 < 3; nn2++) {
967 nn2);
968 }
969 }
970 }
971
974 if (gg > 0) {
975 res.resize(3);
977 r = ::function(
tAg, 3, nb_active_vars, &
active[0], &res[0]);
978 if (r != 3) {
980 "ADOL-C function evaluation with error");
981 }
982 }
983 double val = getVolume() * getGaussPts()(3, gg);
984 res *= val;
985 } else {
988 for (int nn1 = 0; nn1 < 3; nn1++) {
990 }
992 r = jacobian(
tAg, 3, nb_active_vars, &
active[0],
994 if (r != 3) {
996 "ADOL-C function evaluation with error");
997 }
998 double val = getVolume() * getGaussPts()(3, gg);
1000
1001 }
1002 }
1003 }
1005}
#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)
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.
auto getFTensor2FromArray3by3(ublas::matrix< T, L, A > &data, const FTensor::Number< S > &, const size_t rr, const size_t cc=0)
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 dofs on entity.