Do specific work in operator.
Is protected to prevent direct call. This can be only called by doWork method.
1509 cerr <<
"Element " << getFEEntityHandle() << endl;
1511 const bool use_global_base =
1512 mwlsApprox->getUseGlobalBaseAtMaterialReferenceConfiguration();
1513 if (use_global_base)
1515 "Coefficients can be precalculated only for local base in "
1516 "reference configuration");
1523 const int nb_gauss_pts = data.getN().size1();
1524 auto &inv_AB_map =
mwlsApprox->invABMap.at(getFEEntityHandle());
1525 auto &influence_nodes_map =
1526 mwlsApprox->influenceNodesMap.at(getFEEntityHandle());
1527 auto &dm_nodes_map =
mwlsApprox->dmNodesMap.at(this->getFEEntityHandle());
1530 stress.resize(6, nb_gauss_pts,
false);
1532 diff_stress.resize(18, nb_gauss_pts,
false);
1534 auto t_mwls_material_positions =
1535 getFTensor1FromMat<3>(
mwlsApprox->mwlsMaterialPositions);
1536 auto t_approx_base_point = getFTensor1FromMat<3>(
mwlsApprox->approxBasePoint);
1538 for (
int gg = 0; gg != nb_gauss_pts; ++gg) {
1541 t_mat_pos(
i) = t_mwls_material_positions(
i);
1544 cerr <<
"material_positions " << t_mwls_material_positions << endl;
1547 for (
int dd : {0, 1, 2})
1550 mwlsApprox->influenceNodes = influence_nodes_map[gg];
1559 const auto &vals =
mwlsApprox->getDataApprox();
1561 for (
int ii = 0; ii != 6; ++ii)
1562 stress(ii, gg) = vals[ii];
1564 const auto &diff_vals =
mwlsApprox->getDiffDataApprox();
1565 for (
int ii = 0; ii != 6; ++ii) {
1566 for (
int jj = 0; jj != 3; ++jj)
1567 diff_stress(jj * 6 + ii, gg) = diff_vals(jj, ii);
1570 ++t_mwls_material_positions;
1571 ++t_approx_base_point;
1575 cerr <<
"stress " << stress << endl;