source: palm/trunk/SCRIPTS/mrun @ 108

Last change on this file since 108 was 108, checked in by letzel, 17 years ago
  • Improved coupler: evaporation - salinity-flux coupling for humidity = .T.,

avoid MPI hangs when coupled runs terminate, add DOC/app/chapter_3.8;

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