35 #ifndef classfactory_h 36 #define classfactory_h 60 class GeneralBoundaryCondition;
64 class NonlocalBarrier;
66 class SparseNonLinearSystemNM;
68 class TopologyDescription;
72 class SparseLinearSystemNM;
74 class InitialCondition;
76 class NodalRecoveryModel;
77 class SparseGeneralEigenValueSystemNM;
78 class IntegrationRule;
79 class MaterialMappingAlgorithm;
80 class MesherInterface;
82 class LoadBalancerMonitor;
87 class NucleationCriterion;
88 class EnrichmentFunction;
89 class EnrichmentDomain;
91 class EnrichmentFront;
94 class FractureManager;
95 class FailureCriteriaStatus;
96 class FailureCriteria;
99 class ContactDefinition;
102 #define OOFEM_ATTR_UNUSED __attribute__((unused)) 104 #define OOFEM_ATTR_UNUSED 154 #define REGISTER_Element(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerElement(_IFT_ ## class ## _Name, elemCreator< class > ); 155 #define REGISTER_DofManager(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerDofManager(_IFT_ ## class ## _Name, dofmanCreator< class > ); 156 #define REGISTER_BoundaryCondition(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerBoundaryCondition(_IFT_ ## class ## _Name, bcCreator< class > ); 157 #define REGISTER_CrossSection(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerCrossSection(_IFT_ ## class ## _Name, csCreator< class > ); 158 #define REGISTER_Material(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerMaterial(_IFT_ ## class ## _Name, matCreator< class > ); 159 #define REGISTER_Material_Alt(class, altname) static bool __dummy_ ## class ## altname OOFEM_ATTR_UNUSED = GiveClassFactory().registerMaterial(#altname, matCreator< class > ); 160 #define REGISTER_EngngModel(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEngngModel(_IFT_ ## class ## _Name, engngCreator< class > ); 161 #define REGISTER_Function(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerFunction(_IFT_ ## class ## _Name, funcCreator< class > ); 162 #define REGISTER_NonlocalBarrier(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerNonlocalBarrier(_IFT_ ## class ## _Name, nlbCreator< class > ); 163 #define REGISTER_ExportModule(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerExportModule(_IFT_ ## class ## _Name, exportCreator< class > ); 164 #define REGISTER_SparseNonLinearSystemNM(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerSparseNonLinearSystemNM(_IFT_ ## class ## _Name, nonlinCreator< class > ); 165 #define REGISTER_InitModule(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerInitModule(_IFT_ ## class ## _Name, initCreator< class > ); 166 #define REGISTER_TopologyDescription(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerTopologyDescription(_IFT_ ## class ## _Name, topologyCreator< class > ); 167 #define REGISTER_LoadBalancerMonitor(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerLoadBalancerMonitor(_IFT_ ## class ## _Name, loadMonitorCreator< class > ); 168 #define REGISTER_LoadBalancer(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerLoadBalancer(_IFT_ ## class ## _Name, loadBalancerCreator< class > ); 171 #define REGISTER_SparseMtrx(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerSparseMtrx(type, sparseMtrxCreator< class > ); 172 #define REGISTER_SparseLinSolver(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerSparseLinSolver(type, sparseLinSolCreator< class > ); 173 #define REGISTER_ErrorEstimator(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerErrorEstimator(type, errEstCreator< class > ); 174 #define REGISTER_NodalRecoveryModel(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerNodalRecoveryModel(type, nrmCreator< class > ); 175 #define REGISTER_GeneralizedEigenValueSolver(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerGeneralizedEigenValueSolver(type, gesCreator< class > ); 176 #define REGISTER_Mesher(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerMesherInterface(type, mesherCreator< class > ); 177 #define REGISTER_MaterialMappingAlgorithm(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerMaterialMappingAlgorithm(type, mmaCreator< class > ); 179 #define REGISTER_XfemManager(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerXfemManager(_IFT_ ## class ## _Name, xManCreator< class > ); 180 #define REGISTER_EnrichmentItem(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEnrichmentItem(_IFT_ ## class ## _Name, enrichItemCreator< class > ); 181 #define REGISTER_NucleationCriterion(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerNucleationCriterion(_IFT_ ## class ## _Name, nucleationCritCreator< class > ); 182 #define REGISTER_EnrichmentFunction(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEnrichmentFunction(_IFT_ ## class ## _Name, enrichFuncCreator< class > ); 183 #define REGISTER_EnrichmentDomain(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEnrichmentDomain(_IFT_ ## class ## _Name, enrichmentDomainCreator< class > ); 184 #define REGISTER_Geometry(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerGeometry(_IFT_ ## class ## _Name, geometryCreator< class > ); 185 #define REGISTER_EnrichmentFront(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEnrichmentFront(_IFT_ ## class ## _Name, enrichFrontCreator< class > ); 186 #define REGISTER_PropagationLaw(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerPropagationLaw(_IFT_ ## class ## _Name, propagationLawCreator< class > ); 188 #define REGISTER_FailureCriteria(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerFailureCriteria(_IFT_ ## class ## _Name, failureCriteriaCreator< class > ); 189 #define REGISTER_FailureCriteriaStatus(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerFailureCriteriaStatus(_IFT_ ## class ## _Name, failureCriteriaCreator< class > ); 191 #define REGISTER_ContactManager(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerContactManager(_IFT_ ## class ## _Name, contactManCreator< class > ); 192 #define REGISTER_ContactDefinition(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerContactDefinition(_IFT_ ## class ## _Name, contactDefCreator< class > ); 193 #define REGISTER_Quasicontinuum(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerQuasicontinuum(_IFT_ ## class ## _Name, QuasicontinuumCreator< class > ); 208 std :: map < std :: string, Element * ( * )(int, Domain *) >
elemList;
210 std :: map < std :: string, DofManager * ( * )(int, Domain *) >
dofmanList;
212 std :: map < std :: string, GeneralBoundaryCondition * ( * )(int, Domain *) >
bcList;
214 std :: map < std :: string, CrossSection * ( * )(int, Domain *) >
csList;
216 std :: map < std :: string, Material * ( * )(int, Domain *) >
matList;
218 std :: map < std :: string, EngngModel * ( * )(int, EngngModel *) >
engngList;
220 std :: map < std :: string, Function * ( * )(int, Domain *) >
funcList;
222 std :: map < std :: string, NonlocalBarrier * ( * )(int, Domain *) >
nlbList;
224 std :: map < std :: string, ExportModule * ( * )(int, EngngModel *) >
exportList;
226 std :: map < std :: string, SparseNonLinearSystemNM * ( * )(Domain *, EngngModel *) >
nonlinList;
228 std :: map < std :: string, InitModule * ( * )(int, EngngModel *) >
initList;
230 std :: map < std :: string, TopologyDescription * ( * )(Domain *) >
topologyList;
235 std :: map < std :: string, LoadBalancerMonitor * ( * )(EngngModel *) >
loadMonitorList;
239 std :: map < dofType, Dof * ( * )(DofIDItem, DofManager *) >
dofList;
241 std :: map < ErrorEstimatorType, ErrorEstimator * ( * )(int, Domain *) >
errEstList;
243 std :: map < LinSystSolverType, SparseLinearSystemNM * ( * )(Domain *, EngngModel *) >
sparseLinSolList;
245 std :: map < NodalRecoveryModel :: NodalRecoveryModelType, NodalRecoveryModel * ( * )(Domain *) >
nodalRecoveryModelList;
255 std :: map < std :: string, EnrichmentItem * ( * )(int, XfemManager *, Domain *) >
enrichItemList;
259 std :: map < std :: string, EnrichmentFunction * ( * )(int, Domain *) >
enrichFuncList;
269 std :: map < std :: string, XfemManager * ( * )(Domain *) >
xManList;
278 std :: map < std :: string, ContactDefinition * ( * )(ContactManager *) >
contactDefList;
291 Element *createElement(
const char *name,
int num,
Domain *domain);
296 bool registerElement(
const char *name,
Element * ( *creator )(
int,
Domain * ) );
309 bool registerDofManager(
const char *name,
DofManager * ( *creator )(
int,
Domain * ) );
335 bool registerCrossSection(
const char *name,
CrossSection * ( *creator )(
int,
Domain * ) );
343 Material *createMaterial(
const char *name,
int num,
Domain *domain);
348 bool registerMaterial(
const char *name,
Material * ( *creator )(
int,
Domain * ) );
369 Function *createFunction(
const char *name,
int num,
Domain *domain);
374 bool registerFunction(
const char *name,
Function * ( *creator )(
int,
Domain * ) );
518 EnrichmentDomain *createEnrichmentDomain(
const char *name);
519 bool registerEnrichmentDomain(
const char *name, EnrichmentDomain * ( *creator )( ) );
522 bool registerEnrichmentFront(
const char *name,
EnrichmentFront * ( *creator )( ) );
525 bool registerPropagationLaw(
const char *name,
PropagationLaw * ( *creator )( ) );
528 bool registerGeometry(
const char *name,
BasicGeometry * ( *creator )( ) );
531 bool registerXfemManager(
const char *name,
XfemManager * ( *creator )(
Domain * ) );
561 bool registerLoadBalancer(
const char *name,
LoadBalancer * ( *creator )(
Domain * ) );
572 #endif // clasfactort_h PropagationLaw * propagationLawCreator()
GenEigvalSolverType
Types of general eigenvalue solvers.
LinSystSolverType
The values of this type should be related not to specific solvers, but more to specific packages that...
ErrorEstimator * errEstCreator(int n, Domain *d)
std::map< std::string, Element *(*)(int, Domain *) > elemList
Associative container containing element creators with element name as key.
std::map< std::string, LoadBalancer *(*)(Domain *) > loadBalancerList
Associative container containing load balancer creators.
std::map< std::string, ContactDefinition *(*)(ContactManager *) > contactDefList
Abstract class representing entity, which is included in the FE model using one (or more) global func...
std::map< std::string, CrossSection *(*)(int, Domain *) > csList
Associative container containing cross section creators with cross section name as key...
std::map< LinSystSolverType, SparseLinearSystemNM *(*)(Domain *, EngngModel *) > sparseLinSolList
Associative container containing sparse linear solver creators.
Abstract base class for all nonlocal barriers.
Class implementing general initial condition.
BasicGeometry * geometryCreator()
Base class for all matrices stored in sparse format.
Function * funcCreator(int n, Domain *d)
std::map< std::string, NucleationCriterion *(*)(Domain *) > nucleationCritList
Associative container containing nucleation criterion creators.
MaterialMappingAlgorithm * mmaCreator()
std::map< std::string, FailureCriteriaStatus *(*)(int, FailureCriteria *) > failureCriteriaStatusList
LoadBalancerMonitor * loadMonitorCreator(EngngModel *e)
This base class is an abstraction for all numerical methods solving sparse linear system of equations...
LoadBalancer * loadBalancerCreator(Domain *d)
std::map< std::string, ExportModule *(*)(int, EngngModel *) > exportList
Associative container containing export module creators.
ExportModule * exportCreator(int n, EngngModel *e)
XfemManager * xManCreator(Domain *d)
std::map< std::string, NonlocalBarrier *(*)(int, Domain *) > nlbList
Associative container containing nonlocal barriers creators with barrier name as key.
ContactManager * contactManCreator(Domain *d)
DofManager * dofmanCreator(int n, Domain *d)
dofType
Dof Type, determines the type of DOF created.
Represents init module - a base class for all init modules.
Updates the geometry of evolving XFEM interfaces.
Abstract base class for all finite elements.
std::map< std::string, BasicGeometry *(*)() > geometryList
Associative container containing geometry creators.
Dof * dofCreator(DofIDItem dofid, DofManager *dman)
The class representing the general material model mapping algorithm.
Base class for dof managers.
This class manages the fracture mechanics part.
std::map< std::string, EnrichmentFunction *(*)(int, Domain *) > enrichFuncList
Associative container containing enrichment function creators.
std::map< std::string, DofManager *(*)(int, Domain *) > dofmanList
Associative container containing dofmanager creators with dofmanager name as key. ...
std::map< MaterialMappingAlgorithmType, MaterialMappingAlgorithm *(*)() > materialMappingList
Associative container containing material mapping algorithm creators.
SparseMtrx * sparseMtrxCreator()
EnrichmentFunction * enrichFuncCreator(int n, Domain *d)
Represents export output module - a base class for all output modules.
Abstract representation of Geometry.
InitModule * initCreator(int n, EngngModel *e)
EnrichmentDomain * enrichmentDomainCreator()
std::map< std::string, EngngModel *(*)(int, EngngModel *) > engngList
Associative container containing engng model creators with engng model name as key.
EnrichmentFront * enrichFrontCreator()
ErrorEstimatorType
Determines the type of error estimator.
Abstract class representing global shape function Base class declares abstract interface common to al...
Abstract base class representing integration rule.
GeneralBoundaryCondition * bcCreator(int n, Domain *d)
std::map< SparseMtrxType, SparseMtrx *(*)() > sparseMtrxList
Associative container containing sparse matrix creators.
std::map< GenEigvalSolverType, SparseGeneralEigenValueSystemNM *(*)(Domain *, EngngModel *) > generalizedEigenValueSolverList
Associative container containing sparse generalized eigenvalue creators.
Base abstract class representing cross section in finite element mesh.
NonlocalBarrier * nlbCreator(int n, Domain *d)
EnrichmentItem * enrichItemCreator(int n, XfemManager *x, Domain *d)
SparseNonLinearSystemNM * nonlinCreator(Domain *d, EngngModel *m)
std::map< std::string, Material *(*)(int, Domain *) > matList
Associative container containing material creators with material name as key.
EngngModel * engngCreator(int n, EngngModel *m)
CrossSection * csCreator(int n, Domain *d)
std::map< std::string, ContactManager *(*)(Domain *) > contactManList
Associative container containing ContactManager creators.
std::map< std::string, GeneralBoundaryCondition *(*)(int, Domain *) > bcList
Associative container containing boundary condition creators with bc name as key. ...
DofIDItem
Type representing particular dof type.
SparseLinearSystemNM * sparseLinSolCreator(Domain *d, EngngModel *m)
SparseMtrxType
Enumerative type used to identify the sparse matrix type.
The base class representing the interface to mesh generation package.
Class EnrichmentFront: describes the edge or tip of an XFEM enrichment.
TopologyDescription * topologyCreator(Domain *d)
std::map< ErrorEstimatorType, ErrorEstimator *(*)(int, Domain *) > errEstList
Associative container containing error estimator creators.
std::map< std::string, EnrichmentFront *(*)() > enrichmentFrontList
Associative container containing enrichment front creators.
std::map< std::string, TopologyDescription *(*)(Domain *) > topologyList
Associative container containing topology description creators.
Abstract base class for all boundary conditions of problem.
ClassFactory & GiveClassFactory()
This function must be used by all code that run at link time to ensure that the classFactory is const...
Abstract base class for all material models.
MaterialMappingAlgorithmType
Enumerative type used to classify supported MaterialMappingAlgorithms.
Element * elemCreator(int n, Domain *d)
FailureCriteria * failureCriteriaCreator(int n, FractureManager *x)
The base class for all error estimation or error indicator algorithms.
Abstract base class representing general load balancer.
Abstract base class representing a function with vector input and output.
This class manages the xfem part.
std::map< dofType, Dof *(*)(DofIDItem, DofManager *) > dofList
Associative container containing dof creators.
Material * matCreator(int n, Domain *d)
std::map< std::string, PropagationLaw *(*)() > propagationLawList
Associative container containing propagation law creators.
std::map< MeshPackageType, MesherInterface *(*)(Domain *) > mesherInterfaceList
Associative container containing mesher interface creators.
SparseGeneralEigenValueSystemNM * gesCreator(Domain *d, EngngModel *m)
Abstract class for topology description.
std::map< std::string, EnrichmentDomain *(*)() > enrichmentDomainList
Associative container containing enrichment-domain creators.
ClassFactory & classFactory
std::map< std::string, EnrichmentItem *(*)(int, XfemManager *, Domain *) > enrichItemList
Associative container containing enrichment item creators.
NucleationCriterion * nucleationCritCreator(Domain *d)
MeshPackageType
Enumerative type used to classify supported mesh packages.
Abstract base class representing the "problem" under consideration.
std::map< std::string, InitModule *(*)(int, EngngModel *) > initList
Associative container containing init module creators.
Class Factory allows to register terminal oofem classes, based on their membership (classes represent...
the oofem namespace is to define a context or scope in which all oofem names are defined.
Abstract class Dof represents Degree Of Freedom in finite element mesh.
std::map< std::string, FailureCriteria *(*)(int, FractureManager *) > failureCriteriaList
Associative container containing failure criteria creators.
The base class for all recovery models, which perform nodal averaging or projection processes for int...
std::map< std::string, LoadBalancerMonitor *(*)(EngngModel *) > loadMonitorList
Associative container containing load balancer monitor creators.
This base class is an abstraction for all numerical methods solving sparse linear system of equations...
std::map< std::string, Function *(*)(int, Domain *) > funcList
Associative container containing load time function creators with function name as key...
MesherInterface * mesherCreator(Domain *d)
NodalRecoveryModel * nrmCreator(Domain *d)
std::map< std::string, SparseNonLinearSystemNM *(*)(Domain *, EngngModel *) > nonlinList
Associative container containing nonlinear solver creators.
std::map< NodalRecoveryModel::NodalRecoveryModelType, NodalRecoveryModel *(*)(Domain *) > nodalRecoveryModelList
Associative container containing nodal recovery model creators.
This base class is an abstraction for all numerical methods solving sparse nonlinear system of equati...
Abstract base class representing general load balancer monitor.
ContactDefinition * contactDefCreator(ContactManager *cMan)
std::map< std::string, XfemManager *(*)(Domain *) > xManList
Associative container containing XfemManager creators.