New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
inetcdf4.hpp in vendors/XIOS/current/src/input – NEMO

source: vendors/XIOS/current/src/input/inetcdf4.hpp @ 3428

Last change on this file since 3428 was 3428, checked in by rblod, 12 years ago

importing initial XIOS vendor drop

File size: 9.9 KB
Line 
1#ifndef __XMLIO_INETCDF4__
2#define __XMLIO_INETCDF4__
3
4/// xios headers ///
5#include "xmlioserver_spl.hpp"
6#include "exception.hpp"
7#include "array.hpp"
8
9#include <mpi.h>
10#define MPI_INCLUDED
11#include <netcdf.h>
12
13#ifndef UNLIMITED_DIM
14   #define UNLIMITED_DIM (size_t)(-1)
15#endif  //UNLIMITED_DIM
16
17namespace xios
18{
19      /// ////////////////////// Déclarations ////////////////////// ///
20      typedef std::vector<StdString> CVarPath;
21
22      class CINetCDF4
23      {
24         public :
25
26            /// Constructeurs ///
27            CINetCDF4(void);                             // Not implemented.
28            CINetCDF4(const StdString & filename);
29            CINetCDF4(const CINetCDF4 & inetcdf4);       // Not implemented.
30            CINetCDF4(const CINetCDF4 * const inetcdf4); // Not implemented.
31
32         //-------------------------------------------------------------
33
34            /// Accesseurs ///
35            StdSize getNbOfTimestep(const CVarPath  * const path = NULL);
36
37            StdString getUnlimitedDimensionName(const CVarPath  * const path = NULL);
38
39            StdString getCoordinatesId(const StdString & name,
40                                       const CVarPath  * const path = NULL);
41
42            StdString getBoundsId(const StdString & name,
43                                  const CVarPath  * const path = NULL);
44
45            StdString getLonCoordName(const StdString & varname,
46                                      const CVarPath  * const path = NULL);
47            StdString getLatCoordName(const StdString & varname,
48                                       const CVarPath  * const path = NULL);
49            StdString getVertCoordName(const StdString & varname,
50                                       const CVarPath  * const path = NULL);
51
52            std::set<StdString> getCoordVariables(const CVarPath * const path = NULL);
53            std::set<StdString> getBoundVariables(const CVarPath * const path = NULL);
54
55            std::list<StdString> getGroups   (const CVarPath * const path = NULL);
56            std::list<StdString> getVariables(const CVarPath * const path = NULL);
57
58            std::list<StdString> getDataVariables(bool _is3D       = true,
59                                                  bool _isRecti    = true,
60                                                  bool _isCurvi    = true,
61                                                  bool _isUnstr    = true,
62                                                  bool _isCellData = true,
63                                                  bool _isTemporal = true,
64                                                  const CVarPath * const path = NULL);
65
66            std::list<StdString> getAttributes
67                                (const StdString * const var  = NULL,
68                                 const CVarPath  * const path = NULL);
69
70            std::list<StdString> getDimensionsList
71                                (const StdString * const var  = NULL,
72                                 const CVarPath  * const path = NULL);
73
74            std::list<StdString> getCoordinatesIdList(const StdString & name,
75                                                      const CVarPath  * const path = NULL);
76
77            std::map<StdString, StdSize> getDimensions (const StdString * const var  = NULL,
78                                          const CVarPath  * const path = NULL);
79
80            StdSize getNbVertex(const StdString & name,
81                                const CVarPath  * const path = NULL);
82         //-------------------------------------------------------------
83
84            template <class T>
85               T getMissingValue(const StdString & name,
86                                 const CVarPath  * const path = NULL);
87
88            template <class T>
89               T getAttributeValue(const StdString & name,
90                                   const StdString * const var  = NULL,
91                                   const CVarPath  * const path = NULL);
92
93            template <class T>
94               void getData(ARRAY(T, 1) data,
95                            const StdString & var,
96                            const CVarPath  * const path = NULL,
97                            StdSize record   = UNLIMITED_DIM);
98
99         //-------------------------------------------------------------
100
101            /// Tests ///
102            bool hasMissingValue(const StdString & name,
103                                 const CVarPath  * const path = NULL);
104
105            bool hasAttribute(const StdString & name,
106                              const StdString * const var  = NULL,
107                              const CVarPath  * const path = NULL);
108
109            bool hasVariable(const StdString & name,
110                             const CVarPath  * const path = NULL);
111
112            bool hasCoordinates(const StdString & name,
113                                const CVarPath  * const path = NULL);
114
115            bool hasTemporalDim(const CVarPath  * const path = NULL);
116
117            bool hasBounds(const StdString & name,
118                           const CVarPath  * const path = NULL);
119
120         //-------------------------------------------------------------
121
122            bool isBound(const StdString & name,
123                         const CVarPath  * const path = NULL);
124            bool isCoordinate(const StdString & name,
125                              const CVarPath  * const path = NULL);
126            bool isRectilinear(const StdString & name,
127                               const CVarPath  * const path = NULL);
128            bool isCurvilinear(const StdString & name,
129                               const CVarPath  * const path = NULL);
130            bool isUnknown(const StdString & name,
131                               const CVarPath  * const path = NULL);
132            bool isUnstructured(const StdString & name,
133                                const CVarPath  * const path = NULL);
134
135            bool isTemporal(const StdString & name,
136                            const CVarPath  * const path = NULL);
137            bool is3Dim(const StdString & name,
138                        const CVarPath  * const path = NULL);
139            bool isCellGrid(const StdString & name,
140                            const CVarPath  * const path = NULL);
141
142         //-------------------------------------------------------------
143
144            /// Destructeur ///
145            virtual ~CINetCDF4(void);
146
147         protected :
148
149         //-------------------------------------------------------------
150
151            /// Accesseurs ///
152            int getGroup   (const CVarPath * const path = NULL);
153            int getVariable(const StdString & varname,
154                            const CVarPath * const path = NULL);
155            int getDimension(const StdString & dimname,
156                             const CVarPath  * const path = NULL);
157            int getUnlimitedDimension(const CVarPath  * const path = NULL);
158            int getAttributeId(const StdString & name,
159                               const StdString * const var  = NULL,
160                               const CVarPath  * const path = NULL);
161
162            std::pair<nc_type , StdSize> getAttribute(const StdString & attname,
163                                                      const StdString * const var  = NULL,
164                                                      const CVarPath  * const path = NULL);
165
166         //-------------------------------------------------------------
167
168            void getDataInfo(const StdString & var, const CVarPath  * const path, StdSize record,
169                             std::vector<StdSize> & start, std::vector<StdSize> & count,
170                             StdSize & array_size);
171
172         private :
173
174            /// Vérification des erreurs NetCDF ///
175            static void CheckError(int status);
176
177            int ncidp; // Identifiant de fichier netcdf.
178
179      }; // class CINetCDF4
180
181      ///--------------------------------------------------------------
182      template <>
183         StdString CINetCDF4::getAttributeValue
184            (const StdString & name, const StdString * const var,
185                                     const CVarPath  * const path);
186
187      template <>
188         std::vector<double> CINetCDF4::getAttributeValue
189            (const StdString & name, const StdString * const var,
190                                     const CVarPath  * const path);
191
192      template <>
193         std::vector<float> CINetCDF4::getAttributeValue
194            (const StdString & name, const StdString * const var,
195                                     const CVarPath  * const path);
196
197      template <>
198         std::vector<int>  CINetCDF4::getAttributeValue
199            (const StdString & name, const StdString * const var,
200                                     const CVarPath  * const path);
201
202      template <>
203         std::vector<char>  CINetCDF4::getAttributeValue
204            (const StdString & name, const StdString * const var,
205                                     const CVarPath  * const path);
206
207      //---------------------------------------------------------------
208      template <>
209         int CINetCDF4::getMissingValue
210            (const StdString & name, const CVarPath  * const path);
211
212      template <>
213         double CINetCDF4::getMissingValue
214            (const StdString & name, const CVarPath  * const path);
215
216      template <>
217         float CINetCDF4::getMissingValue
218            (const StdString & name, const CVarPath  * const path);
219
220      //---------------------------------------------------------------
221      template <>
222         void CINetCDF4::getData(ARRAY(int, 1) data, const StdString & var,
223                                 const CVarPath  * const path, StdSize record);
224
225      template <>
226         void CINetCDF4::getData(ARRAY(double, 1) data, const StdString & var,
227                                 const CVarPath  * const path, StdSize record);
228
229      template <>
230         void CINetCDF4::getData(ARRAY(float, 1) data, const StdString & var,
231                                 const CVarPath  * const path, StdSize record);
232      ///--------------------------------------------------------------
233
234} // namespace xmlioserver
235
236#endif //__XMLIO_INETCDF4__
Note: See TracBrowser for help on using the repository browser.