Changeset 802 for XIOS/trunk/src/io


Ignore:
Timestamp:
11/30/15 16:21:33 (8 years ago)
Author:
rlacroix
Message:

Add a new file attribute time_counter_name.

Users can now modify the name of the time counter dimension and axis name.

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

Legend:

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

    r783 r802  
    77namespace xios 
    88{ 
    9   CINetCDF4::CINetCDF4(const StdString& filename, const MPI_Comm* comm /*= NULL*/, bool multifile /*= true*/) 
     9  CINetCDF4::CINetCDF4(const StdString& filename, const MPI_Comm* comm /*= NULL*/, bool multifile /*= true*/, const StdString& timeCounterName /*= "time_counter"*/) 
    1010  { 
    1111    // Don't use parallel mode if there is only one process 
     
    2525    else 
    2626      CNetCdfInterface::open(filename, NC_NOWRITE, this->ncidp); 
     27 
     28    this->timeCounterName = timeCounterName; 
    2729  } 
    2830 
     
    359361  bool CINetCDF4::hasTemporalDim(const CVarPath* const path) 
    360362  { 
    361     return (this->getUnlimitedDimension(path) != -1); 
     363    std::list<StdString> dims = this->getDimensionsList(NULL, path); 
     364    return (std::find(dims.begin(), dims.end(), timeCounterName) != dims.end()); 
    362365  } 
    363366 
     
    563566  bool CINetCDF4::isTemporal(const StdString& name, const CVarPath* const path) 
    564567  { 
    565     if (!this->hasTemporalDim(path)) return false; 
    566     std::map<StdString, StdSize> dims = this->getDimensions(&name, path); 
    567     return (dims.find(this->getUnlimitedDimensionName(path)) != dims.end()); 
     568    std::list<StdString> dims = this->getDimensionsList(&name, path); 
     569    return (std::find(dims.begin(), dims.end(), timeCounterName) != dims.end()); 
    568570  } 
    569571 
  • XIOS/trunk/src/io/inetcdf4.hpp

    r782 r802  
    2222    public: 
    2323      /// Constructors /// 
    24       CINetCDF4(const StdString& filename, const MPI_Comm* comm = NULL, bool multifile = true); 
     24      CINetCDF4(const StdString& filename, const MPI_Comm* comm = NULL, bool multifile = true, 
     25                const StdString& timeCounterName = "time_counter"); 
    2526      CINetCDF4(const CINetCDF4& inetcdf4);       // Not implemented. 
    2627      CINetCDF4(const CINetCDF4* const inetcdf4); // Not implemented. 
     
    4142 
    4243      StdString getUnlimitedDimensionName(const CVarPath* const path = NULL); 
     44 
     45      const StdString& getTimeCounterName(void) const { return timeCounterName; }; 
    4346 
    4447      StdString getCoordinatesId(const StdString& name, const CVarPath* const path = NULL); 
     
    155158      int ncidp; //< Id of the NetCDF file 
    156159      bool mpi;  //< Whether parallel file access is used 
     160      StdString timeCounterName; 
    157161  }; // class CINetCDF4 
    158162} // namespace xios 
  • XIOS/trunk/src/io/nc4_data_input.cpp

    r785 r802  
    99namespace xios 
    1010{ 
    11   CNc4DataInput::CNc4DataInput(const StdString& filename, MPI_Comm comm_file, bool multifile, bool isCollective /*= true*/) 
     11  CNc4DataInput::CNc4DataInput(const StdString& filename, MPI_Comm comm_file, bool multifile, bool isCollective /*= true*/, const StdString& timeCounterName /*= "time_counter"*/) 
    1212    : SuperClass() 
    13     , SuperClassWriter(filename, &comm_file, multifile) 
     13    , SuperClassWriter(filename, &comm_file, multifile, timeCounterName) 
    1414    , comm_file(comm_file) 
    1515    , filename(filename) 
  • XIOS/trunk/src/io/nc4_data_input.hpp

    r783 r802  
    2222 
    2323    /// Constructors /// 
    24     CNc4DataInput(const StdString& filename, MPI_Comm comm_file, bool multifile, bool isCollective = true); 
     24    CNc4DataInput(const StdString& filename, MPI_Comm comm_file, bool multifile, bool isCollective = true, 
     25                  const StdString& timeCounterName = "time_counter"); 
    2526    CNc4DataInput(const CNc4DataInput& dataInput);       // Not implemented. 
    2627    CNc4DataInput(const CNc4DataInput* const dataInput); // Not implemented. 
  • XIOS/trunk/src/io/nc4_data_output.cpp

    r796 r802  
    2222            , filename(filename) 
    2323      { 
    24          StdString timeid = StdString("time_counter"); 
    2524         SuperClass::type = MULTI_FILE; 
    2625      } 
     
    2827      CNc4DataOutput::CNc4DataOutput 
    2928         (const StdString & filename, bool exist, bool useClassicFormat, 
    30           MPI_Comm comm_file,bool multifile, bool isCollective) 
     29          MPI_Comm comm_file,bool multifile, bool isCollective, const StdString& timeCounterName) 
    3130            : SuperClass() 
    32             , SuperClassWriter(filename, exist, useClassicFormat, &comm_file, multifile) 
     31            , SuperClassWriter(filename, exist, useClassicFormat, &comm_file, multifile, timeCounterName) 
    3332            , comm_file(comm_file) 
    3433            , filename(filename) 
    3534            , isCollective(isCollective) 
    3635      { 
    37          StdString timeid = StdString("time_counter"); 
    38  
    3936         SuperClass::type = (multifile) ? MULTI_FILE : ONE_FILE; 
    4037      } 
     
    952949       try 
    953950       { 
    954         SuperClassWriter::addDimension("time_counter"); 
     951        SuperClassWriter::addDimension(getTimeCounterName()); 
    955952       } 
    956953       catch (CNetCdfException& e) 
     
    982979         std::vector<StdString> axisList   = grid->getAxisList(); 
    983980 
    984          StdString timeid  = StdString("time_counter"); 
     981         StdString timeid  = getTimeCounterName(); 
    985982         StdString dimXid,dimYid; 
    986983         std::deque<StdString> dimIdList, dimCoordList; 
     
    13911388        else if (field->getOperationTimeType() == func::CFunctor::centered) timeAxisId = "time_centered"; 
    13921389 
    1393         StdString timeBoundId("time_counter_bounds"); 
     1390        StdString timeBoundId = getTimeCounterName() + "_bounds"; 
    13941391 
    13951392        StdString timeAxisBoundId; 
     
    14921489                   if (field->file->time_counter != CFile::time_counter_attr::none) 
    14931490                   { 
    1494                      SuperClassWriter::writeData(time_counter, string("time_counter"), isCollective, field->getNStep() - 1); 
     1491                     SuperClassWriter::writeData(time_counter, getTimeCounterName(), isCollective, field->getNStep() - 1); 
    14951492                     if (field->file->time_counter != CFile::time_counter_attr::record) 
    14961493                       SuperClassWriter::writeData(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1); 
     
    16191616                   if (field->file->time_counter != CFile::time_counter_attr::none) 
    16201617                   { 
    1621                      SuperClassWriter::writeTimeAxisData(time_counter, string("time_counter"), isCollective, field->getNStep() - 1, isRoot); 
     1618                     SuperClassWriter::writeTimeAxisData(time_counter, getTimeCounterName(), isCollective, field->getNStep() - 1, isRoot); 
    16221619                     if (field->file->time_counter != CFile::time_counter_attr::record) 
    16231620                       SuperClassWriter::writeTimeAxisData(time_counter_bound, timeBoundId, isCollective, field->getNStep() - 1, isRoot); 
     
    16591656         StdString axisid("time_centered") ; 
    16601657         StdString axisBoundId("time_centered_bounds"); 
    1661          StdString timeid("time_counter"); 
     1658         StdString timeid(getTimeCounterName()); 
    16621659         StdString timeBoundId("axis_nbounds"); 
    16631660 
     
    17011698           { 
    17021699             // Adding time_counter 
    1703              axisid = "time_counter"; 
    1704              axisBoundId = "time_counter_bounds"; 
     1700             axisid = getTimeCounterName(); 
     1701             axisBoundId = getTimeCounterName() + "_bounds"; 
    17051702             dims.clear(); 
    17061703             dims.push_back(timeid); 
     
    19551952        if (it == timeToRecordCache.end()) 
    19561953        { 
    1957           StdString timeAxisBoundsId("time_counter_bounds"); 
     1954          StdString timeAxisBoundsId(getTimeCounterName() + "_bounds"); 
    19581955          if (!SuperClassWriter::varExist(timeAxisBoundsId)) 
    19591956            timeAxisBoundsId = "time_instant_bounds"; 
  • XIOS/trunk/src/io/nc4_data_output.hpp

    r774 r802  
    2626            CNc4DataOutput 
    2727               (const StdString & filename, bool exist, bool useClassicFormat, 
    28                 MPI_Comm comm_file, bool multifile, bool isCollective=true); 
     28                MPI_Comm comm_file, bool multifile, bool isCollective = true, 
     29                const StdString& timeCounterName = "time_counter"); 
    2930 
    3031            CNc4DataOutput(const CNc4DataOutput & dataoutput);       // Not implemented. 
  • XIOS/trunk/src/io/onetcdf4.cpp

    r707 r802  
    1313 
    1414      CONetCDF4::CONetCDF4(const StdString& filename, bool append, bool useClassicFormat, 
    15                            const MPI_Comm* comm, bool multifile) 
     15                           const MPI_Comm* comm, bool multifile, const StdString& timeCounterName) 
    1616        : path() 
    1717        , wmpi(false) 
    1818        , useClassicFormat(useClassicFormat) 
    1919      { 
    20          this->initialize(filename, append, useClassicFormat, comm,multifile); 
     20         this->initialize(filename, append, useClassicFormat, comm, multifile, timeCounterName); 
    2121      } 
    2222 
     
    3030 
    3131      void CONetCDF4::initialize(const StdString& filename, bool append, bool useClassicFormat, 
    32                                  const MPI_Comm* comm, bool multifile) 
     32                                 const MPI_Comm* comm, bool multifile, const StdString& timeCounterName) 
    3333      { 
    3434         this->useClassicFormat = useClassicFormat; 
     
    7474         if (useClassicFormat) 
    7575            CNetCdfInterface::setFill(this->ncidp, false); 
     76 
     77         this->timeCounterName = timeCounterName; 
    7678      } 
    7779 
     
    444446         int i = 0; 
    445447 
    446          if (iddims.begin()->compare(this->getUnlimitedDimensionName()) == 0) 
     448         if (iddims.begin()->compare(timeCounterName) == 0) 
    447449         { 
    448450            sstart.push_back(record); 
  • XIOS/trunk/src/io/onetcdf4.hpp

    r707 r802  
    2727            /// Constructeurs /// 
    2828            CONetCDF4(const StdString& filename, bool append, bool useClassicFormat = false, 
    29                       const MPI_Comm* comm = NULL, bool multifile = true); 
     29                      const MPI_Comm* comm = NULL, bool multifile = true, 
     30                      const StdString& timeCounterName = "time_counter"); 
    3031 
    3132            CONetCDF4(const CONetCDF4& onetcdf4);       // Not implemented. 
     
    3536            /// Initialisation /// 
    3637            void initialize(const StdString& filename, bool append, bool useClassicFormat, 
    37                             const MPI_Comm* comm, bool multifile); 
     38                            const MPI_Comm* comm, bool multifile, const StdString& timeCounterName); 
    3839            void close(void); 
    3940            void sync(void); 
     
    9394            int       getUnlimitedDimension(void); 
    9495            StdString getUnlimitedDimensionName(void); 
     96            const StdString& getTimeCounterName(void) const { return timeCounterName; }; 
    9597 
    9698            void getTimeAxisBounds(CArray<double,2>& timeAxisBounds, const StdString& name, bool collective); 
     
    119121            bool wmpi; 
    120122            map<int,size_t> timeAxis; 
     123            StdString timeCounterName; 
    121124      }; // class CONetCDF4 
    122125 
Note: See TracChangeset for help on using the changeset viewer.