58 template <
int DIM = -1>
61 template <
int DIM = -1>
64 template <
int DIM = -1>
67 template <
int DIM = -1>
70 template <
int DIM = -1>
73 template <
int DIM = -1>
76 template <
int DIM = -1>
79 template <
int DIM = -1>
82 template <
int DIM = -1>
92 template <
int DIM = -1>
102 template <
int DIM = -1>
112 template <
int DIM = -1>
122 template <
int DIM = -1>
131 template <
int DIM = -1>
141 template <
int DIM = -1>
151 template <
int DIM = -1>
161 template <
int DIM = -1>
162 inline boost::ptr_vector<UserDataOperator> &
172 template <
int DIM = -1>
173 inline boost::ptr_vector<UserDataOperator> &
266 boost::shared_ptr<FEMethod>
268 boost::shared_ptr<FEMethod>
270 boost::shared_ptr<FEMethod>
272 boost::shared_ptr<FEMethod>
274 boost::shared_ptr<FEMethod>
276 boost::shared_ptr<FEMethod>
279 boost::shared_ptr<FEMethod>
281 boost::shared_ptr<FEMethod>
284 boost::shared_ptr<FEMethod>
289 inline boost::shared_ptr<FEMethod> &
293 inline boost::shared_ptr<FEMethod> &
298boost::shared_ptr<FEMethod> &
300 static_assert(DIM == 1 || DIM == 2 || DIM == 3,
"not implemented");
301 fe = boost::make_shared<FEMethod>();
306inline boost::shared_ptr<FEMethod> &
307PipelineManager::createDomainFEPipeline<3>(boost::shared_ptr<FEMethod> &fe) {
309 fe = boost::make_shared<VolEle>(
cOre);
314inline boost::shared_ptr<FEMethod> &
315PipelineManager::createDomainFEPipeline<2>(boost::shared_ptr<FEMethod> &fe) {
317 fe = boost::make_shared<FaceEle>(
cOre);
322inline boost::shared_ptr<FEMethod> &
323PipelineManager::createDomainFEPipeline<1>(boost::shared_ptr<FEMethod> &fe) {
325 fe = boost::make_shared<EdgeEle>(
cOre);
330boost::shared_ptr<FEMethod> &
332 static_assert(DIM == 1 || DIM == 2 || DIM == 3,
"not implemented");
333 fe = boost::make_shared<FEMethod>();
338inline boost::shared_ptr<FEMethod> &
339PipelineManager::createBoundaryFEPipeline<3>(boost::shared_ptr<FEMethod> &fe) {
341 fe = boost::make_shared<FaceElementForcesAndSourcesCore>(
cOre);
346inline boost::shared_ptr<FEMethod> &
347PipelineManager::createBoundaryFEPipeline<2>(boost::shared_ptr<FEMethod> &fe) {
349 fe = boost::make_shared<EdgeEle>(
cOre);
354inline boost::shared_ptr<FEMethod> &
355PipelineManager::createBoundaryFEPipeline<1>(boost::shared_ptr<FEMethod> &fe) {
357 fe = boost::make_shared<VertexElementForcesAndSourcesCore>(
cOre);
401 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
403 ->getRuleHook = rule;
413 return setDomainLhsIntegrationRule<1>(rule);
415 return setDomainLhsIntegrationRule<2>(rule);
417 return setDomainLhsIntegrationRule<3>(rule);
428 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
430 ->getRuleHook = rule;
440 return setDomainRhsIntegrationRule<1>(rule);
442 return setDomainRhsIntegrationRule<2>(rule);
444 return setDomainRhsIntegrationRule<3>(rule);
455 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
457 ->getRuleHook = rule;
467 return setBoundaryLhsIntegrationRule<1>(rule);
469 return setBoundaryLhsIntegrationRule<2>(rule);
471 return setBoundaryLhsIntegrationRule<3>(rule);
482 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
484 ->getRuleHook = rule;
494 return setBoundaryRhsIntegrationRule<1>(rule);
496 return setBoundaryRhsIntegrationRule<2>(rule);
498 return setBoundaryRhsIntegrationRule<3>(rule);
509 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
511 ->getRuleHook = rule;
521 return setSkeletonLhsIntegrationRule<1>(rule);
523 return setSkeletonLhsIntegrationRule<2>(rule);
525 return setSkeletonLhsIntegrationRule<3>(rule);
536 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
538 ->getRuleHook = rule;
548 return setSkeletonRhsIntegrationRule<1>(rule);
550 return setSkeletonRhsIntegrationRule<2>(rule);
552 return setSkeletonRhsIntegrationRule<3>(rule);
563 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
565 ->getRuleHook = rule;
575 return setDomainExplicitRhsIntegrationRule<1>(rule);
577 return setDomainExplicitRhsIntegrationRule<2>(rule);
579 return setDomainExplicitRhsIntegrationRule<3>(rule);
590 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
592 ->getRuleHook = rule;
603 return setBoundaryExplicitRhsIntegrationRule<1>(rule);
605 return setBoundaryExplicitRhsIntegrationRule<2>(rule);
607 return setBoundaryExplicitRhsIntegrationRule<3>(rule);
618 boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
620 ->getRuleHook = rule;
631 return setSkeletonExplicitRhsIntegrationRule<1>(rule);
633 return setSkeletonExplicitRhsIntegrationRule<2>(rule);
635 return setSkeletonExplicitRhsIntegrationRule<3>(rule);
643boost::ptr_vector<PipelineManager::UserDataOperator> &
645 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
651inline boost::ptr_vector<PipelineManager::UserDataOperator> &
655 return getOpDomainLhsPipeline<1>();
657 return getOpDomainLhsPipeline<2>();
663 return getOpDomainLhsPipeline<3>();
667boost::ptr_vector<PipelineManager::UserDataOperator> &
669 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
675inline boost::ptr_vector<PipelineManager::UserDataOperator> &
679 return getOpDomainRhsPipeline<1>();
681 return getOpDomainRhsPipeline<2>();
687 return getOpDomainRhsPipeline<3>();
691boost::ptr_vector<PipelineManager::UserDataOperator> &
693 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
699inline boost::ptr_vector<PipelineManager::UserDataOperator> &
703 return getOpBoundaryLhsPipeline<1>();
705 return getOpBoundaryLhsPipeline<2>();
711 return getOpBoundaryLhsPipeline<3>();
715boost::ptr_vector<PipelineManager::UserDataOperator> &
717 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
723inline boost::ptr_vector<PipelineManager::UserDataOperator> &
727 return getOpBoundaryRhsPipeline<1>();
729 return getOpBoundaryRhsPipeline<2>();
735 return getOpBoundaryRhsPipeline<3>();
739boost::ptr_vector<PipelineManager::UserDataOperator> &
741 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
747inline boost::ptr_vector<PipelineManager::UserDataOperator> &
751 return getOpSkeletonLhsPipeline<1>();
753 return getOpSkeletonLhsPipeline<2>();
759 return getOpSkeletonLhsPipeline<3>();
763boost::ptr_vector<PipelineManager::UserDataOperator> &
765 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
771inline boost::ptr_vector<PipelineManager::UserDataOperator> &
775 return getOpSkeletonRhsPipeline<1>();
777 return getOpSkeletonRhsPipeline<2>();
783 return getOpSkeletonRhsPipeline<3>();
787boost::ptr_vector<PipelineManager::UserDataOperator> &
789 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
795inline boost::ptr_vector<PipelineManager::UserDataOperator> &
799 return getOpDomainExplicitRhsPipeline<1>();
801 return getOpDomainExplicitRhsPipeline<2>();
807 return getOpDomainExplicitRhsPipeline<3>();
811boost::ptr_vector<PipelineManager::UserDataOperator> &
813 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
819inline boost::ptr_vector<PipelineManager::UserDataOperator> &
823 return getOpBoundaryExplicitRhsPipeline<1>();
825 return getOpBoundaryExplicitRhsPipeline<2>();
831 return getOpBoundaryExplicitRhsPipeline<3>();
835boost::ptr_vector<PipelineManager::UserDataOperator> &
837 return boost::dynamic_pointer_cast<ForcesAndSourcesCore>(
843inline boost::ptr_vector<PipelineManager::UserDataOperator> &
847 return getOpSkeletonExplicitRhsPipeline<1>();
849 return getOpSkeletonExplicitRhsPipeline<2>();
855 return getOpSkeletonExplicitRhsPipeline<3>();
#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 THROW_MESSAGE(msg)
Throw MoFEM exception.
boost::ptr_vector< UserDataOperator > & getOpSkeletonExplicitRhsPipeline()
Get the Op Skeleton Rhs Pipeline object for implicit-explicit G term.
MoFEMErrorCode loopFiniteElements(SmartPetscObj< DM > dm=nullptr)
Iterate finite elements.
SmartPetscObj< SNES > createSNES(SmartPetscObj< DM > dm=nullptr)
Create SNES (nonlinear) solver.
boost::ptr_vector< UserDataOperator > & getOpDomainExplicitRhsPipeline()
Get the Op Domain Rhs Pipeline object for implicit-explicit G term.
boost::ptr_vector< UserDataOperator > & getOpDomainLhsPipeline()
Get the Op Domain Lhs Pipeline object.
boost::ptr_vector< UserDataOperator > & getOpBoundaryExplicitRhsPipeline()
Get the Op Bondary Rhs Pipeline object for implicit-explicit G term.
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_vector< UserDataOperator > & getOpBoundaryLhsPipeline()
Get the Op Boundary Lhs Pipeline object.
SmartPetscObj< KSP > createKSP(SmartPetscObj< DM > dm=nullptr)
Create KSP (linear) solver.
boost::ptr_vector< UserDataOperator > & getOpSkeletonRhsPipeline()
Get the Op Skeleton Rhs Pipeline object.
boost::ptr_vector< UserDataOperator > & getOpBoundaryRhsPipeline()
Get the Op Boundary Rhs Pipeline object.
SmartPetscObj< TS > createTSIMEX(SmartPetscObj< DM > dm=nullptr)
Create TS (time) implicit-explicit solver.
SmartPetscObj< TS > createTSEX(SmartPetscObj< DM > dm=nullptr)
Create TS (time) explit solver.
boost::ptr_vector< UserDataOperator > & getOpDomainRhsPipeline()
Get the Op Domain Rhs Pipeline object.
boost::ptr_vector< UserDataOperator > & getOpSkeletonLhsPipeline()
Get the Op Skeleton Lhs 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.
boost::function< int(int order_row, int order_col, int order_data)> RuleHookFun
PipelineManager interface.
boost::shared_ptr< FEMethod > feBoundaryRhs
Element to assemble RHS side by integrating boundary.
boost::shared_ptr< FEMethod > & getDomainRhsFE()
MoFEMErrorCode setSkeletonLhsIntegrationRule(RuleHookFun rule)
MoFEM::VolumeElementForcesAndSourcesCore VolEle
boost::shared_ptr< FEMethod > feDomainExplicitRhs
Element to assemble explict Rhs for IMEX solver.
DEPRECATED auto createTS2(SmartPetscObj< DM > dm=nullptr)
boost::shared_ptr< FEMethod > & getDomainLhsFE()
MoFEM::ForcesAndSourcesCore::RuleHookFun RuleHookFun
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 > feSkeletonExplicitRhs
SmartPetscObj< TS > createTS(const TSType type, SmartPetscObj< DM > dm=nullptr)
create TS (time) solver
boost::shared_ptr< FEMethod > & getBoundaryLhsFE()
boost::shared_ptr< FEMethod > & getSkeletonLhsFE()
MoFEMErrorCode setDomainRhsIntegrationRule(RuleHookFun rule)
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)
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 > & getDomainExplicitRhsFE()
boost::shared_ptr< FEMethod > & getBoundaryRhsFE()
boost::shared_ptr< FEMethod > feDomainRhs
Element to assemble RHS side by integrating domain.
boost::shared_ptr< FEMethod > & getSkeletonExplicitRhsFE()
MoFEMErrorCode setDomainLhsIntegrationRule(RuleHookFun rule)
DEPRECATED auto createTS(SmartPetscObj< DM > dm=nullptr)
boost::shared_ptr< FEMethod > & getBoundaryExplicitRhsFE()
MoFEMErrorCode setSkeletonRhsIntegrationRule(RuleHookFun rule)
boost::shared_ptr< FEMethod > feBoundaryExplicitRhs
boost::shared_ptr< FEMethod > & createDomainFEPipeline(boost::shared_ptr< FEMethod > &fe)
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
Volume finite element base.
Base volume element used to integrate on skeleton.