Show File [ analyse_era5.sh : text/x-shellscript ] ...
1: #!/bin/bash
2: #
3: # Auswertung der Zirkulation auf dem Aquaplaneten mit PUMA
4: # I.Kirchner, Nov/2019
5:
6: # ==============================================================================
7: # (A) Vorbereitung der Arbeitsumgebung
8: #
9: echo "Starte Auswertung ...."
10: echo
11:
12: # Einbinden der notwendigen Module
13: export MODULE_VERSION=4.1.2
14: export MODULEPATH=/net/opt/system/modules/modulefiles_ifm_stretch:\
15: /net/opt/system/modules/$MODULE_VERSION/modulefiles
16: . /net/opt/system/modules/4.1.2/init/profile.sh
17: module load cdo/1.9.6
18:
19: # dieses Plotprogramm wird verwendet
20: PE=/daten/vast/arch/vast-git/vastnet/plot_engine/bin/plot_engine
21: echo "... use PlotEngine :: $(${PE} --version)"
22:
23: # ==============================================================================
24: # (B) Definition aller notwendigen Shell-Funktionen
25:
26: # erstes Jahr wird nicht mit benutzt
27: SelTime(){
28: INP=${1}
29: OUT=${2}
30: YEARS='-selyear'
31: FIRST=no
32: for YY in $(cdo -s -showyear $INP)
33: do
34: case ${FIRST} in
35: no ) FIRST=yes ;;
36: * ) YEARS="${YEARS},${YY}" ;;
37: esac
38: done
39: cdo -s ${YEARS} ${INP} ${OUT} && echo "... select years OK"
40: }
41:
42: # Aufspaltung in Grundzustand und Eddies
43: SplitCirc(){
44: FILE=${1}
45: RES=${2:-split}
46: # speichere Gitterinformation
47: cdo -s -griddes ${FILE} > $$.gitter
48: cdo -f nc4 -s -zonmean ${FILE} ${RES}_zm && echo '... zonalmean OK'
49: cdo -f nc4 -s -sub ${FILE} -enlarge,$$.gitter ${RES}_zm ${RES}_ed && \
50: echo '... eddies OK'
51: rm -f $$.gitter
52: }
53:
54: # Abschätzung der kinetischen Energie
55: KinEn(){
56: U=${1}
57: V=${2}
58: RES=${3:-kinen}
59: cdo -s -divc,2.0 -add -mul $U $U -mul $V $V $RES && \
60: echo '... kinetische Energie OK'
61: }
62:
63: # Abschätzung der meridionalen Transporte
64: MerTran(){
65: V=${1}
66: X=${2}
67: RES=${3:-mt}
68: cdo -s -mul $V $X $RES && echo '... meridionaler Transport OK'
69: }
70:
71: # Ansteuerung der einzelnen Arbeitsschritte
72: WorkFlowSteps(){
73: while [ "$1" ]
74: do
75: echo "Running Workflowstep ... $1"
76: echo
77: case "$1" in
78: 1 )
79: # Schritt 1 : Zeitraum auswählen, notwenig bei Modelldaten
80: SelTime ${DATA_TA} $$.ta
81: SelTime ${DATA_UA} $$.ua
82: SelTime ${DATA_VA} $$.va
83: ;;
84: 2a)
85: # Schritt 2 : Aufspaltung der Basisdaten in Zonalmittel und Eddies
86: SplitCirc $$.ta ${DATA}ta
87: SplitCirc $$.ua ${DATA}ua
88: SplitCirc $$.va ${DATA}va
89: rm -f $$.[tuv]a
90: ;;
91: 2b )
92: # Schritt 2 : Benutze die direkten Eingangsdaten zur Aufspaltung
93: SplitCirc ${DATA_TA} ${DATA}ta
94: SplitCirc ${DATA_UA} ${DATA}ua
95: SplitCirc ${DATA_VA} ${DATA}va
96: ;;
97: 3 )
98: # Schritt 3 : Berechne kombinierte Größen
99: for TYPE in zm ed
100: do
101: echo "... Berechnung fuer $TYPE"
102: KinEn ${DATA}ua_${TYPE} ${DATA}va_${TYPE} ${DATA}kinen_${TYPE}
103: MerTran ${DATA}va_${TYPE} ${DATA}ta_${TYPE} ${DATA}mt_VT_${TYPE}
104: MerTran ${DATA}va_${TYPE} ${DATA}ua_${TYPE} ${DATA}mt_VU_${TYPE}
105: done
106: ;;
107: 4 )
108: # Schritt 4 : zeitliche Mittel bilden
109: for FILE in ${DATA}kinen_?? ${DATA}mt_??_?? ${DATA}??_??
110: do
111: cdo -s timmean ${FILE} ${FILE}_mean && \
112: echo "... Zeitmittel $FILE OK"
113: done
114: ;;
115: 5 )
116: # Schritt 5 : Zonalmittel der Eddies
117: for FILE in ${DATA}*_ed_mean
118: do
119: cdo -s zonmean ${FILE} ${FILE}_zm && \
120: echo "... Zonalmittel $FILE OK"
121: done
122: ;;
123: 6 )
124: # Schritt 6 : Plotten der Lon-Lat-Bilder
125: PYCODE='--pycode main:cbar:l:True=pict:type:s:geomap=geomap:type:s:shaded='
126: for FILE in ${DATA}*_ed_mean
127: do
128: for LEVEL in 100000 85000 50000 20000 10000 5000
129: do
130: PREF=$(echo $FILE | sed -e "s=${DATA}==")_${LEVEL}
131: ADD_SPECI="data:levelidx:f:${LEVEL}="
132: ${PE} -v 0 -W ${PYCODE}${ADD_SPECI}${DRAW_COAST} \
133: -i ${FILE} -t "${LABEL} / $FILE" \
134: -p plots_${LABEL}/${PREF} && \
135: echo "... plotten $PREF OK"
136: done
137: done
138: ;;
139: 7 )
140: # Schritt 7 : Plotten der Crosssections
141: PYCODE='--pycode main:cbar:l:True=yaxis:log:l:True='
142: for FILE in ${DATA}*_ed_mean_zm ${DATA}*_zm_mean
143: do
144: PREF=$(echo $FILE | sed -e "s=${DATA}==")
145: ${PE} -v 0 -W ${PYCODE} -i ${FILE} \
146: -t "${LABEL} / $FILE" \
147: -p plots_${LABEL}/${PREF} && \
148: echo "... plotten $PREF OK"
149: done
150: ;;
151: esac
152: shift
153: done
154: }
155:
156: # ==============================================================================
157: # (C) Hauptprogrammteil
158:
159: # die Daten müssen vorher bereitgestellt werden, es sind
160: # Gitterpunktsfelder mit np320 und in N->S Ausrichtung notwendig
161: # wegen der hohen räumllichen Auflösung werden vorerst
162: # sets mit je 5 Wintern bearbeitet, das ergibt bereits
163: # Dateigrößen von ca. 10 GB
164:
165: ERA5_BASE=/daten/erafive/work/ingokir/DatenDiagnoseKurs/CIRC-
166:
167: # erst die Zeitsegmente erstellen, dann eddies, dann zeitmittel
168: # zeitmittel zusammenfügen
169: # setweise analyse
170:
171: # zusätzliche Funktionen für die Analyse der ERA5 Daten
172: Era5Step1(){
173: for SET in 1 2 3 4
174: do
175: LABEL=set${SET}
176:
177: DATA=data_${LABEL}/${LABEL}.
178: mkdir -p data_${LABEL}
179:
180: DATA_TA=${ERA5_BASE}-ta-DAY/ta-set${SET}.nc
181: DATA_UA=${ERA5_BASE}-ua-DAY-dkrz/ua-set${SET}.nc
182: DATA_VA=${ERA5_BASE}-va-DAY-dkrz/va-set${SET}.nc
183:
184: #WorkFlowSteps 2b 3
185: WorkFlowSteps 3
186: done
187: }
188:
189: Era5Step2(){
190: DATA=data_${LABEL}/${LABEL}.
191: mkdir -p data_${LABEL}
192:
193: for TYPE in kinen_ed kinen_zm mt_VT_ed mt_VT_zm mt_VU_ed mt_VU_zm \
194: ta_ed ta_zm ua_ed ua_zm va_ed va_zm
195: do
196: cdo -s -divc,1715 -add \
197: -add \
198: -timsum data_set1/set1.${TYPE} -timsum data_set2/set2.${TYPE} \
199: -add \
200: -timsum data_set3/set3.${TYPE} -timsum data_set4/set4.${TYPE} \
201: ${DATA}${TYPE}_mean && echo "... $DATA $TYPE ... OK"
202: done
203: }
204:
205: # ==============================================================================
206: # ab hier folgt der Hauptprogrammteil
207: #Era5Step1
208:
209: # jetzt sind die Sets zu mergen
210: LABEL=era5djf2
211: DATA=data_${LABEL}/${LABEL}.
212: #Era5Step2
213:
214: # jetzt folgte der abschließende Teil der Analyse
215: DRAW_COAST='geomap:showcoast:l:True='
216: #WorkFlowSteps 5 6 7
217:
218: # ==============================================================================
219: # EndOfScript
220: