#include <source/patchdata/outeredge/OuteredgeData.h>
Inheritance diagram for SAMRAI::pdat::OuteredgeData< DIM, TYPE >:
Public Member Functions | |
OuteredgeData (const hier::Box< DIM > &box, int depth, tbox::Pointer< tbox::Arena > pool=tbox::Pointer< tbox::Arena >(NULL)) | |
Constructor for an outeredge data object. | |
virtual | ~OuteredgeData () |
Virtual destructor for a outeredge data object. | |
int | getDepth () const |
Return the depth (i.e., the number of data values for each spatial location) of the array. | |
bool | dataExists (int axis, int face_normal) const |
Returns true if outeredge data exists for the given axis and face normal direction; false otherwise. | |
hier::Box< DIM > | getDataBox (int axis, int face_normal, int side) |
Return the box of valid edge indices for outeredge data. Note: the returned box will reside in the edge index space. | |
TYPE * | getPointer (int axis, int face_normal, int side, int depth=0) |
Get a pointer to the beginning of a particular axis, face normal, side, and depth component of the outeredge centered array. | |
const TYPE * | getPointer (int axis, int face_normal, int side, int depth=0) const |
Get a const pointer to the beginning of a particular axis, face normal, side, and depth component of the outeredge centered array. | |
TYPE & | operator() (const EdgeIndex< DIM > &i, int depth=0) |
Return a reference to data entry corresponding to a given edge index and depth. | |
const TYPE & | operator() (const EdgeIndex< DIM > &i, int depth=0) const |
Return a const reference to data entry corresponding to a given edge index and depth. | |
ArrayData< DIM, TYPE > & | getArrayData (int axis, int face_normal, int side) |
Return a reference to the array data object for given axis, face normal, and side index of the outeredge centered array. | |
const ArrayData< DIM, TYPE > & | getArrayData (int axis, int face_normal, int side) const |
Return a const reference to the array data object for given axis, face normal, and side index of the outeredge centered array. | |
virtual void | copy (const hier::PatchData< DIM > &src) |
A fast copy from source to destination (i.e., this) patch data object. | |
virtual void | copy2 (hier::PatchData< DIM > &dst) const |
A fast copy from source (i.e., this) to destination patch data object. | |
virtual void | copy (const hier::PatchData< DIM > &src, const hier::BoxOverlap< DIM > &overlap) |
Copy data from source to destination (i.e., this) patch data object on the given overlap. | |
virtual void | copy2 (hier::PatchData< DIM > &dst, const hier::BoxOverlap< DIM > &overlap) const |
Copy data from source (i.e., this) to destination patch data object on the given overlap. | |
void | copyDepth (int dst_depth, const EdgeData< DIM, TYPE > &src, int src_depth) |
Fast copy (i.e., assumes edge and outeredge data objects are defined over the same box) from the given edge source data object to this destination outeredge data object at the specified depths. | |
void | copyDepth2 (int dst_depth, EdgeData< DIM, TYPE > &dst, int src_depth) const |
Fast copy (i.e., assumes edge and outeredge data objects are defined over the same box) to the given edge destination data object from this source outeredge data object at the specified depths. | |
virtual void | sum (const hier::PatchData< DIM > &src, const hier::BoxOverlap< DIM > &overlap) |
Add data from source to destination (i.e., this) patch data object on the given overlap. | |
virtual bool | canEstimateStreamSizeFromBox () const |
Return true if the patch data object can estimate the stream size required to fit its data using only index space information (i.e., a box). | |
virtual int | getDataStreamSize (const hier::BoxOverlap< DIM > &overlap) const |
Return the number of bytes needed to stream the data in this patch data object lying in the specified box overlap region. | |
virtual void | packStream (tbox::AbstractStream &stream, const hier::BoxOverlap< DIM > &overlap) const |
Pack data in this patch data object lying in the specified box overlap region into the stream. The overlap must be an EdgeOverlap of the same DIM. | |
virtual void | unpackStream (tbox::AbstractStream &stream, const hier::BoxOverlap< DIM > &overlap) |
Unpack data from stream into this patch data object over the specified box overlap region. The overlap must be an EdgeOverlap of the same DIM. | |
virtual void | unpackStreamAndSum (tbox::AbstractStream &stream, const hier::BoxOverlap< DIM > &overlap) |
Unpack data from stream and add into this patch data object over the specified box overlap region. | |
void | fill (const TYPE &t, int d=0) |
Fill all values at depth d with the value t. | |
void | fill (const TYPE &t, const hier::Box< DIM > &box, int d=0) |
Fill all values at depth d within the box with the value t. | |
void | fillAll (const TYPE &t) |
Fill all depth components with value t. | |
void | fillAll (const TYPE &t, const hier::Box< DIM > &box) |
Fill all depth components within the box with value t. | |
void | print (const hier::Box< DIM > &box, std::ostream &os=tbox::plog, int prec=12) const |
Print all outeredge data values residing in the specified box. If the depth of the array is greater than one, all depths are printed. | |
void | print (const hier::Box< DIM > &box, int depth, std::ostream &os=tbox::plog, int prec=12) const |
Print all outeredge data values at the given array depth in the specified box. | |
void | printAxisSide (int axis, int face_normal, int side, const hier::Box< DIM > &box, std::ostream &os=tbox::plog, int prec=12) const |
Print all outeredge centered data values for specified axis, face_normal, and side residing in the specified box. If the depth of the data is greater than one, all depths are printed. | |
void | printAxisSide (int axis, int face_normal, int side, const hier::Box< DIM > &box, int depth, std::ostream &os=tbox::plog, int prec=12) const |
Print all outeredge centered data values for specified axis, face_normal, side, and depth residing in the specified box. | |
virtual void | getSpecializedFromDatabase (tbox::Pointer< tbox::Database > database) |
Check that class version and restart file version are equal. If so, read data members from the database. | |
virtual void | putSpecializedToDatabase (tbox::Pointer< tbox::Database > database) |
Write out the class version number and other data members to the database. | |
Static Public Member Functions | |
static size_t | getSizeOfData (const hier::Box< DIM > &box, int depth) |
Calculate the amount of memory needed to represent outeredge- centered data over a CELL-centered AMR index space box. |
Outeredge data is stored in 2*DIM*(DIM-2) arrays, each of which contains data associated with edge indices in a coordinate axis direction, an outward pointing face normal direction, and an upper or lower box face in the face normal direction. The data layout in the outernode data arrays matches the corresponding array sections provided by the node data implementation. Note that outeredge data is NOT defined when the axis and face normal are equal. This is consistent with the edge data representation. Where an edge index falls on more than one box face (patch boundary edges and corners), the outeredge data value belongs to only one data array so that there are no redundant data values. Specifically, when DIM > 2, outeredge data boxes are "trimmed" for each axis edge direction so that each edge index that lives on more than one face on the box boundary will be associated with the largest face normal direction and only that face. Within each array, data is stored in (i,...,k,d) order, where i,...,k indicates a spatial index and the d indicates the component depth at that location. Memory allocation is in column-major ordering (e.g., Fortran style) so that the leftmost index runs fastest in memory.
To illustrate the outeredge data layout, in particular the "box trimming" that prevents redundant data values, we describe the data for a three-dimensional outeredge data object instantiated over a box [l0:u0,l1:u1,l2:u2] in the standard SAMRAI cell-centered AMR index space. Note: no boxes are trimmed when DIM < 3.
a = edge axis (corresponds to the standard EdgeData axis) f = face normal dir s = lower/upper face d = data depth (i.e., number of values at each edge index point). Here axis and face normal values 0, 1, and 2 can be thought of as X, Y, Z respectively. (a,f,s) axis 0: (0,0,[0,1]) DATA IS NOT DEFINED when a == f (0,1,0) [l0:u0, l1:l1, l2+1:u2, d] (0,1,1) [l0:u0, u1+1:u1+1, l2+1:u2, d] (0,2,0) [l0:u0, l1:u1+1, l2:l2, d] (0,2,1) [l0:u0, l1:u1+1, u2+1:u2+1, d] Note: Edge indices are duplicated at the intersection of faces normal to directions 1 and 2. So boxes for face normal direction 1 are trimmed in direction 2 so that edge indices shared with faces in direction 2 only appear in face normal direction 2 boxes. axis 1: (1,0,0) [l0:l0, l1:u1, l2+1:u2, d] (1,0,1) [u0+1:u0+1, l1:u1, l2+1:u2, d] (1,1,[0,1]) DATA IS NOT DEFINED when a == f (1,2,0) [l0:u0+1, l1:u1, l2:l2, d] (1,2,1) [l0:u0+1, l1:u1, u2+1:u2+1, d] Note: Edge indices are duplicated at the intersection of faces normal to directions 0 and 2. So boxes for face normal direction 0 are trimmed in direction 2 so that edge indices shared with faces in direction 2 only appear in face normal direction 2 boxes. axis 2: (2,0,0) [l0:l0, l1+1:u1, l2:u2, d] (2,0,1) [u0+1:u0+1, l1+1:u1, l2:u2, d] (2,1,0) [l0:u0+1, l1:l1, l2:u2, d] (2,1,1) [l0:u0+1, u1+1:u1+1, l2:u2, d] (2,2,[0,1]) DATA IS NOT DEFINED when a == f Note: Edge indices are duplicated at the intersection of faces normal to directions 0 and 1. So boxes for face normal direction 0 are trimmed in direction 1 so that edge indices shared with faces in direction 1 only appear in face normal direction 1 boxes. *
The data type TYPE must define a default constructor (that takes no arguments) and also the assignment operator.
SAMRAI::pdat::OuteredgeData< DIM, TYPE >::OuteredgeData | ( | const hier::Box< DIM > & | box, | |
int | depth, | |||
tbox::Pointer< tbox::Arena > | pool = tbox::Pointer< tbox::Arena >(NULL) | |||
) |
Constructor for an outeredge data object.
Note: Outeredge data always has ghost cell width of zero.
box | const Box reference describing the interior of the standard CELL-centered index box over which the outeredge data object will be created. | |
depth | gives the number of data values for each spatial location in the array. | |
pool | memory arena. If not given, then the standard arena is used. |
SAMRAI::pdat::OuteredgeData< DIM, TYPE >::~OuteredgeData | ( | ) | [virtual] |
Virtual destructor for a outeredge data object.
size_t SAMRAI::pdat::OuteredgeData< DIM, TYPE >::getSizeOfData | ( | const hier::Box< DIM > & | box, | |
int | depth | |||
) | [static] |
Calculate the amount of memory needed to represent outeredge- centered data over a CELL-centered AMR index space box.
This function assumes that the amount of memory needed for TYPE is sizeof(TYPE). If this is not the case, then a specialized function must be defined.
box | const Box reference describing the interior of the standard CELL-centered index box over which the outeredge data object will be created. Note: the ghost cell width is assumed to be zero. | |
depth | gives the number of data values for each spatial location in the array. |
int SAMRAI::pdat::OuteredgeData< DIM, TYPE >::getDepth | ( | ) | const [inline] |
Return the depth (i.e., the number of data values for each spatial location) of the array.
bool SAMRAI::pdat::OuteredgeData< DIM, TYPE >::dataExists | ( | int | axis, | |
int | face_normal | |||
) | const [inline] |
Returns true if outeredge data exists for the given axis and face normal direction; false otherwise.
axis | integer edge data coordinate axis, must satisfy 0 <= axis < DIM | |
face_normal | integer face normal direction for data, must satisfy 0 <= face_normal < DIM |
hier::Box< DIM > SAMRAI::pdat::OuteredgeData< DIM, TYPE >::getDataBox | ( | int | axis, | |
int | face_normal, | |||
int | side | |||
) |
Return the box of valid edge indices for outeredge data. Note: the returned box will reside in the edge index space.
axis | integer edge data coordinate axis, must satisfy 0 <= axis < DIM | |
face_normal | integer face normal direction for data, must satisfy 0 <= face_normal < DIM | |
side | integer lower (0) or upper (1) side of outeredge data array |
TYPE * SAMRAI::pdat::OuteredgeData< DIM, TYPE >::getPointer | ( | int | axis, | |
int | face_normal, | |||
int | side, | |||
int | depth = 0 | |||
) | [inline] |
Get a pointer to the beginning of a particular axis, face normal, side, and depth component of the outeredge centered array.
axis | integer edge data coordinate axis, must satisfy 0 <= axis < DIM | |
face_normal | integer face normal direction for data, must satisfy 0 <= face_normal < DIM | |
side | integer lower (0) or upper (1) side of outeredge data array | |
depth | integer depth component, must satisfy 0 <= depth < actual depth of data array |
const TYPE * SAMRAI::pdat::OuteredgeData< DIM, TYPE >::getPointer | ( | int | axis, | |
int | face_normal, | |||
int | side, | |||
int | depth = 0 | |||
) | const [inline] |
Get a const pointer to the beginning of a particular axis, face normal, side, and depth component of the outeredge centered array.
axis | integer edge data coordinate axis, must satisfy 0 <= axis < DIM | |
face_normal | integer face normal direction for data, must satisfy 0 <= face_normal < DIM | |
side | integer lower (0) or upper (1) side of outeredge data array | |
depth | integer depth component, must satisfy 0 <= depth < actual depth of data array |
TYPE & SAMRAI::pdat::OuteredgeData< DIM, TYPE >::operator() | ( | const EdgeIndex< DIM > & | i, | |
int | depth = 0 | |||
) | [inline] |
Return a reference to data entry corresponding to a given edge index and depth.
i | const reference to EdgeIndex, MUST be an index on the outeredge of the box. | |
depth | integer depth component, must satisfy 0 <= depth < actual depth of data array |
const TYPE & SAMRAI::pdat::OuteredgeData< DIM, TYPE >::operator() | ( | const EdgeIndex< DIM > & | i, | |
int | depth = 0 | |||
) | const [inline] |
Return a const reference to data entry corresponding to a given edge index and depth.
i | const reference to EdgeIndex, MUST be an index on the outeredge of the box. | |
depth | integer depth component, must satisfy 0 <= depth < actual depth of data array |
ArrayData< DIM, TYPE > & SAMRAI::pdat::OuteredgeData< DIM, TYPE >::getArrayData | ( | int | axis, | |
int | face_normal, | |||
int | side | |||
) | [inline] |
Return a reference to the array data object for given axis, face normal, and side index of the outeredge centered array.
axis | integer edge data coordinate axis, must satisfy 0 <= axis < DIM | |
face_normal | integer face normal direction for data, must satisfy 0 <= face_normal < DIM | |
side | integer lower (0) or upper (1) side of outeredge data array |
const ArrayData< DIM, TYPE > & SAMRAI::pdat::OuteredgeData< DIM, TYPE >::getArrayData | ( | int | axis, | |
int | face_normal, | |||
int | side | |||
) | const [inline] |
Return a const reference to the array data object for given axis, face normal, and side index of the outeredge centered array.
axis | integer edge data coordinate axis, must satisfy 0 <= axis < DIM | |
face_normal | integer face normal direction for data, must satisfy 0 <= face_normal < DIM | |
side | integer lower (0) or upper (1) side of outeredge data array |
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::copy | ( | const hier::PatchData< DIM > & | src | ) | [virtual] |
A fast copy from source to destination (i.e., this) patch data object.
Data is copied where there is overlap in the underlying index space. The copy is performed on the interior plus the ghost cell width (for both the source and destination). Currently, source data must be either EdgeData or OuteredgeData of the same DIM and TYPE. If not, then an unrecoverable error results.
Implements SAMRAI::hier::PatchData< DIM >.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::copy2 | ( | hier::PatchData< DIM > & | dst | ) | const [virtual] |
A fast copy from source (i.e., this) to destination patch data object.
Data is copied where there is overlap in the underlying index space. The copy is performed on the interior plus the ghost cell width (for both the source and destination). Currently, destination data must be either EdgeData or OuteredgeData of the same DIM and TYPE. If not, then an unrecoverable error results.
Implements SAMRAI::hier::PatchData< DIM >.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::copy | ( | const hier::PatchData< DIM > & | src, | |
const hier::BoxOverlap< DIM > & | overlap | |||
) | [virtual] |
Copy data from source to destination (i.e., this) patch data object on the given overlap.
Currently, source data must be either EdgeData or OuteredgeData of the same DIM and TYPE and the overlap must be an EdgeOverlap of the same DIM. If not, then an unrecoverable error results.
Implements SAMRAI::hier::PatchData< DIM >.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::copy2 | ( | hier::PatchData< DIM > & | dst, | |
const hier::BoxOverlap< DIM > & | overlap | |||
) | const [virtual] |
Copy data from source (i.e., this) to destination patch data object on the given overlap.
Currently, destination data must be either EdgeData or OuteredgeData of the same DIM and TYPE and the overlap must be an EdgeOverlap of the same DIM. If not, then an unrecoverable error results.
Implements SAMRAI::hier::PatchData< DIM >.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::copyDepth | ( | int | dst_depth, | |
const EdgeData< DIM, TYPE > & | src, | |||
int | src_depth | |||
) |
Fast copy (i.e., assumes edge and outeredge data objects are defined over the same box) from the given edge source data object to this destination outeredge data object at the specified depths.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::copyDepth2 | ( | int | dst_depth, | |
EdgeData< DIM, TYPE > & | dst, | |||
int | src_depth | |||
) | const |
Fast copy (i.e., assumes edge and outeredge data objects are defined over the same box) to the given edge destination data object from this source outeredge data object at the specified depths.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::sum | ( | const hier::PatchData< DIM > & | src, | |
const hier::BoxOverlap< DIM > & | overlap | |||
) | [virtual] |
Add data from source to destination (i.e., this) patch data object on the given overlap.
Currently, source data must be OuteredgeData of the same DIM and TYPE and the overlap must be an EdgeOverlap of the same DIM. If not, then an unrecoverable error results.
bool SAMRAI::pdat::OuteredgeData< DIM, TYPE >::canEstimateStreamSizeFromBox | ( | ) | const [virtual] |
Return true if the patch data object can estimate the stream size required to fit its data using only index space information (i.e., a box).
This routine is defined for the standard types (bool, char, double, float, int, and dcomplex).
Implements SAMRAI::hier::PatchData< DIM >.
int SAMRAI::pdat::OuteredgeData< DIM, TYPE >::getDataStreamSize | ( | const hier::BoxOverlap< DIM > & | overlap | ) | const [virtual] |
Return the number of bytes needed to stream the data in this patch data object lying in the specified box overlap region.
This routine is defined for the standard types (bool, char, double, float, int, and dcomplex).
Implements SAMRAI::hier::PatchData< DIM >.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::packStream | ( | tbox::AbstractStream & | stream, | |
const hier::BoxOverlap< DIM > & | overlap | |||
) | const [virtual] |
Pack data in this patch data object lying in the specified box overlap region into the stream. The overlap must be an EdgeOverlap of the same DIM.
Implements SAMRAI::hier::PatchData< DIM >.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::unpackStream | ( | tbox::AbstractStream & | stream, | |
const hier::BoxOverlap< DIM > & | overlap | |||
) | [virtual] |
Unpack data from stream into this patch data object over the specified box overlap region. The overlap must be an EdgeOverlap of the same DIM.
Implements SAMRAI::hier::PatchData< DIM >.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::unpackStreamAndSum | ( | tbox::AbstractStream & | stream, | |
const hier::BoxOverlap< DIM > & | overlap | |||
) | [virtual] |
Unpack data from stream and add into this patch data object over the specified box overlap region.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::fill | ( | const TYPE & | t, | |
int | d = 0 | |||
) |
Fill all values at depth d with the value t.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::fill | ( | const TYPE & | t, | |
const hier::Box< DIM > & | box, | |||
int | d = 0 | |||
) |
Fill all values at depth d within the box with the value t.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::fillAll | ( | const TYPE & | t | ) |
Fill all depth components with value t.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::fillAll | ( | const TYPE & | t, | |
const hier::Box< DIM > & | box | |||
) |
Fill all depth components within the box with value t.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::print | ( | const hier::Box< DIM > & | box, | |
std::ostream & | os = tbox::plog , |
|||
int | prec = 12 | |||
) | const |
Print all outeredge data values residing in the specified box. If the depth of the array is greater than one, all depths are printed.
box | const reference to box over whioch to print data. Note box is assumed to reside in standard cell-centered index space and will be converted to edge index space. | |
os | reference to output stream. | |
prec | integer precision for printing floating point numbers (i.e., TYPE = float, double, or dcomplex). The default is 12 decimal places for double and complex floating point numbers, and the default is 6 decimal places floats. For other types, this value is ignored. |
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::print | ( | const hier::Box< DIM > & | box, | |
int | depth, | |||
std::ostream & | os = tbox::plog , |
|||
int | prec = 12 | |||
) | const |
Print all outeredge data values at the given array depth in the specified box.
box | const reference to box over whioch to print data. Note box is assumed to reside in standard cell-centered index space and will be converted to edge index space. | |
depth | integer depth component, must satisfy 0 <= depth < actual depth of data array | |
os | reference to output stream. | |
prec | integer precision for printing floating point numbers (i.e., TYPE = float, double, or dcomplex). The default is 12 decimal places for double and complex floating point numbers, and the default is 6 decimal places floats. For other types, this value is ignored. |
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::printAxisSide | ( | int | axis, | |
int | face_normal, | |||
int | side, | |||
const hier::Box< DIM > & | box, | |||
std::ostream & | os = tbox::plog , |
|||
int | prec = 12 | |||
) | const |
Print all outeredge centered data values for specified axis, face_normal, and side residing in the specified box. If the depth of the data is greater than one, all depths are printed.
axis | integer edge data coordinate axis, must satisfy 0 <= axis < DIM | |
face_normal | integer face normal direction for data, must satisfy 0 <= face_normal < DIM | |
side | integer lower (0) or upper (1) side of outeredge data array | |
box | const reference to box over whioch to print data. Note box is assumed to reside in standard cell-centered index space and will be converted to edge index space. | |
os | reference to output stream. | |
prec | integer precision for printing floating point numbers (i.e., TYPE = float, double, or dcomplex). The default is 12 decimal places for double and complex floating point numbers, and the default is 6 decimal places floats. For other types, this value is ignored. |
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::printAxisSide | ( | int | axis, | |
int | face_normal, | |||
int | side, | |||
const hier::Box< DIM > & | box, | |||
int | depth, | |||
std::ostream & | os = tbox::plog , |
|||
int | prec = 12 | |||
) | const |
Print all outeredge centered data values for specified axis, face_normal, side, and depth residing in the specified box.
axis | integer edge data coordinate axis, must satisfy 0 <= axis < DIM | |
face_normal | integer face normal direction for data, must satisfy 0 <= face_normal < DIM | |
side | integer lower (0) or upper (1) side of outeredge data array | |
box | const reference to box over whioch to print data. Note box is assumed to reside in standard cell-centered index space and will be converted to edge index space. | |
depth | integer depth component, must satisfy 0 <= depth < actual depth of data array | |
os | reference to output stream. | |
prec | integer precision for printing floating point numbers (i.e., TYPE = float, double, or dcomplex). The default is 12 decimal places for double and complex floating point numbers, and the default is 6 decimal places floats. For other types, this value is ignored. |
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::getSpecializedFromDatabase | ( | tbox::Pointer< tbox::Database > | database | ) | [virtual] |
Check that class version and restart file version are equal. If so, read data members from the database.
Assertions: database must be a non-null pointer.
Implements SAMRAI::hier::PatchData< DIM >.
void SAMRAI::pdat::OuteredgeData< DIM, TYPE >::putSpecializedToDatabase | ( | tbox::Pointer< tbox::Database > | database | ) | [virtual] |
Write out the class version number and other data members to the database.
Assertions: database must be a non-null pointer.
Implements SAMRAI::hier::PatchData< DIM >.