Do specific work in operator.
Is protected to prevent direct call. This can be only called by doWork method.
1298 cerr <<
"Element " << getFEEntityHandle() << endl;
1299 const bool use_global_base =
1300 mwlsApprox->getUseGlobalBaseAtMaterialReferenceConfiguration();
1301 if (use_global_base)
1303 "Coefficients can be precalculated only for local base in "
1304 "reference configuration");
1311 const int nb_gauss_pts = data.getN().size1();
1312 auto &inv_AB_map =
mwlsApprox->invABMap.at(getFEEntityHandle());
1313 auto &influence_nodes_map =
1314 mwlsApprox->influenceNodesMap.at(getFEEntityHandle());
1315 auto &dm_nodes_map =
mwlsApprox->dmNodesMap.at(this->getFEEntityHandle());
1318 rho.resize(nb_gauss_pts,
false);
1320 diff_rho.resize(3, nb_gauss_pts,
false);
1323 diff_diff_rho.resize(9, nb_gauss_pts,
false);
1325 auto t_mwls_material_positions =
1326 getFTensor1FromMat<3>(
mwlsApprox->mwlsMaterialPositions);
1327 auto t_approx_base_point = getFTensor1FromMat<3>(
mwlsApprox->approxBasePoint);
1329 for (
int gg = 0; gg != nb_gauss_pts; ++gg) {
1332 t_mat_pos(
i) = t_mwls_material_positions(
i);
1335 cerr <<
"material_positions " << t_mwls_material_positions << endl;
1338 for (
int dd : {0, 1, 2})
1341 mwlsApprox->influenceNodes = influence_nodes_map[gg];
1353 const auto &vals =
mwlsApprox->getDataApprox();
1357 const auto &diff_vals =
mwlsApprox->getDiffDataApprox();
1358 for (
int ii = 0; ii != 3; ++ii) {
1359 diff_rho(ii, gg) = diff_vals(ii, 0);
1364 const auto &diff_diff_vals =
mwlsApprox->getDiffDiffDataApprox();
1365 for (
int ii = 0; ii != 3; ++ii) {
1366 for (
int jj = 0; jj != 3; ++jj)
1367 diff_diff_rho(jj * 3 + ii, gg) = diff_diff_vals(jj * 3 + ii, 0);
1371 ++t_mwls_material_positions;
1372 ++t_approx_base_point;
1376 cerr <<
"rho " <<
rho << endl;