#!/bin/bash # source global variable source 0_export.bash source activate ${PY_ENV_NAME} export GTIFF_SRS_SOURCE='EPSG' YEAR_START=${1:-${MODEL_YEAR_START}} YEAR_STOP=${2:-${MODEL_YEAR_STOP}} PREPROCESS_TIME_INDEPENDENT_SWITCH=${3:-${PREPROCESS_TIME_INDEPENDENT_SWITCH}} PREPROCESS_MODEL_CMIP6_SWITCH=${4:-${PREPROCESS_MODEL_CMIP6_SWITCH}} PREPROCESS_MODEL_ISIMIP3B_SWITCH=${5:-${PREPROCESS_MODEL_ISIMIP3B_SWITCH}} if [ "${PREPROCESS_TIME_INDEPENDENT_SWITCH}" == True ];then echo " %Status: preparing time independent inputs" [ ! -d ${TIME_INDEPENDENT_REGION_INPUT_DIR} ] && mkdir -p ${TIME_INDEPENDENT_REGION_INPUT_DIR} python ${PY_SCRIPT_PREPARE_TIME_INDEPENDENT_INPUT} -i ${TIME_INDEPENDENT_INPUT_DIR} -o ${TIME_INDEPENDENT_REGION_INPUT_DIR} -au ${TIME_INDEPENDENT_AUX_DIR} -s ${TIME_INDEPENDENT_SRAD_DIR} -xmn ${XMIN} -xmx ${XMAX} -ymn ${YMIN} -ymx ${YMAX} -bf ${XYBUFFER} -pg fi if [ "${PREPROCESS_MODEL_CMIP6_SWITCH}" == True ];then [ ! -d ${MODEL_CMIP6_REGION_DIR} ] && mkdir -p ${MODEL_CMIP6_REGION_DIR} echo " %Status: preparing CMIP6 data of ${MODEL_NAME}" ZG_TA_FILE_LIST=$(find -L ${MODEL_CMIP6_INPUT_DIR} -name "*.nc" | grep 'ta_\|zg_') if grep -q '_day_' <<< ${ZG_TA_FILE_LIST} && grep -q '_Eday_' <<< ${ZG_TA_FILE_LIST};then echo " %Error: Found variables ta and zg with table_id day AND Eday." echo " %Error: You should provide only one kind of table_id for these variables," echo " %Error: to avoid inconsistencies in pressure levels." exit 1 fi for VARIABLE in ${MODEL_CMIP6_VARIABLE_LIST};do echo " %Status: working on variable ${VARIABLE}" FILE_LIST=$(find -L ${MODEL_CMIP6_INPUT_DIR} -name "*${VARIABLE}_*.nc*" | grep 'day_' | grep "${MODEL_EXPERIMENT}") if [ "${FILE_LIST}" == "" ];then echo " %Warning: no file found for ${VARIABLE}" else # iterate over years # each output file contains one variable and one year for YEAR in $(seq ${YEAR_START} ${YEAR_STOP});do echo " %Status: year = ${YEAR}" # make the domain to cut out larger because the cmip grid is # coarser and we don't want to miss any grid cells XMIN_LARGE=$(python -c "print('{0}'.format(${XMIN} - 3.0))") XMAX_LARGE=$(python -c "print('{0}'.format(${XMAX} + 3.0))") YMIN_LARGE=$(python -c "print('{0}'.format(${YMIN} - 3.0))") YMAX_LARGE=$(python -c "print('{0}'.format(${YMAX} + 3.0))") # filter FILE_LIST for files containing only this year YEAR_FILE_LIST=$(filter_files_by_year_range "${FILE_LIST}" ${YEAR} ${YEAR}) # define output filename and auxiliary filename FILE_OUT=${MODEL_CMIP6_REGION_DIR}/${VARIABLE}_day_${MODEL_NAME}_${MODEL_EXPERIMENT}_${MODEL_REALIZATION}_${YEAR}.nc AUX_FILE=$(dirname ${FILE_OUT})/aux_$(random_number).nc # cut domain cdo -L -s -f nc4 -k grid -z zip -sellonlatbox,${XMIN_LARGE},${XMAX_LARGE},${YMIN_LARGE},${YMAX_LARGE} -selyear,${YEAR} -mergetime ${YEAR_FILE_LIST} ${AUX_FILE} # change calendar to proleptic_gregorian python -Bu ${PY_SCRIPT_CHANGE_CALENDAR} ${AUX_FILE} ${FILE_OUT} proleptic_gregorian rm -f ${AUX_FILE} done fi done fi if [ "${PREPROCESS_MODEL_ISIMIP3B_SWITCH}" == True ];then [ ! -d ${MODEL_ISIMIP3B_REGION_DIR} ] && mkdir -p ${MODEL_ISIMIP3B_REGION_DIR} echo " %Status: preparing ISIMIP3b data of ${MODEL_NAME}" for VARIABLE in ${MODEL_ISIMIP3B_VARIABLE_LIST};do echo " %Status: working on variable ${VARIABLE}" FILE_LIST=$(find -L ${MODEL_ISIMIP3B_INPUT_DIR} -name "*${VARIABLE}_*.nc*" | grep '_daily_' | grep "${MODEL_EXPERIMENT}") if [ "${FILE_LIST}" == "" ];then echo " %Warning: no file found for ${VARIABLE}" else # iterate over years # each output file contains one variable and one year for YEAR in $(seq ${YEAR_START} ${YEAR_STOP});do echo " %Status: year = ${YEAR}" # filter FILE_LIST for files containing only this year YEAR_FILE_LIST=$(filter_files_by_year_range "${FILE_LIST}" ${YEAR} ${YEAR}) # convert MODEL_NAME to lower case (to be inline with the ISIMIP3b-naming) MODEL_NAME_LOWER=$(tr '[:upper:]' '[:lower:]' <<< ${MODEL_NAME}) # define output filename and auxiliary filename FILE_OUT=${MODEL_ISIMIP3B_REGION_DIR}/${VARIABLE}_day_${MODEL_NAME_LOWER}_${MODEL_EXPERIMENT}_${MODEL_REALIZATION}_${YEAR}.nc AUX_FILE=$(dirname ${FILE_OUT})/aux_$(random_number).nc # cut domain cdo -L -s -f nc4 -k grid -z zip -sellonlatbox,${XMIN},${XMAX},${YMIN},${YMAX} -selyear,${YEAR} -mergetime ${YEAR_FILE_LIST} ${AUX_FILE} # change calendar to proleptic_gregorian python -Bu ${PY_SCRIPT_CHANGE_CALENDAR} ${AUX_FILE} ${FILE_OUT} proleptic_gregorian rm -f ${AUX_FILE} done fi done fi