IBAMR  IBAMR version 0.19.
Public Member Functions | Private Attributes | List of all members
SAMRAI::xfer::Geometry< DIM > Class Template Referenceabstract

#include <Geometry.h>

Inheritance diagram for SAMRAI::xfer::Geometry< DIM >:
Inheritance graph
[legend]

Public Member Functions

 Geometry (const std::string &object_name)
 
virtual ~Geometry ()
 
virtual void addSpatialCoarsenOperator (tbox::Pointer< CoarsenOperator< DIM > > coarsen_op)
 
virtual void addSpatialRefineOperator (tbox::Pointer< RefineOperator< DIM > > refine_op)
 
virtual void addTimeInterpolateOperator (tbox::Pointer< TimeInterpolateOperator< DIM > > time_op)
 
virtual tbox::Pointer< CoarsenOperator< DIM > > lookupCoarsenOperator (const tbox::Pointer< hier::Variable< DIM > > &var, const std::string &op_name) const
 
virtual tbox::Pointer< RefineOperator< DIM > > lookupRefineOperator (const tbox::Pointer< hier::Variable< DIM > > &var, const std::string &op_name) const
 
virtual tbox::Pointer< TimeInterpolateOperator< DIM > > lookupTimeInterpolateOperator (const tbox::Pointer< hier::Variable< DIM > > &var, const std::string &op_name="STD_LINEAR_TIME_INTERPOLATE") const
 
virtual void printClassData (std::ostream &os) const
 

Private Attributes

tbox::List< tbox::Pointer< CoarsenOperator< DIM > > > d_coarsen_operators
 
tbox::List< tbox::Pointer< RefineOperator< DIM > > > d_refine_operators
 
tbox::List< tbox::Pointer< TimeInterpolateOperator< DIM > > > d_time_operators
 

Functions for computing boundary boxes

std::string d_object_name
 
BoxArray< DIM > d_physical_domain
 
bool d_domain_is_single_box
 
IntVector< DIM > d_periodic_shift
 
IntVector< DIM > d_max_data_ghost_width
 
void findPatchesTouchingBoundaries (tbox::Array< tbox::Array< tbox::Array< bool > > > &touches_regular_bdry, tbox::Array< tbox::Array< tbox::Array< bool > > > &touches_periodic_bdry, const PatchLevel< DIM > &level, const IntVector< DIM > &periodic_shift, const BoxArray< DIM > &domain) const
 Determine for every patch on a level if it touches a regular physical boundary or a periodic boundary. More...
 
virtual void setGeometryOnPatches (hier::PatchLevel< DIM > &level, const hier::IntVector< DIM > &ratio_to_level_zero, tbox::Array< tbox::Array< tbox::Array< bool > > > &touches_regular_bdry, tbox::Array< tbox::Array< tbox::Array< bool > > > &touches_periodic_bdry, bool defer_boundary_box_creation)
 Pass the arrays holding the boundary information to be stored in the concrete geometry classes, and construct boundary boxes if required. More...
 
void setBoundaryBoxes (hier::PatchLevel< DIM > &level)
 Construct the boundary boxes for each patch and set them on the patch geometries. More...
 
void computeShiftsForLevel (tbox::Array< tbox::List< IntVector< DIM > > > &shifts, const PatchLevel< DIM > &level, const BoxArray< DIM > &physical_domain) const
 
void computePhysicalDomain (BoxArray< DIM > &domain, const IntVector< DIM > &ratio_to_level_zero) const
 
void setPhysicalDomain (const BoxArray< DIM > &domain)
 
const BoxArray< DIM > & getPhysicalDomain () const
 
bool getDomainIsSingleBox () const
 
void initializePeriodicShift (const IntVector< DIM > &directions)
 
IntVector< DIM > getPeriodicShift (const IntVector< DIM > &ratio_to_level_zero=IntVector< DIM >(1)) const
 
IntVector< DIM > computeMaxGhostWidth (tbox::Pointer< PatchDescriptor< DIM > > descriptor)
 Compute the maximum ghost width of all of the components associated with the patch descriptor. More...
 
