91 template <
typename T = ForcesAndSourcesCore>
94 template <
typename T = ForcesAndSourcesCore>
97 template <
typename T = ForcesAndSourcesCore>
100 template <
int DIM = -1>
103 template <
int DIM = -1>
106 template <
int DIM = -1>
109 template <
int DIM = -1>
112 template <
int DIM = -1>
115 template <
int DIM = -1>
118 template <
int DIM = -1>
121 template <
int DIM = -1>
124 template <
int DIM = -1>
134 template <
int DIM = -1>
144 template <
int DIM = -1>
154 template <
int DIM = -1>
164 template <
int DIM = -1>
173 template <
int DIM = -1>
183 template <
int DIM = -1>
193 template <
int DIM = -1>
203 template <
int DIM = -1>
213 template <
int DIM = -1>
327 boost::shared_ptr<FEMethod>
329 boost::shared_ptr<FEMethod>
331 boost::shared_ptr<FEMethod>
333 boost::shared_ptr<FEMethod>
335 boost::shared_ptr<FEMethod>
337 boost::shared_ptr<FEMethod>
340 boost::shared_ptr<FEMethod>
342 boost::shared_ptr<FEMethod>
345 boost::shared_ptr<FEMethod>
358 inline boost::shared_ptr<FEMethod> &
362 inline boost::shared_ptr<FEMethod> &
365 inline boost::shared_ptr<FEMethod> &
373boost::shared_ptr<FEMethod> &
375 static_assert(DIM == 1 || DIM == 2 || DIM == 3,
"not implemented");
376 fe = boost::make_shared<FEMethod>();
381inline boost::shared_ptr<FEMethod> &
384 fe = boost::make_shared<VolEle>(
cOre);
389inline boost::shared_ptr<FEMethod> &
392 fe = boost::make_shared<FaceEle>(
cOre);
397inline boost::shared_ptr<FEMethod> &
400 fe = boost::make_shared<EdgeEle>(
cOre);
405inline boost::shared_ptr<FEMethod> &
407 switch (cOre.getInterface<Simple>()->getDim()) {
409 return createDomainFEPipeline<1>(fe);
411 return createDomainFEPipeline<2>(fe);
413 return createDomainFEPipeline<3>(fe);
420boost::shared_ptr<FEMethod> &
422 static_assert(DIM == 1 || DIM == 2 || DIM == 3,
"not implemented");
423 fe = boost::make_shared<FEMethod>();
428inline boost::shared_ptr<FEMethod> &
431 fe = boost::make_shared<FaceElementForcesAndSourcesCore>(
cOre);
436inline boost::shared_ptr<FEMethod> &
439 fe = boost::make_shared<EdgeEle>(
cOre);
444inline boost::shared_ptr<FEMethod> &
447 fe = boost::make_shared<VertexElementForcesAndSourcesCore>(
cOre);
500inline boost::shared_ptr<FEMethod> &
504 return createBoundaryFEPipeline<1>(fe);
506 return createBoundaryFEPipeline<2>(fe);
508 return createBoundaryFEPipeline<3>(fe);
515 return boost::dynamic_pointer_cast<T>(
520 return boost::dynamic_pointer_cast<T>(
525 return boost::dynamic_pointer_cast<T>(
529template <
typename T,
int DIM>
531 return boost::dynamic_pointer_cast<T>(
535template <
typename T,
int DIM>
537 return boost::dynamic_pointer_cast<T>(
542 return boost::dynamic_pointer_cast<T>(
546template <
typename T,
int DIM>
548 return boost::dynamic_pointer_cast<T>(
552template <
typename T,
int DIM>
554 return boost::dynamic_pointer_cast<T>(
558template <
typename T,
int DIM>
560 return boost::dynamic_pointer_cast<T>(
573 return boost::dynamic_pointer_cast<T>(
581 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
583 ->getRuleHook = rule;
608 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
610 ->getRuleHook = rule;
635 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
637 ->getRuleHook = rule;
662 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
664 ->getRuleHook = rule;
689 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
691 ->getRuleHook = rule;
716 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
718 ->getRuleHook = rule;
743 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
745 ->getRuleHook = rule;
770 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
772 ->getRuleHook = rule;
798 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
800 ->getRuleHook = rule;
823boost::ptr_deque<PipelineManager::UserDataOperator> &
825 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
831inline boost::ptr_deque<PipelineManager::UserDataOperator> &
835 return getOpDomainLhsPipeline<1>();
837 return getOpDomainLhsPipeline<2>();
843 return getOpDomainLhsPipeline<3>();
847boost::ptr_deque<PipelineManager::UserDataOperator> &
849 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
855inline boost::ptr_deque<PipelineManager::UserDataOperator> &
859 return getOpDomainRhsPipeline<1>();
861 return getOpDomainRhsPipeline<2>();
867 return getOpDomainRhsPipeline<3>();
871boost::ptr_deque<PipelineManager::UserDataOperator> &
873 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
879inline boost::ptr_deque<PipelineManager::UserDataOperator> &
883 return getOpBoundaryLhsPipeline<1>();
885 return getOpBoundaryLhsPipeline<2>();
891 return getOpBoundaryLhsPipeline<3>();
895boost::ptr_deque<PipelineManager::UserDataOperator> &
897 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
903inline boost::ptr_deque<PipelineManager::UserDataOperator> &
907 return getOpBoundaryRhsPipeline<1>();
909 return getOpBoundaryRhsPipeline<2>();
915 return getOpBoundaryRhsPipeline<3>();
919boost::ptr_deque<PipelineManager::UserDataOperator> &
921 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
927inline boost::ptr_deque<PipelineManager::UserDataOperator> &
931 return getOpSkeletonLhsPipeline<1>();
933 return getOpSkeletonLhsPipeline<2>();
939 return getOpSkeletonLhsPipeline<3>();
943boost::ptr_deque<PipelineManager::UserDataOperator> &
945 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
951inline boost::ptr_deque<PipelineManager::UserDataOperator> &
955 return getOpSkeletonRhsPipeline<1>();
957 return getOpSkeletonRhsPipeline<2>();
963 return getOpSkeletonRhsPipeline<3>();
967boost::ptr_deque<PipelineManager::UserDataOperator> &
969 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
975inline boost::ptr_deque<PipelineManager::UserDataOperator> &
979 return getOpDomainExplicitRhsPipeline<1>();
981 return getOpDomainExplicitRhsPipeline<2>();
987 return getOpDomainExplicitRhsPipeline<3>();
991boost::ptr_deque<PipelineManager::UserDataOperator> &
993 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
999inline boost::ptr_deque<PipelineManager::UserDataOperator> &
1003 return getOpBoundaryExplicitRhsPipeline<1>();
1005 return getOpBoundaryExplicitRhsPipeline<2>();
1011 return getOpBoundaryExplicitRhsPipeline<3>();
1015boost::ptr_deque<PipelineManager::UserDataOperator> &
1017 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
1023inline boost::ptr_deque<PipelineManager::UserDataOperator> &
1027 return getOpSkeletonExplicitRhsPipeline<1>();
1029 return getOpSkeletonExplicitRhsPipeline<2>();
1035 return getOpSkeletonExplicitRhsPipeline<3>();
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#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 MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
boost::ptr_deque< UserDataOperator > & getOpBoundaryExplicitRhsPipeline()
Get the Op Bondary Rhs Pipeline object for implicit-explicit G term.
boost::ptr_deque< UserDataOperator > & getOpDomainExplicitRhsPipeline()
Get the Op Domain Rhs Pipeline object for implicit-explicit G term.
MoFEMErrorCode loopFiniteElements(SmartPetscObj< DM > dm=nullptr)
Iterate finite elements.
boost::ptr_deque< UserDataOperator > & getOpSkeletonExplicitRhsPipeline()
Get the Op Skeleton Rhs Pipeline object for implicit-explicit G term.
boost::ptr_deque< UserDataOperator > & getOpDomainLhsPipeline()
Get the Op Domain Lhs Pipeline object.
SmartPetscObj< SNES > createSNES(SmartPetscObj< DM > dm=nullptr)
Create SNES (nonlinear) solver.
boost::ptr_deque< UserDataOperator > & getOpSkeletonLhsPipeline()
Get the Op Skeleton Lhs Pipeline object.
SmartPetscObj< TS > createTSIM(SmartPetscObj< DM > dm=nullptr)
Create TS (time) implicit solver.
SmartPetscObj< TS > createTSIM2(SmartPetscObj< DM > dm=nullptr)
Create TS (time) solver for second order equation in time.
boost::ptr_deque< UserDataOperator > & getOpBoundaryLhsPipeline()
Get the Op Boundary Lhs Pipeline object.
SmartPetscObj< KSP > createKSP(SmartPetscObj< DM > dm=nullptr)
Create KSP (linear) solver.
boost::ptr_deque< UserDataOperator > & getOpBoundaryRhsPipeline()
Get the Op Boundary Rhs Pipeline object.
SmartPetscObj< TS > createTSIMEX(SmartPetscObj< DM > dm=nullptr)
Create TS (time) implicit-explicit solver.
boost::ptr_deque< UserDataOperator > & getOpSkeletonRhsPipeline()
Get the Op Skeleton Rhs Pipeline object.
SmartPetscObj< TS > createTSEX(SmartPetscObj< DM > dm=nullptr)
Create TS (time) explit solver.
boost::ptr_deque< UserDataOperator > & getOpDomainRhsPipeline()
Get the Op Domain Rhs Pipeline object.
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
Base face element used to integrate on skeleton.
Base face element used to integrate on skeleton.
Base face element used to integrate on skeleton.
structure to get information form mofem into EntitiesFieldData
boost::function< int(int order_row, int order_col, int order_data)> RuleHookFun
friend class UserDataOperator
PipelineManager interface.
boost::shared_ptr< FEMethod > feBoundaryRhs
Element to assemble RHS side by integrating boundary.
boost::shared_ptr< FEMethod > & getDomainRhsFE()
boost::ptr_deque< UserDataOperator > & getOpMeshsetRhsPipeline()
Get the Op Meshset Rhs Pipeline object.
MoFEMErrorCode setSkeletonLhsIntegrationRule(RuleHookFun rule)
auto getCastDomainLhsFE()
MoFEM::VolumeElementForcesAndSourcesCore VolEle
auto getCastBoundaryExplicitRhsFE()
boost::shared_ptr< FEMethod > feDomainExplicitRhs
Element to assemble explict Rhs for IMEX solver.
auto getCastMeshsetExplicitRhsFE()
boost::shared_ptr< FEMethod > feMeshsetLhs
DEPRECATED auto createTS2(SmartPetscObj< DM > dm=nullptr)
boost::shared_ptr< FEMethod > & getDomainLhsFE()
auto getCastBoundaryLhsFE()
auto getCastSkeletonRhsFE()
MoFEM::ForcesAndSourcesCore::RuleHookFun RuleHookFun
boost::ptr_deque< UserDataOperator > & getOpMeshsetExplicitRhsPipeline()
Get the Op Meshset Explicit Rhs Pipeline object.
boost::shared_ptr< FEMethod > feBoundaryLhs
Element to assemble LHS side by integrating boundary.
boost::shared_ptr< FEMethod > & getSkeletonRhsFE()
MoFEMErrorCode setBoundaryExplicitRhsIntegrationRule(RuleHookFun rule)
MoFEM::FaceElementForcesAndSourcesCore FaceEle
boost::shared_ptr< FEMethod > & getMeshsetLhsFE()
boost::shared_ptr< FEMethod > feSkeletonExplicitRhs
boost::shared_ptr< FEMethod > feMeshsetExplicitRhs
SmartPetscObj< TS > createTS(const TSType type, SmartPetscObj< DM > dm=nullptr)
create TS (time) solver
auto getCastSkeletonLhsFE()
boost::shared_ptr< FEMethod > & getBoundaryLhsFE()
boost::shared_ptr< FEMethod > & getSkeletonLhsFE()
MoFEMErrorCode setDomainRhsIntegrationRule(RuleHookFun rule)
auto getCastSkeletonExplicitRhsFE()
MoFEMErrorCode setBoundaryLhsIntegrationRule(RuleHookFun rule)
boost::shared_ptr< FEMethod > feSkeletonLhs
Element to assemble LHS side by integrating skeleton.
boost::shared_ptr< FEMethod > & createBoundaryFEPipeline(boost::shared_ptr< FEMethod > &fe)
auto getCastDomainExplicitRhsFE()
MoFEMErrorCode setBoundaryRhsIntegrationRule(RuleHookFun rule)
MoFEMErrorCode setDomainExplicitRhsIntegrationRule(RuleHookFun rule)
boost::shared_ptr< FEMethod > feDomainLhs
Element to assemble LHS side by integrating domain.
boost::shared_ptr< FEMethod > feSkeletonRhs
Element to assemble RHS side by integrating skeleton.
MoFEM::EdgeElementForcesAndSourcesCore EdgeEle
boost::shared_ptr< FEMethod > feMeshsetRhs
boost::shared_ptr< FEMethod > & getMeshsetRhsFE()
boost::shared_ptr< FEMethod > & getDomainExplicitRhsFE()
boost::shared_ptr< FEMethod > & getBoundaryRhsFE()
boost::shared_ptr< FEMethod > feDomainRhs
Element to assemble RHS side by integrating domain.
boost::ptr_deque< UserDataOperator > & getOpMeshsetLhsPipeline()
Get the Op Meshset Lhs Pipeline object.
boost::shared_ptr< FEMethod > & createMeshsetFEPipeline(boost::shared_ptr< FEMethod > &fe)
boost::shared_ptr< FEMethod > & getSkeletonExplicitRhsFE()
MoFEMErrorCode setDomainLhsIntegrationRule(RuleHookFun rule)
auto getCastMeshsetRhsFE()
DEPRECATED auto createTS(SmartPetscObj< DM > dm=nullptr)
boost::shared_ptr< FEMethod > & getBoundaryExplicitRhsFE()
auto getCastMeshsetLhsFE()
auto getCastBoundaryRhsFE()
boost::shared_ptr< FEMethod > & getMeshsetExplicitRhsFE()
MoFEMErrorCode setSkeletonRhsIntegrationRule(RuleHookFun rule)
auto getCastDomainRhsFE()
boost::shared_ptr< FEMethod > feBoundaryExplicitRhs
boost::shared_ptr< FEMethod > & createDomainFEPipeline(boost::shared_ptr< FEMethod > &fe)
PipelineManager(const MoFEM::Core &core)
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, UnknownInterface **iface) const
MoFEMErrorCode setSkeletonExplicitRhsIntegrationRule(RuleHookFun rule)
Simple interface for fast problem set-up.
int getDim() const
Get the problem dimension.
intrusive_ptr for managing petsc objects
base class for all interface classes
Base volume element used to integrate on skeleton.
Volume finite element base.