41 ArrayMap::const_iterator pos =
_arrayMap.find(i);
48 e <<
"MultiField::operator[] No array found";
55 ArrayMap::const_iterator pos =
_arrayMap.find(i);
62 e <<
"MultiField::operator[] No array found";
69 ArrayMap::const_iterator pos =
_arrayMap.find(i);
76 e <<
"MultiField::operator[] No array found";
80 shared_ptr<IContainer>
87 shared_ptr<IContainer> aCloneI(myArray.
newClone());
88 shared_ptr<ArrayBase> aClone(dynamic_pointer_cast<ArrayBase>(aCloneI));
100 shared_ptr<IContainer>
107 shared_ptr<ArrayBase> aCopy(dynamic_pointer_cast<ArrayBase>(myArray.
newCopy()));
130 foreach(ArrayMap::value_type& pos,
_arrayMap)
133 const ArrayBase& oArray = ofield[pos.first];
169 const ArrayBase& x = xMF[_arrayIndices[i]];
171 myArray.
saxpy(alpha,x);
183 const ArrayBase& x = xMF[_arrayIndices[i]];
215 shared_ptr<MultiFieldReduction>
226 shared_ptr<MultiFieldReduction> r(c->reduceSum());
230 shared_ptr<MultiFieldReduction>
233 shared_ptr<MultiField> dotpField(
new MultiField());
240 dotpField->
addArray(_arrayIndices[i],
244 shared_ptr<MultiFieldReduction> r(dotpField->reduceSum());
248 shared_ptr<MultiFieldReduction>
257 if (sum->hasArray(fIndex))
258 (*sum)[fIndex] += myArray;
260 sum->addArray(fIndex,dynamic_pointer_cast<ArrayBase>(myArray.
newCopy()));
288 for(ArrayMap::iterator pos=
_arrayMap.begin();
292 int currentValue = pos->second;
293 if (currentValue == loc)
294 cerr <<
"Error in removing array" << endl;
295 else if (currentValue > loc)
296 pos->second = currentValue-1;
303 shared_ptr<MultiField>
318 foreach(
const ArrayMap::value_type& pos, other.
_arrayMap)
333 foreach(
const StorageSite::ScatterMap::value_type& mpos, scatterMap)
345 const Array<int>& fromIndices = *(mpos.second);
351 thisArray.
scatter(ghostArray,fromIndices);
366 foreach(
const StorageSite::ScatterMap::value_type& mpos, scatterMap)
373 const Array<int>& fromIndices = *(mpos.second);
379 thisArray.
scatter(ghostArray,fromIndices);
394 foreach(
const StorageSite::GatherMap::value_type& mpos, gatherMap)
419 foreach(
const StorageSite::GatherMap::value_type& mpos, gatherMap)
444 foreach(
const StorageSite::GatherMap::value_type& mpos, gatherMap)
454 thisArray.
gather(ghostArray,toIndices);
470 foreach(
const StorageSite::GatherMap::value_type& mpos, gatherMap)
480 thisArray.
gather(ghostArray,toIndices);
507 foreach(
const StorageSite::ScatterMap::value_type& mpos, scatterMap){
514 if ( to_where != -1 ){
515 int mpi_tag = oSite.
getTag();
516 request_send[sendIndx++] =
517 MPI::COMM_WORLD.Isend( sendArray.
getData(), sendArray.
getDataSize(), MPI::BYTE, to_where, mpi_tag );
524 foreach(
const StorageSite::GatherMap::value_type& mpos, gatherMap){
530 if ( from_where != -1 ){
531 int mpi_tag = oSite.
getTag();
532 request_recv[recvIndx++] =
533 MPI::COMM_WORLD.Irecv( recvArray.
getData(), recvArray.
getDataSize(), MPI::BYTE, from_where, mpi_tag );
540 MPI::Request::Waitall( count, request_recv );
541 MPI::Request::Waitall( count, request_send );
561 foreach(
const StorageSite::ScatterMap::value_type& mpos, scatterMap){
588 MPI::Request request_send[ countScatter ];
589 MPI::Request request_recv[ countGather ];
597 foreach(
const StorageSite::ScatterMap::value_type& mpos, scatterMap){
604 if ( to_where != -1 ){
605 int mpi_tag = oSite.
getTag();
606 request_send[sendIndx++] =
607 MPI::COMM_WORLD.Isend( sendArray.
getData(), sendArray.
getDataSize(), MPI::BYTE, to_where, mpi_tag );
613 foreach(
const StorageSite::GatherMap::value_type& mpos, gatherMap){
619 if ( from_where != -1 ){
620 int mpi_tag = oSite.
getTag();
621 request_recv[recvIndx++] =
622 MPI::COMM_WORLD.Irecv( recvArray.
getData(), recvArray.
getDataSize(), MPI::BYTE, from_where, mpi_tag );
629 MPI::Request::Waitall( countGather, request_recv );
630 MPI::Request::Waitall( countScatter , request_send );
649 foreach(
const StorageSite::ScatterMap::value_type& mpos, scatterMap){
671 foreach(
const StorageSite::GatherMap::value_type& mpos, gatherMap){
virtual shared_ptr< IContainer > newCopy() const
virtual int getDataSize() const =0
int get_request_size_scatter_level1()
virtual int getLength() const =0
void createSyncGatherArraysLevel1(const ArrayIndex &i)
virtual void scatter(ArrayBase &other_, const ArrayBase &indices, const int offset=0) const =0
MultiField & saxpy(const MultiFieldReduction &alphaMF, const MultiField &xMF)
bool hasArray(const ArrayIndex &) const
virtual ArrayBase & msaxpy(const ArrayBase &alphabase, const ArrayBase &xbase)=0
const GatherMap & getGatherMapLevel1() const
const ScatterMap & getScatterMapLevel1() const
void syncGather(const ArrayIndex &i)
virtual shared_ptr< ArrayBase > getOneNorm(const int lengthToUse) const =0
shared_ptr< ArrayBase > getArrayPtr(const ArrayIndex &)
virtual shared_ptr< ArrayBase > dotWith(const ArrayBase &a, const int lengthToUse) const =0
shared_ptr< MultiField > extract(const ArrayIndexList &indices)
MultiField & msaxpy(const MultiFieldReduction &alphaMF, const MultiField &xMF)
GhostArrayMap _ghostArrays
void syncScatterLevel1(const ArrayIndex &i)
virtual MultiField & operator-=(const MultiField &o)
virtual MultiField & operator/=(const MultiFieldReduction &alpha)
shared_ptr< MultiFieldReduction > reduceSum() const
void syncGatherLevel1(const ArrayIndex &i)
pair< const Field *, const StorageSite * > ArrayIndex
pair< ArrayIndex, ArrayIndex > EntryIndex
int getGatherProcID() const
virtual ArrayBase & saxpy(const ArrayBase &alphabase, const ArrayBase &xbase)=0
virtual void copyFrom(const IContainer &oc)
GhostArrayMap _ghostArraysLevel1
shared_ptr< MultiFieldReduction > getOneNorm() const
void removeArray(const ArrayIndex &aIndex)
vector< ArrayIndex > ArrayIndexList
int getCountLevel1() const
const ScatterMap & getScatterMap() const
map< const StorageSite *, shared_ptr< Array< int > > > ScatterMap
ArrayIndexList _arrayIndices
virtual shared_ptr< ArrayBase > newSizedClone(const int size) const =0
virtual MultiField & operator+=(const MultiField &o)
const GatherMap & getGatherMap() const
void merge(const MultiField &other)
virtual void * getData() const =0
virtual void gather(const ArrayBase &other_, const ArrayBase &indices, const int offset=0)=0
const ArrayBase & operator[](const ArrayIndex &) const
int get_request_size_gather_level1()
map< const StorageSite *, shared_ptr< Array< int > > > GatherMap
void addArray(const ArrayIndex &aIndex, shared_ptr< ArrayBase > a)
void syncScatter(const ArrayIndex &i)
virtual void copyFrom(const IContainer &a)=0
void createSyncGatherArrays(const ArrayIndex &i)
shared_ptr< MultiFieldReduction > dotWith(const MultiField &ofield) const
virtual MultiField & operator*=(const MultiFieldReduction &alpha)
virtual shared_ptr< IContainer > newClone() const
virtual shared_ptr< IContainer > newClone() const =0
virtual shared_ptr< IContainer > newCopy() const =0