v0.15.0
Loading...
Searching...
No Matches
OpPostProcMap< DIM1, DIM2 > Struct Template Reference

Post post-proc data at points from hash maps. More...

#include "users_modules/basic_finite_elements/src/PostProcOnRefMesh.hpp"

Inheritance diagram for OpPostProcMap< DIM1, DIM2 >:
[legend]
Collaboration diagram for OpPostProcMap< DIM1, DIM2 >:
[legend]

Public Types

using DataMapVec = std::map<std::string, boost::shared_ptr<VectorDouble>>
 
using DataMapMat = std::map<std::string, boost::shared_ptr<MatrixDouble>>
 

Public Member Functions

 OpPostProcMap (moab::Interface &post_proc_mesh, std::vector< EntityHandle > &map_gauss_pts, DataMapVec data_map_scalar, DataMapMat data_map_vec, DataMapMat data_map_mat, DataMapMat data_symm_map_mat)
 Construct a new OpPostProcMap object.
 
MoFEMErrorCode doWork (int side, EntityType type, EntitiesFieldData::EntData &data)
 

Private Attributes

moab::Interface & postProcMesh
 
std::vector< EntityHandle > & mapGaussPts
 
DataMapVec dataMapScalar
 
DataMapMat dataMapVec
 
DataMapMat dataMapMat
 
DataMapMat dataMapSymmMat
 

Detailed Description

template<int DIM1, int DIM2>
struct OpPostProcMap< DIM1, DIM2 >

Post post-proc data at points from hash maps.

Template Parameters
DIM1dimension of vector in data_map_vec and first column of data_map_may
DIM2dimension of second column in data_map_mat

Definition at line 1187 of file PostProcOnRefMesh.hpp.

Member Typedef Documentation

◆ DataMapMat

template<int DIM1, int DIM2>
using OpPostProcMap< DIM1, DIM2 >::DataMapMat = std::map<std::string, boost::shared_ptr<MatrixDouble>>

Definition at line 1190 of file PostProcOnRefMesh.hpp.

◆ DataMapVec

template<int DIM1, int DIM2>
using OpPostProcMap< DIM1, DIM2 >::DataMapVec = std::map<std::string, boost::shared_ptr<VectorDouble>>

Definition at line 1189 of file PostProcOnRefMesh.hpp.

Constructor & Destructor Documentation

◆ OpPostProcMap()

template<int DIM1, int DIM2>
OpPostProcMap< DIM1, DIM2 >::OpPostProcMap ( moab::Interface & post_proc_mesh,
std::vector< EntityHandle > & map_gauss_pts,
DataMapVec data_map_scalar,
DataMapMat data_map_vec,
DataMapMat data_map_mat,
DataMapMat data_symm_map_mat )
inline

Construct a new OpPostProcMap object.

Parameters
post_proc_meshpostprocessing mesh
map_gauss_ptsmap of gauss points to nodes of postprocessing mesh
data_map_scalarhash map of scalar values (string is name of the tag)
data_map_vechash map of vector values
data_map_mathash map of second order tensor values
data_symm_map_mathash map of symmetric second order tensor values

Definition at line 1203 of file PostProcOnRefMesh.hpp.

1207 : ForcesAndSourcesCore::UserDataOperator(
1208 NOSPACE, ForcesAndSourcesCore::UserDataOperator::OPSPACE),
1209 postProcMesh(post_proc_mesh), mapGaussPts(map_gauss_pts),
1210 dataMapScalar(data_map_scalar), dataMapVec(data_map_vec),
1211 dataMapMat(data_map_mat), dataMapSymmMat(data_symm_map_mat) {
1212 // Operator is only executed for vertices
1213 std::fill(&doEntities[MBEDGE], &doEntities[MBMAXTYPE], false);
1214 }
@ NOSPACE
Definition definitions.h:83
moab::Interface & postProcMesh
std::vector< EntityHandle > & mapGaussPts

Member Function Documentation

◆ doWork()

template<int DIM1, int DIM2>
MoFEMErrorCode OpPostProcMap< DIM1, DIM2 >::doWork ( int side,
EntityType type,
EntitiesFieldData::EntData & data )

Definition at line 1229 of file PostProcOnRefMesh.hpp.

