~ubuntu-branches/ubuntu/oneiric/code-saturne/oneiric

« back to all changes in this revision

Viewing changes to bin/runcase_coupling.in

  • Committer: Bazaar Package Importer
  • Author(s): Sylvestre Ledru
  • Date: 2009-11-02 23:21:17 UTC
  • Revision ID: james.westby@ubuntu.com-20091102232117-9brxj2l5e33ie45a
Tags: upstream-2.0.0.beta2
ImportĀ upstreamĀ versionĀ 2.0.0.beta2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/bash
 
2
# @configure_input@
 
3
#============================================================================
 
4
#
 
5
#     This file is part of the Code_Saturne Kernel, element of the
 
6
#     Code_Saturne CFD tool.
 
7
#
 
8
#     Copyright (C) 1998-2009 EDF S.A., France
 
9
#
 
10
#     contact: saturne-support@edf.fr
 
11
#
 
12
#     The Code_Saturne Kernel is free software; you can redistribute it
 
13
#     and/or modify it under the terms of the GNU General Public License
 
14
#     as published by the Free Software Foundation; either version 2 of
 
15
#     the License, or (at your option) any later version.
 
16
#
 
17
#     The Code_Saturne Kernel is distributed in the hope that it will be
 
18
#     useful, but WITHOUT ANY WARRANTY; without even the implied warranty
 
19
#     of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
20
#     GNU General Public License for more details.
 
21
#
 
22
#     You should have received a copy of the GNU General Public License
 
23
#     along with the Code_Saturne Kernel; if not, write to the
 
24
#     Free Software Foundation, Inc.,
 
25
#     51 Franklin St, Fifth Floor,
 
26
#     Boston, MA  02110-1301  USA
 
27
#
 
28
#============================================================================
 
29
#
 
30
########################################################################
 
31
#
 
32
#                  BATCH FILE FOR THE CCRT (Platine under LSF)
 
33
#                  ===========================================
 
34
#
 
35
#BSUB -n 2
 
36
#BSUB -W 00:05
 
37
#BSUB -o nameandcaseo.%J
 
38
#BSUB -e nameandcasee.%J
 
39
#BSUB -J nameandcase
 
40
#
 
41
#  -n : number of processors
 
42
#  -W : walltime as hh:mm
 
43
#  -o : output file name
 
44
#  -e : error file name
 
45
#  -J : job name
 
46
#
 
47
# ------------------------------------------------------------------
 
48
#
 
49
#                  BATCH FILE FOR THE Chatou CLUSTER (PBS)
 
50
#                  =======================================
 
51
#
 
52
#PBS -l nodes=4:ppn=2
 
53
#PBS -l walltime=1:00:00
 
54
#PBS -l mem=320mb
 
55
#
 
56
#PBS -j eo
 
57
#PBS -N nameandcase
 
58
#
 
59
#  nodes    : number of nodes
 
60
#  ppn      : number of process per node
 
61
#  walltime : wall clock time (hh:mm:ss)
 
62
#  mem      : memory
 
63
#
 
64
#WARNING: when coupling with SYRTHES, 1 processor will be reserved for each
 
65
#         instance of SYRTHES. The Kernel will be executed on the remaining
 
66
#         processors, so make sure to reserve a sufficiently high number
 
67
#         of processors.
 
68
#
 
69
# ------------------------------------------------------------------
 
70
#
 
71
#                  BATCH FILE (University of Manchester Cluster)
 
72
#                  =============================================
 
73
#
 
74
# set the name of the job
 
75
##$ -N nameandcase
 
76
#
 
77
# request between 2 and 4 slots
 
78
##$ -pe mpich 2-4
 
79
#
 
80
# Execute the job from the current working directory
 
81
# Job output will appear in this directory
 
82
##$ -cwd
 
83
#   can use -o dirname to redirect stdout
 
84
#   can use -e dirname to redirect stderr
 
85
 
 
86
#  Export these environment variables
 
87
##$ -v MPI_HOME
 
88
 
 
89
#set -x
 
90
#
 
91
# ------------------------------------------------------------------
 
92
#
 
93
#                  BATCH FILE (AIX, Loadlever)
 
94
#                  ===========================
 
95
#
 
96
#@ shell = /bin/sh
 
97
#
 
98
#@ job_name = nameandcase
 
99
#
 
100
#@ job_type = parallel
 
101
#@ cpus = 128
 
102
#@ node_usage = not_shared
 
103
#
 
104
#@ network.MPI = csss,shared,US
 
105
#@ bulkxfer = yes
 
106
#
 
107
#@ wall_clock_limit = 00:20:00
 
108
#@ account_no = z001
 
109
#
 
110
#@ output = $(job_name).$(schedd_host).$(jobid).out
 
111
#@ error  = $(job_name).$(schedd_host).$(jobid).err
 
112
#@ notification = never
 
113
#
 
114
#@ queue
 
115
# suggested environment settings:
 
116
#  export MP_EAGER_LIMIT=65536
 
117
#  export MP_SHARED_MEMORY=yes
 
118
#  export MEMORY_AFFINITY=MCM
 
119
#  export MP_TASK_AFFINITY=MCM
 
120
#
 
121
########################################################################
 
122
#
 
123
# BEGINNING OF USER MODIFIABLE ZONE FOR STANDARD CALCULATIONS
 
124
#
 
125
# runcase.help gives more details about the different variables.
 
126
#
 
127
#                    -------------------------------
 
128
#
 
129
NB_INSTANCES=2
 
130
#
 
131
# On some systems, some external libraries may require TERM to be defined.
 
132
export TERM=xterm
 
133
#
 
134
STUDY=STUDYNAME
 
135
CASE=CASENAME
 
136
#
 
