|
| 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 |
| |
| virtual void | printClassData (std::ostream &stream) 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...
|
| |
template<int DIM>
class SAMRAI::hier::GridGeometry< DIM >
Class GridGeometry<DIM> serves as the base class for SAMRAI geometry classes that manage particular grid types (e.g., Cartesian, cylindrical, etc.). The grid geometry class is responsible for maintaining information about the index space describing the physical domain and computing this information for patches in an AMR hierarchy. Operations performed by this class include determining which patches are adjacent to the physical domain boundary and computing boundary boxes for patches which decribe how the patch touches the domain boundary (useful for filling ghost cell data for physical boundary conditions). Member functions that manage the description of the spatial coordinated on the mesh are pure virtual here and must be implemented in an appropriate subclass.
Note that the derivation from tbox::DescribedClass is virtual. The reason for this is to avoid dynamic casting problems for smart pointers. Typically, SAMRAI geometry objects inherit from tbox::Serializable as well as this base geometry class. Thus, there is usually more than one class hierarchy for geometry objects. Pointers to base objects may need to be dynamically cast to derived objects in either hierarchy.
- See also
- hier::BoundaryBox
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.
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
-
| boundaries | output boundary description |
| level | level on which to generate boundaries |
| periodic_shift | periodic shift for the level (see getPeriodicShift) |
| ghost_width | ghost width to compute geometry for |
| domain | Physical domain (in index space of level) for computing boundary boxes. |
| do_all_patches | Execute boundary box computation on all patches, even those known to not touch a boundary |