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

BaseFab< T > Class Template Reference

#include <BaseFab.H>

Inheritance diagram for BaseFab< T >:

Inheritance graph
[legend]
Collaboration diagram for BaseFab< T >:

Collaboration graph
[legend]
List of all members.

Public Methods

 BaseFab ()
 {\bf 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
 {\bf accessors}

const Boxbox () const
const int * size () const
const IntVectsmallEnd () const
const IntVectbigEnd () 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
 {\bf 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
 {\bf comparison functions}

bool contains (const Box &a_bx) const
void setVal (T a_x, const Box &a_bx, int a_nstart, int a_numcomp)
 {\bf 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)
 {\bf 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
 {\bf 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)

Static Public Methods

int preAllocatable ()

Protected Methods

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 Methods

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

Arenas_Arena = NULL

template<class T>
class BaseFab< T >


Constructor & Destructor Documentation

template<class T>
BaseFab< T >::BaseFab   [inline]
 

{\bf 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 `BaseFab::resize') before use.

template<class T>
BaseFab< T >::BaseFab const Box   a_bx,
int    a_n,
T *    a_alias = NULL
[inline]
 

Constructs a BaseFab with desired domain and number of components.

template<class T>
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.

template<class T>
BaseFab< T >::~BaseFab   [inline, virtual]
 

The destructor deletes the array memory. Unless this was an aliased BaseFab.


Member Function Documentation

template<class T>
const IntVect & BaseFab< T >::bigEnd   const [inline]
 

Returns the upper corner of the domain. See class `Box' for analogue.

template<class T>
const Box & BaseFab< T >::box   const [inline]
 

Returns the domain (box) where the array is defined.

template<class T>
void BaseFab< T >::clear   [inline]
 

The function returns the `BaseFab' to the invalid state. (See comments for constructors above.) The memory is freed.

Reimplemented in BinFab< T >.

template<class T>
bool BaseFab< T >::contains const Box   a_bx const [inline]
 

Returns true if a_bx is totally contained within the domain of this `BaseFab'.

template<class T>
bool BaseFab< T >::contains const BaseFab< T > &    a_fab const [inline]
 

{\bf comparison functions}

Returns true if the domain of a_fab is totally contained within the domain of this `BaseFab'.

template<class T>
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.

template<class T>
BaseFab< T > & BaseFab< T >::copy const BaseFab< T > &    a_src [inline]
 

Modifies this BaseFab by coping 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.

template<class T>
BaseFab< T > & BaseFab< T >::copy const BaseFab< T > &    a_src,
const Box   a_destbox
[inline]
 

Modifies this BaseFab by coping 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.

template<class T>
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.

template<class T>
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.

template<class T>
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.

template<class T>
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.

template<class T>
void BaseFab< T >::define   [inline, protected]
 

template<class T>
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.

template<class T>
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.

Reimplemented in FArrayBox.

template<class T>
void BaseFab< T >::getVal T *    a_data,
const IntVect   a_pos
const [inline]
 

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.

template<class T>
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.

template<class T>
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!!!

template<class T>
Interval BaseFab< T >::interval   const [inline]
 

Returns an Interval for the entire range on components.

template<class T>
void BaseFab< T >::linearIn void *    a_buf,
const Box   a_R,
const Interval   a_comps
[inline, virtual]
 

Reimplemented in BinFab< T >.

template<class T>
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.

Reimplemented in BinFab< T >.

template<class T>
const int * BaseFab< T >::loVect   const [inline]
 

{\bf 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!!!

template<class T>
std::string BaseFab< T >::name   [inline, static, protected]
 

template<class T>
int BaseFab< T >::nComp   const [inline]
 

{\bf accessors}

Returns the number of components.

template<class T>
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!!!

template<class T>
const T & BaseFab< T >::operator() const IntVect   p const [inline]
 

template<class T>
const T & BaseFab< T >::operator() const IntVect   p,
int    N
const [inline]
 

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.

template<class T>
T & BaseFab< T >::operator() const IntVect   a_p [inline]
 

template<class T>
T & BaseFab< T >::operator() const IntVect   a_p,
int    a_N
[inline]
 

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.

template<class T>
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]
 

Reimplemented in FArrayBox.

template<class T>
void BaseFab< T >::performSetVal   a_x,
const Box   a_bx,
int    a_nstart,
int    a_numcomp
[inline, protected]
 

template<class T>
int BaseFab< T >::preAllocatable   [inline, static]
 

Reimplemented in BinFab< T >.

template<class T>
void BaseFab< T >::resize const Box   a_b,
int    a_n = 1,
T *    a_alias = NULL
 

This function resizes a `BaseFab' so it covers the `Box' a_b with a_n components. The default action is that under resize()ing, the memory allocated for the `BaseFab' only grows and never shrinks. This function is particularly useful when a `BaseFab' is used as a temporary space which must be a different size whenever it is used. Resize()ing a temp will often be faster than re-allocating a `BaseFab' because memory allocation can often be avoided.

template<class T>
void BaseFab< T >::setVal   a_x [inline]
 

Modifies this BaseFab so that all values of all components are set to the given value, a_x.

template<class T>
void BaseFab< T >::setVal   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.

template<class T>
void BaseFab< T >::setVal   a_x,
const Box   a_bx,
int    a_n
[inline]
 

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.

template<class T>
void BaseFab< T >::setVal   a_x,
const Box   a_bx,
int    a_nstart,
int    a_numcomp
[inline]
 

{\bf 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.

template<class T>
BaseFab< T > & BaseFab< T >::shift int    a_idir,
int    a_ncells
[inline]
 

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.

template<class T>
BaseFab< T > & BaseFab< T >::shift const IntVect   a_v [inline]
 

{\bf 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.

template<class T>
BaseFab< T > & BaseFab< T >::shiftHalf const IntVect   a_v [inline]
 

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.

template<class T>
BaseFab< T > & BaseFab< T >::shiftHalf int    a_dir,
int    a_numHalfs
[inline]
 

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.

template<class T>
int BaseFab< T >::size const Box   a_box,
const Interval   a_comps
const [inline, virtual]
 

{\bf 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.

Reimplemented in BinFab< T >.

template<class T>
const int * BaseFab< T >::size   const [inline]
 

Returns a pointer to an array of SpaceDim integers giving the length of the domain in each direction.

Reimplemented in BinFab< T >.

template<class T>
const IntVect & BaseFab< T >::smallEnd   const [inline]
 

Returns the lower corner of the domain. See class `Box' for analogue.

template<class T>
void BaseFab< T >::undefine   [inline, protected]
 


Member Data Documentation

template<class T>
bool BaseFab< T >::m_aliased [protected]
 

template<class T>
Box BaseFab< T >::m_domain [protected]
 

template<class T>
T* BaseFab< T >::m_dptr [protected]
 

template<class T>
long BaseFab< T >::m_numpts [protected]
 

template<class T>
int BaseFab< T >::m_nvar [protected]
 

template<class T>
long BaseFab< T >::m_truesize [protected]
 

template<class T>
Arena * BaseFab< T >::s_Arena = NULL [static, protected]
 


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