2016-04-26 5 views
1

Mein Modell erzeugt eine netcdf-Datei für jeden Zeitschritt und jede Variable, mit dem Namen DDDDDDD.VVV.nc, wobei DDDDDDD das Datum und VVV der Variablenname ist.ncks append langsam für mehrere kleine netcdf-Dateien

Für jeden Zeitschritt verwende ich nco, um die Dateien, die den verschiedenen Variablen entsprechen, anzufügen, um eine Datei pro Zeitschritt zu erhalten.

#! /bin/bash 
# looping on timesteps to merge all variables 
# I use one variable 'O2o' to get the list of timesteps                                          
for timesteps in *.O2o.nc; 
do 
    timestep=$(echo $timesteps| cut -b -21) 
    echo $timestep 
    for var in $timestep*.nc; 
    do 
    ncks -Ah $var 'F1_'$timestep.nc 
    done 
done 

Es gibt etwa 432 Ausgänge-Variablen, und jede Datei wird über 6,4K oder 1,1K (die Variablen nicht die gleiche Anzahl von Dimensionen haben).

Ich finde den Prozess sehr langsam (zB. 15 Sekunden pro Zeitschritt), während die Dateien sehr klein sind. Irgendeine Idee, wie ich das Skript optimieren sollte?

Antwort

4

Die Langsamkeit ist wahrscheinlich auf Öffnen, Verschieben von Daten, Hinzufügen von Daten und Schließen von Dateien 432 Mal zurückzuführen. Um dies zu optimieren, reduzieren Sie die Anzahl der Dateioperationen, insbesondere das Anfügen (was bewirkt). Versuchen Sie, alle Daten gleichzeitig in eine netCDF4-Datei zu schreiben (in Gruppen), und reduzieren Sie die Datei dann in netCDF3. Für jeden Zeitschritt wird es wie folgt aussehen:

ncecat --gag in*.nc all_group.nc 
ncks -3 -G : all_group.nc all_flat.nc 

Zwei Befehle statt 432. Wenn alle Variablen in mehr als eine Eingabedatei angezeigt werden, erhalten Sie einen Fehler erhalten, dass eine Variable würde mehrfach in all_flat.nc definiert werden . Vermeiden Sie dies, indem Sie die doppelten Eingaben entfernen.

Verwandte Themen