[[Category:Software]]
= Généralités =
NetCDF (pour ''Network Common Data Form'') est :
* une interface pour un accès aux données orienté tableaux et
* une bibliothèque qui fournit une implémentation de cette interface.
Son format de données autodocumenté et indépendant de l'architecture matérielle permet la création, l'accès et le partage de données scientifiques.
Plusieurs modifications ont été apportées à la bibliothèque avec la version 4 mise en production en 2008; il ne sera pas question ici des versions précédentes. NetCDF 4.x est rétrocompatible, mais les versions antérieures ne peuvent utiliser les nouveaux fichiers.
* Site web du projet : https://www.unidata.ucar.edu/software/netcdf
* Documentation : https://www.unidata.ucar.edu/software/netcdf/docs
* Fichiers à télécharger : https://www.unidata.ucar.edu/downloads/netcdf/index.jsp
* FAQ : https://www.unidata.ucar.edu/software/netcdf/docs/faq.html
== Points forts ==
* Les données sont indépendantes de l'architecture matérielle ([hhttps://fr.wikipedia.org/wiki/Endianness boutisme ou ''endianness'']).
* Les données structurées en unités physiques permettent le suivi de l'information pertinente.
* NetCDF4 écrit et lit en parallèle si construit avec une version parallèle de [[HDF5/fr|HDF5]].
* Les données peuvent être compressées à l'écriture.
* Interface plus simple que HDF5.
* Gratuit pour la plupart des plateformes.
== Points faibles ==
* L'interface Python ne permet pas la parallélisation (version 1.0.5).
* Certains fichiers produits avec [[HDF5/fr|HDF5]] ne peuvent être lus par NetCDF.
= Guide de démarrage=
Nous abordons ici les détails de configuration.
== Modules d'environnement==
Les [[Utiliser des modules|modules]] suivants sont disponibles via CVMFS :
* '''netcdf'''
** pour lier avec les programmes contenant uniquement des instructions en C
* '''netcdf-c++'''
** pour lier avec les programmes contenant des instructions en C et en C++
* '''netcdf-fortran'''
** pour lier avec les programmes contenant des instructions en Fortran
D'autres modules utilisent [[MPI/fr|MPI]] pour permettre des entrées/sorties en parallèle :
* '''netcdf-mpi'''
** pour lier avec les programmes contenant des instructions en C et faisant appel à des bibliothèques MPI
* '''netcdf-c++-mpi'''
** pour lier avec les programmes contenant des instructions en C et C++ et faisant appel à des bibliothèques MPI
* '''netcdf-fortran-mpi'''
** pour lier avec les programmes contenant des instructions en Fortran et faisant appel à des bibliothèques MPI
Exécutez module avail netcdf
pour connaître les versions disponibles pour le compilateur et les modules MPI que vous avez chargés. Pour la liste complète des modules NetCDF, exécutez module -r spider '.*netcdf.*'
.
Utilisez module load netcdf/version
pour configurer l'environnement selon la version sélectionnée. Par exemple, pour charger la bibliothèque NetCDF version 4.1.3 pour C, lancez
{{Command|module load netcdf/4.1.3}}
== Soumettre un script ==
Consultez [[Running_jobs/fr|Exécuter des tâches]] pour des exemples de scripts soumis à l'ordonnanceur Slurm. Nous vous recommandons d'inclure la commande module load ...
dans votre script.
== Lier des programmes à des bibliothèques NetCDF ==
Les exemples qui suivent montrent comment lier des bibliothèques NetCDF à des programmes en C et en Fortran.
=== NetCDF en série===
Programme en C ː
{{Commands
|module load netcdf/4.4.1
|gcc example.c -lnetcdf
}}
Programme en Fortran ː il faut spécifier deux bibliothèques dans l'ordre approprié.
{{Commands
|module load gcc netcdf-fortran
|gfortran example.f90 -I$EBROOTNETCDFMINFORTRAN/include -lnetcdf -lnetcdff
}}
=== NetCDF en parallèle ===
Programme en C faisant appel à MPI ː
{{Commands
|module load netcdf-mpi
|gcc example.c -lnetcdf
}}
=== Exemple ===
Dans [https://www.unidata.ucar.edu/software/netcdf/netcdf-4/newdocs/netcdf-tutorial/simple_005fxy_005fwr_002ec.html#simple_005fxy_005fwr_002ec cet exemple], un fichier NetCDF est créé et contient une seule variable bidimensionnelle nommée ''data'' dont les dimensions sont ''x'' et ''y''.
Pour compiler l'exemple,
{{Commands
|module load netcdf
|gcc ex_netcdf4.c -lnetcdf
}}
== Utilitaires ==
Plusieurs utilitaires peuvent lire et écrire des fichiers selon différents formats.
* ncdump
: Cet outil génère la représentation texte CDL d'un ensemble de données netCDF avec l'option d'exclure certaines ou toutes les données variables. Le résultat peut en principe être utilisé en entrée avec ncgen. ncdump et ncgen peuvent donc être employés pour convertir une représentation binaire en représentation texte et vice versa. Consultez [https://www.unidata.ucar.edu/software/netcdf/netcdf-4/newdocs/netcdf/ncdump.html la section ncdump] du site web UCAR.
* ncgen
: À l'inverse de ncdump, cet outil génère un fichier binaire NetCDF. Consultez [https://www.unidata.ucar.edu/software/netcdf/netcdf-4/newdocs/netcdf/ncgen.html#ncgen la section ncgen].
*nccopy
: Copie un fichier netCDF en pouvant modifier le format binaire, la taille des blocs, la compression et d'autres paramètres de stockage. Consultez [https://www.unidata.ucar.edu/software/netcdf/workshops/2011/utilities/Nccopy.html la section nccopy].
Pour vous aider à trouver les commandes pour lier et compiler, utilisez les utilitaires nf-config
et nc-config
; consultez la [https://www.unidata.ucar.edu/software/netcdf/workshops/2012/utilities/Nc-config.html documentation].
= PnetCDF =
PnetCDF est une autre bibliothèque pour la lecture et l'écriture de fichiers au format NetCDF. Les noms de ses procédures sont différents de ceux de NetCDF. La bibliothèque offre aussi des procédures non-blocantes. Consultez [https://trac.mcs.anl.gov/projects/parallel-netcdf le site web PnetCDF] pour plus d'information.