Ignore:
Timestamp:
10/18/16 11:08:11 (7 years ago)
Author:
mhnguyen
Message:

Ticket 110: Implementing domain reduction to scalar

+) Add xml node for this new transformation
+) Add algorithm for this new transformation

Test
+) On Curie
+) Work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/transformation/scalar_algorithm_transformation.cpp

    r888 r976  
    33   \author Ha NGUYEN 
    44   \since 23 June 2016 
    5    \date 23 June 2016 
     5   \date 23 Oct 2016 
    66 
    77   \brief Interface for all scalar transformation algorithms. 
     
    4848 
    4949/*! 
    50   Compute global index of scalar on different processes 
    51   \param [in] globalScalarIndex global index of scalar source 
    52   \param [out] globalScalarIndexOnProc processes which contain the corresponding global index of scalar source 
     50  Compute global index of element source on different processes on knowing the global index source of transformation 
     51 
     52  \param [in] globalIndexElementSource global index source of transformation (represented in the transformation mapping) 
     53  \param [in] elementSourceType type of element source 
     54  \param [out] globalIndexElementSourceOnProc processes which contain the corresponding global index of scalar source 
    5355*/ 
    54 void CScalarAlgorithmTransformation::computeExchangeGlobalIndex(const CArray<size_t,1>& globalScalarIndex, 
    55                                                                 int elementType, 
    56                                                                 CClientClientDHTInt::Index2VectorInfoTypeMap& globalScalarIndexOnProc) 
     56void CScalarAlgorithmTransformation::computeExchangeGlobalIndex(const CArray<size_t,1>& globalIndexElementSource, 
     57                                                                int elementSourceType, 
     58                                                                CClientClientDHTInt::Index2VectorInfoTypeMap& globalIndexElementSourceOnProc) 
    5759{ 
    5860  CContext* context = CContext::getCurrent(); 
     
    6163  int clientSize = client->clientSize; 
    6264 
    63   if (1 == elementType) 
     65  if (2 == elementSourceType) // Source is a domain 
     66  { 
     67    size_t globalIndex; 
     68    int nIndexSize = domainSrc_->i_index.numElements(); 
     69    CArray<int,1>& iIndex = domainSrc_->i_index; 
     70    CArray<int,1>& jIndex = domainSrc_->j_index; 
     71    int niGlo = domainSrc_->ni_glo; 
     72 
     73    CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank; 
     74    globalIndex2ProcRank.rehash(std::ceil(nIndexSize/globalIndex2ProcRank.max_load_factor())); 
     75    for (int idx = 0; idx < nIndexSize; ++idx) 
     76    { 
     77      globalIndex = jIndex(idx) * niGlo + iIndex(idx); 
     78      globalIndex2ProcRank[globalIndex].resize(1); 
     79      globalIndex2ProcRank[globalIndex][0] = clientRank; 
     80    } 
     81 
     82    CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm); 
     83    dhtIndexProcRank.computeIndexInfoMapping(globalIndexElementSource); 
     84    globalIndexElementSourceOnProc = dhtIndexProcRank.getInfoIndexMap(); 
     85  } 
     86  else if (1 == elementSourceType) // Source is an axis 
    6487  { 
    6588    size_t globalIndex; 
     
    7598 
    7699    CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm); 
    77     dhtIndexProcRank.computeIndexInfoMapping(globalScalarIndex); 
    78     globalScalarIndexOnProc = dhtIndexProcRank.getInfoIndexMap(); 
     100    dhtIndexProcRank.computeIndexInfoMapping(globalIndexElementSource); 
     101    globalIndexElementSourceOnProc = dhtIndexProcRank.getInfoIndexMap(); 
     102  } 
     103  else // scalar 
     104  { 
     105    size_t globalIndex = 0;     
     106    CClientClientDHTInt::Index2VectorInfoTypeMap globalIndex2ProcRank; 
     107    globalIndex2ProcRank[globalIndex].resize(1); 
     108    globalIndex2ProcRank[globalIndex][0] = clientRank; 
     109 
     110    CClientClientDHTInt dhtIndexProcRank(globalIndex2ProcRank, client->intraComm); 
     111    dhtIndexProcRank.computeIndexInfoMapping(globalIndexElementSource); 
     112    globalIndexElementSourceOnProc = dhtIndexProcRank.getInfoIndexMap(); 
    79113  } 
    80114} 
Note: See TracChangeset for help on using the changeset viewer.