source: XMLIO_V2/dev/dev_rv/src/xmlio/output/onetcdf4.hpp @ 183

Last change on this file since 183 was 183, checked in by hozdoba, 12 years ago
File size: 3.7 KB
Line 
1#ifndef __XMLIO_INETCDF4__
2#define __XMLIO_INETCDF4__
3
4/// xmlioserver headers ///
5#include "xmlioserver_spl.hpp"
6#include "exception.hpp"
7#include "array.hpp"
8#include "mask.hpp"
9#include "data_output.hpp"
10#include "mpi_manager.hpp"
11
12#include <mpi.h>
13#define MPI_INCLUDED
14#include <netcdf.h>
15
16#ifndef UNLIMITED_DIM
17   #define UNLIMITED_DIM (size_t)(-1)
18#endif  //UNLIMITED_DIM
19
20namespace xmlioserver
21{
22   namespace io
23   {
24      /// ////////////////////// Déclarations ////////////////////// ///
25      class CONetCDF4
26         : public virtual CDataOutput
27      {
28         public :
29
30            /// Définition de type ///
31            typedef std::vector<StdString> CONetCDF4Path;
32
33            /// Constructeurs ///
34            CONetCDF4(const StdString & filename, bool exist, const MPI_Comm * comm = NULL);
35            CONetCDF4(const StdString & filename, bool exist, const comm::MPIComm * comm, bool);
36
37            CONetCDF4(const CONetCDF4 & onetcdf4);       // Not implemented.
38            CONetCDF4(const CONetCDF4 * const onetcdf4); // Not implemented.
39
40
41            /// Initialisation ///
42            void initialize(const StdString & filename, bool exist, const MPI_Comm * comm);
43            void definition_start(void);
44            void definition_end(void);
45
46            /// Mutateurs ///
47            void setCurrentPath(const CONetCDF4Path & path);
48
49            int addGroup(const StdString & name);
50            int addDimension(const StdString& name, const StdSize size = UNLIMITED_DIM);
51            int addVariable(const StdString & name, nc_type type,
52                                    const std::vector<StdString> & dim);
53            template <class T>
54               void addAttribute
55                  (const StdString & name, const T & value, const StdString * varname = NULL);
56
57            /// Ecriture des données ///
58            template <class T>
59               void writeData(const ARRAY(T, 1) data, const StdString & name,
60                              bool collective, StdSize record,
61                              const std::vector<StdSize> * start = NULL,
62                              const std::vector<StdSize> * count = NULL);
63
64            void writeData(const ARRAY(int, 2) data, const StdString & name);
65
66            /// Accesseur ///
67            const CONetCDF4Path & getCurrentPath(void) const;
68
69            /// Destructeur ///
70            virtual ~CONetCDF4(void);
71
72         protected :
73
74            /// Ecriture ///
75            virtual void writeField_ (const boost::shared_ptr<tree::CField>  field)  = 0;
76            virtual void writeDomain_(const boost::shared_ptr<tree::CDomain> domain) = 0;
77            virtual void writeAxis_  (const boost::shared_ptr<tree::CAxis>   axis)   = 0;
78
79            /// Accesseurs ///
80            int getCurrentGroup(void);
81            int getGroup(const CONetCDF4Path & path);
82            int getVariable(const StdString & varname);
83            int getDimension(const StdString & dimname);
84            std::vector<StdSize> getDimensions(const StdString & varname);
85            int getUnlimitedDimension(void);
86
87         private :
88
89            void getWriteDataInfos(const StdString & name, StdSize record, StdSize & array_size,
90                                   std::vector<StdSize> & sstart,
91                                   std::vector<StdSize> & scount,
92                                   const std::vector<StdSize> * start,
93                                   const std::vector<StdSize> * count);
94
95            /// Vérification des erreurs NetCDF ///
96            void CheckError(int status);
97
98            /// Propriétés privées ///
99            CONetCDF4Path path;
100            int ncidp;
101            bool wmpi;
102
103      }; // class CONetCDF4
104
105   } // namespace io
106} // namespace xmlioserver
107
108#endif //__XMLIO_INETCDF4__
Note: See TracBrowser for help on using the repository browser.