v0.16.0
Loading...
Searching...
No Matches
Public Member Functions | List of all members
MoFEM::PostProcGenerateRefMesh< MBPRISM > Struct Reference

#include "src/post_proc/PostProcBrokenMeshInMoabBase.hpp"

Inheritance diagram for MoFEM::PostProcGenerateRefMesh< MBPRISM >:
[legend]
Collaboration diagram for MoFEM::PostProcGenerateRefMesh< MBPRISM >:
[legend]

Public Member Functions

MoFEMErrorCode generateReferenceElementMesh ()
 
 PostProcGenerateRefMeshBase ()
 
- Public Member Functions inherited from MoFEM::PostProcGenerateRefMeshBase
 PostProcGenerateRefMeshBase ()
 
virtual ~PostProcGenerateRefMeshBase ()=default
 
virtual MoFEMErrorCode getOptions (std::string prefix)
 

Additional Inherited Members

- Public Attributes inherited from MoFEM::PostProcGenerateRefMeshBase
std::vector< MatrixDoublelevelShapeFunctions
 
std::vector< MatrixDoublelevelGaussPtsOnRefMesh
 
std::vector< ublas::matrix< int > > levelRef
 
EntityHandle startingVertEleHandle
 
std::vector< double * > verticesOnEleArrays
 
EntityHandle startingEleHandle
 
EntityHandleeleConn
 
int countEle
 
int countVertEle
 
int nbVertices
 
int nbEles
 
PetscBool hoNodes
 
int defMaxLevel
 

Detailed Description

Definition at line 77 of file PostProcBrokenMeshInMoabBase.hpp.

Member Function Documentation

◆ generateReferenceElementMesh()

MoFEMErrorCode MoFEM::PostProcGenerateRefMesh< MBPRISM >::generateReferenceElementMesh ( )
virtual

Implements MoFEM::PostProcGenerateRefMeshBase.

Definition at line 262 of file PostProcBrokenMeshInMoabBase.cpp.

262 {
264
265#ifndef NDEBUG
266 if (defMaxLevel > 0)
267 MOFEM_LOG("WORLD", Sev::warning)
268 << "Refinement for prisms is not implemented";
269#endif
270
271 moab::Core core_ref;
272 moab::Interface &moab_ref = core_ref;
273
274 auto create_reference_element = [&moab_ref]() {
276 constexpr double base_coords[] = {0, 0, 0, 1, 0, 0, 0, 1, 0,
277 0, 0, 1, 1, 0, 1, 0, 1, 1};
278 EntityHandle nodes[6];
279 for (int nn = 0; nn != 6; ++nn)
280 CHKERR moab_ref.create_vertex(&base_coords[3 * nn], nodes[nn]);
281 EntityHandle prism;
282 CHKERR moab_ref.create_element(MBPRISM, nodes, 6, prism);
284 };
285
286 auto add_ho_nodes = [&]() {
288 Range prisms;
289 CHKERR moab_ref.get_entities_by_type(0, MBPRISM, prisms, true);
290 EntityHandle meshset;
291 CHKERR moab_ref.create_meshset(MESHSET_SET, meshset);
292 CHKERR moab_ref.add_entities(meshset, prisms);
293 CHKERR moab_ref.convert_entities(meshset, true, true, true);
294 CHKERR moab_ref.delete_entities(&meshset, 1);
296 };
297
298 auto set_gauss_pts = [&](std::map<EntityHandle, int> &little_map) {
300 Range prisms;
301 CHKERR moab_ref.get_entities_by_type(0, MBPRISM, prisms, true);
302 Range prism_nodes;
303 CHKERR moab_ref.get_connectivity(prisms, prism_nodes, false);
304 auto &gauss_pts = levelGaussPtsOnRefMesh[0];
305 gauss_pts.resize(prism_nodes.size(), 4, false);
306 size_t gg = 0;
307 for (auto node : prism_nodes) {
308 CHKERR moab_ref.get_coords(&node, 1, &gauss_pts(gg, 0));
309 little_map[node] = gg;
310 ++gg;
311 }
312 gauss_pts = trans(gauss_pts);
314 };
315
316 auto set_ref_prisms = [&](std::map<EntityHandle, int> &little_map) {
318 Range prisms;
319 CHKERR moab_ref.get_entities_by_type(0, MBPRISM, prisms, true);
320 size_t pp = 0;
321 auto &ref_prisms = levelRef[0];
322 for (auto prism : prisms) {
323 const EntityHandle *conn;
324 int num_nodes;
325 CHKERR moab_ref.get_connectivity(prism, conn, num_nodes, false);
326 if (ref_prisms.size2() != num_nodes)
327 ref_prisms.resize(prisms.size(), num_nodes);
328 for (int nn = 0; nn != num_nodes; ++nn)
329 ref_prisms(pp, nn) = little_map[conn[nn]];
330 ++pp;
331 }
333 };
334
335 auto set_shape_functions = [&]() {
337 auto &gauss_pts = levelGaussPtsOnRefMesh[0];
338 auto &shape_functions = levelShapeFunctions[0];
339 const auto nb_gauss_pts = gauss_pts.size2();
340 shape_functions.resize(nb_gauss_pts, 6);
341 for (int gg = 0; gg != nb_gauss_pts; ++gg) {
342 const double ksi = gauss_pts(0, gg);
343 const double eta = gauss_pts(1, gg);
344 const double zeta = gauss_pts(2, gg);
345 const double n0 = 1 - ksi - eta;
346 shape_functions(gg, 0) = n0 * (1 - zeta);
347 shape_functions(gg, 1) = ksi * (1 - zeta);
348 shape_functions(gg, 2) = eta * (1 - zeta);
349 shape_functions(gg, 3) = n0 * zeta;
350 shape_functions(gg, 4) = ksi * zeta;
351 shape_functions(gg, 5) = eta * zeta;
352 }
354 };
355
356 levelRef.resize(1);
357 levelGaussPtsOnRefMesh.resize(1);
358 levelShapeFunctions.resize(1);
359
360 CHKERR create_reference_element();
361 if (hoNodes)
362 CHKERR add_ho_nodes();
363 std::map<EntityHandle, int> little_map;
364 CHKERR set_gauss_pts(little_map);
365 CHKERR set_ref_prisms(little_map);
366 CHKERR set_shape_functions();
367
369}
#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.
double eta
#define MOFEM_LOG(channel, severity)
Log.
std::vector< ublas::matrix< int > > levelRef
double zeta
Viscous hardening.
Definition plastic.cpp:131

◆ PostProcGenerateRefMeshBase()

MoFEM::PostProcGenerateRefMeshBase::PostProcGenerateRefMeshBase ( )

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