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

MeshRefine Class Reference

Class which manages grid generation. More...

#include <MeshRefine.H>

Inheritance diagram for MeshRefine:

Inheritance graph
[legend]
Collaboration diagram for MeshRefine:

Collaboration graph
[legend]
List of all members.

Public Methods

 MeshRefine ()
 default constructor -- leaves object in an unusable state

 MeshRefine (const Box &a_baseDomain, const Vector< int > &a_refRatios, const Real a_fillRatio, const int a_blockFactor, const int a_bufferSize, const int a_maxSize)
 full constructor -- leaves object in usable state

 MeshRefine (const ProblemDomain &a_baseDomain, const Vector< int > &a_refRatios, const Real a_fillRatio, const int a_blockFactor, const int a_bufferSize, const int a_maxSize)
 full constructor -- leaves object in usable state

virtual ~MeshRefine ()
 destructor

void define (const Box &a_baseDomain, const Vector< int > &a_refRatios, const Real a_fillRatio, const int a_blockFactor, const int a_bufferSize, const int a_maxSize)
 define function -- size of RefRatios will define maximum number of levels

void define (const ProblemDomain &a_baseDomain, const Vector< int > &a_refRatios, const Real a_fillRatio, const int a_blockFactor, const int a_bufferSize, const int a_maxSize)
 define function -- size of RefRatios will define maximum number of levels

virtual int regrid (Vector< Vector< Box > > &a_newmeshes, const IntVectSet &a_tags, const int a_baseLevel, const int a_topLevel, const Vector< Vector< Box > > &a_oldMeshes) const
 create hierarchy of grids from a single level of tags

virtual int regrid (Vector< Vector< Box > > &a_newmeshes, const Vector< IntVectSet > &a_tags, const int a_baseLevel, const int a_topLevel, const Vector< Vector< Box > > &a_oldMeshes) const
 create hierarchy of grids from tags at all levels

const Vector< int > & refRatios () const
 returns vector of refinement ratios

Real fillRatio () const
 returns fillRatio

int blockFactor () const
 returns blocking factor

int bufferSize () const
 returns proper nesting buffer size

int maxSize () const
 returns maximum box size in any dimension -- 0 means no limit

void refRatios (const Vector< int > &a_nRefVect)
 sets vector of refinement ratios

void fillRatio (const Real a_fill_ratio)
 sets fillRatio

void blockFactor (const int a_block_factor)
 sets blocking factor

void bufferSize (const int a_buffer_size)
 sets proper nesting buffer size

void maxSize (const int a_max_size)
 sets maximum box size in any dimension -- 0 means no limit

bool isDefined () const
 has this object been defined properly?

void granularity (int a_granularity)
 sets proper nesting region granularity.

virtual void makeBoxes (Vector< Box > &a_mesh, const IntVectSet &a_tags, const IntVectSet &a_pnd, const ProblemDomain &a_domain, const int a_maxSize) const=0
 constructs a set of boxes which covers a set of tagged cells


Protected Methods

virtual void computeLocalBlockFactors ()
 computes local blockFactors used internally to enforce the BlockFactor

virtual void makePNDs (Vector< IntVectSet > &a_pnds, const int a_baseLevel, const int a_topLevel, const Vector< ProblemDomain > &a_domains, const IntVectSet &a_baseMesh, const Vector< int > &a_bufferSize) const
 Computes proper nesting domains.


Protected Attributes

bool m_isDefined
Vector< ProblemDomainm_vectDomains
Vector< int > m_nRefVect
Real m_fillRatio
int m_blockFactor
Vector< int > m_level_blockfactors
int m_bufferSize
int m_maxSize
int m_granularity

Detailed Description

Class which manages grid generation.

This class manages grid generation from sets of tagged cells. It is designed to be a pure virtual base class from which another class may be derived with a specific grid-generation algorithm (for example, the BRMeshRefine class).

There are two ways grids can be defined based on tagged cells. one takes a single IntVectSet of tags defined on the BaseLevel mesh and uses that set of tags for every level to be refined; the other takes a Vector<IntVectSet> of tags defined on all the mesh levels to be refined and uses those.

Long Description:

Create new meshes based on tagged cells on a range of levels of a mesh hierarchy. Each level of tagged cells is used to generate a new mesh at the next finer level. The finest level in the output mesh will be one level higher than the top of the range of levels given as input. As a special case, use the same tags (appropriately refined) for all levels.

Usage:

