diff --git a/AMDiS/bin/Makefile.am b/AMDiS/bin/Makefile.am index 92492e07eed697de6d56596f3e17af7b496f8f30..19b3265cc4d8e5e50c7c1689410f0fda3346ba8c 100644 --- a/AMDiS/bin/Makefile.am +++ b/AMDiS/bin/Makefile.am @@ -47,8 +47,8 @@ libamdis_la_SOURCES = \ $(PARALLEL_AMDIS_SOURCES) \ $(SOURCE_DIR)/MultiGridPreconWrapper.h $(SOURCE_DIR)/MultiGridPreconWrapper.cc \ $(SOURCE_DIR)/LagrangeInterpolRestrict.h $(SOURCE_DIR)/LagrangeInterpolRestrict.cc \ -$(SOURCE_DIR)/BiCGStab.h $(SOURCE_DIR)/BiCGStab.hh\ -$(SOURCE_DIR)/BiCGStab2.h $(SOURCE_DIR)/BiCGStab2.hh\ +$(SOURCE_DIR)/BiCGStab.h $(SOURCE_DIR)/BiCGStab.hh \ +$(SOURCE_DIR)/BiCGStab2.h $(SOURCE_DIR)/BiCGStab2.hh \ $(SOURCE_DIR)/InterpolRestrictMatrix.h $(SOURCE_DIR)/InterpolRestrictMatrix.cc \ $(SOURCE_DIR)/DOFIndexed.h $(SOURCE_DIR)/DOFIndexed.cc \ $(SOURCE_DIR)/GNUPlotWriter.h $(SOURCE_DIR)/GNUPlotWriter.cc \ @@ -113,9 +113,21 @@ $(SOURCE_DIR)/demangle.h \ $(SOURCE_DIR)/DiagonalPreconditioner.h $(SOURCE_DIR)/DiagonalPreconditioner.cc \ $(SOURCE_DIR)/ILUPreconditioner.h $(SOURCE_DIR)/ILUPreconditioner.cc \ $(SOURCE_DIR)/ILUTPreconditioner.h $(SOURCE_DIR)/ILUTPreconditioner.cc \ -$(SOURCE_DIR)/DOFAdmin.h $(SOURCE_DIR)/DOFIterator.h $(SOURCE_DIR)/DOFMatrix.h $(SOURCE_DIR)/DOFVector.h $(SOURCE_DIR)/DOFVector.hh $(SOURCE_DIR)/DOFVector.cc $(SOURCE_DIR)/Element.h $(SOURCE_DIR)/ElementConnection.h \ -$(SOURCE_DIR)/ElInfo.h $(SOURCE_DIR)/ElInfo1d.h $(SOURCE_DIR)/ElInfo2d.h $(SOURCE_DIR)/ElInfo3d.h $(SOURCE_DIR)/Error.h \ -$(SOURCE_DIR)/Error.hh $(SOURCE_DIR)/Estimator.h $(SOURCE_DIR)/Estimator.cc $(SOURCE_DIR)/FiniteElemSpace.h $(SOURCE_DIR)/FixVec.h $(SOURCE_DIR)/FixVec.hh $(SOURCE_DIR)/FixVecConvert.h $(SOURCE_DIR)/Flag.h $(SOURCE_DIR)/Global.h \ +$(SOURCE_DIR)/QN_Precond.h $(SOURCE_DIR)/QN_Precond.hh \ +$(SOURCE_DIR)/BFGS_Precond.h $(SOURCE_DIR)/BFGS_Precond.cc \ +$(SOURCE_DIR)/DOFAdmin.h \ +$(SOURCE_DIR)/DOFIterator.h \ +$(SOURCE_DIR)/DOFMatrix.h \ +$(SOURCE_DIR)/DOFVector.h $(SOURCE_DIR)/DOFVector.hh $(SOURCE_DIR)/DOFVector.cc \ +$(SOURCE_DIR)/Element.h $(SOURCE_DIR)/ElementConnection.h \ +$(SOURCE_DIR)/ElInfo.h $(SOURCE_DIR)/ElInfo1d.h $(SOURCE_DIR)/ElInfo2d.h $(SOURCE_DIR)/ElInfo3d.h \ +$(SOURCE_DIR)/Error.h $(SOURCE_DIR)/Error.hh \ +$(SOURCE_DIR)/Estimator.h $(SOURCE_DIR)/Estimator.cc \ +$(SOURCE_DIR)/FiniteElemSpace.h \ +$(SOURCE_DIR)/FixVec.h $(SOURCE_DIR)/FixVec.hh \ +$(SOURCE_DIR)/FixVecConvert.h \ +$(SOURCE_DIR)/Flag.h \ +$(SOURCE_DIR)/Global.h \ $(SOURCE_DIR)/GMResSolver.h \ $(SOURCE_DIR)/GMResSolver.hh \ $(SOURCE_DIR)/GMResSolver2.h \ $(SOURCE_DIR)/GMResSolver2.hh \ $(SOURCE_DIR)/TFQMR.h \ $(SOURCE_DIR)/TFQMR.hh \ diff --git a/AMDiS/bin/Makefile.in b/AMDiS/bin/Makefile.in index a6ee22916930ef2cca49f9c51018480919a3e73c..657a40e3c6bb6d4c84b2cf1a0aba75fe6a137a7d 100644 --- a/AMDiS/bin/Makefile.in +++ b/AMDiS/bin/Makefile.in @@ -156,7 +156,9 @@ am__libamdis_la_SOURCES_DIST = $(PARALLEL_DIR)/ConditionalEstimator.h \ $(SOURCE_DIR)/ILUPreconditioner.h \ $(SOURCE_DIR)/ILUPreconditioner.cc \ $(SOURCE_DIR)/ILUTPreconditioner.h \ - $(SOURCE_DIR)/ILUTPreconditioner.cc $(SOURCE_DIR)/DOFAdmin.h \ + $(SOURCE_DIR)/ILUTPreconditioner.cc $(SOURCE_DIR)/QN_Precond.h \ + $(SOURCE_DIR)/QN_Precond.hh $(SOURCE_DIR)/BFGS_Precond.h \ + $(SOURCE_DIR)/BFGS_Precond.cc $(SOURCE_DIR)/DOFAdmin.h \ $(SOURCE_DIR)/DOFIterator.h $(SOURCE_DIR)/DOFMatrix.h \ $(SOURCE_DIR)/DOFVector.h $(SOURCE_DIR)/DOFVector.hh \ $(SOURCE_DIR)/DOFVector.cc $(SOURCE_DIR)/Element.h \ @@ -258,11 +260,12 @@ am_libamdis_la_OBJECTS = $(am__objects_1) \ libamdis_la-AdaptInstationary.lo \ libamdis_la-DiagonalPreconditioner.lo \ libamdis_la-ILUPreconditioner.lo \ - libamdis_la-ILUTPreconditioner.lo libamdis_la-DOFVector.lo \ - libamdis_la-Estimator.lo libamdis_la-ProblemInstat.lo \ - libamdis_la-ProblemNonLin.lo libamdis_la-NonLinUpdater.lo \ - libamdis_la-QPsiPhi.lo libamdis_la-BasisFunction.lo \ - libamdis_la-Boundary.lo libamdis_la-CoarseningManager.lo \ + libamdis_la-ILUTPreconditioner.lo libamdis_la-BFGS_Precond.lo \ + libamdis_la-DOFVector.lo libamdis_la-Estimator.lo \ + libamdis_la-ProblemInstat.lo libamdis_la-ProblemNonLin.lo \ + libamdis_la-NonLinUpdater.lo libamdis_la-QPsiPhi.lo \ + libamdis_la-BasisFunction.lo libamdis_la-Boundary.lo \ + libamdis_la-CoarseningManager.lo \ libamdis_la-CoarseningManager1d.lo \ libamdis_la-CoarseningManager2d.lo \ libamdis_la-CoarseningManager3d.lo libamdis_la-demangle.lo \ @@ -460,8 +463,8 @@ libamdis_la_SOURCES = \ $(PARALLEL_AMDIS_SOURCES) \ $(SOURCE_DIR)/MultiGridPreconWrapper.h $(SOURCE_DIR)/MultiGridPreconWrapper.cc \ $(SOURCE_DIR)/LagrangeInterpolRestrict.h $(SOURCE_DIR)/LagrangeInterpolRestrict.cc \ -$(SOURCE_DIR)/BiCGStab.h $(SOURCE_DIR)/BiCGStab.hh\ -$(SOURCE_DIR)/BiCGStab2.h $(SOURCE_DIR)/BiCGStab2.hh\ +$(SOURCE_DIR)/BiCGStab.h $(SOURCE_DIR)/BiCGStab.hh \ +$(SOURCE_DIR)/BiCGStab2.h $(SOURCE_DIR)/BiCGStab2.hh \ $(SOURCE_DIR)/InterpolRestrictMatrix.h $(SOURCE_DIR)/InterpolRestrictMatrix.cc \ $(SOURCE_DIR)/DOFIndexed.h $(SOURCE_DIR)/DOFIndexed.cc \ $(SOURCE_DIR)/GNUPlotWriter.h $(SOURCE_DIR)/GNUPlotWriter.cc \ @@ -526,9 +529,21 @@ $(SOURCE_DIR)/demangle.h \ $(SOURCE_DIR)/DiagonalPreconditioner.h $(SOURCE_DIR)/DiagonalPreconditioner.cc \ $(SOURCE_DIR)/ILUPreconditioner.h $(SOURCE_DIR)/ILUPreconditioner.cc \ $(SOURCE_DIR)/ILUTPreconditioner.h $(SOURCE_DIR)/ILUTPreconditioner.cc \ -$(SOURCE_DIR)/DOFAdmin.h $(SOURCE_DIR)/DOFIterator.h $(SOURCE_DIR)/DOFMatrix.h $(SOURCE_DIR)/DOFVector.h $(SOURCE_DIR)/DOFVector.hh $(SOURCE_DIR)/DOFVector.cc $(SOURCE_DIR)/Element.h $(SOURCE_DIR)/ElementConnection.h \ -$(SOURCE_DIR)/ElInfo.h $(SOURCE_DIR)/ElInfo1d.h $(SOURCE_DIR)/ElInfo2d.h $(SOURCE_DIR)/ElInfo3d.h $(SOURCE_DIR)/Error.h \ -$(SOURCE_DIR)/Error.hh $(SOURCE_DIR)/Estimator.h $(SOURCE_DIR)/Estimator.cc $(SOURCE_DIR)/FiniteElemSpace.h $(SOURCE_DIR)/FixVec.h $(SOURCE_DIR)/FixVec.hh $(SOURCE_DIR)/FixVecConvert.h $(SOURCE_DIR)/Flag.h $(SOURCE_DIR)/Global.h \ +$(SOURCE_DIR)/QN_Precond.h $(SOURCE_DIR)/QN_Precond.hh \ +$(SOURCE_DIR)/BFGS_Precond.h $(SOURCE_DIR)/BFGS_Precond.cc \ +$(SOURCE_DIR)/DOFAdmin.h \ +$(SOURCE_DIR)/DOFIterator.h \ +$(SOURCE_DIR)/DOFMatrix.h \ +$(SOURCE_DIR)/DOFVector.h $(SOURCE_DIR)/DOFVector.hh $(SOURCE_DIR)/DOFVector.cc \ +$(SOURCE_DIR)/Element.h $(SOURCE_DIR)/ElementConnection.h \ +$(SOURCE_DIR)/ElInfo.h $(SOURCE_DIR)/ElInfo1d.h $(SOURCE_DIR)/ElInfo2d.h $(SOURCE_DIR)/ElInfo3d.h \ +$(SOURCE_DIR)/Error.h $(SOURCE_DIR)/Error.hh \ +$(SOURCE_DIR)/Estimator.h $(SOURCE_DIR)/Estimator.cc \ +$(SOURCE_DIR)/FiniteElemSpace.h \ +$(SOURCE_DIR)/FixVec.h $(SOURCE_DIR)/FixVec.hh \ +$(SOURCE_DIR)/FixVecConvert.h \ +$(SOURCE_DIR)/Flag.h \ +$(SOURCE_DIR)/Global.h \ $(SOURCE_DIR)/GMResSolver.h \ $(SOURCE_DIR)/GMResSolver.hh \ $(SOURCE_DIR)/GMResSolver2.h \ $(SOURCE_DIR)/GMResSolver2.hh \ $(SOURCE_DIR)/TFQMR.h \ $(SOURCE_DIR)/TFQMR.hh \ @@ -652,6 +667,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-AdaptInstationary.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-AdaptStationary.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-Assembler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-BFGS_Precond.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-BasisFunction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-Boundary.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libamdis_la-BoundaryManager.Plo@am__quote@ @@ -1140,6 +1156,13 @@ libamdis_la-ILUTPreconditioner.lo: $(SOURCE_DIR)/ILUTPreconditioner.cc @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -c -o libamdis_la-ILUTPreconditioner.lo `test -f '$(SOURCE_DIR)/ILUTPreconditioner.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/ILUTPreconditioner.cc +libamdis_la-BFGS_Precond.lo: $(SOURCE_DIR)/BFGS_Precond.cc +@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -MT libamdis_la-BFGS_Precond.lo -MD -MP -MF "$(DEPDIR)/libamdis_la-BFGS_Precond.Tpo" -c -o libamdis_la-BFGS_Precond.lo `test -f '$(SOURCE_DIR)/BFGS_Precond.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/BFGS_Precond.cc; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libamdis_la-BFGS_Precond.Tpo" "$(DEPDIR)/libamdis_la-BFGS_Precond.Plo"; else rm -f "$(DEPDIR)/libamdis_la-BFGS_Precond.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$(SOURCE_DIR)/BFGS_Precond.cc' object='libamdis_la-BFGS_Precond.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -c -o libamdis_la-BFGS_Precond.lo `test -f '$(SOURCE_DIR)/BFGS_Precond.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/BFGS_Precond.cc + libamdis_la-DOFVector.lo: $(SOURCE_DIR)/DOFVector.cc @am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libamdis_la_CXXFLAGS) $(CXXFLAGS) -MT libamdis_la-DOFVector.lo -MD -MP -MF "$(DEPDIR)/libamdis_la-DOFVector.Tpo" -c -o libamdis_la-DOFVector.lo `test -f '$(SOURCE_DIR)/DOFVector.cc' || echo '$(srcdir)/'`$(SOURCE_DIR)/DOFVector.cc; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libamdis_la-DOFVector.Tpo" "$(DEPDIR)/libamdis_la-DOFVector.Plo"; else rm -f "$(DEPDIR)/libamdis_la-DOFVector.Tpo"; exit 1; fi diff --git a/AMDiS/src/CreatorMap.cc b/AMDiS/src/CreatorMap.cc index c2548b115626ac611824565a1d9c8580946265c3..1d66229964919374349e95a54054117be0059056 100644 --- a/AMDiS/src/CreatorMap.cc +++ b/AMDiS/src/CreatorMap.cc @@ -19,6 +19,7 @@ #include "ElementRegion_ED.h" #include "BiCGStab.h" #include "BiCGStab2.h" +#include "BFGS_Precond.h" #include "BoxSmoother.h" #include "MultiGridPreconWrapper.h" #include "GMResSolver2.h" @@ -35,49 +36,36 @@ namespace AMDiS { 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); + // addCreator("gmres2", creator); creator = NEW TFQMR<DOFVector<double> >::Creator; addCreator("tfqmr", creator); - addCreator("10", creator); } + template<> void CreatorMap<SmootherBase<DOFMatrix, SparseVector<double>, @@ -87,13 +75,12 @@ namespace AMDiS { 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() { @@ -101,21 +88,21 @@ namespace AMDiS { 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 BFGS_Precond::Creator; + addCreator("bfgs", creator); creator = NEW MGPreconWrapperScal::Creator; addCreator("mg", creator); - addCreator("4", creator); } + template<> void CreatorMap<NonLinSolver<DOFVector<double> > >::addDefaultCreators() { @@ -123,13 +110,12 @@ namespace AMDiS { 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() { @@ -137,59 +123,44 @@ namespace AMDiS { 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>*>, @@ -203,20 +174,17 @@ namespace AMDiS { 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() { @@ -224,13 +192,12 @@ namespace AMDiS { 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() { @@ -238,13 +205,12 @@ namespace AMDiS { 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() { diff --git a/AMDiS/src/Preconditioner.h b/AMDiS/src/Preconditioner.h index 5f8d2ca96bc291aa6869846924b9df439e310bc5..5ddec677ca8025c1450a1bb665e830864e75f216 100644 --- a/AMDiS/src/Preconditioner.h +++ b/AMDiS/src/Preconditioner.h @@ -103,7 +103,9 @@ namespace AMDiS { /** \brief * Sets \ref bound. */ - inline void setBound(DOFVector<BoundaryType> *b) { bound = b; }; + inline void setBound(DOFVector<BoundaryType> *b) { + bound = b; + }; protected: /** \brief diff --git a/AMDiS/src/UmfPackSolver.hh b/AMDiS/src/UmfPackSolver.hh index c03458d657436f54d55a38144000428a087ea007..b0aa82aaa1d5a3ebe8627ba93a65613388ad3742 100644 --- a/AMDiS/src/UmfPackSolver.hh +++ b/AMDiS/src/UmfPackSolver.hh @@ -158,7 +158,13 @@ namespace AMDiS { matVec->matVec(NoTranspose, *p, *r); *r += *b; - MSG("Residual: %e\n", norm(r)); + this->residual = norm(r); + + MSG("Residual: %e\n", this->residual); + + if (this->residual < this->tolerance) { + ERROR_EXIT("UMFPACK could not solve the system!\n"); + } return(1); }