137
# Parameters for the 1st instance 
 
138
# -------------------------------
 
139
PARAM_1=
 
140
MESH_1=
 
141
COMMAND_REORIENT_1=
 
142
COMMAND_JOIN_1=
 
143
COMMAND_CWF_1=
 
144
COMMAND_PERIO_1=
 
145
THERMOCHEMISTRY_DATA_1=
 
146
METEO_DATA_1=
 
147
#
 
148
# Choose the total number of processors used (if empty, automatic detection
 
149
# through the batch system if possible, set to 1 otherwise).
 
150
# When coupling with SYRTHES with COUPLING_MODE=MPI, the 1st processor is
 
151
# used by SYRTHES, so the effective number of processors assigned to the
 
152
# Kernel is reduced by 1.
 
153
# The processors list is only usable when not running on a batch system
 
154
# (as such a system usually already defines a similar list)
 
155
NUMBER_OF_PROCESSORS_1=1
 
156
PROCESSOR_LIST_1=
 
157
#
 
158
PARTITION_LIST_1=
 
159
#
 
160
USER_INPUT_FILES_1=""
 
161
USER_OUTPUT_FILES_1=""
 
162
#
 
163
# Parameters for the 2nd instance 
 
164
# -------------------------------
 
165
PARAM_2=
 
166
MESH_2=
 
167
COMMAND_REORIENT_2=
 
168
COMMAND_JOIN_2=
 
169
COMMAND_CWF_2=
 
170
COMMAND_PERIO_2=
 
171
THERMOCHEMISTRY_DATA_2=
 
172
METEO_DATA_2=
 
173
#
 
174
# Choose the total number of processors used (if empty, automatic detection
 
175
# through the batch system if possible, set to 1 otherwise).
 
176
# When coupling with SYRTHES with COUPLING_MODE=MPI, the 1st processor is
 
177
# used by SYRTHES, so the effective number of processors assigned to the
 
178
# Kernel is reduced by 1.
 
179
# The processors list is only usable when not running on a batch system
 
180
# (as such a system usually already defines a similar list)
 
181
NUMBER_OF_PROCESSORS_2=1
 
182
PROCESSOR_LIST_2=
 
183
#
 
184
PARTITION_LIST_2=
 
185
#
 
186
USER_INPUT_FILES_2=""
 
187
USER_OUTPUT_FILES_2=""
 
188
#
 
189
# Global parameters
 
190
# -----------------
 
191
# Working directory (leave empty for automatic default directory)
 
192
CS_TMP_PREFIX=
 
193
#CS_TMP_PREFIX=/local00/users/`whoami`
 
194
#
 
195
CS_LIB_ADD=
 
196
VALGRIND=
 
197
#
 
198
ARG_CS_VERIF=""
 
199
ARG_CS_OUTPUT=""
 
200
ECHOCOMM=""
 
201
#
 
202
summary=summary
 
203
CASEDIR=CASEDIRNAME
 
204
#DATA=$CASEDIR/DATA
 
205
RESU=$CASEDIR/RESU
 
206
#SRC=$CASEDIR/SRC
 
207
SCRIPTS=$CASEDIR/SCRIPTS
 
208
#RESTART_IN=$DATA/RESTART
 
209
#PREPROCESSOR_OUTPUT_IN=$DATA/preprocessor_output
 
210
#PARTITION_OUTPUT_IN=$DATA/PARTITION_OUTPUT
 
211
MESHDIR=$CASEDIR/../MESH
 
212
#
 
213
#  Indicate which steps should be executed; if both the Preprocessor and the
 
214
#  Kernel are executed, the "preprocessor_output" and eventual "domain_number_*"
 
215
#  files are not saved. If only the preprocessor and / or partitioner are
 
216
#  executed, the corresponding files will be saved in a RESU/PREPROCESSOR_OUTPUT
 
217
#  and RESU/PARTITION directory. If the Preprocessor is not executed,
 
218
#  "preprocessor_output" will be read from $PREPROCESSOR_OUTPUT_IN. If the
 
219
#  Partitioner is not executed, "domain_number_*" will be read from
 
220
#  $PARTITION_OUTPUT_IN if available (otherwise, unoptimized default
 
221
#  partitioning will be used).
 
222
#
 
223
#  EXEC_PREPROCESS : should the Preprocessor be run ? (yes/no)
 
224
#  EXEC_PARTITION  : should the Partitioner be run ? (yes/no)
 
225
#  EXEC_KERNEL     : should the Kernel be run ? (yes/no)
 
226
#
 
227
EXEC_PREPROCESS=yes
 
228
EXEC_PARTITION=yes
 
229
EXEC_KERNEL=yes
 
230
#
 
231
#
 
232
#
 
233
########################################################################
 
234
#
 
235
# END OF USER MODIFIABLE ZONE FOR STANDARD CALCULATIONS
 
236
#
 
237
########################################################################
 
238
#
 
239
# Kernel installation parameters
 
240
#
 
241
prefix=@prefix@
 
242
#
 
243
exec_prefix=@exec_prefix@
 
244
bindir=@bindir@
 
245
datarootdir=@datarootdir@
 
246
datadir=@datadir@
 
247
pkgdatadir=${datadir}/@PACKAGE@
 
248
#
 
249
# Preprocessor installation parameters
 
250
#
 
251
ecs_prefix=@ecs_prefix@
 
252
#
 
253
ecs_exec_prefix=${ecs_prefix}
 
254
ecs_bindir=${ecs_exec_prefix}/bin
 
255
#
 
256
########################################################################
 
257
#
 
258
# Parameters for execution
 
259
#
 
260
# General variables
 
261
THISSCRIPT=$0
 
262
USER=`whoami`
 
