Changeset 914
- Timestamp:
- 08/03/16 18:04:57 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/grid.cpp
r895 r914 543 543 size_t elementSize; 544 544 size_t elementGlobalSize = 1; 545 if (2 == axis_domain_order(idx)) 545 if (2 == axis_domain_order(idx)) // This is domain 546 546 { 547 547 elementSize = domList[domainIdx]->i_index.numElements(); … … 554 554 ++domainIdx; 555 555 } 556 else if (1 == axis_domain_order(idx)) 556 else if (1 == axis_domain_order(idx)) // This is axis 557 557 { 558 558 elementSize = axisList[axisIdx]->index.numElements(); … … 565 565 ++axisIdx; 566 566 } 567 else 567 else // Of course, this is scalar 568 568 { 569 569 globalIndexElement[idx].resize(1); … … 576 576 std::vector<std::vector<bool> > elementOnServer(nbElement, std::vector<bool>(serverSize, false)); 577 577 std::vector<boost::unordered_map<int,std::vector<size_t> > > globalElementIndexOnServer(nbElement); 578 CArray<int,1> nbIndexOnServer(serverSize); // Number of distributed global index held by each client for each server 579 // Number of temporary distributed global index held by each client for each server 580 // We have this variable for the case of non-distributed element (often axis) to check the duplicate server rank 581 CArray<int,1> nbIndexOnServerTmp(serverSize); 578 582 for (int idx = 0; idx < nbElement; ++idx) 579 583 { 580 std::vector<int> nbIndexOnServer(serverSize,0);584 nbIndexOnServer = 0; 581 585 const boost::unordered_map<size_t,std::vector<int> >& indexServerElement = indexServerOnElement[idx]; 582 586 const CArray<size_t,1>& globalIndexElementOnClient = globalIndexElement[idx]; … … 589 593 { 590 594 const std::vector<int>& tmp = it->second; 595 nbIndexOnServerTmp = 0; 591 596 for (int i = 0; i < tmp.size(); ++i) 592 597 { 593 ++nbIndexOnServer[tmp[i]];598 if (0 == nbIndexOnServerTmp(tmp[i])) ++nbIndexOnServerTmp(tmp[i]); 594 599 } 600 nbIndexOnServer += nbIndexOnServerTmp; 595 601 } 596 602 597 603 for (int i = 0; i < serverSize; ++i) 598 604 { 599 if (0 != nbIndexOnServer [i])605 if (0 != nbIndexOnServer(i)) 600 606 { 601 globalElementIndexOnServer[idx][i].resize(nbIndexOnServer[i]); 602 nbIndexOnServer[i] = 0; 607 globalElementIndexOnServer[idx][i].resize(nbIndexOnServer(i)); 603 608 elementOnServer[idx][i] = true; 604 609 } 605 610 } 606 611 612 nbIndexOnServer = 0; 607 613 for (it = itb; it != ite; ++it) 608 614 { 609 615 const std::vector<int>& tmp = it->second; 616 nbIndexOnServerTmp = 0; 610 617 for (int i = 0; i < tmp.size(); ++i) 611 618 { 612 globalElementIndexOnServer[idx][tmp[i]][nbIndexOnServer[tmp[i]]] = it->first; 613 ++nbIndexOnServer[tmp[i]]; 619 if (0 == nbIndexOnServerTmp(tmp[i])) 620 { 621 globalElementIndexOnServer[idx][tmp[i]][nbIndexOnServer(tmp[i])] = it->first; 622 ++nbIndexOnServerTmp(tmp[i]); 623 } 614 624 } 625 nbIndexOnServer += nbIndexOnServerTmp; 615 626 } 616 627 } … … 1724 1735 else 1725 1736 { 1726 // int ssize = axis_domain_order.numElements();1727 // for (int i = 0; i < ssize; ++i)1728 // if (axis_domain_order(i) != (transformGridSrc->axis_domain_order)(i))1729 // ERROR("CGrid::transformGrid(CGrid* transformGridSrc)",1730 // << "Grids " << this->getId() << " and " << transformGridSrc->getId()1731 // << " don't have elements in the same order");1732 1737 } 1733 1738 … … 1742 1747 bool CGrid::hasTransform() 1743 1748 { 1749 if (hasTransform_) return hasTransform_; 1750 1751 std::vector<CDomain*> domList = getDomains(); 1752 std::vector<CAxis*> axisList = getAxis(); 1753 std::vector<CScalar*> scalarList = getScalars(); 1754 1755 for (int idx = 0; idx < domList.size(); ++idx) hasTransform_ |= domList[idx]->hasTransformation(); 1756 for (int idx = 0; idx < axisList.size(); ++idx) hasTransform_ |= axisList[idx]->hasTransformation(); 1757 for (int idx = 0; idx < scalarList.size(); ++idx) hasTransform_ |= scalarList[idx]->hasTransformation(); 1758 1744 1759 return hasTransform_; 1745 1760 }
Note: See TracChangeset
for help on using the changeset viewer.