Ignore:
Timestamp:
11/12/15 16:33:18 (9 years ago)
Author:
mhnguyen
Message:

Allowing each process to retrieve its own distribution with i_index

+) Read value and data from unstructured grid with provided i_index value

Test
+) On Curie
+) test_remap works

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/node/domain.cpp

    r784 r785  
    332332     else  // unstructured domain 
    333333     { 
    334         int globalDomainSize = ni_glo * nj_glo; 
    335         if (globalDomainSize <= nbLocalDomain) 
    336         { 
    337           for (int idx = 0; idx < nbLocalDomain; ++idx) 
     334       if (this->i_index.isEmpty()) 
     335       { 
     336          int globalDomainSize = ni_glo * nj_glo; 
     337          if (globalDomainSize <= nbLocalDomain) 
    338338          { 
    339             if (rankOnDomain < globalDomainSize) 
     339            for (int idx = 0; idx < nbLocalDomain; ++idx) 
    340340            { 
    341               int iIdx = rankOnDomain % ni_glo; 
    342               int jIdx = rankOnDomain / ni_glo; 
    343               ibegin.setValue(iIdx); jbegin.setValue(jIdx); 
    344               ni.setValue(1); nj.setValue(1); 
     341              if (rankOnDomain < globalDomainSize) 
     342              { 
     343                int iIdx = rankOnDomain % ni_glo; 
     344                int jIdx = rankOnDomain / ni_glo; 
     345                ibegin.setValue(iIdx); jbegin.setValue(jIdx); 
     346                ni.setValue(1); nj.setValue(1); 
     347              } 
     348              else 
     349              { 
     350                ibegin.setValue(0); jbegin.setValue(0); 
     351                ni.setValue(0); nj.setValue(0); 
     352              } 
    345353            } 
    346             else 
     354          } 
     355          else 
     356          { 
     357            float njGlo = nj_glo.getValue(); 
     358            float niGlo = ni_glo.getValue(); 
     359            std::vector<int> ibeginVec(nbLocalDomain,0); 
     360            std::vector<int> niVec(nbLocalDomain); 
     361            for (int i = 1; i < nbLocalDomain; ++i) 
    347362            { 
    348               ibegin.setValue(0); jbegin.setValue(0); 
    349               ni.setValue(0); nj.setValue(0); 
     363              int range = ni_glo / nbLocalDomain; 
     364              if (i < (ni_glo%nbLocalDomain)) ++range; 
     365              niVec[i-1] = range; 
     366              ibeginVec[i] = ibeginVec[i-1] + niVec[i-1]; 
    350367            } 
     368            niVec[nbLocalDomain-1] = ni_glo - ibeginVec[nbLocalDomain-1]; 
     369 
     370            int iIdx = rankOnDomain % nbLocalDomain; 
     371            ibegin.setValue(ibeginVec[iIdx]); 
     372            jbegin.setValue(0); 
     373            ni.setValue(niVec[iIdx]); 
     374            nj.setValue(1); 
    351375          } 
    352376        } 
    353377        else 
    354378        { 
    355           float njGlo = nj_glo.getValue(); 
    356           float niGlo = ni_glo.getValue(); 
    357           std::vector<int> ibeginVec(nbLocalDomain,0); 
    358           std::vector<int> niVec(nbLocalDomain); 
    359           for (int i = 1; i < nbLocalDomain; ++i) 
    360           { 
    361             int range = ni_glo / nbLocalDomain; 
    362             if (i < (ni_glo%nbLocalDomain)) ++range; 
    363             niVec[i-1] = range; 
    364             ibeginVec[i] = ibeginVec[i-1] + niVec[i-1]; 
    365           } 
    366           niVec[nbLocalDomain-1] = ni_glo - ibeginVec[nbLocalDomain-1]; 
    367  
    368           int iIdx = rankOnDomain % nbLocalDomain; 
    369           ibegin.setValue(ibeginVec[iIdx]); 
     379          ibegin.setValue(this->i_index(0)); 
    370380          jbegin.setValue(0); 
    371           ni.setValue(niVec[iIdx]); 
     381          ni.setValue(this->i_index.numElements()); 
    372382          nj.setValue(1); 
    373383        } 
    374384     } 
     385 
     386     checkDomain(); 
    375387   } 
    376388 
Note: See TracChangeset for help on using the changeset viewer.