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

#include <src/post_proc/PostProcBrokenMeshInMoabBase.hpp>

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

Public Member Functions

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

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
 
std::string optPrefix
 

Detailed Description

Definition at line 90 of file PostProcBrokenMeshInMoabBase.hpp.

Member Function Documentation

◆ generateReferenceElementMesh()

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

Implements MoFEM::PostProcGenerateRefMeshBase.

Definition at line 532 of file PostProcBrokenMeshInMoabBase.cpp.

532 {
534
536#ifndef NDEBUG
537 if (defMaxLevel > 0)
538 MOFEM_LOG("WORLD", Sev::warning)
539 << "Refinement for edges is not implemented";
540#endif
541
542 auto set_gauss_pts = [&](std::map<EntityHandle, int> &little_map) {
544
545 int nb_nodes = 2;
546 if (hoNodes)
547 nb_nodes = 3;
548
549 auto &gauss_pts = levelGaussPtsOnRefMesh[0];
550 gauss_pts.resize(2, nb_nodes, false);
551 gauss_pts.clear();
552
553 int nn = 0;
554 for (; nn != 2; ++nn) {
555 gauss_pts(0, nn) = static_cast<double>(nn);
556 little_map[nn] = nn;
557 }
558
559 if (nn < nb_nodes) {
560 gauss_pts(0, nn) = 0.5;
561 little_map[nn] = 2;
562 }
563
565 };
566
567 auto set_ref_edges = [&](std::map<EntityHandle, int> &little_map) {
569
570 int level = 0;
571 int nb_edges = level + 1;
572
573 int nb_nodes = 2;
574 if (hoNodes)
575 nb_nodes = 3;
576
577 auto &ref_edges = levelRef[level];
578 ref_edges.resize(nb_edges, nb_nodes, false);
579
580 for (int ee = 0; ee != nb_edges; ++ee) {
581 int nn = 0;
582 for (; nn != 2; ++nn) {
583 ref_edges(ee, nn) = nb_nodes * ee + nn;
584 }
585 if (nn < nb_nodes) {
586 ref_edges(ee, nn) = nb_nodes * ee + 2;
587 }
588 }
589
591 };
592
593 auto set_shape_functions = [&]() {
595 auto &gauss_pts = levelGaussPtsOnRefMesh[0];
596 auto &shape_functions = levelShapeFunctions[0];
597 const auto nb_gauss_pts = gauss_pts.size2();
598 shape_functions.resize(nb_gauss_pts, 2);
599 for (int gg = 0; gg != nb_gauss_pts; ++gg) {
600 const double ksi = gauss_pts(0, gg);
601 shape_functions(gg, 0) = N_MBEDGE0(ksi);
602 shape_functions(gg, 1) = N_MBEDGE1(ksi);
603 }
605 };
606
607 levelRef.resize(1);
608 levelGaussPtsOnRefMesh.resize(1);
609 levelShapeFunctions.resize(1);
610
611 std::map<EntityHandle, int> little_map;
612 CHKERR set_gauss_pts(little_map);
613 CHKERR set_ref_edges(little_map);
614 CHKERR set_shape_functions();
615
617}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
#define CHKERR
Inline error check.
Definition: definitions.h:535
#define N_MBEDGE0(x)
edge shape function
Definition: fem_tools.h:105
#define N_MBEDGE1(x)
edge shape function
Definition: fem_tools.h:106
#define MOFEM_LOG(channel, severity)
Log.
Definition: LogManager.hpp:308
std::vector< ublas::matrix< int > > levelRef
PetscBool hoNodes
int defMaxLevel
std::vector< MatrixDouble > levelShapeFunctions
std::vector< MatrixDouble > levelGaussPtsOnRefMesh
MoFEMErrorCode getOptions()

◆ PostProcGenerateRefMeshBase()

MoFEM::PostProcGenerateRefMeshBase::PostProcGenerateRefMeshBase ( )

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