virtual tbox::Pointer< hier::GridGeometry< DIM > > makeRefinedGridGeometry (const std::string &fine_geom_name, const hier::IntVector< DIM > &refine_ratio, bool register_for_restart) const =0
 
virtual tbox::Pointer< hier::GridGeometry< DIM > > makeCoarsenedGridGeometry (const std::string &coarse_geom_name, const hier::IntVector< DIM > &coarsen_ratio, bool register_for_restart) const =0
 
virtual void setGeometryDataOnPatch (hier::Patch< DIM > &patch, const hier::IntVector< DIM > &ratio_to_level_zero, const tbox::Array< tbox::Array< bool > > &touches_regular_bdry, const tbox::Array< tbox::Array< bool > > &touches_periodic_bdry) const =0
 
void computeBoundaryBoxesOnLevel (tbox::Array< BoundaryBox< DIM > > boundaries[], const PatchLevel< DIM > &level, const IntVector< DIM > &periodic_shift, const IntVector< DIM > &ghost_width, const BoxArray< DIM > &domain, bool do_all_patches=false) const
 Compute boundary boxes for each patch in patch level and assign them to the array of boundary box arrays, assumed to be of length DIM * (num patches). More...
 
void getBoundaryBoxes (tbox::Array< BoundaryBox< DIM > > boundaries[DIM], const Box< DIM > &box, const BoxArray< DIM > &domain_boxes, const IntVector< DIM > &ghosts, const IntVector< DIM > &periodic_shift) const
 Compute boundary boxes for patch. More...
 
bool checkPeriodicValidity (const BoxArray< DIM > &domain)
 Check that the domain is valid for periodic boundary conditions. More...
 
bool checkBoundaryBox (const BoundaryBox< DIM > &boundary_box, const Patch< DIM > &patch, const BoxArray< DIM > &domain, const int num_per_dirs, const IntVector< DIM > &max_data_ghost_width) const
 Check on each BoundaryBox when it is created. More...
 
void computeShiftsForPatch (tbox::List< IntVector< DIM > > &shifts, const Box< DIM > &box, const BoxArray< DIM > &domain, const IntVector< DIM > &periodic_shift) const
 Find if a box is on a periodic boundary and compute its shifts. More...
 

Detailed Description

template<int DIM>
class SAMRAI::xfer::Geometry< DIM >

Class Geometry is the base class for SAMRAI geometry classes; it is derived from hier::GridGeometry and is intended to serve as a base class for geometry classes that define specific coordinate system operations for an AMR grid hierarchy. This transfer geometry class provides a lookup mechanism to search for time interpolation and spatial coarsening/refining operators. That is, algorithms and applications that manage communication on an AMR hierarchy may query the transfer geometry object for operators that may be applied to specific variables. Typically, the operators are assigned to the transfer geometry object in the constructor of the geometry object that defines the mesh coordinate system (and which is derived from this transfer geometry class). Additional operators may be added to a tranfer geometry object at any time during program execution. However, each operator must be added BEFORE it is requested or an unrecoverable exception will be thrown and the program will abort. Also note that operators are added to the heads of the operator lists so that the most recently added operator will be returned if more than one operator satisfies a given request. See the time interpolation, spatial coarsening, and spatial refinement operator base classes for more information about adding new operators for either new patch data types or new operators for pre-existing patch data types.

See also
hier::GridGeometry
xfer::RefineOperator
xfer::CoarsenOperator
xfer::TimeInterpolateOperator

Constructor & Destructor Documentation

◆ Geometry()

template<int DIM>
SAMRAI::xfer::Geometry< DIM >::Geometry ( const std::string &  object_name)

Constructor for Geometry class just passes the object_name to the hier::GridGeometry parent class.

◆ ~Geometry()

template<int DIM>
virtual SAMRAI::xfer::Geometry< DIM >::~Geometry ( )
virtual

The virtual destructor for the geometry base class does nothing interesting.

Member Function Documentation

◆ addSpatialCoarsenOperator()

