source: trunk/mesoscale/LMD_MM_MARS/SIMU/runmeso @ 78

Last change on this file since 78 was 78, checked in by aslmd, 14 years ago

LMDZ.MARS
-- datafile.h pointe par defaut vers un dossier datafile situe dans le repertoire ou on lance le run
-- ... ainsi il suffit d'utiliser un lien symbolique [ou alors, datadir dans callphys.def]
-- ... y penser pour les prochains runs GCM ...

LMD_MM_MARS
-- callphys.def pour traceurs radiativement actifs dans TESTS/newphys_tracers [callphys.def.mars11_radact]
-- adaptation makegcm_mpifort et makegcm_ifort pour nouvelle physique
-- adaptation runmeso et gnome_launch.meso pour que le lien vers datafile existe toujours
-- commentaire sur prepare_ini pour indiquer probleme a regler

  • Property svn:executable set to *
File size: 19.4 KB
Line 
1#! /bin/bash
2
3#########################################################
4# runmeso :                                             #
5# utility to combine compilation + preprocessing + run  #
6#########################################################
7###############################
8# Author: A. Spiga            #
9# New version : December 2008 #
10# Modified    : 2009-2010     #
11# New physics : 2011          #
12###############################
13
14# TODO: - GCM compile
15#       - NETCDF
16#       - (modif registry)
17#       - quick restart
18
19
20###########################################
21###########################################
22###########################################
23
24datafile = '/u/forget/WWW/datagcm/datafile'
25
26changeregis=0 ## 1 if changed registry
27#changeregis=1 ## 1 if changed registry
28i_want_to_compile=1
29
30if [[ "${LMDMOD}" = "" ]]
31then
32    echo "Please initialize the variable LMDMOD in your environnement (or modify scripts)"
33    exit
34fi
35####################################
36# A FEW DEFINITIONS YOU CAN MODIFY #
37####################################
38main_folder=$LMDMOD
39meso_folder=${main_folder}'/LMD_MM_MARS'
40calendar=${main_folder}'/LMD_MM_MARS/SIMU/calendar'
41simu_folder=$PWD
42
43
44################
45# WELCOME USER #
46################
47echo '**********************************************'
48echo '**** LMD Martian Mesoscale Model launcher ****'
49echo '**********************************************'
50#echo '** Hello '$(whoami)' on '$(hostname)' !'
51#echo '** ['$(uname -a)']'
52echo '** User                  >>> '$(whoami)
53echo '** Hostname              >>> '$(hostname)
54echo '** Hardware              >>> '$(uname -m)
55echo '** Processor             >>> '$(uname -p)
56echo '**********************************************'
57
58       ######## NEWPHYS ???
59       if [[ ! ( -f "run.def" ) ]]
60       then
61         newphys=0
62       else
63         echo '** New LMD physics       >>> YES [run.def is here]'
64         echo '**********************************************'
65         newphys=1
66       fi
67
68##########################
69# GET INFO FROM NAMELIST #
70##########################
71#echo '***********************'
72#echo '**** Your settings ****'
73#echo '***********************'
74echo '** Simulation directory  >>> '${simu_folder}
75if [[ ! ( -f "namelist.input" ) ]]
76then
77   echo 'no namelist.input file !'
78   exit
79fi
80#
81# READ INFO NEEDED FOR INIT
82#
83year=$(more ${simu_folder}/namelist.input | grep start_year | awk '{print $3}' | sed s+','+''+g)
84month=$(more ${simu_folder}/namelist.input | grep start_month | awk '{print $3}' | sed s+','+''+g)
85day=$(more ${simu_folder}/namelist.input | grep start_day | awk '{print $3}' | sed s+','+''+g)
86hour=$(more ${simu_folder}/namelist.input | grep start_hour | awk '{print $3}' | sed s+','+''+g)
87wrf_date=${year}'-'${month}'-'${day}'_00:00:00'
88daygcm=$(more ${calendar} | grep ${wrf_date} | awk '{print $2}')
89lsubs=$(more ${calendar} | grep ${wrf_date} | awk '{print $3}')
90eyear=$(more ${simu_folder}/namelist.input | grep end_year | awk '{print $3}' | sed s+','+''+g)
91emonth=$(more ${simu_folder}/namelist.input | grep end_month | awk '{print $3}' | sed s+','+''+g)
92eday=$(more ${simu_folder}/namelist.input | grep end_day | awk '{print $3}' | sed s+','+''+g)
93ehour=$(more ${simu_folder}/namelist.input | grep end_hour | awk '{print $3}' | sed s+','+''+g)
94ewrf_date=${eyear}'-'${emonth}'-'${eday}'_00:00:00'
95edaygcm=$(more ${calendar} | grep ${ewrf_date} | awk '{print $2}')
96elsubs=$(more ${calendar} | grep ${ewrf_date} | awk '{print $3}')
97echo '** Start date            >>> '${year}'-'${month}'-'${day}" [sol="${daygcm}", Ls="${lsubs}"]"
98echo '** End date              >>> '${eyear}'-'${emonth}'-'${eday}" [sol="${edaygcm}", Ls="${elsubs}"]"
99#
100# READ INFO NEEDED FOR DOMAIN
101#
102interval_seconds="$(more ${simu_folder}/namelist.input | grep -e '[^!]*interval_seconds *=')"
103if [[ "${interval_seconds}" = "" ]]
104then
105     interval_seconds="interval_seconds = 3700 !! (p2) Frequency of large-scale fields update (s)"
106fi
107#
108max_dom="$(more ${simu_folder}/namelist.input | grep -e '[^!]*max_dom *=')"
109if [[ "${max_dom}" = "" ]]
110then
111     max_dom="max_dom = 1 !! (r)(n)(p2) Total number of domains"
112fi
113#
114parent_id="$(more ${simu_folder}/namelist.input | grep -e '[^!]*parent_id *=')"
115if [[ "${parent_id}" = "" ]]
116then
117     parent_id="parent_id = 0, !! (n)(p2) Associated parent domain"
118fi
119#
120i_parent_start="$(more ${simu_folder}/namelist.input | grep -e '[^!]*i_parent_start *=')"
121if [[ "${i_parent_start}" = "" ]]
122then
123     i_parent_start="i_parent_start = 0, !! (n)(p2) x-position of the bottom-left nest corner"
124fi
125#
126j_parent_start="$(more ${simu_folder}/namelist.input | grep -e '[^!]*j_parent_start *=')"
127if [[ "${j_parent_start}" = "" ]]
128then
129     j_parent_start="j_parent_start = 0, !! (n)(p2) y-position of the bottom-left nest corner"
130fi
131#
132parent_grid_ratio="$(more ${simu_folder}/namelist.input | grep -e '[^!]*parent_grid_ratio *=')"
133if [[ "${parent_grid_ratio}" = "" ]]
134then
135     parent_grid_ratio="parent_grid_ratio = 1, !! (n)(p2) Ratio of horizontal resolution parent/nest"
136fi
137#
138e_we="$(more ${simu_folder}/namelist.input | grep -e '[^!]*e_we *=')"
139e_sn="$(more ${simu_folder}/namelist.input | grep -e '[^!]*e_sn *=')"
140#
141dx="$(more ${simu_folder}/namelist.input | grep -e '[^!]*dx *=' | awk '{print $3}' | sed s+','+''+g)"
142dy="$(more ${simu_folder}/namelist.input | grep -e '[^!]*dy *=' | awk '{print $3}' | sed s+','+''+g)"
143
144
145#
146# READ INFO NEEDED FOR COMPILATION
147#
148nx=$(more ${simu_folder}/namelist.input | grep -e '[^!]*e_we *=' | awk '{print $3}' | sed s+','+''+g)
149ny=$(more ${simu_folder}/namelist.input | grep -e '[^!]*e_sn *=' | awk '{print $3}' | sed s+','+''+g)
150nz=$(more ${simu_folder}/namelist.input | grep -e '[^!]*e_vert *=' | awk '{print $3}' | sed s+','+''+g)
151nest=$(more ${simu_folder}/namelist.input | grep -e '[^!]*max_dom *=' | awk '{print $3}' | sed s+','+''+g)
152  if [[ "${nest}" = "" ]]
153  then
154     nest='1'
155  fi
156  numcallphys=$(ls callphys*def | wc -l)
157  if [[ ${numcallphys} -lt ${nest} ]]
158  then
159        echo '**********'
160        echo You should have ${nest} callphys.def' file(s)' !!
161        exit
162  fi
163tracers=$(more ${simu_folder}/namelist.input | grep mars | awk '{print $3}' | sed s+','+''+g)
164  case ${tracers} in
165      0) tracers='1' ;;
166      1) tracers='2' ;;
167      2) tracers='1' ;;
168      3) tracers='2' ;;
169     11) tracers='4' ;;
170      *) tracers='1' ;;
171  esac
172echo '** Domain(s)             >>> '${nest}
173echo '** Tracer(s)             >>> '${tracers}
174echo '** Grid points           >>> '${nx}" x "${ny}" x "${nz}
175echo '** Horizontal resolution >>> '${dx}
176#echo "OK ? ('no' to exit, any key if OK)" ; read wellok
177#  if [[ "${wellok}" = "no" ]]
178#  then
179#     exit
180#  fi
181
182###########
183# ACTIONS #
184###########
185#echo '***********************'
186#echo '****     Steps     ****'
187#echo '***********************'
188echo '**********************************************'
189echo "** This script will compile the model then :"
190echo "**      <1> Prepare GCM inputs          <-1> to skip compilation"
191echo "**      <2> Perform WPS interpolations  <-2> to skip compilation"
192echo "**      <3> Execute real.exe            <-3> to skip compilation"
193echo "**      <4> Execute wrf.exe             <-4> to skip compilation"
194echo "**      <5> Exit"
195echo "**      <9> Oops ! Exit now please."
196echo '**********************************************'
197#echo "Start at which step ? (1-4)" ; read step
198echo "Where shall we start ? 1, 2, 3, 4, 5 or 9" ; read step
199if [[ ${step} -lt 0 ]]
200then
201        step=$(expr 0 - ${step})
202        i_want_to_compile=0
203        echo ".... ok, I skip the compiling & linking step. you'll just be asked the compiler you previously defined."
204fi
205case ${step} in
206        9) exit ;;
207        5) gcmstep=0 ; wpsstep=0 ; realstep=0 ; wrfstep=0 ;;
208        1) gcmstep=1 ; wpsstep=1 ; realstep=1 ; wrfstep=1 ;;
209        2) gcmstep=0 ; wpsstep=1 ; realstep=1 ; wrfstep=1 ;;
210        3) gcmstep=0 ; wpsstep=0 ; realstep=1 ; wrfstep=1 ;;
211        4) gcmstep=0 ; wpsstep=0 ; realstep=0 ; wrfstep=1 ;;
212        *) echo "** I guess you do not know what to do. Let's start from the beginning." 
213           gcmstep=1 ; wpsstep=1 ; realstep=1 ; wrfstep=1 ;;
214esac
215
216
217###################################
218# LINK THE EXECUTABLES OR COMPILE #
219###################################
220 echo '**********************************************'
221 echo "** Compiling option "
222 echo "**      <1> pgf90"
223 echo "**      <2> g95"
224 echo "**      <3> mpi+pgf90"
225 echo "**      <4> ifort"
226 echo "**      <5> mpi+ifort"
227 echo "**      .... more in makemeso ...."
228 echo '**********************************************'
229 echo "Your choice ? (1-5)" ; read compilo
230   if [[ "${compilo}" == "" || ${compilo} -lt 1 || ${compilo} -gt 5 ]]
231   then
232       echo "** well, let's try g95"
233       compilo=2
234   fi
235   if [[ ${compilo} -eq 3 || ${compilo} -eq 5 ]]
236   then
237       echo How many processors ? 1, 2, 4, 6, 8, 16 ; read numproc
238   else
239       numproc=1
240   fi
241#if [[ ${i_want_to_compile} -ge 1 ]]
242#then
243 cd ${meso_folder}
244 echo ${compilo} > tmp
245   if [[ ${compilo} -eq 3 ]]
246   then
247        echo ${numproc} >> tmp
248   fi
249 echo ${nest} >> tmp
250
251 if [[ ${newphys} -eq 0 ]]
252 then
253 ./makemeso -d < tmp > /dev/null
254 else
255 ./makemeso -d -p < tmp > /dev/null
256 fi
257
258 \rm tmp 2> /dev/null
259 work_folder=${meso_folder}'/'$(more what_folder)
260 echo 'work_folder : '${work_folder}
261 \rm what_folder 2> /dev/null
262
263 ##################### NB: define the domain if was not done yet
264   if [[ -f "${simu_folder}/namelist.wps" ]]
265   then
266     happy='y'
267   else
268     happy=''
269   fi
270           if [[ ${step} -le 2 ]]
271           then
272           while [[ "${happy}" != "y" ]]
273           do
274             #vi ${simu_folder}/namelist.input
275                if [[ ! ( -d "${work_folder}/WPS" ) ]]
276                then
277                    echo 'no WPS. you need to install it for your architecture'
278                    exit
279                fi
280             \rm ${simu_folder}/namelist.wps 2> /dev/null
281             echo '**********************************************'
282             echo "    !!!   NO namelist.wps FILE FOUND   !!!"   
283             echo '**********************************************'
284             echo 'Please define the domain (not for nests for the moment) : '
285             echo " - 1/4 Projection: polar lambert mercator ? previous is "${proj} ; read proj
286             echo " - 2/4 Data source (multiple if nests): 'gcm' '32ppd' '64ppd' '64ppd_noHRti' '32ppd_HRalb' ? previous is "${data_source} ; read data_source
287             echo " - 3/4 North Latitude of domain centre ? previous is "${lat} ; read lat
288             echo " - 4/4 East  Longitude of domain centre ? previous is "${lon} ; read lon
289             #####
290             sed s+"__INTERVAL_SECONDS__"+"${interval_seconds}"+g ${meso_folder}/SIMU/namelist.wps | sed s+"__MAX_DOM__"+"${max_dom}"+g | sed s+"__PARENT_ID__"+"${parent_id}"+g |  sed s+"__PARENT_GRID_RATIO__"+"${parent_grid_ratio}"+g |  sed s+"__I_PARENT_START__"+"${i_parent_start}"+g | sed s+"__J_PARENT_START__"+"${j_parent_start}"+g | sed s+"__E_WE__"+"${e_we}"+g | sed s+"__E_SN__"+"${e_sn}"+g | sed s+"__DX__"+"${dx}"+g | sed s+"__DY__"+"${dy}"+g | sed s+"__PROJ__"+"${proj}"+g | sed s+"__DATA_SOURCE__"+"${data_source}"+g | sed s+"__LAT__"+"${lat}"+g | sed s+"__LON__"+"${lon}"+g | sed s+'0000-00-00_00:00:00'+${year}'-'${month}'-'${day}'_'${hour}':00:00'+g | sed s+'1111-11-11_11:11:11'+${eyear}'-'${emonth}'-'${eday}'_'${ehour}':00:00'+g > ${simu_folder}/namelist.wps
291             ####
292             ln -sf ${simu_folder}/namelist.wps ${work_folder}/WPS/namelist.wps
293             #vi       ${work_folder}/WPS/namelist.wps
294             echo '**********************************************'
295             echo OK, thank you. Please wait... ncview will pop up soon !
296             cd ${work_folder}/WPS/
297             \rm geo_em.d0*.nc 2> /dev/null
298             ./geogrid.exe > /dev/null 2> /dev/null
299             ncview geo_em.d01.nc > /dev/null 2> /dev/null &
300                if [[ -f "geo_em.d02.nc" ]]
301                then
302                     ncview geo_em.d02.nc > /dev/null 2> /dev/null &
303                fi
304                if [[ -f "geo_em.d03.nc" ]]
305                then
306                     ncview geo_em.d03.nc > /dev/null 2> /dev/null &
307                fi
308             cd       ${simu_folder}/
309             echo     '**********************************************' 
310             echo     'Are you happy with the results ? type y if yes, any key if no' ; read happy
311            done
312            fi
313 #####################
314 if [[ ${i_want_to_compile} -ge 1 ]]
315 then
316 cd ${simu_folder}
317     ## corresponding executables
318    wrfexe=${work_folder}/wrf_x${nx}_y${ny}_z${nz}_d${nest}_t${tracers}_p${numproc}.exe
319    realexe=${work_folder}/real_x${nx}_y${ny}_z${nz}_d${nest}_t${tracers}_p${numproc}.exe
320 if [[ -f ${wrfexe} ]]
321 then
322     echo '**********************************************'
323     echo "    !!!   wrf.exe exists in ${work_folder}"
324     echo '**********************************************'
325     echo "Recompile ? ('yes' to accept, any key to refuse)" ; read reply
326 else
327     reply='yes'
328 fi
329 echo '********************************************** OK thanks. Now please wait...'
330 echo '                                       '
331 if [[ "${reply}" == "yes" ]]
332 then
333 #####################
334 echo "** "Begin compilation process...
335 \rm ${wrfexe} 2> /dev/null
336 \rm ${realexe} 2> /dev/null
337   #
338   # CREATE makemeso_input
339   #
340   \rm ${simu_folder}/makemeso_input 2> /dev/null
341   touch ${simu_folder}/makemeso_input
342   echo ${compilo} >> ${simu_folder}/makemeso_input
343   if [[ "${compilo}" = "3" || "${compilo}" = "5" ]]
344     then
345         echo ${numproc} >> ${simu_folder}/makemeso_input
346   fi
347   echo ${nx} >> ${simu_folder}/makemeso_input
348   echo ${ny} >> ${simu_folder}/makemeso_input
349   echo ${nz} >> ${simu_folder}/makemeso_input
350   echo ${nest} >> ${simu_folder}/makemeso_input
351   echo ${tracers} >> ${simu_folder}/makemeso_input
352   #echo 'y' >> ${simu_folder}/makemeso_input
353   #
354   # COMPILE THE MODEL
355   #
356   cd ${meso_folder}
357                      if [[ "${changeregis}" = "1" ]]
358                      then
359                          cd ${work_folder}/WRFV2/Registry
360                          \rm Registry 2> /dev/null
361                          ./Registry.bash
362                          cd ../../..
363                      fi
364
365     ##******
366     if [[ ${newphys} -eq 0 ]]
367     then
368       ./makemeso -r < ${simu_folder}/makemeso_input
369     else
370       ./makemeso -r -p < ${simu_folder}/makemeso_input
371     fi
372     ##******
373
374
375   if [[ -f ${wrfexe} ]]
376   then
377       echo "** "seems OK ... linking executables
378       ln -sf ${wrfexe} ${simu_folder}/wrf.exe
379       ln -sf ${realexe} ${simu_folder}/real.exe
380       chmod a+x ${realexe} ${wrfexe} ## sait-on jamais
381       cd $simu_folder
382   else
383       echo no ${wrfexe}
384       echo problem with the compilation
385       exit
386   fi
387 else
388     #echo simply linking existing executables...
389     ln -sf ${wrfexe} ${simu_folder}/wrf.exe
390     ln -sf ${realexe} ${simu_folder}/real.exe
391     chmod a+x ${realexe} ${wrfexe} ## sait-on jamais
392 fi
393fi
394
395######################################
396# 1. RUN GCM FOR INIT/BDY CONDITIONS #
397######################################
398if [ ${gcmstep} -eq 1 ]
399then
400 echo '************************************'
401 echo '**** Step 1: Prepare GCM inputs ****'
402 echo '************************************'
403        #
404        # run GCM
405        #
406        if [[ ${newphys} -eq 0 ]]
407        then
408          cd ${main_folder}'/LMDZ.MARS/myGCM'
409        else
410          cd ${main_folder}'/LMDZ.MARS.new/myGCM'
411        fi
412         #echo '(during the run, you might like to check domain settings in '${work_folder}'/WPS)'
413        echo ${daygcm} | ./launch_gcm
414        #
415        # prepare files for WPS
416        #
417        cd ${work_folder}
418        if [[ -f ${work_folder}/PREP_MARS/create_readmeteo.exe && -f ${work_folder}/PREP_MARS/readmeteo.exe ]]
419        then
420              cd ${work_folder}/PREP_MARS/ 
421                ./compile_and_exec
422              #echo 1 | ./create_readmeteo.exe
423              #./readmeteo.exe < readmeteo.def
424        else
425              echo please compile the PREP_MARS utilities in ${work_folder}
426              exit
427        fi
428fi     
429
430###################################
431# 2. RUN WRF PREPROCESSING SYSTEM #
432###################################
433if [ ${wpsstep} -eq 1 ]
434then
435 echo '*****************************************'
436 echo '**** Step 2: Perform WPS interpolations *'
437 echo '*****************************************'
438        if [[ -f ${work_folder}/WPS/geogrid.exe && -f ${work_folder}/WPS/metgrid.exe ]]
439        then
440              \rm -rf ${simu_folder}/met_em 2> /dev/null
441              mkdir ${simu_folder}/met_em
442              cd ${work_folder}/WPS/
443              \rm -rf ${work_folder}/WPS/WRFFEED/current 2> /dev/null
444              mkdir ${work_folder}/WPS/WRFFEED/current
445              ln -sf ${simu_folder}/namelist.wps ${work_folder}/WPS/namelist.wps
446              #mv namelist.wps namelist.wps.tmp
447              #sed s+'0000-00-00_00:00:00'+${year}'-'${month}'-'${day}'_'${hour}':00:00'+g namelist.wps.tmp | sed s+'1111-11-11_11:11:11'+${eyear}'-'${emonth}'-'${eday}'_'${ehour}':00:00'+g > namelist.wps
448              ./geogrid.exe
449              ./metgrid.exe
450              #mv namelist.wps ${simu_folder}
451              #mv namelist.wps.tmp namelist.wps 
452              namedata=$(date +simu_%d%h%Y_%H%M)
453              mv ${work_folder}/WPS/WRFFEED/current ${work_folder}'/WPS/WRFFEED/'${namedata}
454              echo met_em files in $namedata
455              cd ${simu_folder}/met_em
456              ln -sf ${work_folder}/WPS/WRFFEED/${namedata}/* .
457              cd ${simu_folder}
458        else
459              echo please compile the WPS utilities in ${work_folder}
460              exit
461        fi
462fi     
463
464###################
465# 3. RUN REAL.EXE #
466###################
467if [ ${realstep} -eq 1 ]
468then
469 echo '*******************************'
470 echo '**** Step 3: Execute real.exe *'
471 echo '*******************************'
472        cd ${simu_folder}
473        if [[ ! -d met_em ]]
474        then
475                ls
476                echo "PB: no met_em files:"
477                echo "mkdir met_em folder then link met_em** files !"
478                exit
479        fi
480        cd ${simu_folder}/met_em
481        ln -sf ${simu_folder}/namelist.input .
482        ln -sf ${simu_folder}/real.exe .
483        rm -rf ${simu_folder}/met_em/wrfbdy* 2> /dev/null
484        rm -rf ${simu_folder}/met_em/wrfinput* 2> /dev/null
485        if [[ ${compilo} -eq 3 ]]
486        then
487                rm -rf ${simu_folder}/met_em/rsl.* 2> /dev/null
488                echo "check in "${simu_folder}"/met_em/rsl.out.0000"
489                ./real.exe
490                tail -n 4 ${simu_folder}"/met_em/rsl.out.0000"
491        else
492                rm -rf ${simu_folder}/met_em/log* 2> /dev/null
493                echo "check in "${simu_folder}"/met_em/log_real"
494                real.exe > log_real
495                tail -n 4 ${simu_folder}"/met_em/log_real"
496        fi
497        if [[ -f ${simu_folder}/met_em/wrfinput_d01 && -f ${simu_folder}/met_em/wrfbdy_d01 ]]
498        then
499                echo ok... link ini and bdy conditions
500                cd ${simu_folder}
501                ln -sf ${simu_folder}/met_em/wrf*_d0* .
502        else
503                echo mmm... there was a problem, see log files in met_em
504                exit
505        fi
506fi
507
508##################
509# 4. RUN WRF.EXE #
510##################
511if [ ${wrfstep} -eq 1 ]
512then
513 xeyes &
514 echo '******************************'
515 echo '**** Step 4: Execute wrf.exe *'
516 echo '******************************'
517        cd ${simu_folder}
518        rm -rf ${simu_folder}/wrfout*
519        ln -sf ${datafile} datafile
520        if [[ ${compilo} -eq 3 ]]
521        then
522                rm -rf ${simu_folder}/rsl.* 2> /dev/null
523#                ${WHERE_MPI}/mpirun -host smith -np ${numproc} wrf.exe < /dev/null &
524                ${WHERE_MPI}/mpirun -np ${numproc} wrf.exe < /dev/null &
525        else
526                rm -rf ${simu_folder}/log* 2> /dev/null
527                nohup wrf.exe > log_wrf &
528        fi
529echo OK ! Simulation should be running now !
530echo Check with the command: "ps -e -o '%u %p %C %x %c' | grep wrf.exe"
531echo '******************************'
532echo '**** End.'
533
534fi
535exit
536
537
538
Note: See TracBrowser for help on using the repository browser.