#!/bin/bash # region definition ----------------------------------------------------------- export XMIN=%%XMIN%% export XMAX=%%XMAX%% export YMIN=%%YMIN%% export YMAX=%%YMAX%% export XYBUFFER=2.0 export REGION_NAME=%%REGION_NAME%% # model settings -------------------------------------------------------------- export MODEL_NAME=%%MODEL_NAME%% export MODEL_YEAR_START=1981 # optional, can be also set as cli in 1_prepare_input.bash export MODEL_YEAR_STOP=2014 # optional, can be also set as cli in 1_prepare_input.bash export MODEL_EXPERIMENT=%%MODEL_EXPERIMENT%% export MODEL_REALIZATION=%%MODEL_REALIZATION%% # variables to process (this is just for preprocessing, CHELSA variable list is # hard-coded) export MODEL_CMIP6_VARIABLE_LIST='ps clt zg ta tas hurs uas vas' export MODEL_ISIMIP3B_VARIABLE_LIST='pr rsds tas tasmin tasmax' # CHELSA settings ------------------------------------------------------------- export CHELSA_OUTPUT_TYPE='ncdf' # define directories ---------------------------------------------------------- # global export GLOBAL_DATA_DIR=/p/projects/hiclap/data/CHELSA/global export TIME_INDEPENDENT_INPUT_DIR=${GLOBAL_DATA_DIR}/time_independent_input/input export TIME_INDEPENDENT_AUX_DIR=${GLOBAL_DATA_DIR}/time_independent_input/input export TIME_INDEPENDENT_SRAD_DIR=${GLOBAL_DATA_DIR}/time_independent_input/rsdscs export MODEL_CMIP6_INPUT_DIR=${GLOBAL_DATA_DIR}/gcm/cmip6/${MODEL_NAME}/${MODEL_EXPERIMENT}/${MODEL_REALIZATION} export MODEL_ISIMIP3B_INPUT_DIR=${GLOBAL_DATA_DIR}/gcm/isimip3b/${MODEL_NAME}/${MODEL_EXPERIMENT}/${MODEL_REALIZATION} # regional export REGION_DIR=/p/projects/hiclap/users/menz/chelsa/work/${REGION_NAME} export REGION_DATA_DIR=${REGION_DIR}/data export REGION_TMP_DIR=${REGION_DATA_DIR}/tmp/${MODEL_NAME}/${MODEL_EXPERIMENT}/${MODEL_REALIZATION} export REGION_OUTPUT_DIR=${REGION_DATA_DIR}/output/${MODEL_NAME}/${MODEL_EXPERIMENT}/${MODEL_REALIZATION} export TIME_INDEPENDENT_REGION_INPUT_DIR=${REGION_DATA_DIR}/input export MODEL_CMIP6_REGION_DIR=${REGION_DATA_DIR}/gcm/cmip6/${MODEL_NAME}/${MODEL_EXPERIMENT}/${MODEL_REALIZATION} export MODEL_ISIMIP3B_REGION_DIR=${REGION_DATA_DIR}/gcm/isimip3b/${MODEL_NAME}/${MODEL_EXPERIMENT}/${MODEL_REALIZATION} # CHELSA export CHELSA_DIR=$(pwd)/../chelsa_isimip3b_ba_1km # python ---------------------------------------------------------------------- export PY_ENV_NAME=chelsa export PY_SCRIPT_PREPARE_TIME_INDEPENDENT_INPUT=${CHELSA_DIR}/prepare_time_independent_input.py export PY_SCRIPT_CHELSA=${CHELSA_DIR}/CHELSA_ISIMIP3b_BA_1km.py export PY_SCRIPT_CHANGE_CALENDAR=${CHELSA_DIR}/convert_netCDF_calendar.py # set preprocessing steps ----------------------------------------------------- # (optional, can be also set as cli in 1_prepare_input.bash) export PREPROCESS_TIME_INDEPENDENT_SWITCH=False export PREPROCESS_MODEL_CMIP6_SWITCH=False export PREPROCESS_MODEL_ISIMIP3B_SWITCH=True # functions ################################################################### # ----------------------------------------------------------------------------- function filter_files_by_year_range() { local FILE_LIST="$(tr '\n' ' ' <<< ${1})" # Store all arguments in an array local YEAR_START="$2" # First argument is the start year local YEAR_STOP="$3" # Second argument is the end year # Loop through each file in the list for FILE in $(echo ${FILE_LIST}); do # Extract the year range from the filename # Assuming filename format: filename_YYYYMMDD-YYYYMMDD.extension local YEARS=$(cdo -s showyear "${FILE}") # Extract start year and end year from the year range local FILE_YEAR_START=$(echo ${YEARS} | awk '{print $1}') local FILE_YEAR_STOP=$(echo ${YEARS} | awk '{print $NF}') # Check if the file's year range overlaps with the specified year range if (( 10#${FILE_YEAR_START} <= 10#${YEAR_STOP} && 10#${FILE_YEAR_STOP} >= 10#${YEAR_START} )); then echo "$FILE" # Print the file name fi done } export filter_files_by_year_range # ----------------------------------------------------------------------------- # ----------------------------------------------------------------------------- function get_days_in_year() { local YEAR=$1 # Check if the YEAR is a leap YEAR if (( YEAR % 4 == 0 && (YEAR % 100 != 0 || YEAR % 400 == 0) )); then echo 366 else echo 365 fi } # ----------------------------------------------------------------------------- function random_number { echo $(tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1) } # -----------------------------------------------------------------------------