263
DATE=`date '+%m%d%H%M'`
 
264
SUFFIX=$DATE
 
265
EXE=cs_solver
 
266
#
 
267
# Copy runcase before changing to the working directory
 
268
# (as after that, the relative path will not be up to date).
 
269
#
 
270
cp $0 $RESU/runcase.$SUFFIX
 
271
#
 
272
# Execution directory (reachable by all the processors)
 
273
#
 
274
if [ ! -z "$CS_TMP_PREFIX" ] ; then
 
275
  RUN=${CS_TMP_PREFIX}/tmp_Saturne/$STUDY.$CASE.$DATE
 
276
#
 
277
else
 
278
#  Default if not specified by the user
 
279
#
 
280
#  On the CCRT, there is no TMPDIR. We work by default in SCRATCHDIR
 
281
  if [ "$SCRATCHDIR" != "" ] ; then
 
282
    RUN=$SCRATCHDIR/tmp_Saturne/$STUDY.$CASE.$DATE
 
283
#
 
284
  elif [ "$TMPDIR" != "" -a "$TMPDIR" != "/tmp" ] ; then
 
285
    RUN=$TMPDIR/tmp_Saturne/$STUDY.$CASE.$DATE
 
286
  else
 
287
    RUN=$HOME/tmp_Saturne/$STUDY.$CASE.$DATE
 
288
  fi
 
289
fi
 
290
#
 
291
# Create directory if necessary
 
292
if [ "$RUN" != "$TMPDIR" ] ; then
 
293
  if [ ! -d $RUN ] ; then
 
294
    mkdir -p $RUN || exit 1
 
295
  else
 
296
    echo "RUN=$RUN already exists."
 
297
    echo "The simulation will not be run."
 
298
    exit 1
 
299
  fi
 
300
fi
 
301
#
 
302
cd $RUN
 
303
#
 
304
# Create a working directory for each instance
 
305
I=0
 
306
while [ $I -lt $NB_INSTANCES ]; do
 
307
  (( I=I+1 ))
 
308
  mkdir RUN.$I || exit 1
 
309
done
 
310
#
 
311
########################################################################
 
312
#
 
313
# Set up MPI environment
 
314
#
 
315
# Use makefile query to obtain the path to MPI binaries if those are
 
316
# not on the default path. This is a peculiar use of make, but allows
 
317
# us to avoid defining the MPI configuration in multiple files.
 
318
 
 
319
CS_MPI_PATH=@MPI_BIN@
 
320
 
 
321
N_PROCS=0
 
322
I=0
 
323
while [ $I -lt $NB_INSTANCES ]; do
 
324
    (( I=I+1 ))
 
325
    N_PROCS=`eval echo '$NUMBER_OF_PROCESSORS_'$I`
 
326
    (( NUMBER_OF_PROCESSORS=NUMBER_OF_PROCESSORS+$N_PROCS ))
 
327
done
 
328
 
 
329
# NUMBER_OF_PROCESSORS is determined here if not already set;
 
330
# MPIHOSTS, MPIRUN, MPIBOOT, MPIHALT, and NUMBER_OF_NODES are
 
331
# defined by the sourced script, and PATH may be updated.
 
332
#
 
333
. ${pkgdatadir}/runcase_mpi_env
 
334
#
 
335
echo
 
336
echo
 
337
#
 
338
echo "Coupling of several Code_Saturne executables activated."
 
339
#
 
340
########################################################################
 
341
# Greeting message
 
342
#
 
343
echo ' '
 
344
echo '                      Code_Saturne is running '
 
345
echo '                      *********************** '
 
346
echo ' '
 
347
echo ' Working directory (to be periodically cleaned) : '
 
348
echo '    ' $RUN
 
349
#
 
350
########################################################################
 
351
#
 
352
# Compilation and link
 
353
#
 
354
# Note: we also check the for the presence of certain user subroutines here.
 
355
#
 
356
echo
 
357
echo ' Kernel version:          ' $prefix
 
358
echo ' Preprocessor version:    ' $ecs_prefix
 
359
 
 
360
if [ "${EXEC_KERNEL}" = "yes" ] ; then
 
361
 
 
362
I=0
 
363
while [ $I -lt $NB_INSTANCES ]; do
 
364
  (( I=I+1 ))
 
365
 
 
366
  cur_dir=$RUN/RUN.$I
 
367
  cd $cur_dir
 
368
 
 
369
  PARAM=`eval echo '$PARAM_'$I`
 
370
  SRC=$CASEDIR/SRC.$I
 
371
 
 
372
  source_cas=$SRC
 
373
 
 
374
  #
 
375
  # Copy of the parameter file
 
376
  if [ ! -z "$PARAM" ] ; then
 
377
    var=$DATA/$PARAM
 
378
    if [ -f $var ] ; then
 
379
      COMMAND_PARAM="--param $PARAM"
 
380
      cp $var .
 
381
    else
 
382
      echo ' '
 
383
      echo ' -- ERROR -- '
 
384
      echo ' The parameters file ' $var
 
385
      echo ' can not be accessed.'
 
386
      exit 1
 
387
    fi
 
388
  fi
 
389
 
 
390
  src_files=`ls ${source_cas}/*.[fF]90 ${source_cas}/*.[ch] 2>/dev/null`
 
391
 
 
392
  if [ ! -z "${src_files}" ] ; then
 
393
 
 
394
if [ $I -eq 1 ]; then
 
395
    echo
 
396
    echo  "  ***************************************************************"
 
397
    echo  "   Compilation of user subroutines and linking of Code_Saturne"
 
398
    echo  "  ***************************************************************"
 
399
fi
 
400
 
 
401
    if [ -f compil.log ] ; then
 
402
      rm -f compil.log
 
