Changeset 2308


Ignore:
Timestamp:
03/10/22 13:47:59 (2 years ago)
Author:
ymipsl
Message:

Fix problem when reading scalar on multiple servers.
YM

Location:
XIOS/dev/dev_ym/XIOS_COUPLING/src/io
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/inetcdf4.cpp

    r2274 r2308  
    708708      scount.push_back(1); 
    709709      it++; 
    710     } 
    711     for (int i = 0; it != dimlist.end(); it++, i++) 
     710     
     711      if ( it == dimlist.end()) // scalar case 
     712      { 
     713        if (start && count) 
     714        { 
     715          scount.pop_back(); 
     716          scount.push_back((*count)[0]); 
     717          array_size *= (*count)[0]; 
     718        } 
     719        return ; 
     720      } 
     721    } 
     722     
     723    if ( it == dimlist.end()) // scalar case 
    712724    { 
    713725      if (start && count) 
    714726      { 
    715         sstart.push_back((*start)[i]); 
    716         scount.push_back((*count)[i]); 
    717         array_size *= (*count)[i]; 
     727        sstart.push_back((*start)[0]); 
     728        scount.push_back((*count)[0]); 
     729        array_size *= (*count)[0]; 
    718730      } 
    719731      else 
    720732      { 
    721733        sstart.push_back(0); 
    722         scount.push_back(dimmap[*it]); 
    723         array_size *= dimmap[*it]; 
     734        scount.push_back(1); 
     735        array_size *= 1; 
     736      } 
     737 
     738    } 
     739    else 
     740    {   
     741      for (int i = 0; it != dimlist.end(); it++, i++) 
     742      { 
     743        if (start && count) 
     744        { 
     745          sstart.push_back((*start)[i]); 
     746          scount.push_back((*count)[i]); 
     747          array_size *= (*count)[i]; 
     748        } 
     749        else 
     750        { 
     751          sstart.push_back(0); 
     752          scount.push_back(dimmap[*it]); 
     753          array_size *= dimmap[*it]; 
     754        } 
    724755      } 
    725756    } 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/inetcdf4_impl.hpp

    r782 r2308  
    3131          << " ] Invalid array size"); 
    3232  } 
    33  
    34   CNetCdfInterface::getVaraType(ncidp, varid, &sstart[0], &scount[0], data.dataFirst()); 
     33   
     34  if (data.numElements()==0) 
     35  { 
     36    T data ; 
     37    CNetCdfInterface::getVaraType(ncidp, varid, &sstart[0], &scount[0], &data); // netcdf is very bad 
     38  } 
     39  else  CNetCdfInterface::getVaraType(ncidp, varid, &sstart[0], &scount[0], data.dataFirst()); 
    3540} 
    3641 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/io/nc4_data_input.cpp

    r1930 r2308  
    6666        std::vector<StdString> domainList = grid->getDomainList(); 
    6767        std::vector<StdString> axisList   = grid->getAxisList(); 
     68        std::vector<StdString> scalarList = grid->getScalarList(); 
    6869        int numElement = axisDomainOrder.numElements(); 
    69         int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1; 
     70        int idxDomain = domainList.size() - 1, idxAxis = axisList.size() - 1 ; 
    7071        int idx = domainList.size() * 2 + axisList.size() - 1; 
    7172 
     
    9899            if (1 == axisDomainOrder.numElements()) 
    99100            { 
     101              CScalar* scalar = CScalar::get(scalarList[0]); 
    100102              start.push_back(0); 
    101               count.push_back(1); 
     103              count.push_back(scalar->n); 
    102104            } 
    103105          } 
Note: See TracChangeset for help on using the changeset viewer.