template<int DIM>
virtual void SAMRAI::xfer::Geometry< DIM >::addSpatialCoarsenOperator ( tbox::Pointer< CoarsenOperator< DIM > >  coarsen_op)
virtual

Add concrete spatial coarsening operator instance to appropriate lookup list. Note that each concrete operator must implement a lookup function through which it can be identified.

◆ addSpatialRefineOperator()

template<int DIM>
virtual void SAMRAI::xfer::Geometry< DIM >::addSpatialRefineOperator ( tbox::Pointer< RefineOperator< DIM > >  refine_op)
virtual

Add concrete spatial refinement operator instance to appropriate lookup list. Note that each concrete operator must implement a lookup function through which it can be identified.

◆ addTimeInterpolateOperator()

template<int DIM>
virtual void SAMRAI::xfer::Geometry< DIM >::addTimeInterpolateOperator ( tbox::Pointer< TimeInterpolateOperator< DIM > >  time_op)
virtual

Add concrete time interpolation operator instance to appropriate lookup list. Note that each concrete operator must implement a lookup function through which it can be identified.

◆ lookupCoarsenOperator()

template<int DIM>
virtual tbox::Pointer< CoarsenOperator<DIM> > SAMRAI::xfer::Geometry< DIM >::lookupCoarsenOperator ( const tbox::Pointer< hier::Variable< DIM > > &  var,
const std::string &  op_name 
) const
virtual

Search list for the spatial coarsening operator matching the request for the given variable. If the operator is found, a pointer to it will be returned. Otherwise, an unrecoverable error will result and the program will abort.

◆ lookupRefineOperator()

template<int DIM>
virtual tbox::Pointer< RefineOperator<DIM> > SAMRAI::xfer::Geometry< DIM >::lookupRefineOperator ( const tbox::Pointer< hier::Variable< DIM > > &  var,
const std::string &  op_name 
) const
virtual

Search list for the spatial refinement operator matching the request for the given variable. If the operator is found, a pointer to it will be returned. Otherwise, an unrecoverable error will result and the program will abort.

◆ lookupTimeInterpolateOperator()

template<int DIM>
virtual tbox::Pointer< TimeInterpolateOperator<DIM> > SAMRAI::xfer::Geometry< DIM >::lookupTimeInterpolateOperator ( const tbox::Pointer< hier::Variable< DIM > > &  var,
const std::string &  op_name = "STD_LINEAR_TIME_INTERPOLATE" 
) const
virtual

Search list for the time interpolation operator matching the request for the given variable. If the operator is found, a pointer to it will be returned. Otherwise, an unrecoverable error will result and the program will abort.

◆ printClassData()

template<int DIM>
virtual void SAMRAI::xfer::Geometry< DIM >::printClassData ( std::ostream &  os) const
virtual

◆ findPatchesTouchingBoundaries()

template<int DIM>
void SAMRAI::hier::GridGeometry< DIM >::findPatchesTouchingBoundaries ( tbox::Array< tbox::Array< tbox::Array< bool > > > &  touches_regular_bdry,
tbox::Array< tbox::Array< tbox::Array< bool > > > &  touches_periodic_bdry,
const PatchLevel< DIM > &  level,
const IntVector< DIM > &  periodic_shift,
const BoxArray< DIM > &  domain 
) const
inherited

This routine loops through all of the patches on the given level and determines which kinds of boundaries each patch touches. The 3-dimensional boolean arrays are set to store for each path whether it touches a regular boundary, a periodic boundary, both, or neither.

The array arguments should be uninitialized when they are passed into this function.

Parameters
touches_regular_bdryArray to store which patches touch non-periodic boundaries.
touches_periodic_bdryArray to store which patches touch periodic boundaries.
levelcontaining the patches to be checked
periodic_shiftperiodic shift for the level (see getPeriodicShift)
domainPhysical domain (at the same level of refinement as level)

◆ setGeometryOnPatches()