403
    fi
 
404
 
 
405
    src_dir="src_saturne"
 
406
 
 
407
    # Copy of the user source files
 
408
    # (no links: the directory is copied later)
 
409
    mkdir ${src_dir}
 
410
    for f in ${src_files} ; do
 
411
      if [ -f $f ] ; then
 
412
        cp ${f} ${src_dir}/
 
413
      fi
 
414
    done
 
415
 
 
416
    # Detect presence and test for compatibility of modules.
 
417
    if [ ! -z "$PARAM" ] ; then
 
418
      ${bindir}/cs check_consistency --source=$src_dir --param=$PARAM
 
419
    else
 
420
      ${bindir}/cs check_consistency
 
421
    fi
 
422
    if [ $? = 1 ] ; then
 
423
      exit 1
 
424
    fi
 
425
 
 
426
    # Compilation
 
427
    if [ ! -z "${CS_LIB_ADD}" ] ; then
 
428
      OPTLIBS="--opt-libs=${CS_LIB_ADD}"
 
429
    fi
 
430
    ${bindir}/cs compile \
 
431
      --source=$src_dir ${OPTLIBS} 2>>$cur_dir/compil.log 1>&2
 
432
    if [ $? -ne 0 ]
 
433
    then
 
434
      cp $cur_dir/compil.log $RESU/compil.log.$I.$SUFFIX
 
435
      echo "COMPILE OR LINK ERROR"
 
436
      rm -f *.o
 
437
      exit 1
 
438
    else
 
439
      cp $cur_dir/compil.log $RESU/compil.log.$I.$SUFFIX
 
440
    fi
 
441
 
 
442
  else
 
443
 
 
444
    # Detect presence and test for compatibility of modules.
 
445
    if [ ! -z "$PARAM" ] ; then
 
446
      ${bindir}/cs check_consistency --param=$PARAM
 
447
    else
 
448
      ${bindir}/cs check_consistency
 
449
    fi
 
450
    if [ $? = 1 ] ; then
 
451
      exit 1
 
452
    fi
 
453
 
 
454
    ln -s ${bindir}/$EXE .
 
455
 
 
456
  fi
 
457
 
 
458
done
 
459
 
 
460
fi # EXEC_KERNEL = yes
 
461
 
 
462
#
 
463
########################################################################
 
464
#
 
465
# Data setup
 
466
#
 
467
echo
 
468
echo  "  ********************************************"
 
469
echo  "             Preparing calculation            "
 
470
echo  "  ********************************************"
 
471
echo
 
472
#
 
473
ERROR=false
 
474
PREPROCESS_ERROR=false
 
475
PARTITION_ERROR=false
 
476
EXECUTION_ERROR=false
 
477
#
 
478
I=0
 
479
while [ $I -lt $NB_INSTANCES ]; do
 
480
#
 
481
  (( I=I+1 ))
 
482
#
 
483
  cur_dir=$RUN/RUN.$I
 
484
  cd $cur_dir
 
485
#
 
486
 
 
487
  MESH=`eval echo '$MESH_'$I`
 
488
  COMMAND_JOIN=`eval echo '$COMMAND_JOIN_'$I`
 
489
  COMMAND_CWF=`eval echo '$COMMAND_CWF_'$I`
 
490
  COMMAND_PERIO=`eval echo '$COMMAND_PERIO_'$I`
 
491
 
 
492
  nproc_kernel=`eval echo '$NUMBER_OF_PROCESSORS_'$I`
 
493
 
 
494
  SRC=$CASEDIR/SRC.$I
 
495
  DATA=$CASEDIR/DATA.$I
 
496
  RESTART_IN=$DATA/RESTART_IN
 
497
  PREPROCESSOR_OUTPUT_IN=$DATA/preprocessor_output
 
498
  PARTITION_OUTPUT_IN=$DATA/PARTITION_OUTPUT
 
499
#
 
500
if [ "${EXEC_PREPROCESS}" = "yes" ]
 
501
then
 
502
  for var in $MESH ; do
 
503
    ln -s $MESHDIR/$var $var || exit 1
 
504
    # Special case for meshes in EnSight format: link to .geo file necessary
 
505
    # (retrieve name through .case file)
 
506
    var2=`basename $var .case`
 
507
    if [ $var2 != $var ] ; then
 
508
      ficgeo_ensight=`awk '/^model:/ {print $2}' $var`
 
509
      ln -s $MESHDIR/$ficgeo_ensight $ficgeo_ensight || FIN
 
510
    fi
 
511
  done
 
512
else
 
513
  if [ -f ${PREPROCESSOR_OUTPUT_IN} ] ; then
 
514
    ln -s ${PREPROCESSOR_OUTPUT_IN} preprocessor_output || exit 1
 
515
  else
 
516
    echo "Error: no preprocessor output file is available;"
 
517
    echo "       (${PREPROCESSOR_OUTPUT_IN} does not exist."
 
518
    echo "       or is not a standard file."
 
519
    exit 1
 
520
  fi
 
521
fi
 
522
#
 
523
if [ $nproc_kernel -eq 1 -a "${EXEC_KERNEL}" = "yes" ] ; then
 
524
  EXEC_PARTITION=no
 
525
elif [ "${EXEC_PARTITION}" = "no" -a "${PARTITION_OUTPUT_IN}" != "" ]
 
526
then
 
527
  if [ -f ${PARTITION_OUTPUT_IN}/domain_number_${nproc_kernel} ] ; then
 
528
    ln -s ${PARTITION_OUTPUT_IN}/domain_number_${nproc_kernel} .
 
529
  else
 
530
    echo "Warning: no partitioning file is available;"
 
531
    echo "         (no ${PARTITION_OUTPUT_IN}/domain_number_${nproc_kernel})."
 
