Skip to content
Snippets Groups Projects
CreatorMap.cc 7.74 KiB
Newer Older
#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 "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 "BoxSmoother.h"
#include "MultiGridPreconWrapper.h"
#include "GMResSolver2.h"
#include "TFQMR.h"
#include "VecSymSolver.h"
#include "UmfPackSolver.h"

namespace AMDiS {

  template<>
  void CreatorMap<OEMSolver<DOFVector<double> > >::addDefaultCreators()
  {
    OEMSolverCreator<DOFVector<double> > *creator;

    creator = NEW BiCGSolver<DOFVector<double> >::Creator;
    addCreator("bicgstab_albert", creator);
    addCreator("1", creator);

    creator = NEW CGSolver<DOFVector<double> >::Creator;
    addCreator("cg", creator);
    addCreator("2", creator);

    creator = NEW GMResSolver<DOFVector<double> >::Creator;
    addCreator("gmres", creator);
    addCreator("3", creator);

    creator = NEW ODirSolver<DOFVector<double> >::Creator;
    addCreator("odir", creator);
    addCreator("4", creator);

    creator = NEW OResSolver<DOFVector<double> >::Creator;
    addCreator("ores", creator);  
    addCreator("5", creator);    

    //   creator = NEW BiCGStab_M<DOFVector<double> >::Creator;
    //   addCreator("bicgstab", creator);
    //   addCreator("6", creator);

    creator = NEW BiCGStab<DOFVector<double> >::Creator;
    addCreator("bicgstab", creator);
    addCreator("6", creator);

    creator = NEW MultiGridWrapperScal::Creator;
    addCreator("mg", creator);
    addCreator("7", creator);

    creator = NEW BiCGStab2<DOFVector<double> >::Creator;
    addCreator("bicgstab2", creator);
    addCreator("8", creator);

    //        creator = NEW GMResSolver2<DOFVector<double> >::Creator;
	//        addCreator("gmres2", creator);
	//    addCreator("9", creator);

    creator = NEW TFQMR<DOFVector<double> >::Creator;
    addCreator("tfqmr", creator);
    addCreator("10", creator);
  }

  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);
    addCreator("1", creator);

    creator = NEW JacobiSmoother<DOFMatrix, SparseVector<double>, ::std::set<DegreeOfFreedom> >::Creator;
    addCreator("j", creator);
    addCreator("2", creator);
  }

  template<>
  void CreatorMap<PreconditionerScal>::addDefaultCreators()
  {
    CreatorInterface<PreconditionerScal> *creator;

    creator =  NEW DiagonalPreconditioner::Creator;
    addCreator("diag", creator);
    addCreator("1", creator);

    creator = NEW ILUPreconditioner::Creator;
    addCreator("ilu", creator);
    addCreator("2", creator);

    creator = NEW ILUTPreconditioner::Creator;
    addCreator("ilut", creator);
    addCreator("3", creator);

    creator =  NEW MGPreconWrapperScal::Creator;
    addCreator("mg", creator);
    addCreator("4", creator);
  }

  template<>
  void CreatorMap<NonLinSolver<DOFVector<double> > >::addDefaultCreators()
  {
    NonLinSolverCreator<DOFVector<double> > *creator;

    creator = NEW Newton<DOFVector<double> >::Creator;
    addCreator("newton", creator);
    addCreator("1", creator);

    creator = NEW NewtonS<DOFVector<double> >::Creator;
    addCreator("newton_fs", creator);
    addCreator("2", creator);
  }

  template<>
  void CreatorMap<OEMSolver<SystemVector> >::addDefaultCreators()
  {
    OEMSolverCreator<SystemVector> *creator;

    creator = NEW BiCGSolver<SystemVector>::Creator;
    addCreator("bicgstab_albert", creator);
    addCreator("1", creator);

    creator = NEW CGSolver<SystemVector>::Creator;
    addCreator("cg", creator);
    addCreator("2", creator);

    creator = NEW GMResSolver<SystemVector>::Creator;
    addCreator("gmres", creator);
    addCreator("3", creator);

    creator = NEW ODirSolver<SystemVector>::Creator;
    addCreator("odir", creator);
    addCreator("4", creator);

    creator = NEW OResSolver<SystemVector>::Creator;
    addCreator("ores", creator);  
    addCreator("5", creator);    

    //   creator = NEW BiCGStab_M<SystemVector>::Creator;
    //   addCreator("bicgstab", creator);
    //   addCreator("6", creator);

    creator = NEW BiCGStab<SystemVector>::Creator;
    addCreator("bicgstab", creator);
    addCreator("6", creator);

    creator = NEW BiCGStab2<SystemVector>::Creator;
    addCreator("bicgstab2", creator);
    addCreator("8", creator);

    creator = NEW MultiGridWrapperVec::Creator;
    addCreator("mg", creator);
    addCreator("7", creator);

    creator = NEW GMResSolver2<SystemVector>::Creator;
    addCreator("gmres2", creator);
    addCreator("9", creator);

    creator = NEW TFQMR<SystemVector>::Creator;
    addCreator("tfqmr", creator);
    addCreator("10", creator);

    creator = NEW VecSymSolver<SystemVector>::Creator;
    addCreator("vecsym", creator);
    addCreator("11", creator);

#ifdef HAVE_UMFPACK
    creator = NEW UmfPackSolver<SystemVector>::Creator;
    addCreator("umfpack", creator);
    addCreator("12", 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);
    addCreator("1", creator);

    creator = NEW JacobiSmoother<Matrix<DOFMatrix*>, 
      Vector<SparseVector<double>*>,
      Vector<  ::std::set<DegreeOfFreedom>*> >::Creator;
    addCreator("j", creator);
    addCreator("2", creator);

    creator = NEW BoxSmoother::Creator;
    addCreator("box", creator);
    addCreator("3", creator);

  }

  template<>
  void CreatorMap<NonLinSolver<SystemVector> >::addDefaultCreators()
  {
    NonLinSolverCreator<SystemVector> *creator;

    creator = NEW Newton<SystemVector>::Creator;
    addCreator("newton", creator);
    addCreator("1", creator);

    creator = NEW NewtonS<SystemVector>::Creator;
    addCreator("newton_fs", creator);
    addCreator("2", creator);
  }

  template<>
  void CreatorMap<Estimator>::addDefaultCreators()
  {
    EstimatorCreator *creator;

    creator = NEW ResidualEstimator::Creator;
    addCreator("residual", creator);
    addCreator("1", creator);

    creator = NEW RecoveryEstimator::Creator;
    addCreator("recovery", creator);
    addCreator("2", 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);
  }

}