45#ifndef _INCLUDED_Field3D_MACFieldUtil_H_
46#define _INCLUDED_Field3D_MACFieldUtil_H_
61template <
class Data_T,
class Field_T>
63 typename Field_T::Ptr
cc);
68template <
class Field_T,
class Data_T>
77template <
class Data_T,
class Field_T>
79 typename Field_T::Ptr
cc)
82 if (
cc->extents().min !=
mac->extents().min ||
83 cc->extents().max !=
mac->extents().max ||
84 cc->dataWindow().min !=
mac->dataWindow().min ||
85 cc->dataWindow().max !=
mac->dataWindow().max ) {
86 cc->setSize(
mac->extents(),
mac->dataWindow());
90 if (!
cc->mapping()->isIdentical(
mac->mapping())) {
91 cc->setMapping(
mac->mapping());
115 typename Field_T::iterator
i =
cc->begin();
116 typename Field_T::iterator end =
cc->end();
119 for (;
i != end; ++
i) {
123 for (;
i != end; ++
i) {
124 *
i =
mac->value(
i.x,
i.y,
i.z);
131template <
class Field_T,
class Data_T>
136 if (
mac->extents().min !=
cc->extents().min ||
137 mac->extents().max !=
cc->extents().max ||
138 mac->dataWindow().min !=
cc->dataWindow().min ||
139 mac->dataWindow().max !=
cc->dataWindow().max ) {
140 mac->setSize(
cc->extents(),
cc->dataWindow());
144 if (!
mac->mapping()->isIdentical(
cc->mapping())) {
145 mac->setMapping(
cc->mapping());
160 M44d localToWorld = mapping->localToWorld();
173 typename Field_T::Ptr
src =
cc;
178 typename Field_T::Ptr(
new Field_T);
181 typename Field_T::const_iterator
iIn =
cc->cbegin();
182 typename Field_T::const_iterator
endIn =
cc->cend();
192 for (
int k = data.min.z;
k <= data.max.z;
k++) {
193 for (
int j = data.min.y;
j <= data.max.y;
j++) {
194 mac->u(data.min.x,
j,
k) =
src->value(data.min.x,
j,
k).x;
195 mac->u(data.max.x + 1,
j,
k) =
src->value(data.max.x,
j,
k).x;
200 for (
int k = data.min.z;
k <= data.max.z;
k++) {
201 for (
int i = data.min.x;
i <= data.max.x;
i++) {
202 mac->v(
i, data.min.y,
k) =
src->value(
i, data.min.y,
k).y;
203 mac->v(
i, data.max.y + 1,
k) =
src->value(
i, data.max.y,
k).y;
208 for (
int j = data.min.y;
j <= data.max.y;
j++) {
209 for (
int i = data.min.x;
i <= data.max.x;
i++) {
210 mac->w(
i,
j, data.min.z) =
src->value(
i,
j, data.min.z).z;
211 mac->w(
i,
j, data.max.z + 1) =
src->value(
i,
j, data.max.z).z;
216 for (
int k = data.min.z;
k <= data.max.z; ++
k) {
217 for (
int j = data.min.y;
j <= data.max.y; ++
j) {
218 for (
int i = data.min.x + 1;
i <= data.max.x; ++
i) {
220 (
src->value(
i,
j,
k).x +
src->value(
i - 1,
j,
k).x) * 0.5;
226 for (
int k = data.min.z;
k <= data.max.z; ++
k) {
227 for (
int j = data.min.y + 1;
j <= data.max.y; ++
j) {
228 for (
int i = data.min.x;
i <= data.max.x; ++
i) {
230 (
src->value(
i,
j,
k).y +
src->value(
i,
j - 1,
k).y) * 0.5;
236 for (
int k = data.min.z + 1;
k <= data.max.z; ++
k) {
237 for (
int j = data.min.y;
j <= data.max.y; ++
j) {
238 for (
int i = data.min.x;
i <= data.max.x; ++
i) {
240 (
src->value(
i,
j,
k).z +
src->value(
i,
j,
k - 1).z) * 0.5;
FIELD3D_NAMESPACE_OPEN void convertMACToCellCentered(typename MACField< Data_T >::Ptr mac, typename Field_T::Ptr cc)
Converts the MAC field to a cell-centered field.
void convertCellCenteredToMAC(typename Field_T::Ptr cc, typename MACField< Data_T >::Ptr mac)
Converts the cell-centered field to a MAC field.
Contains the MACField class.
#define FIELD3D_EXTRACT_SHRT
boost::intrusive_ptr< MACField > Ptr
boost::intrusive_ptr< MatrixFieldMapping > Ptr
Convenience typedef.
#define FIELD3D_NAMESPACE_HEADER_CLOSE