]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
PreconditionIdentity is not template class anymore
authorkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 4 Nov 1999 20:22:35 +0000 (20:22 +0000)
committerkanschat <kanschat@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 4 Nov 1999 20:22:35 +0000 (20:22 +0000)
git-svn-id: https://svn.dealii.org/trunk@1826 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/lac/include/lac/precondition.h
tests/Makefile
tests/deal.II/mg.cc
tests/deal.II/mglocal.cc
tests/lac/mg.cc
tests/lac/solver.cc
tests/lac/solver.checked

index 13ba73558b7b31e3dd396cc4170b1ee71890e3f9..8ad05245a3ef4de078c8e7bb9adea17a7fe79276 100644 (file)
  *
  * @author Guido Kanschat, 1999
  */
-template<class VECTOR>
 class PreconditionIdentity
 {
   public:
                                     /**
                                      * Execute preconditioning.
                                      */
+    template<class VECTOR>
     void operator() (VECTOR&, const VECTOR&) const;
 };
 
@@ -183,6 +183,49 @@ class PreconditionRelaxation
     double omega;
 };
 
+/**
+ * Preconditioner using an iterative solver.  This preconditioner uses
+ * a fully initialized LAC iterative solver for the approximate
+ * inverse of the matrix. Naturally, this solver needs another
+ * preconditionig method.
+ *
+ * Usually, the use of #ReductionControl# is preferred over the use of
+ * the basic #SolverControl in defining this solver.
+ *
+ * @author Guido Kanschat, 1999
+ */
+template<class SOLVER, class MATRIX, class PRECONDITION>
+class PreconditionLACSolver
+{
+  public:
+                                    /**
+                                     * Constructor.  Provide a solver
+                                     * object, a matrix, and another
+                                     * preconditioner for this.
+                                     */
+    PreconditionLACSolver(SOLVER&,
+                         const MATRIX&,
+                         const PRECONDITION&);
+                                    /**
+                                     * Execute preconditioning.
+                                     */
+    template<class VECTOR>
+    void operator() (VECTOR&, const VECTOR&) const;
+
+  private:
+                                    /**
+                                     * The solver class to use.
+                                     */
+    SOLVER& solver;
+                                    /**
+                                     * The matrix in use.
+                                     */
+    const MATRIX& matrix;
+                                    /**
+                                     * The preconditioner to use.
+                                     */
+    const PRECONDITION& precondition;
+};
 
 
 
@@ -190,7 +233,7 @@ class PreconditionRelaxation
 
 template<class VECTOR>
 void
-PreconditionIdentity<VECTOR>::operator() (VECTOR& dst, const VECTOR& src) const
+PreconditionIdentity::operator() (VECTOR& dst, const VECTOR& src) const
 {
   dst = src;
 }
@@ -228,4 +271,26 @@ PreconditionRelaxation<MATRIX, VECTOR>::operator() (VECTOR& dst,
   (matrix.*precondition)(dst, src, omega);
 }
 
+//////////////////////////////////////////////////////////////////////
+
+template<class SOLVER, class MATRIX, class PRECONDITION>
+PreconditionLACSolver<SOLVER, MATRIX, PRECONDITION>
+::PreconditionLACSolver(SOLVER& solver,
+                       const MATRIX& matrix,
+                       const PRECONDITION& precondition)
+               :
+               solver(solver), matrix(matrix), precondition(precondition)
+{}
+
+template<class SOLVER, class MATRIX, class PRECONDITION>
+template<class VECTOR>
+void
+PreconditionLACSolver<SOLVER, MATRIX, PRECONDITION>::operator() (VECTOR& dst,
+                                                                const VECTOR& src) const
+{
+  solver.solve(matrix, dst, src, precondition);
+}
+
+
+
 #endif
index 7269963fdb436884a1449ab3b9f5937387d2b7c6..c2bf1291067815e969904ff729bcff88ecbccb73 100644 (file)
@@ -5,3 +5,8 @@ all:
        cd base ; make
        cd lac ; make
        cd deal.II ; make
