source: XMLIO_V2/dev/dev_rv/src4/xmlio/netcdf/inetcdf4.hpp @ 216

Last change on this file since 216 was 216, checked in by hozdoba, 10 years ago
File size: 6.0 KB
Line 
1/* ************************************************************************** *
2 *      Copyright © IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
3 * ************************************************************************** */
4
5#ifndef __INETCDF4_HPP__
6#define __INETCDF4_HPP__
7
8/**
9 * \file    inetcdf4.hpp
10 * \brief   Lecture des fichiers de données au format netCDF-4 (entête).
11 * \author  Hervé Ozdoba
12 * \version 0.4
13 * \date    15 Juin 2011
14 */
15
16#ifndef __XIOS_NO_EXTERN
17
18// M(essage) P(assing) I(nterface) headers
19#include <mpi.h>
20
21// NetCDF headers
22#define MPI_INCLUDED
23#include <netcdf.h>
24
25#endif // __XIOS_NO_EXTERN
26
27// XMLIOServer headers
28#include "xmlioserver_spl.hpp"
29
30// ////////////////////////////// Déclarations ///////////////////////////// //
31
32namespace xmlioserver
33{
34   /// \brief Espace de nommage permettant de traiter les Entrées/Sorties sous divers formats.
35   namespace io
36   {
37      /**
38       * \class CINetCDF4
39       * \brief Classe permettant de lire les fichiers de données au format netCDF-4.
40       */
41      class CINetCDF4
42      {
43         public : // Définition de type
44           
45            //! \brief Redéfinition de std::vector<std::string> pour simplification d'écriture.
46            typedef std::vector<std::string> CNetCDF4Path;
47           
48         public : // Constructeurs
49         
50            //! \brief Constructeur simple.
51            CINetCDF4(void); // NIY
52           
53            /*!
54             * \brief Constructeur à partir d'un nom de fichier au format netCDF4.
55             * \param _filename : un nom de fichier au format netCDF4.
56             */
57            explicit CINetCDF4(const std::string & _filename);
58           
59            /*!
60             * \brief Constructeur par copie .
61             * \param _inetcdf4 : référence de l'objet à copier.
62             */
63            CINetCDF4(const CINetCDF4 & _inetcdf4);// NIY
64           
65            /*!
66             * \brief Constructeur par copie.
67             * \param _inetcdf4_ptr : le pointeur sur l'objet à copier.
68             */
69            CINetCDF4(const CINetCDF4 * const _inetcdf4_ptr); // NIY
70           
71         public : // Destructeur
72         
73            //! \brief Destructeur de l'objet (le fichier est clos lors de son appel).
74            ~CINetCDF4(void);
75
76         protected : // Accesseurs protégés
77         
78            /*!
79             * \brief Retourne l'identifiant du groupe courant
80             * (le chemin est gardée en mémoire dans la variable path).
81             * \return  l'identifiant du groupe courant
82             * \see path
83             */
84            int getCurrentGroup(void);
85           
86            /*!
87             * \brief Retourne l'identifiant du groupe  dont le chemin est passé en argument.
88             * \param _path : Un chemin dans la structure de donnée netCDF.
89             * \return l'identifiant du groupe.
90             *
91             * <i> Exemple d'utilisation: </i>
92             * \code
93             * //> Retourne l'identifiant d'un group.
94             * CINetCDF4 ncinput(std::string("mon_fichier.nc"));
95             * CNetCDF4Path path;
96             * path.push_back("mes_donnees"); path.push_back("mes_tableaux");
97             * int groupid = ncinput.getGroup(path);
98             * \endcode
99             */
100            int getGroup(const CNetCDF4Path & _path);
101           
102            /*!
103             * \brief Retourne l'identifiant d'une variable dans le groupe courant.
104             * \param _varname : Le nom d'une variable dans le fichier de données.
105             * \return l'identifiant de la variable.
106             */
107            int getVariable(const std::string & _varname);
108           
109            /*!
110             * \brief Retourne l'identifiant d'une dimension dans le groupe courant.
111             * \param _dimname : Le nom d'une dimension dans le  fichier de données.
112             * \return l'identifiant de la dimension.
113             */
114            int getDimension(const std::string & _dimname);
115           
116            /*!
117             * \brief Retourne les dimensions d'une variable.
118             * \param _varname : Le nom d'une variable dans le  fichier de données.
119             * \return Un vecteur des dimensions associées à la variables
120             */
121            std::vector<std::size_t> getDimensions(const std::string & _varname);
122           
123            /*!
124             * \brief Retourne l'identifiant de la dimension non limité dans le fichier.
125             * \return l'identifiant de la dimension non limité.
126             */
127            int getUnlimitedDimension(void);
128           
129            /*!
130             * \brief Indique si une variable existe dans le groupe courant.
131             * \param _varname : Le nom d'une variable dans le  fichier de données.
132             * \return  <b>true</b> si la variable existe, <b>false</b> sinon.
133             */
134            bool varExist(const std::string & _varname);
135
136
137         private : // Vérification des erreurs NetCDF
138
139            /*!
140             * \brief Vérifie le code d'erreur retourné lors de l'appel d'une fonction
141             * dans la bibliothÚque netCDF afin de détecter les erreurs.
142             * \param _status : le code d'erreur retourné par l'appel d'une fonction netCDF.
143             * \remarks Tous les appels de fonction dans la bibliothÚque netCDF doivent être
144             * pris en charge par cette méthode statique.
145             *
146             * <i> Exemple d'utilisation: </i>
147             * \code
148             * //> Retourne l'identifiant d'une variable netCDF dont le nom est 'varname' dans le groupe grpid
149             * CheckError(nc_inq_varid (grpid, varname, varid));
150             * \endcode
151             */
152            static void CheckError(int _status);
153
154         public : // Propriétés privées
155         
156            CONetCDF4Path path; /*!< \brief Chemin vers le groupe de données en cours de lecture. */
157            int ncidp;          /*!< \brief Identifiant de fichiers netCDF. */
158         
159      }; // class CINetCDF4
160   } // namespace io
161
162} // namespace xmlioserver
163
164#endif  // __INETCDF4_HPP__
Note: See TracBrowser for help on using the repository browser.