#include "CreatorMap.h" #include "OEMSolver.h" #include "Preconditioner.h" #include "DiagonalPreconditioner.h" #include "ILUPreconditioner.h" #include "ILUTPreconditioner.h" #include "NonLinSolver.h" #include "MatrixVector.h" #include "SystemVector.h" #include "Estimator.h" #include "ResidualEstimator.h" #include "ResidualParallelEstimator.h" #include "RecoveryEstimator.h" #include "LeafData.h" #include "SurfaceRegion_ED.h" #include "MultiGridWrapper.h" #include "DOFMatrix.h" #include "SparseVector.h" #include "GSSmoother.h" #include "JacobiSmoother.h" #include "ElementRegion_ED.h" #include "BiCGStab.h" #include "BiCGStab2.h" #include "BFGS_Precond.h" #include "BoxSmoother.h" #include "MultiGridPreconWrapper.h" #include "GMResSolver2.h" #include "TFQMR.h" #include "VecSymSolver.h" #include "UmfPackSolver.h" #include "PardisoSolver.h" #include "DuneSolver.h" namespace AMDiS { template<> void CreatorMap<OEMSolver<DOFVector<double> > >::addDefaultCreators() { OEMSolverCreator<DOFVector<double> > *creator; creator = NEW BiCGSolver<DOFVector<double> >::Creator; addCreator("bicgstab_albert", creator); creator = NEW CGSolver<DOFVector<double> >::Creator; addCreator("cg", creator); creator = NEW GMResSolver<DOFVector<double> >::Creator; addCreator("gmres", creator); creator = NEW ODirSolver<DOFVector<double> >::Creator; addCreator("odir", creator); creator = NEW OResSolver<DOFVector<double> >::Creator; addCreator("ores", creator); creator = NEW BiCGStab<DOFVector<double> >::Creator; addCreator("bicgstab", creator); creator = NEW MultiGridWrapperScal::Creator; addCreator("mg", creator); creator = NEW BiCGStab2<DOFVector<double> >::Creator; addCreator("bicgstab2", creator); // creator = NEW GMResSolver2<DOFVector<double> >::Creator; // addCreator("gmres2", creator); creator = NEW TFQMR<DOFVector<double> >::Creator; addCreator("tfqmr", creator); #ifdef HAVE_DUNE creator = NEW DuneSolver< DOFVector<double> >::Creator; addCreator("dune", creator); #endif } template<> void CreatorMap<SmootherBase<DOFMatrix, SparseVector<double>, std::set<DegreeOfFreedom> > >::addDefaultCreators() { SmootherCreator<DOFMatrix, SparseVector<double>, std::set<DegreeOfFreedom> > *creator; creator = NEW GSSmoother<DOFMatrix, SparseVector<double>, std::set<DegreeOfFreedom> >::Creator; addCreator("gs", creator); creator = NEW JacobiSmoother<DOFMatrix, SparseVector<double>, std::set<DegreeOfFreedom> >::Creator; addCreator("j", creator); } template<> void CreatorMap<PreconditionerScal>::addDefaultCreators() { CreatorInterface<PreconditionerScal> *creator; creator = NEW DiagonalPreconditioner::Creator; addCreator("diag", creator); creator = NEW ILUPreconditioner::Creator; addCreator("ilu", creator); creator = NEW ILUTPreconditioner::Creator; addCreator("ilut", creator); creator = NEW BFGS_Precond::Creator; addCreator("bfgs", creator); creator = NEW MGPreconWrapperScal::Creator; addCreator("mg", creator); } template<> void CreatorMap<NonLinSolver<DOFVector<double> > >::addDefaultCreators() { NonLinSolverCreator<DOFVector<double> > *creator; creator = NEW Newton<DOFVector<double> >::Creator; addCreator("newton", creator); creator = NEW NewtonS<DOFVector<double> >::Creator; addCreator("newton_fs", creator); } template<> void CreatorMap<OEMSolver<SystemVector> >::addDefaultCreators() { OEMSolverCreator<SystemVector> *creator; creator = NEW BiCGSolver<SystemVector>::Creator; addCreator("bicgstab_albert", creator); creator = NEW CGSolver<SystemVector>::Creator; addCreator("cg", creator); creator = NEW GMResSolver<SystemVector>::Creator; addCreator("gmres", creator); creator = NEW ODirSolver<SystemVector>::Creator; addCreator("odir", creator); creator = NEW OResSolver<SystemVector>::Creator; addCreator("ores", creator); creator = NEW BiCGStab<SystemVector>::Creator; addCreator("bicgstab", creator); creator = NEW BiCGStab2<SystemVector>::Creator; addCreator("bicgstab2", creator); creator = NEW MultiGridWrapperVec::Creator; addCreator("mg", creator); creator = NEW GMResSolver2<SystemVector>::Creator; addCreator("gmres2", creator); creator = NEW TFQMR<SystemVector>::Creator; addCreator("tfqmr", creator); creator = NEW VecSymSolver<SystemVector>::Creator; addCreator("vecsym", creator); #ifdef HAVE_UMFPACK creator = NEW UmfPackSolver<SystemVector>::Creator; addCreator("umfpack", creator); #endif #ifdef HAVE_MKL creator = NEW PardisoSolver<SystemVector>::Creator; addCreator("pardiso", creator); #endif #ifdef HAVE_DUNE creator = NEW DuneSolver<SystemVector>::Creator; addCreator("dune", creator); #endif } template<> void CreatorMap<SmootherBase<Matrix<DOFMatrix*>, Vector<SparseVector<double>*>, Vector< std::set<DegreeOfFreedom>*> > >::addDefaultCreators() { SmootherCreator<Matrix<DOFMatrix*>, Vector<SparseVector<double>*>, Vector< std::set<DegreeOfFreedom>*> > *creator; creator = NEW GSSmoother<Matrix<DOFMatrix*>, Vector<SparseVector<double>*>, Vector< std::set<DegreeOfFreedom>*> >::Creator; addCreator("gs", creator); creator = NEW JacobiSmoother<Matrix<DOFMatrix*>, Vector<SparseVector<double>*>, Vector< std::set<DegreeOfFreedom>*> >::Creator; addCreator("j", creator); creator = NEW BoxSmoother::Creator; addCreator("box", creator); } template<> void CreatorMap<NonLinSolver<SystemVector> >::addDefaultCreators() { NonLinSolverCreator<SystemVector> *creator; creator = NEW Newton<SystemVector>::Creator; addCreator("newton", creator); creator = NEW NewtonS<SystemVector>::Creator; addCreator("newton_fs", creator); } template<> void CreatorMap<Estimator>::addDefaultCreators() { EstimatorCreator *creator; creator = NEW ResidualEstimator::Creator; addCreator("residual", creator); #ifdef _OPENMP creator = NEW ResidualParallelEstimator::Creator; addCreator("residualparallel", creator); #endif creator = NEW RecoveryEstimator::Creator; addCreator("recovery", creator); } template<> void CreatorMap<ElementData>::addDefaultCreators() { CreatorInterface<ElementData> *creator; creator = NEW LeafDataEstimatable::Creator; addCreator("LeafDataEstimatable", creator); creator = NEW LeafDataEstimatableVec::Creator; addCreator("LeafDataEstimatableVec", creator); creator = NEW LeafDataCoarsenable::Creator; addCreator("LeafDataCoarsenable", creator); creator = NEW LeafDataCoarsenableVec::Creator; addCreator("LeafDataCoarsenableVec", creator); creator = NEW LeafDataPeriodic::Creator; addCreator("LeafDataPeriodic", creator); creator = NEW SurfaceRegion_ED::Creator; addCreator("SurfaceRegion_ED", creator); creator = NEW ElementRegion_ED::Creator; addCreator("ElementRegion_ED", creator); } }