96 std::transform(input.begin(), input.end(), input.begin(), ::tolower);
101template<
typename C,
typename T,
typename V,
typename ... As> C *
cf_create2(
const T &list, V name, As ... args)
103 auto creator = list.find(name);
104 return creator != list.end() ? creator->second(args...) :
nullptr;
108template<
typename T,
typename V,
typename C>
bool cf_store2(T &list, V name, C &creator)
110 list[ name ] = creator;
115template<
typename C,
typename T,
typename V,
typename ... As> std::unique_ptr<C>
cf_create4(
const T &list, V name, As ... args)
117 auto creator = list.find(name);
118 return creator != list.end() ? creator->second(args...) :
nullptr;
122template<
typename C,
typename T,
typename ... As> std::unique_ptr<C>
cf_create(
const T &list,
const char *name, As ... args)
125 return creator != list.end() ? creator->second(args...) :
nullptr;
129template<
typename T,
typename C>
bool cf_store(T &list,
const char *name, C &creator)
136ClassFactory :: ClassFactory()
150bool ClassFactory :: registerSparseMtrx(
SparseMtrxType name, std::unique_ptr<SparseMtrx> ( *creator )( ) )
175bool ClassFactory :: registerErrorEstimator(
ErrorEstimatorType name, std::unique_ptr<ErrorEstimator> ( *creator )(
int,
Domain * ) )
180std::unique_ptr<InitialCondition> ClassFactory :: createInitialCondition(
const char *name,
int number,
Domain *domain)
182 if (
conv2lower(name).compare(
"initialcondition") == 0 ) {
183 return std::make_unique<InitialCondition>(number, domain);
188bool ClassFactory :: registerNodalRecoveryModel( NodalRecoveryModel :: NodalRecoveryModelType name, std::unique_ptr<NodalRecoveryModel> ( *creator )(
Domain *) )
193std::unique_ptr<NodalRecoveryModel> ClassFactory :: createNodalRecoveryModel(NodalRecoveryModel :: NodalRecoveryModelType name,
Domain *domain)
199std::unique_ptr<Element> ClassFactory :: createElement(
const char *name,
int number,
Domain *domain)
204bool ClassFactory :: registerElement(
const char *name, std::unique_ptr<Element> ( *creator )(
int,
Domain * ) )
209std::unique_ptr<DofManager> ClassFactory :: createDofManager(
const char *name,
int number,
Domain *domain)
214bool ClassFactory :: registerDofManager(
const char *name, std::unique_ptr<DofManager> ( *creator )(
int,
Domain * ) )
219std::unique_ptr<GeneralBoundaryCondition> ClassFactory :: createBoundaryCondition(
const char *name,
int number,
Domain *domain)
224bool ClassFactory :: registerBoundaryCondition(
const char *name, std::unique_ptr<GeneralBoundaryCondition> ( *creator )(
int,
Domain * ) )
242std::unique_ptr<CrossSection> ClassFactory :: createCrossSection(
const char *name,
int number,
Domain *domain)
247bool ClassFactory :: registerCrossSection(
const char *name, std::unique_ptr<CrossSection> ( *creator )(
int,
Domain * ) )
252std::unique_ptr<Material> ClassFactory :: createMaterial(
const char *name,
int number,
Domain *domain)
257bool ClassFactory :: registerMaterial(
const char *name, std::unique_ptr<Material> ( *creator )(
int,
Domain * ) )
262std::unique_ptr<EngngModel> ClassFactory :: createEngngModel(
const char *name,
int number,
EngngModel *master)
267bool ClassFactory :: registerEngngModel(
const char *name, std::unique_ptr<EngngModel> ( *creator )(
int,
EngngModel * ) )
272std::unique_ptr<Function> ClassFactory :: createFunction(
const char *name,
int number,
Domain *domain)
277bool ClassFactory :: registerFunction(
const char *name, std::unique_ptr<Function> ( *creator )(
int,
Domain * ) )
282std::unique_ptr<NonlocalBarrier> ClassFactory :: createNonlocalBarrier(
const char *name,
int number,
Domain *domain)
287bool ClassFactory :: registerNonlocalBarrier(
const char *name, std::unique_ptr<NonlocalBarrier> ( *creator )(
int,
Domain * ) )
292std::unique_ptr<ExportModule> ClassFactory :: createExportModule(
const char *name,
int number,
EngngModel *emodel)
297bool ClassFactory :: registerExportModule(
const char *name, std::unique_ptr<ExportModule> ( *creator )(
int,
EngngModel * ) )
302std::unique_ptr<Monitor> ClassFactory :: createMonitor(
const char *name,
int number)
307bool ClassFactory :: registerMonitor(
const char *name, std::unique_ptr<Monitor> ( *creator )(
int ) )
312std::unique_ptr<SparseNonLinearSystemNM>ClassFactory :: createNonLinearSolver(
const char *name,
Domain *domain,
EngngModel *emodel)
317bool ClassFactory :: registerSparseNonLinearSystemNM(
const char *name, std::unique_ptr<SparseNonLinearSystemNM> ( *creator )(
Domain *,
EngngModel * ) )
322std::unique_ptr<InitModule> ClassFactory :: createInitModule(
const char *name,
int number,
EngngModel *emodel)
327bool ClassFactory :: registerInitModule(
const char *name, std::unique_ptr<InitModule> ( *creator )(
int,
EngngModel * ) )
332std::unique_ptr<TopologyDescription> ClassFactory :: createTopology(
const char *name,
Domain *domain)
337bool ClassFactory :: registerTopologyDescription(
const char *name, std::unique_ptr<TopologyDescription> ( *creator )(
Domain * ) )
344std::unique_ptr<EnrichmentItem> ClassFactory :: createEnrichmentItem(
const char *name,
int number,
XfemManager *xm,
Domain *domain)
349bool ClassFactory :: registerEnrichmentItem(
const char *name, std::unique_ptr<EnrichmentItem> ( *creator )(
int,
XfemManager *,
Domain * ) )
354std::unique_ptr<NucleationCriterion> ClassFactory :: createNucleationCriterion(
const char *name,
Domain *domain)
359bool ClassFactory :: registerNucleationCriterion(
const char *name, std::unique_ptr<NucleationCriterion> ( *creator )(
Domain * ) )
364std::unique_ptr<EnrichmentFunction> ClassFactory :: createEnrichmentFunction(
const char *name,
int number,
Domain *domain)
369bool ClassFactory :: registerEnrichmentFunction(
const char *name, std::unique_ptr<EnrichmentFunction> ( *creator )(
int,
Domain * ) )
375std::unique_ptr<EnrichmentDomain> ClassFactory :: createEnrichmentDomain(
const char *name)
380bool ClassFactory :: registerEnrichmentDomain(
const char *name, std::unique_ptr<EnrichmentDomain> ( *creator )( ) )
382 return cf_store(enrichmentDomainList, name, creator);
386std::unique_ptr<EnrichmentFront> ClassFactory :: createEnrichmentFront(
const char *name)
391bool ClassFactory :: registerEnrichmentFront(
const char *name, std::unique_ptr<EnrichmentFront> ( *creator )( ) )
396std::unique_ptr<PropagationLaw> ClassFactory :: createPropagationLaw(
const char *name)
401bool ClassFactory :: registerPropagationLaw(
const char *name, std::unique_ptr<PropagationLaw> ( *creator )( ) )
406std::unique_ptr<BasicGeometry> ClassFactory :: createGeometry(
const char *name)
411bool ClassFactory :: registerGeometry(
const char *name, std::unique_ptr<BasicGeometry> ( *creator )( ) )
416std::unique_ptr<XfemManager> ClassFactory :: createXfemManager(
const char *name,
Domain *domain)
421bool ClassFactory :: registerXfemManager(
const char *name, std::unique_ptr<XfemManager> ( *creator )(
Domain * ) )
429std::unique_ptr<FailureCriteria> ClassFactory :: createFailureCriteria(
const char *name,
int number,
FractureManager *fracManager)
434bool ClassFactory :: registerFailureCriteria(
const char *name, std::unique_ptr<FailureCriteria> ( *creator )(
int,
FractureManager * ) )
439std::unique_ptr<FailureCriteriaStatus> ClassFactory :: createFailureCriteriaStatus(
const char *name,
int number,
FailureCriteria *fc)
444bool ClassFactory :: registerFailureCriteriaStatus(
const char *name, std::unique_ptr<FailureCriteriaStatus> ( *creator )(
int,
FailureCriteria * ) )
464 return std::make_unique<GaussIntegrationRule>(number, e);
466 return std::make_unique<LobattoIntegrationRule>(number, e);
481bool ClassFactory :: registerMesherInterface(
MeshPackageType name, std::unique_ptr<MesherInterface> ( *creator )(
Domain * ) )
492std::unique_ptr<LoadBalancerMonitor> ClassFactory :: createLoadBalancerMonitor(
const char *name,
EngngModel *emodel)
497bool ClassFactory :: registerLoadBalancerMonitor(
const char *name, std::unique_ptr<LoadBalancerMonitor> ( *creator )(
EngngModel * ) )
502std::unique_ptr<LoadBalancer> ClassFactory :: createLoadBalancer(
const char *name,
Domain *domain)
507bool ClassFactory :: registerLoadBalancer(
const char *name, std::unique_ptr<LoadBalancer> ( *creator )(
Domain * ) )
513std::unique_ptr<TimeStepReductionStrategy> ClassFactory :: createTimeStepReductionStrategy(
const char *name,
int number)
518bool ClassFactory :: registerTimeStepReductionStrategy(
const char *name, std::unique_ptr<TimeStepReductionStrategy> ( *creator )(
int ) )
525std::unique_ptr<Term> ClassFactory :: createTerm(
const char *name)
531bool ClassFactory :: registerTerm(
const char *name, std::unique_ptr<Term> ( *creator )() )
536std::unique_ptr<Field> ClassFactory :: createField(
const char *name)
541bool ClassFactory :: registerField(
const char *name, std::unique_ptr<Field> ( *creator )() )
546std::map<std::string,std::list<std::string>> ClassFactory :: getRegisteredNames () {
547 std::map<std::string,std::list<std::string>> ret=std::map<std::string,std::list<std::string>>();
548 #define N(a,b) { auto& l=ret[#a]; for(const auto& kv: b) l.push_back(kv.first); };
549 #define E(a,b) { auto& l=ret[#a]; for(const auto& kv: b) l.push_back(std::to_string((int)kv.first)); };
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.
std ::map< GenEigvalSolverType, std::unique_ptr< SparseGeneralEigenValueSystemNM >(*)(Domain *, EngngModel *) > generalizedEigenValueSolverList
Associative container containing sparse generalized eigenvalue creators.
std ::map< dofType, Dof *(*)(DofIDItem, DofManager *) > dofList
Associative container containing dof creators.
std ::map< std ::string, std::unique_ptr< Function >(*)(int, Domain *) > funcList
Associative container containing load time function creators with function name as key.
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< 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 ::map< std ::string, std::unique_ptr< SparseNonLinearSystemNM >(*)(Domain *, EngngModel *) > nonlinList
Associative container containing nonlinear solver creators.
std ::map< std ::string, std::unique_ptr< TopologyDescription >(*)(Domain *) > topologyList
Associative container containing topology description creators.
std ::map< std ::string, std::unique_ptr< LoadBalancer >(*)(Domain *) > loadBalancerList
Associative container containing load balancer creators.
std ::map< std ::string, std::unique_ptr< DofManager >(*)(int, Domain *) > dofmanList
Associative container containing dofmanager creators with dofmanager name as key.
std::map< std::string, std::unique_ptr< ContactSurface >(*)(int, Domain *) > contactSurfaceList
Associative container containing contact surface creators with name as key.
std ::map< std ::string, std::unique_ptr< BasicGeometry >(*)() > geometryList
Associative container containing geometry creators.
std ::map< std ::string, std::unique_ptr< CrossSection >(*)(int, Domain *) > csList
Associative container containing cross section creators with cross section name as key.
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 ::map< std ::string, std::unique_ptr< FailureCriteriaStatus >(*)(int, FailureCriteria *) > failureCriteriaStatusList
std ::map< std ::string, std::unique_ptr< TimeStepReductionStrategy >(*)(int) > timeStepReductionStrategyList
Associative container containing TimeStepReductionStrategy.
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::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.
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.
std ::map< std ::string, std::unique_ptr< InitModule >(*)(int, EngngModel *) > initList
Associative container containing init module creators.
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.
std ::map< MaterialMappingAlgorithmType, std::unique_ptr< MaterialMappingAlgorithm >(*)() > materialMappingList
Associative container containing material mapping algorithm creators.
std ::map< std ::string, std::unique_ptr< FailureCriteria >(*)(int, FractureManager *) > failureCriteriaList
Associative container containing failure criteria creators.
std ::map< std ::string, std::unique_ptr< EnrichmentFunction >(*)(int, Domain *) > enrichFuncList
Associative container containing enrichment function creators.
std ::map< std ::string, std::unique_ptr< Material >(*)(int, Domain *) > matList
Associative container containing material creators with material name as key.
Class representing a weak form expression to be evaluated (integrated). It defines two key methods:
std::string conv2lower(std ::string input)
ClassFactory & GiveClassFactory()
MaterialMappingAlgorithmType
C * cf_create2(const T &list, V name, As ... args)
dofType
Dof Type, determines the type of DOF created.
std::unique_ptr< C > cf_create4(const T &list, V name, As ... args)
bool cf_store(T &list, const char *name, C &creator)
ClassFactory & classFactory
std::unique_ptr< C > cf_create(const T &list, const char *name, As ... args)
Dof * dofCreator(DofIDItem dofid, DofManager *dman)
bool cf_store2(T &list, V name, C &creator)