source: modipsl/trunk/util/model @ 21

Last change on this file since 21 was 21, checked in by bellier, 16 years ago

JB: suppress the diff/rm/update options of model script

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 11.6 KB
Line 
1#!/bin/ksh
2#- $Id$
3#---------------------------------------------------------------------
4# @(#)Actions concerning IPSL models
5#---------------------------------------------------------------------
6#set -xv
7MAIL_ADDRESS=patricia.cadule@ipsl.jussieu.fr
8MAIL_COM=mail
9#MAIL_COM=Mail
10#-
11# Dirname and Basename
12#-
13d_n=${0%/*}; b_n=${0##*/};
14#-
15# Retrieve and validate the options
16#-
17m_n=""; m_a="checkout"; m_v='silencious'; no_tag='false';
18while getopts :hevH V
19  do
20    case $V in
21      (h)  m_a='help';;
22      (e)  m_a='checkout';;
23      (v)  m_v='verbose';;
24      (H)  no_tag='true';;
25      (:)  echo ${b_n}" : option $OPTARG : missing value" 1>&2;
26           exit 2;;
27      (\?) echo ${b_n}" : option $OPTARG : not supported" 1>&2;
28           exit 2;;
29    esac
30  done
31shift $(($OPTIND-1));
32#-
33# Validate the action
34#-
35[[ ${m_a} = help || ${m_a} = checkout ]] || \
36 {
37  echo 'Action '"${m_a}"' not supported' 1>&2;
38  echo 'Try "'${b_n}' -h [model-name]"' 1>&2;
39  exit 4;
40 }
41#-
42# Retrieve the model name
43#-
44[[ ${#} -gt 1 ]] && \
45  { echo 'Only one model can be specified' 1>&2; exit 3; }
46[[ ${#} -eq 1 ]] && { m_n="${1}"; }
47[[ ${m_a} != 'help' && -z ${m_n} ]] && \
48 {
49  echo 'Model not specified' 1>&2;
50  echo 'Try "'${b_n}' -h [model-name]"' 1>&2;
51  exit 3;
52 }
53#-
54# Test availability of the definition file
55#-
56F_DEF=${d_n}'/mod.def'
57[[ ! -f "${F_DEF}" ]] && { echo "${F_DEF} unreachable ..."; exit 3; }
58#-
59# Extract the names of the supported models
60#-
61qi=0;
62while read v0 v1 v2
63  do
64    [[ -n "${v0}" && "${v0}" = '#-C-' ]] && \
65     { ((qi=qi+1)); m_x[${qi}]=${v1}; }
66  done <${F_DEF}
67unset v0 v1 v2;
68#-
69# Model name validation and data retrieving
70#-
71[[ -n "${m_n}" ]] && \
72  {
73    #- Validate the model name
74    i_m=-1;
75    qi=0; while (( ${qi} < ${#m_x[@]} ))
76      do
77        ((qi=qi+1));
78        [[ ${m_n} = ${m_x[${qi}]} ]] && { i_m=${qi}; break; };
79      done
80    (( ${i_m} < 0 )) && \
81     { echo 'Model '"${m_n}"' unknown' 1>&2;
82       echo 'Try "'${b_n}' -h"' 1>&2; exit 3; }
83    #- Extract the repository informations
84    #- ( index, repository system, servers address )
85    while read v0 v1 v2 v3
86      do
87        [[ -n "${v0}" && "${v0}" = '#-S-' ]] && \
88         { r_p[${v1}]=${v2}; r_s[${v1}]=${v3}; }
89      done <${F_DEF}
90    unset v0 v1 v2 v3;
91    #- Extract the model informations
92    while read v0 v1 v2
93      do
94        [[ -n "${v1}" && "${v1}" = "${m_n}" ]] && \
95         {
96          #- model manager email address
97          [[ "${v0}" = '#-M-' ]] && { m_m=${v2}; continue; }
98          #- model components
99          [[ "${v0}" = '#-C-' ]] && \
100           {
101            qi=0;
102            for i in ${v2}; do ((qi=qi+1)); m_c[${qi}]=${i}; done;
103            continue;
104           }
105          #- model tags
106          [[ "${v0}" = '#-T-' ]] && \
107           {
108            qi=0;
109            for i in ${v2}
110             do
111              ((qi=qi+1));
112              [[ ${no_tag} = 'false' ]] && \
113               { m_t[${qi}]=${i}; }     || \
114               { m_t[${qi}]='?'; }
115             done
116            continue;
117           }
118          #- model repository information indexes
119          [[ "${v0}" = '#-I-' ]] && \
120           {
121            qi=0;
122            for i in ${v2}
123             do
124               ((qi=qi+1));
125               m_p[${qi}]=${r_p[${i}]};
126               [[ ${m_p[${qi}]} = svn || ${m_p[${qi}]} = cvs ]] || \
127                {
128                 echo 'System '"${m_p[${qi}]}"' not supported' 1>&2;
129                 exit 3;
130                }
131               m_s[${qi}]=${r_s[${i}]};
132               [[ -z "${m_s[${qi}]}" ]] && \
133                {
134                 echo 'Server '${i}'  not found for '${m_n};
135                 exit 3;
136                }
137             done
138            continue;
139           }
140          #- model installation directories
141          [[ "${v0}" = '#-D-' ]] && \
142           {
143            qi=0;
144            for i in ${v2};
145             do
146              ((qi=qi+1));
147              m_d[${qi}]=${i};
148              [[ -z "${m_l[${qi}]}" ]] && { m_l[${qi}]="modeles"; }
149             done
150            continue;
151           }
152          #- model working local directories
153          [[ "${v0}" = '#-L-' ]] && \
154           {
155            qi=0;
156            for i in ${v2};
157             do
158              ((qi=qi+1));
159              m_l[${qi}]=${i};
160             done
161            continue;
162           }
163         }
164      done <${F_DEF}
165    unset v0 v1 v2
166    #- Validate the model informations
167    #- model manager email address
168    [[ -z "${m_m}" ]] && \
169     { echo 'Manager email address not found for '${m_n}; exit 3; }
170    #- model components
171    [[ ${#m_c[@]} = 0 ]] && \
172     { echo 'Components not found for '${m_n}; exit 3; }
173    #- model tags
174    [[ ${#m_t[@]} = 0 ]] && \
175     { echo 'Tags not found for '${m_n}; exit 3; }
176    #- model repository information indexes
177    [[ ${#m_p[@]} = 0 || ${#m_s[@]} = 0 ]] && \
178     { echo 'Indexes not found for '${m_n}; exit 3; }
179    #- model installation directories
180    [[ ${#m_d[@]} = 0 ]] && \
181      { echo 'Target Directories not found for '${m_n}; exit 3; }
182    #- model working local directories
183    # N/A
184  }
185#-
186# send an email at the first use of modipsl
187# ie directory ~/.modipsl does not exist
188#-
189D_LOG=${HOME}/.modipsl
190[[ -d "${D_LOG}" ]] || \
191 {
192  mkdir "${D_LOG}";
193  echo $(date +"%D %T") $(whoami) $(uname -m) \
194    first use of model | \
195    ${MAIL_COM} -s "first use of modipsl" \
196    ${MAIL_ADDRESS} >/dev/null 2>&1;
197   echo $(date +"%D %T") creation >"${D_LOG}"/first;
198  }
199#-
200# "help" action
201#-
202[[ ${m_a} = 'help' ]] && \
203 {
204  echo ' ';
205  if [ -z "${m_n}" ]; then
206    echo ${b_n} 'extracts the components of a model';
207    echo ' ';
208    echo 'Usage    :';
209    echo ${b_n} '[-h]';
210    echo ${b_n} '[-h] model_name';
211    echo ${b_n} '[-e] [-H] [-v] model_name';
212    echo 'h            : this help';
213    echo 'h model-name : help on model';
214    echo 'e            : extract model';
215    echo 'H            : suppress the tags and take the HEAD version';
216    echo 'v            : verbose mode';
217    echo 'Defaults     : -e';
218    echo ' ';
219    echo 'model_name in :';
220    qi=0; while (( ${qi} < ${#m_x[@]} ));
221      do ((qi=qi+1)); echo ${m_x[${qi}]}; done
222  else
223    echo 'model : '${m_n};
224    echo ' ';
225    while read v0 v1 v2
226     do
227       [[ -n "${v0}" && "${v0}" = '#-H-' && \
228          -n "${v1}" && "${v1}" = "${m_n}" ]] && { echo ${v2}; }
229     done <${F_DEF}
230    unset v0 v1 v2;
231    echo ' ';
232    echo 'model manager email address : '${m_m};
233    echo ' ';
234    qi=0; while (( ${qi} < ${#m_c[@]} ))
235      do
236        ((qi=qi+1));
237        echo 'Component '${qi}' : '${m_c[${qi}]};
238        echo 'Tag       '${qi}' : '${m_t[${qi}]};
239        echo 'System    '${qi}' : '${m_p[${qi}]};
240        echo 'Server    '${qi}' : '${m_s[${qi}]};
241        echo 'Directory '${qi}' : '${m_d[${qi}]};
242        echo 'Local Dir '${qi}' : '${m_l[${qi}]};
243      done
244  fi
245  echo ' ';
246  exit 0;
247 }
248#-
249# Record information about the action in the "log" file
250#-
251F_LOG=${d_n}'/log'
252echo "${F_LOG}"
253echo $(date +"%D %T") $0 $* >>"${F_LOG}"
254#-
255# Verbose mode
256#-
257[ ${m_v} = 'verbose' ] && \
258 { echo '--- Model        : '${m_n};
259   echo '--- Action       : '${m_a};
260   echo '--- Mode         : '${m_v}; }
261#-
262# Record information about the action in the "log" file
263#-
264{ echo '--- Model        : '${m_n};
265  echo '--- Action       : '${m_a};
266  echo '--- Mode         : '${m_v};
267  echo '--- Mail address : '${m_m}; } >>"${F_LOG}"
268#-
269# Components root directory
270#-
271d_m=${d_n}'/..';
272#-
273# send an email at the first use of this IPSL model
274# ie file ~/.modipsl/log.${m_n} does not exist
275#-
276M_LOG=${D_LOG}/log.${m_n}
277[[ -f "${M_LOG}" ]] || \
278  {
279   echo $(date +"%D %T") $(whoami) $(uname -m) \
280    first usage of model ${m_n} | \
281   ${MAIL_COM} -s "first usage of model ${m_n}" \
282    ${m_m} >/dev/null 2>&1;
283   echo $(date +"%D %T") model ${m_n} >"${M_LOG}";
284  }
285#-
286# Extract the model components
287#-
288qi=0; while (( ${qi} < ${#m_c[@]} ))
289  do
290    ((qi=qi+1));
291    zc=${m_c[${qi}]}; zt=${m_t[${qi}]};
292    zp=${m_p[${qi}]}; zs=${m_s[${qi}]};
293    zd=${m_d[${qi}]}; zl=${m_l[${qi}]};
294    [[ ${m_v} = 'verbose' ]] && \
295     { echo '---';
296       echo '--- Component  : '${zc};
297       echo '--- Tag        : '${zt};
298       echo '--- System     : '${zp};
299       echo '--- Server     : '${zs};
300       echo '--- Directory  : '${zd};
301       echo '--- Local Dir  : '${zl}; }
302#-----
303#----  Record information about the action in the "log" file
304#-----
305     { echo '---';
306       echo '--- Component  : '${zc};
307       echo '--- Tag        : '${zt};
308       echo '--- System     : '${zp};
309       echo '--- Server     : '${zs};
310       echo '--- Directory  : '${zd};
311       echo '--- Local Dir  : '${zl}; } >>"${F_LOG}"
312#---
313    [[ ${zp} = 'cvs' ]] && \
314     {
315      c_c='(cd '${d_m}/${zl}'; '${zp}' -d :pserver:'${zs}' '${m_a};
316      [[ ${zt} != '?' ]] && { c_c=${c_c}' -r '${zt}; }
317      [[ ${zd} != '.' ]] && { c_c=${c_c}' -d '${zd}; }
318      c_c=${c_c}' '${zc}')';
319      grep "${zs%%/*}"'.*/'"${zs#*/}" ~/.cvspass > /dev/null;
320      [[ ${?} != 0 ]] && \
321       {
322        c_z='cvs -d :pserver:'${zs}' login';
323        [[ ${m_v} = 'verbose' ]] && { echo ${c_z}; }
324        eval ${c_z};
325       }
326     }
327#---
328    [[ ${zp} = 'svn' ]] && \
329     {
330      c_c='(cd '${d_m}/${zl}'; '${zp}' '${m_a};
331      [[ ${zt} != '?' ]] && { c_c=${c_c}' -r '${zt}; }
332      c_c=${c_c}' '${zs}'/'${zc};
333      [[ ${zd} != '.' ]] && { c_c=${c_c}' '${zd}; }
334      c_c=${c_c}')';
335     }
336#---
337    [[ ${m_v} = 'verbose' ]] && { echo '--- Command    : '${c_c}; }
338    eval ${c_c};
339  done
340#-
341# Actions related to the WORK directory for the OPA models
342#-
343case ${m_n} in
344  ( EEL* |  ORCA* | OFF_TRC | IPSLCM* | ORCA_TOYATM | \
345    NEMO_ORCA2_LIM | GYRE )
346    d_m1=${d_m}/modeles/OPA  ;
347    [ -d ${d_m1}/WORK ] && \rm -rf ${d_m1}/WORK;
348    mkdir ${d_m1}/WORK;
349    cd ${d_m1}/WORK;
350#-- Getting the configuration files to build the Makefile
351    ln -sf ../../../*/${m_n}/scripts/BB_make AA_make;
352    ln -sf ../../../*/${m_n}/scripts/BB_make.ldef AA_make.ldef ;
353    case ${m_n} in
354     ( ORCA2_LMDZ96x71 )
355      echo " Creation du catalogue OPA/WORK = ORCA + LIM"
356      ln -sf ../SRC_ORCA/*.[Ffh] .
357      ln -sf ../SRC_UCL/[a-z]* .
358      ln -sf ../../${m_n}/scripts/prep.sed.coupled .;;
359     ( ORCA2 | ORCA4 | ORCA05 | EEL2 | EEL6 )
360      echo " Creation du catalogue OPA/WORK = ORCA"
361      ln -sf ../SRC_ORCA/*.[Ffh] .;;
362     ( ORCA*LIM | IPSLCM* | ORCA_TOYATM | ORCA*LMD* )
363      [ "${m_n}" = "IPSLCM4_LOOP" ] && \
364       echo " Creation du catalogue OPA/WORK = ORCA + LIM + TRC" || \
365       echo " Creation du catalogue OPA/WORK = ORCA + LIM"
366      ln -sf ../SRC_ORCA/*.[Ffh] .
367      [ "${m_n}" = "IPSLCM4_LOOP" ] && \rm *.passivetrc.h
368      [ "${m_n}" = "IPSLCM4_LOOP" ] && \
369       ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .
370      ln -sf ../SRC_UCL/[a-z]* .;;
371     ( ORCA*_LIM_TRC )
372      echo " Creation du catalogue OPA/WORK = ORCA + LIM + TRC"
373      ln -sf ../SRC_ORCA/*.[Ffh] .
374      \rm *.passivetrc.h
375      ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .
376      ln -sf ../SRC_UCL/[a-z]* .;;
377     ( *LOBSTER1 )
378      echo " Creation du catalogue OPA/WORK = ORCA + TRC"
379      ln -sf ../SRC_ORCA/*.[Ffh] .
380      \rm *.passivetrc.h
381      ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .;;
382     ( ORCA*_OFF_TRC )
383      echo " Creation du catalogue OPA/WORK = TRC + OFFLINE"
384      ln -sf ../SRC_TRC/*.[Ffh] ../SRC_TRC/trc_sms/*.[Ffh] .
385      ln -sf ../SRC_OFFLINE_TRC/*.[Ffh] .;;
386    esac
387#-- Building the standard list of source files
388    cat >.patron <<"EOF"
389CVS
390SRC_PARAM
391SRC_FILE_LIST
392tmplist
393AA_make
394KEY_CPP
395Makefile
396*?.o
397 i.?*
398*?.L
399.patron
400bloc.com
401para.com
402defcst.f
403fontbc.f
404icdyna.f
405thersf.f
406EOF
407    ls -1 | fgrep -v -f .patron  >SRC_FILE_LIST;
408    cp SRC_FILE_LIST SRC_FILE_LIST.temp;
409    KEY=$(grep P_P AA_make.ldef);
410    [ -f "KEY_CPP" ] || echo $KEY > KEY_CPP;
411  ;;
412esac
413#---
414#- That's all folks
415#---
416exit 0;
Note: See TracBrowser for help on using the repository browser.