source: palm/trunk/SCRIPTS/mrun @ 126

Last change on this file since 126 was 126, checked in by letzel, 17 years ago

Further adjustments for queues on lctit

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