1230 {
1232
1233 std::array<double, 9> def;
1234 std::fill(def.begin(), def.end(), 0);
1235
1236 auto get_tag = [&](const std::string name, size_t size) {
1237 Tag th;
1238 CHKERR postProcMesh.tag_get_handle(name.c_str(), size, MB_TYPE_DOUBLE, th,
1239 MB_TAG_CREAT | MB_TAG_SPARSE,
1240 def.data());
1241 return th;
1242 };
1243
1244 MatrixDouble3by3 mat(3, 3);
1245
1246 auto set_vector_3d = [&](auto &t) -> MatrixDouble3by3 & {
1247 mat.clear();
1248 for (size_t r = 0; r != DIM1; ++r)
1249 mat(0, r) = t(r);
1250 return mat;
1251 };
1252
1253 auto set_matrix_3d = [&](auto &t) -> MatrixDouble3by3 & {
1254 mat.clear();
1255 for (size_t r = 0; r != DIM1; ++r)
1256 for (size_t c = 0; c != DIM2; ++c)
1257 mat(r, c) = t(r, c);
1258 return mat;
1259 };
1260
1261 auto set_matrix_symm_3d = [&](auto &t) -> MatrixDouble3by3 & {
1262 mat.clear();
1263 for (size_t r = 0; r != DIM1; ++r)
1264 for (size_t c = 0; c != DIM1; ++c)
1265 mat(r, c) = t(r, c);
1266 return mat;
1267 };
1268
1269 auto set_scalar = [&](auto t) -> MatrixDouble3by3 & {
1270 mat.clear();
1271 mat(0, 0) = t;
1272 return mat;
1273 };
1274
1275 auto set_float_precision = [](const double x) {
1276 if (std::abs(x) < std::numeric_limits<float>::epsilon())
1277 return 0.;
1278 else
1279 return x;
1280 };
1281
1282 auto set_tag = [&](auto th, auto gg, MatrixDouble3by3 &mat) {
1283 for (auto &v : mat.data())
1284 v = set_float_precision(v);
1285 return postProcMesh.tag_set_data(th, &mapGaussPts[gg], 1,
1286 &*mat.data().begin());
1287 };
1288
1289 for (auto &m : dataMapScalar) {
1290 auto th = get_tag(m.first, 1);
1291 auto t_scl = getFTensor0FromVec(*m.second);
1292 auto nb_integration_pts = getGaussPts().size2();
1293 size_t gg = 0;
1294 for (int gg = 0; gg != nb_integration_pts; ++gg) {
1295 CHKERR set_tag(th, gg, set_scalar(t_scl));
1296 ++t_scl;
1297 }
1298 }
1299
1300 for (auto &m : dataMapVec) {
1301 auto th = get_tag(m.first, 3);
1302 auto t_vec = getFTensor1FromMat<DIM1>(*m.second);
1303 auto nb_integration_pts = getGaussPts().size2();
1304 size_t gg = 0;
1305 for (int gg = 0; gg != nb_integration_pts; ++gg) {
1306 CHKERR set_tag(th, gg, set_vector_3d(t_vec));
1307 ++t_vec;
1308 }
1309 }
1310
1311 for (auto &m : dataMapMat) {
1312 auto th = get_tag(m.first, 9);
1313 auto t_mat = getFTensor2FromMat<DIM1, DIM2>(*m.second);
1314 auto nb_integration_pts = getGaussPts().size2();
1315 size_t gg = 0;
1316 for (int gg = 0; gg != nb_integration_pts; ++gg) {
1317 CHKERR set_tag(th, gg, set_matrix_3d(t_mat));
1318 ++t_mat;
1319 }
1320 }
1321
1322 for (auto &m : dataMapSymmMat) {
1323 auto th = get_tag(m.first, 9);
1324 auto t_mat = getFTensor2SymmetricFromMat<DIM1>(*m.second);
1325 auto nb_integration_pts = getGaussPts().size2();
1326 size_t gg = 0;
1327 for (int gg = 0; gg != nb_integration_pts; ++gg) {
1328 CHKERR set_tag(th, gg, set_matrix_symm_3d(t_mat));
1329 ++t_mat;
1330 }
1331 }
1332
1334}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
const double c
speed of light (cm/ns)
const double v
phase velocity of light in medium (cm/ns)
constexpr int DIM2
Definition level_set.cpp:22
constexpr int DIM1
Definition level_set.cpp:21
MatrixBoundedArray< double, 9 > MatrixDouble3by3
Definition Types.hpp:105
int r
Definition sdf.py:8
constexpr double t
plate stiffness
Definition plate.cpp:58
FTensor::Index< 'm', 3 > m

Member Data Documentation

◆ dataMapMat

template<int DIM1, int DIM2>
DataMapMat OpPostProcMap< DIM1, DIM2 >::dataMapMat
private

Definition at line 1223 of file PostProcOnRefMesh.hpp.

◆ dataMapScalar

template<int DIM1, int DIM2>
DataMapVec OpPostProcMap< DIM1, DIM2 >::dataMapScalar
private

Definition at line 1221 of file PostProcOnRefMesh.hpp.

◆ dataMapSymmMat

template<int DIM1, int DIM2>
DataMapMat OpPostProcMap< DIM1, DIM2 >::dataMapSymmMat
private

Definition at line 1224 of file PostProcOnRefMesh.hpp.

◆ dataMapVec

template<int DIM1, int DIM2>
DataMapMat OpPostProcMap< DIM1, DIM2 >::dataMapVec
private

Definition at line 1222 of file PostProcOnRefMesh.hpp.

◆ mapGaussPts

template<int DIM1, int DIM2>
std::vector<EntityHandle>& OpPostProcMap< DIM1, DIM2 >::mapGaussPts
private

Definition at line 1220 of file PostProcOnRefMesh.hpp.

◆ postProcMesh

template<int DIM1, int DIM2>
moab::Interface& OpPostProcMap< DIM1, DIM2 >::postProcMesh
private

Definition at line 1219 of file PostProcOnRefMesh.hpp.


The documentation for this struct was generated from the following file: