MACField< Data_T > Class Template Reference
Fields

This subclass of Field implements a standard MAC field. Refer to your favorite fluid simulations book for an explanation. More...

`#include <MACField.h>`

Inheritance diagram for MACField< Data_T >:

## Classes

class | const_mac_comp_iterator
class | mac_comp_iterator

## Public Types

typedef MACField< Data_T > | class_type
typedef CubicMACFieldInterp< Data_T > | CubicInterp
typedef LinearMACFieldInterp< Data_T > | LinearInterp
typedef boost::intrusive_ptr< MACField > | Ptr
typedef Data_T::BaseType | real_t
| This typedef is used to refer to the scalar component type of the vectors.
typedef std::vector< Ptr > | Vec
Public Types inherited from ResizableField< Data_T >
typedef ResizableField< Data_T > | class_type
typedef boost::intrusive_ptr< ResizableField > | Ptr
Public Types inherited from WritableField< Data_T >
typedef WritableField< Data_T > | class_type
typedef boost::intrusive_ptr< WritableField > | Ptr
Public Types inherited from Field< Data_T >
typedef Field< Data_T > | class_type
typedef boost::intrusive_ptr< Field > | Ptr
typedef Data_T | value_type
| Allows us to reference the template class.
typedef std::vector< Ptr > | Vec
| This is a convenience typedef for the list that Field3DInputFile::readScalarLayers() and Field3DInputFile::readVectorLayers() will return its data in.
Public Types inherited from FieldRes
typedef FieldRes | class_type
typedef boost::intrusive_ptr< FieldRes > | Ptr
typedef std::vector< Ptr > | Vec
Public Types inherited from FieldBase
typedef FieldBase | class_type
typedef boost::intrusive_ptr< FieldBase > | Ptr
Public Types inherited from RefBase
typedef boost::intrusive_ptr< RefBase > | Ptr
typedef boost::weak_ptr< RefBase > | WeakPtr

## Public Member Functions

void | copyMAC (typename MACField::Ptr other)
| TEMP: Copies the MAC field data from another MAC field. This should be re-implemented using proper iterators over the field.
V3i | getComponentSize () const
| Returns the size of U,V,W components.
real_t | uCenter (int i, int j, int k) const
| Returns the u-component interpolated to the cell center.
real_t | vCenter (int i, int j, int k) const
| Returns the v-component interpolated to the cell center.
real_t | wCenter (int i, int j, int k) const
| Returns the w-component interpolated to the cell center.
Constructors & destructor
| MACField ()
| Constructs an empty buffer.
virtual void | clear (const Data_T &value)
| Clears all the voxels in the storage.
From Field
virtual Data_T | value (int i, int j, int k) const
virtual long long int | memSize () const
| Returns the memory usage (in bytes).
From WritableField
virtual Data_T & | lvalue (int i, int j, int k)
| This will return the appropriate interpolated value but setting that to something else does not change the MAC field.
MAC-component access
const real_t & | u (int i, int j, int k) const
| Read access to value on u-facing wall.
real_t & | u (int i, int j, int k)
| Write access to value on u-facing wall.
const real_t & | v (int i, int j, int k) const
| Read access to value on v-facing wall.
real_t & | v (int i, int j, int k)
| Write access to value on v-facing wall.
const real_t & | w (int i, int j, int k) const
| Read access to value on w-facing wall.
real_t & | w (int i, int j, int k)
| Write access to value on w-facing wall.
MAC-component iterators
A note about MAC iterators The subset that we choose to iterate over is defined by voxels, not MAC face coordinates. Thus, iterator from (0, 0, 0) to (0, 0, 0) will actually visit (0, 0, 0) and (1, 0, 0) for the u component, and (0, 0, 0) to (0, 1, 0) for the v component...
const_mac_comp_iterator | cbegin_comp (MACComponent comp) const
| Const iterator to first element. "cbegin" matches the tr1 c++ standard.
const_mac_comp_iterator | cbegin_comp (MACComponent comp, const Box3i &subset) const
| Const iterator to first element of specific subset.
const_mac_comp_iterator | cend_comp (MACComponent comp) const
| Const iterator to first element. "cbegin" matches the tr1 c++ standard.
const_mac_comp_iterator | cend_comp (MACComponent comp, const Box3i &subset) const
| Const iterator to first element of specific subset.
mac_comp_iterator | begin_comp (MACComponent comp)
| Iterator to first element.
mac_comp_iterator | begin_comp (MACComponent comp, const Box3i &subset)
| Iterator to first element of specific subset.
mac_comp_iterator | end_comp (MACComponent comp)
| Iterator to first element.
mac_comp_iterator | end_comp (MACComponent comp, const Box3i &subset)
| Iterator to first element of specific subset.
Public Member Functions inherited from ResizableField< Data_T >
void | copyFrom (typename Field< Data_T >::Ptr other)
| Copies the data from another Field, also resizes.
template<class Data_T2>
void | copyFrom (typename Field< Data_T2 >::Ptr other)
| Copies the data from another Field of another template class, also resizes.
void | matchDefinition (FieldRes::Ptr fieldToMatch)
| Sets up this field so that resolution and mapping matches the other.
void | setSize (const Box3i &extents)
| Resizes the object.
void | setSize (const Box3i &extents, const Box3i &dataWindow)
| Resizes the object.
void | setSize (const V3i &size)
| Resizes the object.
void | setSize (const V3i &size, int padding)
| Resizes the object with padding.
Public Member Functions inherited from WritableField< Data_T >
iterator | begin ()
| Iterator to first element.
iterator | begin (const Box3i &subset)
| Iterator to first element of specific subset.
iterator | end ()
| Iterator pointing one element past the last valid one.
iterator | end (const Box3i &subset)
| Iterator pointing one element past the last valid one (for a subset).
Public Member Functions inherited from Field< Data_T >
const_iterator | cbegin () const
| Const iterator to first element. "cbegin" matches the tr1 c++ standard.
const_iterator | cbegin (const Box3i &subset) const
| Const iterator to first element of specific subset.
const_iterator | cend () const
| Const iterator pointing one element past the last valid one.
const_iterator | cend (const Box3i &subset) const
| Const iterator pointing one element past the last valid one (for a subset).
virtual std::string | dataTypeString () const
virtual | ~Field ()
| Dtor.
Public Member Functions inherited from FieldRes
V3i const | dataResolution () const
const Box3i & | dataWindow () const
| Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field subclass.
const Box3i & | extents () const
| Returns the extents of the data. This signifies the relevant area that the data exists over. However, the data window (below) may be smaller than the extents, in which case it is only safe to call value() for those coordinate inside the data window.
| FieldRes ()
| This constructor ensures that we have a valid mapping at all times.
| FieldRes (const FieldRes &src)
| Base class copy constructor.
bool | isInBounds (int i, int j, int k) const
| Returns true is the indicies are in bounds of the data window.
FieldMapping::Ptr | mapping ()
| Returns a pointer to the mapping.
const FieldMapping::Ptr | mapping () const
| Returns a pointer to the mapping.
virtual void | mappingChanged ()
| Tells the subclass that the mapping changed.
void | setMapping (FieldMapping::Ptr mapping)
| Sets the field's mapping.
virtual size_t | voxelCount () const
| Counts the number of voxels. For most fields, this is just the volume of the data window, but sparse data structures can override this to return a better value.
Public Member Functions inherited from FieldBase
| FieldBase ()
| Constructor.
| FieldBase (const FieldBase &)
| Copy Constructor.
virtual | ~FieldBase ()
| Destructor.
virtual std::string | className () const =0
| Returns the class name of the object. Used by the class pool and when writing the data to disk.
virtual std::string | classType () const =0
| Returns the full class type string.
FieldMetadata & | metadata ()
| accessor to the m_metadata class
const FieldMetadata & | metadata () const
| Read only access to the m_metadata class.
void | copyMetadata (const FieldBase &field)
| Copies the metadata from a second field.
Public Member Functions inherited from RefBase
void | ref () const
| Used by boost::intrusive_pointer.
size_t | refcnt ()
| Used by boost::intrusive_pointer.
void | unref () const
| Used by boost::intrusive_pointer.
WeakPtr | weakPtr () const
| RefBase ()
| RefBase (const RefBase &)
| Copy constructor.
RefBase & | operator= (const RefBase &)
| Assignment operator.
virtual | ~RefBase ()
| Destructor.
virtual bool | checkRTTI (const char *typenameStr)=0
| This function is only implemented by concrete classes and triggers the actual RTTI check through matchRTTI();.
bool | matchRTTI (const char *typenameStr)
| Performs a check to see if the given typename string matches this class' This needs to be implemented in -all- subclasses, even abstract ones.
Public Member Functions inherited from MetadataCallback
virtual void | metadataHasChanged (const std::string &)
| Alerts the callback holder that the metadata has changed.

## Static Public Member Functions

static const char * | staticClassName ()
static const char * | staticClassType ()
Static Public Member Functions inherited from ResizableField< Data_T >
static const char * | staticClassName ()
static const char * | staticClassType ()
Static Public Member Functions inherited from WritableField< Data_T >
static const char * | staticClassName ()
static const char * | staticClassType ()
Static Public Member Functions inherited from Field< Data_T >
static const char * | staticClassName ()
static const char * | staticClassType ()
Static Public Member Functions inherited from FieldRes
static const char * | staticClassName ()
static const char * | staticClassType ()
Static Public Member Functions inherited from FieldBase
static const char * | staticClassName ()
static const char * | staticClassType ()
static const char * | staticClassType ()

## Public Attributes

| DEFINE_FIELD_RTTI_CONCRETE_CLASS
Public Attributes inherited from ResizableField< Data_T >
| DEFINE_FIELD_RTTI_ABSTRACT_CLASS
Public Attributes inherited from WritableField< Data_T >
| DEFINE_FIELD_RTTI_ABSTRACT_CLASS
Public Attributes inherited from Field< Data_T >
| DEFINE_FIELD_RTTI_ABSTRACT_CLASS
Public Attributes inherited from FieldRes
| DEFINE_FIELD_RTTI_ABSTRACT_CLASS
Public Attributes inherited from FieldBase
std::string | attribute
| Optional name of the attribute the field represents.
std::string | name
| Optional name of the field.

## Protected Member Functions

virtual void | sizeChanged ()
| Subclasses should re-implement this if they need to perform memory allocations, etc. every time the size of the storage changes.
real_t * | uPtr (int i, int j, int k)
| Direct access to value on u-facing wall.
const real_t * | uPtr (int i, int j, int k) const
| Direct access to value on u-facing wall.
real_t * | vPtr (int i, int j, int k)
| Direct access to value on v-facing wall.
const real_t * | vPtr (int i, int j, int k) const
| Direct access to value on v-facing wall.
real_t * | wPtr (int i, int j, int k)
| Direct access to value on w-facing wall.
const real_t * | wPtr (int i, int j, int k) const
| Direct access to value on w-facing wall.

## Protected Attributes

Data_T | m_dummy
| Dummy storage of a temp value that lvalue() can write to.
std::vector< real_t > | m_u
| U component storage.
V3i | m_uSize
| Size of U grid along each axis.
int | m_uSizeXY
| Size of xy slice for u component.
std::vector< real_t > | m_v
| V component storage.
V3i | m_vSize
| Size of V grid along each axis.
int | m_vSizeXY
| Size of xy slice for v component.
std::vector< real_t > | m_w
| W component storage.
V3i | m_wSize
| Size of W grid along each axis.
int | m_wSizeXY
| Size of xy slice for w component.
Protected Attributes inherited from FieldRes
Box3i | m_dataWindow
| Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval.
Box3i | m_extents
| Defines the extents of the the storage. This may be larger or smaller than the data window, and in the case where it is larger, care must be taken not to access voxels outside the data window. This should be treated as a closed (i.e. inclusive) interval.
FieldMapping::Ptr | m_mapping
| Pointer to the field's mapping.

## Private Types

typedef ResizableField< Data_T > | base

## Static Private Attributes

static TemplatedFieldType< MACField< Data_T > > | ms_classType

## From FieldBase

| FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION
virtual FieldBase::Ptr | clone () const
| Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it.

## Additional Inherited Members

Protected Types inherited from ResizableField< Data_T >
typedef WritableField< Data_T > | base
Protected Types inherited from FieldRes
typedef MatrixFieldMapping | default_mapping
Static Protected Attributes inherited from ResizableField< Data_T >
static TemplatedFieldType< ResizableField< Data_T > > | ms_classType

## Detailed Description

template<class Data_T>
class MACField< Data_T >

This subclass of Field implements a standard MAC field. Refer to your favorite fluid simulations book for an explanation.

The definition for u,v,w indexing used can be found on page 25 in Bridson - Fluid Simulation for Computer Graphics

Note
  This class can only be templated on Vec3 instances.

Definition at line 95 of file MACField.h.

## Member Typedef Documentation

## Ptr

template<class Data_T>

typedef boost::intrusive_ptr<MACField> MACField< Data_T >::Ptr

Definition at line 101 of file MACField.h.

## Vec

template<class Data_T>

typedef std::vector<Ptr> MACField< Data_T >::Vec

Definition at line 102 of file MACField.h.

## real_t

template<class Data_T>

typedef Data_T::BaseType MACField< Data_T >::real_t

This typedef is used to refer to the scalar component type of the vectors.

Definition at line 105 of file MACField.h.

## LinearInterp

template<class Data_T>

typedef LinearMACFieldInterp<Data_T> MACField< Data_T >::LinearInterp

Definition at line 107 of file MACField.h.

## CubicInterp

template<class Data_T>

typedef CubicMACFieldInterp<Data_T> MACField< Data_T >::CubicInterp

Definition at line 108 of file MACField.h.

## class_type

template<class Data_T>

typedef MACField<Data_T> MACField< Data_T >::class_type

Definition at line 112 of file MACField.h.

## base

template<class Data_T>

typedef ResizableField<Data_T> MACField< Data_T >::base

private

Definition at line 336 of file MACField.h.

## Constructor & Destructor Documentation

## MACField()

template<class Data_T>

MACField< Data_T >::MACField | ( |  | ) |

Constructs an empty buffer.

Definition at line 611 of file MACField.h.

: base()
{
}
MACField::base
ResizableField< Data_T > base
Definition MACField.h:336

Referenced by MACField< V3h >::clone().

## Member Function Documentation

## staticClassName()

template<class Data_T>

const char * MACField< Data_T >::staticClassName | ( |  | ) |

inline static

Definition at line 115 of file MACField.h.

{
return "MACField";
}

## staticClassType()

template<class Data_T>

const char * MACField< Data_T >::staticClassType | ( |  | ) |

inline static

Definition at line 120 of file MACField.h.

{
return MACField<Data_T>::ms_classType.name();
}
FieldBase::name
std::string name
Optional name of the field.
Definition Field.h:171
MACField
This subclass of Field implements a standard MAC field. Refer to your favorite fluid simulations book...
Definition MACField.h:96

## clear()

template<class Data_T>

void MACField< Data_T >::clear | ( | const Data_T & | value | ) |

inline virtual

Clears all the voxels in the storage.

Reimplemented from WritableField< Data_T >.

Definition at line 620 of file MACField.h.

{
std::fill(m_u.begin(), m_u.end(), value.x);
std::fill(m_v.begin(), m_v.end(), value.y);
std::fill(m_w.begin(), m_w.end(), value.z);
}
MACField::m_u
std::vector< real_t > m_u
U component storage.
Definition MACField.h:306
MACField::value
virtual Data_T value(int i, int j, int k) const
Definition MACField.h:630
MACField::m_v
std::vector< real_t > m_v
V component storage.
Definition MACField.h:308
MACField::m_w
std::vector< real_t > m_w
W component storage.
Definition MACField.h:310

References m_u, m_v, m_w, and value().

## value()

template<class Data_T>

Data_T MACField< Data_T >::value | ( | int | i,
|  | int | j,
|  | int | k ) const

virtual

Note
  This returns the voxel-centered interpolated value

Implements Field< Data_T >.

Definition at line 630 of file MACField.h.

{
return Data_T(uCenter(i, j, k), vCenter(i, j, k), wCenter(i, j, k));
}
MACField::vCenter
real_t vCenter(int i, int j, int k) const
Returns the v-component interpolated to the cell center.
Definition MACField.h:238
MACField::uCenter
real_t uCenter(int i, int j, int k) const
Returns the u-component interpolated to the cell center.
Definition MACField.h:233
MACField::wCenter
real_t wCenter(int i, int j, int k) const
Returns the w-component interpolated to the cell center.
Definition MACField.h:243

References uCenter(), vCenter(), and wCenter().

Referenced by clear(), convertMACToCellCentered(), and lvalue().

## memSize()

template<class Data_T>

long long int MACField< Data_T >::memSize | ( |  | ) | const

virtual

Returns the memory usage (in bytes).

Note
  This needs to be re-implemented for any subclass that adds data members. Those classes should also call their superclass and add the combined memory use.

Reimplemented from FieldRes.

Definition at line 638 of file MACField.h.

{
long long int superClassMemSize = base::memSize();
long long int vectorMemSize =
(m_u.capacity() + m_v.capacity() + m_w.capacity()) * sizeof(real_t);
return sizeof(*this) + vectorMemSize + superClassMemSize;
}
FieldRes::memSize
virtual long long int memSize() const
Returns the memory usage (in bytes).
Definition Field.h:279
MACField::real_t
Data_T::BaseType real_t
This typedef is used to refer to the scalar component type of the vectors.
Definition MACField.h:105

References m_u, m_v, m_w, and FieldRes::memSize().

## lvalue()

template<class Data_T>

Data_T & MACField< Data_T >::lvalue | ( | int | i,
|  | int | j,
|  | int | k )

virtual

This will return the appropriate interpolated value but setting that to something else does not change the MAC field.

Warning
  See description

Implements WritableField< Data_T >.

Definition at line 649 of file MACField.h.

{
m_dummy = value(i, j, k);
return m_dummy;
}
MACField::m_dummy
Data_T m_dummy
Dummy storage of a temp value that lvalue() can write to.
Definition MACField.h:326

References m_dummy, and value().

## u() [1/2]

template<class Data_T>

const MACField< Data_T >::real_t & MACField< Data_T >::u | ( | int | i,
|  | int | j,
|  | int | k ) const

inline

Read access to value on u-facing wall.

Note
  i coordinate represents i-1/2!

Definition at line 698 of file MACField.h.

