798 {
800
801 if (
dAta.
tEts.find(getNumeredEntFiniteElementPtr()->getEnt()) ==
804 }
805
806
807 if (row_type != MBVERTEX)
809
811 if (nb_dofs == 0)
813
814 {
815
828 for (
int dd = 0;
dd < 3;
dd++) {
831 }
832
834 int nb_gauss_pts = row_data.
getN().size1();
838
839 int nb_active_vars = 0;
840 for (int gg = 0; gg < nb_gauss_pts; gg++) {
841
842 if (gg == 0) {
843
845
846 for (int nn1 = 0; nn1 < 3; nn1++) {
849 nb_active_vars++;
850 }
851 for (int nn1 = 0; nn1 < 3; nn1++) {
854 [gg][nn1];
855 nb_active_vars++;
856 }
858 .size() > 0) {
859 for (int nn1 = 0; nn1 < 3; nn1++) {
860 for (int nn2 = 0; nn2 < 3; nn2++) {
863 nn1, nn2);
865 if (nn1 == nn2) {
867 }
868 }
869 nb_active_vars++;
870 }
871 }
872 for (int nn1 = 0; nn1 < 3; nn1++) {
876 nb_active_vars++;
877 }
878 }
880 for (int nn1 = 0; nn1 < 3; nn1++) {
881 for (int nn2 = 0; nn2 < 3; nn2++) {
884 nn2);
885 nb_active_vars++;
886 }
887 }
888 }
890
894
899 auto t_dot_u =
901 auto t_dot_w =
903 auto t_dot_W =
906 auto t_a_res =
908
912 t_F(
i,
j) = t_h(
i,
k) * t_invH(
k,
j);
913 } else {
914 t_F(
i,
j) = t_h(
i,
j);
915 }
916
917 t_dot_u(
i) = t_dot_w(
i) + t_F(
i,
j) * t_dot_W(
j);
918 t_a_res(
i) = t_v(
i) - t_dot_u(
i);
920
921
923 res.resize(3);
924 for (int rr = 0; rr < 3; rr++) {
925 a_res[rr] >>= res[rr];
926 }
927 trace_off();
928 }
929
930 active.resize(nb_active_vars);
931 int aa = 0;
932 for (int nn1 = 0; nn1 < 3; nn1++) {
935 }
936 for (int nn1 = 0; nn1 < 3; nn1++) {
940 }
942 0) {
943 for (int nn1 = 0; nn1 < 3; nn1++) {
944 for (int nn2 = 0; nn2 < 3; nn2++) {
948 nn1, nn2) +
949 1;
950 } else {
953 nn1, nn2);
954 }
955 }
956 }
957 for (int nn1 = 0; nn1 < 3; nn1++) {
961 }
962 }
964 for (int nn1 = 0; nn1 < 3; nn1++) {
965 for (int nn2 = 0; nn2 < 3; nn2++) {
968 nn2);
969 }
970 }
971 }
972
975 if (gg > 0) {
976 res.resize(3);
978 r = ::function(
tAg, 3, nb_active_vars, &
active[0], &res[0]);
979 if (r != 3) {
981 "ADOL-C function evaluation with error");
982 }
983 }
984 double val = getVolume() * getGaussPts()(3, gg);
985 res *= val;
986 } else {
989 for (int nn1 = 0; nn1 < 3; nn1++) {
991 }
993 r = jacobian(
tAg, 3, nb_active_vars, &
active[0],
995 if (r != 3) {
997 "ADOL-C function evaluation with error");
998 }
999 double val = getVolume() * getGaussPts()(3, gg);
1001
1002 }
1003 }
1004 }
1006}
#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.