1114 if (
type != MBVERTEX) {
1118 if (std::is_same<T, VolumeElementForcesAndSourcesCore>::value)
1119 if (
mwlsApprox->tetsInBlock.find(this->getFEEntityHandle()) ==
1124 if (std::is_same<T, FaceElementForcesAndSourcesCore>::value)
1125 if (
mwlsApprox->trisInBlock.find(this->getFEEntityHandle()) ==
1130 const int nb_gauss_pts = data.getN().size1();
1135 mwlsApprox->approxBasePoint.resize(3, nb_gauss_pts,
false);
1137 mwlsApprox->singularInitialDisplacement.resize(3, nb_gauss_pts,
false);
1138 mwlsApprox->singularInitialDisplacement.clear();
1139 mwlsApprox->singularCurrentDisplacement.resize(3, nb_gauss_pts,
false);
1140 mwlsApprox->singularCurrentDisplacement.clear();
1144 if (fe_ptr && fe_ptr->singularElement) {
1148 "Matrix for material positions not acclocated");
1150 auto t_material_positions = getFTensor1FromMat<3>(*
matPosAtPtsPtr);
1153 auto t_mwls_material_positions =
1154 getFTensor1FromMat<3>(
mwlsApprox->mwlsMaterialPositions);
1157 t_singular_displacement(&fe_ptr->singularDisp(0, 0),
1158 &fe_ptr->singularDisp(0, 1),
1159 &fe_ptr->singularDisp(0, 2));
1161 auto t_inital_singular_displacement =
1162 getFTensor1FromMat<3>(
mwlsApprox->singularInitialDisplacement);
1163 auto t_current_singular_displacement =
1164 getFTensor1FromMat<3>(
mwlsApprox->singularCurrentDisplacement);
1167 "Matrix for gradient of positions not allocated");
1169 for (
int gg = 0; gg != nb_gauss_pts; gg++) {
1171 t_inital_singular_displacement(
i) = t_singular_displacement(
i);
1172 t_current_singular_displacement(
i) =
1173 t_H(
i,
j) * t_singular_displacement(
j);
1174 t_mwls_material_positions(
i) =
1175 t_material_positions(
i) + t_current_singular_displacement(
i);
1177 ++t_mwls_material_positions;
1178 ++t_material_positions;
1180 ++t_singular_displacement;
1181 ++t_inital_singular_displacement;
1182 ++t_current_singular_displacement;
1189 const bool use_global_base =
1190 mwlsApprox->getUseGlobalBaseAtMaterialReferenceConfiguration();
1192 if (use_global_base) {
1193 auto t_mwls_material_positions =
1194 getFTensor1FromMat<3>(
mwlsApprox->mwlsMaterialPositions);
1195 auto t_approx_base_point =
1196 getFTensor1FromMat<3>(
mwlsApprox->approxBasePoint);
1197 for (
int gg = 0; gg != nb_gauss_pts; gg++) {
1198 t_approx_base_point(
i) = t_mwls_material_positions(
i);
1199 ++t_approx_base_point;
1200 ++t_mwls_material_positions;
1205 if (fe_ptr && fe_ptr->singularElement) {
1206 auto t_inital_singular_displacement =
1207 getFTensor1FromMat<3>(
mwlsApprox->singularInitialDisplacement);
1208 auto t_approx_base_point =
1209 getFTensor1FromMat<3>(
mwlsApprox->approxBasePoint);
1210 auto t_coords_of_gauss_point = this->getFTensor1CoordsAtGaussPts();
1211 for (
int gg = 0; gg != nb_gauss_pts; gg++) {
1212 t_approx_base_point(
i) =
1213 t_coords_of_gauss_point(
i) + t_inital_singular_displacement(
i);
1214 ++t_approx_base_point;
1215 ++t_coords_of_gauss_point;
1216 ++t_inital_singular_displacement;
1219 auto t_approx_base_point =
1220 getFTensor1FromMat<3>(
mwlsApprox->approxBasePoint);
1221 auto t_coords_of_gauss_point = this->getFTensor1CoordsAtGaussPts();
1222 for (
int gg = 0; gg != nb_gauss_pts; gg++) {
1223 t_approx_base_point(
i) = t_coords_of_gauss_point(
i);
1224 ++t_approx_base_point;
1225 ++t_coords_of_gauss_point;