Changeset 1144 for XIOS/dev/dev_olga/src/distribution_client.cpp
- Timestamp:
- 05/23/17 16:32:26 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/distribution_client.cpp
r1129 r1144 10 10 11 11 namespace xios { 12 13 CDistributionClient::CDistributionClient(int rank, CGrid* grid, const GlobalLocalDataMap& globalLocalIndex)14 : CDistribution(rank, 0)15 , axisDomainOrder_()16 , nLocal_(), nGlob_(), nBeginLocal_(), nBeginGlobal_(),nZoomBegin_(), nZoomEnd_()17 , dataNIndex_(), dataDims_(), dataBegin_(), dataIndex_(), domainMasks_(), axisMasks_()18 , gridMask_(), indexMap_()19 , isDataDistributed_(true), axisNum_(0), domainNum_(0)20 , localDataIndex_(), localMaskIndex_()21 , globalLocalDataSendToServerMap_(globalLocalIndex)22 , infoIndex_(), isComputed_(false)23 , elementLocalIndex_(), elementGlobalIndex_(), elementIndexData_()24 , elementZoomMask_(), elementNLocal_(), elementNGlobal_()25 {26 isComputed_ = true;27 localDataIndex_.resize(globalLocalIndex.size());28 localMaskIndex_.resize(globalLocalIndex.size());29 GlobalLocalDataMap::const_iterator it = globalLocalIndex.begin(), ite = globalLocalIndex.end();30 int idx = 0;31 for (; it!=ite; ++it)32 {33 localMaskIndex_[idx] = localDataIndex_[idx] = it->second;34 ++idx;35 }36 37 std::vector<CDomain*> domList = grid->getDomains();38 std::vector<CAxis*> axisList = grid->getAxis();39 std::vector<CScalar*> scalarList = grid->getScalars();40 CArray<int,1> axisDomainOrder = grid->axis_domain_order;41 42 int numElement = axisDomainOrder.numElements();43 // Because domain and axis can be in any order (axis1, domain1, axis2, axis3, )44 // their position should be specified. In axisDomainOrder, domain == true, axis == false45 int dims = numElement;46 idx = 0;47 std::vector<int> indexMap(numElement);48 for (int i = 0; i < numElement; ++i)49 {50 indexMap[i] = idx;51 if (2 == axisDomainOrder(i))52 {53 ++dims;54 idx += 2;55 }56 else ++idx;57 }58 59 nGlob_.resize(dims);60 61 // Data_n_index of domain or axis (For now, axis uses its size as data_n_index62 dataNIndex_.resize(numElement);63 dataDims_.resize(numElement);64 isDataDistributed_ = false;65 int domIndex = 0, axisIndex = 0, scalarIndex = 0;66 for (idx = 0; idx < numElement; ++idx)67 {68 int eleDim = axisDomainOrder(idx);69 70 // If this is a domain71 if (2 == eleDim)72 {73 // On the j axis74 nGlob_.at(indexMap[idx]+1) = domList[domIndex]->nj_glo.getValue();75 nGlob_.at(indexMap[idx]) = domList[domIndex]->ni_glo.getValue();76 dataNIndex_.at(idx) = domList[domIndex]->data_i_index.numElements();77 dataDims_.at(idx) = domList[domIndex]->data_dim.getValue();78 79 isDataDistributed_ |= domList[domIndex]->isDistributed();80 ++domIndex;81 }82 else if (1 == eleDim)// So it's an axis83 {84 nGlob_.at(indexMap[idx]) = axisList[axisIndex]->n_glo.getValue();85 dataNIndex_.at(idx) = axisList[axisIndex]->data_index.numElements();86 dataDims_.at(idx) = 1;87 88 isDataDistributed_ |= axisList[axisIndex]->isDistributed();89 ++axisIndex;90 }91 else // scalar92 {93 nGlob_.at(indexMap[idx]) = 1;94 dataNIndex_.at(idx) = 1;95 dataDims_.at(idx) = 1;96 97 isDataDistributed_ |= false;98 ++scalarIndex;99 }100 }101 102 }103 104 CDistributionClient::CDistributionClient(int rank, int dims, const CArray<size_t,1>& globalIndex)105 : CDistribution(rank, dims, globalIndex)106 , axisDomainOrder_()107 , nLocal_(), nGlob_(), nBeginLocal_(), nBeginGlobal_(),nZoomBegin_(), nZoomEnd_()108 , dataNIndex_(), dataDims_(), dataBegin_(), dataIndex_(), domainMasks_(), axisMasks_()109 , gridMask_(), indexMap_()110 , isDataDistributed_(true), axisNum_(0), domainNum_(0)111 , localDataIndex_(), localMaskIndex_()112 , globalLocalDataSendToServerMap_()113 , infoIndex_(), isComputed_(false)114 , elementLocalIndex_(), elementGlobalIndex_(), elementIndexData_()115 , elementZoomMask_(), elementNLocal_(), elementNGlobal_()116 {117 }118 12 119 13 CDistributionClient::CDistributionClient(int rank, CGrid* grid)
Note: See TracChangeset
for help on using the changeset viewer.