Changeset 1050 for XIOS/trunk/src/io


Ignore:
Timestamp:
02/07/17 11:52:03 (7 years ago)
Author:
ymipsl
Message:
  • Add label attribute for axis
  • if label attribute is present, then only only string label for each level will be output in netcdf file, ie value and bounds will not be output.

YM

Location:
XIOS/trunk/src/io
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/io/nc4_data_output.cpp

    r1048 r1050  
    10601060        else if (axis->prec==8)   typePrec =  NC_DOUBLE ; 
    10611061          
     1062        if (!axis->label.isEmpty()) typePrec = NC_CHAR ; 
     1063        string strId="str_len" ; 
    10621064        try 
    10631065        { 
    10641066          SuperClassWriter::addDimension(axisid, zoom_size); 
     1067          if (!axis->label.isEmpty()) SuperClassWriter::addDimension(strId, stringArrayLen); 
    10651068          if (axis->hasValue) 
    10661069          { 
    10671070            dims.push_back(axisid); 
     1071            if (!axis->label.isEmpty()) dims.push_back(strId); 
    10681072            SuperClassWriter::addVariable(axisid, typePrec, dims); 
    10691073 
     
    11041108                CArray<double,1> axis_value(zoom_size_srv); 
    11051109                for (int i = 0; i < zoom_size_srv; i++) axis_value(i) = axis->value_srv(i); 
    1106                 SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
    1107  
    1108                 if (!axis->bounds.isEmpty()) 
     1110                if (axis->label.isEmpty())  SuperClassWriter::writeData(axis_value, axisid, isCollective, 0); 
     1111 
     1112                if (!axis->bounds.isEmpty() && axis->label.isEmpty()) 
    11091113                  SuperClassWriter::writeData(axis->bound_srv, axisBoundsId, isCollective, 0); 
    11101114 
     1115                if (! axis->label.isEmpty())  SuperClassWriter::writeData(axis->label_srv, axisid, isCollective, 0); 
     1116  
    11111117                SuperClassWriter::definition_start(); 
    1112  
    11131118                break; 
    11141119              } 
     
    11241129                startBounds[1] = 0; 
    11251130                countBounds[1] = 2; 
    1126                 SuperClassWriter::writeData(axis_value, axisid, isCollective, 0, &start, &count); 
    1127  
    1128                 if (!axis->bounds.isEmpty()) 
     1131                if (axis->label.isEmpty()) SuperClassWriter::writeData(axis_value, axisid, isCollective, 0, &start, &count); 
     1132 
     1133                if (!axis->bounds.isEmpty()&& axis->label.isEmpty()) 
    11291134                  SuperClassWriter::writeData(axis->bound_srv, axisBoundsId, isCollective, 0, &startBounds, &countBounds); 
     1135 
     1136                if (! axis->label.isEmpty())  SuperClassWriter::writeData(axis->label_srv, axisid, isCollective, 0); 
    11301137 
    11311138                SuperClassWriter::definition_start(); 
  • XIOS/trunk/src/io/netCdfInterface.cpp

    r972 r1050  
    967967} 
    968968 
     969template<> 
     970int CNetCdfInterface::ncGetVaraType(int ncid, int varid, const StdSize* start, const StdSize* count, char* data) 
     971{ 
     972  return nc_get_vara_text(ncid, varid, start, count, data); 
     973} 
     974 
    969975// Some specializations of putVariableType 
    970976template<> 
     
    984990{ 
    985991  return nc_put_vara_int(ncid, varid, start, count, data); 
     992} 
     993 
     994template<> 
     995int CNetCdfInterface::ncPutVaraType(int ncid, int varid, const StdSize* start, const StdSize* count, const char* data) 
     996{ 
     997  return nc_put_vara_text(ncid, varid, start, count, data); 
    986998} 
    987999 
  • XIOS/trunk/src/io/netCdfInterface_decl.cpp

    r686 r1050  
    3333  macroPutVar(float) 
    3434  macroPutVar(int) 
    35  
     35  macroPutVar(char) 
     36   
    3637#define macroType(type, ncType) \ 
    3738  template<> nc_type CNetCdfInterface::getNcType<type>() { return ncType; } 
  • XIOS/trunk/src/io/onetcdf4.cpp

    r878 r1050  
    503503      void CONetCDF4::writeData_(int grpid, int varid, 
    504504                                 const std::vector<StdSize>& sstart, 
     505                                 const std::vector<StdSize>& scount, char* data) 
     506      { 
     507          CNetCdfInterface::putVaraType(grpid, varid, &sstart[0], &scount[0], data); 
     508      } 
     509       
     510      template <> 
     511 
     512      void CONetCDF4::writeData_(int grpid, int varid, 
     513                                 const std::vector<StdSize>& sstart, 
    505514                                 const std::vector<StdSize>& scount, const int* data) 
    506515      { 
    507516          CNetCdfInterface::putVaraType(grpid, varid, &sstart[0], &scount[0], data); 
    508517      } 
    509  
    510518      //--------------------------------------------------------------- 
    511519 
  • XIOS/trunk/src/io/onetcdf4_decl.cpp

    r924 r1050  
    1414  macro(double, 2) 
    1515  macro(double, 3) 
     16  macro(StdString, 1) 
    1617  
    1718  template void CONetCDF4::setDefaultValue<double>(const StdString & varname, const double* value) ; 
  • XIOS/trunk/src/io/onetcdf4_impl.hpp

    r685 r1050  
    3636  } 
    3737 
     38  template <> 
     39  void CONetCDF4::writeData(const CArray<StdString, 1>& data, const StdString & name, 
     40                            bool collective, StdSize record, 
     41                            const std::vector<StdSize> * start, 
     42                            const std::vector<StdSize> * count) 
     43  { 
     44    int grpid = this->getCurrentGroup(); 
     45    int varid = this->getVariable(name); 
     46    StdSize array_size = 1; 
     47    std::vector<StdSize> sstart, scount; 
     48 
     49    if (this->wmpi && collective) 
     50    CNetCdfInterface::varParAccess(grpid, varid, NC_COLLECTIVE); 
     51    if (this->wmpi && !collective) 
     52    CNetCdfInterface::varParAccess(grpid, varid, NC_INDEPENDENT); 
     53 
     54    this->getWriteDataInfos 
     55    (name, record, array_size,  sstart, scount, start, count); 
     56    if (data.numElements()*stringArrayLen != array_size) 
     57    { 
     58      ERROR("CONetCDF4::writeData(...)", 
     59      << "[ input array size = "  << data.numElements() 
     60      << ", intern array size = " << array_size 
     61      << " ] Invalid input data !" ); 
     62    } 
     63    char* ArrayStr ; 
     64    char *PtrArrayStr ; 
     65    PtrArrayStr=ArrayStr=new char[data.numElements()*stringArrayLen] ; 
     66    Array<StdString,1>::const_iterator it, itb=data.begin(), ite=data.end() ; 
     67    for(it=itb;it!=ite;++it,PtrArrayStr+=stringArrayLen) 
     68    { 
     69      it->copy(PtrArrayStr,it->size()) ; 
     70      PtrArrayStr[it->size()]='\0' ; 
     71    } 
     72    this->writeData_(grpid, varid, sstart, scount, ArrayStr); 
     73    delete [] ArrayStr ; 
     74  } 
     75 
    3876//---------------------------------------------------------------- 
    3977 
Note: See TracChangeset for help on using the changeset viewer.