Changeset 1434


Ignore:
Timestamp:
02/19/18 19:11:47 (6 years ago)
Author:
oabramkina
Message:

Fixing a bug in reading of rectilinear domains introduced in r1430.

File:
1 edited

Legend:

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

    r1430 r1434  
    184184      listDimSize.push_front(*itMap); 
    185185*/ 
    186     for (std::list<StdString>::const_iterator it = dimList.begin(); it != dimList.end(); ++it) 
    187     { 
    188       // It is not required any more for dimension name and lon/lat names to be the same (aka lon(lon)) 
    189       if (SuperClassWriter::isRectilinear(fieldId)) 
    190       { 
    191         StdString lonName =   SuperClassWriter::getLonCoordName(fieldId); 
    192         StdString latName =   SuperClassWriter::getLatCoordName(fieldId); 
    193         StdString dimLonName = SuperClassWriter::getDimensions(&lonName).begin()->first; 
    194         StdString dimLatName = SuperClassWriter::getDimensions(&latName).begin()->first; 
    195         if ((lonName != dimLonName) && (*it == dimLonName)) 
    196         { 
    197           StdSize dimSizeTmp = dimSizeMap.find(*it)->second; 
    198           listDimSize.push_front(make_pair(lonName, dimSizeTmp)); 
    199         } 
    200         else if ((latName != dimLatName) && (*it == dimLatName)) 
    201         { 
    202           StdSize dimSizeTmp = dimSizeMap.find(*it)->second; 
    203           listDimSize.push_front(make_pair(latName, dimSizeTmp)); 
    204         } 
    205         else 
    206           listDimSize.push_front(*dimSizeMap.find(*it)); 
    207       } 
    208       else 
     186 
     187    if (!SuperClassWriter::isRectilinear(fieldId)) 
     188    { 
     189      for (std::list<StdString>::const_iterator it = dimList.begin(); it != dimList.end(); ++it) 
    209190        listDimSize.push_front(*dimSizeMap.find(*it)); 
    210  
     191    } 
     192    else 
     193    { 
     194       std::list<StdString> coords = SuperClassWriter::getCoordinatesIdList(fieldId); 
     195       std::list<StdString>::const_iterator itCoord = coords.begin(); 
     196       for (; itCoord != coords.end(); itCoord++) 
     197       { 
     198         const StdString& coord = *itCoord; 
     199         if (SuperClassWriter::hasVariable(coord) && !SuperClassWriter::isTemporal(coord)) 
     200         { 
     201           std::map<StdString, StdSize> dimsTmp = SuperClassWriter::getDimensions(&coord); 
     202           StdString dimNameTmp = dimsTmp.begin()->first; 
     203           StdSize dimSizeTmp = dimsTmp.begin()->second; 
     204           listDimSize.push_front(make_pair(coord, dimSizeTmp)); 
     205           dimSizeMap.erase(dimNameTmp); 
     206           dimList.remove(dimNameTmp); 
     207         } 
     208       } 
     209       for (std::list<StdString>::const_iterator it = dimList.begin(); it != dimList.end(); ++it) 
     210        listDimSize.push_front(*dimSizeMap.find(*it)); 
    211211    } 
    212212 
Note: See TracChangeset for help on using the changeset viewer.