Skip to content
Snippets Groups Projects

Generalization

Merged Bianca Wentzel requested to merge generalization into plugin_template
4 files
+ 95
19
Compare changes
  • Side-by-side
  • Inline
Files
4
+ 20
17
@@ -47,6 +47,9 @@ START_YEAR=$(cut -c 1-4 <<< ${START_DATE}) # start year
END_YEAR=$(cut -c 1-4 <<< ${END_DATE}) # end year
REGION=$(jq '.region' $1 | sed 's/\"//g') # region (W,E,S,N)
### DEBUG MODE
DEBUG=$(jq '.debug' $1 | sed 's/\"//g')
### CONSTANTS ###
MAXPP=30
@@ -67,7 +70,8 @@ echo 'System Parameters:'
echo '------------------'
echo 'CACHE_DIR: '${TMP_DIR}
echo 'OUTPUT_DIR: '${OUTPUT_DIR}
echo 'ALTITUDE FILE:'${ALTI_FILE}
echo 'ALTITUDE FILE: '${ALTI_FILE}
echo 'DEBUG: '${DEBUG}
echo ''
echo 'Input Parameters:'
@@ -110,38 +114,37 @@ echo ''
echo '### Starting checks'
echo '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
### CHECKING IF LIST OG DATA FILES CONTAINS ALL VARAIBLES NEEDED
echo 'Checking availability of all necessary variables...'
log_debug 'Checking availability of all necessary variables...'
VARIABLES=$(jq '.files | keys | .[]' $1)
for VAR in ${VARIABLES[@]}; do
if [ $(jq ".files.$VAR | length " $1) > 0 ]; then
echo ${VAR//\"}'...OK'
log_debug "${VAR//\"}...OK"
else
echo 'ERROR: No data for '${VAR}' available!'
echo 'Please select a dataset containg all necessary varaiables ('${VARIABLES}')!'
log_error 'ERROR: No data for '${VAR}' available!'
log_error 'Please select a dataset containg all necessary varaiables ('${VARIABLES}')!'
exit 1
fi
done
echo ''
### PREPARING DATA (MERGING FILES; SELECTION TIME PERIOD) ###
echo 'Preparing files for checks...'
log_debug 'Preparing files for checks...'
for VAR in ${VARIABLES[@]}; do
# requirement: allfiles for a specific variable are located within one directory
VAR_FILES=$(jq ".files.${VAR//\"}[]" $1 | sed 's/\"//g' | grep '.nc')
TMP_FILE=${TMP_DIR}'/'${VAR//\"}'_'${START_YEAR}'-'${END_YEAR}'.nc'
echo '---'${VAR//\"}'---'
# merge files and select time period
echo 'Selecting time period...'
log_debug 'Selecting time period...'
TIME_FILE=${TMP_DIR}'/'${VAR//\"}'_timeperiod.nc'
if [ ! ${START_DATE} == null ] && [ ! ${END_DATE} == null ]; then
cdo seldate,${START_DATE}'T00:00:00',${END_DATE}'T00:00:00' -mergetime ${VAR_FILES} ${TIME_FILE}
fi
if [ ! -f ${TIME_FILE} ]; then
echo 'Error selecting time and creating: '${TIME_FILE}
log_error 'Error selecting time and creating: '${TIME_FILE}
exit 1
else
mv ${TIME_FILE} ${TMP_FILE}
@@ -151,11 +154,11 @@ for VAR in ${VARIABLES[@]}; do
if [ ! ${REGION} == null ]; then
REGION_FILE=${TMP_DIR}'/'${VAR//\"}'_region.nc'
echo 'Selecting region...'
log_debug 'Selecting region...'
cdo -sellonlatbox,${REGION} ${TMP_FILE} ${REGION_FILE}
if [ ! -f ${REGION_FILE} ]; then
echo 'Error selecting region and creating: '${REGION_FILE}
log_error "Error selecting region and creating: ${REGION_FILE}"
exit 1
else
mv ${REGION_FILE} ${TMP_FILE}
@@ -166,23 +169,23 @@ done
### CHECKING VARIABLE NAME; HEIGHT AND UNIT
echo 'Checking variable names, heights and units...'
log_debug 'Checking variable names, heights and units...'
for VAR in ${VARIABLES[@]}; do
VAR_FILE_NAME=${TMP_DIR}'/'${VAR//\"}'_'${START_YEAR}'-'${END_YEAR}'.nc'
X_SIZE=$(get_x_size ${VAR_FILE_NAME})
Y_SIZE=$(get_y_size ${VAR_FILE_NAME})
echo 'Grid info: '${X_SIZE}'x'${Y_SIZE}
log_debug "Grid info: ${X_SIZE}x${Y_SIZE}"
# grepping unit from attribute table of data file, check and convert if needed
VAR_UNIT=$(cdo partab ${VAR_FILE_NAME} | grep "units" | grep -o -P '(?<=").*(?=")')
VAR_NAME=$(cdo codetab ${VAR_FILE_NAME} | awk '{print $2;}') ### Error if there are multiple variables -> needs to be tested
VAR_HEIGHT=$(get_height ${VAR_FILE_NAME})
echo "${VAR} [${VAR_UNIT}], HEIGHT: ${VAR_HEIGHT}M"
log_debug "${VAR} [${VAR_UNIT}], HEIGHT: ${VAR_HEIGHT}M"
if [ ! ${VAR_NAME} == ${VAR//\"} ]; then
echo "ERROR: Variable name in data (${VAR_NAME}) doesn't match variable name in data file name (${VAR})"
log_error "ERROR: Variable name in data (${VAR_NAME}) doesn't match variable name in data file name (${VAR})"
fi
# converting units if neccessary
@@ -202,7 +205,7 @@ case "${ALTITUDE_UNIT}" in
cdo -setmissval,nan -select,name=${ALTITUDE_NAME} ${ALTI_FILE} ${TMP_ALT_FILE}
;;
*)
echo "ERROR: Altitude unit must be 'm'"
log_error "ERROR: Altitude unit must be 'm'"
exit 1
;;
esac
@@ -272,7 +275,7 @@ for ((YEAR=$START_YEAR;YEAR<END_YEAR+1;YEAR+=1)); do
MYEXP_FILE=$(dirname "$0")/helper/myexpr
cdo exprf,${MYEXP_FILE} ${INPUT_FILE} ${TMP_DIR_YEAR}'/res_'${YEAR}'.nc'
if [ ! -f ${TMP_DIR_YEAR}'/res_'${YEAR}'.nc' ]; then
echo 'Error create: '${TMP_DIR_YEAR}'/res_'${YEAR}'.nc'
log_error 'Error create: '${TMP_DIR_YEAR}'/res_'${YEAR}'.nc'
exit 1
fi
### to-do replace in myexpr: _var_tmax=TMAX_2M; with global variable names ???
Loading