#include <BaseFab.H>
Public Member Functions | |
BaseFab () | |
{ constructors, destructor and defines} | |
BaseFab (const Box &a_bx, int a_n, T *a_alias=NULL) | |
BaseFab (const Interval &a_comps, BaseFab< T > &a_original) | |
virtual | ~BaseFab () |
void | resize (const Box &a_b, int a_n=1, T *a_alias=NULL) |
virtual void | define (const Box &a_box, int a_comps, T *a_alias=NULL) |
virtual void | define (const Interval &a_comps, BaseFab< T > &a_original) |
void | clear () |
int | nComp () const |
{ accessors} | |
const Box & | box () const |
IntVect | size () const |
const IntVect & | smallEnd () const |
const IntVect & | bigEnd () const |
Interval | interval () const |
T & | operator() (const IntVect &a_p, int a_N) |
T & | operator() (const IntVect &a_p) |
const T & | operator() (const IntVect &p, int N) const |
const T & | operator() (const IntVect &p) const |
void | getVal (T *a_data, const IntVect &a_pos, int a_N, int a_numcomp) const |
void | getVal (T *a_data, const IntVect &a_pos) const |
const int * | loVect () const |
{ Fortran interface functions} | |
const int * | hiVect () const |
const int * | nCompPtr () const |
T * | dataPtr (int a_n=0) |
const T * | dataPtr (int a_n=0) const |
bool | contains (const BaseFab< T > &a_fab) const |
{ comparison functions} | |
bool | contains (const Box &a_bx) const |
void | setVal (T a_x, const Box &a_bx, int a_nstart, int a_numcomp) |
{ data modification functions} | |
void | setVal (T a_x, const Box &a_bx, int a_n) |
void | setVal (T a_x, int a_n) |
void | setVal (T a_x) |
BaseFab< T > & | copy (const BaseFab< T > &a_src, const Box &a_srcbox, int a_srccomp, const Box &a_destbox, int a_destcomp, int a_numcomp) |
BaseFab< T > & | copy (const BaseFab< T > &a_src, int a_srccomp, int a_destcomp, int a_numcomp=1) |
BaseFab< T > & | copy (const BaseFab< T > &a_src, const Box &a_destbox) |
BaseFab< T > & | copy (const BaseFab< T > &a_src) |
void | copy (const Box &a_RegionFrom, const Interval &a_Cdest, const Box &a_RegionTo, const BaseFab< T > &a_src, const Interval &a_Csrc) |
BaseFab< T > & | shift (const IntVect &a_v) |
{ domain modification functions} | |
BaseFab< T > & | shift (int a_idir, int a_ncells) |
BaseFab< T > & | shiftHalf (int a_dir, int a_numHalfs) |
BaseFab< T > & | shiftHalf (const IntVect &a_v) |
virtual int | size (const Box &a_box, const Interval &a_comps) const |
{ linearization functions} | |
virtual void | linearOut (void *a_buf, const Box &a_R, const Interval &a_comps) const |
virtual void | linearIn (void *a_buf, const Box &a_R, const Interval &a_comps) |
void | degenerate (BaseFab< T > &a_slice, const SliceSpec &a_sliceSpec) const |
bool | isAliased () const |
template<> | |
void | define () |
template<> | |
void | undefine () |
template<> | |
void | setVal (Real val) |
Static Public Member Functions | |
static int | preAllocatable () |
Protected Member Functions | |
void | define () |
void | undefine () |
virtual void | performCopy (const BaseFab< T > &a_src, const Box &a_srcbox, int a_srccomp, const Box &a_destbox, int a_destcomp, int a_numcomp) |
void | performSetVal (T a_x, const Box &a_bx, int a_nstart, int a_numcomp) |
Static Protected Member Functions | |
static std::string | name () |
Protected Attributes | |
Box | m_domain |
int | m_nvar |
long | m_numpts |
long | m_truesize |
T * | m_dptr |
bool | m_aliased |
Static Protected Attributes | |
static Arena * | s_Arena = NULL |
Private Member Functions | |
BaseFab< T > & | operator= (const BaseFab< T > &) |
BaseFab (const BaseFab< T > &) |
{ constructors, destructor and defines}
Constructs an invalid `BaseFab'. The domain is invalid, the number of components is zero, and no actual array memory is allocated. An invalid `BaseFab' must be resize()d (see `BaseFabresize') before use.
Constructs a BaseFab with desired domain and number of components.
References BaseFab< T >::define(), BaseFab< T >::m_aliased, and BaseFab< T >::m_dptr.
BaseFab< T >::BaseFab | ( | const Interval & | a_comps, | |
BaseFab< T > & | a_original | |||
) | [inline] |
Constructs an 'aliased' BaseFab of the requested interval of the argument BaseFab. This BaseFab does not allocate any memory, but sets its data pointer into the memory pointed to by the argument BaseFab. It is the users responsiblity to ensure this aliased BaseFab is not used after the original BaseFab has deleted its data ptr (resize, define(..) called, or destruction, etc.).
This aliased BaseFab will also generate side effects (modifying the values of data in one will modify the other's data).
This aliased BaseFab will have a_comps.size() components, starting at zero.
The destructor deletes the array memory. Unless this was an aliased BaseFab.
References BaseFab< T >::undefine().
void BaseFab< T >::resize | ( | const Box & | a_b, | |
int | a_n = 1 , |
|||
T * | a_alias = NULL | |||
) | [inline] |
This function resizes a `BaseFab' so it covers the `Box' a_b with a_n components. If a_alias is not NULL the memory it points to is used (without checking size); otherwise the existing data is lost and the new data is uninitialized.
References BaseFab< T >::define(), BaseFab< T >::m_aliased, BaseFab< T >::m_domain, BaseFab< T >::m_dptr, BaseFab< T >::m_numpts, BaseFab< T >::m_nvar, Box::numPts(), and BaseFab< T >::undefine().
Referenced by IVSFAB< T >::define(), FArrayBox::define(), BaseIVFAB< T >::define(), BaseIFFAB< T >::define(), and BaseFab< bool >::define().
virtual void BaseFab< T >::define | ( | const Box & | a_box, | |
int | a_comps, | |||
T * | a_alias = NULL | |||
) | [inline, virtual] |
Make BaseFab with desired domain and number of components. Existing data is lost. Data is in uninialized state.
Referenced by BaseFab< T >::degenerate().
void BaseFab< T >::define | ( | const Interval & | a_comps, | |
BaseFab< T > & | a_original | |||
) | [inline, virtual] |
alias define. no memory allocated. this BaseFab sets its data ptr directly in the a_original BaseFab data.
References Interval::begin(), BaseFab< T >::dataPtr(), BaseFab< T >::m_aliased, BaseFab< T >::m_domain, BaseFab< T >::m_dptr, BaseFab< T >::m_numpts, BaseFab< T >::m_nvar, BaseFab< T >::m_truesize, Interval::size(), and BaseFab< T >::undefine().
void BaseFab< T >::clear | ( | ) | [inline] |
The function returns the `BaseFab' to the invalid state. (See comments for constructors above.) The memory is freed.
References BaseFab< T >::m_domain, BaseFab< T >::m_numpts, BaseFab< T >::m_nvar, and BaseFab< T >::undefine().
Referenced by IVSFAB< T >::clear(), BaseIVFAB< T >::clear(), and BaseIFFAB< T >::clear().
int BaseFab< T >::nComp | ( | ) | const [inline] |
{ accessors}
Returns the number of components.
References BaseFab< T >::m_nvar.
Referenced by BaseFab< T >::copy(), BaseFab< T >::degenerate(), NodeFArrayBox::nComp(), and BaseFab< T >::performCopy().
Returns the domain (box) where the array is defined.
References BaseFab< T >::m_domain.
Referenced by BaseFab< T >::contains(), BaseFab< T >::copy(), BaseFab< T >::degenerate(), BaseFab< T >::performCopy(), and BaseFab< T >::setVal().
Returns an IntVect giving the length of the domain in each direction.
References BaseFab< T >::m_domain, and Box::size().
Referenced by BaseFab< T >::getVal().
Returns the lower corner of the domain. See class `Box' for analogue.
References BaseFab< T >::m_domain, and Box::smallEnd().
Returns the upper corner of the domain. See class `Box' for analogue.
References Box::bigEnd(), and BaseFab< T >::m_domain.
Returns an Interval for the entire range on components.
Returns a modifiable lvalue reference to the Nth component value defined at position p in the domain. This operator may be inefficient if the C++ compiler is unable to optimize the C++ code.
References Box::contains(), Box::index(), BaseFab< T >::m_domain, BaseFab< T >::m_dptr, BaseFab< T >::m_numpts, and BaseFab< T >::m_nvar.
Referenced by FArrayBox::get(), and FArrayBox::set().
References Box::contains(), Box::index(), BaseFab< T >::m_domain, and BaseFab< T >::m_dptr.
Returns a conatant reference to the Nth component value defined at position p in the domain. This operator may be inefficient if the C++ compiler is unable to optimize the C++ code.
References Box::contains(), Box::index(), BaseFab< T >::m_domain, BaseFab< T >::m_dptr, BaseFab< T >::m_numpts, and BaseFab< T >::m_nvar.
References Box::contains(), Box::index(), BaseFab< T >::m_domain, and BaseFab< T >::m_dptr.
void BaseFab< T >::getVal | ( | T * | a_data, | |
const IntVect & | a_pos, | |||
int | a_N, | |||
int | a_numcomp | |||
) | const [inline] |
This function puts numcomp component values, starting at component N, from position pos in the domain into array data, that must be allocated by the user.
References Box::index(), k, BaseFab< T >::m_domain, BaseFab< T >::m_dptr, BaseFab< T >::m_nvar, Box::numPts(), and BaseFab< T >::size().
Referenced by BaseFab< T >::getVal().
This function puts all component values, starting at component 0, from position pos in the domain into array data, that must be allocated by the user.
References BaseFab< T >::getVal(), and BaseFab< T >::m_nvar.
const int * BaseFab< T >::loVect | ( | ) | const [inline] |
{ Fortran interface functions}
Returns the lower corner of the domain. Instead of returning them in the form of IntVects, as in smallEnd and bigEnd, it returns the values as a pointer to an array of constant integers. This is useful when interfacing to Fortran subroutines. It should not be used in any other context!!!
References Box::loVect(), and BaseFab< T >::m_domain.
const int * BaseFab< T >::hiVect | ( | ) | const [inline] |
Returns the upper corner of the domain. Instead of returning them in the form of IntVects, as in smallEnd and bigEnd, it returns the values as a pointer to an array of constant integers. This is useful when interfacing to Fortran subroutines. It should not be used in any other context!!!
References Box::hiVect(), and BaseFab< T >::m_domain.
const int * BaseFab< T >::nCompPtr | ( | ) | const [inline] |
Returns a pointer to an integer that contains the number of components in the BaseFab. This is useful when interfacing to Fortran subroutines. It should not be used in any other context!!!
References BaseFab< T >::m_dptr, and BaseFab< T >::m_nvar.
T * BaseFab< T >::dataPtr | ( | int | a_n = 0 |
) | [inline] |
Returns a pointer to an object of type T that is the value of the a_nth component associated with the cell at the low end of the domain. This is commonly used to get a pointer to data in the array which is then handed off to a Fortran subroutine. It should not be used in any other context!!! Remember that data is stored in Fortran array order, with the component index coming last. In other words, `dataPtr' returns a pointer to all the a_nth components.
References BaseFab< T >::m_dptr, BaseFab< T >::m_numpts, and BaseFab< T >::m_nvar.
Referenced by BaseFab< T >::define().
const T * BaseFab< T >::dataPtr | ( | int | a_n = 0 |
) | const [inline] |
Returns a constant pointer to an object of type T that is the value of the a_nth component associated with the cell at the low end of the domain. This is commonly used to get a pointer to data in the array which is then handed off to a Fortran subroutine. It should not be used in any other context!!! Remember that data is stored in Fortran array order, with the component index coming last. In other words, `dataPtr' returns a pointer to all the a_nth components.
References BaseFab< T >::m_dptr, BaseFab< T >::m_numpts, and BaseFab< T >::m_nvar.
{ comparison functions}
Returns true if the domain of a_fab is totally contained within the domain of this `BaseFab'.
References BaseFab< T >::box(), Box::contains(), and BaseFab< T >::m_nvar.
Referenced by BaseFab< T >::performCopy().
Returns true if a_bx is totally contained within the domain of this `BaseFab'.
References BaseFab< T >::box(), and Box::contains().
void BaseFab< T >::setVal | ( | T | a_x, | |
const Box & | a_bx, | |||
int | a_nstart, | |||
int | a_numcomp | |||
) | [inline] |
{ data modification functions}
The setVal functions set subregions in the `BaseFab' to a constant value. This most general form specifies the subbox, the starting component number, and the number of components to be set.
References BaseFab< T >::performSetVal().
Referenced by BaseIVFAB< T >::define(), and BaseIFFAB< T >::define().
Modifies this BaseFab so that all values of a component, a_n, in the specified Box, a_bx, are set to the given value, a_x.
References BaseFab< T >::performSetVal().
void BaseFab< T >::setVal | ( | T | a_x, | |
int | a_n | |||
) | [inline] |
Modifies this BaseFab so that all values of a component, a_n, are set to the given value, a_x.
References BaseFab< T >::m_domain, and BaseFab< T >::performSetVal().
void BaseFab< T >::setVal | ( | T | a_x | ) | [inline] |
Modifies this BaseFab so that all values of all components are set to the given value, a_x.
References BaseFab< T >::box(), BaseFab< T >::m_nvar, and BaseFab< T >::performSetVal().
BaseFab< T > & BaseFab< T >::copy | ( | const BaseFab< T > & | a_src, | |
const Box & | a_srcbox, | |||
int | a_srccomp, | |||
const Box & | a_destbox, | |||
int | a_destcomp, | |||
int | a_numcomp | |||
) | [inline] |
Modifies this BaseFab by copying the contents of the argument BaseFab into it. This, the most general form of copy, specifies the contents of any sub-box a_srcbox in `BaseFab' a_src may be copied into a (possibly different) a_destbox in the destination `BaseFab'. Note that although the a_srcbox and the a_destbox may be disjoint, they must be the same size and shape. If the sizes differ, the copy is undefined and a runtime error results. This copy function is the only one of the copy functions to allow a copy between differing boxes. The user also specifies how many components are copied, starting at component a_srccomp in a_src and stored starting at component a_destcomp. The results are UNDEFINED if the a_src and dest BaseFabs are the same and the a_srcbox and a_destbox overlap.
References BaseFab< T >::box(), Box::contains(), BaseFab< T >::m_domain, BaseFab< T >::m_nvar, BaseFab< T >::nComp(), BaseFab< T >::performCopy(), and Box::sameSize().
Referenced by BaseFab< T >::copy(), and BaseFab< T >::degenerate().
BaseFab< T > & BaseFab< T >::copy | ( | const BaseFab< T > & | a_src, | |
int | a_srccomp, | |||
int | a_destcomp, | |||
int | a_numcomp = 1 | |||
) | [inline] |
Modifies this BaseFab by copying the contents of the argument BaseFab into it. A copy within the intersecting region of the domains of the two BaseFabs is performed. The user specifies how many components are copied, starting at component a_srccomp in a_src and stored starting at component a_destcomp.
References Box::isEmpty(), BaseFab< T >::m_domain, BaseFab< T >::m_nvar, and BaseFab< T >::performCopy().
BaseFab< T > & BaseFab< T >::copy | ( | const BaseFab< T > & | a_src, | |
const Box & | a_destbox | |||
) | [inline] |
Modifies this BaseFab by copying the contents of the argument BaseFab into it. A copy within the intersecting region of the domains of the two BaseFabs and the specified Box a_destbox is performed. All components are copied.
References Box::contains(), BaseFab< T >::m_domain, BaseFab< T >::m_nvar, and BaseFab< T >::performCopy().
Modifies this BaseFab by copying the contents of the argument BaseFab into it. A copy within the intersecting region of the domains of the two BaseFabs is performed. All components are copied.
References BaseFab< T >::m_domain, BaseFab< T >::m_nvar, BaseFab< T >::performCopy(), and Box::sameType().
void BaseFab< T >::copy | ( | const Box & | a_RegionFrom, | |
const Interval & | a_Cdest, | |||
const Box & | a_RegionTo, | |||
const BaseFab< T > & | a_src, | |||
const Interval & | a_Csrc | |||
) | [inline] |
Copy from a subsection of one box into another. Assumes the boxes are both in the same index space, and that box R is completely contained in both the source and destination boxes.
References Interval::begin(), BaseFab< T >::copy(), and Interval::size().
{ domain modification functions}
Modifies the domain of this BaseFab by shifting. Equivalent to fab.shift(0,a_v[0]).shift(1,a_v[1])... There is no effect upon the array memory.
References BaseFab< T >::m_domain.
Modifies the domain of this BaseFab by shifting it a_ncells indexing positions in coordinate direction a_idir. Directions are zero-based. It is an error if not 0 <= a_idir < SpaceDim. There is no effect upon the array memory.
References BaseFab< T >::m_domain, and Box::shift().
Modifies the domain of this BaseFab by shifting by "half" indices, thereby converting the Box from type CELL to NODE or vice-versa. fab.shiftHalf(0,1) shifts the domain to the right by 1/2 cells. fab.shiftHalf(1,-3) shifts the domain in the -j direction by 3/2 cells. NOTE: If a_numHalfs is EVEN the shift is a_numHalfs/2 full zones and hence will not change the type. This is: fab.shiftHalf(1,4) == fab.shift(1,2). Directions are zero-based. It is an error if not 0 <= a_dir < SpaceDim. There is no effect upon the array memory.
References BaseFab< T >::m_domain, and Box::shiftHalf().
Modifies the domain of this BaseFab by shifting by half indices. Equivalent to fab.shiftHalf(0,a_v[0]).shiftHalf(1,a_v[1]) ... There is no effect upon the array memory.
References BaseFab< T >::m_domain, and Box::shiftHalf().
int BaseFab< T >::size | ( | const Box & | a_box, | |
const Interval & | a_comps | |||
) | const [inline, virtual] |
{ linearization functions}
Returns the size, in number of bytes, of a flat linear representation of the data in this object in the area defined by the input Box a_box and the component Interval a_comps. The size does not include the size of a_box and a_comps.
References Box::numPts(), and Interval::size().
void BaseFab< T >::linearOut | ( | void * | a_buf, | |
const Box & | a_R, | |||
const Interval & | a_comps | |||
) | const [inline, virtual] |
Write a linear representation of the internal data. Assumes that sufficient memory for the buffer has already been allocated by the caller.
References Interval::begin(), and Interval::size().
void BaseFab< T >::linearIn | ( | void * | a_buf, | |
const Box & | a_R, | |||
const Interval & | a_comps | |||
) | [inline, virtual] |
References Interval::begin(), and Interval::size().
static int BaseFab< T >::preAllocatable | ( | ) | [inline, static] |
void BaseFab< T >::degenerate | ( | BaseFab< T > & | a_slice, | |
const SliceSpec & | a_sliceSpec | |||
) | const [inline] |
Turns a_slice into a BaseFab that's the same as *this except that it's just one cell thick in the a_sliceSpec.direction-th direction, and its coordinate in that direction is a_sliceSpec.position.
If a_sliceSpec.position is outside the range of *this, that's a fatal error.
References BaseFab< T >::box(), BaseFab< T >::copy(), BaseFab< T >::define(), Box::degenerate(), MayDay::Error(), and BaseFab< T >::nComp().
bool BaseFab< T >::isAliased | ( | ) | const [inline] |
References BaseFab< T >::m_aliased.
void BaseFab< T >::define | ( | ) | [inline, protected] |
References Arena::alloc(), MayDay::Error(), i, BaseFab< T >::m_aliased, BaseFab< T >::m_dptr, BaseFab< T >::m_numpts, BaseFab< T >::m_nvar, BaseFab< T >::m_truesize, BaseFab< T >::name(), and BaseFab< T >::s_Arena.
Referenced by BaseFab< T >::BaseFab(), FArrayBox::define(), and BaseFab< T >::resize().
void BaseFab< T >::undefine | ( | ) | [inline, protected] |
References Arena::free(), i, BaseFab< T >::m_aliased, BaseFab< T >::m_dptr, BaseFab< T >::m_truesize, and BaseFab< T >::s_Arena.
Referenced by BaseFab< T >::clear(), BaseFab< T >::define(), BaseFab< T >::resize(), and BaseFab< T >::~BaseFab().
std::string BaseFab< T >::name | ( | ) | [inline, static, protected] |
Referenced by BaseFab< T >::define().
void BaseFab< T >::performCopy | ( | const BaseFab< T > & | a_src, | |
const Box & | a_srcbox, | |||
int | a_srccomp, | |||
const Box & | a_destbox, | |||
int | a_destcomp, | |||
int | a_numcomp | |||
) | [inline, protected, virtual] |
References BaseFab< T >::box(), BaseFab< T >::contains(), Box::contains(), BaseFab< T >::nComp(), and Box::sameSize().
Referenced by BaseFab< T >::copy().
void BaseFab< T >::performSetVal | ( | T | a_x, | |
const Box & | a_bx, | |||
int | a_nstart, | |||
int | a_numcomp | |||
) | [inline, protected] |
References Box::contains(), i, BaseFab< T >::m_domain, BaseFab< T >::m_dptr, BaseFab< T >::m_numpts, and BaseFab< T >::m_nvar.
Referenced by BaseFab< T >::setVal().
Referenced by BaseFab< T >::define(), and BaseFab< T >::undefine().
Referenced by BaseFab< T >::bigEnd(), BaseFab< T >::box(), BaseFab< T >::clear(), BaseFab< T >::copy(), BaseFab< T >::define(), BaseFab< T >::getVal(), BaseFab< T >::hiVect(), BaseFab< T >::loVect(), BaseFab< T >::operator()(), BaseFab< T >::performSetVal(), BaseFab< T >::resize(), BaseFab< T >::setVal(), BaseFab< T >::shift(), BaseFab< T >::shiftHalf(), BaseFab< T >::size(), and BaseFab< T >::smallEnd().
Referenced by BaseFab< T >::clear(), BaseFab< T >::contains(), BaseFab< T >::copy(), BaseFab< T >::dataPtr(), BaseFab< T >::define(), BaseFab< T >::getVal(), BaseFab< bool >::interval(), BaseFab< T >::nComp(), BaseFab< T >::nCompPtr(), BaseFab< T >::operator()(), BaseFab< T >::performSetVal(), BaseFab< T >::resize(), and BaseFab< T >::setVal().
long BaseFab< T >::m_truesize [protected] |
Referenced by BaseFab< T >::define(), and BaseFab< T >::undefine().