00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
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
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
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
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