source: palm/trunk/SCRIPTS/mrun @ 182

Last change on this file since 182 was 182, checked in by raasch, 16 years ago

further mpi-version adjustments for sgi-ice

  • Property svn:keywords set to Id
File size: 144.5 KB
Line 
1#!/bin/ksh
2# mrun - Plot-Shellskript
3# $Id: mrun 182 2008-08-04 09:07:43Z raasch $
4
5     # Prozedur zum Starten von Modellaeufen
6
7     # letzte Aenderung:
8     # 03/03/94 - Siggi - Entwicklungsbeginn
9     # 21/03/94 - Siggi - Entwicklungsabschluss (Version 1.0)
10     # 09/12/94 - Siggi - allexport unterbunden; statt dessen werden jetzt ein-
11     #                    zelne Variable exportiert. Dies ist noetig, weil an-
12     #                    sonsten irgendein Speicher ueberlaeuft und von mrun
13     #                    aufgerufene Programme (z.B. stageout) mit Fehlern
14     #                    abbrechen (too many arguments)
15     # 20/06/95 - Siggi - noclobber muss explizit abgeschaltet, da jetzt
16     #                    defaultmaessig im RRZN-Profile eingeschaltet
17     # 10/06/97 - Siggi - Zusaetzliche Option -C bei cpp, damit // nicht
18     #                    wegfallen
19     # 25/04/00 - Siggi - Version 1.5
20     #                    remote_addres und remote_user in return_addres bzw.
21     #                    return_username umbenannt, return_username wird dem
22     #                    mrun-Aufruf im Job ueber Option -U mitgegeben.
23     #                    Neue Variable remote_username, die beim interaktiven
24     #                    mrun-Aufruf zwingend ueber die neue Option -u oder
25     #                    in der Konfigurationsdatei angegeben werden muss.
26     # 08/02/01 - Siggi - Alle mrun-Meldungen ins englische uebersetzt,
27     #                    Version 1.7
28     # 05/05/02 - Siggi - Uebersetzungen mittels make-Mechanismus moeglich
29     # 21/11/02 - Siggi - ENV-Variable XLFRTEOPTS wird vor Ausfuehrung auf
30     #                    IBM gesetzt, um Record-Laenge der NAMELIST-Dateien,
31     #                    zu bestimmen; Praeprozessoroptionen haben nun alle
32     #                    die Form -Dtext=text, weil auf IBM sonst text durch
33     #                    die leere Zeichenkette ersetzt wird
34     # 01/08/03 - Siggi  - Test of implementing dvrp+1PE on ibm
35     # 07/01/04 - Siggi  - additional preprocessor directive for ibm included
36     #                     (-D$OMP=OMP) in order to avoid problems with
37     #                     OMP_NUM_THREADS
38     # 04/01/05 - Siggi  - archiving on hanni and berni is done in separate
39     #                     tar files, one for each node used
40     # 07/01/04 - Siggi  - old code for t3e, vpp and hpcs eliminated
41     # 09/01/05 - Siggi  - workaround for getting the IP address on gfdl3
42     # 17/01/05 - Siggi  - job for data transfer to local machine now within
43     #                     job class c1 (HLRN)
44     # 27/01/05 - Siggi  - IP address workaround for gfdl3 removed
45     # 28/01/05 - Siggi  - tar-filenames on $PERM (HLRN) now include the
46     #                     base filename and cycle number
47     # 16/02/05 - Gerald - hababai validated
48     # 14/03/05 - Siggi  - abort on NEC after first runtime error (F_ERRCNT)
49     # 29/03/05 - Marcus - berni*-en0 validated
50     # 21/04/05 - Siggi  - transfer-job-protocol for avs-data is no more stored
51     # 24/04/05 - Siggi  - netcdf support on lcmuk
52     # 25/04/05 - Siggi  - netcdf support on gfld3 (decalpha)
53     # 11/05/05 - Siggi  - files with non-numeric extensions (.xxx after cycle
54     #                     number) can now be used within interactive runs
55     # 12/05/05 - Siggi  - netcdf support on ibm
56     # 13/05/05 - Siggi  - error in tar-filenames on $PERM (HLRN) removed
57     # 18/05/05 - Siggi  - netcdf support on nec
58     # 24/05/05 - Siggi  - netcdf support on ibms
59     # 14/06/05 - Siggi  - sleep interval after submit of restart job increased
60     #                     to 30 seconds
61     # 28/06/05 - Siggi  - bora adjusted to new intel compiler (LD_LIBRARY_
62     #                     PATH is temporarily set)
63     # 07/09/05 - Siggi  - setting of MP_EAGER_LIMIT switched off because it
64     #                     caused warnings in the job protocol
65     # 20/10/05 - Siggi  - update of netcdf-version on decalpha (gfdl3)
66     # 25/10/05 - Siggi  - error in listing files for getting the cycle number
67     #                     removed
68     # 26/10/05 - Siggi  - new paths for dvrp-library, transfer of catalogs
69     #                     realized by file attribute trpe
70     # 28/10/05 - Siggi  - if existing, the file extension is output in case
71     #                     of missing input file - no job abort in case of
72     #                     missing input files with file extensions
73     #                     (preliminary solution)
74     # 31/10/05 - Siggi  - data transfer from nech now within seperate job
75     # 04/11/05 - Siggi  - netcdf 3.6.0-p1 on ibmh/ibmb
76     # 07/12/05 - Siggi  - gallego and elephanta admitted
77     # 30/12/05 - Siggi  - gfdl5 (ibmy) admitted
78     # 10/01/06 - Siggi  - cpp directive for NetCDF 64bit support
79     # 20/01/06 - Siggi  - cpp directive for ibmy
80     # 09/02/06 - Siggi  - ibmy admitted for batch mode
81     # 13/04/06 - Siggi  - ostria admitted
82     # 18/04/06 - Siggi  - usage of OpenMP implemented (additional option -O)
83     # 10/05/06 - Siggi  - environment variable XLSMPOPTS set on IBM for
84     #                     optimization of OpenMP runs (option stacksize is
85     #                     necessary for large gridpoint numbers because
86     #                     otherwise a segmentation fault occurs)
87     # 23/05/05 - Siggi  - lctit (SUN Fire X4600) admitted
88     # 21/08/06 - Siggi  - standard mrun path on scirocco is as on bora
89     # 23/08/06 - Siggi  - netcdf support for scirocco (notebook)
90     # 20/09/06 - Marcus - add DVRP library on nech
91     # 24/10/06 - Siggi  - Environment variables for PALM steering are written
92     #                     on local NAMELIST file ENVPAR
93     # 24/11/06 - Siggi  - levanto admitted, maestro switched to ifc 9.1
94     # 28/11/06 - Siggi  - call to interpret_config.x_levanto because of SuSe 10
95     # 06/02/07 - Siggi  - add DVRP library on lcmuk
96     # 07/02/07 - Siggi  - revision of source code handling, source code is
97     #                     now expected in directory given by source_path and
98     #                     not in the current working directory, source code
99     #                     files provided in add_source_path are allways
100     #                     compiled, source code to be compiled is allways
101     #                     sampled in SOURCES_FOR_RUN_$fname which is a
102     #                     subdirectory of the current working directory,
103     #                     -s TEST  changed to  -s WRITE_PERMIT  or -s WP,
104     #                     adapted for RIAM (neck)
105     #                     bugfix for cycle number of output file (extout)
106     #                     all hpmuk-related code removed
107     # 14/02/07 - Siggi  - dvrp support for neck added
108     # 28/02/07 - Siggi  - empty lines in configuration file are accepted
109     #                     mrun_path replaced by PALM_BIN,
110     #                     all machines are calling interpret_config.x
111     # 14/03/07 - Siggi  - fimm admitted, revision number added to terminal
112     #                     output
113     # 16/03/07 - Siggi  - adjustments for lctit
114     # 29/03/07 - Siggi  - global revision transfered to batch job by new
115     #                     option -G
116     # 30/03/07 - Siggi  - compilation "by hand" removed, cpp-directives/options
117     #                     + netcdf/dvrp-options are read from configuration
118     #                     file, host identifier (local_host) is read from
119     #                     config file, code related to ftp filetransfer
120     #                     removed (incl. option -f)
121     # 19/06/07 - Siggi  - time limit for cdata jobs increased
122     # 25/07/07 - Siggi  - two sets of executables can be started on lcmuk,
123     #                     if new option -Y (coupling) is given,
124     #                     output of executables to aout_output removed,
125     #                     messages are immediately written to stdout instead
126     # 03/08/07 - Marcus - add XOPT="-X $numprocs" for lcfimm
127     # 09/08/07 - Marcus - workaround on lcfimm to propagate environment
128     #                     variables out to the nodes in coupled mode -disabled-
129     # 13/08/07 - Marcus - start local restart jobs per ssh on lcfimm
130     # 28/08/07 - Marcus - completely remove workaround on lcfimm to propagate
131     #                     environment variables out to the nodes in coupled mode
132     # 15/10/07 - Siggi  - Preliminary adjustments for lctit, based on Jin's
133     #                     suggestions
134     # 19/10/07 - Marcus - further adjustments for lctit: add new optional
135     #                     argument -g group_number, admit all sla* node_usage
136     #                     queues
137     # 30/10/07 - Marcus - further adjustments for queues on lctit
138     # 14/02/08 - Bjoern - link of restart files with long file name possible
139     # 28/02/08 - Marcus - If environment variable link_local_output is set to
140     #                     true, mrun tries "ln -f" on local output and resorts
141     #                     to "cp" or "cp -r" on error
142     # 15/04/08 - Siggi  - argument -c introduced to most of the subjob calls,
143     #                     which allows the user to choose his own job catalog
144     #                     by setting job_catalog in the configuration file
145     #                     (default is ~/job_queue),
146     #                     workaround for mpiexec with -env option,
147     #                     adjustments for lcxt4 (Bergen Center for Computational
148     #                     Science)
149     # 27/05/08 - Siggi  - PATH is set to PALM_BIN everywhere (missing so far)
150     # 14/07/08 - Siggi  - adjustments for lcsgih
151
152 
153    # VARIABLENVEREINBARUNGEN + DEFAULTWERTE
154
155 set +o allexport    # SICHERHEITSHALBER UNTERBINDEN, DA SONST EVTL. STAGEOUT
156                     # NICHT LAUEFT (TOO MANY ARGUMENTS - PROBLEM)
157 set +o noclobber    # EXISTIERENDE DATEIEN DUERFEN UEBERSCHRIEBEN WERDEN
158
159 AddFilenames=""
160 additional_conditions=""
161 add_source_path=""
162 afname=""
163 archive_save=true
164 archive_system=none
165 compiler_name=""
166 cond1=""
167 cond2="" 
168 config_file=.mrun.config
169 cpp_opts=""
170 cpp_options=""
171 cpumax=0
172 cpurest=0
173 delete_temporary_catalog=true
174 do_batch=false
175 do_compile=true
176 do_remote=false
177 do_stagein=true
178 do_stageout=true
179 do_trace=false
180 email_notification=""
181 exclude=""
182 executable=""
183 execution_error=false
184 fimm=false
185 fname=test
186 fromhost=""
187 global_revision=""
188 group_number=none
189 host=""
190 host_file=""
191 hp=""
192 ignore_archive_error=false
193 input_list=""
194 interpreted_config_file=""
195 job_catalog="~/job_queue"
196 job_on_file=""
197 keep_data_from_previous_run=false
198 link_local_output=false
199 localhost_realname=$(hostname)
200 local_compile=false
201 locat=normal
202 mainprog=""
203 makefile=""
204 mc=$0
205 while [[ $(echo $mc | grep -c "/") != 0 ]]
206 do
207    mc=`echo $mc | cut -f2- -d"/"`
208 done
209 module_files=""
210 mrun_script_name=$mc
211 netcdf_inc=""
212 netcdf_lib=""
213 netcdf_support=false
214 node_usage=default
215 numprocs=""
216 OOPT=""
217 openmp=false
218 output_list=""
219 package_list=""
220 punkte="..........................................................."
221 queue=none
222 read_from_config=""
223 restart_run=false
224 return_addres=$(nslookup `hostname` 2>&1 | grep "Address:" | tail -1 | awk '{print $2}')
225 if [[ $return_addres = 130.75.105.158 ]]
226 then
227    return_addres=172.20.25.41
228    echo "+++ WARNING: return_addres changed to $return_addres !!!!!"
229 fi
230# if [[ $return_addres = 210.117.65.1 ]]
231# if [[ $(nslookup `hostname` 2>&1 | grep -c 210.117.65.1) = 1 ]]
232# then
233#    [[ $localhost_realname = gfdl3.yonsei.ac.kr ]]  &&  return_addres=165.132.26.56
234# fi
235 return_password=""
236 return_username=$LOGNAME
237 remotecall=false
238 remote_username=""
239 run_coupled_model=false
240 run_mode=""
241 scirocco=false
242 store_on_archive_system=true
243 striche="  ----------------------------------------------------------------------------"
244 silent=false
245 source_list=""
246 source_path=SOURCE
247 tasks_per_node=""
248 threads_per_task=1
249 tmpcreate=false
250 tmp_data_catalog=""
251 transfer_problems=false
252 usern=$LOGNAME
253 working_directory=`pwd`
254 TOPT=""
255 XOPT=""
256 zeit=$( date | cut -c 12-19 )
257
258 typeset -i  iec=0 iic=0 iin=0 ioc=0 iout=0 memory=0 stagein_anz=0 stageout_anz=0
259 typeset -i  cputime i ii iii icycle inode ival jobges jobsek maxcycle minuten nodes pes sekunden tp1
260
261 typeset  -R30 calltime
262 typeset  -L20 spalte1
263 typeset  -L40 spalte2
264 typeset  -L60 spalte3
265 typeset  -L35 string1=`date`
266 typeset  -L12 string2=$usern
267 typeset  -L12 string3=$localhost_realname
268 typeset  -L12 string4
269 typeset  -L12 string5
270 typeset  -L30 version="MRUN  2.0 Rev$Rev: 164 $"
271
272
273
274    # EINZELNE VARIABLE FUER HAUPTPROGRAMM EXPORTIEREN
275 export  cpurest fname host localhost return_addres return_username remotecall tasks_per_node
276
277    # FOLGENDE VARIABLEN MUESSEN FUER DIE INTERPRETATION DER KONFIGURATIONSDATEI
278    # EXPORTIERT WERDEN
279 export  afname config_file cpp_opts cpumax do_batch do_trace fname fromhost
280 export  group_number input_list memory numprocs output_list queue run_mode
281
282
283 
284    # FEHLERBEHANDLUNG
285    # BEI EXIT:
286 trap 'rm -rf  $working_directory/tmp_mrun
287       if [[ $locat != localhost ]]
288       then
289#          if [[ ! -f ${mrun_path}/statistik/mrun_statistik ]]
290#          then
291#             cat  >  ${mrun_path}/statistik/mrun_statistik  <<  %STATEND%
292#MRUN-calls on $localhost
293#
294#date and time                      user        localhost   remotehost  termination mrun-command
295#--------------------------------------------------------------------------------------------------------------------
296#%STATEND%
297#             chmod  666  ${mrun_path}/statistik/mrun_statistik
298#          fi
299#
300#             # EINTRAG IN DIE STATISTIK-DATEI
301#          string4=$host
302#          string5=$locat
303#          if [[ "$job_on_file" = ""  &&  $locat != control_c  &&  $locat != user_abort ]]
304#          then
305#             if [[ $do_batch = true ]]
306#             then
307#                printf "$string1$string2$string3$string4$string5$mrun_com \n"  >>  ${mrun_path}/statistik/mrun_statistik
308#             else
309#                printf "$string1$string2$string3$string4$string5$mc \n"  >>  ${mrun_path}/statistik/mrun_statistik
310#             fi
311#          fi
312          echo " " > /dev/null
313       fi
314
315       if [[ $locat != normal  &&  $locat != control_c  &&  $locat != local_compile ]]
316       then
317
318              # EVENTUELLE ERROR-KOMMANDOS ABARBEITEN
319          (( i = 0 ))
320          while (( i < iec ))
321          do
322             (( i = i + 1 ))
323             printf "\n  *** Execution of ERROR-command:\n"
324             printf "  >>> ${err_command[$i]}\n"
325             eval  ${err_command[$i]}
326          done
327          if [[ -n $interpreted_config_file ]]  then
328             rm -rf  $interpreted_config_file
329          fi
330          if [[ -n .mrun_environment ]]  then
331             rm -rf  .mrun_environment
332          fi
333          if [[ $tmpcreate = true ]]
334          then
335             printf "\n  *** Contents of \"$TEMPDIR\":\n"
336             ls -al; cd
337             [[ $delete_temporary_catalog = true ]]  &&  rm -rf $TEMPDIR
338          fi
339          if [[ -f ~/job_queue/JOBINFO.$QSUB_REQID ]]
340          then
341             rm -rf  ~/job_queue/JOBINFO.$QSUB_REQID
342          fi
343          printf "\n\n+++ MRUN killed \n\n"
344       elif [[ $locat != control_c ]]
345       then
346          printf "\n\n --> all actions finished\n\n"
347          printf "     Bye, bye $usern !!\n\n"
348       fi' exit
349
350
351    # BEI TERMINAL-BREAK:
352 trap 'rm -rf  $working_directory/tmp_mrun
353       [[ $tmpcreate = true ]]  &&  (cd; rm -rf $TEMPDIR)
354       if [[ -f ~/job_queue/JOBINFO.$QSUB_REQID ]]
355       then
356          rm -rf  ~/job_queue/JOBINFO.$QSUB_REQID
357       fi
358       printf "\n+++ MRUN killed by \"^C\" \n\n"
359       locat=control_c
360       exit
361      ' 2
362
363
364    # CHECK IF THE PATH FOR THE PALM BINARIES (SCRIPTS+UTILITY-PROGRAMS) HAS
365    # BEEN SET
366 if [[ "$PALM_BIN" = "" ]]
367 then
368    printf "\n  +++ environment variable PALM_BIN has not been set"
369    printf "\n      please set it to the directory where the PALM scripts are located"
370    locat=palm_bin; exit
371 fi
372 export PATH=$PALM_BIN:$PATH
373
374
375
376    # SHELLSCRIPT-OPTIONEN EINLESEN UND KOMMANDO NEU ZUSAMMENSETZEN, FALLS ES
377    # FUER FOLGEJOBS BENOETIGT WIRD
378 while  getopts  :a:AbBc:Cd:D:Fg:G:h:H:i:IkK:m:M:n:o:Op:P:q:r:R:s:St:T:u:U:vxX:Y option
379 do
380   case  $option  in
381       (a)   afname=$OPTARG;;
382       (A)   store_on_archive_system=false; mc="$mc -A";;
383       (b)   do_batch=true; mc="$mc -b";;
384       (B)   delete_temporary_catalog=false; mc="$mc -B";;
385       (c)   config_file=$OPTARG; mc="$mc -c$OPTARG";;
386       (C)   restart_run=true; mc="$mc -C";;
387       (d)   fname=$OPTARG; mc="$mc -d$OPTARG";;
388       (D)   cpp_opts="$cpp_opts $OPTARG"; mc="$mc -D$OPTARG";;
389       (F)   job_on_file="-D"; mc="$mc -F";;
390       (g)   group_number=$OPTARG; mc="$mc -g$OPTARG";;
391       (G)   global_revision=$OPTARG; mc="$mc -G'$OPTARG'";;
392       (h)   host=$OPTARG; mc="$mc -h$OPTARG";;
393       (H)   fromhost=$OPTARG; mc="$mc -H$OPTARG";;
394       (i)   input_list=$OPTARG; mc="$mc -i'$OPTARG'";;
395       (I)   ignore_archive_error=true; mc="$mc -I";;
396       (k)   keep_data_from_previous_run=true; mc="$mc -k";;
397       (K)   additional_conditions="$OPTARG"; mc="$mc -K$OPTARG";;
398       (m)   memory=$OPTARG; mc="$mc -m$OPTARG";;
399       (M)   makefile=$OPTARG; mc="$mc -M$OPTARG";;
400       (n)   node_usage=$OPTARG; mc="$mc -n$OPTARG";;
401       (o)   output_list=$OPTARG; mc="$mc -o'$OPTARG'";;
402       (O)   use_openmp=true; mc="$mc -O";;
403       (p)   package_list=$OPTARG; mc="$mc -p'$OPTARG'";;
404       (P)   return_password=$OPTARG; mc="$mc -P$OPTARG";;
405       (q)   queue=$OPTARG; mc="$mc -q$OPTARG";;
406       (r)   run_mode=$OPTARG; mc="$mc -r'$OPTARG'";;
407       (R)   remotecall=true;return_addres=$OPTARG; mc="$mc -R$OPTARG";;
408       (s)   source_list=$OPTARG; mc="$mc -s'$OPTARG'";;
409       (S)   read_from_config=false; mc="$mc -S";;
410       (t)   cpumax=$OPTARG; mc="$mc -t$OPTARG";;
411       (T)   tasks_per_node=$OPTARG; mc="$mc -T$OPTARG";;
412       (u)   remote_username=$OPTARG; mc="$mc -u$OPTARG";;
413       (U)   return_username=$OPTARG; mc="$mc -U$OPTARG";;
414       (v)   silent=true; mc="$mc -v";;
415       (x)   do_trace=true;set -x; mc="$mc -x";;
416       (X)   numprocs=$OPTARG; mc="$mc -X$OPTARG";;
417       (Y)   run_coupled_model=true; mc="$mc -Y";;
418       (\?)  printf "\n  +++ unknown option $OPTARG \n"
419             printf "\n  --> type \"$0 ?\" for available options \n"
420             locat=parameter;exit;;
421   esac
422 done
423
424
425    # EVTL. POSITIONSPARAMETER EINLESEN
426    # ZUR ZEIT GIBT ES NUR DEN PARAMETER ? (=KURZINFO)
427 shift OPTIND-1
428
429
430    # KURZE AUFRUFBESCHREIBUNG WIRD HIER AUSGEGEBEN
431 if [[ "$1" = "?" ]]
432 then
433   (printf "\n  *** mrun can be called as follows:\n"
434    printf "\n      $mrun_script_name  -b -c.. -d.. -D.. -f.. -F -h.. -i.. -I -K.. -m.. -o.. -p.. -r.. -R -s.. -t.. -T.. -v -x -X..  <modus>\n"
435    printf "\n      Description of available options:\n"
436    printf "\n      Option  Description                              Default-Value"
437    printf "\n        -a    base name of input files                 equiv. -d"
438    printf "\n        -A    no archiving when using file-attribute fl"
439    printf "\n        -b    batch-job on local machine               ---"
440    printf "\n        -B    do not delete temporary directory at end ---"
441    printf "\n        -c    configuration file                       .mrun.config"
442    printf "\n        -d    base name of files attached to program   test"
443    printf "\n        -D    preprocessor(cpp)-directives             \"\" "
444    printf "\n        -F    create remote job file only              ---"
445    printf "\n        -h    execution host                           $localhost_realname"
446    printf "\n        -i    INPUT control list                       \"\" "
447    printf "\n        -I    archiving errors of previous batch-jobs"
448    printf "\n              will be ignored"
449    printf "\n        -k    keep data from previous run"
450    printf "\n        -K    additional conditions for controling"
451    printf "\n              usage of conditional code and"
452    printf "\n              env-variables in configuration file      \"\" "
453    printf "\n        -m    memory demand in MB (batch-jobs)         0 MB"
454    printf "\n        -M    Makefile name                            Makefile"
455    printf "\n        -n    node usage (shared/not_shared)           depending on -h"
456    printf "\n        -o    OUTPUT control list                      \"\" "
457    printf "\n        -O    use OpenMP                               ---"
458    printf "\n        -p    software package list                    \"\" "
459    printf "\n        -q    queue                                    \"$queue\" "
460    printf "\n        -r    run control list (combines -i -o)        \"\" "
461    printf "\n        -s    filenames of routines to be compiled     \"\" "
462    printf "\n              must end with .f, .f90, .F, or .c !"
463    printf "\n              use \"..\" for more than one file and wildcards"
464    printf "\n              -s TEST compiles all files with w-permit"
465    printf "\n        -S    config file interpreted by shellscript   ---"
466    printf "\n        -t    allowed cpu-time in seconds (batch)      0"
467    printf "\n        -T    tasks per node                           depending on -h"
468    printf "\n        -u    username on remote machine               \"\" "
469    printf "\n        -v    no prompt for confirmation               ---"
470    printf "\n        -x    tracing of mrun for debug purposes       ---"
471    printf "\n        -X    # of processors (on parallel machines)   1"
472    printf "\n        -Y    run coupled model                        ---"
473    printf "\n "
474    printf "\n      Possible values of positional parameter <modus>:"
475    printf "\n        \"?\"       -  this outline \n\n") | more
476    exit
477 elif [[ "$1" != "" ]]
478 then
479    printf "\n  +++ positional parameter $1 unknown \n"
480    locat=parameter; exit
481 fi
482
483
484
485    # KURZE STARTMELDUNG
486 printf "\n*** $version "
487 printf "\n    will be executed.     Please wait ..."
488
489
490
491    # PRUEFEN, OB KONFIGURATIONS-DATEI VORHANDEN
492 if [[ ! -f $config_file ]]
493 then
494    printf "\n\n  +++ configuration file: "
495    printf "\n           $config_file"
496    printf "\n      does not exist"
497    locat=connect; exit 
498 fi
499
500
501    # HOST-IDENTIFIER (local_host) AUS KONFIGURATIONSDATEI BESTIMMEN
502 line=""
503 grep  "%host_identifier"  $config_file  >  tmp_mrun
504 while read line
505 do
506    if [[ "$line" != ""  ||  $(echo $line | cut -c1) != "#" ]]
507    then
508       HOSTNAME=`echo $line | cut -d" " -s -f2`
509       host_identifier=`echo $line | cut -d" " -s -f3`
510       if [[ $localhost_realname = $HOSTNAME ]]
511       then
512          localhost=$host_identifier
513          break
514       fi
515    fi
516 done < tmp_mrun
517
518 if [[ "$localhost" = "" ]]
519 then
520    printf "\n\n  +++ no host identifier found in configuration file \"$config_file\""
521    printf "\n      for local host \"$localhost_realname\"."
522    printf "\n      Please add line"
523    printf "\n      \"\%host_identifier $localhost_realname <identifier>\""
524    printf "\n      to the configuration file."
525    locat=localhost; exit
526 fi
527
528
529
530    # HOSTSPEZIFISCHE VARIABLEN SETZEN
531 case  $localhost_realname  in
532     (breg*-en0|berni*-en0)  archive_system=tivoli;;
533     (cs*)                   archive_system=ut;;
534     (fimm.bccs.uib.no)      fimm=true;;
535     (gate|n-sx)             PATH=$PALM_BIN:$PATH:/usr/bin/nqsII;;
536     (hreg*-en0|hanni*-en0)  archive_system=tivoli;;
537     (scirocco)              scirocco=true;;
538 esac
539
540
541 
542    # BASISNAME DER INPUT-DATEIEN GLEICH ALLGEMEINEM BASISNAMEN SETZEN,
543    # WENN NICHT VOM BENUTZER ANDERS BESTIMMT
544 [[ "$afname" = "" ]]  &&  afname=$fname
545
546
547    # EVTL. RUN-MODUS DEN I/O-LISTEN HINZUFUEGEN
548 if [[ "$run_mode" != "" ]]
549 then
550    input_list="$input_list $run_mode"
551    output_list="$output_list $run_mode"
552 fi
553
554
555    # RECHNERNAMEN ABSPEICHERN, VON DEM AUS JOB GESTARTET WIRD,
556    # ALLERDINGS NUR DANN, WENN NICHT PER OPTION -H BEREITS EIN WERT
557    # ZUGEWIESEN WURDE (MRUN MACHT DIES IMMER, WENN ES SELBST BATCH-JOBS
558    # STARTET)
559 if [[ "$fromhost" = "" ]]
560 then
561    fromhost=$localhost
562 fi
563
564
565     # PRUEFEN, OB MRUN NUR TESTWEISE AUF DER LOKALEN MASCHINE KOMPILIEREN SOLL
566 if [[ "$source_list" = LOCAL_COMPILE_TEST ]]
567 then
568    source_list=TEST
569    local_compile=true
570    host=$localhost
571 fi
572   
573
574    # PRUEFEN, OB AUF REMOTE-MASCHINE GERECHNET WERDEN SOLL
575    # WERT VON do_remote WIRD FUER DATEIVERBINDUNGEN BENOETIGT.
576    # WENN AUF REMOTE-MASCHINE GERECHNET WIRD, IST GLEICHZEITIG KLAR,
577    # DASS EIN BATCH-JOB GESTARTET WERDEN MUSS
578 if [[ -n $host  &&  "$host" != $localhost ]]
579 then
580    do_batch=true
581    do_remote=true
582    case  $host  in
583        (ibm|ibmb|ibmh|ibms|ibmy|nech|neck|lcsgib|lcsgih|lctit|unics)  true;;
584        (*)  printf "\n"
585             printf "\n  +++ sorry: execution of batch jobs on remote host \"$host\""
586             printf "\n      is not available"
587             locat=nqs; (( iec = 0 )); exit;;
588    esac
589 else
590    host=$localhost
591 fi
592
593
594     # ZUSATZBEDINGUNGEN (OPTION -K) AUSWERTEN
595 if [[ -n $additional_conditions ]]
596 then
597#    echo $additional_conditions | cut -d" " -f1-3 | read  cond1  cond2  dummy
598    cond1=`echo $additional_conditions | cut -d" " -f1`
599    cond2=`echo $additional_conditions | cut -d" " -s -f2`
600    dummy=`echo $additional_conditions | cut -d" " -s -f3`
601    if [[ -n $dummy ]]
602    then
603       printf "\n  +++ more than 2 additional conditions given for Option \"-K\""
604       locat=options; exit
605    fi
606 fi
607
608
609    # PRUEFEN, OB EVTL. BEI VORHERGEHENDEM LAUF (KETTENJOB) EINE
610    # ARCHIVIERUNG FEHLGESCHLAGEN IST
611 if [[ -f ~/job_queue/ARCHIVE_ERROR_$fname ]]
612 then
613    if [[ $ignore_archive_error = false ]]
614    then
615       printf "\n  +++ data archiving of previous run failed"
616       printf "\n      see directory \~/job_queue on remote machine"
617       locat=archive; exit
618    else
619       printf "\n  +++ warning: data archiving in a previous run failed"
620       printf "\n      MRUN continues, trying to get backup copy"
621    fi
622 fi
623
624
625
626    # LESEN UND INTERPRETIEREN DER KONFIGURATIONS-DATEI VOM SHELLSCRIPT AUS
627    # VORUEBERGEHEND ZWINGEND AUF LINUX-RECHNERN
628 if [[ "$read_from_config" = false ]]
629 then
630
631    [[ $silent = false ]]  &&  printf "\n    Reading the configuration file... "
632    while  read zeile
633    do
634        [[ $silent = false ]]  &&  printf "."
635
636
637          # ZUERST EVENTUELL VORKOMMENDE ENVIRONMENT-VARIABLEN DURCH IHRE WERTE
638          # ERSETZEN
639       eval  zeile=\"$zeile\"
640
641
642          # INTERPRETATION DER ZEILE
643       if [[ "$(echo $zeile)" = "" ]]
644       then
645             # LEERZEILE, KEINE AKTION
646          continue
647
648       elif [[ "$(echo $zeile | cut -c1)"  =  "#" ]]
649       then
650
651             # ZEILE IST KOMMENTARZEILE
652          true
653
654       elif [[ "$(echo $zeile | cut -c1)"  =  "%" ]]
655       then
656
657             # ZEILE DEFINIERT ENVIRONMENT-VARIABLE
658          zeile=$(echo $zeile | cut -c2-)
659#          echo $zeile | cut -d" " -f1-5 | read  var  value  for_host  for_cond1  for_cond2
660          var=`echo $zeile | cut -d" " -f1`
661          value=`echo $zeile | cut -d" " -s -f2`
662          for_host=`echo $zeile | cut -d" " -s -f3`
663          for_cond1=`echo $zeile | cut -d" " -s -f4`
664          for_cond2=`echo $zeile | cut -d" " -s -f5`
665
666          if [[ "$for_host" = ""  ||  ( "$for_host" = $host  &&  "$for_cond1" = "$cond1"  &&  "$for_cond2" = "$cond2" )  ||  $(echo "$input_list$output_list"|grep -c "$for_host") != 0 ]]
667          then
668
669                # BEI COMPILER- CPP- ODER LINKEROPTIONEN EVTL ":" DURCH " "
670                # ERSETZEN. "::" WIRD DURCH ":" ERSETZT.
671             value=`echo $value | sed 's/::/%DUM%/g' | sed 's/:/ /g' | sed 's/%DUM%/:/g'`
672
673
674                # ENVIRONMENT-VARIABLE WIRD WERT AUS KONFIGURATIONSDATEI
675                # ZUGEWIESEN, WENN SIE SELBST NOCH KEINEN WERT UEBER DIE
676                # ENTSPRECHENDE SCRIPT-OPTION ERHALTEN HAT. SOLCHE
677                # VARIABLEN HAETTEN DANN DEN WERT "" ODER IM INTEGER-FALL DEN
678                # WERT 0.  ALLGEMEINE REGEL ALSO: SCRIPT-OPTION GEHT UEBER
679                # KONFIGURATIONSDATEI
680             if [[ "$(eval echo \$$var)" = ""  ||  "$(eval echo \$$var)" = "0" ]]
681             then
682                eval  $var=\$value
683
684                   # EVTL. BILDSCHIRMAUSGABEN DER ENVIRONMENT-VARIABLEN
685                if [[ $do_trace = true ]]
686                then
687                   printf "\n*** ENVIRONMENT-VARIABLE $var = $value"
688                fi
689             fi
690
691                # WENN ENVIRONMENT-VARIABLE HOST VEREINBART, DANN SOFORT AUSWERTEN
692                # WERT VON do-remote WIRD BEI DATEIVERBINDUNGEN BENOETIGT
693                # WENN AUF REMOTE-MASCHINE GERECHNET WIRD, IST GLEICHZEITIG KLAR,
694                # DASS EIN BATCH-JOB GESTARTET WERDEN MUSS
695             if [[ $var = host ]]
696             then
697                if [[ -n $host  &&  "$host" != $localhost ]]
698                then
699                   do_batch=true
700                   do_remote=true
701                   case  $host  in
702                       (ibm|ibms|ibmy|lcsgib|lcsgih|lctit|nech|neck|unics)  true;;
703                       (*)  printf "\n  +++ sorry: execution of batch jobs on remote host \"$host\""
704                            printf "\n      is not available"
705                            locat=nqs; exit;;
706                   esac
707                else
708                   host=$localhost
709                fi
710             fi
711
712                # VOM BENUTZER DEFINIERTE ENVIRONMENT VARIABLEN MUESSEN PRINZIPIELL
713                # EXPORTIERT WERDEN, DA SIE VIELLEICHT IN WEITER UNTEN AUFZURUFEN-
714                # DEN PROGRAMMEN BENOETIGT WERDEN
715             export  $var
716          fi
717
718
719
720
721       elif [[ "$(echo $zeile | cut -c1-3)" = "EC:" ]]
722       then
723
724             # ZEILE DEFINIERT ERROR-KOMMANDO
725          (( iec = iec + 1 ))
726          zeile=$(echo $zeile | cut -c4-)
727          err_command[$iec]="$zeile"
728
729       elif [[ "$(echo $zeile | cut -c1-3)" = "IC:" ]]
730       then
731
732             # ZEILE DEFINIERT INPUT-KOMMANDO
733          (( iic = iic + 1 ))
734          zeile=$(echo $zeile | cut -c4-)
735          in_command[$iic]="$zeile"
736
737       elif [[ "$(echo $zeile | cut -c1-3)" = "OC:" ]]
738       then
739
740             # ZEILE DEFINIERT OUTPUT-KOMMANDO
741          (( ioc = ioc + 1 ))
742          zeile=$(echo $zeile | cut -c4-)
743          out_command[$ioc]="$zeile"
744
745       else
746
747             # ZEILE DEFINIERT DATEIVERBINDUNG. EINLESEN DER DATEIEIGENSCHAFTEN
748             # s2a: in/out - Feld
749             # s2b: loc    - Feld (optional)
750             # s2c: tr/ar  - Feld (optional)
751#          echo $zeile | cut -d" " -f1-2 | read  s1  s2
752          s1=`echo $zeile | cut -d" " -f1`
753          s2=`echo $zeile | cut -d" " -s -f2`
754          s2a=$(echo $s2 | cut -d":" -f1)
755          if [[ $(echo $s2 | grep -c ":") = 0 ]]
756          then
757             s2b=""
758             s2c=""
759          else
760#             echo $s2 | cut -d":" -f2-3 | sed 's/:/ /g' | read  s2b  s2c
761             s2b=`echo $s2 | cut -d":" -f2 | sed 's/:/ /g'`
762             s2c=`echo $s2 | cut -d":" -s -f3 | sed 's/:/ /g'`
763          fi
764#          echo $zeile | cut -d" " -f3-6 | read  s3  s4  s5  s6
765          s3=`echo $zeile | cut -d" " -f3`
766          s4=`echo $zeile | cut -d" " -s -f4`
767          s5=`echo $zeile | cut -d" " -s -f5`
768          s6=`echo $zeile | cut -d" " -s -f6`
769
770       
771             # ABSPEICHERN DER DATEIVERBINDUNG, FALLS IN INPUT- ODER OUTPUT-LIST
772             # VERMERKT. VARIABLE S3 KANN AUCH LISTE ENTHALTEN (FELDTRENNER ":")
773             # DATEIVERBINDUNG WIRD DANN NICHT ABGESPEICHERT UND GEPRUEFT, WENN
774             # PROGRAMMLAUF AUF REMOTE-MASCHINE ERFOLGT UND DATEI NUR LOKAL VOR-
775             # HANDEN SEIN MUSS (D.H. s2b = loc)
776          IFSALT="$IFS"; IFS="$IFS:"
777          if [[ "$s2a" = in  &&  ! ( $do_remote = true  &&  ( "$s2b" = loc  ||  "$s2b" = locopt ) ) ]]
778          then
779             found=false
780             for  actual  in  $input_list
781             do
782                for  formal  in  $s3
783                do
784                   [[ $actual = $formal  ||  "$formal" = "-" ]]  &&  found=true
785                done
786             done
787             if [[ $found = true ]]
788             then
789                (( iin = iin + 1 ))
790                localin[$iin]=$s1; transin[$iin]=$s2b; actionin[$iin]=$s2c;
791                typein[$iin]=$s3; pathin[$iin]=$s4; endin[$iin]=$s5;
792                extin[$iin]=$s6
793             fi
794          elif [[ "$s2a" = out  &&  ! ( $do_remote = true  &&  "$s2b" = loc ) ]]
795          then
796             found=false
797             for  actual  in  $output_list
798             do
799                for  formal  in  $s3 
800                do
801                   [[ $actual = $formal  ||  "$formal" = "-"  ]]  &&  found=true
802                done
803             done
804             if [[ $found = true ]]
805             then
806                (( iout = iout + 1 ))
807                localout[$iout]=$s1; actionout[$iout]=$s2c; typeout[$iout]=$s3;
808                pathout[$iout]=$s4; endout[$iout]=$s5; extout[$iout]=$s6
809             fi
810          elif [[ "$s2a" != in  &&  "$s2a" != out ]]
811          then
812             printf "\n  +++ I/O-attribute in configuration file $config_file has the invalid"
813             printf "\n      value \"$s2\". Only \"in\" and \"out\" are allowed!"
814             locat=connect; exit
815          fi
816          IFS="$IFSALT"
817       fi
818    done < $config_file
819
820 else
821
822
823       # INTERPRETATION DER KONFIGURATIONSDATEI MITTELS FORTRAN 90 - PROGRAMM
824    [[ $silent = false ]]  &&  printf "..."
825    export  cond1 cond2 config_file do_remote do_trace input_list localhost output_list
826    export  interpreted_config_file=.icf.$RANDOM
827
828
829
830       # ENVIRONMENT-VARIABLEN FUER INTERPRET_CONFIG UEBER NAMELIST_DATEI ZUR
831       # VERFUEGUNG STELLEN
832    cat  >  .mrun_environment  <<  %%END%%
833 &mrun_environment  cond1 = '$cond1', cond2 = '$cond2',
834                    config_file = '$config_file', do_remote = '$do_remote',
835                    do_trace = '$do_trace', host = '$host',
836                    input_list = '$input_list', icf = '$interpreted_config_file',
837                    localhost = '$localhost', output_list = '$output_list' /
838
839%%END%%
840
841       # WERTE VON MRUN-OPTIONEN SICHERN UND DAMIT GEGEBENENFALLS SPAETER DIE
842       # IN DER KONFIGURAIONSDATEI ANGEGEBENEN WERTE UEBERSTEUERN
843    mrun_memory=$memory
844    mrun_group_number=$group_number
845    mrun_cpumax=$cpumax
846    mrun_numprocs=$numprocs
847
848    if [[ $localhost_realname = "gate" ]]
849    then
850       interpret_config_gate.x
851    else
852       interpret_config.x
853    fi
854    rm .mrun_environment
855
856
857       # AUSFUEHRUNG DER GENERIERTEN SHELL-KOMMANDOS IN DIESER SHELL
858    chmod  u+x  $interpreted_config_file
859    export PATH=$PATH:.
860    . $interpreted_config_file
861    rm  $interpreted_config_file
862
863
864       # OPTIONSWERTE UEBERSTEUERN KONFIGURATIONSDATEI
865    [[ $mrun_memory     != 0  ]]  &&  memory=$mrun_memory
866    [[ "$mrun_group_number" != "none" ]]  &&  group_number=$mrun_group_number
867    [[ $mrun_cpumax     != 0  ]]  &&  cpumax=$mrun_cpumax
868    [[ "$mrun_numprocs" != "" ]]  &&  numprocs=$mrun_numprocs
869
870 fi
871
872
873    # QUELLTEXTVERZEICHNIS AUF LOKALER MASCHINE AUS KONFIGURATIONSDATEI
874    # BESTIMMEN (WUERDE SONST EVTL. DAS VERZEICHNIS DES JEWEILS UNTER -h
875    # ANGEGEBENEN REMOTE-RECHNERS SEIN)
876    # BEI BATCH-JOBS SIND DIE ZU UEBERSETZENDEN PROGRAMMTEILE SCHON KOMPLETT
877 if [[ "$SOURCES_COMPLETE" = "" ]]
878 then
879
880       # ZUERST PRUEFEN, OB EIN GLOBALER QUELLTEXTPFAD FUER ALLE RECHNER
881       # VEREINBART WURDE
882    source_path=""
883    line=""
884    grep "%source_path" $config_file  >  tmp_mrun
885    while read line
886    do
887       if [[ "$line" != ""  &&  $(echo $line | cut -c1) != "#" ]]
888       then
889          if [[ "$(echo $line | cut -d" " -f3)" = "" ]]
890          then
891             global_source_path=`echo $line | cut -d" " -f2`
892          fi
893       fi
894    done  <  tmp_mrun
895
896    line=""
897    found=false
898    grep  " $localhost" $config_file | grep "%source_path"  >  tmp_mrun
899    while read line
900    do
901       if [[ "$line" != ""  &&  $(echo $line | cut -c1) != "#" ]]
902       then
903          if [[ $found = true ]]
904          then
905             printf "\n\n  +++ more than one source path found in configuration file"
906             printf "\n      for local host \"$localhost\" "
907             locat=source_path; exit
908          fi
909          source_path=`echo $line | cut -d" " -f2`
910          found=true
911       fi
912    done  <  tmp_mrun
913    rm  tmp_mrun
914
915    if [[ "$source_path" = "" ]]
916    then
917       if [[ "$global_source_path" != "" ]]
918       then
919          source_path=$global_source_path
920       else
921          printf "\n\n  +++ no source path found in configuration file"
922          printf "\n      for local host \"$localhost\" "
923          locat=source_path; exit
924       fi
925    fi
926    eval source_path=$source_path
927
928    if [[ ! -d $source_path ]]
929    then
930       printf "\n\n  +++ source path \"$source_path\" on local host"
931       printf "\n      \"$localhost\" does not exist"
932       locat=source_path; exit
933    fi
934
935 fi
936
937
938    # GLOBALE REVISIONSNUMMER ERMITTELN (FORTSETZUNGSLAEUFEN WIRD DIESE
939    # DURCH OPTION -G MITGETEILT)
940 if [[ "$global_revision" = "" ]]
941 then
942    global_revision=`svnversion $source_path  2>/dev/null`
943    global_revision="Rev: $global_revision"
944 fi
945
946
947    # NOCHMAL PRUEFEN, OB AUF REMOTE-MASCHINE GERECHNET WERDEN SOLL
948    # (HOST KANN IN KONFIGURATIONSDATEI ANDERS FESTGELEGT WORDEN SEIN)
949    # WERT VON do_remote WIRD FUER DATEIVERBINDUNGEN BENOETIGT.
950    # WENN AUF REMOTE-MASCHINE GERECHNET WIRD, IST GLEICHZEITIG KLAR,
951    # DASS EIN BATCH-JOB GESTARTET WERDEN MUSS
952 if [[ -n $host  &&  "$host" != $localhost ]]
953 then
954    do_batch=true
955    do_remote=true
956    case  $host  in
957        (ibm|ibmb|ibmh|ibms|ibmy|lcsgib|lcsgih|lctit|nech|neck|unics)  true;;
958        (*)  printf "\n"
959             printf "\n  +++ sorry: execution of batch jobs on remote host \"$host\""
960             printf "\n      is not available"
961             locat=nqs; (( iec = 0 )); exit;;
962    esac
963 else
964    host=$localhost
965 fi
966
967
968    # PRUEFUNG EINIGER PROZESSORZAHLANGABEN BEI RECHNUNGEN AUF PARALLELRECHNERN
969 if [[ "$cond1" = parallel  ||  "$cond2" = parallel ]]
970 then
971
972       # PRUEFEN, OB DIE ANZAHL DER ZU VERWENDENDEN PES ANGEGEBEN WURDE
973    if [[ ! -n $numprocs ]]
974    then
975       printf "\n"
976       printf "\n  +++ option \"-K parallel\" requires additional specification"
977       printf "\n      of the number of processors to be used by"
978       printf "\n      mrun-option \"-X\" or by environment-variable"
979       printf "\n      \"numprocs\" in the configuration file"
980       locat=numprocs; (( iec = 0 )); exit
981    fi
982
983       # PRUEFEN, OB DIE PROZESSORANZAHL PRO KNOTEN ANGEGEBEN WURDE (GGF.
984       # DEFAULT-WERT SETZEN) UND OB SIE EIN GANZZAHLIGER TEILER DER
985       # GESAMTPROZESSORANZAHL IST
986    if [[ $host = nech  ||  $host = neck  ||  $host = ibmh  ||  $host = ibmb  ||  $host = ibms ]]
987    then
988       [[ "$tasks_per_node" = "" ]]  &&  tasks_per_node=6
989       (( ival = $tasks_per_node ))
990       (( pes = numprocs ))
991#       if [[ $(echo $package_list | grep -c dvrp_graphics+1PE) = 1 ]]
992#       then
993#          (( pes = pes - 1 ))
994#       fi
995       (( ii = pes / ival ))
996       if (( pes - ii * ival > 0 ))
997       then
998          printf "\n"
999          printf "\n  +++ tasks per node (option \"-T\") must be an integral"
1000          printf "\n      divisor of the total number of processors (option \"-X\")"
1001          printf "\n      values of this mrun-call: \"-T $tasks_per_node\" \"-X $numprocs\""
1002          locat=tasks_per_node; (( iec = 0 )); exit
1003       fi
1004    fi
1005
1006       # IBMY HAT NUR EINEN KNOTEN
1007    if [[ $host = ibmy ]]
1008    then
1009       if [[ "$tasks_per_node" != ""  &&  "$tasks_per_node" != "$numprocs" ]]
1010       then
1011          printf "\n"
1012          printf "\n  +++ on ibmy, tasks per node (option \"-T\") must be equal to the"
1013          printf "\n      total number of processors (option \"-X\")"
1014          printf "\n      values of this mrun-call: \"-T $tasks_per_node\" \"-X $numprocs\""
1015          locat=tasks_per_node; (( iec = 0 )); exit
1016       fi
1017    fi
1018
1019       # FALLS OPENMP PARALLELISIERUNG VERWENDET WERDEN SOLL, ANZAHL VON THREADS
1020       # SETZEN UND ZAHL DER TASKS PRO KNOTEN AUF 1 SETZEN
1021    if [[ $use_openmp = true ]]
1022    then
1023       threads_per_task=$tasks_per_node
1024       tasks_per_node=1
1025    fi
1026    OOPT="-O $threads_per_task"
1027    TOPT="-T $tasks_per_node"
1028
1029       # GESAMTZAHL DER KNOTEN BESTIMMEN
1030    if [[ "$tasks_per_node" != "" ]]
1031    then
1032       (( nodes = numprocs / ( tasks_per_node * threads_per_task ) ))
1033    fi
1034
1035       # PRUEFEN, OB NODE USAGE EINEN ERLAUBTEN WERT HAT BZW. DEN DEFAULT
1036       # SETZEN
1037    if [[ $node_usage = default ]]
1038    then
1039       if [[ $host = ibms ]]
1040       then
1041          node_usage=shared
1042       elif [[ $host = lctit ]]
1043       then
1044          node_usage=sla3
1045       elif [[ $(echo $host | cut -c1-5) = lcsgi ]]
1046       then
1047          node_usage=singlejob
1048       else
1049          node_usage=not_shared
1050       fi
1051    fi
1052
1053    if [[ $node_usage != shared  &&  $node_usage != not_shared  &&  $node_usage != singlejob  &&  "$(echo $node_usage | cut -c1-3)" != "sla"  &&  $node_usage != novice  ]]
1054    then
1055       printf "\n"
1056       printf "\n  +++ node usage (option \"-n\") is only allowed to be set"
1057       printf "\n      \"shared\" or \"not_shared\""
1058       locat=tasks_per_node; (( iec = 0 )); exit
1059    fi
1060
1061 fi
1062
1063    # PRUEFEN, OB HOSTFILE EXISTIERT
1064 if [[ -n $hostfile ]]
1065 then
1066    if [[ ! -f $hostfile ]]
1067    then
1068       printf "\n"
1069       printf "\n  +++ hostfile \"$hostfile\" does not exist"
1070       locat=hostfile; exit
1071    fi
1072 fi
1073
1074    # PRUEFEN, OB RHOSTS DATEI EXISTIERT. GEGEBENENFALLS ANLEGEN BZW. ERWEITERN
1075 if [[ $host = ibmy  &&  $do_remote = false ]]
1076 then
1077    if [[ ! -f $HOME/.rhosts ]]
1078    then
1079       echo  "gfdl5.yonsei.ac.kr"  >  $HOME/.rhosts
1080       printf "\n\n  *** file:"
1081       printf "\n           $HOME/.rhosts"
1082       printf "\n      was created\n"
1083    fi
1084    if [[ $(grep -c gfdl5.yonsei.ac.kr $HOME/.rhosts) = 0 ]]
1085    then
1086       echo  "gfdl5.yonsei.ac.kr"  >>  $HOME/.rhosts
1087       printf "\n\n  *** file:"
1088       printf "\n           $HOME/.rhosts"
1089       printf "\n      was extended by the name of the current host\n"
1090    fi
1091 fi
1092
1093
1094
1095    # FALLS NICHT VORGEGEBEN, DEFAULT-QUEUE AUF DER ZIELMASCHINE FESTLEGEN
1096 if [[ $queue = none ]]
1097 then
1098    case  $host  in
1099        (ibmb)       if [[ $node_usage = shared ]]
1100                     then
1101                        queue=cshare
1102                     else
1103                        queue=csolo
1104                     fi;;
1105        (ibmh)       if [[ $node_usage = shared ]]
1106                     then
1107                        queue=cshare
1108                     else
1109                        queue=csolo
1110                     fi;;
1111        (ibmy)       queue=parallel;;
1112        (lctit)      queue=sla3;;
1113        (nech)       queue=none;;
1114        (neck)       queue=P;;
1115        (unics)      queue=unics;;
1116    esac
1117 fi
1118
1119
1120    # VOLLSTAENDIGE DATEINAMEN DER INPUT-FILES BILDEN,
1121    # INPUT-DATEIEN AUF VORHANDENSEIN PRUEFEN UND EVTL. HOECHSTE ZYKLUSNUMMER
1122    # ERMITTELN
1123 (( i = 0 ))
1124 while (( i < iin ))
1125 do
1126    (( i = i + 1 ))
1127    (( maxcycle = 0 ))
1128
1129       # NAMENSBILDUNG (EVTL. IST FESTER DATEINAME VORGEGEBEN)
1130    if [[ "${actionin[$i]}" = di ]]
1131    then
1132       remotepathin[$i]=${pathin[$i]}/${endin[$i]}  # REMOTE-PFAD ERST AUF
1133                                                    # REM-MASCHINE AUSWERTEN
1134       eval filename=${pathin[$i]}/${endin[$i]}
1135    else
1136       remotepathin[$i]=${pathin[$i]}/${afname}${endin[$i]}  # REMOTE-PFAD ERST AUF
1137                                                             # REM-MASCHINE AUSWERTEN
1138       eval filename=${pathin[$i]}/${afname}${endin[$i]}
1139    fi
1140
1141       # PRUEFEN AUF VORHANDENSEIN
1142    if [[ $(ls $filename* 2>&1 | grep -c "not found") = 1  || \
1143          $(ls $filename* 2>&1 | grep -c "No such file") = 1  || \
1144          $(ls $filename* 2>&1 | grep -c "does not exist") = 1 ]]
1145    then
1146          # DATEIEN MIT EXTENSION (Z.B. NC) MUESSEN NICHT ZWINGEND VORHANDEN
1147          # SEIN, DESHALB IN SOLCHEN FAELLEN KEIN ABBRUCH. DIES IST NUR EINE
1148          # VORUEBERGEHENDE LOESUNG (OKT 05). NICHT ZWINGEND BENOETIGTE
1149          # EINGABEDATEIEN SOLLTEN EINE SPEZIELLE OPTION IN DER DATEI-
1150          # VERBINDUNGSANWEISUNG BEKOMMEN (Z.B. inopt?)
1151       if [[ "${transin[$i]}" != "locopt" ]]
1152       then
1153          printf "\n\n  +++ INPUT-file: "
1154          if [[ "${extin[$i]}" = "" ]]
1155          then
1156             printf "\n           $filename"
1157          else
1158             printf "\n           $filename.${extin[$i]}"
1159          fi
1160          printf "\n      does not exist\n"
1161          locat=input; exit
1162       else
1163          transin[$i]="unavailable"
1164       fi
1165    else
1166
1167          # ZYKLUSNUMMER FESTSTELLEN
1168       ls -1 -d $filename    >   filelist  2>/dev/null
1169       ls -1 -d $filename.*  >>  filelist  2>/dev/null
1170       while  read zeile
1171       do
1172          cycle=$(print $zeile | cut -f2 -d".")
1173          if [[ "$cycle" = "$zeile" ]]
1174          then
1175             (( icycle = 0 ))
1176          elif [[ "$cycle" = "${extin[$i]}" ]]
1177          then
1178             (( icycle = 0 ))
1179          else
1180             (( icycle = $cycle ))
1181          fi
1182          if (( icycle > maxcycle ))
1183          then
1184             (( maxcycle = icycle ))
1185             file_to_be_used=$zeile
1186          fi
1187       done <filelist
1188       rm filelist
1189
1190          # EVTL. ZYKLUSNUMMER AN DATEINAMEN ANFUEGEN
1191       if (( maxcycle > 0 ))
1192       then
1193          if [[ "${extin[$i]}" != " "  &&   "${extin[$i]}" != "" ]]
1194          then
1195             filename=${filename}.$maxcycle.${extin[$i]}
1196          else
1197             filename=${filename}.$maxcycle
1198          fi
1199       else
1200          if [[ "${extin[$i]}" != " "  &&   "${extin[$i]}" != "" ]]
1201          then
1202             filename=${filename}.${extin[$i]}
1203          fi
1204       fi
1205       
1206          # DATEINAMEN OHNE PFAD ABER MIT ZYKLUSNUMMER ABSPEICHERN,
1207          # DA SPAETER BEI RUECKSPEICHERN VOM ARCHIVSYSTEM EVTL. BENOETIGT
1208       absnamein[$i]=$filename
1209       if (( maxcycle > 0 ))
1210       then
1211          if [[ "${actionin[$i]}" = di ]]
1212          then
1213             frelin[$i]=${endin[$i]}.$maxcycle
1214          else
1215             frelin[$i]=${afname}${endin[$i]}.$maxcycle
1216          fi
1217       else
1218          if [[ "${actionin[$i]}" = di ]]
1219          then
1220             frelin[$i]=${endin[$i]}
1221          else
1222             frelin[$i]=${afname}${endin[$i]}
1223          fi
1224       fi
1225
1226    fi
1227 done
1228       
1229
1230    # VOLLSTAENDIGE DATEINAMEN (OHNE $ ODER ~) DER OUTPUT-FILES BILDEN,
1231    # OUTPUT-DATEIEN AUF VORHANDENSEIN PRUEFEN UND EVTL. HOECHSTE ZYKLUSNUMMER
1232    # ERMITTELN ODER, FALLS NICHT VORHANDEN, PRUEFEN, OB SIE SICH ANLEGEN LASSEN
1233    # DIESE AKTIONEN FINDEN NICHT STATT, WENN PROGRAMM AUF REMOTE-MASCHINE
1234    # RECHNET UND DATEI ANSCHLIESSEND TRANSFERIERT WERDEN SOLL!
1235 (( i = 0 ))
1236 while (( i < iout ))
1237 do
1238    (( i = i + 1 ))
1239    if [[ ! ( $fromhost != $localhost  &&  ( "${actionout[$i]}" = tr || "${actionout[$i]}" = tra || "${actionout[$i]}" = trpe ) ) ]]
1240    then
1241       if [[ "${actionout[$i]}" = tr  ||  "${actionout[$i]}" = trpe ]]
1242       then
1243          actionout[$i]=""
1244       elif [[ "${actionout[$i]}" = tra ]]
1245       then
1246          actionout[$i]=a
1247       fi
1248       (( maxcycle = 0 ))
1249       eval filename=${pathout[$i]}/${fname}${endout[$i]}
1250       eval catalogname=${pathout[$i]}
1251       if [[ $(ls $filename* 2>&1 | grep -c "not found") = 1  || \
1252             $(ls $filename* 2>&1 | grep -c "No such file") = 1  || \
1253             $(ls $filename* 2>&1 | grep -c "does not exist") = 1 ]]
1254       then
1255     
1256             # OUTPUT-DATEI NICHT VORHANDEN. PRUEFEN, OB ANLEGEN MOEGLICH.
1257          if  cat /dev/null > $filename 
1258          then
1259             rm  $filename
1260          else
1261
1262                # PRUEFEN, OB KATALOG VORHANDEN UND EVTL. DIESEN ANLEGEN
1263             if [[ ! -d $catalogname ]]
1264             then
1265                if  mkdir -p  $catalogname
1266                then
1267                   printf "\n\n  *** directory:"
1268                   printf "\n           $catalogname"
1269                   printf "\n      was created\n"
1270                else
1271                   printf "\n\n  +++ OUTPUT-file:"
1272                   printf "\n           $filename"
1273                   printf "\n      cannot be created, because directory does not exist"
1274                   printf "\n      and cannot be created either"
1275                   printf "\n"
1276                   locat=output  ; exit
1277                fi 2>/dev/null
1278             else
1279                printf "\n\n  +++ OUTPUT-file:"
1280                printf "\n           $filename"
1281                printf "\n      cannot be created, although directory exists"
1282                printf "\n"
1283                locat=output  ; exit
1284             fi
1285          fi 2>/dev/null
1286       else
1287
1288             # ZYKLUSNUMMER FESTSTELLEN
1289          ls -1 -d $filename    >   filelist  2>/dev/null
1290          ls -1 -d $filename.*  >>  filelist  2>/dev/null
1291          while  read zeile
1292          do
1293             cycle=$(print $zeile | cut -f2 -d".")
1294             if [[ "$cycle" = "$zeile"  ||  "$cycle" = ${extout[$i]} ]]
1295             then
1296                (( icycle = 1 ))
1297             else
1298                (( icycle = $cycle + 1 ))
1299             fi
1300             if (( icycle > maxcycle ))
1301             then
1302                (( maxcycle = icycle ))
1303             fi
1304          done <filelist
1305          rm filelist
1306       fi
1307
1308          # EVTL. ZYKLUSNUMMER AN DATEINAMEN ANFUEGEN UND PRUEFEN, OB SICH
1309          # DATEI AUCH WIRKLICH ANLEGEN LAESST. IM APPEND-FALL MUSS AN DEN
1310          # HOECHSTEN VORHANDENEN ZYKLUS-ANGEHAENGT WERDEN. ANLAGEPRUEFUNG
1311          # IST DANN NATUERLICH NICHT ZULAESSIG BZW. MOEGLICH
1312       if [[ "${actionout[$i]}" != a ]]
1313       then
1314          if (( maxcycle > 0 ))
1315          then
1316             filename=${filename}.$maxcycle
1317             if  cat /dev/null > $filename 
1318             then
1319                rm  $filename
1320             else
1321                printf "\n  +++ OUTPUT-file:"
1322                printf "\n           $filename"
1323                printf "\n      cannot be created"
1324                locat=output  ; exit
1325             fi
1326          fi
1327       else
1328          (( maxcycle = maxcycle - 1 ))
1329          if (( maxcycle > 0 ))
1330          then
1331             filename=${filename}.$maxcycle
1332          fi
1333       fi
1334       
1335          # DATEINAMEN OHNE PFAD ABER MIT ZYKLUSNUMMER ABSPEICHERN,
1336          # DA SPAETER BEI ABLAGE AUF ARCHIVSYSTEM BZW. FUER
1337          # DATEI OUTPUT_FILE_CONNECTIONS EVTL. BENOETIGT
1338       pathout[$i]=$filename
1339       if (( maxcycle > 0 ))
1340       then
1341          frelout[$i]=${fname}${endout[$i]}.$maxcycle
1342       else
1343          frelout[$i]=${fname}${endout[$i]}
1344       fi
1345
1346    fi
1347 done
1348
1349
1350     # DAS DVRP-PAKET ERFORDERT EINE ENTSPRECHENDE BIBLIOTHEK
1351 if [[ $(echo $package_list | grep -c dvrp_graphics) != 0 ]]
1352 then
1353    if [[ "$dvrp_inc" = "" ]]
1354    then
1355       printf "\n\n  +++ no value for \"dvrp_inc\" given in configuration file"
1356       printf "\n      This is required for the dvrp_graphics package.\n"
1357       locat=dvrp; exit
1358    fi
1359    if [[ "$dvrp_lib" = "" ]]
1360    then
1361       printf "\n\n  +++ no value for \"dvrp_lib\" given in configuration file"
1362       printf "\n      This is required for the dvrp_graphics package.\n"
1363       locat=dvrp; exit
1364    fi
1365 fi
1366
1367
1368     # PRUEFEN, OB ENTWEDER HAUPTPROGRAMM ODER NUR EIN AUSFUEHRBARES
1369     # PROGRAMM VEREINBART WURDE (IN DIESEM FALL BRAUCHT IM WEITEREN NICHT
1370     # UEBERSETZT ZU WERDEN)
1371 if [[ "$mainprog" = ""  &&  "$executable" = "" ]]
1372 then
1373    printf "\n  +++ neither main program nor executable defined"
1374    locat=source; exit
1375 elif [[ "$mainprog" != ""  &&  "$executable" != "" ]]
1376 then
1377    printf "\n  +++ main program as well as executable defined"
1378    locat=source; exit
1379 elif [[ "$mainprog" = ""  &&  "$executable" != "" ]]
1380 then
1381    do_compile=false
1382 fi
1383
1384
1385    # ALLE ZU UEBERSETZENDEN PROGRAMMTEILE ZUSAMMENSAMMELN
1386    # BEI BATCH-JOBS IST DIES NICHT NOETIG, WEIL DIE PROGRAMMTEILE BEREITS DURCH
1387    # DEN MRUN-AUFRUF ERMITTELT SIND, DER DEN BATCH-JOB GENERIERT HAT, UND
1388    # IM VERZEICHNIS SOURCES_FOR_RUN_... ABGELEGT SIND
1389 if [[ $do_compile = true  &&  "$SOURCES_COMPLETE" = "" ]]
1390 then
1391
1392    [[ "$source_list" = LM ]]  &&  source_list=LOCALLY_MODIFIED
1393    [[ "$source_list" = WP ]]  &&  source_list=WRITE_PERMIT
1394
1395    if [[ $restart_run != true ]]
1396    then
1397       rm -rf  SOURCES_FOR_RUN_$fname
1398       mkdir   SOURCES_FOR_RUN_$fname
1399    fi
1400
1401
1402       # EVTL. ZU UEBERSETZENDE PROGRAMMTEILE DADURCH BESTIMMEN, DASS GEPRUEFT
1403       # WIRD, WELCHE DATEIEN WRITE-PERMIT BESITZEN (DATEIEN SOLLTEN DESHALB
1404       # UNTER RCS-KONTROLLE STEHEN). MIT DER VARIABLEN EXCLUDE KOENNEN
1405       # BESTIMMTE DATEIEN GRUNDSAETZLICH VON DER UEBERSETZUNG AUSGESCHLOSSEN
1406       # WERDEN. DIES IST NUR BEI MANUELLEM START VON MRUN DURCH DEN BENUTZER
1407       # MOEGLICH, DA BEI AUTOMATISCHEN RESTARTS TEST DURCH DIE TATSAECHLICH
1408       # ZU UBERSETZENDEN DATEIEN ERSETZT IST.
1409       # ALLE ERMITTELTEN DATEIEN WERDEN IM VERZEICHNIS SOURCES_FOR_RUN_...
1410       # GESAMMELT
1411    if [[ "$source_list" = WRITE_PERMIT ]]
1412    then
1413
1414       source_list=""
1415       cd  $source_path
1416
1417
1418          # ALLE MOEGLICHEN QUELLCODEDATEIEN AUFLISTEN
1419       Names=$(ls -1 *.f90 2>&1)
1420       [[ $(echo $Names | grep -c '*.f90') = 0 ]]  &&  Filenames="$Names"
1421       Names=$(ls -1 *.F90 2>&1)
1422       [[ $(echo $Names | grep -c '*.F90') = 0 ]]  &&  Filenames="$Filenames $Names"
1423       Names=$(ls -1 *.F 2>&1)
1424       [[ $(echo $Names | grep -c '*.F') = 0   ]]  &&  Filenames="$Filenames $Names"
1425       Names=$(ls -1 *.f 2>&1)
1426       [[ $(echo $Names | grep -c '*.f') = 0   ]]  &&  Filenames="$Filenames $Names"
1427       Names=$(ls -1 *.c 2>&1)
1428       [[ $(echo $Names | grep -c '*.c') = 0   ]]  &&  Filenames="$Filenames $Names"
1429
1430
1431          # DATEIEN MIT WRITE-PERMIT NACH SOURCES_FOR_RUN_... KOPIEREN
1432       for  dateiname  in  $Filenames
1433       do
1434          if [[ -w $dateiname ]]
1435          then
1436             if [[ "$exclude" = ""  ||  $(echo $exclude | grep -c $dateiname) = 0 ]]
1437             then
1438                cp  $dateiname  $working_directory/SOURCES_FOR_RUN_$fname
1439                source_list=$source_list"$dateiname "
1440             fi
1441          fi
1442       done
1443
1444       cd -  > /dev/null
1445
1446
1447    elif [[ "$source_list" = LOCALLY_MODIFIED ]]
1448    then
1449
1450          # MODIFIZIERTE DATEIEN DER SVN-ARBEITSKOPIE BESTIMMEN
1451       source_list=""
1452       cd  $source_path
1453
1454
1455          # PRUEFEN, OB VERZEICHNIS UEBERHAUPT UNTER SVN-KONTROLLE STEHT
1456       if [[ ! -d .svn ]]
1457       then
1458          printf "\n\n  +++ source directory"
1459          printf "\n         \"$source_path\" "
1460          printf "\n         is not under control of \"subversion\"."
1461          printf "\n         Please do not use mrun-option \"-s LOCALLY MODIFIED\"\n"
1462       fi
1463
1464
1465          # ALLE MODIFIZIERTEN QUELLCODEDATEIEN AUFLISTEN
1466       Filenames=""
1467       svn status  >  tmp_mrun
1468       while  read line
1469       do
1470          firstc=`echo $line | cut -c1`
1471          if [[ $firstc = M  ||  $firstc = "?" ]]
1472          then
1473             Name=`echo "$line" | cut -c8-`
1474             extension=`echo $Name | cut -d. -f2`
1475             if [[ "$extension" = f90 || "$extension" = F90 || "$extension" = f || "$extension" = F || "$extension" = c ]]
1476             then
1477                Filenames="$Filenames "$Name
1478             fi
1479          fi
1480       done < tmp_mrun
1481
1482
1483          # DATEIEN NACH SOURCES_FOR_RUN_... KOPIEREN
1484       for  dateiname  in  $Filenames
1485       do
1486          cp  $dateiname  $working_directory/SOURCES_FOR_RUN_$fname
1487          source_list=$source_list"$dateiname "
1488       done
1489
1490       cd -  > /dev/null
1491
1492
1493       # MITTELS OPTION -s ANGEGEBENE DATEIEN NACH SOURCES_FOR_RUN_... KOPIEREN
1494       # BEI AUTOMATISCHEN FORTSETZUNGSLAEUFEN SIND DORT SCHON ALLE DATEIEN
1495       # VORHANDEN
1496    elif [[ "$source_list" != ""  &&  $restart_run != true ]]
1497    then
1498
1499       cd  $source_path
1500
1501       for  filename  in  $source_list
1502       do
1503
1504             # QUELLTEXT-DATEI DARF KEINE PFADE BEINHALTEN
1505          if [[ $(print $filename | grep -c "/") != 0 ]]
1506          then
1507             printf "\n  +++ source code file:  $filename"
1508             printf "\n      must not contain (\"/\") "
1509             locat=source; exit
1510          fi
1511
1512          if [[ ! -f $filename ]]
1513          then
1514             printf "\n  +++ source code file:  $filename"
1515             printf "\n      does not exist"
1516             locat=source; exit
1517          else
1518             cp  $filename  $working_directory/SOURCES_FOR_RUN_$fname
1519          fi
1520
1521       done
1522
1523       cd -  > /dev/null
1524
1525    fi
1526
1527
1528       # PRUEFEN, OB ENTWEDER HAUPTPROGRAMM VORHANDEN UND ES EVTL. IN DER
1529       # LISTE DER ZU UEBERSETZENDEN PROGRAMMTEILE MIT ENTHALTEN IST (WENN
1530       # NICHT, WIRD ES DIESER LISTE HINZUGEFUEGT)
1531    if [[ $restart_run != true ]]
1532    then
1533
1534       if [[ ! -f "$source_path/$mainprog" ]]
1535       then
1536          printf "\n\n  +++ main program:  $mainprog"
1537          printf "\n      does not exist in source directory"
1538          printf "\n      \"$source_path\"\n"
1539          locat=source; exit
1540       else
1541          if [[ $(echo $source_list | grep -c $mainprog) = 0 ]]
1542          then
1543             cp  $source_path/$mainprog  SOURCES_FOR_RUN_$fname
1544             source_list=${mainprog}" $source_list"
1545          fi
1546       fi
1547    fi
1548
1549
1550       # DATEIEN AUS ZUSAETZLICHEM QUELLVERZEICHNIS HINZUFUEGEN
1551    if [[ $restart_run != true  &&  "$add_source_path" != "" ]]
1552    then
1553
1554          # GIBT ES DAS VERZEICHNIS UEBERHAUPT?
1555       if [[ ! -d $add_source_path ]]
1556       then
1557          printf "\n\n  +++ WARNING: additional source code directory"
1558          printf "\n      \"$add_source_path\" "
1559          printf "\n      does not exist or is not a directory."
1560          printf "\n      No source code will be used from this directory!\n"
1561          add_source_path=""
1562          sleep 3
1563       else
1564
1565          cd $add_source_path
1566
1567          Names=$(ls -1 *.f90 2>&1)
1568          [[ $(echo $Names | grep -c '*.f90') = 0 ]]  &&  AddFilenames="$Names"
1569          Names=$(ls -1 *.F90 2>&1)
1570          [[ $(echo $Names | grep -c '*.F90') = 0 ]]  &&  AddFilenames="$AddFilenames $Names"
1571          Names=$(ls -1 *.F 2>&1)
1572          [[ $(echo $Names | grep -c '*.F') = 0   ]]  &&  AddFilenames="$AddFilenames $Names"
1573          Names=$(ls -1 *.f 2>&1)
1574          [[ $(echo $Names | grep -c '*.f') = 0   ]]  &&  AddFilenames="$AddFilenames $Names"
1575          Names=$(ls -1 *.c 2>&1)
1576          [[ $(echo $Names | grep -c '*.c') = 0   ]]  &&  AddFilenames="$AddFilenames $Names"
1577
1578          cd -  > /dev/null
1579          cd  SOURCES_FOR_RUN_$fname
1580
1581          for  dateiname  in  $AddFilenames
1582          do
1583             if [[ -f $dateiname ]]
1584             then
1585                printf "\n  +++ source code file \"$dateiname\" found in additional"
1586                printf "\n      source code directory \"$add_source_path\" "
1587                printf "\n      as well as in directory \"$source_path\"."
1588                locat=source; exit
1589             fi
1590
1591             cp  $add_source_path/$dateiname  .
1592             source_list="$source_list $dateiname"
1593
1594                # Default User-Interface von der Liste entfernen, falls Datei
1595                # ein User-Interface enthaelt
1596             if [[ $( cat $dateiname | grep -c "END SUBROUTINE user_parin" ) != 0 ]]
1597             then
1598                if [[ $dateiname != user_interface.f90  &&  -f user_interface.f90 ]]
1599                then
1600                   rm -rf  user_interface.f90
1601                   source_list=`echo $source_list | sed -e 's/user_interface.f90//'`
1602                   printf "\n\n  *** default \"user_interface.f90\" removed from the files to be translated"
1603                   printf "\n      since a user-interface is found in file"
1604                   printf "\n      \"$add_source_path/$dateiname\" \n"
1605                   sleep 3
1606                else
1607                   printf "\n\n  *** user-interface file \"$dateiname\" "
1608                   printf "\n      added to the files to be translated \n"
1609                   sleep 3
1610                fi
1611             fi
1612          done
1613
1614          cd -  > /dev/null
1615       fi
1616    fi
1617
1618
1619       # ALLE UNTERPROGRAMME, DIE ZU VEREINBARTEN SOFTWAREPAKETEN GEHOEREN,
1620       # DER LISTE DER ZU UEBERSETZENDEN DATEIEN HINZUFUEGEN
1621    if [[ $restart_run != true  &&  -n $package_list ]]
1622    then
1623
1624       cd  $source_path
1625
1626       for  package  in  $package_list
1627       do
1628
1629          [[ $package = "dvrp_graphics+1PE" ]]  &&  package=dvrp_graphics
1630
1631             # ERMITTELE ALLE DATEIEN, DIE ZUM PAKET GEHOEREN
1632             # FEHLERMELDUNGEN WERDEN ABGEFANGEN, DA * AUCH VERZEICHNISSNAMEN
1633             # LIEFERT
1634          package_source_list=`grep "defined( __$package " * 2>/dev/null | cut -f1 -d:`
1635
1636
1637             # FUEGE DIESE DATEIEN DER LISTE DER ZU UEBERSETZENDEN DATEIEN
1638             # HINZU, FALLS SIE NOCH NICHT DAZUGEHOEREN
1639          for  source_list_name  in  $package_source_list
1640          do
1641             if [[ $(echo $source_list | grep -c $source_list_name) = 0 ]]
1642             then
1643
1644                    # NUR DATEIEN MIT GUELTIGEN ENDUNGEN VERWENDEN
1645                ending=`echo $source_list_name | cut -f2 -d.`
1646                if [[ "$ending" = f90  ||  "$ending" = F90  ||  "$ending" = f  ||  "$ending" = F  ||  "$ending" = c ]]
1647                then
1648                   cp  $source_list_name  $working_directory/SOURCES_FOR_RUN_$fname
1649                   source_list="$source_list $source_list_name"
1650                fi
1651             fi
1652          done
1653       done
1654
1655       cd -  > /dev/null
1656    fi
1657
1658
1659       # MAKEFILE AUF VORHANDENSEIN PRUEFEN UND KOPIEREN
1660       # BEI RESTART-LAEUFEN LIEGT ES SCHON IM VERZEICHNIS SOURCES_FOR_RUN...
1661    if [[ "$restart_run" != true ]]
1662    then
1663       [[ "$makefile" = "" ]]  &&  makefile=$source_path/Makefile
1664       if [[ ! -f $makefile ]]
1665       then
1666          printf "\n  +++ file \"$makefile\" does not exist"
1667          locat=make; exit
1668       else
1669          cp  $makefile  SOURCES_FOR_RUN_$fname/Makefile
1670       fi
1671    fi
1672
1673 fi  # do_compile=true
1674
1675
1676    # FALLS PROGRAMMTEILE UEBERSETZT WERDEN SOLLEN, FOLGEN JETZT EINIGE
1677    # UEBERPRUEFUNGEN UND DAS SETZEN DER PRAEPROZESSOR-DIREKTIVEN
1678 if [[ $do_compile = true ]]
1679 then
1680
1681       # PRAEPROZESSOR-DIREKTIVEN ZUM SELEKTIVEN AUSWAEHLEN VON CODETEILEN
1682       # ZUSAMMENSETZEN
1683       # DIREKTIVEN ZUM AKTIVIEREN VON RECHNERSPEZIFISCHEM CODE
1684    if [[ $(echo $localhost | cut -c1-3) = ibm ]]
1685    then
1686       cpp_options="${cpp_options},-D__ibm=__ibm"
1687    elif [[ $(echo $localhost | cut -c1-3) = nec ]]
1688    then
1689       cpp_options="$cpp_options -D__nec"
1690    elif [[ $(echo $localhost | cut -c1-2) = lc ]]
1691    then
1692       cpp_options="$cpp_options -D__lc"
1693    else
1694       cpp_options="$cpp_options -D__$localhost"
1695    fi
1696
1697       # DIREKTIVEN DIE DURCH OPTION -K BESTIMMT WERDEN (Z.B. PARALLEL)
1698    if [[ $(echo $localhost | cut -c1-3) = ibm ]]
1699    then
1700       [[ -n $cond1 ]]  &&  cpp_options="${cpp_options},-D__$cond1=__$cond1"
1701       [[ -n $cond2 ]]  &&  cpp_options="${cpp_options},-D__$cond2=__$cond2"
1702    else
1703       [[ -n $cond1 ]]  &&  cpp_options="$cpp_options -D__$cond1"
1704       [[ -n $cond2 ]]  &&  cpp_options="$cpp_options -D__$cond2"
1705    fi
1706
1707       # DIREKTIVEN DIE SOFTWAREPAKETE AKTIVIEREN (OPTION -p)
1708    if [[ -n $package_list ]]
1709    then
1710       for  package  in  $package_list
1711       do
1712          if [[ $(echo $localhost | cut -c1-3) = ibm ]]
1713          then
1714             if [[ $package != "dvrp_graphics+1PE" ]]
1715             then
1716                cpp_options="${cpp_options},-D__$package=__$package"
1717             else
1718                cpp_options="${cpp_options},-D__dvrp_graphics=__dvrp_graphics"
1719                export use_seperate_pe_for_dvrp_output=true
1720             fi
1721          else
1722             if [[ $package != "dvrp_graphics+1PE" ]]
1723             then
1724                cpp_options="$cpp_options -D__$package"
1725             else
1726                cpp_options="$cpp_options -D__dvrp_graphics"
1727                export use_seperate_pe_for_dvrp_output=true
1728             fi
1729          fi
1730       done
1731    fi
1732
1733       # DIREKTIVEN DIE DURCH OPTION -D FESTGELEGT SIND
1734    if [[ -n $cpp_opts ]]
1735    then
1736       for  popts  in  $cpp_opts
1737       do
1738          if [[ $(echo $localhost | cut -c1-3) = ibm ]]
1739          then
1740             cpp_options="${cpp_options},-D__$popts=__$popts"
1741          else
1742             cpp_options="$cpp_options -D__$popts"
1743          fi
1744       done
1745    fi
1746
1747 else
1748
1749
1750       # BEI LOKALEN RECHNUNGEN PRUEFEN, OB EXECUTABLE VORHANDEN
1751    if [[ $do_remote = false ]]
1752    then
1753       if [[ ! -f $executable ]]
1754       then
1755          printf "\n  +++ executable file:  $executable"
1756          printf "\n      does not exist"
1757          locat=executable; exit
1758       fi
1759    fi
1760 fi
1761
1762
1763    # JOBMODUS FESTSTELLEN
1764 if [[ "$ENVIRONMENT" = BATCH  &&  $localhost != lctit  ||  "$QUEUE" != interactive  &&  $localhost = lctit ]]
1765 then
1766    jobmo=BATCH
1767 else
1768    jobmo=INTERACTIVE
1769 fi
1770
1771
1772    # HOSTSPEZIFISCHE DEFAULT-COMPILER SETZEN, FALLS NICHT BEREITS
1773    # DURCH BENUTZER ANDERWEITIG VEREINBART
1774 if [[ "$compiler_name" = "" ]]
1775 then
1776
1777    printf "\n  +++ no compiler specified for \"$localhost $cond1 $cond2\""
1778    locat=compiler_name; exit
1779
1780 fi
1781
1782
1783    # COMPILER AUF NECK UEBERSCHREIBEN
1784 [[ $localhost = neck ]]  &&  compiler_name=mpif90
1785
1786
1787
1788    # TEMPORAEREN KATALOGNAMEN BESTIMMEN
1789 kennung=$RANDOM
1790 if [[ "$tmp_user_catalog" = "" ]]
1791 then
1792    if [[ $localhost = ibmb  ||  $localhost = ibmh ]]
1793    then
1794       tmp_user_catalog=$TMPDIR
1795    elif [[ $localhost = nech ]]
1796    then
1797       tmp_user_catalog=$WRKSHR
1798    else
1799       tmp_user_catalog=/tmp
1800    fi
1801 fi
1802 TEMPDIR=$tmp_user_catalog/${usern}.$kennung
1803
1804
1805    # KATALOGNAMEN FUER ZWISCHENSPEICHERUNG VON FORTSETZUNGSLAUFDATEIEN
1806    # BESTIMMEN
1807 if [[ "$tmp_data_catalog" = "" ]]
1808 then
1809    if [[ $localhost = ibmb  ||  $localhost = ibmh ]]
1810    then
1811       tmp_data_catalog=$WORK/mrun_restart_data
1812    elif [[ $localhost = nech ]]
1813    then
1814       tmp_data_catalog=$WRKSHR/mrun_restart_data
1815    else
1816       tmp_data_catalog=/tmp/mrun_restart_data
1817    fi
1818 fi
1819
1820
1821    # EVENTUELL BEI LOKALEN RECHNUNGEN $-ZEICHEN IN ENVIRONMENT-VARIABLEN
1822    # ERSETZEN
1823 if [[ $do_remote = false  &&  $do_compile = true ]]
1824 then
1825    eval  fopts=\"$fopts\"
1826    eval  lopts=\"$lopts\"
1827 fi
1828
1829
1830
1831    # COMPILE- UND LINK-OPTIONEN BESTIMMEN
1832 fopts="$fopts $netcdf_inc $dvrp_inc"
1833 lopts="$lopts $netcdf_lib $dvrp_lib"
1834 ROPTS="$ropts"
1835 if [[ ( $(echo $host | cut -c1-3) = nec  ||  $(echo $host | cut -c1-3) = ibm  ||  $host = lcsgih  ||  $host = lcsgib  ||  $host = lctit  ||  $host = lcfimm  ||  $host = lcxt4 )  &&  -n $numprocs ]]
1836 then
1837    XOPT="-X $numprocs"
1838 fi
1839
1840
1841
1842    # PRUEFEN DER CPU-ZEIT. (CPUMAX WIRD ALS ENV-VARIABLE VOM HAUTPRO-
1843    # GRAMM BENOETIGT
1844 done=false
1845 while [[ $done = false ]]
1846 do
1847    cputime=$cpumax
1848    if (( $cputime == 0 ))
1849    then
1850       printf "\n  +++ cpu-time is undefined"
1851       printf "\n  >>> Please type CPU-time in seconds as INTEGER:"
1852       printf "\n  >>> "
1853       read  cputime  1>/dev/null  2>&1
1854    else
1855       done=true
1856    fi
1857    cpumax=$cputime
1858 done
1859
1860 (( minuten = cputime / 60 ))
1861 (( sekunden = cputime - minuten * 60 ))
1862
1863
1864    # PRUEFEN DER KERNSPEICHERANFORDERUNG
1865 if [[ $do_batch = true ]]
1866 then
1867    done=false
1868    while [[ $done = false ]]
1869    do
1870       if (( memory == 0 ))
1871       then
1872          printf "\n  +++ memory demand is undefined"
1873          printf "\n  >>> Please type memory in  MByte per process  as INTEGER:"
1874          printf "\n  >>> "
1875          read  memory  1>/dev/null  2>&1
1876       else
1877          done=true
1878       fi
1879    done
1880 fi
1881
1882
1883    # PRUEFEN, OB FUER REMOTE-RECHNUNGEN EIN BENUTZERNAME ANGEGEBEN WURDE
1884 if [[ $do_remote = true  &&  -z $remote_username ]]
1885 then
1886    while [[ -z $remote_username ]]
1887    do
1888       printf "\n  +++ username on remote host \"$host\" is undefined"
1889       printf "\n  >>> Please type username:"
1890       printf "\n  >>> "
1891       read  remote_username
1892    done
1893    mc="$mc -u$remote_username"
1894 fi
1895
1896###########################################################################
1897# HEADER-AUSGABE
1898###########################################################################
1899
1900
1901 calltime=$(date)
1902 printf "\n"
1903# [[ $silent = false ]]  &&  clear
1904 printf "#--------------------------------------------------------------# \n"
1905 printf "| $version$calltime | \n"
1906 printf "|                                                              | \n"
1907 spalte1="called on:"; spalte2=$localhost_realname
1908 printf "| $spalte1$spalte2 | \n"
1909 if [[ $local_compile = false ]]
1910 then
1911    if [[ $do_remote = true ]]
1912    then
1913       spalte1="execution on:"; spalte2="$host (username: $remote_username)"
1914    else
1915       spalte1="execution on:"; spalte2="$host ($localhost_realname)"
1916    fi
1917 else
1918    spalte1="compiling test only!"; spalte2=""
1919 fi
1920 printf "| $spalte1$spalte2 | \n"
1921 if [[ -n $numprocs ]]
1922 then
1923    spalte1="number of PEs:"; spalte2=$numprocs
1924    printf "| $spalte1$spalte2 | \n"
1925 fi
1926 if [[ -n $tasks_per_node ]]
1927 then
1928    spalte1="tasks per node:"; spalte2="$tasks_per_node (number of nodes: $nodes)"
1929    printf "| $spalte1$spalte2 | \n"
1930 fi
1931 if [[ $threads_per_task != 1 ]]
1932 then
1933    spalte1="threads per task:"; spalte2="$threads_per_task"
1934    printf "| $spalte1$spalte2 | \n"
1935 fi
1936 printf "|                                                              | \n"
1937 if [[ $do_compile = true ]]
1938 then
1939    spalte1=cpp-directives:; spalte2=$cpp_options
1940    printf "| $spalte1$spalte2 | \n"
1941    zeile=$(echo "$cpp_options" | cut -c41-)
1942    while [[ "$zeile" != "" ]]
1943    do
1944       spalte1=""
1945       spalte2=$zeile
1946       printf "| $spalte1$spalte2 | \n"
1947       zeile=$(echo "$zeile" | cut -c41-)
1948    done
1949
1950    spalte1=compiler-options:; spalte2="$fopts"
1951    printf "| $spalte1$spalte2 | \n"
1952    zeile=$(echo "$fopts" | cut -c41-)
1953    while [[ "$zeile" != "" ]]
1954    do
1955       spalte1=""
1956       spalte2=$zeile
1957       printf "| $spalte1$spalte2 | \n"
1958       zeile=$(echo "$zeile" | cut -c41-)
1959    done
1960
1961    spalte1=linker-options:; spalte2=$lopts
1962    printf "| $spalte1$spalte2 | \n"
1963    zeile=$(echo "$lopts" | cut -c41-)
1964    while [[ "$zeile" != "" ]]
1965    do
1966       spalte1=""
1967       spalte2=$zeile
1968       printf "| $spalte1$spalte2 | \n"
1969       zeile=$(echo "$zeile" | cut -c41-)
1970    done
1971
1972    spalte1="main program":; spalte2=$mainprog
1973    printf "| $spalte1$spalte2 | \n"
1974 else
1975    spalte1=executable:; spalte2=$executable
1976    printf "| $spalte1$spalte2 | \n"
1977 fi
1978 printf "|                                                              | \n"
1979 spalte1="base name of files":; spalte2=$fname
1980 printf "| $spalte1$spalte2 | \n"
1981 if [[ $fname != $afname ]]
1982 then
1983    spalte1="base name of input files":; spalte2=$afname
1984    printf "| $spalte1$spalte2 | \n"
1985 fi
1986 spalte1="INPUT control list":; spalte2=$input_list
1987 printf "| $spalte1$spalte2 | \n"
1988 spalte1="OUTPUT control list":; spalte2=$output_list
1989 printf "| $spalte1$spalte2 | \n"
1990
1991 if [[ $do_batch = true  ||  "$LOADLBATCH" = yes ]]
1992 then
1993    spalte1="memory demand / PE":; spalte2="$memory MB"
1994    printf "| $spalte1$spalte2 | \n"
1995    spalte1=CPU-time:; spalte2="$minuten:$sekunden"
1996    printf "| $spalte1$spalte2 | \n"
1997 fi
1998
1999 if [[ $do_compile = true ]]
2000 then
2001    printf "|                                                              | \n"
2002    printf "| Files to be compiled:                                        | \n"
2003    zeile=$source_list
2004    while [[ "$zeile" != "" ]]
2005    do
2006       spalte3=$zeile
2007       printf "| $spalte3 | \n"
2008       zeile=$(echo "$zeile" | cut -c61-)
2009    done
2010 fi
2011 printf "#--------------------------------------------------------------#"
2012
2013
2014
2015    # BEDINGTE AUSGABE DER DATEIVERBINDUNGEN
2016 if [[ $do_trace = true ]]
2017 then
2018    (( i = 0 ))
2019    while (( i < iin ))
2020    do
2021       (( i = i + 1 ))
2022       if (( i == 1 ))
2023       then
2024          printf "\n\n >>> INPUT-file assignments:\n"
2025       fi
2026       printf "\n     ${localin[$i]} :  ${absnamein[$i]}"
2027    done
2028    (( i = 0 ))
2029    while (( i < iout ))
2030    do
2031       (( i = i + 1 ))
2032       if (( i == 1 ))
2033       then
2034          printf "\n\n >>> OUTPUT-file assignments:\n"
2035       fi
2036       printf "\n     ${localout[$i]} :  ${pathout[$i]}"
2037    done
2038    (( i = 0 ))
2039    while (( i < iic ))
2040    do
2041       (( i = i + 1 ))
2042       if (( i == 1 ))
2043       then
2044          printf "\n\n >>> INPUT-commands:\n"
2045       fi
2046       printf "\n     ${in_command[$i]}" 
2047    done
2048    (( i = 0 ))
2049    while (( i < ioc ))
2050    do
2051       (( i = i + 1 ))
2052       if (( i == 1 ))
2053       then
2054          printf "\n\n >>> OUTPUT-commands:\n"
2055       fi
2056       printf "\n     ${out_command[$i]}" 
2057    done
2058 fi
2059
2060
2061    # ABFRAGEN BEI AUFRUF AUF LOKALER MASCHINE
2062 if [[ $remotecall = false  &&  $silent = false  &&  $jobmo != BATCH ]]
2063 then
2064    antwort=dummy
2065    printf "\n\n"
2066    while [[ "$antwort" != y  &&  "$antwort" != Y  &&  "$antwort" != n  &&  "$antwort" != N ]]
2067    do
2068       printf " >>> everything o.k. (y/n) ?  "
2069       read  antwort
2070    done
2071    if [[ $antwort = n  ||  $antwort = N ]]
2072    then
2073       locat=user_abort; (( iec = 0 )); exit
2074    fi
2075    if [[ $do_batch = true ]]
2076    then
2077       printf " >>> batch-job will be created and submitted"
2078    else
2079       if [[ $local_compile = false ]]
2080       then
2081          printf " >>> MRUN will now continue to execute on this machine"
2082       else
2083          printf " >>> a test compilation will now be carried out on this machine"
2084       fi
2085    fi
2086 fi
2087 
2088
2089
2090
2091     # FALLS AUF DIESER MASCHINE GERECHNET WERDEN SOLL, WERDEN JETZT ENTSPRE-
2092     # CHENDE AKTIONEN DURCHGEFUEHRT
2093 if [[ $do_batch = false ]]
2094 then
2095
2096
2097       # TEMPORAEREN KATALOG ERZEUGEN
2098    mkdir -p  $TEMPDIR
2099    chmod  go+rx  $TEMPDIR
2100    tmpcreate=true
2101
2102
2103       # SAEMTLICHE QUELLTEXT-DATEIEN BZW. AUSFUEHRBARES PROGRAMM IN
2104       # TEMPORAERES VERZEICHNIS KOPIEREN
2105    if [[ $do_compile = true ]]
2106    then
2107
2108          # ON NEC, COMPILATION IS DONE ON HOST CROSS VIA CROSS COMPILING
2109          # CREATE A TEMPORARY DIRECTORY ON THAT MACHINE (HOME MOUNTED VIA NFS)
2110       if [[ $localhost = nech ]]
2111       then
2112          TEMPDIR_COMPILE=$HOME/work/${usern}.$kennung
2113          if  mkdir -p  $TEMPDIR_COMPILE
2114          then
2115             printf "\n  *** \"$TEMPDIR_COMPILE\" "
2116             printf "\n      is generated as temporary directory for cross compiling\n"
2117          else
2118             printf "\n  +++ creating directory \"$TEMPDIR_COMPILE\" "
2119             printf "\n      needed for cross compilation failed"
2120             locat=compile
2121             exit
2122          fi
2123       else
2124          TEMPDIR_COMPILE=$TEMPDIR
2125       fi
2126
2127
2128          # PFADNAMEN FUER DAS MAKE-DEPOSITORY ERMITTELN
2129       line=""
2130       grep "%depository_path" $config_file  >  tmp_mrun
2131       while read line
2132       do
2133          if [[ "$line" != ""  &&  $(echo $line | cut -c1) != "#" ]]
2134          then
2135             if [[ "$(echo $line | cut -d" " -s -f3)" = "" ]]
2136             then
2137                global_depository_path=`echo $line | cut -d" " -s -f2`
2138             fi
2139          fi
2140       done < tmp_mrun
2141
2142       line=""
2143       grep  " $localhost" $config_file | grep "%depository_path"  >  tmp_mrun
2144       while read line
2145       do
2146          if [[ "$line" != ""  &&  $(echo $line | cut -c1) != "#" ]]
2147          then
2148             local_depository_path=`echo $line | cut -d" " -s -f2`
2149          fi
2150       done < tmp_mrun
2151
2152       if [[ "$local_depository_path" = "" ]]
2153       then
2154          if [[ "$global_depository_path" != "" ]]
2155          then
2156             local_depository_path=$global_depository_path
2157          else
2158             printf "\n\n  +++ no depository path found in configuration file"
2159             printf "\n      for local host \"$localhost\" "
2160             printf "\n      please set \"\%depository_path\" in configuration file\n"
2161             locat=config_file; exit
2162          fi
2163       fi
2164       eval local_depository_path=$local_depository_path
2165
2166       basename=`print $mainprog | cut -f1 -d"."`
2167       eval make_depository=${local_depository_path}/${basename}_current_version.tar
2168       if [[ ! -f $make_depository ]]
2169       then
2170          printf "\n"
2171          printf "\n  *** WARNING: make depository \"$make_depository\" not found"
2172          printf "\n               \"make\" will fail, if the Makefile or other source files are missing\n"
2173       else
2174          cp  $make_depository  $TEMPDIR_COMPILE
2175          cd  $TEMPDIR_COMPILE
2176          tar -xf  $make_depository  >  /dev/null  2>&1
2177          cd -  > /dev/null
2178       fi
2179
2180       cp  SOURCES_FOR_RUN_$fname/*  $TEMPDIR_COMPILE
2181
2182          # FALLS USER-INTERFACE VORHANDEN UND AUF DATEI MIT ANDEREM NAMEN
2183          # ALS user_interface.f90 LIEGT, DIESEN GEAENDERTEN NAMEN INS
2184          # MAKEFILE EINTRAGEN
2185       cd  $TEMPDIR_COMPILE
2186       interface_file=`grep -l "END SUBROUTINE user_parin" $source_list`
2187       if [[ "$interface_file" != "" ]]
2188       then
2189          interface_file=`echo $interface_file | cut -d"." -f1`
2190          mv  Makefile  Makefile_old
2191          sed "s/user_interface/$interface_file/g"  Makefile_old  >  Makefile
2192       fi
2193       cd -  > /dev/null
2194    else
2195       cp  $executable   ${TEMPDIR}/a.out
2196    fi
2197
2198
2199       # WECHSEL IN TEMPORAEREN KATALOG
2200    cd $TEMPDIR
2201    printf "\n  *** changed to temporary directory: $TEMPDIR"
2202
2203
2204       # OUTPUT-DATEI-VERBINDUNGEN AUF TEMPORAERER DATEI ABLEGEN
2205       # DIESE DATEI KANN VON SPAETER AUFZURUFENDEN BENUTZERPROZEDUREN GELESEN
2206       # WERDEN, UM ZU LOKALEN DATEINAMEN GEHOERENDE PERMANENTE NAMEN ZU
2207       # ERMITTELN
2208    (( i = 0 ))
2209    while (( i < iout ))
2210    do
2211       (( i = i + 1 ))
2212       if [[ "${actionout[$i]}" = tr  ||  "${actionout[$i]}" = tra  ||  "${actionout[$i]}" = trpe ]]
2213       then
2214          printf "${localout[$i]} ${actionout[$i]}\n${pathout[$i]}\n${localhost}_${fname}${endout[$i]}\n" >> OUTPUT_FILE_CONNECTIONS
2215       else
2216          printf "${localout[$i]} ${actionout[$i]}\n${pathout[$i]}\n${frelout[$i]}\n" >> OUTPUT_FILE_CONNECTIONS
2217       fi
2218    done
2219
2220
2221       # EVTL. UEBERSETZUNGSAKTIONEN STARTEN
2222    if [[ $do_compile = true ]]
2223    then
2224
2225
2226          # COMPILING WITH MAKE (ON NEC COMPILER IS CALLED ON HOST CROSS)
2227       printf "\n\n\n  *** compilation starts \n$striche\n"
2228       printf "  *** compilation with make using following options:\n"
2229       printf "      compilername:             $compiler_name\n"
2230       printf "      options:                  $fopts\n"
2231       printf "      preprocessor-directives:  $cpp_options \n"
2232       printf "      linker-options:           $lopts \n"
2233       printf "      source code files:        $source_list \n"
2234
2235       if [[ $localhost = nech ]]
2236       then
2237          ssh  136.172.44.192 -l $usern ". /SX/opt/etc/initsx.sh; cd \$HOME/work/${usern}.$kennung; sxmake -f Makefile PROG=a.out  F90=$compiler_name  COPT=\"$cpp_options\"  F90FLAGS=\"$fopts\"  LDFLAGS=\"$lopts\" "
2238          cp  $TEMPDIR_COMPILE/a.out  .
2239          [[ $? != 0 ]]  &&  compile_error=true
2240          rm -rf  $TEMPDIR_COMPILE
2241       else
2242          [[ $localhost = lctit ]]  &&  export LM_LICENSE_FILE=27050@tggls
2243          make -f Makefile PROG=a.out  F90=$compiler_name  COPT="$cpp_options"  F90FLAGS="$fopts"  LDFLAGS="$lopts"
2244       fi
2245
2246       if [[ $? != 0  ||  "$compile_error" = true  ||  "$module_compile_error" = true ]]
2247       then
2248          printf "\n  +++ error occured while compiling or linking"
2249          locat=compile
2250
2251  # WORKAROUND: REMOVE IF CONSTRUCT LATER, BUT KEEP THE EXIT!
2252          if [[ $localhost != lcsgib  &&  $localhost != lcsgih ]]
2253          then
2254             exit
2255          else
2256             locat=normal
2257          fi
2258       else
2259          printf "$striche\n  *** compilation finished \n"
2260       fi
2261    fi
2262
2263
2264       # FALLS NUR TESTWEISE KOMPILIERT WERDEN SOLLTE, IST MRUN JETZT FERTIG
2265    if [[ $local_compile = true ]]
2266    then
2267       cd  $HOME
2268       rm -rf $TEMPDIR
2269       locat=local_compile; exit
2270    fi
2271
2272
2273       # BEREITSTELLEN DER INPUT-DATEIEN
2274       # SCHLEIFE UEBER ALLE VOM BENUTZER ANGEGEBENEN DATEIEN
2275    (( i = 0 ))
2276    while (( i < iin ))
2277    do
2278       (( i = i + 1 ))
2279       if (( i == 1 ))
2280       then
2281          printf "\n\n  *** providing INPUT-files:\n$striche"
2282       fi
2283
2284
2285          # OPTIONALE DATEIEN BEI NICHTVORHANDENSEIN UEBERGEHEN
2286       if [[ "${transin[$i]}" = unavailable ]]
2287       then
2288          if [[ "${extin[$i]}" = ""  ||  "${extin[$i]}" = " " ]]
2289          then
2290             printf "\n  +++ WARNING: input file \"${pathin[$i]}/${afname}${endin[$i]}\" "
2291             printf "\n               is not available!"
2292          else
2293             printf "\n  +++ WARNING: input file \"${pathin[$i]}/${afname}${endin[$i]}.${extin[$i]}\" "
2294             printf "\n               is not available!"
2295          fi
2296          continue
2297       fi
2298
2299          # PRUEFEN, OB EINZELDATEI ODER DATEI PRO PROZESSOR
2300       files_for_pes=false; datentyp=file
2301       if [[ "${actionin[$i]}" = pe  &&  -n $numprocs ]]
2302       then
2303          files_for_pes=true; datentyp=directory
2304          actionin[$i]=""
2305       elif [[ "${actionin[$i]}" = pe  &&  ! -n $numprocs ]]
2306       then
2307          actionin[$i]=""
2308       elif [[ "${actionin[$i]}" = arpe  &&  -n $numprocs ]]
2309       then
2310          files_for_pes=true; datentyp=directory
2311          actionin[$i]="ar"
2312       elif [[ "${actionin[$i]}" = arpe  &&  ! -n $numprocs ]]
2313       then
2314          actionin[$i]="ar"
2315       elif [[ "${actionin[$i]}" = flpe  &&  -n $numprocs ]]
2316       then
2317          files_for_pes=true; datentyp=directory
2318          actionin[$i]="fl"
2319       elif [[ "${actionin[$i]}" = flpe  &&  ! -n $numprocs ]]
2320       then
2321          actionin[$i]="fl"
2322       fi
2323
2324       if [[ $files_for_pes = true ]]
2325       then
2326          printf "\n  >>> INPUT: ${absnamein[$i]}/....  to  ${localin[$i]}"
2327       else
2328          printf "\n  >>> INPUT: ${absnamein[$i]}  to  ${localin[$i]}"
2329       fi
2330
2331          # INPUT-DATEI FUER EINEN FORTSETZUNGSLAUF. ES WIRD GEPRUEFT,
2332          # OB DIESE DATEI NOCH AUF DEM TEMPORAEREN DATENKATALOG VORHANDEN
2333          # IST. FALLS NICHT, WIRD VERSUCHT, SIE ANSCHLIESSEND VOM ARCHIV-
2334          # SERVER ZU HOLEN
2335       if [[ "${actionin[$i]}" = fl ]]
2336       then
2337          printf "\n      $datentyp will be fetched from temporary directory \"${tmp_data_catalog}\" !"
2338          if [[ $files_for_pes = false ]]
2339          then
2340             if [[ -f "$tmp_data_catalog/${frelin[$i]}" ]]
2341             then
2342                ln  $tmp_data_catalog/${frelin[$i]}  ${localin[$i]}
2343                got_tmp[$i]=true
2344             elif [[ -f "$WORK/${frelin[$i]}"  &&  $ignore_archive_error = true ]]
2345             then
2346                printf "\n  +++ $datentyp not found in \"$tmp_data_catalog\" !"
2347                printf "\n  *** trying to use backup copy in \"$WORK\" "
2348                cp  $WORK/${frelin[$i]}  ${localin[$i]}
2349             else
2350                printf "\n  +++ $datentyp not found in \"$tmp_data_catalog\" "
2351                printf "\n      or \"$tmp_data_catalog\" does not exist!"
2352                printf "\n  *** trying to get copy from archive"
2353                actionin[$i]=ar
2354             fi
2355          else
2356             if [[ -d "$tmp_data_catalog/${frelin[$i]}" ]]
2357             then
2358                mkdir  ${localin[$i]}
2359                cd $tmp_data_catalog/${frelin[$i]}
2360                for file in $(ls *)
2361                do
2362                   ln $file $TEMPDIR/${localin[$i]}
2363                done
2364                cd $TEMPDIR
2365                got_tmp[$i]=true
2366             elif [[ -d "$WORK/${frelin[$i]}"  &&  $ignore_archive_error = true ]]
2367             then
2368                printf "\n  +++ $datentyp not found in \"$tmp_data_catalog\" !"
2369                printf "\n  *** trying to use backup copy in \"$WORK\" "
2370                cp -r  $WORK/${frelin[$i]}  ${localin[$i]}
2371             else
2372                printf "\n  +++ $datentyp not found in \"$tmp_data_catalog\" "
2373                printf "\n      or \"$tmp_data_catalog\" does not exist!"
2374                printf "\n  *** trying to get copy from archive"
2375                actionin[$i]=ar
2376             fi
2377          fi
2378       fi
2379
2380
2381          # DATEI LIEGT AUF ARCHIV-SERVER
2382       if [[ "${actionin[$i]}" = ar ]]
2383       then
2384
2385          if [[ $files_for_pes = false ]]
2386          then
2387             printf "\n      file will be restored from archive-system ($archive_system)!"
2388          else
2389             printf "\n      directory will be restored from archive-system ($archive_system)!"
2390          fi
2391
2392          file_restored=false
2393
2394          if [[ $archive_system = asterix ]]
2395          then
2396             do_stagein=true
2397             (( stagein_anz = 0 ))
2398             while [[ $do_stagein = true ]]
2399             do
2400                if [[ $files_for_pes = false ]]
2401                then
2402                   stagein  -O  ${frelin[$i]}  >  STAGEIN_OUTPUT
2403                else
2404                   stagein  -t  -O  ${frelin[$i]}  >  STAGEIN_OUTPUT
2405                fi
2406                cat  STAGEIN_OUTPUT
2407                if [[ $(grep -c "st.msg:i24"  STAGEIN_OUTPUT) != 0 ]]
2408                then
2409                   file_restored=true
2410                   do_stagein=false
2411                else
2412                   (( stagein_anz = stagein_anz + 1 ))
2413                   if (( stagein_anz == 10 ))
2414                   then
2415                      printf "\n  +++ stagein stoped after 10 tries"
2416                      locat=stage
2417                      exit
2418                   fi
2419                   printf "\n  +++ restoring from archive failed, trying again:"
2420                   sleep 900
2421                fi
2422             done
2423          elif [[ $archive_system = DMF ]]
2424          then
2425             if [[ $files_for_pes = false ]]
2426             then
2427                printf "\n  +++ restoring of single files impossible with $archive_system !\n"
2428                locat=DMF
2429                exit
2430             else
2431                find  $ARCHIVE/${frelin[$i]}  -type m  -print  |  dmget
2432                cp  -r $ARCHIVE/${frelin[$i]}  $PWD
2433                file_restored=true
2434             fi
2435          elif [[ $archive_system = tivoli ]]
2436          then
2437             if [[ $files_for_pes = false ]]
2438             then
2439                if [[ $localhost = ibmh ]]
2440                then
2441                   ssh  $usern@hdata.hlrn.de  "cp  $PERM/${frelin[$i]}  $PWD"
2442                else
2443                   ssh  $usern@bdata.hlrn.de  "cp  $PERM/${frelin[$i]}  $PWD"
2444                fi
2445             else
2446                (( inode = 0 ))
2447                while (( inode < nodes ))
2448                do
2449                   if [[ $localhost = ibmh ]]
2450                   then
2451                      ssh  $usern@hdata.hlrn.de  "cd $PWD; tar  xf  $PERM/${frelin[$i]}/${frelin[$i]}.node_$inode.tar"
2452                   else
2453                      ssh  $usern@bdata.hlrn.de  "cd $PWD; tar  xf  $PERM/${frelin[$i]}/${frelin[$i]}.node_$inode.tar"
2454                   fi
2455                   (( inode = inode + 1 ))
2456                done
2457             fi
2458             file_restored=true
2459          elif [[ $archive_system = ut ]]
2460          then
2461             if [[ $files_for_pes = false ]]
2462             then
2463                cp  $UT/${frelin[$i]}  .
2464             else
2465                (( inode = 0 ))
2466                while (( inode < nodes ))
2467                do
2468                   tar  xf  $UT/${frelin[$i]}/${frelin[$i]}.node_$inode.tar
2469                   (( inode = inode + 1 ))
2470                done
2471             fi
2472             file_restored=true
2473          else
2474             printf "\n  +++ archive_system=\"$archive_system\"   restore impossible!"
2475             locat=rearchive
2476             exit
2477          fi
2478
2479          if [[ $file_restored = true ]]
2480          then
2481
2482                # DATEI AUCH AUF TEMPORAERES DATENVERZEICHNIS LEGEN, DAMIT
2483                # SIE BEI WEITEREN ZUGRIFFEN NOCH VORHANDEN IST
2484             [[ ! -d $tmp_data_catalog ]]  &&  mkdir -p  $tmp_data_catalog; chmod  g+rx  $tmp_data_catalog
2485             if [[ $files_for_pes = false ]]
2486             then
2487                ln  -f  ${frelin[$i]}  $tmp_data_catalog/${frelin[$i]}
2488             else
2489                mkdir  $tmp_data_catalog/${frelin[$i]}
2490                ln  -f  ${frelin[$i]}/*  $tmp_data_catalog/${frelin[$i]}
2491             fi
2492             got_tmp[$i]=true
2493
2494                # DATEI UNTER LOKALEM NAMEN ZUR VERFUEGUNG STELLEN
2495             mv  ${frelin[$i]}  ${localin[$i]}
2496
2497          fi
2498       fi
2499
2500
2501          # DATEI LIEGT IM VOM BENUTZER ANGEGEBENEN VERZEICHNIS
2502       if [[ "${actionin[$i]}" = ""  ||  "${actionin[$i]}" = "di"  ||  "${actionin[$i]}" = "npe" ]]
2503       then
2504
2505          if [[ "${actionin[$i]}" = "npe"  &&  -n $numprocs ]]
2506          then
2507
2508                # DATEI WIRD FUER DIE PROZESSOREN EINES PARALLERECHNERS BEREITGESTELLT
2509             printf "\n      file will be provided for $numprocs processors"
2510             mkdir  ${localin[$i]}
2511             ival=$numprocs
2512             (( ii = 0 ))
2513             while (( ii <= ival-1 ))
2514             do
2515                if (( ii < 10 ))
2516                then
2517                   cp  ${absnamein[$i]}  ${localin[$i]}/_000$ii
2518                elif (( ii < 100 ))
2519                then
2520                   cp  ${absnamein[$i]}  ${localin[$i]}/_00$ii
2521                elif (( ii < 1000 ))
2522                then
2523                   cp  ${absnamein[$i]}  ${localin[$i]}/_0$ii
2524                else
2525                   cp  ${absnamein[$i]}  ${localin[$i]}/_$ii
2526                fi
2527                (( ii = ii + 1 ))
2528             done
2529
2530          else
2531
2532             if [[ $files_for_pes = true ]]
2533             then
2534
2535                   # DIE DEN PROZESSOREN EINES PARALLELRECHNERS ZUGEHOERIGEN
2536                   # DATEIEN WERDEN BEREITGESTELLT, INDEM ZUERST DER GESAMTE
2537                   # KATALOGINHALT KOPIERT UND DANN DIE EINZELNEN DATEIEN
2538                   # PER MOVE UMBENANNT WERDEN
2539                printf "\n      providing $numprocs files for the respective processors"
2540                mkdir  ${localin[$i]}
2541                cp -r  ${absnamein[$i]}/*  ${localin[$i]}
2542
2543             else
2544                   # BEREITSTELLUNG AUF EINPROZESSORRECHNERN
2545                cp  ${absnamein[$i]}  ${localin[$i]}
2546             fi
2547          fi
2548       fi
2549
2550    done
2551    if (( i != 0 ))
2552    then
2553       printf "\n$striche\n  *** all INPUT-files provided \n"
2554    fi
2555
2556
2557       # NAMELIST-DATEI MIT WERTEN VON ENVIRONMENT-VARIABLEN ERZEUGEN (ZU
2558       # LESEN VON PALM)
2559    cat  >  ENVPAR  <<  %%END%%
2560 &envpar  run_identifier = '$fname', host = '$localhost',
2561          write_binary = '$write_binary', tasks_per_node = $tasks_per_node,
2562          maximum_cpu_time_allowed = ${cpumax}.,
2563          revision = '$global_revision' /
2564
2565%%END%%
2566
2567
2568       # EVENTUELLE INPUT-KOMMANDOS ABARBEITEN
2569    (( i = 0 ))
2570    while (( i < iic ))
2571    do
2572       (( i = i + 1 ))
2573       if (( i == 1 ))
2574       then
2575          printf "\n\n  *** execution of INPUT-commands:\n$striche"
2576       fi
2577       printf "\n  >>> ${in_command[$i]}"
2578       eval  ${in_command[$i]}
2579       if (( i == iic ))
2580       then
2581          printf "\n$striche\n"
2582       fi
2583    done
2584
2585
2586       # VERBLEIBENDE CPU-ZEIT BERECHNEN
2587    cpurest=${cpumax}.
2588
2589
2590       # PROGRAMMSTART
2591    printf "\n\n  *** execution starts in directory\n      \"`pwd`\"\n$striche\n"
2592    PATH=$PATH:$TEMPDIR
2593
2594    if [[ "$cond1" = debug  ||  "$cond2" = debug ]]
2595    then
2596       if [[ "$ENVIRONMENT" = BATCH ]]
2597       then
2598          printf "\n  +++ debug is allowed in interactive mode only"
2599          locat=debug
2600          exit
2601       fi
2602       if [[ $localhost = decalpha ]]
2603       then
2604          dxladebug  a.out
2605       elif [[ $localhost = ibmb  ||  $localhost = ibmh ]]
2606       then
2607
2608             # SETUP THE IBM MPI ENVIRONMENT
2609          export MP_SHARED_MEMORY=yes
2610          export AIXTHREADS_SCOPE=S
2611          export OMP_NUM_THREADS=$threads_per_task
2612          export AUTHSTATE=files
2613          export XLFRTEOPTS="nlwidth=132:err_recovery=no"    # RECORD-LENGTH OF NAMELIST-OUTPUT
2614
2615             # FOLLOWING OPTIONS ARE MANDATORY FOR TOTALVIEW
2616          export MP_ADAPTER_USE=shared
2617          export MP_CPU_USE=multiple
2618          export MP_TIMEOUT=1200
2619
2620          unset  MP_TASK_AFFINITY
2621
2622             # SO FAR, TOTALVIEW NEEDS HOSTFILE MECHANISM FOR EXECUTION
2623          #(( ii = 1 ))
2624          #while (( ii <= $numprocs ))
2625          #do
2626          #   echo  $localhost_realname  >>  hostfile
2627          #   (( ii = ii + 1 ))
2628          #done
2629          #export MP_HOSTFILE=hostfile
2630
2631          if [[ "$LOADLBATCH" = yes ]]
2632          then
2633             totalview   poe  a.out  $ROPTS
2634          else
2635             echo totalview   poe  -a a.out  -procs $numprocs  -rmpool 0  -nodes 1   $ROPTS
2636             export TVDSVRLAUNCHCMD=ssh
2637             totalview   poe  -a a.out  -procs $numprocs  -rmpool 0  -nodes 1   $ROPTS
2638          fi
2639       else
2640          printf "\n  +++ no debug available on \"$localhost\" "
2641          printf "\n      or not implemented in mrun so far"
2642          locat=debug
2643          exit
2644       fi
2645    else
2646       if [[ -n $numprocs ]]
2647       then
2648
2649             # RUNNING THE PROGRAM ON PARALLEL MACHINES
2650          if [[ $(echo $host | cut -c1-3) = ibm ]]
2651          then
2652                # SETUP THE IBM MPI ENVIRONMENT
2653             export MP_SHARED_MEMORY=yes
2654             export AIXTHREAD_SCOPE=S
2655             export OMP_NUM_THREADS=$threads_per_task
2656             export XLSMPOPTS="spins=0:yields=0:stack=20000000"
2657             export AUTHSTATE=files
2658             export XLFRTEOPTS="nlwidth=132:err_recovery=no"    # RECORD-LENGTH OF NAMELIST-OUTPUT
2659             #  export MP_PRINTENV=yes
2660
2661                # TUNING-VARIABLEN ZUR VERBESSERUNG DER KOMMUNIKATION
2662                # ZEIGEN ABER DERZEIT (SEP 04, FEDERATION) KAUM WIRKUNG
2663             export MP_WAIT_MODE=poll
2664             [[ $node_usage = not_shared ]]  &&  export MP_SINGLE_THREAD=yes
2665#             export MP_EAGER_LIMIT=65535
2666
2667#                # TESTWEISE FUER TURBOMPI (JAN 05)
2668#             export MPJ_MTAB=128
2669#             export MPJ_ALLTOALL=1
2670#             export MPJ_ALLTOALLV=1
2671
2672             if [[ "$LOADLBATCH" = yes ]]
2673             then
2674                printf "\n--- Control: OMP_NUM_THREADS = \"$OMP_NUM_THREADS\" \n"
2675                if [[ "$cond1" = hpmcount  ||  "$cond2" = hpmcount ]]
2676                then
2677                   /opt/optibm/HPM_2_4_1/bin/hpmcount  a.out  $ROPTS
2678                else
2679                   poe ./a.out  $ROPTS
2680                fi
2681             else
2682                if [[ $localhost = ibmb  ||  $localhost = ibmh  ||  $localhost = ibms ]]
2683                then
2684                   poe  a.out  -procs $numprocs  -nodes 1  -rmpool 0  $ROPTS
2685                elif [[ $localhost = ibmy ]]
2686                then
2687                   if [[ -f $hostfile ]]
2688                   then
2689                      cp  $hostfile  hostfile
2690                   else
2691                      (( ii = 1 ))
2692                      while (( ii <= $numprocs ))
2693                      do
2694                         echo  $localhost_realname  >>  hostfile
2695                         (( ii = ii + 1 ))
2696                      done
2697                   fi
2698                   export MP_HOSTFILE=hostfile
2699                   ./a.out  -procs $tasks_per_node  $ROPTS
2700                else
2701                   if [[ "$host_file" = "" ]]
2702                   then
2703                      printf "\n  +++ no hostfile given in configuration file"
2704                      locat=config_file
2705                      exit
2706                   else
2707                      eval host_file=$host_file
2708                   fi
2709                   export MP_HOSTFILE=$host_file
2710                   poe  a.out  -procs $numprocs  -tasks_per_node $numprocs  $ROPTS
2711                fi
2712             fi
2713          elif [[ $host = nech  ||  $host = neck ]]
2714          then
2715             (( ii = nodes ))
2716             if [[ $ii = 1 ]]
2717             then
2718                export F_ERRCNT=0        # acceptable number of errors before program is stopped
2719                export MPIPROGINF=YES
2720                #  export F_TRACE=YES|FMT1|FMT2  # output of ftrace informations to job protocol
2721                echo "*** execution on single node with mpirun"
2722                mpirun  -np $numprocs  ./a.out  $ROPTS
2723             else
2724                (( i = 0 ))
2725                while (( i < ii ))
2726                do
2727                   echo "-h $i  -p $tasks_per_node  -e ./mpi_exec_shell"  >>  multinode_config
2728                   (( i = i + 1 ))
2729                done
2730
2731                echo "#!/bin/sh"                         >   mpi_exec_shell
2732                echo " "                                 >>  mpi_exec_shell
2733                echo "set -u"                            >>  mpi_exec_shell
2734                echo "F_ERRCNT=0"                        >>  mpi_exec_shell
2735                echo "MPIPROGINV=YES"                    >>  mpi_exec_shell
2736                echo "OMP_NUM_THREADS=$threads_per_task" >>  mpi_exec_shell
2737                echo "cpurest=$cpurest"                  >>  mpi_exec_shell
2738                echo "fname=$fname"                      >>  mpi_exec_shell
2739                echo "localhost=$localhost"              >>  mpi_exec_shell
2740                echo "return_addres=$return_addres"      >>  mpi_exec_shell
2741                echo "return_username=$return_username"  >>  mpi_exec_shell
2742                echo "tasks_per_node=$tasks_per_node"    >>  mpi_exec_shell
2743                echo "write_binary=$write_binary"        >>  mpi_exec_shell
2744                echo "use_seperate_pe_for_dvrp_output=$use_seperate_pe_for_dvrp_output"  >>  mpi_exec_shell
2745                echo "  "                                >>  mpi_exec_shell
2746                echo "export F_ERRCNT"                   >>  mpi_exec_shell
2747                echo "export MPIPROGINV"                 >>  mpi_exec_shell
2748                echo "export OMP_NUM_THREADS"            >>  mpi_exec_shell
2749                echo "export cpurest"                    >>  mpi_exec_shell
2750                echo "export fname"                      >>  mpi_exec_shell
2751                echo "export localhost"                  >>  mpi_exec_shell
2752                echo "export return_addres"              >>  mpi_exec_shell
2753                echo "export return_username"            >>  mpi_exec_shell
2754                echo "export tasks_per_node"             >>  mpi_exec_shell
2755                echo "export write_binary"               >>  mpi_exec_shell
2756                echo "export use_seperate_pe_for_dvrp_output"  >>  mpi_exec_shell
2757                echo " "                                 >>  mpi_exec_shell
2758                echo "exec  ./a.out"                     >>  mpi_exec_shell
2759
2760                chmod u+x  mpi_exec_shell
2761                export MPIPROGINF=YES
2762                mpirun  -f multinode_config  &
2763                wait
2764
2765             fi
2766          elif [[ $(echo $host | cut -c1-2) = lc  &&  $host != lctit ]]
2767          then
2768
2769                # COPY HOSTFILE FROM SOURCE DIRECTORY OR CREATE IT, IF IT
2770                # DOES NOT EXIST
2771             if [[ $host != lcsgih  &&  $host != lcsgib ]]
2772             then
2773                if [[ -f $hostfile ]]
2774                then
2775                   cp  $hostfile  hostfile
2776                else
2777                   (( ii = 1 ))
2778                   while (( ii <= $numprocs / $threads_per_task ))
2779                   do
2780                      echo  $localhost_realname  >>  hostfile
2781                      (( ii = ii + 1 ))
2782                   done
2783                fi
2784                eval zeile=\"`head -n $ii  hostfile`\"
2785                printf "\n  *** running on: $zeile"
2786             fi
2787
2788             (( ii = $numprocs / $threads_per_task ))
2789             export OMP_NUM_THREADS=$threads_per_task
2790             echo "OMP_NUM_THREADS=$OMP_NUM_THREADS"
2791             if [[ $threads_per_task != 1 ]]
2792             then
2793                printf "\n      threads per task: $threads_per_task"
2794             fi
2795             if [[ $run_coupled_model = false ]]
2796             then
2797                printf "\n\n"
2798                if [[ $host = lcsgih  ||  $host = lcsgib ]]
2799                then
2800#                   mpirun -machinefile $PBS_NODEFILE -np $ii  a.out  $ROPTS
2801                   ulimit -s 30000
2802                   ulimit -a
2803#                   mpirun_rsh -hostfile $PBS_NODEFILE -np $ii  OMP_NUM_THREADS=$OMP_NUM_THREADS  palm  $ROPTS
2804                   export MV2_NUM_PORTS=2
2805#                   export MV2_CPU_MAPPING=0:1:2:3
2806                   mpiexec    ./palm  $ROPTS
2807                elif [[ $host = lcxt4 ]]
2808                then
2809                   aprun  -n $ii  -N $tasks_per_node  a.out  $ROPTS
2810                else
2811                   echo "no_coupling"  >  runfile_atmos
2812                   mpiexec  -machinefile hostfile  -n $ii  a.out < runfile_atmos  $ROPTS
2813                fi
2814             else
2815                ((  iii = ii / 2 ))
2816                echo "atmosphere_to_ocean"  >  runfile_atmos
2817                echo "ocean_to_atmosphere"  >  runfile_ocean
2818
2819                printf "\n      coupled run ($iii atmosphere, $iii ocean)"
2820                printf "\n\n"
2821
2822                if [[ $host == lcxt4 ]]
2823                then
2824                   aprun  -n $iii  -N $tasks_per_node  a.out < runfile_atmos  $ROPTS  &
2825                   aprun  -n $iii  -N $tasks_per_node  a.out < runfile_ocean  $ROPTS  &
2826                else
2827
2828                      # WORKAROUND BECAUSE mpiexec WITH -env option IS NOT AVAILABLE ON SOME SYSTEMS
2829                   mpiexec  -machinefile hostfile  -n $iii  a.out  $ROPTS  <  runfile_atmos &
2830                   mpiexec  -machinefile hostfile  -n $iii  a.out  $ROPTS  <  runfile_ocean &
2831#                   mpiexec  -machinefile hostfile  -n $iii  -env coupling_mode atmosphere_to_ocean  a.out  $ROPTS  &
2832#                   mpiexec  -machinefile hostfile  -n $iii  -env coupling_mode ocean_to_atmosphere  a.out  $ROPTS  &
2833                fi
2834                wait
2835             fi
2836
2837#             if [[ $scirocco = true ]]
2838#             then
2839#                mpiexec  -machinefile hostfile  -n $ii  a.out  $ROPTS
2840#             else
2841#                mpirun  -machinefile hostfile  -np $ii  a.out  $ROPTS
2842#             fi
2843
2844          elif [[ $host = decalpha ]]
2845          then
2846             dmpirun  -np $numprocs  a.out  $ROPTS
2847          elif [[ $host = lctit ]]
2848          then
2849             export runfile=runfile.$kennung
2850
2851             echo "cd $PWD"                                  >   $runfile
2852             echo "export OMP_NUM_THREADS=$OMP_NUM_THREADS"  >>  $runfile
2853             echo "export cpurest=$cpurest"                  >>  $runfile
2854             echo "export fname=$fname"                      >>  $runfile
2855             echo "export localhost=$localhost"              >>  $runfile
2856             echo "export return_addres=$return_addres"      >>  $runfile
2857             echo "export return_username=$return_username"  >>  $runfile
2858             echo "export tasks_per_node=$tasks_per_node"    >>  $runfile
2859             echo "export write_binary=$write_binary"        >>  $runfile
2860             echo "export use_seperate_pe_for_dvrp_output=$use_seperate_pe_for_dvrp_output"  >>  $runfile
2861             echo "./a.out"                                  >>  $runfile
2862             chmod  u+x  $runfile
2863
2864             if [[ "$QUEUE" = interactive ]]
2865             then
2866                mpirun  -np $numprocs  a.out  $ROPTS
2867             else
2868                 (( mem_tsubame = $memory / 1024.0 ))
2869                 echo "Memory for Tsubame for each process in GB:", $mem_tsubame
2870#                n1ge  -fore  -g 1S060156  -mpi $numprocs  -mem 4  -N palm  -q $queue  a.out  $ROPTS
2871               /n1ge/TITECH_GRID/tools/bin/n1ge -fore -g $group_number -mpi ${numprocs}:$tasks_per_node -mem $mem_tsubame -N palm -rt $minuten -q $queue  a.out  $ROPTS
2872             fi
2873
2874             rm  $runfile
2875          else
2876             mpprun  -n $numprocs  a.out  $ROPTS
2877          fi
2878          [[ $? != 0 ]]  &&  execution_error=true
2879
2880
2881             # PERFORMANCE-AUSWERTUNG MIT APPRENTICE
2882          if [[ "$cond1" = apprentice  ||  "$cond2" = apprentice ]]
2883          then
2884             apprentice
2885          fi
2886       else
2887          a.out  $ROPTS
2888       fi
2889    fi
2890    if [[ $? != 0  ||  $execution_error = true ]]
2891    then
2892
2893          # ABBRUCH BEI LAUFZEITFEHLER
2894#       [[ ! ( "$cond1" = debug  ||  "$cond2" = debug ) ]]  &&  cat  aout_output*
2895       printf "\n  +++ runtime error occured"
2896       locat=execution
2897       exit
2898    else
2899#       [[ ! ( "$cond1" = debug  ||  "$cond2" = debug ) ]]  &&  cat  aout_output*
2900       printf "\n$striche\n  *** execution finished \n"
2901    fi
2902
2903
2904
2905       # EVENTUELLE OUTPUT-KOMMANDOS ABARBEITEN
2906    (( i = 0 ))
2907    while (( i < ioc ))
2908    do
2909       (( i = i + 1 ))
2910       if (( i == 1 ))
2911       then
2912          printf "\n\n  *** execution of OUTPUT-commands:\n$striche"
2913       fi
2914       printf "\n  >>> ${out_command[$i]}"
2915       eval  ${out_command[$i]}
2916       if (( i == ioc ))
2917       then
2918          printf "\n$striche\n"
2919       fi
2920    done
2921
2922
2923       # EVTL. INHALT DES AKTUELLEN VERZEICHNISSES AUSGEBEN
2924    if [[ $do_trace = true ]]
2925    then
2926       printf "\n\n"
2927       ls -al
2928    fi
2929
2930
2931
2932       # OUTPUT-DATEIEN AN IHRE ZIELORTE KOPIEREN
2933    (( i = 0 ))
2934    while (( i < iout ))
2935    do
2936       (( i = i + 1 ))
2937       if (( i == 1 ))
2938       then
2939          printf "\n\n  *** saving OUTPUT-files:\n$striche"
2940       fi
2941
2942          # PRUEFEN, OB EINZELDATEI ODER DATEI PRO PROZESSOR
2943       files_for_pes=false; filetyp=file
2944       if [[ "${actionout[$i]}" = pe  &&  -n $numprocs ]]
2945       then
2946          files_for_pes=true; filetyp=directory
2947          actionout[$i]=""
2948       elif [[ "${actionout[$i]}" = pe  &&  ! -n $numprocs ]]
2949       then
2950          actionout[$i]=""
2951       elif [[ "${actionout[$i]}" = arpe  &&  -n $numprocs ]]
2952       then
2953          files_for_pes=true; filetyp=directory
2954          actionout[$i]="ar"
2955       elif [[ "${actionout[$i]}" = arpe  &&  ! -n $numprocs ]]
2956       then
2957          actionout[$i]="ar"
2958       elif [[ "${actionout[$i]}" = flpe  &&  -n $numprocs ]]
2959       then
2960          files_for_pes=true; filetyp=directory
2961          actionout[$i]="fl"
2962       elif [[ "${actionout[$i]}" = flpe  &&  ! -n $numprocs ]]
2963       then
2964          actionout[$i]="fl"
2965       elif [[ "${actionout[$i]}" = trpe  &&  -n $numprocs ]]
2966       then
2967          files_for_pes=true; filetyp=directory
2968          actionout[$i]="tr"
2969       elif [[ "${actionout[$i]}" = trpe  &&  ! -n $numprocs ]]
2970       then
2971          actionout[$i]="tr"
2972       fi
2973
2974       if [[ ! -f ${localout[$i]}  &&  $files_for_pes = false ]]
2975       then
2976          printf "\n  +++ temporary OUTPUT-file  ${localout[$i]}  does not exist\n"
2977       elif [[ ! -f ${localout[$i]}/_0000  &&  $files_for_pes = true ]]
2978       then
2979          printf "\n  +++ temporary OUTPUT-file  ${localout[$i]}/....  does not exist\n"
2980       else
2981
2982
2983             # KOPIEREN PER FTP/SCP (IMMER IM BINAERMODUS, -M: FALLS ZIELKATALOG
2984             # NICHT VORHANDEN, WIRD VERSUCHT, IHN ANZULEGEN), ABER NUR BEI
2985             # REMOTE-RECHNUNGEN
2986          if [[ "${actionout[$i]}" = tr ]]
2987          then
2988             if [[ $localhost != $fromhost ]]
2989             then
2990                if [[ $files_for_pes = false ]]
2991                then
2992                   cps=""
2993                   cst=""
2994                else
2995                   cps=-c
2996                   cst="/"
2997                fi
2998                if [[ $localhost = ibmh  ||  $localhost = ibmb  ||  $localhost = nech ]]
2999                then
3000
3001                      # TRANSFER IN EIGENSTAENDIGEM JOB
3002                      # ZUERST KOPIE DER DATEI INS TEMPORAERE DATENVERZEICHNIS
3003                   [[ ! -d $tmp_data_catalog/TRANSFER ]]  &&  mkdir -p  $tmp_data_catalog/TRANSFER
3004                   file_to_transfer=${fname}_${localout[$i]}_to_transfer_$kennung
3005                   if [[ $files_for_pes = false ]]
3006                   then
3007                      ln -f  ${localout[$i]}  $tmp_data_catalog/TRANSFER/$file_to_transfer
3008                   else
3009                      mkdir  $tmp_data_catalog/TRANSFER/$file_to_transfer
3010                      ln  ${localout[$i]}/*  $tmp_data_catalog/TRANSFER/$file_to_transfer
3011                   fi
3012
3013                   echo "set -x"                                    >    transfer_${localout[$i]}
3014                   echo "cd  $tmp_data_catalog/TRANSFER"            >>   transfer_${localout[$i]}
3015
3016                   printf "\n  >>> OUTPUT: ${localout[$i]}$cst  by SCP in seperate job to"
3017                   printf "\n              ${pathout[$i]}/${localhost}_${fname}${endout[$i]}$cst"
3018                   printf "\n              or higher cycle\n"
3019                   echo "batch_scp $cps -b -m -u $return_username $return_addres  $file_to_transfer \"${pathout[$i]}\" ${localhost}_${fname}${endout[$i]}  ${extout[$i]}"  >>  transfer_${localout[$i]}
3020
3021                   echo "[[ \$? = 0 ]]  &&  rm  $file_to_transfer"  >>  transfer_${localout[$i]}
3022
3023                   if [[ $localhost = nech ]]
3024                   then
3025                      subjob  -d  -c /pf/b/$usern/job_queue  -v  -q pp  -X 0  -m 1000  -t 900  transfer_${localout[$i]}
3026                   else
3027                      if [[ "$LOGNAME" = b323013 ]]
3028                      then
3029                         subjob  -v  -q c1  -X 0  -m 1000  -t 900  -c $job_catalog  transfer_${localout[$i]}
3030                      else
3031                         subjob  -d  -v  -q c1  -X 0  -m 1000  -t 900  -c $job_catalog  transfer_${localout[$i]}
3032                      fi
3033                   fi
3034
3035                else
3036
3037                      # TRANSFER INNERHALB DIESES JOBS
3038                   transfer_failed=false
3039                   printf "\n  >>> OUTPUT: ${localout[$i]}$cst  by SCP to"
3040                   printf "\n              ${pathout[$i]}/${localhost}_${fname}${endout[$i]}$cst\n"
3041                   batch_scp $cps -b -m -u $return_username $return_addres  ${localout[$i]} "${pathout[$i]}" ${localhost}_${fname}${endout[$i]}  ${extout[$i]}
3042                   [[ $? != 0 ]]  &&  transfer_failed=true
3043
3044                      # BEI FEHLGESCHLAGENEM TRANSFER SICHERUNGSKOPIE AUF
3045                      # LOKALER MASCHINE ANLEGEN
3046                   if [[ $transfer_failed = true ]]
3047                   then
3048                      printf "  +++ transfer failed. Trying to save a copy on the local host under:\n"
3049                      printf "      ${pathout[$i]}/${localhost}_${fname}${endout[$i]}_$kennung\n"
3050
3051                         # ERSTMAL PRUEFEN, OB VERZEICHNIS EXISTIERT. GEGEBENENFALLS
3052                         # ANLEGEN.
3053                      eval  local_catalog=${pathout[$i]}
3054                      if [[ ! -d $local_catalog ]]
3055                      then
3056                         printf "  *** local directory does not exist. Trying to create:\n"
3057                         printf "      $local_catalog \n"
3058                         mkdir -p  $local_catalog
3059                      fi
3060                      eval  cp  ${localout[$i]}  ${pathout[$i]}/${localhost}_${fname}${endout[$i]}_$kennung
3061                      transfer_problems=true
3062                   fi
3063                fi
3064             else
3065
3066                   # WERTZUWEISUNG, SO DASS WEITER UNTEN NUR KOPIERT WIRD
3067                actionout[$i]=""
3068             fi
3069          fi
3070
3071
3072             # APPEND PER FTP/SCP (IMMER IM BINAERMODUS, -M: FALLS ZIELKATALOG
3073             # NICHT VORHANDEN, WIRD VERSUCHT, IHN ANZULEGEN), ABER NUR BEI
3074             # REMOTE-RECHNUNGEN
3075          if [[ "${actionout[$i]}" = tra ]]
3076          then
3077             if [[ $localhost != $fromhost ]]
3078             then
3079                if [[ $localhost = ibmh  ||  $localhost = ibmb  ||  $localhost = nech ]]
3080                then
3081
3082                      # TRANSFER IN EIGENSTAENDIGEM JOB
3083                      # ZUERST KOPIE DER DATEI INS TEMPORAERE DATENVERZEICHNIS
3084                   [[ ! -d $tmp_data_catalog/TRANSFER ]]  &&  mkdir -p  $tmp_data_catalog/TRANSFER
3085                   file_to_transfer=${fname}_${localout[$i]}_to_transfer_$kennung
3086                   ln -f  ${localout[$i]}  $tmp_data_catalog/TRANSFER/$file_to_transfer
3087
3088                   echo "set -x"                                    >    transfer_${localout[$i]}
3089                   echo "cd  $tmp_data_catalog/TRANSFER"            >>   transfer_${localout[$i]}
3090
3091                   printf "\n  >>> OUTPUT: ${localout[$i]}  append by SCP in seperate job to"
3092                   printf "\n              ${pathout[$i]}/${localhost}_${fname}${endout[$i]}"
3093                   printf "\n              or higher cycle\n"
3094                   echo "batch_scp -A -b -m -u $return_username $return_addres  $file_to_transfer \"${pathout[$i]}\" ${localhost}_${fname}${endout[$i]}  ${extout[$i]}"  >>  transfer_${localout[$i]}
3095
3096                   echo "[[ \$? = 0 ]]  &&  rm  $file_to_transfer"  >>  transfer_${localout[$i]}
3097
3098                   if [[ $localhost = nech ]]
3099                   then
3100                      subjob  -d  -c /pf/b/$usern/job_queue  -v  -q pp  -X 0  -m 1000  -t 900  transfer_${localout[$i]}
3101                   else
3102                      if [[ $LOGNAME = b323013 ]]
3103                      then
3104                         subjob  -v  -q c1  -X 0  -m 1000  -t 900  -c $job_catalog  transfer_${localout[$i]}
3105                      else
3106                         subjob  -d  -v  -q c1  -X 0  -m 1000  -t 900  -c $job_catalog  transfer_${localout[$i]}
3107                      fi
3108                   fi
3109
3110                else
3111
3112                      # TRANSFER INNERHALB DIESES JOBS
3113                   transfer_failed=false
3114                   printf "\n  >>> OUTPUT: ${localout[$i]}  append by SCP to"
3115                   printf "\n              ${pathout[$i]}/${localhost}_${fname}${endout[$i]}\n"
3116                   batch_scp -A -b -m -u $return_username  $return_addres ${localout[$i]} "${pathout[$i]}" ${localhost}_${fname}${endout[$i]}  ${extout[$i]}
3117                   [[ $? != 0 ]]  &&  transfer_failed=true
3118
3119                      # BEI FEHLGESCHLAGENEM TRANSFER SICHERUNGSKOPIE AUF
3120                      # LOKALER MASCHINE ANLEGEN
3121                   if [[ $transfer_failed = true ]]
3122                   then
3123                      printf "  +++ transfer failed. Trying to save a copy on the local host under:\n"
3124                      printf "      ${pathout[$i]}/${localhost}_${fname}${endout[$i]}_$kennung\n"
3125
3126                         # ERSTMAL PRUEFEN, OB VERZEICHNIS EXISTIERT. GEGEBENENFALLS
3127                         # ANLEGEN
3128                      eval  local_catalog=${pathout[$i]}
3129                      if [[ ! -d $local_catalog ]]
3130                      then
3131                         printf "  *** local directory does not exist. Trying to create:\n"
3132                         printf "      $local_catalog \n"
3133                         mkdir -p  $local_catalog
3134                      fi
3135
3136                      eval  cp  ${localout[$i]}  ${pathout[$i]}/${localhost}_${fname}${endout[$i]}_$kennung
3137                      transfer_problems=true
3138                   fi
3139                fi
3140             else
3141
3142                   # WERTZUWEISUNG, SO DASS WEITER UNTEN NUR APPEND AUF
3143                   # LOKALER MASCHINE DURCHGEFUEHRT WIRD
3144                actionout[$i]=a
3145             fi
3146          fi
3147
3148
3149             # OUTPUT-DATEI FUER EINEN FORTSETZUNGSLAUF. DATEI WIRD PER
3150             # LINK AUF DEN TEMPORAEREN DATENKATALOG GELEGT. OPTION -f WIRD
3151             # VERWENDET, FALLS DORT NOCH EINE DATEI GLEICHEN NAMENS VORHANDEN
3152             # SEIN SOLLTE. ANSCHLIESSEND WIRD SEINE ARCHIVIERUNG ANGESTOSSEN
3153          if [[ "${actionout[$i]}" = fl ]]
3154          then
3155             [[ ! -d $tmp_data_catalog ]]  &&  mkdir -p  $tmp_data_catalog
3156             chmod  g+rx  $tmp_data_catalog
3157             if [[ $files_for_pes = false ]]
3158             then
3159                printf "\n  >>> OUTPUT: ${localout[$i]}  to"
3160                printf "\n              $tmp_data_catalog/${frelout[$i]} (temporary data catalog)\n"
3161                ln -f  ${localout[$i]}  $tmp_data_catalog/${frelout[$i]}
3162             else
3163                printf "\n  >>> OUTPUT: ${localout[$i]}/....  to"
3164                printf "\n              $tmp_data_catalog/${frelout[$i]} (temporary data catalog)\n"
3165                mkdir  $tmp_data_catalog/${frelout[$i]}
3166                cd ${localout[$i]}
3167                for file in $(ls *)
3168                do
3169                   ln -f $file $tmp_data_catalog/${frelout[$i]}
3170                done
3171                cd $TEMPDIR
3172             fi
3173
3174
3175                # ARCHIVIERUNGSJOB WIRD ERZEUGT UND ABGESCHICKT
3176             if [[ $store_on_archive_system = true ]]
3177             then
3178
3179                if [[ $archive_system = asterix ]]
3180                then
3181                   echo "cd  $tmp_data_catalog"                      >> archive_${frelout[$i]}
3182                   if [[ $files_for_pes = false ]]
3183                   then
3184                      echo "stageout  ${frelout[$i]}  > STAGE_OUTPUT${i}_$kennung" >> archive_${frelout[$i]}
3185                   else
3186                      echo "stageout -t  ${frelout[$i]}  > STAGE_OUTPUT${i}_$kennung" >> archive_${frelout[$i]}
3187                   fi
3188                   echo "cat  STAGE_OUTPUT${i}_$kennung"               >> archive_${frelout[$i]}
3189                   echo "if [[ \$(grep -c \"st.msg:150\"  STAGE_OUTPUT${i}_$kennung) != 0 ]]" >> archive_${frelout[$i]}
3190                   echo "then"                                       >> archive_${frelout[$i]}
3191                   echo "   do_stageout=false"                       >> archive_${frelout[$i]}
3192                   echo "else"                                       >> archive_${frelout[$i]}
3193                   echo "   echo \"  +++ $filetyp ${frelout[$i]}  could not be stored on archive-system\" " >> archive_${frelout[$i]}
3194                   echo "   cat  /dev/null  >  ~/job_queue/ARCHIVE_ERROR_$fname" >> archive_${frelout[$i]}
3195                   echo "   cat  STAGE_OUTPUT${i}_$kennung  >  ~/job_queue/archive_${frelout[$i]}_error" >> archive_${frelout[$i]}
3196                   echo "   echo \"  *** $filetyp ${frelout[$i]} will be copied to \$WORK as backup\" " >> archive_${frelout[$i]}
3197                   if [[ $files_for_pes = false ]]
3198                   then
3199                      echo "   cp   ${frelout[$i]}  \$WORK"                    >> archive_${frelout[$i]}
3200                   else
3201                      echo "   cp -r  ${frelout[$i]}  \$WORK/${frelout[$i]}"   >> archive_${frelout[$i]}
3202                   fi
3203                   echo "   echo \"  *** $filetyp ${frelout[$i]} saved\" " >> archive_${frelout[$i]}
3204                   echo "fi"                                         >> archive_${frelout[$i]}
3205                   echo "rm  STAGE_OUTPUT${i}_$kennung"              >> archive_${frelout[$i]}
3206                elif [[ $archive_system = DMF ]]
3207                then
3208                   echo "cd  $tmp_data_catalog"                      >> archive_${frelout[$i]}
3209                   if [[ $files_for_pes = false ]]
3210                   then
3211                      printf "\n  +++ archiving of single files impossible with $archive_system !\n"
3212                      locat=DMF
3213                      exit
3214                   else
3215                         # FUER RECHNER IN JUELICH. DORT KOENNTEN AUCH
3216                         # EINZELNE DATEIEN GESICHERT WERDEN (SPAETER KORR.)
3217                      echo "rm -rf  \$ARCHIVE/${frelout[$i]}"     >> archive_${frelout[$i]}
3218                      echo "cp -r  ${frelout[$i]}  \$ARCHIVE"     >> archive_${frelout[$i]}
3219                   fi
3220                elif [[ $archive_system = tivoli ]]
3221                then
3222                   echo "cd  $tmp_data_catalog"                       >> archive_${frelout[$i]}
3223                   if [[ $files_for_pes = false ]]
3224                   then
3225                         # EVENTUELL NOCH VORHANDENE DATEI IM ARCHIV LOSCHEN
3226                      echo "set -x"                                   >> archive_${frelout[$i]}
3227                      echo "rm  -rf  \$PERM/${frelout[$i]}"           >> archive_${frelout[$i]}
3228                      echo "cp  ${frelout[$i]} \$PERM/${frelout[$i]}" >> archive_${frelout[$i]}
3229                   else
3230
3231                      echo "set -x"                                   >> archive_${frelout[$i]}
3232                      echo "rm  -rf  \$PERM/${frelout[$i]}/*"         >> archive_${frelout[$i]}
3233                      echo "[[ ! -d \$PERM/${frelout[$i]} ]] && mkdir $PERM/${frelout[$i]}" >> archive_${frelout[$i]}
3234                      cd  $tmp_data_catalog
3235                      all_files=`ls -1 ${frelout[$i]}/*`
3236                      cd -  > /dev/null
3237                      (( inode = 0 ))
3238                      (( tp1   = tasks_per_node + 1 ))
3239                      while (( inode < nodes ))
3240                      do
3241#                         echo "*** all_files = \"$all_files\" "
3242                         files=`echo $all_files | cut -d" " -f1-$tasks_per_node`
3243                         all_files=`echo $all_files | cut -d" " -f$tp1-`
3244#                         echo "*** tasks_per_node = \"$tasks_per_node\" "
3245#                         echo "*** files = \"$files\" "
3246#                         echo "*** all_files = \"$all_files\" "
3247                         echo "tar  cvf \$PERM/${frelout[$i]}/${frelout[$i]}.node_$inode.tar $files"   >> archive_${frelout[$i]}
3248                         echo "dsmc incremental  \$PERM/${frelout[$i]}/${frelout[$i]}.node_$inode.tar" >> archive_${frelout[$i]}
3249                         echo "dsmmigrate \$PERM/${frelout[$i]}/${frelout[$i]}.node_$inode.tar"        >> archive_${frelout[$i]}
3250                         (( inode = inode + 1 ))
3251                      done
3252#                      echo "rm  -rf  \$PERM/${frelout[$i]}.tar"       >> archive_${frelout[$i]}
3253#                      echo "tar  cvf \$PERM/${frelout[$i]}.tar ${frelout[$i]}" >> archive_${frelout[$i]}
3254                   fi
3255                elif [[ $archive_system = ut ]]
3256                then
3257                   echo "cd  $tmp_data_catalog"                       >> archive_${frelout[$i]}
3258                   if [[ $files_for_pes = false ]]
3259                   then
3260                         # EVENTUELL NOCH VORHANDENE DATEI IM ARCHIV LOSCHEN
3261                      echo "set -x"                                 >> archive_${frelout[$i]}
3262                      echo "rm  -rf  \$UT/${frelout[$i]}"           >> archive_${frelout[$i]}
3263                      echo "cp  ${frelout[$i]} \$UT/${frelout[$i]}" >> archive_${frelout[$i]}
3264                   else
3265
3266                      echo "set -x"                                 >> archive_${frelout[$i]}
3267                      echo "rm  -rf  \$UT/${frelout[$i]}/*"         >> archive_${frelout[$i]}
3268                      echo "[[ ! -d \$UT/${frelout[$i]} ]] && mkdir $UT/${frelout[$i]}" >> archive_${frelout[$i]}
3269                      cd  $tmp_data_catalog
3270                      all_files=`ls -1 ${frelout[$i]}/*`
3271                      cd -  > /dev/null
3272                      (( inode = 0 ))
3273                      (( tp1   = tasks_per_node + 1 ))
3274                      while (( inode < nodes ))
3275                      do
3276                         files=`echo $all_files | cut -d" " -f1-$tasks_per_node`
3277                         all_files=`echo $all_files | cut -d" " -f$tp1-`
3278                         echo "tar  cvf \$UT/${frelout[$i]}/${frelout[$i]}.node_$inode.tar $files"   >> archive_${frelout[$i]}
3279                         (( inode = inode + 1 ))
3280                      done
3281                   fi
3282                elif [[ $archive_system = none ]]
3283                then
3284                   printf "              +++ archiving on $localhost not available!\n"
3285                fi
3286
3287                if [[ $archive_system != none ]]
3288                then
3289                   if [[ $localhost = ibmh  ||  $localhost = ibmb ]]
3290                   then
3291#                      subjob  -d  -v  -q cdata  -X 0  -m 1000  -t 43200  -c $job_catalog  archive_${frelout[$i]}
3292                      subjob   -v  -q cdata  -X 0  -m 1000  -t 43200  -c $job_catalog  archive_${frelout[$i]}
3293                   elif [[ $localhost = nech ]]
3294                   then
3295                      subjob  -d  -c /pf/b/$usern/job_queue  -v  -q pp  -X 0  -m 1000  -t 7200  archive_${frelout[$i]}
3296                   fi
3297                   printf "              Archiving of $tmp_data_catalog/${frelout[$i]} initiated (batch job submitted)\n"
3298                fi
3299             else
3300                printf "              +++ caution: option -A is switched on. No archiving on $archive_system!\n"
3301             fi
3302
3303
3304                # LEERDATEI IM BENUTZERVERZEICHNIS ANLEGEN, DAMIT BEKANNT IST,
3305                # WIE DIE HOECHSTE ZYKLUSNUMMER AUF DEM ARCHIV-SYSTEM LAUTET
3306             if [[ $files_for_pes = false ]]
3307             then
3308                cat  /dev/null  >  ${pathout[$i]}
3309             else
3310                mkdir -p  ${pathout[$i]}
3311             fi
3312
3313          fi
3314
3315
3316             # KOPIEREN AUF LOKALER MASCHINE ZUM ARCHIV-SYSTEM
3317             # AUSSERDEM MUSS LEERDATEI ANGELEGT WERDEN, DAMIT BEKANNT IST,
3318             # WIE DIE HOECHSTE ZYKLUSNUMMER AUF DEM ARCHIV-SYSTEM LAUTET
3319             # FALLS IRGENDEINE (VON MEHREREN) ARCHIVIERUNGEN SCHIEF GEHT,
3320             # WIRD FLAG GESETZT UND BLEIBT AUCH BEI WEITEREN ORDNUNGS-
3321             # GEMAESSEN ARCHIVIERUNGEN GESETZT
3322          if [[ "${actionout[$i]}" = ar ]]
3323          then
3324             if [[ $files_for_pes = false ]]
3325             then
3326                printf "\n  >>> OUTPUT: ${localout[$i]}  to"
3327                printf "\n              ${pathout[$i]}"
3328                printf "\n              File will be copied to archive-system ($archive_system) !\n"
3329             else
3330                printf "\n  >>> OUTPUT: ${localout[$i]}/_....  to"
3331                printf "\n              ${pathout[$i]}"
3332                printf "\n              Directory will be copied to archive-system ($archive_system) !\n"
3333             fi
3334             mv  ${localout[$i]}  ${frelout[$i]}
3335
3336             file_saved=false
3337
3338             if [[ $archive_system = asterix ]]
3339             then
3340                do_stageout=true
3341                (( stageout_anz = 0 ))
3342                while [[ $do_stageout = true ]]
3343                do
3344                   if [[ $files_for_pes = false ]]
3345                   then
3346                      stageout  ${frelout[$i]}  > STAGE_OUTPUT
3347                   else
3348                      stageout  -t  ${frelout[$i]}  > STAGE_OUTPUT
3349                   fi
3350                   cat  STAGE_OUTPUT
3351                   if [[ $(grep -c "st.msg:150"  STAGE_OUTPUT) != 0 ]]
3352                   then
3353                      file_saved=true
3354                      do_stageout=false
3355                   else
3356                      if [[ $files_for_pes = false ]]
3357                      then
3358                         printf "\n  +++ file ${frelout[$i]}  could not be saved on archive-system"
3359                      else
3360                         printf "\n  +++ directory ${frelout[$i]} could not be saved on archive-system"
3361                      fi
3362                      (( stageout_anz = stageout_anz + 1 ))
3363                      if (( stageout_anz == 10 ))
3364                      then
3365                         printf "\n  +++ stoped after 10 unsuccessful tries!"
3366                         archive_save=false
3367                         do_stageout=false
3368                      else
3369                         printf "\n  *** new try to store on archive after 15 min:"
3370                         sleep 900
3371                      fi
3372                   fi
3373                done
3374             elif [[ $archive_system = DMF ]]
3375             then
3376                if [[ $files_for_pes = false ]]
3377                then
3378                   printf "\n  +++ archiving of single files impossible on $archive_system!\n"
3379                   locat=DMF
3380                   exit
3381                else
3382                   rm -rf  $ARCHIVE/${frelout[$i]}
3383                   cp -r  ${frelout[$i]}  $ARCHIVE
3384                fi
3385                file_saved=true
3386             elif [[ $archive_system = tivoli ]]
3387             then
3388                   # ARCHIVIERUNG NUR PER BATCH-JOB MOEGLICH
3389                   # DATEI MUSS ZWISCHENZEITLICH INS TEMPORAERE DATENVERZEICHNIS
3390                   # GELEGT WERDEN
3391                [[ ! -d $tmp_data_catalog ]]  &&  mkdir -p  $tmp_data_catalog
3392                chmod  g+rx  $tmp_data_catalog
3393                if [[ $files_for_pes = false ]]
3394                then
3395                   ln -f  ${frelout[$i]}  $tmp_data_catalog/${frelout[$i]}
3396                else
3397                   mkdir  $tmp_data_catalog/${frelout[$i]}
3398                   ln -f  ${frelout[$i]}/*  $tmp_data_catalog/${frelout[$i]}
3399                fi
3400
3401                   # BATCH JOB GENERIEREN UND ABSCHICKEN; DATEI MUSS WIEDER
3402                   # AUS TEMPORAEREM DATENVERZEICHNIS ENTFERNT WERDEN
3403                echo "cd  $tmp_data_catalog"                       >  archive_${frelout[$i]}
3404                if [[ $files_for_pes = false ]]
3405                then
3406                      # EVENTUELL NOCH VORHANDENE DATEI IM ARCHIV LOSCHEN
3407                   echo "rm  -rf  \$PERM/${frelout[$i]}"           >> archive_${frelout[$i]}
3408                   echo "cp  ${frelout[$i]} \$PERM/${frelout[$i]}" >> archive_${frelout[$i]}
3409                   echo "rm  -rf  ${frelout[$i]}"                  >> archive_${frelout[$i]}
3410                else
3411                   echo "rm  -rf  \$PERM/${frelout[$i]}.tar"       >> archive_${frelout[$i]}
3412                   echo "tar  cvf \$PERM/${frelout[$i]}.tar ${frelout[$i]}" >> archive_${frelout[$i]}
3413                   echo "rm  -rf  ${frelout[$i]}"                  >> archive_${frelout[$i]}
3414                fi
3415
3416                subjob  -v  -d  -q cdata  -X 0  -m 1000  -t 43200  -c $job_catalog  archive_${frelout[$i]}
3417                printf "              Archiving of $tmp_data_catalog/${frelout[$i]} initiated (batch job submitted)\n"
3418                file_saved=true
3419
3420             elif [[ $archive_system = ut ]]
3421             then
3422                   # ARCHIVIERUNG NUR PER BATCH-JOB MOEGLICH
3423                   # DATEI MUSS ZWISCHENZEITLICH INS TEMPORAERE DATENVERZEICHNIS
3424                   # GELEGT WERDEN
3425                [[ ! -d $tmp_data_catalog ]]  &&  mkdir -p  $tmp_data_catalog
3426                chmod  g+rx  $tmp_data_catalog
3427                if [[ $files_for_pes = false ]]
3428                then
3429                   ln -f  ${frelout[$i]}  $tmp_data_catalog/${frelout[$i]}
3430                else
3431                   mkdir  $tmp_data_catalog/${frelout[$i]}
3432                   ln -f  ${frelout[$i]}/*  $tmp_data_catalog/${frelout[$i]}
3433                fi
3434
3435                   # BATCH JOB GENERIEREN UND ABSCHICKEN; DATEI MUSS WIEDER
3436                   # AUS TEMPORAEREM DATENVERZEICHNIS ENTFERNT WERDEN
3437                echo "cd  $tmp_data_catalog"                       >  archive_${frelout[$i]}
3438                if [[ $files_for_pes = false ]]
3439                then
3440                      # EVENTUELL NOCH VORHANDENE DATEI IM ARCHIV LOSCHEN
3441                   echo "rm  -rf  \$UT/${frelout[$i]}"           >> archive_${frelout[$i]}
3442                   echo "cp  ${frelout[$i]} \$UT/${frelout[$i]}" >> archive_${frelout[$i]}
3443                   echo "rm  -rf  ${frelout[$i]}"                >> archive_${frelout[$i]}
3444                else
3445                   echo "rm  -rf  \$UT/${frelout[$i]}.tar"       >> archive_${frelout[$i]}
3446                   echo "tar  cvf \$UT/${frelout[$i]}.tar ${frelout[$i]}" >> archive_${frelout[$i]}
3447                   echo "rm  -rf  ${frelout[$i]}"                >> archive_${frelout[$i]}
3448                fi
3449
3450                subjob  -v  -c /pf/b/$usern/job_queue  -d  -q pp  -X 0  -m 1000  -t 7200  archive_${frelout[$i]}
3451                printf "              Archiving of $tmp_data_catalog/${frelout[$i]} initiated (batch job submitted)\n"
3452                file_saved=true
3453
3454             else
3455                printf "\n  +++ archive_system=\"$archive_system\"  archiving impossible!"
3456                archive_save=false
3457             fi
3458             if [[ $file_saved = true ]]
3459             then
3460                if [[ $files_for_pes = false ]]
3461                then
3462                   cat  /dev/null  >  ${pathout[$i]}
3463                else
3464                   mkdir -p  ${pathout[$i]}
3465                fi
3466             fi
3467          fi
3468
3469             # APPEND AUF LOKALER MASCHINE
3470          if [[ "${actionout[$i]}" = "a" ]]
3471          then
3472             printf "\n  >>> OUTPUT: ${localout[$i]}  append to  ${pathout[$i]}\n"
3473             cat  ${localout[$i]}  >>  ${pathout[$i]}
3474          fi
3475
3476             # KOPIEREN AUF LOKALER MASCHINE
3477             # ES MUSS KOPIERT WERDEN, DA MOVE NICHT UEBER FILESYSTEM HINAUS MOEGLICH
3478          if [[ "${actionout[$i]}" = ""  &&  $files_for_pes = false ]]
3479          then
3480
3481                # KOPIEREN AUF EINPROZESSORMASCHINE
3482             if [[ "${extout[$i]}" != " "  &&  "${extout[$i]}" != "" ]]
3483             then
3484                printf "\n  >>> OUTPUT: ${localout[$i]}  to  ${pathout[$i]}.${extout[$i]}\n"
3485                if [[ $link_local_output = true ]]
3486                then
3487                    printf "      using ln -f\n"
3488                    ln -f  ${localout[$i]}  ${pathout[$i]}.${extout[$i]}
3489                fi
3490                # If "ln -f" fails of if "$link_local_output = false" do a normal "cp"
3491                if [[ ! -f "${pathout[$i]}.${extout[$i]}" ]]
3492                then
3493                    if [[ $link_local_output = true ]]
3494                    then
3495                        printf "      ln failed, using cp...\n"
3496                    fi
3497                    cp  ${localout[$i]}  ${pathout[$i]}.${extout[$i]}
3498                fi
3499             else
3500                printf "\n  >>> OUTPUT: ${localout[$i]}  to  ${pathout[$i]}\n"
3501                if [[ $link_local_output = true ]]
3502                then
3503                    printf "      using ln -f\n"
3504                    ln -f  ${localout[$i]}  ${pathout[$i]}
3505                fi
3506                # If "ln -f" fails of if "$link_local_output = false" do a normal "cp"
3507                if [[ ! -f "${pathout[$i]}" ]]
3508                then
3509                    if [[ $link_local_output = true ]]
3510                    then
3511                        printf "      ln failed, using cp...\n"
3512                    fi
3513                    cp  ${localout[$i]}  ${pathout[$i]}
3514                fi
3515             fi
3516
3517          elif [[ "${actionout[$i]}" = ""  &&  $files_for_pes = true ]]
3518          then
3519
3520                # DIE DEN PROZESSOREN EINES PARALLELRECHNERS ZUGEHOERIGEN
3521                # DATEIEN WERDEN ERST IN EINEM KATALOG GESAMMELT UND DIESER
3522                # WIRD DANN KOPIERT
3523                # PER MOVE UMBENANNT WERDEN
3524             printf "\n  >>> OUTPUT: ${localout[$i]}/_....  to  ${pathout[$i]}\n"
3525             if [[ $link_local_output = true ]]
3526             then
3527                 printf "      using ln -f\n"
3528                 mkdir  ${pathout[$i]}
3529                 cd ${localout[$i]}
3530                 for file in $(ls *)
3531                 do
3532                   ln -f $file  ${pathout[$i]}
3533                 done
3534                 cd $TEMPDIR
3535             fi
3536             # If "ln -f" fails of if "$link_local_output = false" do a normal "cp -r"
3537             if [[ ! -f "${pathout[$i]}/_0000" ]]
3538             then
3539                 if [[ $link_local_output = true ]]
3540                 then
3541                     printf "      ln failed for .../_0000, using cp...\n"
3542                 fi
3543                 cp -r  ${localout[$i]}  ${pathout[$i]}
3544             fi
3545
3546          fi
3547       fi
3548    done
3549    if (( i != 0 ))
3550    then
3551       if [[ $transfer_problems = true ]]
3552       then
3553          printf "\n$striche\n  *** OUTPUT-files saved"
3554          printf "\n  +++ WARNING: some data transfers failed! \n"
3555       else
3556          printf "\n$striche\n  *** all OUTPUT-files saved \n"
3557       fi
3558    fi
3559
3560
3561       # EVENTUELL FOLGEJOB STARTEN
3562       # DATEI CONTINUE_RUN MUSS VOM BENUTZERPROGRAMM AUS ERZEUGT WERDEN
3563    if [[ -f CONTINUE_RUN ]]
3564    then
3565
3566       if [[ $archive_save = true ]]
3567       then
3568
3569             # ZUERST IN MRUN-AUFRUF OPTIONEN FUER FORTSETZUNGSLAUF, FUER
3570             # STILLES ABARBEITEN (OHNE INTERAKTIVE RUECKFAGEN) UND FUER
3571             # BATCH-BETRIEB (NUR WICHTIG, FALLS BATCH AUF LOKALER MASCHINE
3572             # DURCHGEFUEHRT WERDEN SOLL) EINFUEGEN, FALLS NICHT BEREITS VOR-
3573             # HANDEN
3574          [[ $(echo $mc | grep -c "\-C") = 0 ]]  &&  mc="$mc -C"
3575          [[ $(echo $mc | grep -c "\-v") = 0 ]]  &&  mc="$mc -v"
3576          [[ $(echo $mc | grep -c "\-b") = 0 ]]  &&  mc="$mc -b"
3577          if [[ $(echo $mc | grep -c "#") != 0 ]]
3578          then
3579             mc=`echo $mc | sed 's/#/f/g'`
3580          fi
3581
3582
3583             # JOB STARTEN
3584          printf "\n\n  *** initiating restart-run on \"$return_addres\" using command:\n"
3585          echo "      $mc"
3586          printf "\n$striche\n"
3587          if [[ $localhost != $fromhost ]]
3588          then
3589
3590             if [[ $localhost = nech  ||  $localhost = ibmb  ||  $localhost = ibmh  ||  $localhost = ibms  ||  $localhost = lctit ]]
3591             then
3592                echo "*** ssh will be used to initiate restart-runs!"
3593                echo "    return_addres=\"$return_addres\" "
3594                echo "    return_username=\"$return_username\" "
3595                if [[ $return_addres = 172.20.25.41 ]]
3596                then
3597                      # WORKAROUND AUF SCIROCCO AM TIT
3598                   print  "PATH=\$PATH:$LOCAL_MRUN_PATH;export PALM_BIN=$LOCAL_MRUN_PATH;cd $LOCAL_PWD; $mc "  |  ssh $return_addres -l $return_username 
3599                else
3600                   ssh $return_addres -l $return_username "PATH=\$PATH:$LOCAL_MRUN_PATH;export PALM_BIN=$LOCAL_MRUN_PATH;cd $LOCAL_PWD; $mc "
3601                fi
3602             else
3603                printf "\n  +++ no restart mechanism available for host \"$localhost\" "
3604                locat=restart; exit
3605             fi
3606
3607                # WARTEN, DAMIT SICH RESTART JOB IN QUEUE EINREIHEN KANN, BEVOR
3608                # DER AKTUELLE JOB ENDET
3609             sleep 30
3610
3611          else
3612
3613                # BEI RECHNUNGEN AUF LOKALER MASCHINE KANN MRUN DIREKT AUFGE-
3614                # RUFEN WERDEN, AUSSER AUF lcfimm
3615             cd $LOCAL_PWD
3616             if [[ $localhost = lcfimm ]]
3617             then
3618                ssh $return_addres -l $return_username "PATH=\$PATH:$LOCAL_MRUN_PATH;export PALM_BIN=$LOCAL_MRUN_PATH;cd $LOCAL_PWD; $mc " 
3619             else
3620                eval  $mc                # ' MUESSEN AUSGEWERTET WERDEN
3621             fi
3622             cd -  > /dev/null
3623          fi
3624          printf "\n$striche\n  *** restart-run initiated \n"
3625
3626
3627             # EVENTUELL INPUT-DATEIEN, DIE VON TEMPORAEREM DATENVERZEICHNIS
3628             # GEHOLT WORDEN SIND, LOESCHEN
3629          (( i = 0 ))
3630          while (( i < iin ))
3631          do
3632             (( i = i + 1 ))
3633             if [[ "${got_tmp[$i]}" = true   &&  $keep_data_from_previous_run = false ]]
3634             then
3635                rm -r  $tmp_data_catalog/${frelin[$i]}
3636             fi
3637          done
3638
3639       else
3640
3641          printf "\n  +++ no restart-run possible, since errors occured"
3642          printf "\n      during the archive process"
3643       fi
3644
3645    fi
3646
3647
3648   
3649       # EVTL. EMAIL-BENACHRICHTIGUNG UEBER ABGESCHLOSSENEN LAUF
3650    if [[ "$email_notification" != "" ]]
3651    then
3652
3653       if [[ $localhost != $fromhost ]]
3654       then
3655          if [[ -f CONTINUE_RUN ]]
3656          then
3657             echo "PALM restart run necessary"        >   email_text
3658             echo "description header of actual run:" >>  email_text
3659             cat  CONTINUE_RUN                        >>  email_text
3660             echo "mrun-command to restart:"          >>  email_text
3661             echo "$mc"                               >>  email_text
3662          else
3663             echo "PALM run with base filename \"$fname\" on host \"$localhost\" finished"  >  email_text
3664          fi
3665          mail  $email_notification  <  email_text
3666          printf "\n  *** email notification sent to \"$email_notification\" "
3667       fi
3668    fi
3669
3670
3671
3672       # ALLE ARBEITEN BEENDET. TEMPORAERER KATALOG KANN GELOESCHT WERDEN
3673    cd  $HOME
3674    [[ $delete_temporary_catalog = true ]]  &&  rm -rf $TEMPDIR
3675
3676 else
3677
3678
3679       # FALLS AUF REMOTE-MASCHINE GERECHNET WERDEN SOLL, WERDEN JETZT ENTSPRE-
3680       # CHENDE AKTIONEN DURCHGEFUEHRT
3681
3682       # MRUN-BEFEHL FUER REMOTE-MASCHINE ZUSAMMENSTELLEN
3683    mrun_com="$mrun_script_name -a $afname -c $config_file -d $fname -h $host -H $fromhost -m $memory -t $cpumax -q $queue -R $return_addres -U $return_username -u $remote_username"
3684    [[ "$cpp_opts" != "" ]]       &&  mrun_com=${mrun_com}" -D \"$cpp_opts\""
3685    [[ "$global_revision" != "" ]]  &&  mrun_com=${mrun_com}" -G \"$global_revision\""
3686    [[ $group_number != none ]]   &&  mrun_com=${mrun_com}" -g $group_number"
3687    [[ $do_compile = true ]]      &&  mrun_com=${mrun_com}" -s \"$source_list\""
3688    [[ "$input_list" != "" ]]     &&  mrun_com=${mrun_com}" -i \"$input_list\""
3689    [[ $ignore_archive_error = true ]]  &&  mrun_com=${mrun_com}" -I"
3690    [[ $keep_data_from_previous_run = true ]]  &&  mrun_com=${mrun_com}" -k"
3691    [[ "$additional_conditions" != "" ]]  &&  mrun_com=${mrun_com}" -K \"$additional_conditions\""
3692#    [[ "$makefile" != "$source_path/Makefile" ]]  &&  mrun_com=${mrun_com}" -M \"$makefile\""
3693    [[ "$output_list" != "" ]]    &&  mrun_com=${mrun_com}" -o \"$output_list\""
3694    [[ "$read_from_config" = false ]]  &&  mrun_com=${mrun_com}" -S"
3695    [[ $do_trace = true ]]        &&  mrun_com=${mrun_com}" -x"
3696    [[ "$numprocs" != "" ]]       &&  mrun_com=${mrun_com}" -X $numprocs"
3697    if [[ $use_openmp = true ]]
3698    then
3699       mrun_com=${mrun_com}" -O"
3700       [[ "$tasks_per_node" != "" ]] &&  mrun_com=${mrun_com}" -T $threads_per_task"
3701    else
3702       [[ "$tasks_per_node" != "" ]] &&  mrun_com=${mrun_com}" -T $tasks_per_node"
3703    fi
3704    [[ $store_on_archive_system = false ]]  &&  mrun_com=${mrun_com}" -A"
3705    [[ $package_list != "" ]]     &&  mrun_com=${mrun_com}" -p \"$package_list\""
3706    [[ $return_password != "" ]]  &&  mrun_com=${mrun_com}" -P $return_password"
3707    [[ $delete_temporary_catalog = false ]]  &&  mrun_com=${mrun_com}" -B"
3708    [[ $node_usage != default  &&  "$(echo $node_usage | cut -c1-3)" != "sla"  &&  $node_usage != novice ]]  &&  mrun_com=${mrun_com}" -n $node_usage"
3709    [[ $run_coupled_model = true ]]  &&  mrun_com=${mrun_com}" -Y"
3710    if [[ $do_remote = true ]]
3711    then
3712       printf "\n>>>> MRUN-command on execution host:\n>>>> $mrun_com \n"
3713    fi
3714
3715
3716       # ZUSAMMENSTELLUNG DES JOBSCRIPTS AUF DATEI jobfile
3717    jobfile=jobfile.$RANDOM
3718
3719
3720       # TEMPORAERES VERZEICHNIS GENERIEREN UND NACH DORT WECHSELN
3721    echo  "mkdir  $TEMPDIR"      >>  $jobfile
3722    echo  "cd  $TEMPDIR"         >>  $jobfile
3723
3724
3725       # EVENTUELL FEHLERVERFOLGUNG AKTIVIEREN
3726    if [[ $do_trace = true ]]
3727    then
3728       echo  "set -x"                                    >>  $jobfile
3729    else
3730       echo  "set +vx"                                   >>  $jobfile
3731    fi
3732
3733
3734       # ABSPEICHERN DER QUELLTEXTE (NUR FALLS UEBERSETZT WERDEN SOLL)
3735       # SOWIE GEGEBENENFALLS DES MAKEFILES
3736    if [[ $do_compile = true ]]
3737    then
3738
3739       source_catalog=SOURCES_FOR_RUN_$fname
3740
3741           # UNTERVERZEICHNIS FUER QUELLTEXTE UND MAKEFILE ANLEGEN
3742           # MRUN WIRD DIESES VRZEICHNIS UEBER ENVIRONMENT VARIABLE
3743           # MITGETEILT (UEBERSTEUERT ANGABE IN KONFIGURATIONSDATEI)
3744       echo  "mkdir  SOURCES_FOR_RUN_$fname"                >>  $jobfile
3745       echo  "export SOURCES_COMPLETE=true"                 >>  $jobfile
3746       echo  "cd     SOURCES_FOR_RUN_$fname"                >>  $jobfile
3747
3748       for  filename  in  $source_list
3749       do
3750             # ABDECKZEICHEN VERHINDERN, DASS ERSETZUNGEN ERFOLGEN
3751          echo  "cat > $filename << \"%END%\""              >>  $jobfile
3752          cat   $source_catalog/$filename                   >>  $jobfile
3753          echo  " "                                         >>  $jobfile
3754          echo  "%END%"                                     >>  $jobfile
3755          echo  " "                                         >>  $jobfile
3756       done
3757
3758          # ABDECKZEICHEN VERHINDERN, DASS ERSETZUNGEN ERFOLGEN
3759       echo  "cat > Makefile << \"%END%\""               >>  $jobfile
3760       cat   $source_catalog/Makefile                    >>  $jobfile
3761       echo  " "                                         >>  $jobfile
3762       echo  "%END%"                                     >>  $jobfile
3763       echo  " "                                         >>  $jobfile
3764
3765       echo  "cd -  > /dev/null"                         >>  $jobfile
3766
3767    fi
3768
3769
3770       # ABSPEICHERN DER KONFIGURATIONSDATEI
3771       # ABDECKZEICHEN VERHINDERN, DASS ERSETZUNGEN ERFOLGEN
3772    echo  "cat > $config_file << \"%END%\""      >>  $jobfile
3773    cat   $config_file                           >>  $jobfile
3774    echo  "%END%"                                >>  $jobfile
3775    echo  " "                                    >>  $jobfile
3776
3777
3778       # ABSPEICHERN DER AKTUELLEN MRUN-VERSION
3779       # ABDECKZEICHEN VERHINDERN, DASS ERSETZUNGEN ERFOLGEN
3780    echo  "cat > $mrun_script_name <<\"%END%\""  >>  $jobfile
3781    cat   ${PALM_BIN}/$mrun_script_name          >>  $jobfile
3782    echo  "%END%"                                >>  $jobfile
3783    if [[ $host = lctit ]]
3784    then
3785       echo "sed 's/bin\/ksh/home2\/usr5\/mkanda\/pub\/ksh/' < $mrun_script_name > mrun_new" >>  $jobfile
3786       echo "mv  mrun_new  $mrun_script_name"    >>  $jobfile
3787    fi
3788    echo  "chmod u+x $mrun_script_name"          >>  $jobfile
3789    echo  "execute_mrun=true"                    >>  $jobfile
3790    echo  " "                                    >>  $jobfile
3791
3792       # EVTL. BENOETIGTE INPUT-DATEIEN PER FTP HOLEN ODER DEM JOB DIREKT
3793       # MITGEBEN UND AUF DEM REMOTE-RECHNER IM BENUTZERVERZEICHNIS ABLEGEN
3794       # FALLS DIESES NICHT EXISTIERT, WIRD VERSUCHT, DAS JEWEILS LETZTE
3795       # UNTERVERZEICHNIS DES PFADNAMENS ANZULEGEN
3796    if [[ $do_remote = true ]]
3797    then
3798       (( i = 0 ))
3799       while (( i < iin ))
3800       do
3801          (( i = i + 1 ))
3802          echo  "[[ ! -d ${pathin[$i]} ]]  &&  mkdir -p  ${pathin[$i]}"  >>  $jobfile
3803          if [[ "${transin[$i]}" = job ]]
3804          then
3805             echo  "cat > ${remotepathin[$i]} <<\"%END%\""    >>  $jobfile
3806             eval cat   ${pathin[$i]}/${frelin[$i]}           >>  $jobfile
3807             echo  " "                                        >>  $jobfile
3808             echo  "%END%"                                    >>  $jobfile
3809          else
3810             echo  "batch_scp -b -o -g -s -u $return_username $return_addres ${remotepathin[$i]} \"${pathin[$i]}\" ${frelin[$i]}" >>  $jobfile
3811          fi
3812
3813             # UEBERPRUEFEN, OB DATEI ANGELEGT WERDEN KONNTE
3814          echo  "if [[ \$? = 1 ]]"                    >>  $jobfile
3815          echo  "then"                                >>  $jobfile
3816          echo  "   echo \" \" "                      >>  $jobfile
3817          echo  "   echo \"+++ file ${remotepathin[$i]} could not be created\" "   >>  $jobfile
3818          echo  "   echo \"    please check, if directory exists on $host!\" "  >>  $jobfile
3819          echo  "   echo \"+++ MRUN will not be continued\" "  >>  $jobfile
3820          echo  "   execute_mrun=false"               >>  $jobfile
3821          echo  "fi"                                  >>  $jobfile
3822       done
3823    fi
3824
3825       # ARBEITSKATALOG AUF DER LOKALEN MASCHINE FUER EVENTUELLE
3826       # FORTSETZUNGSLAUEFE PER ENV-VARIABLE UEBERGEBEN
3827    echo  "LOCAL_PWD=$working_directory"                >>  $jobfile
3828    echo  "export LOCAL_PWD"                            >>  $jobfile
3829
3830       # EBENSO LOKALEN MRUN-KATALOG UEBERGEBEN
3831    echo  "LOCAL_MRUN_PATH=$PALM_BIN"                   >>  $jobfile
3832    echo  "export LOCAL_MRUN_PATH"                      >>  $jobfile
3833
3834       # WORKAROUND FUER RIAM-NEC-JOBS WEGEN PROFILE-SCHWIERIGKEITEN
3835    if [[ $localhost_realname = "gate"  ||  $localhost = lctit ]]
3836    then
3837       echo  "export PALM_BIN=$PALM_BIN"                >>  $jobfile
3838    fi
3839
3840       # MRUN AUF ZIELRECHNER AUFRUFEN
3841    echo  "set -x"                                      >>  $jobfile
3842    echo  "[[ \$execute_mrun = true ]]  &&  ./$mrun_com"  >>  $jobfile
3843
3844    echo  'ls -al; echo `pwd`'                          >>  $jobfile
3845    echo  "cd \$HOME"                                   >>  $jobfile
3846    echo  "rm -rf  $TEMPDIR"                            >>  $jobfile
3847
3848
3849
3850
3851       # JOB PER SUBJOB STARTEN
3852    if [[ $silent = false ]]
3853    then
3854       printf "\n     "
3855    else
3856       printf "\n\n"
3857    fi
3858
3859    subjob  $job_on_file  -h $host  -u $remote_username -g $group_number -q $queue  -m $memory  -N $node_usage -t $cpumax  $XOPT  $TOPT  $OOPT  -n $fname  -v  -c $job_catalog  $jobfile
3860    rm -rf  $jobfile
3861
3862
3863 fi  # ENDE REMOTE-TEIL
3864
3865
3866
3867     # ENDE DER PROZEDUR
Note: See TracBrowser for help on using the repository browser.