source: XIOS3/trunk/src/io/nc4_data_output.hpp @ 2603

Last change on this file since 2603 was 2600, checked in by jderouillat, 8 months ago

Add a field attribute, conversion_by_NetCDF, to operate type conversion in XIOS, and not in NetCDF

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 6.2 KB
RevLine 
[591]1#ifndef __XIOS_NC4_DATA_OUTPUT__
2#define __XIOS_NC4_DATA_OUTPUT__
[219]3
[591]4/// XIOS headers ///
5#include "xios_spl.hpp"
[219]6#include "onetcdf4.hpp"
7#include "data_output.hpp"
8
[335]9namespace xios
[219]10{
11      /// ////////////////////// Déclarations ////////////////////// ///
12
13      class CNc4DataOutput
14         : protected CONetCDF4
15         , public virtual CDataOutput
16      {
17         public :
18
19            /// Définition de type ///
20            typedef CONetCDF4   SuperClassWriter;
21            typedef CDataOutput SuperClass;
22
23            /// Constructeurs ///
24            CNc4DataOutput
[1158]25               (CFile* file, const StdString & filename, bool exist);
[219]26            CNc4DataOutput
[1158]27               (CFile* file, const StdString & filename, bool exist, bool useClassicFormat,
[878]28                bool useCFConvention,
[1639]29                MPI_Comm comm_file, bool multifile, bool isCollective = true,
[802]30                const StdString& timeCounterName = "time_counter");
[219]31
32            CNc4DataOutput(const CNc4DataOutput & dataoutput);       // Not implemented.
33            CNc4DataOutput(const CNc4DataOutput * const dataoutput); // Not implemented.
[878]34           
[219]35            /// Accesseur ///
36            const StdString & getFileName(void) const;
37
38            /// Destructeur ///
39            virtual ~CNc4DataOutput(void);
[878]40           
[318]41            bool singleDomain ;
[335]42            bool isCollective ;
[1456]43            int compressionLevel ;
[878]44                     
45            CFile* file;
46                     
[219]47         protected :
48
49            /// Ecriture ///
[676]50            virtual void writeDomain_   (CDomain* domain);
51            virtual void writeAxis_     (CAxis* axis);
[887]52            virtual void writeScalar_   (CScalar* scalar);
[676]53            virtual void writeGridCompressed_(CGrid* grid);
[391]54            virtual void writeTimeDimension_(void);
[676]55            virtual void writeField_    (CField* field);
56            virtual void writeAttribute_(CVariable* var);
57            virtual void writeAttribute_(CVariable* var, const string& fieldId);
[1961]58            virtual int  writeFieldData_(CField* field, const CArray<double,1>& data, const CDate& lastWrite, const CDate& currentWrite, int nstep);
[2600]59            void writeAndConvertData(CField* field, const CArray<double,1>& data, StdSize record, const std::vector<StdSize> *start = NULL, const std::vector<StdSize> *count = NULL);
[676]60            virtual void writeFile_     (CFile* file);
61            virtual void closeFile_     (void);
[321]62            virtual void syncFile_      (void);
[676]63            virtual void writeTimeAxis_ (CField* field,
[1542]64                                         const std::shared_ptr<CCalendar> cal);
[219]65
66         protected :
[488]67            void writeUnstructuredDomain (CDomain* domain);
[878]68            void writeUnstructuredDomainUgrid (CDomain* domain);
[219]69            void writeLocalAttributes(int ibegin, int ni, int jbegin, int nj, StdString domid);
[628]70            void writeLocalAttributes_IOIPSL(const StdString& dimXid, const StdString& dimYid,
71                                             int ibegin, int ni, int jbegin, int nj, int ni_glo, int nj_glo, int rank, int size);
[219]72            void writeTimeAxisAttributes(const StdString & axis_name,
73                                         const StdString & calendar,
74                                         const StdString & units,
75                                         const StdString & time_origin,
[488]76                                         const StdString & time_bounds   = StdString("bounds"),
[219]77                                         const StdString & standard_name = StdString("time"),
[613]78                                         const StdString & long_name     = StdString("Time axis"));
[219]79
80            void writeFileAttributes(const StdString & name,
81                                     const StdString & description,
82                                     const StdString & conventions,
83                                     const StdString & production,
84                                     const StdString & timeStamp);
85
86            void writeMaskAttributes(const StdString & mask_name,
87                                     int data_dim,
88                                     int data_ni     = 0,
89                                     int data_nj     = 0,
90                                     int data_ibegin = 0,
91                                     int data_jbegin = 0);
92
93            void writeAxisAttributes(const StdString & axis_name,
94                                     const StdString & axis,
95                                     const StdString & standard_name,
96                                     const StdString & long_name,
97                                     const StdString & units,
98                                     const StdString & nav_model);
[369]99
[1158]100            StdSize getRecordFromTime(Time time, double factorUnit);
[707]101
[219]102         private :
103
104            /// Traitement ///
105            StdString getTimeStamp(void) const;
106
[774]107            bool isWrittenDomain(const std::string& domainName) const;
108            bool isWrittenCompressedDomain(const std::string& domainName) const;
109            bool isWrittenAxis(const std::string& axisName) const;
110            bool isWrittenCompressedAxis(const std::string& axisName) const;
[887]111            bool isWrittenScalar(const std::string& scalarName) const;
[774]112
113            void setWrittenDomain(const std::string& domainName);
114            void setWrittenCompressedDomain(const std::string& domainName);
115            void setWrittenAxis(const std::string& axisName);
116            void setWrittenCompressedAxis(const std::string& axisName);
[887]117            void setWrittenScalar(const std::string& scalarName);
[774]118
[219]119            /// Propriétés privées ///
[1639]120            MPI_Comm comm_file;
[219]121            const StdString filename;
[707]122            std::map<Time, StdSize> timeToRecordCache;
123
[774]124            std::set<std::string> writtenDomains, writtenCompressedDomains;
125            std::set<std::string> writtenAxis, writtenCompressedAxis;
[887]126            std::set<std::string> writtenScalar;
[1158]127
128            enum { none, centered, instant, record} timeCounterType ;
129            bool hasTimeInstant ;
130            bool hasTimeCentered ;
[2381]131       
[2389]132            std::multimap< StdString, pair<size_t,CAxis*> > relAxis_;
[2388]133            std::multimap< StdString, pair<size_t,CDomain*> > relDomains_;
[2381]134
[219]135      }; // class CNc4DataOutput
136
[335]137} // namespace xios
[219]138
[591]139#endif //__XIOS_NC4_DATA_OUTPUT__
Note: See TracBrowser for help on using the repository browser.