source: trunk/src/compute_erai_daily_region_2d.sh @ 26

Last change on this file since 26 was 26, checked in by pinsard, 13 years ago

progess on interpolation tools (to be cont.)

File size: 16.4 KB
Line 
1#! /bin/sh
2#
3#+
4#
5# .. program:: compute_erai_daily_region_2d.sh
6#
7# .. _compute_erai_daily_region_2d.sh:
8#
9# ==========================================================================
10# compute_erai_daily_region_2d.sh - get ERA-I uninterpolated reference files
11# ==========================================================================
12#
13# SYNOPSIS
14# ========
15#
16# ::
17#
18#  $ compute_erai_daily_region_2d.sh
19#
20# DESCRIPTION
21# ===========
22#
23# Put in ${TROPFLUX_ID} ERA-Intermin reference files
24#
25# Log file is written on :file:`${TROPFLUX_LOG}/compute_erai_daily_region_2d.log.{YYYYMMDDTHHMMSSZ}`
26#
27#     .. graphviz::
28#
29#        digraph compute_erai_daily_region_2d {
30#           graph [
31#           rankdir="LR",
32#           ]
33#           filein_lsp [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/lsp.yyyymmdd*"];
34#           filein_cp [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/cp.yyyymmdd*"];
35#           filein_e [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/e.yyyymmdd*"];
36#           filein_slhf [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/slhf.yyyymmdd*"];
37#           filein_ssr [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/ssr.yyyymmdd*"];
38#           filein_trd [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/trd.yyyymmdd*"];
39#           filein_sshf [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/sshf.yyyymmdd*"];
40#           filein_ssrd [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/ssrd.yyyymmdd*"];
41#           filein_str [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/str.yyyymmdd*"];
42#           filein_ewss [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/ewss.yyyymmdd*"];
43#           filein_nsss [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/nsss.yyyymmdd*"];
44#           filein_geopt [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/mm/geopt.yyyymm.ashei.GLOBAL_075.nc"];
45#           filein_msl [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/mm/msl.yyyymm.ashei.GLOBAL_075.nc"];
46#           filein_sstk [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/mm/sstk.yyyymm.ashei.GLOBAL_075.nc"];
47#           filein_t2 [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/mm/t2.yyyymm.ashei.GLOBAL_075.nc"];
48#           filein_d2 [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/mm/d2.yyyymm.ashei.GLOBAL_075.nc"];
49#           filein_u10 [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/mm/u10.yyyymm.ashei.GLOBAL_075.nc"];
50#           filein_v10 [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/mm/v10.yyyymm.ashei.GLOBAL_075.nc"];
51#
52#           fileout_lsp [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_lsp_gridOrig.nc"];
53#           fileout_cp [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_cp_gridOrig.nc"];
54#           fileout_e [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_e_gridOrig.nc"];
55#           fileout_slhf [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_slhf_gridOrig.nc"];
56#           fileout_ssr [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_ssr_gridOrig.nc"];
57#           fileout_trd [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_trd_gridOrig.nc"];
58#           fileout_sshf [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_sshf_gridOrig.nc"];
59#           fileout_ssrd [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_ssrd_gridOrig.nc"];
60#           fileout_str [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_str_gridOrig.nc"];
61#           fileout_ewss [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_ewss_gridOrig.nc"];
62#           fileout_nsss [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_nsss_gridOrig.nc"];
63#           fileout_geopt [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_geopt_gridOrig.nc"];
64#           fileout_msl [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_msl_gridOrig.nc"];
65#           fileout_sstk [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_sstk_gridOrig.nc"];
66#           fileout_t2 [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_t2_gridOrig.nc"];
67#           fileout_d2 [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_d2_gridOrig.nc"];
68#           fileout_u10 [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_u10_gridOrig.nc"];
69#           fileout_v10 [shape=ellipse,fontname=Courier,label="${TROPFLUX_ID}/erai_GLOB_1d_yyyy0101_yyyy1231_v10_gridOrig.nc"];
70#
71#           compute_erai_daily_region_2d [shape=box,
72#           fontname=Courier,
73#           color=blue,
74#           URL="http://forge.ipsl.jussieu.fr/tropflux/browser/trunk/src/compute_erai_daily_region_2d.sh",
75#           label="${TROPFLUX}/src/compute_erai_daily_region_2d.sh"];
76#
77#           {filein_lsp filein_cp filein_e filein_slhf filein_ssr filein_trd filein_sshf filein_ssrd filein_trd filein_str filein_ewss filein_nsss filein_geopt filein_msl filein_sstk filein_t2 filein_d2 filein_u10 filein_v10} -> {compute_erai_daily_region_2d} -> {fileout_lsp fileout_cp fileout_e fileout_slhf fileout_ssr fileout_trd fileout_sshf fileout_ssrd fileout_trd fileout_str fileout_ewss fileout_nsss fileout_geopt fileout_msl fileout_sstk fileout_t2 fileout_d2 fileout_u10 fileout_v10}
78#
79#       }
80#
81# EXAMPLES
82# ========
83#
84# On climserv only if you don't have any ERA-I reference data,
85# you just have to run this tool ::
86#
87#  $ compute_erai_daily_region_2d.sh
88#
89# And look at log file with ::
90#
91#  $ tlogd.sh compute_erai_daily_region_2d
92#
93# and of course on files in ${TROPFLUX_ID}.
94
95#
96# SEE ALSO
97# ========
98#
99# :ref:`guide data ERA-I <data_in_erai>`
100#
101# http://climserv.ipsl.polytechnique.fr/fr/les-donnees/era-interim-4.html
102# for variables names
103#
104# :ref:`tropflux_profile.sh`
105#
106# :func:`ncpdq <nco:ncpdq>`
107# :func:`ncks <nco:ncks>`
108# :func:`ncrcat <nco:ncrcat>`
109# :func:`ncea <nco:ncea>`
110# :func:`ncflint <nco:ncflint>`
111#
112# :ref:`interp_erai_dewt_1989_2009.pro`
113# :ref:`interp_erai_lwr_1989_2009.pro`
114# :ref:`interp_erai_sst_1989_2009.pro`
115# :ref:`interp_erai_t2m_1989_2009.pro`
116# :ref:`interp_erai_ws_1989_2009.pro`
117#
118# TODO
119# ====
120#
121# make it work
122#
123# avoid ncrcat interactive question
124#
125# split get and process files
126#
127# hard coded directory - usage of ${TROPFLUX_ID}
128#
129# coding rules
130#
131# ref. to nco commands not function but programs (pb of Sphinx inventory - nco.inv - syntax)
132#
133# resolve missing long name variable for Netcdfname in http://climserv.ipsl.polytechnique.fr/fr/les-donnees/era-interim-4.html
134#
135#  - slhf
136#  - trd
137#  - sshf
138#
139# EVOLUTIONS
140# ==========
141#
142# - fplod 20101223T084153Z aedon.locean-ipsl.upmc.fr (Darwin)
143#
144#   * add reference to nco commands
145#
146# - fplod 20101220T150356Z aedon.locean-ipsl.upmc.fr#
147#
148#   * indentation
149#   * replace date by yyyy (date is a shell command)
150#   * replace for yyyy by while yyyy
151#   * replace for month by while month
152#   * replace for day by while day
153#   * work only on existing dates
154#
155# - fplod 20101220T142107Z aedon.locean-ipsl.upmc.fr (Darwin)
156#
157#   * add Long name variables
158#   * replace /bdd/IPCC/Reanalysis/ERAI/${reg}/ by ${TROPFLUX_ID}
159#   * add examples
160#   * add log management
161#   * dirtemp not hard coded values
162#   * check dirin permission
163#
164# - fplod 20101216T110626Z aedon.locean-ipsl.upmc.fr (Darwin)
165#
166#   * add minimal header
167#   * add graph in header
168#
169#-
170system=$(uname)
171case "${system}" in
172   AIX|IRIX64)
173      echo "www : no specific posix checking"
174   ;;
175   *)
176     set -o posix
177   ;;
178esac
179unset system
180#
181LANG=POSIX
182#
183command=$(basename ${0})
184log_date=$(date -u +"%Y%m%dT%H%M%SZ")
185#
186usage=" Usage : ${command}"
187#
188hostname=$(hostname)
189# default
190# N.A. because no parameters
191#
192set -u
193#
194# check for ${TROPFLUX_LOG} definition
195if [ "${TROPFLUX_LOG}" = "" ]
196then
197   echo "${command} : eee : \${TROPFLUX_LOG} not defined"
198   exit 1
199fi
200#
201# check for ${TROPFLUX_LOG} existence
202if [ ! -d ${TROPFLUX_LOG} ]
203then
204   echo "${command} : eee : ${TROPFLUX_LOG} not found"
205   exit 1
206fi
207#
208# check for permission access on TROPFLUX_LOG
209if [ ! -x ${TROPFLUX_LOG} ]
210then
211   echo "${command} : eee : ${TROPFLUX_LOG} not reachable"
212   exit 1
213fi
214#
215# check for write permission on TROPFLUX_LOG
216if [ ! -w ${TROPFLUX_LOG} ]
217then
218   echo "${command} : eee : ${TROPFLUX_LOG} not writable"
219   exit 1
220fi
221#
222dirtemp=${TROPFLUX_LOG}/$(basename ${0} .sh).${log_date}.temp/
223mkdir -p ${dirtemp}
224#
225log=${TROPFLUX_LOG}/$(basename ${0} .sh).log.${log_date}
226echo "[Context]" 1>> ${log}
227echo "command=$(basename ${0})" 1>>${log}
228echo "hostname=${hostname}" 1>> ${log}
229echo "runtime=${log_date}" 1>> ${log}
230unset log_date
231echo "" 1>> ${log}
232#
233minlat=-90.
234maxlat=90.
235minlon=0.
236maxlon=360.
237reg=GLOB
238yearmin=1989
239yearmax=2010
240monthmin=1
241monthmax=12
242cmonthmin=$(printf "%2.2d" ${monthmin})
243cmonthmax=$(printf "%2.2d" ${monthmax})
244dirin=/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/
245# check for dirin existence
246if [ ! -d ${dirin} ]
247then
248   echo "${command} : eee : ${dirin} not found"
249   exit 1
250fi
251#
252# check for permission access on dirin
253if [ ! -x ${dirin} ]
254then
255   echo "${command} : eee : ${dirin} not reachable"
256   exit 1
257fi
258#
259# lsp = Large scale precipitation
260# cp = Convective precipitation
261for var in lsp cp; do
262   yyyy=${yearmin}
263   while [ ${yyyy} -le ${yearmax} ]
264   do
265      month=${monthmin}
266      while [ ${month} -le ${monthmax} ]
267      do
268         cmonth=$(printf "%2.2d" ${month})
269         daymin=1
270         daymax=$(cal ${month} ${yyyy} | grep . | fmt -1 | tail -1)
271         day=${daymin}
272         while [ ${day} -le ${daymax} ]
273         do
274            cday=$(printf "%2.2d" ${day})
275            if [ -f ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}* ] 
276            then
277               ncpdq -U ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}* ${dirtemp}/${var}.${yyyy}${cmonth}${cday}.temp.GLOBAL_075.nc
278            else
279               echo "${command} : iii : no files ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}*" >> ${log}
280            fi
281            day=$(( ${day} + 1 ))
282         done
283         exist_temp_files=$(find ${dirtemp} -name "${var}.${yyyy}${cmonth}*temp*")
284         if [ "${exist_temp_files}" != "" ]
285         then
286            ncrcat ${dirtemp}/${var}.${yyyy}${cmonth}*temp*  ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc
287            rm ${dirtemp}/${var}.${yyyy}${cmonth}*temp* 2> /dev/null
288            ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,0,,5 ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc ${dirtemp}/temp_time0.nc
289            ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,4,,5 ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc ${dirtemp}/temp_time4.nc
290            ncflint -w -1,1 ${dirtemp}/temp_time0.nc ${dirtemp}/temp_time4.nc ${dirtemp}/temp_time.nc
291            ncflint -w 1000.,0.0 ${dirtemp}/temp_time.nc ${dirtemp}/temp_time.nc ${dirtemp}/temp_int_${var}_${yyyy}${cmonth}.nc
292            rm ${dirtemp}/temp_time* 2> /dev/null
293            rm ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc 2> /dev/null
294         else
295            echo "${command} : iii : no files ${dirtemp}/${var}.${yyyy}${cmonth}*temp*" >> ${log}
296         fi
297         unset exist_temp_files
298         month=$(( ${month} + 1 ))
299      done
300      ncrcat ${dirtemp}/temp_int_${var}_${yyyy}* ${TROPFLUX_ID}/erai_${reg}_1d_${yyyy}${cmonthmin}01_${yyyy}${cmonthmax}31_${var}_gridOrig.nc
301      rm ${dirtemp}/temp_int_${var}_${yyyy}* 2> /dev/null
302      yyyy=$(( ${yyyy} + 1 ))
303   done
304done
305#
306# e = Evaporation
307# slhf = ?
308# ssr = Surface solar radiation
309# trd = ?
310# sshf = ?
311# ssrd = Downward surface solar radiation
312# str = Surface thermal radiation
313# ewss = East /West surface stress
314# nsss = North/South surface stress
315for var in e slhf ssr trd sshf ssrd str ewss nsss ; do
316   yyyy=${yearmin}
317   while [ ${yyyy} -le ${yearmax} ]
318   do
319      month=${monthmin}
320      while [ ${month} -le ${monthmax} ]
321      do
322         cmonth=$(printf "%2.2d" ${month})
323         daymin=1
324         daymax=$(cal ${month} ${yyyy} | grep . | fmt -1 | tail -1)
325         day=${daymin}
326         while [ ${day} -le ${daymax} ]
327         do
328            cday=$(printf "%2.2d" ${day})
329            if [ -f ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}* ] 
330            then
331               ncpdq -U ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}* ${dirtemp}/${var}.${yyyy}${cmonth}${cday}.temp.GLOBAL_075.nc
332            else
333               echo "${command} : iii : no files ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}*" >> ${log}
334            fi
335            day=$(( ${day} + 1 ))
336         done
337         exist_temp_files=$(find  ${dirtemp} -name "${var}.${yyyy}${cmonth}*temp*")
338         if [ "${exist_temp_files}" != "" ]
339         then
340            ncrcat ${dirtemp}/${var}.${yyyy}${cmonth}*temp*  ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc
341            rm ${dirtemp}/${var}.${yyyy}${cmonth}*temp* 2> /dev/null
342            ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,0,,5 ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc ${dirtemp}/temp_time0.nc
343            ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,4,,5 ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc ${dirtemp}/temp_time4.nc
344            ncflint -w 1.1574074,-1.1574074 ${dirtemp}/temp_time0.nc ${dirtemp}/temp_time4.nc ${dirtemp}/temp_time.nc
345            ncflint -w 0.00001,0.0 ${dirtemp}/temp_time.nc ${dirtemp}/temp_time.nc ${dirtemp}/temp_int_${var}_${yyyy}${cmonth}.nc
346            rm ${dirtemp}/temp_time* 2> /dev/null
347            rm ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc 2> /dev/null
348         else
349            echo "${command} : iii : no files ${dirtemp}/${var}.${yyyy}${cmonth}*temp*" >> ${log}
350         fi
351         unset exist_temp_files
352         month=$(( ${month} + 1 ))
353      done
354      ncrcat ${dirtemp}/temp_int_${var}_${yyyy}* ${TROPFLUX_ID}/erai_${reg}_1d_${yyyy}${cmonthmin}01_${yyyy}${cmonthmax}31_${var}_gridOrig.nc
355      rm ${dirtemp}/temp_int_${var}_${yyyy}* 2> /dev/null
356      yyyy=$(( ${yyyy} + 1 ))
357   done
358done
359#
360# geopt = Geopotentiel
361# msl = Mean sea level pressure
362# sstk = Sea surface temperature
363# t2 = Temperature at 2 meters
364# d2 = Dew point at 2 meters
365# u10 = 10m U wind component
366# v10 = 10m V wind component
367for var in geopt msl sstk t2 d2 u10 v10 ; do
368   yyyy=${yearmin}
369   while [ ${yyyy} -le ${yearmax} ]
370   do
371      month=${monthmin}
372      while [ ${month} -le ${monthmax} ]
373      do
374         cmonth=$(printf "%2.2d" ${month})
375         ncpdq -U ${dirin}/AN_SF/${yyyy}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc
376         ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,0,,4 ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/temp_time1.nc
377         ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,1,,4 ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/temp_time2.nc
378         ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,2,,4 ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/temp_time3.nc
379         ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,3,,4 ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/temp_time4.nc
380         ncea ${dirtemp}/temp_time* ${dirtemp}/temp_int_${yyyy}${cmonth}.nc
381         rm ${dirtemp}/temp_time* 2> /dev/null
382         rm ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc 2> /dev/null
383         month=$(( ${month} + 1 ))
384      done
385      ncrcat ${dirtemp}/temp_int_${yyyy}* ${TROPFLUX_ID}/erai_${reg}_1d_${yyyy}${cmonthmin}01_${yyyy}${cmonthmax}31_${var}_gridOrig.nc
386      rm ${dirtemp}/temp_int_${yyyy}* 2> /dev/null
387      yyyy=$(( ${yyyy} + 1 ))
388   done
389done
390#
391# end
392exit 0
Note: See TracBrowser for help on using the repository browser.