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

LevelMG.H

Go to the documentation of this file.
00001 /*   _______              __
00002     / ___/ /  ___  __ _  / /  ___
00003    / /__/ _ \/ _ \/  V \/ _ \/ _ \
00004    \___/_//_/\___/_/_/_/_.__/\___/
00005 */
00006 // CHOMBO Copyright (c) 2000-2004, The Regents of the University of
00007 // California, through Lawrence Berkeley National Laboratory (subject to
00008 // receipt of any required approvals from U.S. Dept. of Energy).  All
00009 // rights reserved.
00010 //
00011 // Redistribution and use in source and binary forms, with or without
00012 // modification, are permitted provided that the following conditions are met:
00013 //
00014 // (1) Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 // (2) Redistributions in binary form must reproduce the above copyright
00017 // notice, this list of conditions and the following disclaimer in the
00018 // documentation and/or other materials provided with the distribution.
00019 // (3) Neither the name of Lawrence Berkeley National Laboratory, U.S.
00020 // Dept. of Energy nor the names of its contributors may be used to endorse
00021 // or promote products derived from this software without specific prior
00022 // written permission.
00023 //
00024 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00025 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00026 // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00027 // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
00028 // OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00029 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00030 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00031 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00032 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00033 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00034 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00035 //
00036 // You are under no obligation whatsoever to provide any bug fixes,
00037 // patches, or upgrades to the features, functionality or performance of
00038 // the source code ("Enhancements") to anyone; however, if you choose to
00039 // make your Enhancements available either publicly, or directly to
00040 // Lawrence Berkeley National Laboratory, without imposing a separate
00041 // written license agreement for such Enhancements, then you hereby grant
00042 // the following license: a non-exclusive, royalty-free perpetual license
00043 // to install, use, modify, prepare derivative works, incorporate into
00044 // other computer software, distribute, and sublicense such Enhancements or
00045 // derivative works thereof, in binary and source code form.
00046 //
00047 // TRADEMARKS. Product and company names mentioned herein may be the
00048 // trademarks of their respective owners.  Any rights not expressly granted
00049 // herein are reserved.
00050 //
00051 
00052 // DTGraves, Fri, July 16, 1999
00053 
00054 #ifndef _LEVELMG_H_
00055 #define _LEVELMG_H_
00056 
00057 #include <iostream>
00058 #include <cmath>
00059 #include <cassert>
00060 #include <cstdlib>
00061 
00062 #include "REAL.H"
00063 #include "IntVect.H"
00064 #include "Box.H"
00065 #include "DisjointBoxLayout.H"
00066 #include "FArrayBox.H"
00067 #include "LevelData.H"
00068 #include "CoarseAverage.H"
00069 #include "LevelOp.H"
00070 #include "ProblemDomain.H"
00071 
00073 
00078 class LevelMG
00079 {
00080 public:
00082   bool isDefined() const;
00083 
00085   LevelMG();
00086 
00088   LevelMG(const DisjointBoxLayout& a_ba,
00089           const DisjointBoxLayout* a_baseBaPtr,
00090           Real                     a_dxLevel,
00091           int                      a_refRatio,
00092           const  Box&              a_domain,
00093           int                      a_nCoarserLevels,
00094           const LevelOp* const     a_opin,
00095           int                      a_ncomp=1);
00096 
00098   LevelMG(const DisjointBoxLayout& a_ba,
00099           const DisjointBoxLayout* a_baseBaPtr,
00100           Real                     a_dxLevel,
00101           int                      a_refRatio,
00102           const ProblemDomain&     a_domain,
00103           int                      a_nCoarserLevels,
00104           const LevelOp* const     a_opin,
00105           int                      a_ncomp=1);
00106 
00108   void define(const DisjointBoxLayout& a_ba,
00109               const DisjointBoxLayout* a_baseBaPtr,
00110               Real                     a_dxLevel,
00111               int                      a_refRatio,
00112               const Box&               a_domain,
00113               int                      a_nCoarserLevels,
00114               const LevelOp* const     a_opin,
00115               int                      a_ncomp=1);
00116 
00118   void define(
00119               const DisjointBoxLayout& a_ba,
00121               const DisjointBoxLayout* a_baseBaPtr,
00123               Real                     a_dxLevel,
00125               int                      a_refRatio,
00127               const ProblemDomain&     a_domain,
00129               int                      a_nCoarserLevels,
00131               const LevelOp* const     a_opin,
00133               int                      a_ncomp);
00134 
00136   void define(const LevelMG&       a_level,
00137               int                  a_refCoarse,
00138               const LevelOp* const a_opin);
00139 
00141   LevelMG(const LevelMG& a_level,
00142           int            a_refCoarse,
00143           const LevelOp* a_opin);
00144 
00146   ~LevelMG();
00147 
00149 
00156   void mgRelax(LevelData<FArrayBox> & a_soln,
00157                const LevelData<FArrayBox> & a_rhs,
00158                bool bottomsolveflag);
00159 
00161   void setNumBottomGSRB(int a_numBottomGSRB)
00162   {
00163     m_numBottomGSRB = a_numBottomGSRB;
00164   }
00165 
00167   void setNumSmoothUp(int a_numSmoothUp);
00168 
00170   void setNumSmoothDown(int a_numSmoothDown);
00171 
00173   LevelOp* levelOpPtr();
00174 
00176   LevelMG* lCoarsePtr();
00177 
00179   void setConvergenceMetric(Real a_metric, int a_comp);
00180 
00181 protected:
00182   void setDefaultValues();
00183   void clearMemory();
00184 
00185   bool m_isDefined;
00186 
00187   //
00188   LevelData<FArrayBox>  m_resid;
00189 
00190   //
00191   LevelData<FArrayBox>  m_crseResid;
00192 
00193   //
00194   LevelData<FArrayBox>  m_crseCorr;
00195 
00196   //
00197   DisjointBoxLayout m_ba;
00198 
00199   //
00200   DisjointBoxLayout m_baCoarsened;
00201 
00202   //
00203   const DisjointBoxLayout* m_baseBaPtr;
00204 
00205   //
00206   Real m_dxLevel;
00207 
00208   //
00209   ProblemDomain m_domain;
00210 
00211   //
00212   int m_nCoarserLevels;
00213 
00214   //
00215   LevelMG* m_lCoarsePtr;
00216 
00217   //
00218   LevelOp* m_levelopPtr;
00219 
00220   //
00221   int m_numBottomGSRB;
00222 
00223   //
00224   int m_numSmoothUp;
00225 
00226   //
00227   int m_numSmoothDown;
00228 
00229   //
00230   int m_refToCoar;
00231 
00232   //
00233   CoarseAverage m_averageOp;
00234 
00235 private:
00241   void crseCorrect(LevelData<FArrayBox>&       a_fine,
00242                    const LevelData<FArrayBox>& a_crse,
00243                    int                         a_refRat);
00244 
00245   void operator=(const LevelMG& a_levmgin)
00246   {
00247   }
00248 
00249   LevelMG(const LevelMG& a_levmgin)
00250   {
00251   }
00252 };
00253 
00254 #endif

Generated on Wed Jan 19 17:51:25 2005 for Chombo&INSwithParticles by doxygen1.2.16