532
    echo
 
533
    echo "         Unoptimized partitioning will be used."
 
534
    echo "         Parallel performance may be degraded."
 
535
  fi
 
536
fi
 
537
#
 
538
if [ "${EXEC_KERNEL}" = "yes" ] ; then
 
539
 
 
540
  THERMOCHEMISTRY_DATA=`eval echo '$THERMOCHEMISTRY_DATA_'$I`
 
541
  METEO_DATA=`eval echo '$METEO_DATA_'$I`
 
542
  USER_INPUT_FILES=`eval echo '$USER_INPUT_FILES_'$I`
 
543
 
 
544
  for var in ${RESTART_IN}/* ; do
 
545
    if [ -f $var ] ; then
 
546
      varb=`basename $var`
 
547
      if   [ $varb = suiava ] ; then
 
548
        vara=suiamo
 
549
      elif [ $varb = suiavx ] ; then
 
550
        vara=suiamx
 
551
      elif [ $varb = vorava ] ; then
 
552
        vara=voramo
 
553
      elif [ $varb = t1dava ] ; then
 
554
        vara=t1damo
 
555
      elif [ $varb = ctwava ] ; then
 
556
        vara=ctwamo
 
557
      elif [ $varb = rayava ] ; then
 
558
        vara=rayamo
 
559
      elif [ $varb = lagava ] ; then
 
560
        vara=lagamo
 
561
      elif [ $varb = lasava ] ; then
 
562
        vara=lasamo
 
563
      else
 
564
        vara=$varb
 
565
      fi
 
566
      ln -s $var $vara
 
567
    fi
 
568
  done
 
569
  #
 
570
  if [ "$THERMOCHEMISTRY_DATA" != "" ] ; then
 
571
    var=$DATA/$THERMOCHEMISTRY_DATA
 
572
    if [ -f $var ] ; then
 
573
      cp $var dp_tch
 
574
      # Copy so as to have correct name upon backup
 
575
      if [ "$THERMOCHEMISTRY_DATA" != "dp_tch" ] ; then
 
576
        cp dp_tch $THERMOCHEMISTRY_DATA
 
577
      fi
 
578
    else
 
579
      echo ' '
 
580
      echo ' -- ERROR -- '
 
581
      echo ' The thermochemistry file ' $var
 
582
      echo ' can not be accessed. '
 
583
      exit 1
 
584
    fi
 
585
  fi
 
586
  #
 
587
  if [ "$METEO_DATA" != "" ] ; then
 
588
    var=$DATA/$METEO_DATA
 
589
    if [ -f $var ] ; then
 
590
      cp $var meteo
 
591
      # Copy so as to have correct name upon backup
 
592
      if [ "$METEO_DATA" != "meteo" ] ; then
 
593
        cp meteo $METEO_DATA
 
594
      fi
 
595
    else
 
596
      echo ' '
 
597
      echo ' -- ERROR -- '
 
598
      echo ' The meteo profile file ' $var
 
599
      echo ' can not be accessed. '
 
600
      exit 1
 
601
    fi
 
602
  fi
 
603
  #
 
604
  for f in uscpcl.f90 usd3pc.f90 usebuc.f90 uslwcc.f90 usfucl.f90
 
605
  do
 
606
    if [ -f "${SRC}/${f}" -a ! -f JANAF ] ; then
 
607
      cp ${datadir}/data/thch/JANAF JANAF
 
608
    fi
 
609
  done
 
610
  #
 
611
  if [ ! -z "$USER_INPUT_FILES" ] ; then
 
612
    for f in $USER_INPUT_FILES ; do
 
613
      cp $DATA/$f .
 
614
    done
 
615
  fi
 
616
  #
 
617
fi # EXEC_KERNEL = yes
 
618
 
 
619
if [ $I -eq 1 ]; then
 
620
########################################################################
 
621
# Maximum time for PBS (done here so as to leave time for PBS to
 
622
# realize that things have started).
 
623
#
 
624
if [ "$PBS_JOBID" != "" ] ; then
 
625
  CS_MAXTIME=`qstat -r $PBS_JOBID | grep $PBS_JOBID | sed -e's/ \{1,\}/ /g' | cut -d ' ' -f 9`
 
626
  export CS_MAXTIME
 
627
fi
 
628
#
 
629
########################################################################
 
630
#
 
631
# Summary: start
 
632
#
 
633
CURDATE=`unset LANG ; date`
 
634
#
 
635
echo '========================================================'>>$summary
 
636
echo '   Start time       : ' $CURDATE                         >>$summary
 
637
echo '  ----------------------------------------------------'  >>$summary
 
638
echo '    Kernel          : ' $prefix                          >>$summary
 
639
echo '    Preprocessor    : ' $ecs_prefix                      >>$summary
 
640
echo '    ------------------------------------------------  '  >>$summary
 
641
echo '    HOMARD          : ' $homard_prefix                   >>$summary
 
642
echo '    ------------------------------------------------  '  >>$summary
 
643
echo '    CS_MPI_PATH     : ' $CS_MPI_PATH                     >>$summary
 
644
echo '    PATH            : ' $PATH                            >>$summary
 
645
echo '    ------------------------------------------------  '  >>$summary
 
646
echo '    User            : ' $USER                            >>$summary
 
647
echo '========================================================'>>$summary
 
648
echo '    Machine         : '                                  >>$summary
 
649
     uname -a                                                  >>$summary
 
650
if [ -z "$NUMBER_OF_PROCESSORS" ] ; then
 
651
  echo '    N Procs         : ' 1                              >>$summary
 
652
else
 
653
  echo '    N Procs         : ' $NUMBER_OF_PROCESSORS          >>$summary
 
654
fi
 
655
if [ -z "$PROCESSOR_LIST" ] ; then
 
656
  echo '    Processors      : ' default                        >>$summary
 
657
else
 
658
  echo '    Processors      : ' $PROCESSOR_LIST                >>$summary
 
659
fi
 
660
echo '========================================================'>>$summary
 
661
echo '  ----------------------------------------------------'  >>$summary
 
662
echo '    Case            : ' $CASE                            >>$summary
 
663
echo '      DATA          : ' $DATA                            >>$summary
 
664
echo '      SRC           : ' $SRC                             >>$summary
 
665
echo '      RESU          : ' $RESU                            >>$summary
 
666
echo '  ----------------------------------------------------'  >>$summary
 
667
echo '    Exec. dir.      : ' $RUN                             >>$summary
 
668
echo '  ----------------------------------------------------'  >>$summary
 
669
if [ "$EXEC_PREPROCESSOR" = "yes" ] ; then
 
670
  echo '    Preprocessor    : ' ${ecs_bindir}/cs_preprocess    >>$summary
 
671
fi
 
672
if [ "$EXEC_PARTITION" = "yes" ] ; then
 
673
  echo '    Partitioner     : ' ${ecs_bindir}/cs_partition     >>$summary
 
674
fi
 
675
if [ "$EXEC_KERNEL" = "yes" ] ; then
 
676
  echo '    Executable      : ' $EXE                           >>$summary
 
677
fi
 
678
echo '  ----------------------------------------------------'  >>$summary
 
679
#
 
680
# Execution
 
681
echo
 
682
echo  "  ********************************************"
 
683
echo  "             Starting calculation"
 
684
echo  "  ********************************************"
 
685
echo
 
686
fi
 
687
#
 
688
# Preprocessor start
 
689
#
 
690
if [ "${EXEC_PREPROCESS}" = "yes" ] ; then
 
691
  #
 
692
  ${ecs_bindir}/cs_preprocess --mesh $MESH "--case" $CASE \
 
693
                   $COMMAND_REORIENT $COMMAND_JOIN $COMMAND_PERIO \
 
694
                   > listpre 2>&1
 
695
  if [ $? != 0 ] ; then
 
696
    echo "Error running the preprocessor."
 
697
    echo "Check preprocessor log (listpre) for details."
 
698
    echo
 
699
    PREPROCESS_ERROR=true
 
700
    ERROR=true
 
701
  fi
 
702
  #
 
703
  if [ "${EXEC_KERNEL}" = "no" ] ; then
 
704
    #
 
705
    PREPROCESSOR_OUTPUT_OUT=$RESU/preprocessor_output.$SUFFIX
 
706
    cp preprocessor_output ${PREPROCESSOR_OUTPUT_OUT}
 
707
  fi
 
708
  #
 
709
fi
 
710
#
 
711
# Partitioner start
 
712
#
 
713
if [ ! -f ${ecs_bindir}/cs_partition ] ; then
 
714
  echo "Warning: ${ecs_bindir}/cs_partition not found."
 
715
  echo
 
716
  echo "The partitioner may not have been installed"
 
717
  echo "  (this is the case if neither METIS nor."
 
718
  echo "  SCOTCH are avaialable)."
 
719
  echo
 
720
  echo "Unoptimized partitioning will be used, so"
 
721
  echo "parallel performance may be degraded."
 
722
  echo
 
723
  EXEC_PARTITION=no
 
724
fi
 
725
#
 
726
if [ "${EXEC_PARTITION}" = "yes" ] ; then
 
727
  #
 
728
  if [ "${EXEC_KERNEL}" = "yes" ] ; then
 
729
    ${ecs_bindir}/cs_partition $nproc_kernel > listpart 2>&1
 
730
  else
 
731
    if [ -z "$PARTITION_LIST" ] ; then
 
732
      echo "Error running the partitioner."
 
733
      echo "PARTITION_LIST is not set."
 
734
      echo "This variable should contain the number of processors"
 
735
      echo "for which we partition (or a list of such numbers)."
 
736
      PARTITION_ERROR=true
 
737
      ERROR=true
 
738
    else
 
739
      ${ecs_bindir}/cs_partition $PARTITION_LIST > listpart 2>&1
 
740
    fi
 
741
  fi
 
742
  if [ $? != 0 -a $PARTITION_ERROR = false ] ; then
 
743
    echo "Error running the partitioner."
 
744
    echo "Check partitioner log (listpart) for details."
 
745
    echo
 
746
    PARTITION_ERROR=true
 
747
    ERROR=true
 
748
  fi
 
749
  #
 
750
  if [ "${EXEC_KERNEL}" = "no" ] ; then
 
751
    #
 
752
    PARTITION_OUTPUT_OUT=$RESU/PARTITION_OUTPUT.$SUFFIX
 
753
    mkdir $PARTITION_OUTPUT_OUT
 
754
    cp -r domain_number_* ${PARTITION_OUTPUT_OUT}/
 
755
  fi
 
756
#
 
757
fi
 
758
done
 
759
#
 
760
# Run calculation proper.
 
761
#
 
762
if [ "$ERROR" != "true" -a "$EXEC_KERNEL" = "yes" ] ; then
 
763
#
 
764
NB_TOT=0
 
765
I=0
 
766
while [ $I -lt $NB_INSTANCES ]; do
 
767
    (( I=I+1 ))
 
768
    cur_dir=$RUN/RUN.$I
 
769
 
 
770
    COMMAND_CWF=`eval echo '$COMMANDE_CWF_'$I`
 
771
    NUMBER_OF_PROCESSORS=`eval echo '$NUMBER_OF_PROCESSORS_'$I`
 
772
    (( NB_TOT=NB_TOT+$NUMBER_OF_PROCESSORS ))
 
773
    #
 
774
    cd $RUN
 
775
 
 
776
    RUNCS="$VALGRIND $cur_dir/$EXE --mpi $I \
 
777
           $COMMAND_CWF $ARG_CS_VERIF $ARG_CS_OUTPUT $COMMAND_PARAM"
 
778
    CMD="cd $cur_dir && $RUNCS"
 
779
 
 
780
    # MPI Communication
 
781
    #
 
782
    # Make sure to transmit possible additional arguments assigned by mpirun to
 
783
    # the executable with some MPI-1 implementations (vanilla MPICH 1.2 sets the
 
784
    # parameters needed by MPI_Init through argc/argv): we use $@ to forward
 
785
    # arguments passed to localexec to the true executable files.
 
786
    #
 
787
    localexec=$RUN/localexec
 
788
    if [ $I -eq 1 ]; then
 
789
    echo '#!/bin/sh' > $localexec
 
790
    echo "MPI_RANK=\`${pkgdatadir}/runcase_mpi_rank \$@\`" >> $localexec
 
791
    echo "if [ \$MPI_RANK -lt $NB_TOT ] ; then" >> $localexec
 
792
    echo "  $CMD" >> $localexec
 
793
    elif [ $I -lt $NB_INSTANCES ]; then
 
794
    echo "elif [ \$MPI_RANK -lt $NB_TOT ] ; then" >> $localexec
 
795
    echo "  $CMD" >> $localexec
 
796
    else
 
797
    echo "else" >> $localexec
 
798
    echo "  $CMD" >> $localexec
 
799
    echo "fi" >> $localexec
 
800
    fi
 
801
    chmod 700 $localexec
 
802
 
 
803
done
 
804
 
 
805
$MPIBOOT
 
806
$MPIRUN $localexec || EXECUTION_ERROR=true
 
807
$MPIHALT
 
808
 
 
809
fi
 
810
#
 
811
########################################################################
 
812
#
 
813
# Treatment of the ouput files:
 
814
#   Starts with the restart files
 
815
#   (in case of full disk, increases chances of being able to continue).
 
816
#
 
817
I=0
 
818
while [ $I -lt $NB_INSTANCES ]; do
 
819
 (( I=I+1 ))
 
820
#
 
821
  SUFFIX=$I.$DATE
 
822
#
 
823
  cur_dir=$RUN/RUN.$I
 
824
  cd $cur_dir
 
825
 
 
826
  USER_OUTPUT_FILES=`eval echo '$USER_OUTPUT_FILES_'$I`
 
827
 
 
828
if [ $EXEC_KERNEL = yes ] ; then
 
829
 
 
830
  RESTART_OUT=$RESU/RESTART.$SUFFIX
 
831
  iok=1
 
832
  mkdir ${RESTART_OUT} || iok=0
 
833
  if [ $iok = 1 ] ; then
 
834
    for f in suiava suiavx t1dava ctwava vorava rayava lagava* lasava* ; do
 
835
      if [ -f $f ] ; then
 
836
        cp $f ${RESTART_OUT}
 
837
      fi
 
838
    done
 
839
  else
 
840
    for f in suiava suiavx t1dava ctwava vorava rayava lagava* lasava* ; do
 
841
      if [ -f $f ] ; then
 
842
        cp $f $RESU/$f.$SUFFIX
 
843
      fi
 
844
    done
 
845
  fi
 
846
 
 
847
  resuser=0
 
848
  for f in ${USER_OUTPUT_FILES} ; do
 
849
    if [ -f $f ] ; then
 
850
      resuser=1
 
851
    fi
 
852
  done
 
853
  if [ ${resuser} = 1 ] ; then
 
854
    RES_USER=$RESU/RES_USER.$SUFFIX
 
855
    iok=1
 
856
    mkdir ${RES_USER} || iok=0
 
857
    if [ $iok = 1 ] ; then
 
858
      for f in ${USER_OUTPUT_FILES} ; do
 
859
        if [ -f $f ] ; then
 
860
          cp $f ${RES_USER}
 
861
        fi
 
862
      done
 
863
    else
 
864
      for f in ${USER_OUTPUT_FILES} ; do
 
865
        if [ -f $f ] ; then
 
866
          cp $f $RESU/$f.$SUFFIX
 
867
        fi
 
868
      done
 
869
    fi
 
870
  fi
 
871
 
 
872
  for f in $PARAM $THERMOCHEMISTRY_DATA $METEO_DATA ; do
 
873
    if [ -f $f ] ; then
 
874
      cp $f $RESU/$f.$SUFFIX
 
875
    fi
 
876
  done
 
877
 
 
878
  for f in probes_*.dat ; do
 
879
    if [ -f $f ] ; then
 
880
      if [ ! -d $RESU/HIST.$SUFFIX ] ; then
 
881
        mkdir $RESU/HIST.$SUFFIX
 
882
      fi
 
883
      cp $f $RESU/HIST.$SUFFIX
 
884
    fi
 
885
  done
 
886
  for f in ush* ; do
 
887
    if [ -f $f ] ; then
 
888
      if [ ! -d $RESU/HIST.$SUFFIX ] ; then
 
889
        mkdir $RESU/HIST.$SUFFIX
 
890
      fi
 
891
      cp $f $RESU/HIST.$SUFFIX
 
892
    fi
 
893
  done
 
894
 
 
895
fi  # output files
 
896
 
 
897
for f in list* error* *.med *.cgns ; do
 
898
  if [ -f $f ] ; then
 
899
    cp $f $RESU/$f.$SUFFIX
 
900
  fi
 
901
done
 
902
 
 
903
# Treatment of EnSight and MED files
 
904
#   The $dir (=*.ensight and/or *.med) directories are copied
 
905
#   to $DIR.$SUFFIX
 
906
 
 
907
#   We place directories $dir (=*.ensight and/or *.med)
 
908
#   in $DIR.$SUFFIX
 
909
 
 
910
cas=`echo $CASE |tr "[:upper:]" "[:lower:]"`
 
911
 
 
912
for dir in *.ensight *.med ; do
 
913
  if [ -d $dir ] ; then
 
914
    DIR=`echo $dir |tr "[:lower:]" "[:upper:]"`
 
915
    mkdir $RESU/$DIR.$SUFFIX
 
916
    if [ $? -ne 0 ] ; then
 
917
      echo Creating $RESU/$DIR.$SUFFIX failed
 
918
    else
 
919
      for f in $dir/*  ; do
 
920
        if [ -f $f ] ; then
 
921
          cp -R ${f} $RESU/$DIR.$SUFFIX/.
 
922
        fi
 
923
      done
 
924
    fi
 
925
  fi
 
926
done
 
927
 
 
928
if [ $EXEC_KERNEL = yes ] ; then
 
929
 
 
930
  rayt_list=`ls bord* 2>/dev/null`
 
931
  if [ ! -z "${rayt_list}" ] ; then
 
932
    for f in $rayt_list ; do
 
933
      if [ ! -d $RESU/CHR.$SUFFIX ] ; then
 
934
        mkdir $RESU/CHR.$SUFFIX
 
935
      fi
 
936
      cp $f $RESU/CHR.$SUFFIX/.
 
937
    done
 
938
  fi
 
939
 
 
940
  lagr_list=`ls debug* deplacement* trajectoire* frontiere* 2>/dev/null`
 
941
  if [ ! -z "${lagr_list}" ] ; then
 
942
    mkdir $RESU/LAGR.$SUFFIX
 
943
    for f in $lagr_list ; do
 
944
      cp $f $RESU/LAGR.$SUFFIX
 
945
    done
 
946
  fi
 
947
 
 
948
  # Matisse output files
 
949
  if [ -f ${RUN}/resuMatisse ] ; then
 
950
    matisse=`grep -i matisse $DATA/$PARAM`
 
951
    if [ ! -z "$matisse" ] ; then
 
952
  # The date is added to the first line of resuMatisse
 
953
      AFDATE="Date of the case                                       : "$DATE
 
954
      sed  "1i\ ${AFDATE}" ${RUN}/resuMatisse >> ${RUN}/resuMatisse.mod
 
955
      mv ${RUN}/resuMatisse.mod ${RUN}/resuMatisse
 
956
    fi
 
957
    cp ${RUN}/resuMatisse ${RESU}/resuMatisse.$SUFFIX
 
958
  fi
 
959
 
 
960
  for dir in src_saturne ; do
 
961
    if [ -d $dir ] ; then
 
962
      mkdir $RESU/SRC.$SUFFIX
 
963
      if [ $? -ne 0 ] ; then
 
964
        echo Failure creating $RESU/SRC.$SUFFIX
 
965
      else
 
966
        for f in $dir/*.[fF]90 $dir/*.[ch] ; do
 
967
          if [ -f ${f} ] ; then
 
968
            cp -R ${f} $RESU/SRC.$SUFFIX/.
 
969
            fbase=`basename ${f}`
 
970
            chmod a-w $RESU/SRC.$SUFFIX/${fbase}
 
971
          fi
 
972
        done
 
973
      fi
 
974
    fi
 
975
  done
 
976
 
 
977
fi  # input data and outputs
 
978
done
 
979
#
 
980
########################################################################
 
981
#
 
982
# Summary: end
 
983
#
 
984
if  [ "$PREPROCESS_ERROR" = "true" ] ; then
 
985
  EXEC_PREPROCESS="failed"
 
986
fi
 
987
echo "    Preprocessing   : " $EXEC_PREPROCESS                 >>$summary
 
988
if  [ "$PARTITION_ERROR" = "true" ] ; then
 
989
  EXEC_PARTITION="failed"
 
990
fi
 
991
echo "    Partitioning    : " $EXEC_PARTITION                  >>$summary
 
992
if  [ "$EXECUTION_ERROR" = "true" ] ; then
 
993
  EXEC_KERNEL="failed"
 
994
fi
 
995
echo "    Calculation     : " $EXEC_KERNEL                     >>$summary
 
996
#
 
997
CURDATE=`unset LANG ; date`
 
998
#
 
999
echo '  ----------------------------------------------------'  >>$summary
 
1000
echo '   Finish time      : ' $CURDATE                         >>$summary
 
1001
echo '========================================================'>>$summary
 
1002
#
 
1003
cp $summary  $RESU/$summary.$SUFFIX
 
1004
#
 
1005
########################################################################
 
1006
#
 
1007
#
 
1008
# Finish
 
1009
#
 
1010
echo
 
1011
echo  "  ********************************************"
 
1012
if [ "$EXECUTION_ERROR" = "true" ] ; then
 
1013
  echo  "         Error in calculation stage."
 
1014
elif  [ "$PARTITION_ERROR" = "true" ] ; then
 
1015
  echo  "         Error in partitioning stage."
 
1016
elif  [ "$PREPROCESS_ERROR" = "true" ] ; then
 
1017
  echo  "         Error in preprocessing stage."
 
1018
else
 
1019
  echo  "           Normal simulation finish"
 
1020
fi
 
1021
echo  "  ********************************************"
 
1022
 
 
1023
if [ "$ERROR" = "true" ] ; then
 
1024
  exit 1
 
1025
else
 
1026
  exit 0
 
1027
fi
 
1028
#
 
1029
########################################################################