template<int DIM>
virtual void SAMRAI::hier::GridGeometry< DIM >::setGeometryOnPatches ( hier::PatchLevel< DIM > &  level,
const hier::IntVector< DIM > &  ratio_to_level_zero,
tbox::Array< tbox::Array< tbox::Array< bool > > > &  touches_regular_bdry,
tbox::Array< tbox::Array< tbox::Array< bool > > > &  touches_periodic_bdry,
bool  defer_boundary_box_creation 
)
virtualinherited

This routine will pass the arrays containing the information about which patches touch which boundaries to the concrete grid geometry class. Also, if defer_boundary_box_creation is false, this routine will call a routine to construct all of the boundary boxes for the patches on level and will set them in the patch geometry for each patch.

Parameters
levelcontaining the patches to be checked.
ratio_to_level_zeroratio to the coarsest level.
touches_regular_bdryArray storing which patches touch non-periodic boundaries.
touches_periodic_bdryArray storing which patches touch periodic boundaries.
defer_boundary_box_creationBoundary boxes will be created here if false, not if true.

◆ setBoundaryBoxes()

template<int DIM>
void SAMRAI::hier::GridGeometry< DIM >::setBoundaryBoxes ( hier::PatchLevel< DIM > &  level)
inherited

This routine constructs the boundary boxes for every patch in the level. Once constructed, the boundary boxes are set on each patch's PatchGeometry object.

Parameters
levelThe level for which boundary boxes are constructed.

◆ computeShiftsForLevel()

template<int DIM>
void SAMRAI::hier::GridGeometry< DIM >::computeShiftsForLevel ( tbox::Array< tbox::List< IntVector< DIM > > > &  shifts,
const PatchLevel< DIM > &  level,
const BoxArray< DIM > &  physical_domain 
) const
inherited

Compute the valid periodic shifts for each patch on a level. The shifts array will store a list of IntVectors for each patch. Each list will contain the valid possible periodic shifts for each particular patch. If there are no periodic boundary conditions or a patch does not touch a periodic boundary, the list for a patch will be empty.

The patch geometry object for each patch on the level must be properly initialized before calling this routine. This is typically done in the patch level constructor.

When assertion checking is active, the array of shifts in the argument list must have the same length as the number of patches on the level.

◆ computePhysicalDomain()

template<int DIM>
void SAMRAI::hier::GridGeometry< DIM >::computePhysicalDomain ( BoxArray< DIM > &  domain,
const IntVector< DIM > &  ratio_to_level_zero 
) const
inherited

Compute physical domain box array describing the index space of the physical domain managed by this geometry object. If any entry of ratio vector is negative, the index space is coarsened with respect to the physical domain description. Otherwise, the index space is refined.

◆ setPhysicalDomain()

template<int DIM>
void SAMRAI::hier::GridGeometry< DIM >::setPhysicalDomain ( const BoxArray< DIM > &  domain)
inherited

Set physical domain to input box array and determine whether domain is a single box.

◆ getPhysicalDomain()

template<int DIM>
const BoxArray<DIM>& SAMRAI::hier::GridGeometry< DIM >::getPhysicalDomain ( ) const
inherited

Return const reference to physical domain description for level 0.

◆ getDomainIsSingleBox()

template<int DIM>
bool SAMRAI::hier::GridGeometry< DIM >::getDomainIsSingleBox ( ) const
inherited

Return boolean value indicating whether the physical domain can be represented as a single box.

◆ initializePeriodicShift()

template<int DIM>
void SAMRAI::hier::GridGeometry< DIM >::initializePeriodicShift ( const IntVector< DIM > &  directions)
inherited

Initialize the periodic shift on the coarsest level. The IntVector argument should be set to 1 for periodic directions and 0 for all other directions. The shift will be calculated to be the number of cells in the periodic direction and zero in all other directions.

◆ getPeriodicShift()

template<int DIM>
IntVector<DIM> SAMRAI::hier::GridGeometry< DIM >::getPeriodicShift ( const IntVector< DIM > &  ratio_to_level_zero = IntVector< DIM >(1)) const
inherited

