Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

GenLevelSolver.H

Go to the documentation of this file.
00001 /* _______              __
00002   / ___/ /  ___  __ _  / /  ___
00003  / /__/ _ \/ _ \/  ' \/ _ \/ _ \
00004  \___/_//_/\___/_/_/_/_.__/\___/ 
00005 */
00006 //
00007 // This software is copyright (C) by the Lawrence Berkeley
00008 // National Laboratory.  Permission is granted to reproduce
00009 // this software for non-commercial purposes provided that
00010 // this notice is left intact.
00011 // 
00012 // It is acknowledged that the U.S. Government has rights to
00013 // this software under Contract DE-AC03-765F00098 between
00014 // the U.S.  Department of Energy and the University of
00015 // California.
00016 //
00017 // This software is provided as a professional and academic
00018 // contribution for joint exchange. Thus it is experimental,
00019 // is provided ``as is'', with no warranties of any kind
00020 // whatsoever, no support, no promise of updates, or printed
00021 // documentation. By using this software, you acknowledge
00022 // that the Lawrence Berkeley National Laboratory and
00023 // Regents of the University of California shall have no
00024 // liability with respect to the infringement of other
00025 // copyrights by any part of this software.
00026 //
00027 // DTGraves, Fri, July 23, 1999
00028 
00029 #ifndef _GENLEVELSOLVER_H_
00030 #define _GENLEVELSOLVER_H_
00031 
00032 #include <cstdlib>
00033 #include <iostream>
00034 #include <assert.h>
00035 #include <cmath>
00036 
00037 #include "REAL.H"
00038 #include "IntVect.H"
00039 #include "Box.H"
00040 #include "DisjointBoxLayout.H"
00041 #include "ProblemDomain.H"
00042 
00043 #include "GenLevelMGOp.H"
00044 #include "GenLevelMG.H"
00045 
00047 
00051 template <class T> class GenLevelSolver
00052 {
00053 public:
00055 
00058   GenLevelSolver();
00059 
00061 
00078   GenLevelSolver(const DisjointBoxLayout&     a_grids, 
00079                  const DisjointBoxLayout*     a_baseGrids, 
00080                  const Box&                   a_domain, 
00081                  Real                         a_dxLevel,  
00082                  int                          a_nRefCrse,
00083                  const GenLevelMGOp<T>* const a_opin,
00084                  int                          a_ncomp = 1);
00085 
00087 
00104   GenLevelSolver(const DisjointBoxLayout&     a_grids, 
00105                  const DisjointBoxLayout*     a_baseGrids, 
00106                  const ProblemDomain&         a_domain, 
00107                  Real                         a_dxLevel,  
00108                  int                          a_nRefCrse,
00109                  const GenLevelMGOp<T>* const a_opin,
00110                  int                          a_ncomp);
00111 
00113   virtual ~GenLevelSolver();
00114 
00116   bool isDefined() const;
00117 
00119 
00136   virtual void define(const DisjointBoxLayout&     a_grids, 
00137                       const DisjointBoxLayout*     a_baseGrids,
00138                       const Box&                   a_domain, 
00139                       Real                         a_dxLevel,
00140                       int                          a_nRefCrse,
00141                       const GenLevelMGOp<T>* const a_opin,
00142                       int                          a_ncomp = 1);
00143 
00145 
00162   virtual void define(const DisjointBoxLayout&     a_grids, 
00163                       const DisjointBoxLayout*     a_baseGrids,
00164                       const ProblemDomain&         a_domain, 
00165                       Real                         a_dxLevel,
00166                       int                          a_nRefCrse,
00167                       const GenLevelMGOp<T>* const a_opin,
00168                       int                          a_ncomp = 1);
00169 
00171   void clearMemory();
00172 
00174   void setDefaultValues();
00175 
00177 
00186   void levelSolveH(T&       a_phi, 
00187                    const T& a_rhs,
00188                    bool     a_initializePhiToZero = true);
00189 
00191 
00202   void levelSolve(T&       a_phi, 
00203                   const T* a_phic, 
00204                   const T& a_rhs,
00205                   bool     a_initializePhiToZero = true);
00206 
00208   void setTolerance(Real a_tolerance);
00209 
00211 
00217   void setOperatorTolerance(Real a_operatorTolerance);
00218 
00220   void setVerbose(bool a_verbose);
00221 
00223   void setMaxIter(int a_maxIter);
00224 
00226 
00231   // added by Dan M, (9/20/02)
00232   void setMinIter(int a_minIter);
00233 
00234 protected:
00235   // GenLevelMG<T> level solver object to relax on this level
00236   GenLevelMG<T> m_levelMG;
00237 
00238   // GenLevelMGOp<T> object to define the operator on this level
00239   GenLevelMGOp<T>* m_levelOpPtr;
00240 
00241   // has this GenLevelSolver been defined yet?
00242   bool m_isDefined;
00243 
00244   // grids at this level
00245   DisjointBoxLayout m_grids;
00246 
00247   // problem domain at this level
00248   ProblemDomain m_domain;
00249 
00250   // residual
00251   T m_resid;
00252 
00253   // useful scratch space.
00254   T m_scratch;
00255 
00256   // correction
00257   T m_corr;
00258 
00259   //
00260   int m_nRefCrse;
00261 
00262   //
00263   Real m_dxLevel;
00264 
00265   //
00266   int m_maxIter;
00267 
00268   //
00269   int m_minIter;
00270 
00271   //
00272   Real m_tolerance;
00273 
00274   //
00275   Real m_operatorTolerance;
00276 
00277   //
00278   bool m_verbose;
00279 
00280 private:
00281   GenLevelSolver<T>(const GenLevelSolver<T>&) {};
00282   void operator= (const GenLevelSolver<T>&) {};
00283 };
00284 
00285 #include "GenLevelSolverImplem.H"
00286 
00287 #endif
00288 

Generated on Wed Apr 16 14:31:04 2003 for EBChombo by doxygen1.2.16