source: CDB_driver/trunk/lib/retrieval_script.sh @ 36

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CDB_driver/trunk/lib/retrieval_script.sh@36
Revision 36, 4.9 KB checked in by lalibert, 9 years ago (diff)

Initial import. This splits the driver from the diagnostics.

Line 
1#!/bin/bash
2#
3while getopts :hv:m:e:r:y:d: opt; do
4  case $opt in
5    h)
6      echo "Help"
7      echo "Usage: retrieval_script.sh options"
8      echo ""
9      echo "This script echos the path to the requested variables (-v option)."
10      echo "This script is setup by the diag_driver_comp.py program and is not"
11      echo "intended to be used on its own."
12      echo ""
13      echo "Looks up for files in \$CDB_IN_DIR/\$CDB_DIAG_NAME/in; \$CDB_IN_DIR; \$CDB_DATA_DIR,"
14      echo "with this order of precedence."
15      echo "Files must follow the esg naming convention. This is naturally accopmlished by the"
16      echo "\'structure_out_as_in.sh\' script called by the CDB."
17      echo ""
18      echo "F. Laliberte and P. J. Kushner, University of Toronto, 2012"
19      echo ""
20      echo ""
21      echo "Options"
22      echo "h: help"
23      echo "v: passes semicolon-separated variable list"
24      echo "m: passes model"
25      echo "e: passes experiment"
26      echo "r: passes run id"
27      echo "y: passes year"
28      echo "d: passes diagnostic"
29      exit
30    ;;
31    v)
32        CDB_VAR_LIST=`echo $OPTARG | tr ';' ' '`
33    ;;
34    m)
35        CDB_MODEL=$OPTARG
36    ;;
37    e)
38        CDB_EXPT=$OPTARG
39    ;;
40    r)
41        CDB_RUN_ID=$OPTARG
42    ;;
43    y)
44        CDB_YEAR=$OPTARG
45    ;;
46    d)
47        CDB_DIAG_IN=$OPTARG
48    ;;
49    \?)
50      echo "Unknown option -$OPTARG use -h for help"
51    ;;
52  esac
53done
54
55CDB_CENTER=`echo $CDB_MODEL | tr ',' ' ' | awk -F' ' '{ print $1}'`
56CDB_MODEL_NAME=`echo $CDB_MODEL | tr ',' ' ' | awk -F' ' '{ print $2}'`
57
58#Loop through variables:
59for CDB_VAR in $CDB_VAR_LIST; do
60    CDB_VAR_NAME=`echo $CDB_VAR | tr ',' ' ' | awk -F' ' '{ print $1}'`
61    CDB_FREQ=`echo $CDB_VAR | tr ',' ' ' | awk -F' ' '{ print $2}'`
62    CDB_REALM=`echo $CDB_VAR | tr ',' ' ' | awk -F' ' '{ print $3}'`
63    CDB_MIP=`echo $CDB_VAR | tr ',' ' ' | awk -F' ' '{ print $4}'`
64
65    #Fixed variables do not have a date associated, must treat differently
66    CDB_LOCAL_RUN_ID="$CDB_RUN_ID"
67    #Other frequencies have different dates structures:
68    case ${CDB_FREQ} in
69        fx)
70            CDB_LOCAL_RUN_ID=r0i0p0
71        ;;
72        yr)
73            CDB_INDEX=5
74        ;;
75        mon)
76            CDB_INDEX=7
77        ;;
78        day)
79            CDB_INDEX=9
80        ;;
81        6hr)
82            CDB_INDEX=13
83        ;;
84        3hr)
85            CDB_INDEX=13
86        ;;
87    esac
88
89    #Check if the input directories are all there:
90    CDB_IN_DIR_LIST="${CDB_DATA_DIR}"
91
92    if [ -d "${CDB_IN_DIR}/fix" ]; then
93        CDB_IN_DIR_LIST="${CDB_IN_DIR}/fix $CDB_IN_DIR_LIST"
94    fi
95
96    if [ -d "${CDB_IN_DIR}/${CDB_DIAG_IN}/in" ]; then
97        CDB_IN_DIR_LIST="${CDB_IN_DIR}/${CDB_DIAG_IN}/in $CDB_IN_DIR_LIST"
98    fi
99
100    #Define the base path, as specified by the esg:
101    BASE_PATH="${CDB_CENTER}/${CDB_MODEL_NAME}/${CDB_EXPT}/${CDB_FREQ}/${CDB_REALM}/${CDB_MIP}/${CDB_LOCAL_RUN_ID}"
102
103    FOUND_FILE=0
104    #Loop through input directories.
105    for CDB_LOCAL_DATA_DIR in ${CDB_IN_DIR_LIST}; do
106        if [ ! -d "${CDB_LOCAL_DATA_DIR}/${BASE_PATH}" ]; then
107            continue
108        fi
109        CDB_VER_LIST=`ls ${CDB_LOCAL_DATA_DIR}/${BASE_PATH}/`
110        CDB_VER_LIST="latest $CDB_VER_LIST" 
111
112        #Loop over versions. Files should be in 'latest' but this is not always the case...
113        for CDB_VER in ${CDB_VER_LIST}; do
114            if [ ! -d "${CDB_LOCAL_DATA_DIR}/${BASE_PATH}/${CDB_VER}/${CDB_VAR_NAME}" ]; then
115                continue
116            fi
117            eval TEMP_PATH=${CDB_LOCAL_DATA_DIR}/${BASE_PATH}/${CDB_VER}/${CDB_VAR_NAME}/${CDB_VAR_NAME}_${CDB_MIP}_${CDB_MODEL_NAME}_${CDB_EXPT}_${CDB_LOCAL_RUN_ID}
118
119            CDB_VAR_FILE_LIST=`ls ${TEMP_PATH}*`
120
121            #Check if year exists. Fixed frequencies have to be treated separately:
122            if [ "$CDB_FREQ" = "fx" ]; then
123                if [ -n ${CDB_VAR_FILE_LIST} ]; then
124                        echo "CDB_VAR_${CDB_VAR_NAME}_${CDB_FREQ}=${CDB_VAR_FILE_LIST}"
125                        FOUND_FILE=1
126                fi
127            else
128                #Loop through files and use their tag for time identification:
129                for CDB_VAR_FILE in ${CDB_VAR_FILE_LIST}; do
130                    CDB_TIME_RANGE=`echo ${CDB_VAR_FILE#"${TEMP_PATH}_"}`
131                    if [ "${CDB_TIME_RANGE:0:4}" -le "${CDB_YEAR}" ]; then
132                        if [ "${CDB_TIME_RANGE:${CDB_INDEX}:4}" -ge "${CDB_YEAR}" ]; then
133                            echo "CDB_VAR_${CDB_VAR_NAME}_${CDB_FREQ}=${CDB_VAR_FILE}"
134                            FOUND_FILE=1
135                            break
136                        fi
137                    fi
138                done
139            fi
140            if [ "${FOUND_FILE}" -eq "1" ]; then break; fi
141        done
142        if [ "${FOUND_FILE}" -eq "1" ]; then break; fi
143    done
144    if [ "${FOUND_FILE}" -eq "0" ]; then
145        echo "$CDB_VAR for year ${CDB_YEAR} not found sending term signal"
146        if [ -z "${PBS_JOBID}" ]; then
147            kill -s TERM $PPID
148        else
149            qdel ${PBS_JOBID}
150        fi
151    fi
152done
Note: See TracBrowser for help on using the repository browser.