v0.15.0
Loading...
Searching...
No Matches
OpCalculateSideData Struct Reference

Operator tp collect data from elements on the side of Edge/Face. More...

Inheritance diagram for OpCalculateSideData:
[legend]
Collaboration diagram for OpCalculateSideData:
[legend]

Public Member Functions

 OpCalculateSideData (std::string field_name, std::string col_field_name)
 
MoFEMErrorCode doWork (int side, EntityType type, EntData &data)
 

Detailed Description

Operator tp collect data from elements on the side of Edge/Face.

Examples
PoissonDiscontinousGalerkin.hpp, plate.cpp, and poisson_2d_dis_galerkin.cpp.

Definition at line 109 of file plate.cpp.

Constructor & Destructor Documentation

◆ OpCalculateSideData()

OpCalculateSideData::OpCalculateSideData ( std::string field_name,
std::string col_field_name )
Examples
plate.cpp.

Definition at line 429 of file plate.cpp.

431 : FaceSideOp(row_field_name, col_field_name, FaceSideOp::OPROW) {}
ElementsAndOps< SPACE_DIM >::FaceSideOp FaceSideOp
Definition plate.cpp:37

Member Function Documentation

◆ doWork()

MoFEMErrorCode OpCalculateSideData::doWork ( int side,
EntityType type,
EntData & data )
Examples
plate.cpp.

Definition at line 433 of file plate.cpp.

434 {
436
437 const auto nb_in_loop = getFEMethod()->nInTheLoop;
438
439 auto clear = [](auto nb) {
440 indicesSideMap[nb].clear();
441 diffBaseSideMap[nb].clear();
442 diff2BaseSideMap[nb].clear();
443 };
444
445 if (type == MBVERTEX) {
446 areaMap[nb_in_loop] = getMeasure();
447 senseMap[nb_in_loop] = getEdgeSense();
448 if (!nb_in_loop) {
449 clear(0);
450 clear(1);
451 areaMap[1] = 0;
452 senseMap[1] = 0;
453 }
454 }
455
456 const auto nb_dofs = data.getIndices().size();
457 if (nb_dofs) {
458 indicesSideMap[nb_in_loop].push_back(data.getIndices());
459 diffBaseSideMap[nb_in_loop].push_back(
460 data.getN(BaseDerivatives::FirstDerivative));
461 diff2BaseSideMap[nb_in_loop].push_back(
462 data.getN(BaseDerivatives::SecondDerivative));
463 }
464
466}
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
std::array< std::vector< MatrixDouble >, 2 > diff2BaseSideMap
Definition plate.cpp:100
std::array< std::vector< MatrixDouble >, 2 > diffBaseSideMap
Definition plate.cpp:98
std::array< double, 2 > areaMap
Definition plate.cpp:101
std::array< std::vector< VectorInt >, 2 > indicesSideMap
indices on rows for left hand-side
Definition plate.cpp:96
std::array< int, 2 > senseMap
Definition plate.cpp:102
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
const VectorInt & getIndices() const
Get global indices of dofs on entity.

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