986 {
988
989 const double vol = getMeasure();
990 auto t_w = getFTensor0IntegrationWeight();
991 auto t_coords = getFTensor1CoordsAtGaussPts();
992 auto t_row_base = row_data.getFTensor0N();
993 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
994
995#ifndef NDEBUG
996 if (row_data.getDiffN().size1() != row_data.getN().size1())
998 if (row_data.getDiffN().size2() != row_data.getN().size2() *
SPACE_DIM) {
1000 << "Side " << rowSide << " " << CN::EntityTypeName(rowType);
1001 MOFEM_LOG(
"SELF", Sev::error) << row_data.getN();
1002 MOFEM_LOG(
"SELF", Sev::error) << row_data.getDiffN();
1004 }
1005
1006 if (col_data.getDiffN().size1() != col_data.getN().size1())
1008 if (col_data.getDiffN().size2() != col_data.getN().size2() *
SPACE_DIM) {
1010 << "Side " << rowSide << " " << CN::EntityTypeName(rowType);
1011 MOFEM_LOG(
"SELF", Sev::error) << col_data.getN();
1012 MOFEM_LOG(
"SELF", Sev::error) << col_data.getDiffN();
1014 }
1015#endif
1016
1018
1019 auto t_h = getFTensor0FromVec(*
hPtr);
1020 auto t_grad_g = getFTensor1FromMat<SPACE_DIM>(*
gradGPtr);
1021
1022 for (int gg = 0; gg != nbIntegrationPts; gg++) {
1023
1024 const double r = t_coords(0);
1026
1027 int rr = 0;
1028 for (; rr != nbRows; ++rr) {
1029
1030 auto t_col_base = col_data.getFTensor0N(gg, 0);
1031 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
1032
1033 for (int cc = 0; cc != nbCols; ++cc) {
1034
1035 locMat(rr, cc) += (t_row_base * t_col_base *
alpha);
1036
1037 ++t_col_base;
1038 ++t_col_diff_base;
1039 }
1040
1041 ++t_row_base;
1042 ++t_row_diff_base;
1043 }
1044
1045 for (; rr < nbRowBaseFunctions; ++rr) {
1046 ++t_row_base;
1047 ++t_row_diff_base;
1048 }
1049
1050 ++t_h;
1051 ++t_grad_g;
1052 ++t_w;
1053 ++t_coords;
1054 }
1055
1056 } else {
1057
1058 auto t_h = getFTensor0FromVec(*
hPtr);
1059 auto t_grad_g = getFTensor1FromMat<SPACE_DIM>(*
gradGPtr);
1060 auto t_u = getFTensor1FromMat<U_FIELD_DIM>(*
uPtr);
1061
1062 auto ts_a = getTSa();
1063
1064 for (int gg = 0; gg != nbIntegrationPts; gg++) {
1065
1066 const double r = t_coords(0);
1068
1070 int rr = 0;
1071 for (; rr != nbRows; ++rr) {
1072
1073 auto t_col_base = col_data.getFTensor0N(gg, 0);
1074 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
1075
1076 for (int cc = 0; cc != nbCols; ++cc) {
1077
1078 locMat(rr, cc) += (t_row_base * t_col_base *
alpha) * ts_a;
1079 locMat(rr, cc) +=
1080 (t_row_base *
alpha) * (t_col_diff_base(
i) * t_u(
i));
1081 locMat(rr, cc) +=
1082 (t_row_diff_base(
i) * t_grad_g(
i)) * (t_col_base * m_dh);
1083
1084 ++t_col_base;
1085 ++t_col_diff_base;
1086 }
1087
1088 ++t_row_base;
1089 ++t_row_diff_base;
1090 }
1091
1092 for (; rr < nbRowBaseFunctions; ++rr) {
1093 ++t_row_base;
1094 ++t_row_diff_base;
1095 }
1096
1097 ++t_u;
1098 ++t_h;
1099 ++t_grad_g;
1100 ++t_w;
1101 ++t_coords;
1102 }
1103 }
1104
1106 }
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MOFEM_LOG(channel, severity)
Log.
FTensor::Index< 'i', SPACE_DIM > i
constexpr IntegrationType I