NetCDF

De Wiki de Calcul Québec
Aller à : Navigation, rechercher
Autres langues :anglais 100% • ‎français 100%

Description

NetCDF (Network Common Data Form) est une bibliothèque pour une mise en forme de données indépendante de l'architecture utilisée. La bibliothèque est utile pour la création, la lecture et le transfert de données scientifiques. Il y a eu d'importantes modifications à la bibliothèque avec l'arrivée de la version 4. Puisque que celle-ci date de 2008, nous ne nous attarderons qu'à cette version. Notez toutefois que les diveres versions 4 peuvent lire un fichier produit par une version antérieure, mais l'opposé n'est pas vrai.

Le téléchargement d'une version de NetCDF et de sa documentation peut être fait en ligne. NetCDF peut également être installé avec l'outil Git. Plusieurs interfaces sont disponibles : C, Fortran, C++, Java et Python. Notez que l'interface Python distribuée dans Scipy.IO est bâtie sur la version 3 de NetCDF. L'interface de la version 4 est disponible via netcdf4-python.

Avantages et inconvénients

Voici une courte liste des principaux avantages et inconvénients de la bibliothèque NetCDF4 :

  • Les données sont indépendantes de l'architecture (boutisme).
  • Les données sont structurées de façon à retenir toute information pertinente (e.g., unité physique).
  • Si bâtie sur HDF5 et que celle-ci est parallèle, NetCDF4 pourra faire de l'écriture ou de la lecture en parallèle.
  • Il est possible de compresser les données à l'écriture.
  • Interface plus simple que celle de HDF5.
  • C'est un logiciel libre disponible pour la plupart des plateformes.
  • L'interface Python ne supporte pas le parallélisme (version 1.0.5).
  • Certains fichiers produits avec HDF5 ne peuvent être lus avec la bibliothèque NetCDF.

Exemple

L'exemple qui suit montre comment sauvegarder des données associées à deux dimensions x et y au format NetCDF4.


Fichier : ex_netcdf4.c
/**
Write the simple_xy file, with some of the features of netCDF-4.
 
This is a very simple example which is based on the simple_xy example,
but whch uses netCDF-4 features, such as compression.
 
This program writes a 2D netCDF variable (called "data") and fills it
with sample data.  It has two dimensions, "x" and "y".
 
Full documentation for netCDF can be found at:
http://www.unidata.ucar.edu/netcdf/docs
*/
#include <stdlib.h>
#include <stdio.h>
#include <netcdf.h>
 
/* Nom du fichier qui sera créé. */
#define FILE_NAME "simple_xy_nc4.nc"
 
/* Nous écrirons des données 2D sur une grille 60 x 120. */
#define NDIMS 2
#define NX 60
#define NY 120
 
/* Définit comment traiter les erreurs. */
#define ERRCODE 2
#define ERR(e) {printf("Error: %s\n", nc_strerror(e)); exit(ERRCODE);}
 
int
main()
{
   int ncid, x_dimid, y_dimid, varid;
   int dimids[NDIMS];
   size_t chunks[NDIMS];
   int shuffle, deflate, deflate_level;
   int data_out[NX][NY];
   int x, y, retval;
 
   /* Établit les blocs et remaniement. */
   shuffle = NC_SHUFFLE;
   deflate = 1;
   deflate_level = 1;
 
   /* Crée des données bidon. */
   for (x = 0; x < NX; x++)
      for (y = 0; y < NY; y++)
         data_out[x][y] = x * NY + y;
 
   /* Crée le fichier. Le paramètre NC_NETCDF4 indique que le type du
    * fichier est netCDF-4/HDF5. */
   if ((retval = nc_create(FILE_NAME, NC_NETCDF4, &ncid)))
      ERR(retval);
 
   /* Définit les dimensions. */
   if ((retval = nc_def_dim(ncid, "x", NX, &x_dimid)))
      ERR(retval);
   if ((retval = nc_def_dim(ncid, "y", NY, &y_dimid)))
      ERR(retval);
 
   /* Crée les variables. */
   dimids[0] = x_dimid;
   dimids[1] = y_dimid;
   chunks[0] = NX/4;
   chunks[1] = NY/4;
 
   /* Définit les variables. */
   if ((retval = nc_def_var(ncid, "data", NC_INT, NDIMS,
                            dimids, &varid)))
      ERR(retval);
   if ((retval = nc_def_var_chunking(ncid, varid, 0, &chunks[0])))
      ERR(retval);
   if ((retval = nc_def_var_deflate(ncid, varid, shuffle, deflate,
                                    deflate_level)))
      ERR(retval);
 
   /* Écrit les données dans le fichier */
   if ((retval = nc_put_var_int(ncid, varid, &data_out[0][0])))
      ERR(retval);
 
   /* Ferme le fichier. */
   if ((retval = nc_close(ncid)))
      ERR(retval);
 
   printf("*** SUCCÈS pour écriture du fichier simple_xy_nc4.nc!\n");
   return 0;
}


La compilation de cet exemple peut être fait de la façon suivante lorsque les bibliothèques NetCDF4 et HDF5 sont dans votre environnement de travail.

[nom@serveur $] icc ex_netcdf4.c -lnetcdf


Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager