# NetCDF

Network Common Data Format (netCDF) ist ein Dateiformat für den Austausch wissenschaftlicher Daten. Es handelt sich um ein binäres Dateiformat, das durch die Angabe der Byte-Reihenfolge im Header maschinenunabhängig ist. NetCDF ist ein offener Standard; das Projekt wird von der University Corporation for Atmospheric Research (UCAR) betreut.
NetCDF basiert zwar auf dem ähnlich klingenden Common Data Format (CDF) der NASA, hat sich jedoch von diesem fortentwickelt und ist nicht mehr kompatibel. Aktuell ist die netCDF-Version 4 (netCDF4). Version 4 baut auf Hierarchical Data Format Version 5 (HDF5) auf und beinhaltet dadurch HDF5 Features wie Deflate (Komprimierung). Version 3 war noch unabhängig von Hierarchical Data Format. Die netCDF4-Bibliothek erlaubt es weiterhin mit Dateien im klassischen netCDF (netCDF Version 3) zu arbeiten.
Verwendung findet netCDF vor allem in der Erdsystemmodellierung (z. B. in der numerischen Wettervorhersage oder der Klimatologie) und kann in Geoinformationssystemen genutzt werden.

## Formatbeschreibung

Das Dateiformat ist selbstbeschreibend – es gibt einen Header, in dem neben Metadaten (in Form von geordneten Paaren aus Schlüsseln und Attributen) auch die Struktur des Datenbereichs beschrieben ist. Die Daten selbst sind als (ein- oder mehrdimensionale) Arrays abgelegt, was einen schnellen Zugriff ermöglicht.
Die Programmierschnittstelle (API, für engl. application programming interface) der Version 3 unterscheidet sich deutlich vom API der Version 2, das jedoch zur Rückwärtskompatibilität vollständig enthalten ist. Die aktuelle Version 4 des netCDF-APIs verwendet als Basis das HDF5-Format, jedoch ist diese API auch rückwärtskompatibel zu den alten Datenformaten. Damit werden für netCDF-Programme bei Verwendung des neuen Formats neue Funktionen möglich, beispielsweise größere Dateien und eine unbegrenzte Anzahl an Datendimensionen. Somit soll die Leistungsfähigkeit des HDF5-Formats mit der einfachen Benutzung des netCDF-APIs kombiniert werden.

## Software

Von der UCAR gibt es eine Programmbibliothek, die Lese- und Schreibzugriff auf netCDF-Dateien bietet. Diese Bibliothek ist in C geschrieben, es gibt jedoch Schnittstellen zu C++, Fortran, R, Perl, Python, Ruby, Matlab, IDL und Octave. Zudem gibt es von UCAR noch eine Implementierung in Java.
Folgende Programme zur Arbeit mit netCDF Dateien sind verfügbar:
* nur Visualisierung:
** NcBrowse: Ein netCDF-Dateibetrachter mit Unterstützung für Grafik, Animationen und 3D-Visualisierung. Es ist lauffähig unter Linux, macOS und Microsoft Windows.
** NcView: Ein einfacher netCDF-Dateibetrachter; bietet Animationen, Veränderung der Farbpalette, Betrachtung verschiedener Dimensionen der Datensätze etc. Es ist lauffähig unter Linux und macOS.
** Panoply: In Java geschriebener netCDF-Dateibetrachter, entwickelt vom Goddard Institute for Space Studies mit Schwerpunkt auf die Darstellung von Geodaten und Unterstützung von Kartenprojektionen. Es ist lauffähig unter Linux, macOS und Microsoft Windows.
* nur Verarbeitung:
** Climate Data Operators (cdo): Ein Kommandozeilenprogramm mit vielfältigen Operatoren zur Verarbeitung von Daten im netCDF und GRIB Format.
** NetCDF Operators (NCO): Eine Sammlung von Programmen zur Analyse und Bearbeitung von netCDF-Dateien.
** OpenChrom kann Chromatogramme im Analytical Data Interchange Format importieren und schreiben.
* Skriptsprachen zur Verarbeitung und Visualisierung:
** Ferret Data Visualization and Analysis: Visualisierungsprogramm für Ozeanographen und Meteorologen, mit einer Mathematica-ähnlichen interaktiven Schnittstelle und Auswahlmöglichkeit für beliebig geformte Ausschnitte.
** NCAR Command Language (NCL): Eine Sprache zur wissenschaftlichen Verarbeitung und Visualisierung von Daten in den Formaten netCDF, HDF, GRIB, shape und ASCII.
* Python-Module:
** netcdf4-python: offizielles Python-Interface zur netCDF-C-Bibliothek von Unidata
** PyNIO: Python-Modul zum Zugriff auf unterschiedliche Dateiformate wie beispielsweise netCDF, HDF und GRIB
** xarray: Python-Modul basierend auf NumPy und pandas

## Parallel netCDF

Für den Einsatz auf Parallelrechnern wurde Parallel netCDF vom Argonne National Laboratory und der Northwestern University entwickelt. Dieses basiert auf MPI-I/O, der I/O-Erweiterung von MPI.