source: XIOS/dev/branch_yushan_merged/src/io/nc4_data_output.hpp @ 1138

Last change on this file since 1138 was 1138, checked in by yushan, 4 years ago

test_remap back to work. No thread for now

  • 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: 5.8 KB
Line 
1#ifndef __XIOS_NC4_DATA_OUTPUT__
2#define __XIOS_NC4_DATA_OUTPUT__
3
4/// XIOS headers ///
5#include "xios_spl.hpp"
6#include "onetcdf4.hpp"
7#include "data_output.hpp"
8// mpi_std.hpp
9
10namespace xios
11{
12      /// ////////////////////// Déclarations ////////////////////// ///
13
14      class CNc4DataOutput
15         : protected CONetCDF4
16         , public virtual CDataOutput
17      {
18         public :
19
20            /// Définition de type ///
21            typedef CONetCDF4   SuperClassWriter;
22            typedef CDataOutput SuperClass;
23
24            /// Constructeurs ///
25            CNc4DataOutput
26               (CFile* file, const StdString & filename, bool exist);
27            CNc4DataOutput
28               (CFile* file, const StdString & filename, bool exist, bool useClassicFormat,
29                bool useCFConvention, MPI_Comm comm_file, bool multifile, 
30                bool isCollective = true, const StdString& timeCounterName = "time_counter");
31
32            CNc4DataOutput(const CNc4DataOutput & dataoutput);       // Not implemented.
33            CNc4DataOutput(const CNc4DataOutput * const dataoutput); // Not implemented.
34           
35            /// Accesseur ///
36            const StdString & getFileName(void) const;
37
38            /// Destructeur ///
39            virtual ~CNc4DataOutput(void);
40           
41            bool singleDomain ;
42            bool isCollective ;
43                     
44            CFile* file;
45                     
46         protected :
47
48            /// Ecriture ///
49            virtual void writeDomain_   (CDomain* domain);
50            virtual void writeAxis_     (CAxis* axis);
51            virtual void writeScalar_   (CScalar* scalar);
52            virtual void writeGridCompressed_(CGrid* grid);
53            virtual void writeTimeDimension_(void);
54            virtual void writeField_    (CField* field);
55            virtual void writeAttribute_(CVariable* var);
56            virtual void writeAttribute_(CVariable* var, const string& fieldId);
57            virtual void writeFieldData_(CField* field);
58            virtual void writeFile_     (CFile* file);
59            virtual void closeFile_     (void);
60            virtual void syncFile_      (void);
61            virtual void writeTimeAxis_ (CField* field,
62                                         const boost::shared_ptr<CCalendar> cal);
63
64         protected :
65            void writeUnstructuredDomain (CDomain* domain);
66            void writeUnstructuredDomainUgrid (CDomain* domain);
67            void writeLocalAttributes(int ibegin, int ni, int jbegin, int nj, StdString domid);
68            void writeLocalAttributes_IOIPSL(const StdString& dimXid, const StdString& dimYid,
69                                             int ibegin, int ni, int jbegin, int nj, int ni_glo, int nj_glo, int rank, int size);
70            void writeTimeAxisAttributes(const StdString & axis_name,
71                                         const StdString & calendar,
72                                         const StdString & units,
73                                         const StdString & time_origin,
74                                         const StdString & time_bounds   = StdString("bounds"),
75                                         const StdString & standard_name = StdString("time"),
76                                         const StdString & long_name     = StdString("Time axis"));
77
78            void writeFileAttributes(const StdString & name,
79                                     const StdString & description,
80                                     const StdString & conventions,
81                                     const StdString & production,
82                                     const StdString & timeStamp);
83
84            void writeMaskAttributes(const StdString & mask_name,
85                                     int data_dim,
86                                     int data_ni     = 0,
87                                     int data_nj     = 0,
88                                     int data_ibegin = 0,
89                                     int data_jbegin = 0);
90
91            void writeAxisAttributes(const StdString & axis_name,
92                                     const StdString & axis,
93                                     const StdString & standard_name,
94                                     const StdString & long_name,
95                                     const StdString & units,
96                                     const StdString & nav_model);
97
98            StdSize getRecordFromTime(Time time, double factorUnit);
99
100         private :
101
102            /// Traitement ///
103            StdString getTimeStamp(void) const;
104
105            bool isWrittenDomain(const std::string& domainName) const;
106            bool isWrittenCompressedDomain(const std::string& domainName) const;
107            bool isWrittenAxis(const std::string& axisName) const;
108            bool isWrittenCompressedAxis(const std::string& axisName) const;
109            bool isWrittenScalar(const std::string& scalarName) const;
110
111            void setWrittenDomain(const std::string& domainName);
112            void setWrittenCompressedDomain(const std::string& domainName);
113            void setWrittenAxis(const std::string& axisName);
114            void setWrittenCompressedAxis(const std::string& axisName);
115            void setWrittenScalar(const std::string& scalarName);
116
117            /// Propriétés privées ///
118            MPI_Comm comm_file;
119            const StdString filename;
120            std::map<Time, StdSize> timeToRecordCache;
121
122            std::set<std::string> writtenDomains, writtenCompressedDomains;
123            std::set<std::string> writtenAxis, writtenCompressedAxis;
124            std::set<std::string> writtenScalar;
125
126            enum { none, centered, instant, record} timeCounterType ;
127            bool hasTimeInstant ;
128            bool hasTimeCentered ;
129      }; // class CNc4DataOutput
130
131} // namespace xios
132
133#endif //__XIOS_NC4_DATA_OUTPUT__
Note: See TracBrowser for help on using the repository browser.