Return IntVector<DIM> containing the periodic shift in each direction for a domain represented by a refinement of the reference physical domain (i.e. level zero) by the given ratio vector. tbox::Array entries will be zero for non-periodic directions. By default (i.e., when no argument is passed, the function returns the periodic shift for level zero in the hierarchy.

◆ computeMaxGhostWidth()

template<int DIM>
IntVector<DIM> SAMRAI::hier::GridGeometry< DIM >::computeMaxGhostWidth ( tbox::Pointer< PatchDescriptor< DIM > >  descriptor)
inherited

Calculates the maximum ghost width for all the variables associated with the patch descriptor. This must only be called after all of the variables have been registered with the VariableDatabase. If a variable is added that changes the maximum ghost width, then an assertion failure will result.

◆ makeRefinedGridGeometry()

template<int DIM>
virtual tbox::Pointer<hier::GridGeometry<DIM> > SAMRAI::hier::GridGeometry< DIM >::makeRefinedGridGeometry ( const std::string &  fine_geom_name,
const hier::IntVector< DIM > &  refine_ratio,
bool  register_for_restart 
) const
pure virtualinherited

Pure virtual function to create and return a pointer to a refined version of this grid geometry object.

Implemented in SAMRAI::geom::CartesianGridGeometry< DIM >, SAMRAI::geom::CartesianGridGeometry< NDIM >, SAMRAI::geom::SkeletonGridGeometry< DIM >, and SAMRAI::geom::BlockGridGeometry< DIM >.

◆ makeCoarsenedGridGeometry()

template<int DIM>
virtual tbox::Pointer<hier::GridGeometry<DIM> > SAMRAI::hier::GridGeometry< DIM >::makeCoarsenedGridGeometry ( const std::string &  coarse_geom_name,
const hier::IntVector< DIM > &  coarsen_ratio,
bool  register_for_restart 
) const
pure virtualinherited

Pure virtual function to create and return a pointer to a coarsened version of this grid geometry object.

Implemented in SAMRAI::geom::CartesianGridGeometry< DIM >, SAMRAI::geom::CartesianGridGeometry< NDIM >, SAMRAI::geom::SkeletonGridGeometry< DIM >, and SAMRAI::geom::BlockGridGeometry< DIM >.

◆ setGeometryDataOnPatch()

template<int DIM>
virtual void SAMRAI::hier::GridGeometry< DIM >::setGeometryDataOnPatch ( hier::Patch< DIM > &  patch,
const hier::IntVector< DIM > &  ratio_to_level_zero,
const tbox::Array< tbox::Array< bool > > &  touches_regular_bdry,
const tbox::Array< tbox::Array< bool > > &  touches_periodic_bdry 
) const
pure virtualinherited

◆ computeBoundaryBoxesOnLevel()

template<int DIM>
void SAMRAI::hier::GridGeometry< DIM >::computeBoundaryBoxesOnLevel ( tbox::Array< BoundaryBox< DIM > >  boundaries[],
const PatchLevel< DIM > &  level,
const IntVector< DIM > &  periodic_shift,
const IntVector< DIM > &  ghost_width,
const BoxArray< DIM > &  domain,
bool  do_all_patches = false 
) const
inherited

The DIM arrays of boundary boxes for each patch will be stored in groups of DIM. For example, in 3d with n patches on the level, the array For example, in 3d with n patches on the level, the array of boundary box arrays will be ordered as follows:

* (patch 0 face array, patch 0 edge array, patch 0 node array,
*  patch 1 face array, patch 1 edge array, patch 1 node array, . . . ,
*  patch n-1 face array, patch n-1 edge array, patch n-1 node array)
* 

The optional argument do_all_patches defaults to false, in which case the boundary box computation is executed only on patches that touch a non-periodic boundary. When this routine is called during patch level construction to describe a physical boundary, it is known that only patches that touch a non-periodic boundary will have non-empty sets of boundary boxes, so for efficiency's sake the boundary box box computation is supressed for all other patches. When this routine is called to create boundary boxes that describe a coarse-fine boundary, the computation must occur for every patch, so do_all_patches mush be set to true.

Parameters
boundariesoutput boundary description
levellevel on which to generate boundaries
periodic_shiftperiodic shift for the level (see getPeriodicShift)
ghost_widthghost width to compute geometry for
domainPhysical domain (in index space of level) for computing boundary boxes.
do_all_patchesExecute boundary box computation on all patches, even those known to not touch a boundary

◆ getBoundaryBoxes()

template<int DIM>
void SAMRAI::hier::GridGeometry< DIM >::getBoundaryBoxes ( tbox::Array< BoundaryBox< DIM > >  boundaries[DIM],
const Box< DIM > &  box,
const BoxArray< DIM > &  domain_boxes,
const IntVector< DIM > &  ghosts,
const IntVector< DIM > &  periodic_shift 
) const
inherited

Decompose patch boundary region into pieces depending on spatial dim. Boxes are extended along the boundary to the edge of the ghost layer if necessary.

◆ checkPeriodicValidity()

template<int DIM>
bool SAMRAI::hier::GridGeometry< DIM >::checkPeriodicValidity ( const BoxArray< DIM > &  domain)
privateinherited

◆ checkBoundaryBox()

template<int DIM>
bool SAMRAI::hier::GridGeometry< DIM >::checkBoundaryBox ( const BoundaryBox< DIM > &  boundary_box,
const Patch< DIM > &  patch,
const BoxArray< DIM > &  domain,
const int  num_per_dirs,
const IntVector< DIM > &  max_data_ghost_width 
) const
privateinherited

This is a check performed on each BoundaryBox when it is created. It returns true when a BoundaryBox has a width of 1 in at least one direction, is adjacent to the patch boundary (possible extended into the patch's ghost region) and is outside the physical domain.

◆ computeShiftsForPatch()

template<int DIM>
void SAMRAI::hier::GridGeometry< DIM >::computeShiftsForPatch ( tbox::List< IntVector< DIM > > &  shifts,
const Box< DIM > &  box,
const BoxArray< DIM > &  domain,
const IntVector< DIM > &  periodic_shift 
) const
privateinherited

If box is located on a periodic boundary, all of its possible shifts will be computed and stored in shifts. If box is not on a periodic boundary, shifts will be an empty list.

Member Data Documentation

◆ d_coarsen_operators

template<int DIM>
tbox::List< tbox::Pointer< CoarsenOperator<DIM> > > SAMRAI::xfer::Geometry< DIM >::d_coarsen_operators
private

◆ d_refine_operators

template<int DIM>
tbox::List< tbox::Pointer< RefineOperator<DIM> > > SAMRAI::xfer::Geometry< DIM >::d_refine_operators
private

◆ d_time_operators

template<int DIM>
tbox::List< tbox::Pointer< TimeInterpolateOperator<DIM> > > SAMRAI::xfer::Geometry< DIM >::d_time_operators
private

◆ d_object_name

template<int DIM>
std::string SAMRAI::hier::GridGeometry< DIM >::d_object_name
privateinherited

Object name used for error reporting purposes.

◆ d_physical_domain

template<int DIM>
BoxArray<DIM> SAMRAI::hier::GridGeometry< DIM >::d_physical_domain
privateinherited

Box array defining computational domain on coarsest level and boolean flag that is true when domain is a single box.

◆ d_domain_is_single_box

template<int DIM>
bool SAMRAI::hier::GridGeometry< DIM >::d_domain_is_single_box
privateinherited

◆ d_periodic_shift

template<int DIM>
IntVector<DIM> SAMRAI::hier::GridGeometry< DIM >::d_periodic_shift
privateinherited

Integer array vector describing periodic shift coarsest level. An entry of zero means direction is not periodic.

◆ d_max_data_ghost_width

template<int DIM>
IntVector<DIM> SAMRAI::hier::GridGeometry< DIM >::d_max_data_ghost_width
privateinherited

Current maximum ghost cell width over all patch data objects known to the patch descriptor. This is used to compute boundary boxes.


The documentation for this class was generated from the following file: