Ignore:
Timestamp:
02/15/21 21:14:02 (3 years ago)
Author:
oabramkina
Message:

Adding a possibility of tiled and non-tiled sent on the same domain.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_oa/src/distribution_client.cpp

    r1637 r2034  
    1111namespace xios { 
    1212 
    13 CDistributionClient::CDistributionClient(int rank, CGrid* grid) 
     13CDistributionClient::CDistributionClient(int rank, CGrid* grid, bool isTiled) 
    1414   : CDistribution(rank, 0) 
    1515   , axisDomainOrder_() 
     
    2424   , elementNLocal_(), elementNGlobal_() 
    2525{ 
    26   readDistributionInfo(grid); 
     26  readDistributionInfo(grid, isTiled); 
    2727  createGlobalIndex(); 
    2828} 
     
    5050  \param [in] grid Grid to read 
    5151*/ 
    52 void CDistributionClient::readDistributionInfo(CGrid* grid) 
     52void CDistributionClient::readDistributionInfo(CGrid* grid, bool isTiled) 
    5353{ 
    5454  std::vector<CDomain*> domList = grid->getDomains(); 
     
    5757  CArray<int,1> axisDomainOrder = grid->axis_domain_order; 
    5858 
    59   readDistributionInfo(domList, axisList, scalarList, axisDomainOrder); 
     59  readDistributionInfo(domList, axisList, scalarList, axisDomainOrder, isTiled); 
    6060 
    6161  // Then check mask of grid 
     
    102102  \param [in] scalarList List of scalar of grid 
    103103  \param [in] axisDomainOrder order of axis and domain inside a grid. 2 if domain, 1 if axis and zero if scalar 
    104 //  \param [in] gridMask Mask of grid, for now, keep it 3 dimension, but it needs changing 
     104  \param [in] isTiled If true, domain data attributes should be ignored 
    105105*/ 
    106106void CDistributionClient::readDistributionInfo(const std::vector<CDomain*>& domList, 
    107107                                               const std::vector<CAxis*>& axisList, 
    108108                                               const std::vector<CScalar*>& scalarList, 
    109                                                const CArray<int,1>& axisDomainOrder) 
     109                                               const CArray<int,1>& axisDomainOrder, 
     110                                               bool isTiled) 
    110111{ 
    111112  domainNum_ = domList.size(); 
     
    177178      nBeginGlobal_.at(indexMap_[idx]+1) = domList[domIndex]->jbegin; 
    178179 
    179       dataBegin_.at(indexMap_[idx]+1) = domList[domIndex]->data_jbegin.getValue(); 
    180       dataIndex_.at(indexMap_[idx]+1).reference(domList[domIndex]->data_j_index); 
    181       infoIndex_.at(indexMap_[idx]+1).reference(domList[domIndex]->j_index); 
    182  
    183180      // On the i axis 
    184181      nLocal_.at(indexMap_[idx]) = domList[domIndex]->ni.getValue(); 
     
    187184      nBeginGlobal_.at(indexMap_[idx]) = domList[domIndex]->ibegin; 
    188185 
    189       dataBegin_.at(indexMap_[idx]) = domList[domIndex]->data_ibegin.getValue(); 
    190       dataIndex_.at(indexMap_[idx]).reference(domList[domIndex]->data_i_index); 
    191       infoIndex_.at(indexMap_[idx]).reference(domList[domIndex]->i_index); 
    192  
    193       dataNIndex_.at(idx) = domList[domIndex]->data_i_index.numElements(); 
    194       dataDims_.at(idx) = domList[domIndex]->data_dim.getValue(); 
     186      if (isTiled) 
     187      // Ignore all data attributes, if defined, for tiled domains 
     188      { 
     189        dataBegin_.at(indexMap_[idx]+1) = 0; 
     190        dataBegin_.at(indexMap_[idx]) = 0; 
     191 
     192        // Fill dataIndex_ and infoIndex_ 
     193        CArray<int,1>& infoIndexI = infoIndex_.at(indexMap_[idx]); 
     194        CArray<int,1>& infoIndexJ = infoIndex_.at(indexMap_[idx]+1); 
     195        CArray<int,1>& dataIndexI = dataIndex_.at(indexMap_[idx]); 
     196        CArray<int,1>& dataIndexJ = dataIndex_.at(indexMap_[idx]+1); 
     197        domList[domIndex]->computeCompressionTiled(dataIndexI, dataIndexJ, infoIndexI, infoIndexJ); 
     198 
     199      } 
     200      else 
     201      { 
     202        // On the j axis 
     203        dataBegin_.at(indexMap_[idx]+1) = domList[domIndex]->data_jbegin.getValue(); 
     204        dataIndex_.at(indexMap_[idx]+1).reference(domList[domIndex]->data_j_index); 
     205        infoIndex_.at(indexMap_[idx]+1).reference(domList[domIndex]->j_index); 
     206 
     207        // On the i axis 
     208        dataBegin_.at(indexMap_[idx]) = domList[domIndex]->data_ibegin.getValue(); 
     209        dataIndex_.at(indexMap_[idx]).reference(domList[domIndex]->data_i_index); 
     210        infoIndex_.at(indexMap_[idx]).reference(domList[domIndex]->i_index); 
     211 
     212      } 
     213 
     214      dataNIndex_.at(idx) = isTiled ? (domList[domIndex]->ni*domList[domIndex]->nj) : domList[domIndex]->data_i_index.numElements(); 
     215      dataDims_.at(idx) = isTiled ? 1 : domList[domIndex]->data_dim.getValue(); 
    195216 
    196217      isDataDistributed_ |= domList[domIndex]->isDistributed(); 
Note: See TracChangeset for help on using the changeset viewer.