{
assert (i >= base::m_dataWindow.min.x);
assert (i <= base::m_dataWindow.max.x + 1);
assert (j >= base::m_dataWindow.min.y);
assert (j <= base::m_dataWindow.max.y);
assert (k >= base::m_dataWindow.min.z);
assert (k <= base::m_dataWindow.max.z);
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return m_u[i + j * m_uSize.x + k * m_uSizeXY];
}
FieldRes::m_dataWindow
Box3i m_dataWindow
Defines the area where data is allocated. This should be treated as a closed (i.e....
Definition Field.h:310
MACField::m_uSizeXY
int m_uSizeXY
Size of xy slice for u component.
Definition MACField.h:315
MACField::m_uSize
V3i m_uSize
Size of U grid along each axis.
Definition MACField.h:313

References FieldRes::m_dataWindow, m_u, m_uSize, and m_uSizeXY.

Referenced by convertCellCenteredToMAC(), CubicMACFieldInterp< Data_T >::sample(), LinearMACFieldInterp< Data_T >::sample(), LinearMACFieldInterp< Data_T >::sample(), and MACField< V3h >::uCenter().

## u() [2/2]

template<class Data_T>

MACField< Data_T >::real_t & MACField< Data_T >::u | ( | int | i,
|  | int | j,
|  | int | k )

inline

Write access to value on u-facing wall.

Note
  i coordinate represents i-1/2!

Definition at line 717 of file MACField.h.

{
assert (i >= base::m_dataWindow.min.x);
assert (i <= base::m_dataWindow.max.x + 1);
assert (j >= base::m_dataWindow.min.y);
assert (j <= base::m_dataWindow.max.y);
assert (k >= base::m_dataWindow.min.z);
assert (k <= base::m_dataWindow.max.z);
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return m_u[i + j * m_uSize.x + k * m_uSizeXY];
}

References FieldRes::m_dataWindow, m_u, m_uSize, and m_uSizeXY.

## v() [1/2]

template<class Data_T>

const MACField< Data_T >::real_t & MACField< Data_T >::v | ( | int | i,
|  | int | j,
|  | int | k ) const

inline

Read access to value on v-facing wall.

Note
  j coordinate represents j-1/2!

Definition at line 736 of file MACField.h.

{
assert (i >= base::m_dataWindow.min.x);
assert (i <= base::m_dataWindow.max.x);
assert (j >= base::m_dataWindow.min.y);
assert (j <= base::m_dataWindow.max.y + 1);
assert (k >= base::m_dataWindow.min.z);
assert (k <= base::m_dataWindow.max.z);
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return m_v[i + j * m_vSize.x + k * m_vSizeXY];
}
MACField::m_vSize
V3i m_vSize
Size of V grid along each axis.
Definition MACField.h:317
MACField::m_vSizeXY
int m_vSizeXY
Size of xy slice for v component.
Definition MACField.h:319

References FieldRes::m_dataWindow, m_v, m_vSize, and m_vSizeXY.

Referenced by convertCellCenteredToMAC(), CubicMACFieldInterp< Data_T >::sample(), LinearMACFieldInterp< Data_T >::sample(), LinearMACFieldInterp< Data_T >::sample(), and MACField< V3h >::vCenter().

## v() [2/2]

template<class Data_T>

MACField< Data_T >::real_t & MACField< Data_T >::v | ( | int | i,
|  | int | j,
|  | int | k )

inline

Write access to value on v-facing wall.

Note
  j coordinate represents j-1/2!

Definition at line 755 of file MACField.h.

{
assert (i >= base::m_dataWindow.min.x);
assert (i <= base::m_dataWindow.max.x);
assert (j >= base::m_dataWindow.min.y);
assert (j <= base::m_dataWindow.max.y + 1);
assert (k >= base::m_dataWindow.min.z);
assert (k <= base::m_dataWindow.max.z);
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return m_v[i + j * m_vSize.x + k * m_vSizeXY];
}

References FieldRes::m_dataWindow, m_v, m_vSize, and m_vSizeXY.

## w() [1/2]

template<class Data_T>

const MACField< Data_T >::real_t & MACField< Data_T >::w | ( | int | i,
|  | int | j,
|  | int | k ) const

inline

Read access to value on w-facing wall.

Note
  k coordinate represents k-1/2!

Definition at line 774 of file MACField.h.

{
assert (i >= base::m_dataWindow.min.x);
assert (i <= base::m_dataWindow.max.x);
assert (j >= base::m_dataWindow.min.y);
assert (j <= base::m_dataWindow.max.y);
assert (k >= base::m_dataWindow.min.z);
assert (k <= base::m_dataWindow.max.z + 1);
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return m_w[i + j * m_wSize.x + k * m_wSizeXY];
}
MACField::m_wSizeXY
int m_wSizeXY
Size of xy slice for w component.
Definition MACField.h:323
MACField::m_wSize
V3i m_wSize
Size of W grid along each axis.
Definition MACField.h:321

References FieldRes::m_dataWindow, m_w, m_wSize, and m_wSizeXY.

Referenced by convertCellCenteredToMAC(), CubicMACFieldInterp< Data_T >::sample(), LinearMACFieldInterp< Data_T >::sample(), LinearMACFieldInterp< Data_T >::sample(), and MACField< V3h >::wCenter().

## w() [2/2]

template<class Data_T>

MACField< Data_T >::real_t & MACField< Data_T >::w | ( | int | i,
|  | int | j,
|  | int | k )

inline

Write access to value on w-facing wall.

Note
  k coordinate represents k-1/2!

Definition at line 793 of file MACField.h.

{
assert (i >= base::m_dataWindow.min.x);
assert (i <= base::m_dataWindow.max.x);
assert (j >= base::m_dataWindow.min.y);
assert (j <= base::m_dataWindow.max.y);
assert (k >= base::m_dataWindow.min.z);
assert (k <= base::m_dataWindow.max.z + 1);
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return m_w[i + j * m_wSize.x + k * m_wSizeXY];
}

References FieldRes::m_dataWindow, m_w, m_wSize, and m_wSizeXY.

## cbegin_comp() [1/2]

template<class Data_T>

MACField< Data_T >::const_mac_comp_iterator MACField< Data_T >::cbegin_comp | ( | MACComponent | comp | ) | const

Const iterator to first element. "cbegin" matches the tr1 c++ standard.

Definition at line 812 of file MACField.h.

{
using namespace MACFieldUtil;
if (FieldRes::dataResolution() == V3i(0))
return cend_comp(comp);
Box3i dataWindow =
makeDataWindowForComponent(base::m_dataWindow, comp);
return const_mac_comp_iterator(comp, *this, dataWindow, dataWindow.min);
}
V3i
Imath::V3i V3i
Definition SpiMathLib.h:71
FieldRes::dataWindow
const Box3i & dataWindow() const
Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field su...
Definition Field.h:253
MACField::const_mac_comp_iterator
Definition MACField.h:360
MACField::cend_comp
const_mac_comp_iterator cend_comp(MACComponent comp) const
Const iterator to first element. "cbegin" matches the tr1 c++ standard.
Definition MACField.h:839

References cend_comp(), FieldRes::dataResolution(), FieldRes::dataWindow(), FieldRes::m_dataWindow, and MACFieldUtil::makeDataWindowForComponent().

## cbegin_comp() [2/2]

template<class Data_T>

MACField< Data_T >::const_mac_comp_iterator MACField< Data_T >::cbegin_comp | ( | MACComponent | comp,
|  | const Box3i & | subset ) const

Const iterator to first element of specific subset.

Definition at line 826 of file MACField.h.

{
using namespace MACFieldUtil;
if (subset.isEmpty())
return cend_comp(comp, subset);
Box3i dataWindow = makeDataWindowForComponent(subset, comp);
return const_mac_comp_iterator(comp, *this, dataWindow, subset.min);
}

References cend_comp(), FieldRes::dataWindow(), and MACFieldUtil::makeDataWindowForComponent().

## cend_comp() [1/2]

template<class Data_T>

MACField< Data_T >::const_mac_comp_iterator MACField< Data_T >::cend_comp | ( | MACComponent | comp | ) | const

Const iterator to first element. "cbegin" matches the tr1 c++ standard.

Definition at line 839 of file MACField.h.

{
using namespace MACFieldUtil;
Box3i dataWindow =
makeDataWindowForComponent(base::m_dataWindow, comp);
return const_mac_comp_iterator(comp, *this, dataWindow,
V3i(dataWindow.min.x,
dataWindow.min.y,
dataWindow.max.z + 1));
}

References FieldRes::dataWindow(), FieldRes::m_dataWindow, and MACFieldUtil::makeDataWindowForComponent().

Referenced by cbegin_comp(), and cbegin_comp().

## cend_comp() [2/2]

template<class Data_T>

MACField< Data_T >::const_mac_comp_iterator MACField< Data_T >::cend_comp | ( | MACComponent | comp,
|  | const Box3i & | subset ) const

Const iterator to first element of specific subset.

Definition at line 854 of file MACField.h.

{
using namespace MACFieldUtil;
Box3i dataWindow = makeDataWindowForComponent(subset, comp);
return const_mac_comp_iterator(comp, *this, dataWindow,
V3i(dataWindow.min.x,
dataWindow.min.y,
dataWindow.max.z + 1));
}

References FieldRes::dataWindow(), and MACFieldUtil::makeDataWindowForComponent().

## begin_comp() [1/2]

template<class Data_T>

MACField< Data_T >::mac_comp_iterator MACField< Data_T >::begin_comp | ( | MACComponent | comp | ) |

Iterator to first element.

Definition at line 868 of file MACField.h.

{
using namespace MACFieldUtil;
if (FieldRes::dataResolution() == V3i(0))
return end_comp(comp);
Box3i dataWindow = makeDataWindowForComponent(base::m_dataWindow, comp);
return mac_comp_iterator(comp, *this, dataWindow, dataWindow.min);
}
MACField::mac_comp_iterator
Definition MACField.h:473
MACField::end_comp
mac_comp_iterator end_comp(MACComponent comp)
Iterator to first element.
Definition MACField.h:894

References FieldRes::dataResolution(), FieldRes::dataWindow(), end_comp(), FieldRes::m_dataWindow, and MACFieldUtil::makeDataWindowForComponent().

## begin_comp() [2/2]

template<class Data_T>

MACField< Data_T >::mac_comp_iterator MACField< Data_T >::begin_comp | ( | MACComponent | comp,
|  | const Box3i & | subset )

Iterator to first element of specific subset.

Definition at line 881 of file MACField.h.

{
using namespace MACFieldUtil;
if (subset.isEmpty())
return end_comp(comp, subset);
Box3i dataWindow = makeDataWindowForComponent(subset, comp);
return mac_comp_iterator(comp, *this, dataWindow, subset.min);
}

References FieldRes::dataWindow(), end_comp(), and MACFieldUtil::makeDataWindowForComponent().

## end_comp() [1/2]

template<class Data_T>

MACField< Data_T >::mac_comp_iterator MACField< Data_T >::end_comp | ( | MACComponent | comp | ) |

Iterator to first element.

Definition at line 894 of file MACField.h.

{
using namespace MACFieldUtil;
Box3i dataWindow = makeDataWindowForComponent(base::m_dataWindow, comp);
return mac_comp_iterator(comp, *this, dataWindow, V3i(dataWindow.min.x,
dataWindow.min.y,
dataWindow.max.z + 1));
}

References FieldRes::dataWindow(), FieldRes::m_dataWindow, and MACFieldUtil::makeDataWindowForComponent().

Referenced by begin_comp(), and begin_comp().

## end_comp() [2/2]

template<class Data_T>

MACField< Data_T >::mac_comp_iterator MACField< Data_T >::end_comp | ( | MACComponent | comp,
|  | const Box3i & | subset )

Iterator to first element of specific subset.

Definition at line 907 of file MACField.h.

{
using namespace MACFieldUtil;
Box3i dataWindow = makeDataWindowForComponent(subset, comp);
return mac_comp_iterator(comp, *this, dataWindow, V3i(dataWindow.min.x,
dataWindow.min.y,
dataWindow.max.z + 1));
}

References FieldRes::dataWindow(), and MACFieldUtil::makeDataWindowForComponent().

## uCenter()

template<class Data_T>

real_t MACField< Data_T >::uCenter | ( | int | i,
|  | int | j,
|  | int | k ) const

inline

Returns the u-component interpolated to the cell center.

Definition at line 233 of file MACField.h.

{
return (u(i, j, k) + u(i + 1, j, k)) * 0.5;
}
MACField::u
const real_t & u(int i, int j, int k) const
Read access to value on u-facing wall.
Definition MACField.h:698

Referenced by value().

## vCenter()

template<class Data_T>

real_t MACField< Data_T >::vCenter | ( | int | i,
|  | int | j,
|  | int | k ) const

inline

Returns the v-component interpolated to the cell center.

Definition at line 238 of file MACField.h.

{
return (v(i, j, k) + v(i, j + 1, k)) * 0.5;
}
MACField::v
const real_t & v(int i, int j, int k) const
Read access to value on v-facing wall.
Definition MACField.h:736

Referenced by value().

## wCenter()

template<class Data_T>

real_t MACField< Data_T >::wCenter | ( | int | i,
|  | int | j,
|  | int | k ) const

inline

Returns the w-component interpolated to the cell center.

Definition at line 243 of file MACField.h.

{
return (w(i, j, k) + w(i, j, k + 1)) * 0.5;
}
MACField::w
const real_t & w(int i, int j, int k) const
Read access to value on w-facing wall.
Definition MACField.h:774

Referenced by value().

## copyMAC()

template<class Data_T>

void MACField< Data_T >::copyMAC | ( | typename MACField< Data_T >::Ptr | other | ) |

inline

TEMP: Copies the MAC field data from another MAC field. This should be re-implemented using proper iterators over the field.

Definition at line 250 of file MACField.h.

{
matchDefinition(other);
std::copy(other->m_u.begin(), other->m_u.end(), m_u.begin());
std::copy(other->m_v.begin(), other->m_v.end(), m_v.begin());
std::copy(other->m_w.begin(), other->m_w.end(), m_w.begin());
}
ResizableField::matchDefinition
void matchDefinition(FieldRes::Ptr fieldToMatch)
Sets up this field so that resolution and mapping matches the other.
Definition Field.h:1003

## getComponentSize()

template<class Data_T>

V3i MACField< Data_T >::getComponentSize | ( |  | ) | const

inline

Returns the size of U,V,W components.

Definition at line 261 of file MACField.h.

{ return V3i((int)m_u.size(), (int)m_v.size(), (int)m_w.size()); }

## clone()

template<class Data_T>

virtual FieldBase::Ptr MACField< Data_T >::clone | ( |  | ) | const

inline virtual

Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it.

Implements FieldBase.

Definition at line 271 of file MACField.h.

{ return Ptr(new MACField(*this)); }
MACField::MACField
MACField()
Constructs an empty buffer.
Definition MACField.h:611
MACField::Ptr
boost::intrusive_ptr< MACField > Ptr
Definition MACField.h:101

## sizeChanged()

template<class Data_T>

void MACField< Data_T >::sizeChanged | ( |  | ) |

protected virtual

Subclasses should re-implement this if they need to perform memory allocations, etc. every time the size of the storage changes.

Note
  Make sure to call the base class version in subclasses!

Reimplemented from ResizableField< Data_T >.

Definition at line 658 of file MACField.h.

{
// Call base class
base::sizeChanged();
V3i baseSize =
base::m_dataWindow.max - base::m_dataWindow.min + V3i(1);
if (std::min(std::min(baseSize.x, baseSize.y), baseSize.z) < 0)
throw Exc::ResizeException("Attempt to resize ResizableField object "
"using negative size. Data window was: " +
boost::lexical_cast<std::string>(baseSize));
// Calculate the size for each component of the MAC field
m_uSize = baseSize + V3i(1, 0, 0);
m_vSize = baseSize + V3i(0, 1, 0);
m_wSize = baseSize + V3i(0, 0, 1);
// Calculate the size of each z slice
m_uSizeXY = m_uSize.x * m_uSize.y;
m_vSizeXY = m_vSize.x * m_vSize.y;
m_wSizeXY = m_wSize.x * m_wSize.y;
// Allocate memory
try {
m_u.resize(m_uSize.x * m_uSize.y * m_uSize.z);
m_v.resize(m_vSize.x * m_vSize.y * m_vSize.z);
m_w.resize(m_wSize.x * m_wSize.y * m_wSize.z);
}
catch (std::bad_alloc &) {
throw Exc::MemoryException("Couldn't allocate MACField of size " +
boost::lexical_cast<std::string>(baseSize));
}
}
ResizableField::sizeChanged
virtual void sizeChanged()
Subclasses should re-implement this if they need to perform memory allocations, etc....
Definition Field.h:901

References FieldRes::m_dataWindow, m_u, m_uSize, m_uSizeXY, m_v, m_vSize, m_vSizeXY, m_w, m_wSize, m_wSizeXY, and ResizableField< Data_T >::sizeChanged().

## uPtr() [1/2]

template<class Data_T>

const MACField< Data_T >::real_t * MACField< Data_T >::uPtr | ( | int | i,
|  | int | j,
|  | int | k ) const

inline protected

Direct access to value on u-facing wall.

Note
  i coordinate represents i-1/2!

Definition at line 920 of file MACField.h.

{
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return &m_u[i + j * m_uSize.x + k * m_uSizeXY];
}

References FieldRes::m_dataWindow, m_u, m_uSize, and m_uSizeXY.

## uPtr() [2/2]

template<class Data_T>

MACField< Data_T >::real_t * MACField< Data_T >::uPtr | ( | int | i,
|  | int | j,
|  | int | k )

inline protected

Direct access to value on u-facing wall.

Note
  i coordinate represents i-1/2!

Definition at line 933 of file MACField.h.

{
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return &m_u[i + j * m_uSize.x + k * m_uSizeXY];
}

References FieldRes::m_dataWindow, m_u, m_uSize, and m_uSizeXY.

## vPtr() [1/2]

template<class Data_T>

const MACField< Data_T >::real_t * MACField< Data_T >::vPtr | ( | int | i,
|  | int | j,
|  | int | k ) const

inline protected

Direct access to value on v-facing wall.

Note
  j coordinate represents j-1/2!

Definition at line 946 of file MACField.h.

{
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return &m_v[i + j * m_vSize.x + k * m_vSizeXY];
}

References FieldRes::m_dataWindow, m_v, m_vSize, and m_vSizeXY.

## vPtr() [2/2]

template<class Data_T>

MACField< Data_T >::real_t * MACField< Data_T >::vPtr | ( | int | i,
|  | int | j,
|  | int | k )

inline protected

Direct access to value on v-facing wall.

Note
  j coordinate represents j-1/2!

Definition at line 959 of file MACField.h.

{
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return &m_v[i + j * m_vSize.x + k * m_vSizeXY];
}

References FieldRes::m_dataWindow, m_v, m_vSize, and m_vSizeXY.

## wPtr() [1/2]

template<class Data_T>

const MACField< Data_T >::real_t * MACField< Data_T >::wPtr | ( | int | i,
|  | int | j,
|  | int | k ) const

inline protected

Direct access to value on w-facing wall.

Note
  k coordinate represents k-1/2!

Definition at line 972 of file MACField.h.

{
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return &m_w[i + j * m_wSize.x + k * m_wSizeXY];
}

References FieldRes::m_dataWindow, m_w, m_wSize, and m_wSizeXY.

## wPtr() [2/2]

template<class Data_T>

MACField< Data_T >::real_t * MACField< Data_T >::wPtr | ( | int | i,
|  | int | j,
|  | int | k )

inline protected

Direct access to value on w-facing wall.

Note
  k coordinate represents k-1/2!

Definition at line 985 of file MACField.h.

{
// Add crop window offset
i -= base::m_dataWindow.min.x;
j -= base::m_dataWindow.min.y;
k -= base::m_dataWindow.min.z;
return &m_w[i + j * m_wSize.x + k * m_wSizeXY];
}

References FieldRes::m_dataWindow, m_w, m_wSize, and m_wSizeXY.

## Member Data Documentation

## DEFINE_FIELD_RTTI_CONCRETE_CLASS

template<class Data_T>

MACField< Data_T >::DEFINE_FIELD_RTTI_CONCRETE_CLASS

Definition at line 113 of file MACField.h.

## FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION

template<class Data_T>

MACField< Data_T >::FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION

Definition at line 269 of file MACField.h.

## m_u

template<class Data_T>

std::vector<real_t> MACField< Data_T >::m_u

protected

U component storage.

Definition at line 306 of file MACField.h.

Referenced by clear(), memSize(), sizeChanged(), u(), u(), uPtr(), and uPtr().

## m_v

template<class Data_T>

std::vector<real_t> MACField< Data_T >::m_v

protected

V component storage.

Definition at line 308 of file MACField.h.

Referenced by clear(), memSize(), sizeChanged(), v(), v(), vPtr(), and vPtr().

## m_w

template<class Data_T>

std::vector<real_t> MACField< Data_T >::m_w

protected

W component storage.

Definition at line 310 of file MACField.h.

Referenced by clear(), memSize(), sizeChanged(), w(), w(), wPtr(), and wPtr().

## m_uSize

template<class Data_T>

V3i MACField< Data_T >::m_uSize

protected

Size of U grid along each axis.

Definition at line 313 of file MACField.h.

Referenced by sizeChanged(), u(), u(), uPtr(), and uPtr().

## m_uSizeXY

template<class Data_T>

int MACField< Data_T >::m_uSizeXY

protected

Size of xy slice for u component.

Definition at line 315 of file MACField.h.

Referenced by sizeChanged(), u(), u(), uPtr(), and uPtr().

## m_vSize

template<class Data_T>

V3i MACField< Data_T >::m_vSize

protected

Size of V grid along each axis.

Definition at line 317 of file MACField.h.

Referenced by sizeChanged(), v(), v(), vPtr(), and vPtr().

## m_vSizeXY

template<class Data_T>

int MACField< Data_T >::m_vSizeXY

protected

Size of xy slice for v component.

Definition at line 319 of file MACField.h.

Referenced by sizeChanged(), v(), v(), vPtr(), and vPtr().

## m_wSize

template<class Data_T>

V3i MACField< Data_T >::m_wSize

protected

Size of W grid along each axis.

Definition at line 321 of file MACField.h.

Referenced by sizeChanged(), w(), w(), wPtr(), and wPtr().

## m_wSizeXY

template<class Data_T>

int MACField< Data_T >::m_wSizeXY

protected

Size of xy slice for w component.

Definition at line 323 of file MACField.h.

Referenced by sizeChanged(), w(), w(), wPtr(), and wPtr().

## m_dummy

template<class Data_T>

Data_T MACField< Data_T >::m_dummy

mutable protected

Dummy storage of a temp value that lvalue() can write to.

Definition at line 326 of file MACField.h.

Referenced by lvalue().

## ms_classType

template<class Data_T>

TemplatedFieldType<MACField<Data_T> > MACField< Data_T >::ms_classType

static private

Definition at line 332 of file MACField.h.

Referenced by MACField< V3h >::staticClassType().

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

- export/MACField.h