+
+clean:
+       cd base ; make clean
+       cd lac ; make clean
+       cd deal.II ; make clean
index bbd05a9cbb2c0e7887fa14e2d7dbd34ac187882c..b170f615453a104c02a977e3ef6f5048733ba348 100644 (file)
@@ -104,7 +104,7 @@ int main()
          SolverControl control(100, 1.e-12);
          SolverCG<SparseMatrix<double>, Vector<double> >solver(control, mem);
          
-         PreconditionIdentity<Vector<double> > precondition;
+         PreconditionIdentity precondition;
          solver.solve(A,u,f,precondition);
          
          u = 0.;
@@ -124,9 +124,9 @@ int main()
          SolverControl cgcontrol(10,0., false, false);
          PrimitiveVectorMemory<Vector<double> > cgmem;
          SolverCG<SparseMatrix<double>, Vector<double> > cgsolver(cgcontrol, cgmem);
-         PreconditionIdentity<Vector<double> > cgprec;
+         PreconditionIdentity cgprec;
          MGCoarseGridLACIteration<SolverCG<SparseMatrix<double>, Vector<double> >,
-           SparseMatrix<double>, PreconditionIdentity<Vector<double> > >
+           SparseMatrix<double>, PreconditionIdentity>
            coarse(cgsolver, mgA[0], cgprec);
          
          MGSmootherLAC smoother(mgA);
index 04e863b95bbb69deace66627476898ad588ea14a..f5bfdda87d5ec4164c67bb52a9ba3eac4435188d 100644 (file)
@@ -136,9 +136,9 @@ int main()
          SolverControl cgcontrol(20,0., false, false);
          PrimitiveVectorMemory<Vector<double> > cgmem;
          SolverCG<SparseMatrix<double>, Vector<double> > cgsolver(cgcontrol, cgmem);
-         PreconditionIdentity<Vector<double> > cgprec;
+         PreconditionIdentity cgprec;
          MGCoarseGridLACIteration<SolverCG<SparseMatrix<double>, Vector<double> >,
-           SparseMatrix<double>, PreconditionIdentity<Vector<double> > >
+           SparseMatrix<double>, PreconditionIdentity>
            coarse(cgsolver, mgA[tr.n_levels()-2], cgprec);
          
          MGSmootherRelaxation<double>
index f23dc45e2380a5ddc88c49c2c2f20332a341820d..3fc185677cd5d347dfbc00d1b065d3647e7c0669 100644 (file)
@@ -76,7 +76,7 @@ class MGSmootherLAC
 
 typedef MGCoarseGridLACIteration<SolverCG<SparseMatrix<double> , Vector<double>  >,
 SparseMatrix<double>, /*PreconditionRelaxation<SparseMatrix<double> ,*/
-  PreconditionIdentity<Vector<double> > >
+  PreconditionIdentity >
 Coarse;
 
 
@@ -133,7 +133,7 @@ int main()
       FDMG multigrid(level, A, transfer);
 
 //      PreconditionRelaxation<SparseMatrix<double> , Vector<double> >
-      PreconditionIdentity<Vector<double> >
+      PreconditionIdentity
        cgprec;//(A[minlevel], &SparseMatrix<double> ::template precondition_SSOR<double>, 1.2);
       
       Coarse coarsegrid(cgcg, A[minlevel], cgprec);
index 6ba1c218040c7bcf6402705974b184950a763281..8b61521f15db03436f1a563457a5e4a96c32af2a 100644 (file)
@@ -28,14 +28,15 @@ check_method( SOLVER& solver, const MATRIX& A,
   solver.solve(A,u,f,P);
 }
 
