![]() |
v0.15.0 |
#include "src/finite_elements/ForcesAndSourcesCore.hpp"
Public Types | |
| enum | OpType { OPROW = 1 << 0 , OPCOL = 1 << 1 , OPROWCOL = 1 << 2 , OPSPACE = 1 << 3 , OPLAST = 1 << 3 } |
| Controls loop over entities on element. More... | |
Public Types inherited from MoFEM::DataOperator | |
| using | DoWorkLhsHookFunType = boost::function< MoFEMErrorCode(DataOperator *op_ptr, int row_side, int col_side, EntityType row_type, EntityType col_type, EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)> |
| using | DoWorkRhsHookFunType = boost::function< MoFEMErrorCode(DataOperator *op_ptr, int side, EntityType type, EntitiesFieldData::EntData &data)> |
Public Member Functions | |
| UserDataOperator (const FieldSpace space, const char type=OPSPACE, const bool symm=true) | |
| Constructor for operators working on finite element spaces. | |
| UserDataOperator (const std::string field_name, const char type, const bool symm=true) | |
| Constructor for operators working on a single field. | |
| UserDataOperator (const std::string row_field_name, const std::string col_field_name, const char type, const bool symm=true) | |
| Constructor for operators working on two fields (bilinear forms) | |
| boost::shared_ptr< const NumeredEntFiniteElement > | getNumeredEntFiniteElementPtr () const |
| Return raw pointer to NumeredEntFiniteElement. | |
| EntityHandle | getFEEntityHandle () const |
| Return finite element entity handle. | |
| int | getFEDim () const |
| Get dimension of finite element. | |
| EntityType | getFEType () const |
| Get dimension of finite element. | |
| boost::weak_ptr< SideNumber > | getSideNumberPtr (const int side_number, const EntityType type) |
| Get the side number pointer. | |
| EntityHandle | getSideEntity (const int side_number, const EntityType type) |
| Get the side entity. | |
| int | getNumberOfNodesOnElement () const |
| Get the number of nodes on finite element. | |
| MoFEMErrorCode | getProblemRowIndices (const std::string filed_name, const EntityType type, const int side, VectorInt &indices) const |
| Get row indices. | |
| MoFEMErrorCode | getProblemColIndices (const std::string filed_name, const EntityType type, const int side, VectorInt &indices) const |
| Get col indices. | |
| const FEMethod * | getFEMethod () const |
| Return raw pointer to Finite Element Method object. | |
| int | getOpType () const |
| Get operator types. | |
| void | setOpType (const OpType type) |
| Set operator type. | |
| void | addOpType (const OpType type) |
| Add operator type. | |
| int | getNinTheLoop () const |
| get number of finite element in the loop | |
| int | getLoopSize () const |
| get size of elements in the loop | |
| std::string | getFEName () const |
| Get name of the element. | |
| ForcesAndSourcesCore * | getPtrFE () const |
| ForcesAndSourcesCore * | getSidePtrFE () const |
| ForcesAndSourcesCore * | getRefinePtrFE () const |
Accessing KSP | |
| const PetscData::Switches & | getDataCtx () const |
| const KspMethod::KSPContext | getKSPCtx () const |
| const SnesMethod::SNESContext | getSNESCtx () const |
| const TSMethod::TSContext | getTSCtx () const |
| Vec | getKSPf () const |
| Mat | getKSPA () const |
| Mat | getKSPB () const |
Accessing SNES | |
| Vec | getSNESf () const |
| Vec | getSNESx () const |
| Mat | getSNESA () const |
| Mat | getSNESB () const |
Accessing TS | |
| Vec | getTSu () const |
| Vec | getTSu_t () const |
| Vec | getTSu_tt () const |
| Vec | getTSf () const |
| Mat | getTSA () const |
| Mat | getTSB () const |
| int | getTSstep () const |
| double | getTStime () const |
| double | getTStimeStep () const |
| double | getTSa () const |
| double | getTSaa () const |
Base functions and integration points | |
| MatrixDouble & | getGaussPts () |
| matrix of integration (Gauss) points for Volume Element | |
| auto | getFTensor0IntegrationWeight () |
| Get integration weights. | |
Coordinates and access to internal data | |
| MatrixDouble & | getCoordsAtGaussPts () |
| Gauss points and weight, matrix (nb. of points x 3) | |
| auto | getFTensor1CoordsAtGaussPts () |
| Get coordinates at integration points assuming linear geometry. | |
Measures (area, volume, length, etc.) | |
| double | getMeasure () const |
| get measure of element | |
| double & | getMeasure () |
| get measure of element | |
Database | |
| MoFEM::Interface & | getMField () |
| moab::Interface & | getMoab () |
Public Member Functions inherited from MoFEM::DataOperator | |
| DataOperator (const bool symm=true) | |
| virtual | ~DataOperator ()=default |
| virtual MoFEMErrorCode | doWork (int row_side, int col_side, EntityType row_type, EntityType col_type, EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data) |
| Operator for bi-linear form, usually to calculate values on left hand side. | |
| virtual MoFEMErrorCode | opLhs (EntitiesFieldData &row_data, EntitiesFieldData &col_data) |
| virtual MoFEMErrorCode | doWork (int side, EntityType type, EntitiesFieldData::EntData &data) |
| Operator for linear form, usually to calculate values on right hand side. | |
| virtual MoFEMErrorCode | opRhs (EntitiesFieldData &data, const bool error_if_no_base=false) |
| bool | getSymm () const |
| Get if operator uses symmetry of DOFs or not. | |
| void | setSymm () |
| set if operator is executed taking in account symmetry | |
| void | unSetSymm () |
| unset if operator is executed for non symmetric problem | |
Public Attributes | |
| char | opType |
| std::string | rowFieldName |
| std::string | colFieldName |
| FieldSpace | sPace |
Public Attributes inherited from MoFEM::DataOperator | |
| DoWorkLhsHookFunType | doWorkLhsHook |
| DoWorkRhsHookFunType | doWorkRhsHook |
| bool | sYmm |
| If true assume that matrix is symmetric structure. | |
| std::array< bool, MBMAXTYPE > | doEntities |
| If true operator is executed for entity. | |
| bool & | doVertices |
| \deprectaed If false skip vertices | |
| bool & | doEdges |
| \deprectaed If false skip edges | |
| bool & | doQuads |
| \deprectaed | |
| bool & | doTris |
| \deprectaed | |
| bool & | doTets |
| \deprectaed | |
| bool & | doPrisms |
| \deprectaed | |
Static Public Attributes | |
| static const char *const | OpTypeNames [] |
Protected Member Functions | |
| virtual MoFEMErrorCode | setPtrFE (ForcesAndSourcesCore *ptr) |
Protected Attributes | |
| ForcesAndSourcesCore * | ptrFE |
Friends | |
| class | ForcesAndSourcesCore |
| class | EdgeElementForcesAndSourcesCore |
| class | FaceElementForcesAndSourcesCore |
| class | ContactPrismElementForcesAndSourcesCore |
Loops | |
} | |
| using | AdjCache = std::map< EntityHandle, std::vector< boost::weak_ptr< NumeredEntFiniteElement > > > |
| MoFEMErrorCode | loopSide (const string &fe_name, ForcesAndSourcesCore *side_fe, const size_t dim, const EntityHandle ent_for_side=0, boost::shared_ptr< Range > fe_range=nullptr, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy, AdjCache *adj_cache=nullptr) |
| User calls this function to loop over elements on the side of face. This function calls finite element with its operator to do calculations. | |
| MoFEMErrorCode | loopThis (const string &fe_name, ForcesAndSourcesCore *this_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy) |
| User calls this function to loop over the same element using a different set of integration points. This function calls finite element with its operator to do calculations. | |
| MoFEMErrorCode | loopParent (const string &fe_name, ForcesAndSourcesCore *parent_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy) |
| User calls this function to loop over parent elements. This function calls finite element with its operator to do calculations. | |
| MoFEMErrorCode | loopChildren (const string &fe_name, ForcesAndSourcesCore *child_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy) |
| User calls this function to loop over parent elements. This function calls finite element with its operator to do calculations. | |
| MoFEMErrorCode | loopRange (const string &fe_name, ForcesAndSourcesCore *range_fe, boost::shared_ptr< Range > fe_range, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy) |
| Iterate over range of elements. | |
Definition at line 597 of file ForcesAndSourcesCore.hpp.
| using MoFEM::ForcesAndSourcesCore::UserDataOperator::AdjCache = std::map<EntityHandle, std::vector<boost::weak_ptr<NumeredEntFiniteElement> >> |
Definition at line 994 of file ForcesAndSourcesCore.hpp.
Controls loop over entities on element.
For typical problem like Bubnov-Galerkin OPROW and OPCOL are the same. In more general case for example for non-square matrices columns and rows could have different numeration and/or different set of fields.
| Enumerator | |
|---|---|
| OPROW | operator doWork function is executed on FE rows |
| OPCOL | operator doWork function is executed on FE columns |
| OPROWCOL | operator doWork is executed on FE rows &columns |
| OPSPACE | operator do Work is execute on space data |
| OPLAST |
|
Definition at line 614 of file ForcesAndSourcesCore.hpp.
| ForcesAndSourcesCore::UserDataOperator::UserDataOperator | ( | const FieldSpace | space, |
| const char | type = OPSPACE, |
||
| const bool | symm = true |
||
| ) |
Constructor for operators working on finite element spaces.
This constructor is used when operators modify basis functions on approximation spaces. The operator runs for all data on the specified space without access to specific field data. Commonly used for:
| space | Field space to operate on (H1, HDIV, HCURL, L2, etc.) |
| type | Operator type (OPSPACE, OPROW, OPCOL, OPROWCOL) |
| symm | Whether the operator maintains matrix symmetry (default: true) |
Definition at line 2125 of file ForcesAndSourcesCore.cpp.
| ForcesAndSourcesCore::UserDataOperator::UserDataOperator | ( | const std::string | field_name, |
| const char | type, | ||
| const bool | symm = true |
||
| ) |
Constructor for operators working on a single field.
This constructor creates operators that work with data from a specific field. Used for operations like:
| field_name | Name of the field to operate on |
| type | Operator type:
|
| symm | Whether the operator maintains matrix symmetry (default: true) |
Definition at line 2130 of file ForcesAndSourcesCore.cpp.
| ForcesAndSourcesCore::UserDataOperator::UserDataOperator | ( | const std::string | row_field_name, |
| const std::string | col_field_name, | ||
| const char | type, | ||
| const bool | symm = true |
||
| ) |
Constructor for operators working on two fields (bilinear forms)
This constructor creates operators that couple two different fields, essential for:
| row_field_name | Name of the field for test functions (rows) |
| col_field_name | Name of the field for trial functions (columns) |
| type | Operator type (typically OPROWCOL for coupling) |
| symm | Whether the operator maintains matrix symmetry (default: true) Note: Coupling between different fields is often non-symmetric |
Definition at line 2135 of file ForcesAndSourcesCore.cpp.
|
inline |
Add operator type.
Definition at line 1170 of file ForcesAndSourcesCore.hpp.
|
inline |
Gauss points and weight, matrix (nb. of points x 3)
Column 0-2 integration points coordinate x, y and z, respectively. At rows are integration points.
Definition at line 1383 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1187 of file ForcesAndSourcesCore.hpp.
|
inline |
Get dimension of finite element.
Definition at line 1126 of file ForcesAndSourcesCore.hpp.
|
inline |
Return finite element entity handle.
Definition at line 1122 of file ForcesAndSourcesCore.hpp.
|
inline |
Return raw pointer to Finite Element Method object.
Definition at line 1160 of file ForcesAndSourcesCore.hpp.
|
inline |
Get name of the element.
Definition at line 1182 of file ForcesAndSourcesCore.hpp.
|
inline |
Get dimension of finite element.
Definition at line 1130 of file ForcesAndSourcesCore.hpp.
|
inline |
Get integration weights.
Definition at line 1358 of file ForcesAndSourcesCore.hpp.
|
inline |
Get coordinates at integration points assuming linear geometry.
Definition at line 1387 of file ForcesAndSourcesCore.hpp.
|
inline |
matrix of integration (Gauss) points for Volume Element
For triangle: columns 0,1 are x,y coordinates respectively and column 2 is a weight value for example getGaussPts()(1,13) returns y coordinate of 13th Gauss point on particular volume element
For tetrahedron: columns 0,1,2 are x,y,z coordinates respectively and column 3 is a weight value for example getGaussPts()(1,13) returns y coordinate of 13th Gauss point on particular volume element
Definition at line 1354 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1214 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1222 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1192 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1206 of file ForcesAndSourcesCore.hpp.
|
inline |
get size of elements in the loop
Definition at line 1178 of file ForcesAndSourcesCore.hpp.
|
inline |
get measure of element
Definition at line 1397 of file ForcesAndSourcesCore.hpp.
|
inline |
get measure of element
Definition at line 1393 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1096 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1097 of file ForcesAndSourcesCore.hpp.
|
inline |
get number of finite element in the loop
Definition at line 1174 of file ForcesAndSourcesCore.hpp.
|
inline |
Get the number of nodes on finite element.
Definition at line 1156 of file ForcesAndSourcesCore.hpp.
|
inline |
Return raw pointer to NumeredEntFiniteElement.
Definition at line 1118 of file ForcesAndSourcesCore.hpp.
|
inline |
Get operator types.
Definition at line 1164 of file ForcesAndSourcesCore.hpp.
| MoFEMErrorCode ForcesAndSourcesCore::UserDataOperator::getProblemColIndices | ( | const std::string | filed_name, |
| const EntityType | type, | ||
| const int | side, | ||
| VectorInt & | indices | ||
| ) | const |
Get col indices.
Field could be or not declared for this element but is declared for problem
| field_name | |
| type | entity type |
| side | side number, any number if type is MBVERTEX |
NOTE: Using those indices to assemble matrix will result in error if new non-zero values need to be created.
Definition at line 1701 of file ForcesAndSourcesCore.cpp.
| MoFEMErrorCode ForcesAndSourcesCore::UserDataOperator::getProblemRowIndices | ( | const std::string | filed_name, |
| const EntityType | type, | ||
| const int | side, | ||
| VectorInt & | indices | ||
| ) | const |
Get row indices.
Field could be or not declared for this element but is declared for problem
| field_name | |
| type | entity type |
| side | side number, any number if type is MBVERTEX |
NOTE: Using those indices to assemble matrix will result in error if new non-zero values need to be created.
Definition at line 1684 of file ForcesAndSourcesCore.cpp.
|
inline |
Definition at line 1369 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1379 of file ForcesAndSourcesCore.hpp.
|
inline |
Get the side entity.
| side_number | |
| type |
Definition at line 1148 of file ForcesAndSourcesCore.hpp.
|
inline |
Get the side number pointer.
| side_number | |
| type |
Definition at line 1135 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1374 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1246 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1254 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1197 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1230 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1238 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1294 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1334 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1344 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1302 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1202 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1286 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1310 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1318 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1326 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1262 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1270 of file ForcesAndSourcesCore.hpp.
|
inline |
Definition at line 1278 of file ForcesAndSourcesCore.hpp.
| MoFEMErrorCode ForcesAndSourcesCore::UserDataOperator::loopChildren | ( | const string & | fe_name, |
| ForcesAndSourcesCore * | child_fe, | ||
| const int | verb = QUIET, |
||
| const LogManager::SeverityLevel | sev = Sev::noisy |
||
| ) |
User calls this function to loop over parent elements. This function calls finite element with its operator to do calculations.
| fe_name | |
| child_fe | |
| verb | |
| sev |
Definition at line 1960 of file ForcesAndSourcesCore.cpp.
| MoFEMErrorCode ForcesAndSourcesCore::UserDataOperator::loopParent | ( | const string & | fe_name, |
| ForcesAndSourcesCore * | parent_fe, | ||
| const int | verb = QUIET, |
||
| const LogManager::SeverityLevel | sev = Sev::noisy |
||
| ) |
User calls this function to loop over parent elements. This function calls finite element with its operator to do calculations.
| fe_name | |
| parent_fe | |
| verb | |
| sev |
Definition at line 1911 of file ForcesAndSourcesCore.cpp.
| MoFEMErrorCode ForcesAndSourcesCore::UserDataOperator::loopRange | ( | const string & | fe_name, |
| ForcesAndSourcesCore * | range_fe, | ||
| boost::shared_ptr< Range > | fe_range, | ||
| const int | verb = QUIET, |
||
| const LogManager::SeverityLevel | sev = Sev::noisy |
||
| ) |
Iterate over range of elements.
| fe_name | |
| range_fe | |
| fe_range | |
| verb | |
| sev |
Definition at line 2041 of file ForcesAndSourcesCore.cpp.
| MoFEMErrorCode ForcesAndSourcesCore::UserDataOperator::loopSide | ( | const string & | fe_name, |
| ForcesAndSourcesCore * | side_fe, | ||
| const size_t | dim, | ||
| const EntityHandle | ent_for_side = 0, |
||
| boost::shared_ptr< Range > | fe_range = nullptr, |
||
| const int | verb = QUIET, |
||
| const LogManager::SeverityLevel | sev = Sev::noisy, |
||
| AdjCache * | adj_cache = nullptr |
||
| ) |
User calls this function to loop over elements on the side of face. This function calls finite element with its operator to do calculations.
| fe_name | name of the side element |
| side_fe | pointer to the side element instance |
| dim | dimension the of side element |
| ent_for_side | entity handle for which adjacent volume or face will be accessed |
| verb | |
| sev | |
| adj_cache |
Definition at line 1732 of file ForcesAndSourcesCore.cpp.
| MoFEMErrorCode ForcesAndSourcesCore::UserDataOperator::loopThis | ( | const string & | fe_name, |
| ForcesAndSourcesCore * | this_fe, | ||
| const int | verb = QUIET, |
||
| const LogManager::SeverityLevel | sev = Sev::noisy |
||
| ) |
User calls this function to loop over the same element using a different set of integration points. This function calls finite element with its operator to do calculations.
| fe_name | |
| this_fe | |
| verb | |
| sev |
Definition at line 1842 of file ForcesAndSourcesCore.cpp.
|
inline |
Set operator type.
| Operator | type |
Definition at line 1166 of file ForcesAndSourcesCore.hpp.
|
protectedvirtual |
Reimplemented in MoFEM::EdgeElementForcesAndSourcesCore::UserDataOperator, MoFEM::FaceElementForcesAndSourcesCore::UserDataOperator, MoFEM::FaceElementForcesAndSourcesCoreOnSide::UserDataOperator, MoFEM::FatPrismElementForcesAndSourcesCore::UserDataOperator, MoFEM::FlatPrismElementForcesAndSourcesCore::UserDataOperator, MoFEM::VertexElementForcesAndSourcesCore::UserDataOperator, MoFEM::VolumeElementForcesAndSourcesCore::UserDataOperator, and MoFEM::VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator.
Definition at line 2174 of file ForcesAndSourcesCore.cpp.
|
friend |
Definition at line 1111 of file ForcesAndSourcesCore.hpp.
|
friend |
Definition at line 1109 of file ForcesAndSourcesCore.hpp.
|
friend |
Definition at line 1110 of file ForcesAndSourcesCore.hpp.
|
friend |
Definition at line 1108 of file ForcesAndSourcesCore.hpp.
| std::string MoFEM::ForcesAndSourcesCore::UserDataOperator::colFieldName |
Definition at line 626 of file ForcesAndSourcesCore.hpp.
| char MoFEM::ForcesAndSourcesCore::UserDataOperator::opType |
Definition at line 624 of file ForcesAndSourcesCore.hpp.
|
static |
Definition at line 622 of file ForcesAndSourcesCore.hpp.
|
protected |
Definition at line 1103 of file ForcesAndSourcesCore.hpp.
| std::string MoFEM::ForcesAndSourcesCore::UserDataOperator::rowFieldName |
Definition at line 625 of file ForcesAndSourcesCore.hpp.
| FieldSpace MoFEM::ForcesAndSourcesCore::UserDataOperator::sPace |
Definition at line 627 of file ForcesAndSourcesCore.hpp.