Call the regrid functions after computing error estimates and tagging cells. To add a new mesh level, set TopLevel to the index of the finest level in the existing mesh and define tags on the finest level. To keep the existing number of mesh levels, set TopLevel to one less than the index of the finest level and don't define any tags on the finest level. If a single IntVectSet of tags is passed (instead of a Vector<IntVectSet>) then the same tags (properly refined) will be used for all the new meshes up to level TopLevel+1. In any case, the meshes at levels BaseLevel and below are not modified. The output argument newmeshes will be reallocated to the necessary size before being used. When this function returns, the elements of the newmeshes vector corresponding to the unchanged levels will be filled in with copies of the levels from the old mesh vector. The variable tags is modified in an undefined way, so its contents should not be relied upon. The variable BlockFactor specifies the amount by which each box will be coarsenable. Every grid box will have an integral multiple of BlockFactor cells in each dimension and also lower index values that are integral multiples. As a side effect, the minimum box size will be BlockFactor.

Expensive validations are done only when debugging is enabled (i.e. the DEBUG make variable is "TRUE").

Usage Notes:

All the input vectors should be defined with max index >= TopLevel. They should have values for indices [BaseLevel:TopLevel]. (except for OldMeshes, which must be defined for all indices). The new mesh vector newmeshes will be redefined up to index TopLevel+1. RefRatios should be defined such that RefRatios[L] is the value to use to refine the level L mesh to produce the level L+1 mesh. The tags vector is modified in an undefined manner. The output variable newmeshes may not be completely defined if an exception occurs. The BlockFactor can be used to force a minimum box size.


Constructor & Destructor Documentation

MeshRefine::MeshRefine  
 

default constructor -- leaves object in an unusable state

MeshRefine::MeshRefine const Box   a_baseDomain,
const Vector< int > &    a_refRatios,
const Real    a_fillRatio,
const int    a_blockFactor,
const int    a_bufferSize,
const int    a_maxSize
 

full constructor -- leaves object in usable state

Parameters:
a_baseDomain  level 0 domain
a_refRatios  refinement ratios -- refRatio[0] is btwn levels 0 and 1
a_fillRatio  measure of how efficiently tagged cells will be covered
a_blockFactor  amount by which grids are guaranteed to be coarsenable
a_bufferSize  proper nesting buffer amount
a_maxSize  maximum grid length in any direction -- 0 means no limit.

MeshRefine::MeshRefine const ProblemDomain   a_baseDomain,
const Vector< int > &    a_refRatios,
const Real    a_fillRatio,
const int    a_blockFactor,
const int    a_bufferSize,
const int    a_maxSize
 

full constructor -- leaves object in usable state

Parameters:
a_baseDomain  level 0 domain
a_refRatios  refinement ratios -- refRatio[0] is btwn levels 0 and 1
a_fillRatio  measure of how efficiently tagged cells will be covered
a_blockFactor  amount by which grids are guaranteed to be coarsenable
a_bufferSize  proper nesting buffer amount
a_maxSize  maximum grid length in any direction -- 0 means no limit.

virtual MeshRefine::~MeshRefine   [virtual]
 

destructor


Member Function Documentation

void MeshRefine::blockFactor const int    a_block_factor
 

sets blocking factor

int MeshRefine::blockFactor   const
 

returns blocking factor

void MeshRefine::bufferSize const int    a_buffer_size
 

sets proper nesting buffer size

int MeshRefine::bufferSize   const
 

returns proper nesting buffer size

virtual void MeshRefine::computeLocalBlockFactors   [protected, virtual]
 

computes local blockFactors used internally to enforce the BlockFactor

This function computes values for m_local_blockfactors array, which is the amount that tags on a level are coarsened in order to guarantee that the grids on the next finer level are coarsenable by the BlockFactor.

void MeshRefine::define const ProblemDomain   a_baseDomain,
const Vector< int > &    a_refRatios,
const Real    a_fillRatio,
const int    a_blockFactor,
const int    a_bufferSize,
const int    a_maxSize
 

define function -- size of RefRatios will define maximum number of levels

Parameters:
a_baseDomain  level 0 domain
a_refRatios  refinement ratios -- refRatio[0] is btwn levels 0 and 1
a_fillRatio  measure of how efficiently tagged cells will be covered
a_blockFactor  amount by which grids are guaranteed to be coarsenable
a_bufferSize  proper nesting buffer amount
a_maxSize  maximum grid length in any direction -- 0 means no limit

Reimplemented in BRMeshRefine.

void MeshRefine::define const Box   a_baseDomain,
const Vector< int > &    a_refRatios,
const Real    a_fillRatio,
const int    a_blockFactor,
const int    a_bufferSize,
const int    a_maxSize
 

define function -- size of RefRatios will define maximum number of levels

Parameters:
a_baseDomain  level 0 domain
a_refRatios  refinement ratios -- refRatio[0] is btwn levels 0 and 1
a_fillRatio  measure of how efficiently tagged cells will be covered
a_blockFactor  amount by which grids are guaranteed to be coarsenable
a_bufferSize  proper nesting buffer amount
a_maxSize  maximum grid length in any direction -- 0 means no limit