-main()
+int main()
 {
   ofstream logfile("solver.output");
   deallog.attach(logfile);
   deallog.depth_console(0);
   
-  PrimitiveVectorMemory<Vector<double>  > mem;
-  SolverControl control(50, 1.e-5);
+  GrowingVectorMemory<Vector<double>  > mem;
+  SolverControl control(100, 1.e-5);
+  SolverControl verbose_control(100, 1.e-5, true);
   SolverCG<SparseMatrix<float> , Vector<double>  > cg(control, mem);
   SolverGMRES<SparseMatrix<float> , Vector<double>  > gmres(control, mem,20);
   SolverBicgstab<SparseMatrix<float> , Vector<double>  > bicgstab(control, mem);
@@ -44,10 +45,10 @@ main()
 
   for (unsigned int size=4; size <= 40; size *= 3)
     {
-      deallog << "Size " << size << endl;
-      
       unsigned int dim = (size-1)*(size-1);
 
+      deallog << "Size " << size << " Unknowns " << dim << endl;
+      
                                       // Make matrix
       FDMatrix testproblem(size, size);
       SparseMatrixStruct structure(dim, dim, 5);
@@ -56,7 +57,7 @@ main()
       SparseMatrix<float>  A(structure);
       testproblem.laplacian(A);
 
-      PreconditionIdentity<Vector<double>  >
+      PreconditionIdentity
        prec_no;
       PreconditionRelaxation<SparseMatrix<float> , Vector<double> >
        prec_sor(A, &SparseMatrix<float> ::template precondition_SOR<double>, 1.2);
index 0bf127ea52fc2fce08a633d1d42331d205692b2e..01317a3f9cfc59d7d2a8883f044e46f73a0a681e 100644 (file)
@@ -1,10 +1,9 @@
 
-DEAL::Size 4
+DEAL::Size 4 Unknowns 9
 DEAL::SOR-diff:0
 DEAL:no:cg::Starting 
 DEAL:no:cg::Starting 
 DEAL:no:cg::Convergence step 2 
-DEAL:no:Bicgstab::Go!
 DEAL:no:Bicgstab::Starting 
 DEAL:no:Bicgstab::Convergence step 3 
 DEAL:no:GMRES::Starting 
@@ -17,33 +16,30 @@ DEAL:ssor:Richardson::Convergence step 15
 DEAL:ssor:cg::Starting 
 DEAL:ssor:cg::Starting 
 DEAL:ssor:cg::Convergence step 4 
-DEAL:ssor:Bicgstab::Go!
 DEAL:ssor:Bicgstab::Starting 
 DEAL:ssor:Bicgstab::Convergence step 3 
 DEAL:ssor:GMRES::Starting 
 DEAL:ssor:GMRES::Starting 
 DEAL:ssor:GMRES::Convergence step 3 
 DEAL:ssor:QMRS::Starting 
-DEAL:ssor:QMRS::Convergence step 11 
+DEAL:ssor:QMRS::Convergence step 5 
 DEAL:sor:Richardson::Starting 
 DEAL:sor:Richardson::Convergence step 10 
 DEAL:sor:cg::Starting 
 DEAL:sor:cg::Starting 
-DEAL:sor:cg::Failure step 50 
-DEAL:sor:Bicgstab::Go!
+DEAL:sor:cg::Failure step 100 
 DEAL:sor:Bicgstab::Starting 
 DEAL:sor:Bicgstab::Convergence step 5 
 DEAL:sor:GMRES::Starting 
 DEAL:sor:GMRES::Starting 
 DEAL:sor:GMRES::Convergence step 4 
 DEAL:sor:QMRS::Starting 
-DEAL:sor:QMRS::Convergence step 12 
-DEAL::Size 12
+DEAL:sor:QMRS::Failure step 100 
+DEAL::Size 12 Unknowns 121
 DEAL::SOR-diff:0
 DEAL:no:cg::Starting 
 DEAL:no:cg::Starting 
 DEAL:no:cg::Convergence step 16 
-DEAL:no:Bicgstab::Go!
 DEAL:no:Bicgstab::Starting 
 DEAL:no:Bicgstab::Convergence step 13 
 DEAL:no:GMRES::Starting 
@@ -52,67 +48,64 @@ DEAL:no:GMRES::Convergence step 16
 DEAL:no:QMRS::Starting 
 DEAL:no:QMRS::Convergence step 18 
 DEAL:ssor:Richardson::Starting 
-DEAL:ssor:Richardson::Failure step 50 
+DEAL:ssor:Richardson::Convergence step 88 
 DEAL:ssor:cg::Starting 
 DEAL:ssor:cg::Starting 
 DEAL:ssor:cg::Convergence step 10 
-DEAL:ssor:Bicgstab::Go!
 DEAL:ssor:Bicgstab::Starting 
 DEAL:ssor:Bicgstab::Convergence step 6 
 DEAL:ssor:GMRES::Starting 
 DEAL:ssor:GMRES::Starting 
 DEAL:ssor:GMRES::Convergence step 9 
 DEAL:ssor:QMRS::Starting 
-DEAL:ssor:QMRS::Convergence step 44 
+DEAL:ssor:QMRS::Convergence step 12 
 DEAL:sor:Richardson::Starting 
-DEAL:sor:Richardson::Failure step 5
+DEAL:sor:Richardson::Failure step 10
 DEAL:sor:cg::Starting 
 DEAL:sor:cg::Starting 
-DEAL:sor:cg::Failure step 50 
-DEAL:sor:Bicgstab::Go!
+DEAL:sor:cg::Failure step 100 
 DEAL:sor:Bicgstab::Starting 
 DEAL:sor:Bicgstab::Convergence step 19 
 DEAL:sor:GMRES::Starting 
 DEAL:sor:GMRES::Starting 
 DEAL:sor:GMRES::Convergence step 24 
 DEAL:sor:QMRS::Starting 
-DEAL:sor:QMRS::Convergence step 43 
-DEAL::Size 36
+DEAL:sor:QMRS::Failure step 100 
+DEAL::Size 36 Unknowns 1225
 DEAL::SOR-diff:2.21867e-30
 DEAL:no:cg::Starting 
 DEAL:no:cg::Starting 
-DEAL:no:cg::Failure step 50 
-DEAL:no:Bicgstab::Go!
+DEAL:no:cg::Convergence step 58 
 DEAL:no:Bicgstab::Starting 
 DEAL:no:Bicgstab::Convergence step 45 
 DEAL:no:GMRES::Starting 
 DEAL:no:GMRES::Starting 
-DEAL:no:GMRES::Failure step 5
+DEAL:no:GMRES::Failure step 10
 DEAL:no:QMRS::Starting 
-DEAL:no:QMRS::Failure step 50 
+DEAL:no:QMRS::Convergence step 63 
 DEAL:ssor:Richardson::Starting 
-DEAL:ssor:Richardson::Failure step 5
+DEAL:ssor:Richardson::Failure step 10
 DEAL:ssor:cg::Starting 
 DEAL:ssor:cg::Starting 
 DEAL:ssor:cg::Convergence step 26 
-DEAL:ssor:Bicgstab::Go!
 DEAL:ssor:Bicgstab::Starting 
 DEAL:ssor:Bicgstab::Convergence step 18 
 DEAL:ssor:GMRES::Starting 
 DEAL:ssor:GMRES::Starting 
 DEAL:ssor:GMRES::Convergence step 25 
 DEAL:ssor:QMRS::Starting 
-DEAL:ssor:QMRS::Failure step 50 
+DEAL:ssor:QMRS::Convergence step 28 
 DEAL:sor:Richardson::Starting 
-DEAL:sor:Richardson::Failure step 5
+DEAL:sor:Richardson::Failure step 10
 DEAL:sor:cg::Starting 
 DEAL:sor:cg::Starting 
-DEAL:sor:cg::Failure step 50 
-DEAL:sor:Bicgstab::Go!
+DEAL:sor:cg::Failure step 100 
 DEAL:sor:Bicgstab::Starting 
-DEAL:sor:Bicgstab::Failure step 50 
+DEAL:sor:Bicgstab::Convergence step 59 
 DEAL:sor:GMRES::Starting 
 DEAL:sor:GMRES::Starting 
-DEAL:sor:GMRES::Failure step 5
+DEAL:sor:GMRES::Failure step 10
 DEAL:sor:QMRS::Starting 
-DEAL:sor:QMRS::Failure step 50 
+DEAL:sor:QMRS::Failure step 100 
+DEAL::GrowingVectorMemory:Overall allocated vectors: 345
+DEAL::GrowingVectorMemory:Maximum allocated vectors: 20

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.