OOFEM 3.0
Loading...
Searching...
No Matches
classfactory.h
Go to the documentation of this file.
1/*
2 *
3 * ##### ##### ###### ###### ### ###
4 * ## ## ## ## ## ## ## ### ##
5 * ## ## ## ## #### #### ## # ##
6 * ## ## ## ## ## ## ## ##
7 * ## ## ## ## ## ## ## ##
8 * ##### ##### ## ###### ## ##
9 *
10 *
11 * OOFEM : Object Oriented Finite Element Code
12 *
13 * Copyright (C) 1993 - 2025 Borek Patzak
14 *
15 *
16 *
17 * Czech Technical University, Faculty of Civil Engineering,
18 * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19 *
20 * This library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Lesser General Public
22 * License as published by the Free Software Foundation; either
23 * version 2.1 of the License, or (at your option) any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, write to the Free Software
32 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 */
34
35#ifndef classfactory_h
36#define classfactory_h
37
38#include "oofemenv.h"
39#include "sparsemtrxtype.h"
40#include "errorestimatortype.h"
41#include "doftype.h"
42#include "linsystsolvertype.h"
43//#include "patch.h" // for PatchType
44#include "nodalrecoverymodel.h" // for NodalRecoveryModelType
45#include "integrationrule.h" // for IntegrationRuleType
46#include "geneigvalsolvertype.h"
48#include "meshpackagetype.h"
49#include "dofiditem.h"
50
51#include <map>
52#include <string>
53#include <cstring>
54#include <memory>
55
56namespace oofem {
57class Domain;
58class EngngModel;
59class Element;
60class DofManager;
62class CrossSection;
63class Material;
64class Function;
65class NonlocalBarrier;
66class ExportModule;
68class InitModule;
70class Monitor;
71class Field;
72
73class Dof;
74class SparseMtrx;
76class ErrorEstimator;
78class Patch;
81class IntegrationRule;
83class MesherInterface;
84
86class LoadBalancer;
87
88class XfemManager;
89class EnrichmentItem;
92class EnrichmentDomain;
93class BasicGeometry;
94class EnrichmentFront;
95class PropagationLaw;
96
97class FractureManager;
99class FailureCriteria;
100
101class ContactSurface;
102
104
105
106class Term;
107
108#ifdef _GNUC
109#define OOFEM_ATTR_UNUSED __attribute__((unused))
110#else
111#define OOFEM_ATTR_UNUSED
112#endif
113
114// Templates to wrap constructors into functions
115
116// Wraps any ctor into
117
125template< typename B, typename T, typename... V > std::unique_ptr<B> CTOR(V... x) { return std::make_unique<T>(x...); }
126
127template< typename T > Dof *dofCreator(DofIDItem dofid, DofManager *dman) { return new T(dman, dofid); }
128
130
131#define REGISTER_Element(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerElement(_IFT_ ## class ## _Name, CTOR< Element, class, int, Domain* > );
132#define REGISTER_DofManager(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerDofManager(_IFT_ ## class ## _Name, CTOR< DofManager, class, int, Domain* > );
133#define REGISTER_BoundaryCondition(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerBoundaryCondition(_IFT_ ## class ## _Name, CTOR< GeneralBoundaryCondition, class, int, Domain* > );
134#define REGISTER_CrossSection(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerCrossSection(_IFT_ ## class ## _Name, CTOR< CrossSection, class, int, Domain* > );
135#define REGISTER_Material(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerMaterial(_IFT_ ## class ## _Name, CTOR< Material, class, int, Domain* > );
136#define REGISTER_Material_Alt(class, altname) static bool __dummy_ ## class ## altname OOFEM_ATTR_UNUSED = GiveClassFactory().registerMaterial(#altname, CTOR< Material, class, int, Domain* > );
137#define REGISTER_EngngModel(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEngngModel(_IFT_ ## class ## _Name, CTOR< EngngModel, class, int, EngngModel* > );
138#define REGISTER_Function(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerFunction(_IFT_ ## class ## _Name, CTOR< Function, class, int, Domain* > );
139#define REGISTER_NonlocalBarrier(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerNonlocalBarrier(_IFT_ ## class ## _Name, CTOR< NonlocalBarrier, class, int, Domain* > );
140#define REGISTER_ExportModule(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerExportModule(_IFT_ ## class ## _Name, CTOR< ExportModule, class, int, EngngModel* > );
141#define REGISTER_SparseNonLinearSystemNM(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerSparseNonLinearSystemNM(_IFT_ ## class ## _Name, CTOR< SparseNonLinearSystemNM, class, Domain*, EngngModel* > );
142#define REGISTER_InitModule(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerInitModule(_IFT_ ## class ## _Name, CTOR< InitModule, class, int, EngngModel* > );
143#define REGISTER_TopologyDescription(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerTopologyDescription(_IFT_ ## class ## _Name, CTOR< TopologyDescription, class, Domain* > );
144#define REGISTER_LoadBalancerMonitor(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerLoadBalancerMonitor(_IFT_ ## class ## _Name, CTOR< LoadBalancerMonitor, class, EngngModel* > );
145#define REGISTER_LoadBalancer(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerLoadBalancer(_IFT_ ## class ## _Name, CTOR< LoadBalancer, class, EngngModel* > );
146#define REGISTER_Monitor(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerMonitor(_IFT_ ## class ## _Name, CTOR< Monitor, class, int > );
147
148// These should be converted to use strings.
149#define REGISTER_SparseMtrx(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerSparseMtrx(type, CTOR< SparseMtrx, class > );
150#define REGISTER_SparseLinSolver(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerSparseLinSolver(type, CTOR< SparseLinearSystemNM, class, Domain*, EngngModel* > );
151#define REGISTER_ErrorEstimator(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerErrorEstimator(type, CTOR< ErrorEstimator, class, int, Domain* > );
152#define REGISTER_NodalRecoveryModel(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerNodalRecoveryModel(type, CTOR< NodalRecoveryModel, class, Domain* > );
153#define REGISTER_GeneralizedEigenValueSolver(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerGeneralizedEigenValueSolver(type, CTOR< SparseGeneralEigenValueSystemNM, class, Domain*, EngngModel* > );
154#define REGISTER_Mesher(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerMesherInterface(type, CTOR< MesherInterface, class, Domain* > );
155#define REGISTER_MaterialMappingAlgorithm(class, type) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerMaterialMappingAlgorithm(type, CTOR< MaterialMappingAlgorithm, class > );
156
157#define REGISTER_XfemManager(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerXfemManager(_IFT_ ## class ## _Name, CTOR< XfemManager, class, Domain* > );
158#define REGISTER_EnrichmentItem(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEnrichmentItem(_IFT_ ## class ## _Name, CTOR< EnrichmentItem, class, int, XfemManager*, Domain* > );
159#define REGISTER_NucleationCriterion(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerNucleationCriterion(_IFT_ ## class ## _Name, CTOR< NucleationCriterion, class, Domain* > );
160#define REGISTER_EnrichmentFunction(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEnrichmentFunction(_IFT_ ## class ## _Name, CTOR< EnrichmentFunction, class, int, Domain* > );
161//#define REGISTER_EnrichmentDomain(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEnrichmentDomain(_IFT_ ## class ## _Name, CTOR< EnrichmentDomain, class > );
162#define REGISTER_EnrichmentFront(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerEnrichmentFront(_IFT_ ## class ## _Name, CTOR< EnrichmentFront, class > );
163#define REGISTER_PropagationLaw(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerPropagationLaw(_IFT_ ## class ## _Name, CTOR< PropagationLaw, class > );
164#define REGISTER_Geometry(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerGeometry(_IFT_ ## class ## _Name, CTOR< BasicGeometry, class > );
165
166#define REGISTER_FailureCriteria(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerFailureCriteria(_IFT_ ## class ## _Name, CTOR< FailureCriteria, class, int, FractureManager* > );
167#define REGISTER_FailureCriteriaStatus(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerFailureCriteriaStatus(_IFT_ ## class ## _Name, CTOR< FailureCriteriaStatus, class, FailureCriteria* > );
168
169#define REGISTER_ContactSurface(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerContactSurface(_IFT_ ## class ## _Name, CTOR< ContactSurface, class, int, Domain * >);
170
171#define REGISTER_Field(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerField(_IFT_ ## class ## _Name, CTOR< Field, class > );
172// mpm stuff
173#define REGISTER_Term(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerTerm(_IFT_ ## class ## _Name, CTOR< Term, class > );
174
176#define REGISTER_Quasicontinuum(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerQuasicontinuum(_IFT_ ## class ## _Name, < QuasiContinuum, class, ????? > );
177
178
179#define REGISTER_TimeStepReductionStrategy(class) static bool __dummy_ ## class OOFEM_ATTR_UNUSED = GiveClassFactory().registerTimeStepReductionStrategy(_IFT_ ## class ## _Name, CTOR< TimeStepReductionStrategy, class, int > );
180
182
192{
193private:
195 std :: map < std :: string, std::unique_ptr<Element> ( * )(int, Domain *) > elemList;
197 std :: map < std :: string, std::unique_ptr<DofManager> ( * )(int, Domain *) > dofmanList;
199 std :: map < std :: string, std::unique_ptr<GeneralBoundaryCondition> ( * )(int, Domain *) > bcList;
201 std :: map < std :: string, std::unique_ptr<CrossSection> ( * )(int, Domain *) > csList;
203 std :: map < std :: string, std::unique_ptr<Material> ( * )(int, Domain *) > matList;
205 std :: map < std :: string, std::unique_ptr<EngngModel> ( * )(int, EngngModel *) > engngList;
207 std :: map < std :: string, std::unique_ptr<Function> ( * )(int, Domain *) > funcList;
209 std :: map < std :: string, std::unique_ptr<NonlocalBarrier> ( * )(int, Domain *) > nlbList;
211 std :: map < std :: string, std::unique_ptr<ExportModule> ( * )(int, EngngModel *) > exportList;
213 std :: map < std :: string, std::unique_ptr<Monitor> ( * )(int) > monitorList;
215 std :: map < std :: string, std::unique_ptr<SparseNonLinearSystemNM> ( * )(Domain *, EngngModel *) > nonlinList;
217 std :: map < std :: string, std::unique_ptr<InitModule> ( * )(int, EngngModel *) > initList;
219 std :: map < std :: string, std::unique_ptr<TopologyDescription> ( * )(Domain *) > topologyList;
220 // Internal structures (accessed by hard-coded enum values)
222 std :: map < std :: string, std::unique_ptr<LoadBalancer> ( * )(Domain *) > loadBalancerList;
224 std :: map < std :: string, std::unique_ptr<LoadBalancerMonitor> ( * )(EngngModel *) > loadMonitorList;
226 std :: map < SparseMtrxType, std::unique_ptr<SparseMtrx> ( * )() > sparseMtrxList;
228 std :: map < dofType, Dof * ( * )(DofIDItem, DofManager *) > dofList;
230 std :: map < ErrorEstimatorType, std::unique_ptr<ErrorEstimator> ( * )(int, Domain *) > errEstList;
232 std :: map < LinSystSolverType, std::unique_ptr<SparseLinearSystemNM> ( * )(Domain *, EngngModel *) > sparseLinSolList;
234 std :: map < NodalRecoveryModel :: NodalRecoveryModelType, std::unique_ptr<NodalRecoveryModel> ( * )(Domain *) > nodalRecoveryModelList;
236 std :: map < GenEigvalSolverType, std::unique_ptr<SparseGeneralEigenValueSystemNM> ( * )(Domain *, EngngModel *) > generalizedEigenValueSolverList;
238 std :: map < MaterialMappingAlgorithmType, std::unique_ptr<MaterialMappingAlgorithm> ( * )() > materialMappingList;
240 std :: map < MeshPackageType, std::unique_ptr<MesherInterface> ( * )(Domain *) > mesherInterfaceList;
241
242 // XFEM:
244 std :: map < std :: string, std::unique_ptr<EnrichmentItem> ( * )(int, XfemManager *, Domain *) > enrichItemList;
246 std :: map < std :: string, std::unique_ptr<NucleationCriterion> ( * )(Domain *) > nucleationCritList;
248 std :: map < std :: string, std::unique_ptr<EnrichmentFunction> ( * )(int, Domain *) > enrichFuncList;
250 std :: map < std :: string, std::unique_ptr<BasicGeometry> ( * )() > geometryList;
252 std :: map < std :: string, std::unique_ptr<EnrichmentDomain> ( * )() > enrichmentDomainList;
254 std :: map < std :: string, std::unique_ptr<EnrichmentFront> ( * )() > enrichmentFrontList;
256 std :: map < std :: string, std::unique_ptr<PropagationLaw> ( * )() > propagationLawList;
258 std :: map < std :: string, std::unique_ptr<XfemManager> ( * )(Domain *) > xManList;
259
260
262 std :: map < std :: string, std::unique_ptr<FailureCriteria> ( * )(int, FractureManager *) > failureCriteriaList;
263 std :: map < std :: string, std::unique_ptr<FailureCriteriaStatus> ( * )(int, FailureCriteria *) > failureCriteriaStatusList;
264
266 std :: map < std :: string, std::unique_ptr<TimeStepReductionStrategy> ( * )(int) > timeStepReductionStrategyList;
267
269 std::map< std::string, std::unique_ptr< ContactSurface >( * )( int, Domain * ) >contactSurfaceList;
270
272 std :: map < std :: string, std::unique_ptr<Field> ( * )() > fieldList;
273
275 std :: map < std :: string, std::unique_ptr<Term> ( * )() > termList;
276
277public:
279 ClassFactory();
280
281 std::map<std::string,std::list<std::string>> getRegisteredNames();
282
290 std::unique_ptr<Element> createElement(const char *name, int num, Domain *domain);
295 bool registerElement( const char *name, std::unique_ptr<Element> ( *creator )( int, Domain * ) );
303 std::unique_ptr<DofManager> createDofManager(const char *name, int num, Domain *domain);
308 bool registerDofManager( const char *name, std::unique_ptr<DofManager> ( *creator )( int, Domain * ) );
316 std::unique_ptr<GeneralBoundaryCondition> createBoundaryCondition(const char *name, int num, Domain *domain);
321 bool registerBoundaryCondition( const char *name, std::unique_ptr<GeneralBoundaryCondition> ( *creator )( int, Domain * ) );
329 std::unique_ptr<CrossSection> createCrossSection(const char *name, int num, Domain *domain);
334 bool registerCrossSection( const char *name, std::unique_ptr<CrossSection> ( *creator )( int, Domain * ) );
342 std::unique_ptr<Material> createMaterial(const char *name, int num, Domain *domain);
347 bool registerMaterial( const char *name, std::unique_ptr<Material> ( *creator )( int, Domain * ) );
355 std::unique_ptr<EngngModel> createEngngModel(const char *name, int num, EngngModel *master);
360 bool registerEngngModel( const char *name, std::unique_ptr<EngngModel> ( *creator )( int, EngngModel * ) );
368 std::unique_ptr<Function> createFunction(const char *name, int num, Domain *domain);
373 bool registerFunction( const char *name, std::unique_ptr<Function> ( *creator )( int, Domain * ) );
381 std::unique_ptr<NonlocalBarrier> createNonlocalBarrier(const char *name, int num, Domain *domain);
386 bool registerNonlocalBarrier( const char *name, std::unique_ptr<NonlocalBarrier> ( *creator )( int, Domain * ) );
394 std::unique_ptr<ExportModule> createExportModule(const char *name, int num, EngngModel *emodel);
399 bool registerExportModule( const char *name, std::unique_ptr<ExportModule> ( *creator )( int, EngngModel * ) );
406 std::unique_ptr<Monitor> createMonitor(const char *name, int num);
411 bool registerMonitor( const char *name, std::unique_ptr<Monitor> ( *creator )( int ) );
412
420 std::unique_ptr<SparseNonLinearSystemNM> createNonLinearSolver(const char *name, Domain *domain, EngngModel *emodel);
425 bool registerSparseNonLinearSystemNM( const char *name, std::unique_ptr<SparseNonLinearSystemNM> ( *creator )( Domain *, EngngModel * ) );
433 std::unique_ptr<InitModule> createInitModule(const char *name, int num, EngngModel *emodel);
438 bool registerInitModule( const char *name, std::unique_ptr<InitModule> ( *creator )( int, EngngModel * ) );
446 std::unique_ptr<InitialCondition> createInitialCondition(const char *name, int num, Domain *d);
453 std::unique_ptr<TopologyDescription> createTopology(const char *name, Domain *domain);
458 bool registerTopologyDescription( const char *name, std::unique_ptr<TopologyDescription> ( *creator )( Domain * ) );
459
465 std::unique_ptr<SparseMtrx> createSparseMtrx(SparseMtrxType type);
470 bool registerSparseMtrx( SparseMtrxType type, std::unique_ptr<SparseMtrx> ( *creator )(void) );
478 Dof *createDof(dofType type, DofIDItem dofid, DofManager *dman);
487 std::unique_ptr<SparseLinearSystemNM> createSparseLinSolver(LinSystSolverType st, Domain *d, EngngModel *m);
492 bool registerSparseLinSolver( LinSystSolverType type, std::unique_ptr<SparseLinearSystemNM> ( *creator )(Domain *, EngngModel *) );
501 std::unique_ptr<ErrorEstimator> createErrorEstimator(ErrorEstimatorType type, int num, Domain *d);
506 bool registerErrorEstimator( ErrorEstimatorType type, std::unique_ptr<ErrorEstimator> ( *creator )(int, Domain *) );
511 bool registerNodalRecoveryModel( NodalRecoveryModel :: NodalRecoveryModelType name, std::unique_ptr<NodalRecoveryModel> ( *creator )(Domain *) );
518 std::unique_ptr<NodalRecoveryModel> createNodalRecoveryModel(NodalRecoveryModel :: NodalRecoveryModelType type, Domain *d);
519
520 // XFEM:
521 std::unique_ptr<EnrichmentItem> createEnrichmentItem(const char *name, int num, XfemManager *xm, Domain *domain);
522 bool registerEnrichmentItem( const char *name, std::unique_ptr<EnrichmentItem> ( *creator )( int, XfemManager *, Domain * ) );
523
524 std::unique_ptr<NucleationCriterion> createNucleationCriterion(const char *name, Domain *domain);
525 bool registerNucleationCriterion( const char *name, std::unique_ptr<NucleationCriterion> ( *creator )( Domain * ) );
526
527 std::unique_ptr<EnrichmentFunction> createEnrichmentFunction(const char *name, int num, Domain *domain);
528 bool registerEnrichmentFunction( const char *name, std::unique_ptr<EnrichmentFunction> ( *creator )( int, Domain * ) );
529
530#if 0
531 std::unique_ptr<EnrichmentDomain> createEnrichmentDomain(const char *name);
532 bool registerEnrichmentDomain( const char *name, std::unique_ptr<EnrichmentDomain> ( *creator )( ) );
533#endif
534
535 std::unique_ptr<EnrichmentFront> createEnrichmentFront(const char *name);
536 bool registerEnrichmentFront( const char *name, std::unique_ptr<EnrichmentFront> ( *creator )( ) );
537
538 std::unique_ptr<PropagationLaw> createPropagationLaw(const char *name);
539 bool registerPropagationLaw( const char *name, std::unique_ptr<PropagationLaw> ( *creator )( ) );
540
541 std::unique_ptr<BasicGeometry> createGeometry(const char *name);
542 bool registerGeometry( const char *name, std::unique_ptr<BasicGeometry> ( *creator )( ) );
543
544 std::unique_ptr<XfemManager> createXfemManager(const char *name, Domain *domain);
545 bool registerXfemManager( const char *name, std::unique_ptr<XfemManager> ( *creator )( Domain * ) );
546
547 std::unique_ptr< ContactSurface >createContactSurface(const char *name, int num, Domain *domain);
548 bool registerContactSurface(const char *name, std::unique_ptr< ContactSurface >( * creator )(int, Domain *) );
549
550 // MPM stuff
551 std::unique_ptr<Term> createTerm(const char *name);
552 bool registerTerm( const char *name, std::unique_ptr<Term> ( *creator )( ) );
553
554 // Failure module (in development!)
555 std::unique_ptr<FailureCriteria> createFailureCriteria(const char *name, int num, FractureManager *fracManager);
556 bool registerFailureCriteria( const char *name, std::unique_ptr<FailureCriteria> ( *creator )( int, FractureManager * ) );
557
558 std::unique_ptr<FailureCriteriaStatus> createFailureCriteriaStatus(const char *name, int num, FailureCriteria *critManager);
559 bool registerFailureCriteriaStatus( const char *name, std::unique_ptr<FailureCriteriaStatus> ( *creator )( int, FailureCriteria * ) );
560
561 std::unique_ptr<SparseGeneralEigenValueSystemNM> createGeneralizedEigenValueSolver(GenEigvalSolverType name, Domain *d, EngngModel *m);
562 bool registerGeneralizedEigenValueSolver( GenEigvalSolverType name, std::unique_ptr<SparseGeneralEigenValueSystemNM> ( *creator )(Domain *, EngngModel *) );
563
564 std::unique_ptr<IntegrationRule> createIRule(IntegrationRuleType name, int number, Element *e);
565
566 std::unique_ptr<MaterialMappingAlgorithm> createMaterialMappingAlgorithm(MaterialMappingAlgorithmType name);
567 bool registerMaterialMappingAlgorithm( MaterialMappingAlgorithmType name, std::unique_ptr<MaterialMappingAlgorithm> ( *creator )( ) );
568
569 std::unique_ptr<MesherInterface> createMesherInterface(MeshPackageType name, Domain *d);
570 bool registerMesherInterface( MeshPackageType name, std::unique_ptr<MesherInterface> ( *creator )( Domain * ) );
571
572 std::unique_ptr<LoadBalancerMonitor> createLoadBalancerMonitor(const char *name, EngngModel *e);
573 bool registerLoadBalancerMonitor( const char *name, std::unique_ptr<LoadBalancerMonitor> ( *creator )( EngngModel * ) );
574
575 std::unique_ptr<LoadBalancer> createLoadBalancer(const char *name, Domain *d);
576 bool registerLoadBalancer( const char *name, std::unique_ptr<LoadBalancer> ( *creator )( Domain * ) );
577
578
579 std::unique_ptr<TimeStepReductionStrategy> createTimeStepReductionStrategy(const char *name, int number);
580
581 bool registerTimeStepReductionStrategy( const char *name, std::unique_ptr<TimeStepReductionStrategy> ( *creator )( int ) );
582
583
584
585 std::unique_ptr<Field> createField(const char *name);
586 bool registerField( const char *name, std::unique_ptr<Field> ( *creator )() );
587};
588
590
596} // end namespace oofem
597#endif // clasfactort_h
std ::map< std ::string, std::unique_ptr< EngngModel >(*)(int, EngngModel *) > engngList
Associative container containing engng model creators with engng model name as key.
std ::map< ErrorEstimatorType, std::unique_ptr< ErrorEstimator >(*)(int, Domain *) > errEstList
Associative container containing error estimator creators.
std ::map< NodalRecoveryModel ::NodalRecoveryModelType, std::unique_ptr< NodalRecoveryModel >(*)(Domain *) > nodalRecoveryModelList
Associative container containing nodal recovery model creators.
bool registerInitModule(const char *name, std::unique_ptr< InitModule >(*creator)(int, EngngModel *))
std::unique_ptr< PropagationLaw > createPropagationLaw(const char *name)
std::unique_ptr< ExportModule > createExportModule(const char *name, int num, EngngModel *emodel)
bool registerLoadBalancerMonitor(const char *name, std::unique_ptr< LoadBalancerMonitor >(*creator)(EngngModel *))
std::unique_ptr< MaterialMappingAlgorithm > createMaterialMappingAlgorithm(MaterialMappingAlgorithmType name)
std::unique_ptr< GeneralBoundaryCondition > createBoundaryCondition(const char *name, int num, Domain *domain)
std::unique_ptr< SparseGeneralEigenValueSystemNM > createGeneralizedEigenValueSolver(GenEigvalSolverType name, Domain *d, EngngModel *m)
std ::map< GenEigvalSolverType, std::unique_ptr< SparseGeneralEigenValueSystemNM >(*)(Domain *, EngngModel *) > generalizedEigenValueSolverList
Associative container containing sparse generalized eigenvalue creators.
std::unique_ptr< FailureCriteriaStatus > createFailureCriteriaStatus(const char *name, int num, FailureCriteria *critManager)
bool registerSparseLinSolver(LinSystSolverType type, std::unique_ptr< SparseLinearSystemNM >(*creator)(Domain *, EngngModel *))
std ::map< dofType, Dof *(*)(DofIDItem, DofManager *) > dofList
Associative container containing dof creators.
std::unique_ptr< InitialCondition > createInitialCondition(const char *name, int num, Domain *d)
std::unique_ptr< Field > createField(const char *name)
bool registerMonitor(const char *name, std::unique_ptr< Monitor >(*creator)(int))
std::unique_ptr< SparseMtrx > createSparseMtrx(SparseMtrxType type)
bool registerNodalRecoveryModel(NodalRecoveryModel ::NodalRecoveryModelType name, std::unique_ptr< NodalRecoveryModel >(*creator)(Domain *))
std::unique_ptr< LoadBalancerMonitor > createLoadBalancerMonitor(const char *name, EngngModel *e)
std ::map< std ::string, std::unique_ptr< Function >(*)(int, Domain *) > funcList
Associative container containing load time function creators with function name as key.
bool registerTerm(const char *name, std::unique_ptr< Term >(*creator)())
std::unique_ptr< XfemManager > createXfemManager(const char *name, Domain *domain)
std::unique_ptr< NonlocalBarrier > createNonlocalBarrier(const char *name, int num, Domain *domain)
bool registerGeneralizedEigenValueSolver(GenEigvalSolverType name, std::unique_ptr< SparseGeneralEigenValueSystemNM >(*creator)(Domain *, EngngModel *))
std ::map< std ::string, std::unique_ptr< LoadBalancerMonitor >(*)(EngngModel *) > loadMonitorList
Associative container containing load balancer monitor creators.
bool registerContactSurface(const char *name, std::unique_ptr< ContactSurface >(*creator)(int, Domain *))
std ::map< LinSystSolverType, std::unique_ptr< SparseLinearSystemNM >(*)(Domain *, EngngModel *) > sparseLinSolList
Associative container containing sparse linear solver creators.
std ::map< MeshPackageType, std::unique_ptr< MesherInterface >(*)(Domain *) > mesherInterfaceList
Associative container containing mesher interface creators.
std ::map< std ::string, std::unique_ptr< XfemManager >(*)(Domain *) > xManList
Associative container containing XfemManager creators.
std::unique_ptr< Function > createFunction(const char *name, int num, Domain *domain)
std::unique_ptr< BasicGeometry > createGeometry(const char *name)
bool registerFailureCriteriaStatus(const char *name, std::unique_ptr< FailureCriteriaStatus >(*creator)(int, FailureCriteria *))
bool registerTopologyDescription(const char *name, std::unique_ptr< TopologyDescription >(*creator)(Domain *))
std::unique_ptr< CrossSection > createCrossSection(const char *name, int num, Domain *domain)
std::unique_ptr< ContactSurface > createContactSurface(const char *name, int num, Domain *domain)
std ::map< std ::string, std::unique_ptr< Term >(*)() > termList
MPM stuff.
std ::map< std ::string, std::unique_ptr< NonlocalBarrier >(*)(int, Domain *) > nlbList
Associative container containing nonlocal barriers creators with barrier name as key.
std::unique_ptr< Monitor > createMonitor(const char *name, int num)
std ::map< std ::string, std::unique_ptr< SparseNonLinearSystemNM >(*)(Domain *, EngngModel *) > nonlinList
Associative container containing nonlinear solver creators.
bool registerSparseMtrx(SparseMtrxType type, std::unique_ptr< SparseMtrx >(*creator)(void))
bool registerErrorEstimator(ErrorEstimatorType type, std::unique_ptr< ErrorEstimator >(*creator)(int, Domain *))
std ::map< std ::string, std::unique_ptr< TopologyDescription >(*)(Domain *) > topologyList
Associative container containing topology description creators.
std::unique_ptr< NodalRecoveryModel > createNodalRecoveryModel(NodalRecoveryModel ::NodalRecoveryModelType type, Domain *d)
std ::map< std ::string, std::unique_ptr< LoadBalancer >(*)(Domain *) > loadBalancerList
Associative container containing load balancer creators.
bool registerXfemManager(const char *name, std::unique_ptr< XfemManager >(*creator)(Domain *))
bool registerBoundaryCondition(const char *name, std::unique_ptr< GeneralBoundaryCondition >(*creator)(int, Domain *))
std ::map< std ::string, std::unique_ptr< DofManager >(*)(int, Domain *) > dofmanList
Associative container containing dofmanager creators with dofmanager name as key.
std::unique_ptr< LoadBalancer > createLoadBalancer(const char *name, Domain *d)
std::map< std::string, std::unique_ptr< ContactSurface >(*)(int, Domain *) > contactSurfaceList
Associative container containing contact surface creators with name as key.
bool registerTimeStepReductionStrategy(const char *name, std::unique_ptr< TimeStepReductionStrategy >(*creator)(int))
std::unique_ptr< SparseNonLinearSystemNM > createNonLinearSolver(const char *name, Domain *domain, EngngModel *emodel)
std ::map< std ::string, std::unique_ptr< BasicGeometry >(*)() > geometryList
Associative container containing geometry creators.
bool registerEnrichmentFunction(const char *name, std::unique_ptr< EnrichmentFunction >(*creator)(int, Domain *))
std::unique_ptr< TopologyDescription > createTopology(const char *name, Domain *domain)
std ::map< std ::string, std::unique_ptr< CrossSection >(*)(int, Domain *) > csList
Associative container containing cross section creators with cross section name as key.
std::unique_ptr< IntegrationRule > createIRule(IntegrationRuleType name, int number, Element *e)
std::unique_ptr< FailureCriteria > createFailureCriteria(const char *name, int num, FractureManager *fracManager)
std::unique_ptr< EnrichmentItem > createEnrichmentItem(const char *name, int num, XfemManager *xm, Domain *domain)
bool registerLoadBalancer(const char *name, std::unique_ptr< LoadBalancer >(*creator)(Domain *))
std::unique_ptr< DofManager > createDofManager(const char *name, int num, Domain *domain)
bool registerExportModule(const char *name, std::unique_ptr< ExportModule >(*creator)(int, EngngModel *))
bool registerField(const char *name, std::unique_ptr< Field >(*creator)())
bool registerPropagationLaw(const char *name, std::unique_ptr< PropagationLaw >(*creator)())
bool registerEngngModel(const char *name, std::unique_ptr< EngngModel >(*creator)(int, EngngModel *))
bool registerDofManager(const char *name, std::unique_ptr< DofManager >(*creator)(int, Domain *))
Dof * createDof(dofType type, DofIDItem dofid, DofManager *dman)
std ::map< std ::string, std::unique_ptr< NucleationCriterion >(*)(Domain *) > nucleationCritList
Associative container containing nucleation criterion creators.
std ::map< SparseMtrxType, std::unique_ptr< SparseMtrx >(*)() > sparseMtrxList
Associative container containing sparse matrix creators.
std::unique_ptr< Term > createTerm(const char *name)
bool registerNonlocalBarrier(const char *name, std::unique_ptr< NonlocalBarrier >(*creator)(int, Domain *))
std::unique_ptr< Element > createElement(const char *name, int num, Domain *domain)
std ::map< std ::string, std::unique_ptr< FailureCriteriaStatus >(*)(int, FailureCriteria *) > failureCriteriaStatusList
bool registerNucleationCriterion(const char *name, std::unique_ptr< NucleationCriterion >(*creator)(Domain *))
ClassFactory()
Creates empty factory.
std ::map< std ::string, std::unique_ptr< TimeStepReductionStrategy >(*)(int) > timeStepReductionStrategyList
Associative container containing TimeStepReductionStrategy.
std::unique_ptr< InitModule > createInitModule(const char *name, int num, EngngModel *emodel)
std ::map< std ::string, std::unique_ptr< EnrichmentDomain >(*)() > enrichmentDomainList
Associative container containing enrichment-domain creators.
std::unique_ptr< Material > createMaterial(const char *name, int num, Domain *domain)
std::unique_ptr< NucleationCriterion > createNucleationCriterion(const char *name, Domain *domain)
bool registerSparseNonLinearSystemNM(const char *name, std::unique_ptr< SparseNonLinearSystemNM >(*creator)(Domain *, EngngModel *))
std ::map< std ::string, std::unique_ptr< GeneralBoundaryCondition >(*)(int, Domain *) > bcList
Associative container containing boundary condition creators with bc name as key.
std::map< std::string, std::list< std::string > > getRegisteredNames()
std::unique_ptr< EnrichmentFront > createEnrichmentFront(const char *name)
std ::map< std ::string, std::unique_ptr< PropagationLaw >(*)() > propagationLawList
Associative container containing propagation law creators.
std ::map< std ::string, std::unique_ptr< EnrichmentItem >(*)(int, XfemManager *, Domain *) > enrichItemList
Associative container containing enrichment item creators.
std ::map< std ::string, std::unique_ptr< ExportModule >(*)(int, EngngModel *) > exportList
Associative container containing export module creators.
bool registerFunction(const char *name, std::unique_ptr< Function >(*creator)(int, Domain *))
std::unique_ptr< ErrorEstimator > createErrorEstimator(ErrorEstimatorType type, int num, Domain *d)
bool registerMaterial(const char *name, std::unique_ptr< Material >(*creator)(int, Domain *))
bool registerMesherInterface(MeshPackageType name, std::unique_ptr< MesherInterface >(*creator)(Domain *))
std ::map< std ::string, std::unique_ptr< Monitor >(*)(int) > monitorList
Associative container containing monitor creators.
std ::map< std ::string, std::unique_ptr< Field >(*)() > fieldList
Associative container containing Field creators.
bool registerCrossSection(const char *name, std::unique_ptr< CrossSection >(*creator)(int, Domain *))
std ::map< std ::string, std::unique_ptr< InitModule >(*)(int, EngngModel *) > initList
Associative container containing init module creators.
std::unique_ptr< SparseLinearSystemNM > createSparseLinSolver(LinSystSolverType st, Domain *d, EngngModel *m)
bool registerElement(const char *name, std::unique_ptr< Element >(*creator)(int, Domain *))
std ::map< std ::string, std::unique_ptr< EnrichmentFront >(*)() > enrichmentFrontList
Associative container containing enrichment front creators.
std ::map< std ::string, std::unique_ptr< Element >(*)(int, Domain *) > elemList
Associative container containing element creators with element name as key.
bool registerFailureCriteria(const char *name, std::unique_ptr< FailureCriteria >(*creator)(int, FractureManager *))
std::unique_ptr< TimeStepReductionStrategy > createTimeStepReductionStrategy(const char *name, int number)
std::unique_ptr< MesherInterface > createMesherInterface(MeshPackageType name, Domain *d)
std ::map< MaterialMappingAlgorithmType, std::unique_ptr< MaterialMappingAlgorithm >(*)() > materialMappingList
Associative container containing material mapping algorithm creators.
std::unique_ptr< EnrichmentFunction > createEnrichmentFunction(const char *name, int num, Domain *domain)
std ::map< std ::string, std::unique_ptr< FailureCriteria >(*)(int, FractureManager *) > failureCriteriaList
Associative container containing failure criteria creators.
std::unique_ptr< EngngModel > createEngngModel(const char *name, int num, EngngModel *master)
bool registerMaterialMappingAlgorithm(MaterialMappingAlgorithmType name, std::unique_ptr< MaterialMappingAlgorithm >(*creator)())
std ::map< std ::string, std::unique_ptr< EnrichmentFunction >(*)(int, Domain *) > enrichFuncList
Associative container containing enrichment function creators.
bool registerEnrichmentItem(const char *name, std::unique_ptr< EnrichmentItem >(*creator)(int, XfemManager *, Domain *))
bool registerGeometry(const char *name, std::unique_ptr< BasicGeometry >(*creator)())
std ::map< std ::string, std::unique_ptr< Material >(*)(int, Domain *) > matList
Associative container containing material creators with material name as key.
bool registerEnrichmentFront(const char *name, std::unique_ptr< EnrichmentFront >(*creator)())
Abstract base class for all contact surfaces.
Class representing a weak form expression to be evaluated (integrated). It defines two key methods:
Definition mpm.h:134
ClassFactory & GiveClassFactory()
std::unique_ptr< B > CTOR(V... x)
dofType
Dof Type, determines the type of DOF created.
Definition doftype.h:48
ClassFactory & classFactory
Dof * dofCreator(DofIDItem dofid, DofManager *dman)
#define OOFEM_EXPORT
Definition oofemcfg.h:7

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011