Reimplemented in BRMeshRefine.

void MeshRefine::fillRatio const Real    a_fill_ratio
 

sets fillRatio

Real MeshRefine::fillRatio   const
 

returns fillRatio

void MeshRefine::granularity int    a_granularity
 

sets proper nesting region granularity.

bool MeshRefine::isDefined   const
 

has this object been defined properly?

virtual void MeshRefine::makeBoxes Vector< Box > &    a_mesh,
const IntVectSet   a_tags,
const IntVectSet   a_pnd,
const ProblemDomain   a_domain,
const int    a_maxSize
const [pure virtual]
 

constructs a set of boxes which covers a set of tagged cells

constructs a set of boxes which covers a set of tagged cells by using the algorithm of choice. Everything should be on the same level, and blocking factor is not applied. Boxes will be on the same refinement level as the tags. This would normally be a protected function, but it can be useful to call it on its own, so it has been left public.

Parameters:
a_mesh  output: refined boxes at each new level
a_tags  input: set of tagged cells to cover
a_pnd  input: proper nesting domain in which mesh boxes must live
a_domain  input: physical domain
a_maxSize  input: largest number of cells in any dimension for any box

Implemented in BRMeshRefine.

virtual void MeshRefine::makePNDs Vector< IntVectSet > &    a_pnds,
const int    a_baseLevel,
const int    a_topLevel,
const Vector< ProblemDomain > &    a_domains,
const IntVectSet   a_baseMesh,
const Vector< int > &    a_bufferSize
const [protected, virtual]
 

Computes proper nesting domains.

This should only be called by refine. it assumes that everything has already been coarsened by the local blocking factor

Parameters:
a_pnds  output: proper nesting domains at each level
a_baseLevel  input: index of highest AMR level not to be refined
a_topLevel  input: index of highest AMR level in output
a_domains  input: (same as in meshRefine)
a_baseMesh  input: boxes at mesh level BaseLevel
a_bufferSize  input: (similar to meshRefine; but with level-dependent coarsening factors)

void MeshRefine::maxSize const int    a_max_size
 

sets maximum box size in any dimension -- 0 means no limit

int MeshRefine::maxSize   const
 

returns maximum box size in any dimension -- 0 means no limit

void MeshRefine::refRatios const Vector< int > &    a_nRefVect
 

sets vector of refinement ratios

const Vector<int>& MeshRefine::refRatios   const
 

returns vector of refinement ratios

virtual int MeshRefine::regrid Vector< Vector< Box > > &    a_newmeshes,
const Vector< IntVectSet > &    a_tags,
const int    a_baseLevel,
const int    a_topLevel,
const Vector< Vector< Box > > &    a_oldMeshes
const [virtual]
 

create hierarchy of grids from tags at all levels

This function creates a hierarchy of grids from tags at all refinement levels. It is possible that not all levels will return with grids, since there may not be tags at all levels. Returns the new finest level of grids.

Parameters:
a_newmeshes  new set of grids at every level
a_tags  tagged cells on each existing level
a_baseLevel  index of base mesh level (finest unchanged level)
a_topLevel  top level to refine (one less than finest possible level)
a_oldMeshes  existing grids (if no previous grids, set to domains)

virtual int MeshRefine::regrid Vector< Vector< Box > > &    a_newmeshes,
const IntVectSet   a_tags,
const int    a_baseLevel,
const int    a_topLevel,
const Vector< Vector< Box > > &    a_oldMeshes
const [virtual]
 

create hierarchy of grids from a single level of tags

This function creates a hierarchy of grids from a single level of tags on BaseLevel. If tags exist, then all levels will have grids. Returns the new finest level of grids.

Parameters:
a_newmeshes  new set of grids at every level
a_tags  tagged cells on baseLevel
a_baseLevel  index of base mesh level (finest unchanged level)
a_topLevel  top level to refine (one less than finest possible level)
a_oldMeshes  existing grids (if no previous grids, set to domains)


Member Data Documentation

int MeshRefine::m_blockFactor [protected]
 

int MeshRefine::m_bufferSize [protected]
 

Real MeshRefine::m_fillRatio [protected]
 

int MeshRefine::m_granularity [protected]
 

bool MeshRefine::m_isDefined [protected]
 

Vector<int> MeshRefine::m_level_blockfactors [protected]
 

int MeshRefine::m_maxSize [protected]
 

Vector<int> MeshRefine::m_nRefVect [protected]
 

Vector<ProblemDomain> MeshRefine::m_vectDomains [protected]
 


The documentation for this class was generated from the following file:
Generated on Wed Jan 19 17:56:16 2005 for Chombo&INSwithParticles by doxygen1.2.16