source: CONFIG/UNIFORM/v6/IPSLCM6.2/compile_ipslcm6.sh @ 5030

Last change on this file since 5030 was 5030, checked in by jgipsl, 4 years ago

Add arch for IRENE-AMD and switch in compilation script as done in IPSLCM6.2

  • Property svn:executable set to *
File size: 18.0 KB
Line 
1#!/bin/bash
2#set -vx
3# Default options
4#
5#
6#
7date
8#### 1  Set up the compiling options
9#### Define some directories
10submitdir=$( pwd )
11modipsl=$submitdir/../..
12arch_path=$submitdir/ARCH
13mysrc_path=$submitdir/SOURCES
14
15#### Set default options
16# Atmospheric resolution, for LMDZ/ORCHIDEE in regular mode
17resol_atm=144x142x79
18# Oceanic resolution, for NEMO (ORCA2/ORCA1/ORCA025)
19resol_oce=ORCA1
20# Version of ice model lim2/lim3
21icemodel=lim3
22# Coupled with ocean biogeochemistry (y/n)
23oceanbio=y
24# Version ESM CO2: CO2 interactif ocean/atmosphere (y/n)
25esmco2=n
26# Version ESM AER : Aer interactif chemistry / atmosphere (y/n)
27esmaer=n
28# Also compile ce0l subprogram to LMDZ (y/n)
29ce0l=n
30
31# Optimization mode
32# optmode=prod/dev/debug
33optmode=prod
34# fcm_arch
35fcm_arch=default
36# Default values to be overritten
37parallel=mpi_omp
38export fcm_arch parallel xios
39full_flag=""
40full_nemo=n
41full_inca=""
42full_xios=""
43full_lmdz=""
44full_orch=""
45
46
47
48# Output text file for compilation of each component
49datestr=`LC_ALL=C date +"%Y%m%dT%H%M"`
50outfile=$submitdir/out_compile_ipslcm6.$datestr
51echo > $outfile
52echo; echo "Text output from compilation will be stored in file out_compile_ipslcm6.$datestr"; echo 
53
54#### Read arguments
55# Loop over all arguments to modify default set up
56while (($# > 0)) ; do
57    case $1 in
58        "-h") cat <<end_help
59########################################################################
60# Usage of the script compile_ipslcm6.sh
61#
62########################################################################
63
64./compile_ipslcm6.sh [Options]
65
66
67Options: [LR / VLR / MR1 / MR025] Model resolution, choose only one. Default: LR.
68         [ESMCO2] Compile IPSLCM6 for CO2 interactif ocean/atmosphere.
69         [ESMAER] Compile IPSLCM6 for AER interactif on atmosphere
70         [-full] Full recompilation of all components. This option can be added to all other options.
71         [-cleannemo] Full recompilation of NEMO component  only.
72         [-debug / -dev / -prod] Level of optimization. One of these can be added to all other compile options. Default: -prod.
73
74
75Example 1: Default compilation of IPSLCM6 for resoltion LR
76          (Resolution atmos: 144x142x79, ocean: ORCA1)
77./compile_ipslcm6.sh
78
79Example 2: Compilation of IPSLCM6 for resolution MR025
80           (atmos: 256x256x79, ocean: ORCA025, NOPISCES)
81./compile_ipslcm6.sh MR025
82
83Example 3: Compilation of IPSLCM6 for ESM CO2
84./compile_ipslcm6.sh ESMCO2 -cleannemo
85
86Example 4: Default resoltuion (LR) compiled in debug mode
87./compile_ipslcm6.sh -debug
88
89Example 5: Default compilation with full recompilation of all components. No clean is needed.
90./compile_ipslcm6.sh -full
91
92Example 6: Full recompilation of resolution MR05 in debug mode
93./compile_ipslcm6.sh MR025 -debug -full
94
95end_help
96exit;;
97        "VLR")         resol_atm=96x95x39; resol_oce=ORCA2 ; icemodel=lim2; oceanbio=y; shift ;;
98        "LR")          resol_atm=144x142x79; resol_oce=ORCA1 ; icemodel=lim3; oceanbio=y; shift ;;
99        "MR1")         resol_atm=256x256x79; resol_oce=ORCA1 ; icemodel=lim3; oceanbio=y; shift ;;
100        "MR025")       resol_atm=256x256x79; resol_oce=ORCA025 ; icemodel=lim3; oceanbio=n;   shift ;;
101        "ESMCO2")      esmco2=y;  shift ;;
102        "ESMAER")      esmaer=y; shift ;;
103        "CE0L")        ce0l=y ; shift ;;
104        "-parallel")   parallel=$2 ; shift ; shift ;;
105        "-arch")       fcm_arch="$2" ; shift ; shift ;;
106        "-debug")      optmode=debug ; shift ;;
107        "-dev")        optmode=dev ; shift ;;
108        "-prod")       optmode=prod ; shift ;;
109        "-full")       full_flag="-full"; full_nemo=y ; full_xios="--full" ; full_lmdz="-full" ; full_orch="-full" ; shift ;;
110        "-full_xios")  full_xios="--full" ; shift ;;  # Note only full_xios is using double dash: --full
111        "-full_lmdz")  full_lmdz="-full"  ; shift ;;
112        "-full_orch")  full_orch="-full"  ; shift ;;
113        "-full_nemo")  full_nemo=y ; shift ;;
114        "-full_inca")  full_inca="-clean"; shift ;;
115        "-cleannemo")  full_nemo=y ; shift ;;
116        *)             echo "unknown option "$1" , exiting..." ; exit
117    esac
118done
119
120echo "Following options are set in current compiling:" >> $outfile
121echo "   resol_atm=${resol_atm}, resol_oce=${resol_oce}, icemodel=${icemodel}, oceanbio=${oceanbio}" >> $outfile 
122echo "   esmco2=${esmco2}, esmaer=${esmaer}" >> $outfile 
123echo "   ce0l=${ce0l}" >> $outfile 
124echo "   optmode = $optmode, parallel = $parallel, fcm_arch = $fcm_arch " >> $outfile 
125echo "   full_flag=$full_flag, full_xios=$full_xios, full_lmdz=$full_lmdz, full_orch=$full_orch, full_nemo=$full_nemo," >> $outfile 
126echo >> $outfile
127
128### Read host dependent default values
129### These variables will not be changed if they were set as argument
130###./host.sh $host
131# Later : Following lines should be set in host.sh file
132# begin host.sh
133if [ $fcm_arch == default ] ; then
134    # Find out current host and source specific paths and commands for the host
135    case $( hostname -s ) in
136        jean-zay*)
137            fcm_arch=X64_JEANZAY;;
138        irene170|irene171|irene190|irene191|irene192|irene193)
139            fcm_arch=X64_IRENE;;
140        irene172|irene173|irene194|irene195)
141            fcm_arch=X64_IRENE-AMD;;
142        asterix*|obelix*)
143            fcm_arch=ifort_LSCE
144            if [ "${parallel}" == "mpi_omp" ] ; then
145                echo "Warning!! Currently at Obelix hybrid mode is not possible."
146                echo "          Option -parallel mpi_omp is now changed to -parallel mpi"
147                echo ""
148                parallel=mpi
149            else
150                echo "You used -parallel" $parallel
151            fi ;;
152        ciclad*|climserv*|loholt*|camelot*)
153            fcm_arch=ifort_CICLAD;;
154        *)
155            echo Current host is not known. You must use option -arch to specify which architecuture files to use.
156            echo Exit now.
157            exit
158    esac
159fi
160
161# Set a link to arch.env if arch-${fcm_arch}.env file exist for current fcm_arch.
162# The link arch.env is also set in config.card and will be used by libIGCM to ensure the same running environnement.
163if [ -f ARCH/arch-${fcm_arch}.env ] ; then
164    echo >> $outfile
165    echo "The file ARCH/arch-${fcm_arch}.env will now be sourced with modules needed for compilation for all components."
166    echo "Note that this new environement might be kept after compilation." 
167    echo "If this is the case, source again your personal environment after compilation. "
168    echo " Personal module list before sourcing of ARCH/arch.env file:"    >> $outfile 
169    module list   >> $outfile 2>&1
170
171    # Make a link to this file, to be used also in config.card
172    rm -f ARCH/arch.env
173    ln -s arch-${fcm_arch}.env ARCH/arch.env
174
175    # Source the file
176    source ARCH/arch.env   >> $outfile 2>&1
177    echo >> $outfile 
178    echo " New module list after sourcing of ARCH/arch.env file:"    >> $outfile 
179    module list   >> $outfile 2>&1
180fi
181
182#### 2 Do the compilation
183## 2.1 Compile ioipsl
184cd $modipsl/modeles/IOIPSL
185echo; echo "NOW COMPILE IOIPSL"
186echo >> $outfile ; echo " NOW COMPILE IOIPSL"   >> $outfile 
187
188# Check if compilation with fcm is included in IOIPSL
189if [ ! -f makeioipsl_fcm ] ; then
190  echo "The file makeiopsl_fcm do not exist. Probably this is not the right version of IOIPSL."
191  echo "Version of IOIPSL with fcm compilation is needed to compile with this script. Stop now."
192  exit
193fi
194
195echo ./makeioipsl_fcm -$optmode -parallel -arch ${fcm_arch} -arch_path $arch_path -j 8 $full_flag   >> $outfile 
196     ./makeioipsl_fcm -$optmode -parallel -arch ${fcm_arch} -arch_path $arch_path -j 8 $full_flag   >> $outfile 2>&1
197# Test if compiling succeded
198if [[ $? != 0 ]] ; then
199    echo "THERE IS A PROBLEM IN IOIPSL COMPILATION - STOP"
200    exit
201fi
202
203## 2.2 Compile oasis3-mct
204cd $modipsl/oasis3-mct/util/make_dir
205echo; echo "NOW COMPILE OASIS3-MCT"
206echo >> $outfile ; echo " NOW COMPILE OASIS3-MCT"   >> $outfile
207cp $mysrc_path/OASIS3-MCT/make_${fcm_arch} make.inc
208
209echo make -f TopMakefileOasis3 >> $outfile
210     make -f TopMakefileOasis3 >> $outfile 2>&1
211
212
213## 2.3 Compile xios
214cd $modipsl/modeles/XIOS
215echo; echo "NOW COMPILE XIOS"
216echo >> $outfile ; echo " NOW COMPILE XIOS"   >> $outfile 
217echo ./make_xios --use_oasis oasis3_mct --$optmode --arch $fcm_arch --arch_path $arch_path --job 4 $full_xios   >> $outfile 
218     ./make_xios --use_oasis oasis3_mct --$optmode --arch $fcm_arch --arch_path $arch_path --job 4 $full_xios   >> $outfile 2>&1
219# Test if compiling succeded
220if [[ $? != 0 ]] ; then
221    echo "THERE IS A PROBLEM IN XIOS COMPILATION - STOP"
222    exit
223fi
224# Move executables to modipsl/bin
225if [ -f $modipsl/modeles/XIOS/bin/xios_server.exe ] ; then
226    mv $modipsl/modeles/XIOS/bin/xios_server.exe $modipsl/bin/xios_server_${optmode}.exe
227else
228    echo "THERE IS A PROBLEM IN XIOS COMPILATION EXECUTABLE MISSING - STOP"
229    exit
230fi
231
232
233## 2.4 Compile orchidee
234cd $modipsl/modeles/ORCHIDEE
235echo; echo "NOW COMPILE ORCHIDEE"
236echo >> $outfile ; echo " NOW COMPILE ORCHIDEE"   >> $outfile 
237
238# Check if the compilation of ORCHIDEE was previsouly interupted prematured.
239# In that case, the files fcm.bld.lock exist. If the file exist, it is here removed to avoid makeorchidee_fcm
240# to ask question and wait for interactivly answer from the user.
241if [ -f build/fcm.bld.lock ] ; then
242    echo >> $outfile
243    echo " WARNING!! The file ORCHIDEE/build/fcm.bld.lock exist. "   >> $outfile
244    echo "           This means that the compilation is either currently on going in another terminal was previous interupted before the end."   >> $outfile
245    echo "           The file will now be removed. "   >> $outfile
246    echo >> $outfile
247    rm -f build/fcm.bld.lock
248fi
249
250echo    ./makeorchidee_fcm -j 8 -xios -parallel $parallel -$optmode -arch ${fcm_arch} -arch_path $arch_path $full_orch   >> $outfile 
251        ./makeorchidee_fcm -j 8 -xios -parallel $parallel -$optmode -arch ${fcm_arch} -arch_path $arch_path $full_orch   >> $outfile 2>&1
252# Test if compiling finished
253if [[ $? != 0 ]] ; then
254    echo "THERE IS A PROBLEM IN ORCHIDEE COMPILATION - STOP"
255    exit
256fi
257
258
259## 2.5 Compile NEMO
260nemo_root=$modipsl/modeles/NEMOGCM/CONFIG
261if [ ${icemodel} == lim2 ] ; then
262   addkeys="key_lim2_vp key_diahth key_oasis3"
263   delkeys="key_nosignedzero key_mpp_rep"
264else
265   addkeys="key_top key_pisces key_age key_cfc key_cpl_carbon_cycle key_gas key_oasis3"
266   if [ ${oceanbio} == y ] ; then
267      if [ ${esmco2} == y ] ; then
268         delkeys="key_nosignedzero key_mpp_rep"
269      else
270         delkeys="key_nosignedzero key_mpp_rep key_cpl_carbon_cycle key_gas"
271      fi
272   else
273      delkeys="key_nosignedzero key_mpp_rep key_top key_pisces key_cfc key_age key_cpl_carbon_cycle key_gas"
274   fi
275fi
276
277if [ ${oceanbio} == n ] ; then
278   echo; echo "NOW COMPILE NEMO. Resolution = ${resol_oce} with icemodel ${icemodel} and without PISCES"
279   echo >> $outfile ; echo " NOW COMPILE NEMO. Resolution = ${resol_oce} with icemodel ${icemodel} and without PISCES"   >> $outfile
280else
281   echo; echo "NOW COMPILE NEMO. Resolution = ${resol_oce} with icemodel ${icemodel} and PISCES"
282   echo >> $outfile ; echo " NOW COMPILE NEMO. Resolution = ${resol_oce} with icemodel ${icemodel} and PISCES"   >> $outfile
283fi
284echo >> $outfile ; echo cd $nemo_root  >> $outfile
285echo >> $outfile ; echo cp $modipsl/config/IPSLCM6/SOURCES/NEMO/arch-${fcm_arch}.fcm ../ARCH/.   >> $outfile
286echo >> $outfile
287
288cd $nemo_root ; cp $mysrc_path/NEMO/arch-${fcm_arch}.fcm ../ARCH/.
289
290if [ ${resol_oce} == ORCA2 ]   ; then  cfg_wrk=ORCA2_LIM_PISCES    ; fi
291if [ ${resol_oce} == ORCA1 ]   ; then  cfg_wrk=ORCA1_LIM3_PISCES    ; fi
292if [ ${resol_oce} == ORCA025 ] ; then  cfg_wrk=ORCA025_LIM3_PISCES  ; fi
293
294echo cp $modipsl/config/IPSLCM6/SOURCES/NEMO/*.*90 $nemo_root/$cfg_wrk/MY_SRC/   >> $outfile
295echo >> $outfile
296cp $mysrc_path/NEMO/*.*90  $nemo_root/$cfg_wrk/MY_SRC/
297
298if [ $full_nemo == y ] ; then
299   # To make a full compilation, first make a clean to remove all files produced during previous compilation
300   echo ./makenemo -m ${fcm_arch} -n $cfg_wrk clean   >> $outfile
301   echo >> $outfile
302   ./makenemo -m ${fcm_arch} -n $cfg_wrk clean  >> $outfile 2>&1
303fi
304echo ./makenemo -m ${fcm_arch} -n $cfg_wrk -j16 add_key "$addkeys"  del_key "$delkeys"   >> $outfile
305echo >> $outfile
306./makenemo -m ${fcm_arch} -n $cfg_wrk -j16 add_key "$addkeys"  del_key "$delkeys"  >> $outfile 2>&1
307
308
309# Test if compiling finished
310if [[ $? != 0 ]] ; then
311    echo "THERE IS A PROBLEM IN NEMO COMPILATION - STOP"
312    exit
313fi
314
315echo >> $outfile
316echo "Move nemo executable to modipsl/bin" >> $outfile
317echo ls -lrt $nemo_root/$cfg_wrk/BLD/bin   >> $outfile
318ls -lrt $nemo_root/$cfg_wrk/BLD/bin  >> $outfile
319echo >> $outfile
320
321if [ -f $nemo_root/$cfg_wrk/BLD/bin/nemo.exe ] ; then
322    if [ ${esmco2} == y ] ;  then
323        mv $nemo_root/$cfg_wrk/BLD/bin/nemo.exe $modipsl/bin/opa.ESMCO2_${resol_oce}_${optmode}
324    else
325        mv $nemo_root/$cfg_wrk/BLD/bin/nemo.exe $modipsl/bin/opa_${resol_oce}_${optmode}
326    fi
327fi
328
329
330## 2.6 Compile LMDZ for regular latlon configuration
331# If necessary compile INCA modele with AER configuration
332if [ ${esmaer} == y ] ;  then
333    cd $modipsl/modeles/INCA
334    #compile INCA regulat lat_lon chimie librairy
335    echo; echo "NOW COMPILE INCA AER on resolution = ${resol_atm}"
336    echo ./makeinca_fcm -chimie AER -$optmode -xios -parallel mpi_omp -resol ${resol_atm} -j 8 -arch ${fcm_arch}  -arch_path $arch_path $full_flag $full_inca >> $outfile 
337    ./makeinca_fcm -chimie AER -$optmode -xios -parallel mpi_omp -resol ${resol_atm} -j 8 -arch ${fcm_arch} -arch_path $arch_path  $full_flag $full_inca >> $outfile 2>&1
338
339    # Test if compiling finished
340    if [[ $? != 0 ]] ; then
341        echo "THERE IS A PROBLEM IN INCA COMPILATION - STOP"
342        exit
343    fi
344
345    echo "Move inca.dat modipsl/bin"
346    if [[ -f $modipsl/modeles/INCA/SIMULATIONS/AER/inca.dat ]] ;  then 
347        mv $modipsl/modeles/INCA/SIMULATIONS/AER/inca.dat $modipsl/bin/inca_${resol_atm}_${optmode}_AER.dat ;
348    else
349        echo "THERE IS A PROBLEM IN INCA COMPILATION - STOP"
350        exit   
351    fi
352       
353fi 
354
355
356# Compile LMDZ regular lat-lon executable
357cd $modipsl/modeles/LMDZ
358echo; echo "NOW COMPILE LMDZ REGULAR LAT-LON MODE. Resolution = ${resol_atm}"
359echo >> $outfile ; echo " NOW COMPILE LMDZ REGULAR LAT-LON MODE. Resolution = ${resol_atm}"   >> $outfile 
360
361# Check if the compilation of LMDZ was previsouly interupted prematured.
362# In that case, the files dimension.h and .lock exist. If the files exist, they are here removed to avoid makelmdz_fcm
363# to ask question and wait for interactivly answer from the user.
364if [ -f libf/grid/dimensions.h ] || [ -f .lock ] ; then
365  echo >> $outfile
366  echo " WARNING!! The file LMDZ/libf/grid/dimension.h and/or the LMDZ/.lock exist. "   >> $outfile
367  echo "           This means that the compilation is either currently on going in another terminal was previous interupted before the end."   >> $outfile
368  echo "           The files dimension.h and .lock will now be removed. "   >> $outfile
369  echo >> $outfile
370  rm -f libf/grid/dimensions.h
371  rm -f .lock
372fi
373
374if [ ${esmaer} == n ] ;  then
375    echo ./makelmdz_fcm -d ${resol_atm} -c OMCT -rrtm true -$optmode -mem -parallel $parallel -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz gcm    >> $outfile 
376    ./makelmdz_fcm -d ${resol_atm} -c OMCT -rrtm true -$optmode -mem -parallel $parallel -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz gcm    >> $outfile 2>&1
377else
378    #in esm aer case add chemistry option to lmdz compilation
379    echo ./makelmdz_fcm -d ${resol_atm} -c OMCT -rrtm true -$optmode -mem -parallel $parallel -chimie INCA -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz gcm    >> $outfile 
380    ./makelmdz_fcm -d ${resol_atm} -c OMCT -rrtm true -$optmode -mem -parallel $parallel -chimie INCA -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz gcm    >> $outfile 2>&1
381fi 
382# Test if compiling finished
383if [[ $? != 0 ]] ; then
384    echo "THERE IS A PROBLEM IN LMDZ REGULAR LATLON COMPILATION - STOP"
385    exit
386fi
387
388# Move executables to modipsl/bin folder
389echo >> $outfile
390echo "Move gcm.e executable to modipsl/bin" >> $outfile
391echo ls -lrt $modipsl/modeles/LMDZ/bin   >> $outfile
392ls -lrt $modipsl/modeles/LMDZ/bin  >> $outfile
393echo >> $outfile
394if [ ${esmaer} == n ] ;  then
395    suffix=_${resol_atm}_phylmd_para_mem_orch_couple.e
396else
397    suffix=_${resol_atm}_phylmd_para_mem_orch_couple_inca.e
398fi
399echo gcm suffix = $suffix
400
401if [ -f $modipsl/modeles/LMDZ/bin/gcm${suffix} ] ;  then
402    if [ ${esmaer} == n ] ;  then
403        mv $modipsl/modeles/LMDZ/bin/gcm${suffix} $modipsl/bin/gcm_${resol_atm}_${optmode}.e
404    else
405        mv $modipsl/modeles/LMDZ/bin/gcm${suffix} $modipsl/bin/gcm_${resol_atm}_${optmode}_AER.e
406    fi
407else
408    echo "ERROR gcm${suffix} executable does not exist." 
409    echo "THERE IS A PROBLEM IN LMDZ REGULAR LATLON COMPILATION - STOP"
410    exit
411fi 
412
413
414# Compile ce0l initialization program for LMDZ regular lat-lon exectuable
415if [ $ce0l == y ] ; then
416    echo; echo "NOW COMPILE CE0L OF LMDZ. Resolution = ${resol_atm}"
417    echo >> $outfile ; echo " NOW COMPILE CE0L OF LMDZ. Resolution = ${resol_atm}"   >> $outfile 
418   
419    echo ./makelmdz_fcm -d ${resol_atm} -c OMCT -rrtm true -$optmode -mem -parallel $parallel -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz ce0l    >> $outfile 
420    ./makelmdz_fcm -d ${resol_atm} -c OMCT -rrtm true -$optmode -mem -parallel $parallel -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz ce0l    >> $outfile 2>&1
421    # Test if compiling finished
422    if [[ $? != 0 ]] ; then
423        echo "THERE IS A PROBLEM IN CE0L (LMDZ) REGULAR LATLON COMPILATION - STOP"
424        exit
425    fi
426
427
428    # Move executables to modipsl/bin folder
429    echo >> $outfile
430    echo "Move ce0l.e executable to modipsl/bin" >> $outfile
431    echo ls -lrt $modipsl/modeles/LMDZ/bin   >> $outfile
432    ls -lrt $modipsl/modeles/LMDZ/bin  >> $outfile
433    echo >> $outfile
434    suffix=_${resol_atm}_phylmd_para_mem_orch_couple.e
435    echo ce0l suffix = $suffix
436
437    if [ -f $modipsl/modeles/LMDZ/bin/ce0l${suffix} ] ;  then
438        mv $modipsl/modeles/LMDZ/bin/ce0l${suffix} $modipsl/bin/ce0l_${resol_atm}_${optmode}.e
439    else
440        echo "ERROR ce0l${suffix} executable does not exist." 
441        echo "THERE IS A PROBLEM IN CE0L (LMDZ) REGULAR LATLON COMPILATION - STOP"
442        exit
443    fi 
444fi
445
446echo >>$outfile ; echo "ALL COMPILING FINISHED" >> $outfile
447echo ls -lrt modipsl/bin >> $outfile
448ls -lrt $modipsl/bin >> $outfile
449
450echo; echo "ALL COMPILING FINISHED" ; echo
451echo "Executables are found in modipsl/bin"
452echo "Check that executable names correspond with the name set in config.card before launching the job"
453echo ls -lrt modipsl/bin
454ls -lrt $modipsl/bin
455
456date
457
458exit
459
460
Note: See TracBrowser for help on using the repository browser.