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 _MESHREFINE_H_
00053 #define _MESHREFINE_H_
00054
00055 #include <climits>
00056
00057 #include "Vector.H"
00058 #include "Box.H"
00059 #include "IntVectSet.H"
00060 #include "REAL.H"
00061 #include "ProblemDomain.H"
00062
00063 // Constants:
00064
00066 class MeshRefine
00125 {
00126 public:
00128 MeshRefine();
00129
00131 MeshRefine(
00132 const Box& a_baseDomain,
00134 const Vector<int>& a_refRatios,
00136 const Real a_fillRatio,
00138 const int a_blockFactor,
00140 const int a_bufferSize,
00142 const int a_maxSize);
00143
00145 MeshRefine(
00146 const ProblemDomain& a_baseDomain,
00148 const Vector<int>& a_refRatios,
00150 const Real a_fillRatio,
00152 const int a_blockFactor,
00154 const int a_bufferSize,
00156 const int a_maxSize);
00157
00159 virtual ~MeshRefine();
00160
00162 void define(
00163 const Box& a_baseDomain,
00165 const Vector<int>& a_refRatios,
00167 const Real a_fillRatio,
00169 const int a_blockFactor,
00171 const int a_bufferSize,
00173 const int a_maxSize);
00174
00176 void define(
00177 const ProblemDomain& a_baseDomain,
00179 const Vector<int>& a_refRatios,
00181 const Real a_fillRatio,
00183 const int a_blockFactor,
00185 const int a_bufferSize,
00187 const int a_maxSize);
00188
00190
00194 virtual int regrid(
00195 Vector<Vector<Box> >& a_newmeshes,
00197 const IntVectSet& a_tags,
00199 const int a_baseLevel,
00201 const int a_topLevel,
00203 const Vector<Vector<Box> >& a_oldMeshes) const;
00204
00206
00211 virtual int regrid(
00212 Vector<Vector<Box> >& a_newmeshes,
00214 const Vector<IntVectSet>& a_tags,
00216 const int a_baseLevel,
00218 const int a_topLevel,
00220 const Vector<Vector<Box> >& a_oldMeshes) const;
00221
00222 // Access functions
00223
00225 const Vector<int>& refRatios() const;
00226
00228 Real fillRatio() const;
00229
00231 int blockFactor() const;
00232
00234 int bufferSize() const;
00235
00237 int maxSize() const;
00238
00240 void refRatios(const Vector<int>& a_nRefVect);
00241
00243 void fillRatio(const Real a_fill_ratio);
00244
00246 void blockFactor(const int a_block_factor);
00247
00249 void bufferSize(const int a_buffer_size);
00250
00252 void maxSize(const int a_max_size);
00253
00255 bool isDefined() const;
00256
00258 void granularity(int a_granularity);
00259
00261
00268 virtual void
00269 makeBoxes(
00270 Vector<Box>& a_mesh,
00272 const IntVectSet& a_tags,
00274 const IntVectSet& a_pnd,
00276 const ProblemDomain& a_domain,
00278 const int a_maxSize) const = 0;
00279
00280
00281 protected:
00282
00284
00288 virtual void
00289 computeLocalBlockFactors();
00290
00292
00297 virtual void
00298 makePNDs(
00299 Vector<IntVectSet>& a_pnds,
00301 const int a_baseLevel,
00303 const int a_topLevel,
00305 const Vector<ProblemDomain>& a_domains,
00307 const IntVectSet& a_baseMesh,
00309 const Vector<int>& a_bufferSize ) const;
00310
00311 // local data members
00312
00313 bool m_isDefined;
00314
00315 Vector<ProblemDomain> m_vectDomains;
00316
00317 Vector<int> m_nRefVect;
00318
00319 Real m_fillRatio;
00320
00321 int m_blockFactor;
00322
00323 Vector<int> m_level_blockfactors;
00324
00325 int m_bufferSize;
00326
00327 int m_maxSize;
00328
00329 int m_granularity;
00330
00331 };
00332
00333 #endif
1.2.16