Ignore:
Timestamp:
01/23/19 10:31:44 (5 years ago)
Author:
yushan
Message:

dev on ADA. add flag switch _usingEP/_usingMPI

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/src/io/nc4_data_input.cpp

    r1545 r1642  
    2929 
    3030  StdSize CNc4DataInput::getFieldNbRecords_(CField* field) 
     31  TRY 
    3132  { 
    3233    StdString fieldId = field->getFieldOutputName(); 
     
    4041    return 1; 
    4142  } 
     43  CATCH 
    4244 
    4345  void CNc4DataInput::readFieldData_(CField* field) 
     46  TRY 
    4447  { 
    4548    CContext* context = CContext::getCurrent(); 
     
    5558    CArray<double,1> fieldData(grid->getWrittenDataSize()); 
    5659    if (!field->default_value.isEmpty()) fieldData = field->default_value; 
    57     #ifdef _usingEP 
    58       SuperClass::type = ONE_FILE; 
    59       printf("SuperClass::type = %d\n", SuperClass::type); 
    60     #endif 
    61          
     60 
    6261    switch (SuperClass::type) 
    6362    { 
     
    6766      case ONE_FILE: 
    6867      { 
    69 /* 
    70         std::vector<int> nZoomBeginGlobal = grid->getDistributionServer()->getZoomBeginGlobal(); 
    71         std::vector<int> nZoomBeginServer = grid->getDistributionServer()->getZoomBeginServer(); 
    72         std::vector<int> nZoomSizeServer  = grid->getDistributionServer()->getZoomSizeServer(); 
    73  
    74         int ssize = nZoomBeginGlobal.size(); 
    75  
    76         std::vector<StdSize> start(ssize); 
    77         std::vector<StdSize> count(ssize); 
    78  
    79         for (int i = 0; i < ssize; ++i) 
    80         { 
    81           start[i] = nZoomBeginServer[ssize - i - 1] - nZoomBeginGlobal[ssize - i - 1]; 
    82           count[i] = nZoomSizeServer[ssize - i - 1]; 
    83         } 
    84 */ 
    85  
    86         std::vector<int> nZoomBeginGlobal = grid->getDistributionServer()->getZoomBeginGlobal(); 
    87         std::vector<int> nZoomBeginServer = grid->getDistributionServer()->getZoomBeginServer(); 
    88         std::vector<int> nZoomSizeServer  = grid->getDistributionServer()->getZoomSizeServer(); 
    89  
    9068        std::vector<StdSize> start, count; 
    9169 
     
    9573        int numElement = axisDomainOrder.numElements(); 
    9674        int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1; 
    97         int idx = nZoomBeginGlobal.size() - 1; 
    98  
    99         start.reserve(nZoomBeginGlobal.size()); 
    100         count.reserve(nZoomBeginGlobal.size()); 
     75        int idx = domainList.size() * 2 + axisList.size() - 1; 
     76 
     77        start.reserve(idx+1); 
     78        count.reserve(idx+1); 
    10179 
    10280        for (int i = numElement - 1; i >= 0; --i) 
     
    10785            if ((domain->type) != CDomain::type_attr::unstructured) 
    10886            { 
    109               start.push_back(nZoomBeginServer[idx] - nZoomBeginGlobal[idx]); 
    110               count.push_back(nZoomSizeServer[idx]); 
     87              start.push_back(domain->jbegin); 
     88              count.push_back(domain->nj); 
    11189            } 
    112             --idx ; 
    113             start.push_back(nZoomBeginServer[idx] - nZoomBeginGlobal[idx]); 
    114             count.push_back(nZoomSizeServer[idx]); 
    115             --idx ; 
     90            start.push_back(domain->ibegin); 
     91            count.push_back(domain->ni); 
    11692            --idxDomain; 
    11793          } 
    11894          else if (1 == axisDomainOrder(i)) 
    11995          { 
    120             start.push_back(nZoomBeginServer[idx] - nZoomBeginGlobal[idx]); 
    121             count.push_back(nZoomSizeServer[idx]); 
    122             --idx; 
     96            CAxis* axis = CAxis::get(axisList[idxAxis]); 
     97            start.push_back(axis->begin); 
     98            count.push_back(axis->n); 
     99            --idxAxis ; 
    123100          } 
    124101          else 
     
    129106              count.push_back(1); 
    130107            } 
    131             --idx; 
    132108          } 
    133109        } 
     
    148124    } 
    149125  } 
     126  CATCH 
    150127 
    151128  void CNc4DataInput::readFieldAttributes_(CField* field, bool readAttributeValues) 
     129  TRY 
    152130  { 
    153131    StdString fieldId = field->getFieldOutputName(); 
     
    166144    // Verify the compatibility of dimension of declared grid and real grid in file 
    167145    int realGridDim = 1; 
    168     bool isUnstructuredGrid = SuperClassWriter::isUnstructured(fieldId); 
     146    bool isUnstructuredGrid = ((gridDim < 2) ? false :  SuperClassWriter::isUnstructured(fieldId)); 
    169147    std::map<StdString, StdSize> dimSizeMap = SuperClassWriter::getDimensions(&fieldId); 
    170148    std::list<StdString> dimList = SuperClassWriter::getDimensionsList(&fieldId); 
     
    191169*/ 
    192170 
    193     for (std::list<StdString>::const_iterator it = dimList.begin(); it != dimList.end(); ++it) 
     171//    if (!SuperClassWriter::isRectilinear(fieldId)) 
     172    if (true) 
     173    { 
     174      for (std::list<StdString>::const_iterator it = dimList.begin(); it != dimList.end(); ++it) 
    194175        listDimSize.push_front(*dimSizeMap.find(*it)); 
     176    } 
     177    else 
     178    { 
     179       std::list<StdString> coords = SuperClassWriter::getCoordinatesIdList(fieldId); 
     180       std::list<StdString>::const_iterator itCoord = coords.begin(); 
     181       for (; itCoord != coords.end(); itCoord++) 
     182       { 
     183         const StdString& coord = *itCoord; 
     184         if (SuperClassWriter::hasVariable(coord) && !SuperClassWriter::isTemporal(coord)) 
     185         { 
     186           std::map<StdString, StdSize> dimsTmp = SuperClassWriter::getDimensions(&coord); 
     187           StdString dimNameTmp = dimsTmp.begin()->first; 
     188           StdSize dimSizeTmp = dimsTmp.begin()->second; 
     189           listDimSize.push_front(make_pair(coord, dimSizeTmp)); 
     190           dimSizeMap.erase(dimNameTmp); 
     191           dimList.remove(dimNameTmp); 
     192         } 
     193       } 
     194       for (std::list<StdString>::const_iterator it = dimList.begin(); it != dimList.end(); ++it) 
     195        listDimSize.push_front(*dimSizeMap.find(*it)); 
     196    } 
    195197 
    196198    // Now process domain and axis 
     
    251253    } 
    252254  } 
     255  CATCH 
    253256 
    254257  /*! 
     
    261264  void CNc4DataInput::readDomainAttributeValueFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap, 
    262265                                                       int elementPosition, const StdString& fieldId) 
     266  TRY 
    263267  { 
    264268    // There are some optional attributes of a domain to retrieve from file    // + lon lat? 
     
    439443    domain->fillInLonLat(); 
    440444  } 
     445  CATCH 
    441446 
    442447  /*! 
     
    449454  void CNc4DataInput::readDomainAttributesFromFile(CDomain* domain, std::list<std::pair<StdString, StdSize> >& dimSizeMap, 
    450455                                                   int elementPosition, const StdString& fieldId) 
     456  TRY 
    451457  { 
    452458    // There are some mandatory attributes of a domain to retrieve from file 
     
    497503      domain->ni_glo.setValue(itMapNi->second); 
    498504    } 
    499   } 
     505 
     506// determine if coordinates values are present in file 
     507    if ((CDomain::type_attr::rectilinear == domain->type)) 
     508    { 
     509      // Ok, try to read some attributes such as longitude and latitude 
     510      domain->hasLatInReadFile_ = SuperClassWriter::hasVariable(itMapNj->first); 
     511      domain->hasLonInReadFile_  = SuperClassWriter::hasVariable(itMapNi->first); 
     512    } 
     513    else if ((CDomain::type_attr::curvilinear == domain->type) || (CDomain::type_attr::unstructured == domain->type) ) 
     514    { 
     515      StdString latName = this->getLatCoordName(fieldId); 
     516      domain->hasLatInReadFile_ = SuperClassWriter::hasVariable(latName) ; 
     517      StdString lonName = this->getLonCoordName(fieldId);         
     518      domain->hasLonInReadFile_ = SuperClassWriter::hasVariable(lonName) ;  
     519      StdString boundsLatName = this->getBoundsId(latName); 
     520      domain->hasBoundsLatInReadFile_ = SuperClassWriter::hasVariable(boundsLatName) ;  
     521      StdString boundsLonName = this->getBoundsId(lonName); 
     522      domain->hasBoundsLonInReadFile_ = SuperClassWriter::hasVariable(boundsLonName) ; 
     523    } 
     524  } 
     525  CATCH 
    500526 
    501527  /*! 
     
    508534  void CNc4DataInput::readAxisAttributesFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap, 
    509535                                                 int elementPosition, const StdString& fieldId) 
     536  TRY 
    510537  { 
    511538    std::list<std::pair<StdString, StdSize> >::const_iterator itMapN = dimSizeMap.begin(), 
     
    524551    axis->n_glo.setValue(itMapN->second); 
    525552  } 
     553  CATCH 
    526554 
    527555  /*! 
     
    534562  void CNc4DataInput::readAxisAttributeValueFromFile(CAxis* axis, std::list<std::pair<StdString, StdSize> >& dimSizeMap, 
    535563                                                    int elementPosition, const StdString& fieldId) 
     564  TRY 
    536565  { 
    537566    std::list<std::pair<StdString, StdSize> >::const_iterator itMapN = dimSizeMap.begin(), 
     
    554583    } 
    555584  } 
     585  CATCH 
    556586 
    557587  /*! 
     
    582612 
    583613  void CNc4DataInput::closeFile_(void) 
     614  TRY 
    584615  { 
    585616    SuperClassWriter::close(); 
    586617  } 
     618  CATCH 
    587619} // namespace xios 
Note: See TracChangeset for help on using the changeset viewer.