Last change
on this file since 2236 was
1936,
checked in by ymipsl, 4 years ago
|
XIOS coupling branch :
Blitz array resizeAndPreserve crash when size=0 => use resize instead
YM
|
-
Property svn:eol-style set to
native
-
Property svn:executable set to
*
|
File size:
1.2 KB
|
Rev | Line | |
---|
[1918] | 1 | #include "element_view.hpp" |
---|
| 2 | #include "element.hpp" |
---|
| 3 | #include "distributed_view.hpp" |
---|
| 4 | |
---|
| 5 | namespace xios |
---|
| 6 | { |
---|
| 7 | |
---|
| 8 | CDistributedView::CDistributedView(CDistributedElement* parent, CElementView::type, const std::map<int,CArray<int,1>>& indexView) |
---|
| 9 | : globalIndex_(parent->globalIndex_), globalSize_(parent->globalSize_), localSize_(parent->localSize_) |
---|
| 10 | { |
---|
[1930] | 11 | for(auto& index : indexView) |
---|
[1918] | 12 | { |
---|
| 13 | index_[index.first].reference(index.second.copy()) ; |
---|
| 14 | size_[index.first] = index.second.numElements() ; |
---|
| 15 | } |
---|
| 16 | } |
---|
| 17 | |
---|
[1930] | 18 | CDistributedView::CDistributedView(CDistributedElement* parent, CElementView::type, const std::map<int,CArray<bool,1>>& maskView) |
---|
| 19 | : globalIndex_(parent->globalIndex_), globalSize_(parent->globalSize_), localSize_(parent->localSize_) |
---|
| 20 | { |
---|
| 21 | for(auto& it : maskView) |
---|
| 22 | { |
---|
| 23 | int rank = it.first ; |
---|
| 24 | auto& mask = it.second ; |
---|
| 25 | int size = mask.numElements() ; |
---|
| 26 | auto& index = index_[rank] ; |
---|
| 27 | index.resize(size) ; |
---|
| 28 | int pos=0 ; |
---|
| 29 | for(int i=0 ; i < size ; i++) |
---|
| 30 | if (mask(i)) { index(pos) = i ; pos++ ; } |
---|
[1936] | 31 | if (pos==0) index.resize(pos) ; |
---|
| 32 | else index.resizeAndPreserve(pos) ; |
---|
[1930] | 33 | size_[rank] = pos ; |
---|
| 34 | } |
---|
| 35 | } |
---|
| 36 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.