]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
FGMRES in SolverSelector
authorguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 7 Oct 2003 15:06:24 +0000 (15:06 +0000)
committerguido <guido@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 7 Oct 2003 15:06:24 +0000 (15:06 +0000)
git-svn-id: https://svn.dealii.org/trunk@8086 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/lac/include/lac/solver_gmres.h
deal.II/lac/include/lac/solver_selector.h

index ffa77bc04cb49c5b31100d10f70409b9c2dde82f..66768916c40aa57c3e08a00c2b2373b64143b10c 100644 (file)
@@ -301,6 +301,11 @@ class SolverGMRES : public Solver<VECTOR>
  *
  * FGMRES needs two vectors in each iteration steps yielding a total
  * of @p{2*AdditionalData::max_basis_size+1} auxiliary vectors.
+ *
+ * Caveat: documentation of this class is not up to date. There are
+ * also a few parameters of GMRES we would like to introduce here.
+ *
+ * @author Guido Kanschat, 2003
  */
 template <class VECTOR = Vector<double> >
 class SolverFGMRES : public Solver<VECTOR>
@@ -818,8 +823,8 @@ SolverFGMRES<VECTOR>::solve (
 
                                   // Generate an object where basis
                                   // vectors are stored.
-  typename SolverGMRES<VECTOR>::TmpVectors v (basis_size, this->memory);
-  typename SolverGMRES<VECTOR>::TmpVectors z (basis_size, this->memory);
+  typename internal::SolverGMRES::TmpVectors<VECTOR> v (basis_size, this->memory);
+  typename internal::SolverGMRES::TmpVectors<VECTOR> z (basis_size, this->memory);
   
                                   // number of the present iteration; this
                                   // number is not reset to zero upon a
index 298b4c0dc3a06bbb53ef58369fc8594cee95d2bc..52775c6f19fe0850bcc79760bac6fbf6c0de3221 100644 (file)
@@ -147,6 +147,13 @@ class SolverSelector : public Subscriptor
                                      * info see the @p{Solver} class.
                                      */
     void set_data(const typename SolverGMRES<VECTOR>
+                 ::AdditionalData &data);
+
+                                    /**
+                                     * Set the additional data. For more
+                                     * info see the @p{Solver} class.
+                                     */
+    void set_data(const typename SolverFGMRES<VECTOR>
                  ::AdditionalData &data);
 
                                     /**
@@ -202,6 +209,11 @@ class SolverSelector : public Subscriptor
                                      * Stores the additional data.
                                      */
     typename SolverGMRES<VECTOR>::AdditionalData gmres_data;
+
+                                    /**
+                                     * Stores the additional data.
+                                     */
+    typename SolverFGMRES<VECTOR>::AdditionalData fgmres_data;
 };
 
 /*@}*/
@@ -255,6 +267,12 @@ SolverSelector<VECTOR>::solve(const Matrix &A,
                                        gmres_data);
       solver.solve(A,x,b,precond);
     }
+  else if (solver_name=="fgmres")
+    {
+      SolverFGMRES<VECTOR> solver(*control,*vector_memory,
+                                       fgmres_data);
+      solver.solve(A,x,b,precond);
+    }
   else
     Assert(false,ExcSolverDoesNotExist(solver_name));
 }
@@ -263,7 +281,7 @@ SolverSelector<VECTOR>::solve(const Matrix &A,
 template <class VECTOR>
 std::string SolverSelector<VECTOR>::get_solver_names()
 {
-  return "richardson|cg|bicgstab|gmres";
+  return "richardson|cg|bicgstab|gmres|fgmres";
 }
 
 
@@ -275,6 +293,14 @@ void SolverSelector<VECTOR>::set_data(
 }
 
 
+template <class VECTOR>
+void SolverSelector<VECTOR>::set_data(
+  const typename SolverFGMRES<VECTOR>::AdditionalData &data)
+{ 
+  fgmres_data=data; 
+}
+
+
 template <class VECTOR>
 void SolverSelector<VECTOR>::set_data(
   const typename SolverRichardson<VECTOR>::AdditionalData &data)

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.