source: trunk/LMDZ.COMMON/makelmdz_fcm @ 2967

Last change on this file since 2967 was 2967, checked in by emillour, 18 months ago

Generic PCM:
Adapt makelmdz_fcm to add to executable name "_bVISxIR" when option
-b VISxIR is used.
While at it remove obsolete script "makegcm".
EM

File size: 22.5 KB
Line 
1#!/bin/bash
2# $Id: makelmdz_fcm 1615 2012-02-10 15:42:26Z emillour $
3# This is a script in Bash to compile the GCM and related tools
4#
5##set -x
6set -e
7########################################################################
8# options par defaut pour la commande make
9########################################################################
10
11dim="96x72x19"
12physique=lmd
13filtre=filtrez
14grille=reg
15couple=false
16veget=false
17sisvat=false
18rrtm=false
19dust=false
20strataer=false
21chimie=false
22chemistry=false
23parallel=none
24paramem="par"
25compil_mod=prod
26io=ioipsl
27LIBPREFIX=""
28cosp=false
29bands=""
30scatterers=""
31job=1
32full=''
33libphy=false
34
35arch_defined="FALSE"
36arch_path="arch"
37arch_default_path="arch"
38
39LMDGCM=`/bin/pwd`
40LIBOGCM=$LMDGCM/libo
41LIBFGCM=$LMDGCM/libf
42DYN_COMMON_PATH=$LIBFGCM/dyn3d_common
43# path for optional packages, but default set to ".void_dir"
44FILTRE_PATH=$LMDGCM/.void_dir
45DYN_PHYS_PATH=$LMDGCM/.void_dir
46DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
47PHY_COMMON_PATH=$LMDGCM/.void_dir
48RRTM_PATH=$LMDGCM/.void_dir
49DUST_PATH=$LMDGCM/.void_dir
50STRATAER_PATH=$LMDGCM/.void_dir
51SISVAT_PATH=$LMDGCM/.void_dir
52COSP_PATH=$LMDGCM/.void_dir
53CHEM_PATH=$LMDGCM/.void_dir
54CLOUD_PATH=$LMDGCM/.void_dir
55MUPHY_PATH=$LMDGCM/.void_dir
56AERONO_PATH=$LMDGCM/.void_dir
57EVOLUTION_PATH=$LMDGCM/.void_dir
58# Path to fcm utility:
59##fcm_path=$LMDGCM/tools/fcm/bin
60##fcm_path=/planeto/mturbet/planeto2-mturbet/FCM_V1.2/bin
61fcm_path=$(dirname $(which fcm))
62
63########################################################################
64#  Quelques initialisations de variables du shell.
65########################################################################
66
67CPP_KEY="" 
68INCLUDE_DIR=""
69LIB=""
70adjnt=""
71COMPIL_FFLAGS="%PROD_FFLAGS"
72PARA_FFLAGS=""
73PARA_LD=""
74EXT_SRC=""
75
76########################################################################
77# lecture des options de mymake
78########################################################################
79
80while (($# > 0))
81  do
82  case $1 in
83      "-h") cat <<fin
84Usage :
85makelmdz_fcm [options] -arch arch_name exec
86[-h]                       : brief help
87[-d [[IMx]JMx]LM]          : IM, JM, LM are the dimensions in x, y, z (default: $dim)
88[-s nscat]                 : (Generic) Number of radiatively active scatterers
89[-b IRxVIS]                : (Generic) Number of infrared (IR) and visible (VIS) bands for radiative transfer
90[-p PHYS]                  : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
91[-prod / -dev / -debug]    : compilation mode production (default) / developement / debug .
92[-c false/MPI1/OMCT]       : (Earth) coupling with ocean model : MPI1/OMCT/false (default: false)
93[-v false/orchidee2.0/orchidee1.9/true] : (Earth) version of the vegetation model to include (default: false)
94          false       : no vegetation model
95          orchidee2.0 : compile using ORCHIDEE 2.0 (or more recent version)
96          orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
97          true        : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
98[-chimie INCA/false]       : (Earth) with INCA chemistry model or without (default: false)
99[-cosp true/false]         : (Earth) add the cosp model (default: false)
100[-sisvat true/false]  : (Earth) compile with/without sisvat package (default: false)
101[-rrtm true/false]    : (Earth) compile with/without rrtm package (default: false)
102[-dust true/false]    : (Earth) compile with/without the dust package by Boucher and co (default: false)
103[-strataer true/false]    : (Earth) compile with/without the strat aer package by Boucher and co (default: false)
104[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
105[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
106[-io ioipsl/mix/xios]                   : Input/Output library (default: ioipsl)
107[-include INCLUDES]        : extra include path to add
108[-cpp CPP_KEY]             : additional preprocessing definitions
109[-adjnt]                   : adjoint model, not operational ...
110[-mem]                     : reduced memory dynamics (if in parallel mode)
111[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
112[-link LINKS]              : additional links with other libraries
113[-j n]                     : active parallel compiling on ntask
114[-full]                    : full (re-)compilation (from scratch)
115[-libphy]                  : only compile physics package (no dynamics or main program)
116[-fcm_path path]           : path to the fcm tool (default: tools/fcm/bin)
117[-ext_src path]            : path to an additional set of routines to compile with the model
118[-arch_path path]          : path to architecture files (default: $arch_default_path)
119 -arch arch                : target architecture
120 exec                      : executable to build
121fin
122          exit;;
123
124      "-d")
125          dim=$2 ; shift ; shift ;;
126     
127      "-p")
128          physique="$2" ;  shift ; shift ;;
129
130      "-s")
131          scatterers=$2 ; shift ; shift ;;
132
133      "-b")
134          bands=$2 ; shift ; shift ;;
135
136      "-g")
137          grille="$2" ; shift ; shift ;;
138
139      "-c")
140          couple="$2" ; shift ; shift ;;
141
142      "-prod")
143          compil_mod="prod" ; shift ;;
144
145      "-dev")
146          compil_mod="dev" ; shift ;;
147
148      "-debug")
149          compil_mod="debug" ; shift ;;
150
151      "-io")
152          io="$2" ; shift ; shift ;;
153
154      "-v")
155          veget="$2" ; shift ; shift ;;
156
157      "-sisvat")
158          sisvat="$2" ; shift ; shift ;;
159
160      "-rrtm")
161          rrtm="$2" ; shift ; shift ;;
162
163      "-dust")
164          dust="$2" ; shift ; shift ;;
165
166      "-strataer")
167          strataer="$2" ; shift ; shift ;;
168
169      "-chimie")
170          chimie="$2" ; shift ; shift ;;
171
172      "-parallel")
173          parallel="$2" ; shift ; shift ;;
174     
175      "-include")
176          INCLUDE_DIR="$INCLUDE_DIR -I$2" ; shift ; shift ;;
177
178      "-cpp")
179          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
180
181      "-adjnt")
182          echo "not operational ... work to be done here ";exit
183          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
184          optim="$optim -Dadj" ; shift ;;
185
186      "-cosp")
187          cosp="$2" ; shift ; shift ;;
188
189      "-mem")
190          paramem="mem" ; shift ;;
191
192      "-filtre")
193          filtre=$2 ; shift ; shift ;;
194
195      "-link")
196          LIB="$LIB $2" ; shift ; shift ;;
197
198      "-fcm_path")
199          fcm_path=$2 ; shift ; shift ;;
200
201      "-ext_src")
202          EXT_SRC=$2 ; shift ; shift ;;
203
204      "-j")
205          job=$2 ; shift ; shift ;;
206
207      "-full")
208          full="-full" ; shift ;;
209
210      "-libphy")
211          libphy="true" ; shift ;;
212
213      "-arch")
214          arch=$2 ; arch_defined="TRUE" ; shift ; shift ;;
215
216      "-arch_path")
217          arch_path=$2 ; arch_path_defined="TRUE"; shift ; shift ;;
218
219      *)
220          code="$1" ; shift ;;
221  esac
222done
223
224###############################################################
225# path to fcm
226###############################################################
227# handle case when provided path to fcm was given as a relative
228# path (from makelmdz_fcm script directory) and not an absolute path
229if [[ ${fcm_path:0:1} != "/" ]] ; then
230  # prepend with makelmdz_fcm location
231  fcm_path=$(cd $(dirname $0) ; pwd)"/"${fcm_path}
232fi
233
234# add fcm_path to PATH
235export PATH=${fcm_path}:${PATH}
236
237echo "Path to fcm:"
238echo ${fcm_path}
239
240#################################
241# setup arch.env and arch.path  #
242#################################
243rm -f .void_file
244echo > .void_file
245rm -rf .void_dir
246mkdir .void_dir
247
248if [[ "$arch_defined" == "TRUE" ]]
249then
250  rm -f arch.path
251  rm -f arch.env
252
253  if test -f $arch_path/arch-${arch}.path
254  then
255    ln -s $arch_path/arch-${arch}.path arch.path
256  elif test -f $arch_default_path/arch-${arch}.path
257  then
258    ln -s $arch_default_path/arch-${arch}.path arch.path
259  fi
260       
261  if test -f $arch_path/arch-${arch}.env
262  then
263    ln -s $arch_path/arch-${arch}.env arch.env
264  elif test -f $arch_default_path/arch-${arch}.env
265  then
266    ln -s $arch_default_path/arch-${arch}.env arch.env
267  else
268    ln -s .void_file arch.env
269  fi
270  # source architecture PATH and ENV files
271  source arch.env
272  source arch.path
273else
274  echo "You must define a target architecture"
275  exit 1
276fi
277
278########################################################################
279# Definition des clefs CPP, des chemins des includes et modules
280#  et des libraries
281########################################################################
282
283if [[ "$compil_mod" == "prod" ]]
284then
285  COMPIL_FFLAGS="%PROD_FFLAGS"
286elif [[ "$compil_mod" == "dev" ]]
287then
288  COMPIL_FFLAGS="%DEV_FFLAGS"
289elif [[ "$compil_mod" == "debug" ]]
290then
291  COMPIL_FFLAGS="%DEBUG_FFLAGS"
292fi
293
294phys_root=$physique
295if [[ "${physique:0:3}" == "lmd" ]] ; then phys_root=lmd ; fi
296if [[ "${physique:0:3}" == "mar" ]] ; then phys_root=mar ; fi
297if [[ "${physique:0:4}" == "mars" ]] ; then phys_root=mars ; fi
298if [[ "${physique:0:3}" == "std" ]] ; then phys_root=std ; fi
299if [[ "${physique:0:5}" == "venus" ]] ; then phys_root=venus ; fi
300if [[ "${physique:0:5}" == "titan" ]] ; then phys_root=titan ; fi
301if [[ "${physique:0:3}" == "dev" ]] ; then phys_root=dev ; fi
302
303if [[ "$physique" != "nophys" ]]
304then
305   #We'll use some physics
306   CPP_KEY="$CPP_KEY CPP_PHYS"
307   if [[ "${phys_root}" == "lmd" ]]
308   then
309   #For lmd physics, default planet type is Earth
310   CPP_KEY="$CPP_KEY CPP_EARTH"
311   fi
312   # set physics common utilities path
313   PHY_COMMON_PATH="${LIBFGCM}/phy_common"
314   # set the dyn/phys interface path
315   DYN_PHYS_PATH="${LIBFGCM}/dynphy_lonlat"
316   DYN_PHYS_SUB_PATH="${LIBFGCM}/dynphy_lonlat/phy${phys_root}"
317fi
318
319if [[ "$filtre" == "filtrez" ]]
320then
321   FILTRE_PATH=${LIBFGCM}/$filtre
322fi
323
324if [[ "$chimie" == "INCA" ]]
325then
326   CPP_KEY="$CPP_KEY INCA"
327   INCLUDE_DIR="$INCLUDE_DIR -I${INCA_INCDIR}"
328   LIB="$LIB -L${INCA_LIBDIR} ${INCA_LIB}"
329fi
330
331if [[ "$couple" != "false" ]]
332then
333    if [[ "$couple" == "MPI1" ]]
334    then
335        CPP_KEY="$CPP_KEY CPP_COUPLE"
336        export OASIS_INCDIR=$LMDGCM/../../prism/X64/build/lib/psmile.MPI1
337        export OASIS_LIBDIR=$LMDGCM/../../prism/X64/lib
338        INCLUDE_DIR="$INCLUDE_DIR -I${OASIS_INCDIR}"
339        LIB="$LIB -L${OASIS_LIBDIR} ${OASIS_LIB}"
340    else
341        CPP_KEY="$CPP_KEY CPP_COUPLE CPP_OMCT"
342        INCLUDE_DIR="$INCLUDE_DIR -I${OASIS_INCDIR}"
343        LIB="$LIB -L${OASIS_LIBDIR} ${OASIS_LIB}"
344    fi
345fi
346
347if [[ "$parallel" != "none" && \
348     ( "$code" == "newstart" || "$code" == "start2archive" ) ]]
349then
350    echo "newstart or start2archive utilities should be run in serial!"
351    echo " Compile without -parallel [mpi|omp|mpi_omp] option!"
352    exit
353fi
354
355if [[ "$parallel" == "mpi" ]]
356then
357   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
358   PARA_FFLAGS="%MPI_FFLAGS"
359   PARA_LD="%MPI_LD"
360elif [[ "$parallel" == "omp" ]]
361then
362   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
363   PARA_FFLAGS="%OMP_FFLAGS"
364   PARA_LD="%OMP_LD"
365elif [[ "$parallel" == "mpi_omp" ]]
366then
367   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
368   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
369   PARA_LD="%MPI_LD %OMP_LD"
370fi
371
372if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
373   && "$compil_mod" == "debug" ]]
374then
375    echo "Usually, parallelization with OpenMP requires some optimization."
376    echo "We suggest switching to \"-dev\"."
377fi
378
379if [ "$veget" = "true" -o "$veget" = "orchidee1.9" -o "$veget" = "orchidee2.0" ]
380then
381#NB: option 'true': for backward compatibility. To be used with ORCHIDEE tag 1.9-1.9.6
382#    For this case, cpp flag ORCHIDEE_NOOPENMP must be added to the makelmdz_fcm arguments
383#    option orchidee1.9 : Compile with ORCHIDEE version up to the inclusion of OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
384   INCLUDE_DIR="${INCLUDE_DIR} ${ORCHIDEE_INCDIR}"
385   CPP_KEY="$CPP_KEY CPP_VEGET"
386# temporary, for Orchidee versions 1.9.* (before openmp activation)
387   if [[ "$veget" == "orchidee1.9" ]] ; then
388      CPP_KEY="$CPP_KEY ORCHIDEE_NOOPENMP"
389   fi
390   if [[ "$veget" == "orchidee2.0" ]] ; then
391      orch_libs="sechiba parameters stomate parallel orglob orchidee"
392   else
393      orch_libs="sechiba parameters stomate parallel orglob"
394   fi
395   LIB="${LIB} -L${ORCHIDEE_LIBDIR} ${ORCHIDEE_LIB}"
396elif [[ "$veget" != "false" ]] ; then
397   echo "Option -v $veget does not exist"
398   echo "Use ./makelmdz_fcm -h for more information"
399   exit 
400fi
401
402if [[ "$sisvat" == "true" ]]
403then
404   CPP_KEY="$CPP_KEY CPP_SISVAT"
405   SISVAT_PATH="$LIBFGCM/%PHYS/sisvat"
406fi
407
408if [[ "$rrtm" == "true" ]]
409then
410   CPP_KEY="$CPP_KEY CPP_RRTM"
411   RRTM_PATH="$LIBFGCM/%PHYS/rrtm"
412fi
413
414if [[ "$dust" == "true" ]]
415then
416   CPP_KEY="$CPP_KEY CPP_Dust"
417   DUST_PATH="$LIBFGCM/%PHYS/Dust"
418fi
419
420if [[ "$strataer" == "true" ]]
421then
422   CPP_KEY="$CPP_KEY CPP_StratAer"
423   STRATAER_PATH="$LIBFGCM/%PHYS/StratAer"
424fi
425
426if [[ $io == ioipsl ]]
427then
428   CPP_KEY="$CPP_KEY CPP_IOIPSL"
429   INCLUDE_DIR="$INCLUDE_DIR ${IOIPSL_INCDIR}"
430   LIB="$LIB ${IOIPSL_LIBDIR} ${IOIPSL_LIB}"
431elif [[ $io == mix ]]
432then
433   # For now, xios implies also using ioipsl
434   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS"
435   INCLUDE_DIR="$INCLUDE_DIR ${IOIPSL_INCDIR} ${XIOS_INCDIR}"
436   LIB="$LIB ${IOIPSL_LIBDIR} ${IOIPSL_LIB} ${XIOS_LIBDIR} ${XIOS_LIB}"
437elif [[ $io == xios ]]
438then
439   # For now, xios implies also using ioipsl
440   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS CPP_IOIPSL_NO_OUTPUT"
441   INCLUDE_DIR="$INCLUDE_DIR ${IOIPSL_INCDIR} ${XIOS_INCDIR}"
442   LIB="$LIB ${IOIPSL_LIBDIR} ${IOIPSL_LIB} ${XIOS_LIBDIR} ${XIOS_LIB}"
443fi
444
445if [[ "$cosp" == "true" ]]
446then
447   CPP_KEY="$CPP_KEY CPP_COSP"
448   COSP_PATH="$LIBFGCM/cosp"
449#   LIB="${LIB} -l${LIBPREFIX}cosp"
450fi
451
452# for Titan (but could be used by others as well), there is also "chimtitan"
453if [[ -d ${LIBFGCM}/chim${physique} ]]
454then
455   CHEM_PATH="${LIBFGCM}/chim${physique}"
456   INCLUDE_DIR="$INCLUDE_DIR -I${LIBFGCM}/chim${physique}"
457fi
458
459# for Titan add microphysics dependencies
460if [[ -d ${LIBFGCM}/muphy${physique} ]] ; then
461  if ! [ `echo $CPP_KEY | grep -c "OLD_COMPILO"` -gt 0 ] ; then
462    # add muphy{physique} to the list of files to compile.
463    MUPHY_PATH="${LIBFGCM}/muphy${physique}"
464    # For Titan as we embbed some libraries with CPP keys, we define them:
465    #   -DPREC={32|64|80} real kind precision (32: simple, 64: double, 80: extended double)
466    #   -DHAVE_NC_FTN=1 (mandatory: for support of NetCDF in lintnd).
467    CPP_KEY="$CPP_KEY PREC=64 HAVE_NC_FTN=1"
468    if [[ "${physique}" == "titan" ]] ; then
469      echo "Yaahh you're about to use YAMMS in a GCM..."
470    fi
471  fi
472fi
473
474# for Venus (but could be used by others as well), there is also "phyvenus/cloudvenus"
475if [[ -d ${LIBFGCM}/phy${physique}/cloud${physique} ]]
476then
477   CLOUD_PATH="${LIBFGCM}/phy${physique}/cloud${physique}"
478   INCLUDE_DIR="$INCLUDE_DIR -I${LIBFGCM}/phy${physique}/cloud${physique}"
479fi
480
481# for Mars (but could be used by others as well), there is also "aeronomars"
482if [[ -d ${LIBFGCM}/aerono${physique} ]]
483then
484   AERONO_PATH="${LIBFGCM}/aerono${physique}"
485   INCLUDE_DIR="$INCLUDE_DIR -I${LIBFGCM}/aerono${physique}"
486fi
487
488if [[ -d ${LIBFGCM}/evolution &&  "$code" == "pem" ]]
489then
490   EVOLUTION_PATH="${LIBFGCM}/evolution"
491   INCLUDE="$INCLUDE -I${LIBFGCM}/evolution"
492fi
493
494# NETCDF library include/library paths
495INCLUDE_DIR="$INCLUDE_DIR ${NETCDF_INCDIR}"
496LIB="$LIB ${NETCDF_LIBDIR} ${NETCDF_LIB}"
497
498########################################################################
499# calcul du nombre de dimensions
500########################################################################
501
502
503dim_full=$dim
504dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
505set $dim
506dimc=$#
507echo calcul de la dimension
508echo dim $dim
509echo dimc $dimc
510
511
512########################################################################
513# Gestion des dimensions du modele.
514# on cree ou remplace le fichier des dimensions
515########################################################################
516
517cd $LIBFGCM/grid
518if [[ -f dimensions.h ]]
519then
520  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
521  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
522  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
523  echo  vous pouvez continuer en repondant oui.
524  echo "Voulez-vous vraiment continuer?"
525  echo ""
526  echo "WARNING: you are probably already compiling the model somewhere else."
527  echo "Wait until the first compilation is finished before launching this one."
528  echo "If you are sure that you are not compiling elsewhere, just answer "
529  echo "yes (or 'oui') to the question below to proceed."
530  echo "Do you wish to continue?"
531  read reponse
532  if [[ $reponse == "oui" || $reponse == "yes" ]]
533  then
534    \rm -f $LIBFGCM/grid/dimensions.h
535  else
536    exit
537  fi
538fi
539
540
541cd $LIBFGCM/grid/dimension
542./makdim $dim
543if (($? != 0))
544then
545    exit 1
546fi
547
548cat $LIBFGCM/grid/dimensions.h
549cd $LMDGCM
550
551if [[ "$bands" != "" ]]
552then
553  # Generic model, recreate bands.h (IR & VIS bands for radiative transfer)
554  makbandsarg=$(echo $bands | sed -e 's/[^0-9]/ /g')
555  cd $LIBFGCM/phy$physique/bands
556  ./makbands $makbandsarg
557  cat $LIBFGCM/phy$physique/bands.h
558  cd $LMDGCM
559fi
560
561if [[ "$scatterers" != "" ]]
562then
563  if [[ -f $LIBFGCM/phy$physique/scatterers/make_scatterers ]]
564  then
565    # Generic model, recreate scatterers.h
566    cd $LIBFGCM/phy$physique/scatterers
567    ./make_scatterers $scatterers
568    cat $LIBFGCM/phy$physique/scatterers.h
569    cd $LMDGCM
570  else
571    echo "Error: you should not use the -s # option with -p $physique"
572    exit
573  fi
574fi
575
576
577########################################################################
578# Differentes dynamiques (3d, 2d, 1d)
579########################################################################
580
581dimension=`echo $dim | wc -w`
582echo dimension $dimension
583
584if (( $dimension == 3 ))
585then
586  cd $LIBFGCM/grid
587  \rm fxyprim.h
588  cp -p fxy_${grille}.h fxyprim.h
589#else
590#  echo "Probleme dans les dimensions de la dynamique !!"
591#  echo "Non reactive pour l'instant !!!"
592fi
593
594if (( $dimension == 1 ))
595then
596## Sanity check: 1D models should be used in serial
597  if [[ $parallel != "none" ]]
598  then
599    echo "Error: a 1D model should not be compiled with "
600    echo "       -parallel [mpi|omp|mpi_omp] option!"
601    exit
602  fi
603  CPP_KEY="$CPP_KEY CPP_1D"
604##in 1D, add dyn3d to include path (because main prog is in physics)
605  INCLUDE_DIR="$INCLUDE_DIR -Ilibf/dyn3d -Ilibf/dyn3d_common"
606## no filtre in 1d:
607  FILTRE_PATH=$LMDGCM/.void_dir
608## no need to compile all routines in dyn3d_common either:
609  DYN_COMMON_PATH=$LMDGCM/.void_dir
610## no need to compile all routines in dynlmdz_phy... ;
611## (because key ones are included in 1D main program)
612  DYN_PHYS_PATH=$LMDGCM/.void_dir
613  DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
614fi
615
616######################################################################
617#   Traitement special pour le nouveau rayonnement de Laurent Li.
618#   ---> YM desactive pour le traitemement en parallele
619######################################################################
620
621#if [[ -f $libf/phy$physique/raddim.h ]]
622#then
623# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
624#then
625#  \rm -f $libf/phy$physique/raddim.h
626#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
627#  echo $libf/phy$physique/raddim.$dimh.h
628#  cat $libf/phy$physique/raddim.h
629# else
630#  echo On peut diminuer la taille de l executable en creant
631#  echo le fichier $libf/phy$physique/raddim.$dimh.h
632#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
633# fi
634#fi
635
636######################################################################
637# Gestion du filtre qui n'existe qu'en 3d.
638######################################################################
639
640if (( `expr $dimc \> 2` == 1 ))
641then
642   filtre="FILTRE=$filtre"
643else
644   filtre="FILTRE= L_FILTRE= "
645fi
646echo MACRO FILTRE $filtre
647
648echo $dimc
649
650
651
652######################################################################
653# Creation du suffixe de la configuration
654######################################################################
655
656
657SUFF_NAME=_${dim_full}
658SUFF_NAME=${SUFF_NAME}_phy${physique}
659
660if [[ "$bands" != "" ]]
661then
662  #if bands option -b VISxIR is used, add "_bVISxIR" to executable name
663  SUFF_NAME=${SUFF_NAME}_b$bands
664fi
665
666if [[ "$parallel" != "none" ]]
667then
668  SUFF_NAME=${SUFF_NAME}_para
669  DYN=dyn${dimc}d${paramem}
670  if [[ "$paramem" == "mem" ]]
671  then
672   SUFF_NAME=${SUFF_NAME}_${paramem}
673  fi
674else
675  SUFF_NAME=${SUFF_NAME}_seq
676  if (( $dimension == 1 ))
677  then
678    # dynamics-related routines in"dyn1d" subdirectory of phy${physique}
679    DYN=phy${physique}/dyn1d
680  else
681    DYN=dyn${dimc}d
682  fi
683fi
684
685if [[ $veget != "false" ]]
686then
687  SUFF_NAME=${SUFF_NAME}_orch
688fi
689
690if [[ $couple != "false" ]]
691then
692  SUFF_NAME=${SUFF_NAME}_couple
693fi
694
695if [[ $chimie == "INCA" ]]
696then
697  SUFF_NAME=${SUFF_NAME}_inca
698fi
699
700if [[ $libphy == "true" ]]
701then
702  # special case where we compile only the physics
703  DYN=$LMDGCM/.void_dir
704  DYN_COMMON_PATH=$LMDGCM/.void_dir
705  FILTRE_PATH=$LMDGCM/.void_dir
706  DYN_PHYS_PATH=$LMDGCM/.void_dir
707  DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
708  #and there is no main program to generate
709  code=""
710  SUFF_NAME=""
711else
712  SUFF_NAME=${SUFF_NAME}.e
713fi
714
715cd $LMDGCM
716config_fcm="config.fcm"
717rm -f $config_fcm
718touch $config_fcm
719
720echo "%ARCH          $arch"          >> $config_fcm
721echo "%INCDIR        $INCLUDE_DIR"       >> $config_fcm 
722echo "%LIB           $LIB"           >> $config_fcm
723echo "%ROOT_PATH     $PWD"           >> $config_fcm
724echo "%LIBF          $LIBFGCM"       >> $config_fcm
725echo "%LIBO          $LIBOGCM"       >> $config_fcm
726echo "%DYN           $DYN"           >> $config_fcm
727echo "%DYN_COMMON    $DYN_COMMON_PATH" >> $config_fcm
728echo "%PHY_COMMON    $PHY_COMMON_PATH" >> $config_fcm
729echo "%FILTRE        $FILTRE_PATH"   >> $config_fcm
730echo "%PHYS          phy${physique}" >> $config_fcm
731echo "%DYN_PHYS      $DYN_PHYS_PATH" >> $config_fcm
732echo "%DYN_PHYS_SUB  $DYN_PHYS_SUB_PATH" >> $config_fcm
733echo "%RRTM          $RRTM_PATH"     >> $config_fcm
734echo "%DUST          $DUST_PATH"     >> $config_fcm
735echo "%STRATAER      $STRATAER_PATH" >> $config_fcm
736echo "%SISVAT        $SISVAT_PATH"   >> $config_fcm
737echo "%COSP          $COSP_PATH"     >> $config_fcm
738echo "%CHEM          $CHEM_PATH"     >> $config_fcm
739echo "%CLOUD         $CLOUD_PATH"    >> $config_fcm
740echo "%MUPHY         $MUPHY_PATH"    >> $config_fcm
741echo "%AERONO        $AERONO_PATH"   >> $config_fcm
742echo "%EVOLUTION     $EVOLUTION_PATH"  >> $config_fcm
743echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
744echo "%EXEC          $code"          >> $config_fcm
745echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
746echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
747echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
748echo "%PARA_LD       $PARA_LD"       >> $config_fcm
749echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
750
751# setup arch.fcm and arch.opt
752rm -f arch.fcm
753rm -f arch.opt
754ln -s arch/arch-${arch}.fcm arch.fcm
755if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
756  then
757  ln -s arch/arch-${arch}.opt arch.opt
758else
759  ln -s .void_file arch.opt
760fi
761
762# cleanup before compiling
763rm -f bin/${code}${SUFF_NAME}.e
764rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
765./build_gcm ${fcm_path} -j $job $full
766
767rm -rf tmp_src
768rm -rf config
769ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
770ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/ppsrc tmp_src
771
772
773if [[ -r $LIBFGCM/grid/dimensions.h ]]
774then
775  # Cleanup: remove dimension.h file
776  \rm -f $LIBFGCM/grid/dimensions.h
777fi
Note: See TracBrowser for help on using the repository browser.