29 std::vector<EntityHandle> &map_gauss_pts,
30 boost::shared_ptr<MatrixDouble> m_strain_ptr,
31 boost::shared_ptr<MatrixDouble> m_stress_ptr);
46 std::vector<EntityHandle> &map_gauss_pts,
47 boost::shared_ptr<MatrixDouble> m_strain_ptr,
48 boost::shared_ptr<MatrixDouble> m_stress_ptr)
50 mapGaussPts(map_gauss_pts), mStrainPtr(m_strain_ptr),
51 mStressPtr(m_stress_ptr) {
53 std::fill(&doEntities[MBEDGE], &doEntities[MBMAXTYPE],
false);
63 auto get_tag = [&](
const std::string name) {
64 std::array<double, 9> def;
65 std::fill(def.begin(), def.end(), 0);
67 CHKERR postProcMesh.tag_get_handle(name.c_str(), 9, MB_TYPE_DOUBLE, th,
68 MB_TAG_CREAT | MB_TAG_SPARSE,
77 for (
size_t r = 0;
r != DIM; ++
r)
78 for (
size_t c = 0;
c != DIM; ++
c)
83 auto set_plain_stress_strain = [&](
auto &mat,
auto &t) ->
MatrixDouble3by3 & {
89 return postProcMesh.tag_set_data(th, &mapGaussPts[gg], 1,
90 &*mat.data().begin());
93 auto th_strain = get_tag(
"STRAIN");
94 auto th_stress = get_tag(
"STRESS");
96 size_t nb_gauss_pts = data.
getN().size1();
97 auto t_strain = getFTensor2SymmetricFromMat<DIM>(*(mStrainPtr));
98 auto t_stress = getFTensor2SymmetricFromMat<DIM>(*(mStressPtr));
102 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
105 set_plain_stress_strain(set_matrix_symm(t_strain), t_stress));
106 CHKERR set_tag(th_stress, gg, set_matrix_symm(t_stress));
112 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
113 CHKERR set_tag(th_strain, gg, set_matrix_symm(t_strain));
114 CHKERR set_tag(th_stress, gg, set_matrix_symm(t_stress));
121 "Not implemeneted dimension");