29 ArrayMap::const_iterator pos =
_arrays.find(&i);
36 e <<
"MultiFieldReduction::operator[] No array found";
43 ArrayMap::const_iterator pos =
_arrays.find(&i);
50 e <<
"MultiFieldReduction::operator[] No array found";
57 ArrayMap::const_iterator pos =
_arrays.find(&i);
64 e <<
"MultiFieldReduction::operator[] No array found";
71 for(ArrayMap::const_iterator pos=
_arrays.begin();
76 const ArrayBase& oArray = ofield[*pos->first];
85 foreach(
const ArrayMap::value_type& pos,
_arrays)
87 if (! (*pos.second < tolerance))
return false;
97 foreach(
const ArrayMap::value_type& pos,
_arrays)
99 shared_ptr<ArrayBase> aptr = dynamic_pointer_cast<
ArrayBase>(pos.second->newCopy());
100 *aptr *= o[*pos.first];
111 foreach(
const ArrayMap::value_type& pos,
_arrays)
113 shared_ptr<ArrayBase> aptr = dynamic_pointer_cast<
ArrayBase>(pos.second->newCopy());
115 r->addArray(*pos.first,aptr);
125 foreach(
const ArrayMap::value_type& pos,
_arrays)
127 shared_ptr<ArrayBase> aptr = -(*pos.second);
128 r->addArray(*pos.first,aptr);
138 foreach(
const ArrayMap::value_type& pos,
_arrays)
140 shared_ptr<ArrayBase> aptr = dynamic_pointer_cast<
ArrayBase>(pos.second->newCopy());
142 r->addArray(*pos.first,aptr);
150 foreach(
const ArrayMap::value_type& pos,
_arrays)
152 pos.second->setMax(o[*pos.first]);
159 foreach(
const ArrayMap::value_type& pos,
_arrays)
161 pos.second->limit(min,max);
168 shared_ptr<ArrayBase> sum;
170 foreach(
const ArrayMap::value_type& pos,
_arrays)
172 shared_ptr<ArrayBase> thisSum = pos.second->reduceSum();
179 foreach(
const ArrayMap::value_type& pos,
_arrays)
181 pos.second->setSum(*sum);
204 foreach(
const ArrayMap::value_type& pos,
_arrays)
206 os << pos.first->getName() <<
" : ";
207 pos.second->print(os);
217 ArrayMap::const_iterator it;
220 int count = myArray.
getDataSize() /
sizeof(double);
221 MPI::COMM_WORLD.Allreduce( MPI::IN_PLACE, myArray.
getData(), count, MPI::DOUBLE, MPI::SUM);
virtual int getDataSize() const =0
void setMax(const MultiFieldReduction &o)
ArrayBase & operator[](const Field &)
void addArray(const Field &aIndex, shared_ptr< ArrayBase > a)
virtual ~MultiFieldReduction()
shared_ptr< MultiFieldReduction > operator/(const MultiFieldReduction &o)
shared_ptr< MultiFieldReduction > normalize(const MultiFieldReduction &o)
double max(double x, double y)
virtual ArrayBase & safeDivide(const ArrayBase &a)=0
MultiFieldReduction & operator+=(const MultiFieldReduction &ofield)
shared_ptr< ArrayBase > getArrayPtr(const Field &)
bool hasArray(const Field &aIndex) const
void limit(const double min, const double max)
virtual ArrayBase & normalize(const ArrayBase &a)=0
void print(ostream &os) const
shared_ptr< MultiFieldReduction > operator*(const MultiFieldReduction &o)
virtual void * getData() const =0
shared_ptr< MultiFieldReduction > MFRPtr
bool operator<(const double tolerance) const
double min(double x, double y)
shared_ptr< MultiFieldReduction > operator-() const