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

DisjointBoxLayout.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 #ifndef _DISJOINTBOXLAYOUT_H_
00053 #define _DISJOINTBOXLAYOUT_H_
00054 
00055 #ifndef WRAPPER
00056 #include "Vector.H"
00057 #include "BoxLayout.H"
00058 #include "ProblemDomain.H"
00059 #endif /*WRAPPER*/
00060 
00062 
00070 class DisjointBoxLayout: public BoxLayout
00071 {
00072 
00073 public:
00074 
00075   friend class Copier;
00076 
00081 
00083 
00086   DisjointBoxLayout();
00087 
00089 
00094   DisjointBoxLayout(const Vector<Box>& a_boxes,
00095                     const Vector<int>& a_procIDs);
00096 
00098 
00103   DisjointBoxLayout(const Vector<Box>& a_boxes,
00104                     const Vector<int>& a_procIDs,
00105                     const ProblemDomain& a_physDomain);
00106 
00108 
00113   virtual
00114   ~DisjointBoxLayout()
00115   {}
00116 
00118 
00123   virtual void
00124   define(const Vector<Box>& a_boxes,
00125          const Vector<int>& a_procIDs);
00126 
00128 
00133   void
00134   define(BoxLayout& a_layout);
00135 
00137 
00142   void
00143   define(BoxLayout& a_layout, const ProblemDomain& a_physDomain);
00144 
00146 
00151   virtual void
00152   define(const Vector<Box>& a_boxes,
00153          const Vector<int>& a_procIDs,
00154          const ProblemDomain& a_physDomain);
00155 
00157 
00160   virtual void
00161   define_pd(const Vector<Box>& a_boxes,
00162             const Vector<int>& a_procIDs,
00163             const ProblemDomain& a_physDomain)
00164   {define(a_boxes, a_procIDs,  a_physDomain);}
00165 
00172 
00174 
00181   bool
00182   isDisjoint() const;
00183 
00185 
00196   bool checkPeriodic(const ProblemDomain& a_domain) const;
00197 
00204   bool checkDomains(const DisjointBoxLayout& a_dbl) const;
00205 
00212 
00214 
00216   virtual void
00217   close();
00218 
00220 
00225   virtual void
00226   deepCopy(const DisjointBoxLayout& a_source);
00227 
00229 
00233   virtual void
00234   deepCopy(const BoxLayout& a_source);
00235 
00237 
00241   virtual void
00242   deepCopy(const BoxLayout& a_source, const ProblemDomain& a_physDomain);
00243 
00245 
00261   friend void coarsen(DisjointBoxLayout& output,
00262                       const DisjointBoxLayout& input,
00263                       int refinement);
00264 
00266 
00281   friend void refine(DisjointBoxLayout& output,
00282                      const DisjointBoxLayout& input,
00283                      int refinement);
00284 
00291 
00293 
00297   friend void adjCellLo(DisjointBoxLayout& a_output,
00298                         const DisjointBoxLayout& a_input,
00299                         int a_dir, int a_len=1);
00300 
00302 
00306   friend void adjCellHi(DisjointBoxLayout& a_output,
00307                         const DisjointBoxLayout& a_input,
00308                         int a_dir, int a_len=1);
00309 
00312 protected:
00313   const ProblemDomain& physDomain() const;
00314 
00315 private:
00317   ProblemDomain m_physDomain;
00318 
00319 };
00320 void adjCellLo_dbl(DisjointBoxLayout& a_output,
00321                    const DisjointBoxLayout& a_input,
00322                    int a_dir, int a_len);
00323 void adjCellHi_dbl(DisjointBoxLayout& a_output,
00324                    const DisjointBoxLayout& a_input,
00325                    int a_dir, int a_len);
00326 void coarsen_dbl(DisjointBoxLayout& output,
00327                  const DisjointBoxLayout& input,
00328                  int refinement);
00329 void refine_dbl(DisjointBoxLayout& output,
00330                 const DisjointBoxLayout& input,
00331                 int refinement);
00332 
00333 #ifndef WRAPPER
00334 inline
00335 void adjCellLo_dbl(DisjointBoxLayout& a_output,
00336                    const DisjointBoxLayout& a_input,
00337                    int a_dir, int a_len)
00338 { adjCellLo(a_output,a_input,a_dir,a_len);}
00339 inline
00340 void adjCellHi_dbl(DisjointBoxLayout& a_output,
00341                    const DisjointBoxLayout& a_input,
00342                    int a_dir, int a_len)
00343 { adjCellHi(a_output,a_input,a_dir,a_len);}
00344 inline
00345 void coarsen_dbl(DisjointBoxLayout& output,
00346                  const DisjointBoxLayout& input,
00347                  int refinement)
00348 { coarsen(output, input, refinement);}
00349 inline
00350 void refine_dbl(DisjointBoxLayout& output,
00351                 const DisjointBoxLayout& input,
00352                 int refinement)
00353 { refine(output, input, refinement);}
00354 #endif
00355 
00356 #endif

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