source: trunk/LMDZ.COMMON/makelmdz_fcm @ 3493

Last change on this file since 3493 was 3484, checked in by afalco, 5 weeks ago

ICOSA_LMDZ: overall compilation stops when compilation of a module fails.
Errors from internal calls in compilation scripts are transferred to the scripts above.
AF

File size: 23.5 KB
RevLine 
[1]1#!/bin/bash
[847]2# $Id: makelmdz_fcm 1615 2012-02-10 15:42:26Z emillour $
[2339]3# This is a script in Bash to compile the GCM and related tools
[1]4#
5##set -x
[2339]6set -e
[1]7########################################################################
8# options par defaut pour la commande make
9########################################################################
10
11dim="96x72x19"
12physique=lmd
13filtre=filtrez
14grille=reg
15couple=false
16veget=false
[1300]17sisvat=false
[1302]18rrtm=false
[1650]19dust=false
20strataer=false
[1]21chimie=false
[895]22chemistry=false
[1]23parallel=none
[979]24paramem="par"
[1]25compil_mod=prod
26io=ioipsl
27LIBPREFIX=""
28cosp=false
[957]29bands=""
30scatterers=""
[1019]31job=1
32full=''
[1540]33libphy=false
[1]34
[1650]35arch_defined="FALSE"
36arch_path="arch"
37arch_default_path="arch"
38
[1]39LMDGCM=`/bin/pwd`
40LIBOGCM=$LMDGCM/libo
41LIBFGCM=$LMDGCM/libf
[1403]42DYN_COMMON_PATH=$LIBFGCM/dyn3d_common
[895]43# path for optional packages, but default set to ".void_dir"
[1403]44FILTRE_PATH=$LMDGCM/.void_dir
45DYN_PHYS_PATH=$LMDGCM/.void_dir
46DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
[1521]47PHY_COMMON_PATH=$LMDGCM/.void_dir
[1302]48RRTM_PATH=$LMDGCM/.void_dir
[1650]49DUST_PATH=$LMDGCM/.void_dir
50STRATAER_PATH=$LMDGCM/.void_dir
[1302]51SISVAT_PATH=$LMDGCM/.void_dir
[1]52COSP_PATH=$LMDGCM/.void_dir
[895]53CHEM_PATH=$LMDGCM/.void_dir
[1661]54CLOUD_PATH=$LMDGCM/.void_dir
[1793]55MUPHY_PATH=$LMDGCM/.void_dir
[1107]56AERONO_PATH=$LMDGCM/.void_dir
[2778]57EVOLUTION_PATH=$LMDGCM/.void_dir
[895]58# Path to fcm utility:
[1019]59##fcm_path=$LMDGCM/tools/fcm/bin
[1860]60##fcm_path=/planeto/mturbet/planeto2-mturbet/FCM_V1.2/bin
[1841]61fcm_path=$(dirname $(which fcm))
[1]62
63########################################################################
64#  Quelques initialisations de variables du shell.
65########################################################################
66
[3471]67CPP_KEY=""
[2645]68INCLUDE_DIR=""
[1]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 :
[2339]85makelmdz_fcm [options] -arch arch_name exec
[957]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 .
[1650]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)
[1019]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
[957]98[-chimie INCA/false]       : (Earth) with INCA chemistry model or without (default: false)
[2339]99[-cosp true/false]         : (Earth) add the cosp model (default: false)
[1403]100[-sisvat true/false]  : (Earth) compile with/without sisvat package (default: false)
101[-rrtm true/false]    : (Earth) compile with/without rrtm package (default: false)
[1650]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)
[957]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)
[1391]106[-io ioipsl/mix/xios]                   : Input/Output library (default: ioipsl)
[957]107[-include INCLUDES]        : extra include path to add
108[-cpp CPP_KEY]             : additional preprocessing definitions
109[-adjnt]                   : adjoint model, not operational ...
[979]110[-mem]                     : reduced memory dynamics (if in parallel mode)
[957]111[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
112[-link LINKS]              : additional links with other libraries
[1019]113[-j n]                     : active parallel compiling on ntask
[1107]114[-full]                    : full (re-)compilation (from scratch)
[2339]115[-libphy]                  : only compile physics package (no dynamics or main program)
[957]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
[1650]118[-arch_path path]          : path to architecture files (default: $arch_default_path)
[3471]119 -arch arch                : target architecture
[957]120 exec                      : executable to build
[1]121fin
122          exit;;
123
124      "-d")
125          dim=$2 ; shift ; shift ;;
[3471]126
[1]127      "-p")
128          physique="$2" ;  shift ; shift ;;
129
[957]130      "-s")
131          scatterers=$2 ; shift ; shift ;;
132
133      "-b")
134          bands=$2 ; shift ; shift ;;
135
[1]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
[1300]157      "-sisvat")
158          sisvat="$2" ; shift ; shift ;;
159
[1302]160      "-rrtm")
161          rrtm="$2" ; shift ; shift ;;
162
[1650]163      "-dust")
164          dust="$2" ; shift ; shift ;;
165
166      "-strataer")
167          strataer="$2" ; shift ; shift ;;
168
[1]169      "-chimie")
170          chimie="$2" ; shift ; shift ;;
171
172      "-parallel")
173          parallel="$2" ; shift ; shift ;;
[3471]174
[1]175      "-include")
[2645]176          INCLUDE_DIR="$INCLUDE_DIR -I$2" ; shift ; shift ;;
[1]177
178      "-cpp")
179          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
180
181      "-adjnt")
[3484]182          echo "not operational ... work to be done here ";exit 1
[1]183          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
184          optim="$optim -Dadj" ; shift ;;
185
186      "-cosp")
187          cosp="$2" ; shift ; shift ;;
188
[979]189      "-mem")
190          paramem="mem" ; shift ;;
[1]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
[1019]204      "-j")
205          job=$2 ; shift ; shift ;;
206
207      "-full")
208          full="-full" ; shift ;;
209
[1540]210      "-libphy")
211          libphy="true" ; shift ;;
212
[1]213      "-arch")
[1650]214          arch=$2 ; arch_defined="TRUE" ; shift ; shift ;;
[1]215
[1650]216      "-arch_path")
217          arch_path=$2 ; arch_path_defined="TRUE"; shift ; shift ;;
218
[1]219      *)
220          code="$1" ; shift ;;
221  esac
222done
223
224###############################################################
[3471]225# path to fcm
[1]226###############################################################
[979]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
[847]235export PATH=${fcm_path}:${PATH}
[1]236
[979]237echo "Path to fcm:"
238echo ${fcm_path}
[1]239
[2339]240#################################
241# setup arch.env and arch.path  #
242#################################
[1]243rm -f .void_file
244echo > .void_file
245rm -rf .void_dir
246mkdir .void_dir
247
[1650]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
[3471]260
[1650]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
[1]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
[1403]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
[1]303if [[ "$physique" != "nophys" ]]
304then
[847]305   #We'll use some physics
[37]306   CPP_KEY="$CPP_KEY CPP_PHYS"
[1403]307   if [[ "${phys_root}" == "lmd" ]]
[847]308   then
309   #For lmd physics, default planet type is Earth
[1]310   CPP_KEY="$CPP_KEY CPP_EARTH"
[847]311   fi
[1521]312   # set physics common utilities path
313   PHY_COMMON_PATH="${LIBFGCM}/phy_common"
[1403]314   # set the dyn/phys interface path
[1540]315   DYN_PHYS_PATH="${LIBFGCM}/dynphy_lonlat"
316   DYN_PHYS_SUB_PATH="${LIBFGCM}/dynphy_lonlat/phy${phys_root}"
[1]317fi
318
[1403]319if [[ "$filtre" == "filtrez" ]]
320then
321   FILTRE_PATH=${LIBFGCM}/$filtre
322fi
323
[1]324if [[ "$chimie" == "INCA" ]]
325then
326   CPP_KEY="$CPP_KEY INCA"
[2645]327   INCLUDE_DIR="$INCLUDE_DIR -I${INCA_INCDIR}"
[1695]328   LIB="$LIB -L${INCA_LIBDIR} ${INCA_LIB}"
[1]329fi
330
331if [[ "$couple" != "false" ]]
332then
[1302]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
[2645]338        INCLUDE_DIR="$INCLUDE_DIR -I${OASIS_INCDIR}"
[1695]339        LIB="$LIB -L${OASIS_LIBDIR} ${OASIS_LIB}"
[1302]340    else
341        CPP_KEY="$CPP_KEY CPP_COUPLE CPP_OMCT"
[2645]342        INCLUDE_DIR="$INCLUDE_DIR -I${OASIS_INCDIR}"
[1695]343        LIB="$LIB -L${OASIS_LIBDIR} ${OASIS_LIB}"
[1302]344    fi
[1]345fi
346
[1530]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!"
[3484]352    exit 1
[1530]353fi
354
[1]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
[1019]379if [ "$veget" = "true" -o "$veget" = "orchidee1.9" -o "$veget" = "orchidee2.0" ]
[1]380then
[1019]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
[2645]384   INCLUDE_DIR="${INCLUDE_DIR} ${ORCHIDEE_INCDIR}"
[1]385   CPP_KEY="$CPP_KEY CPP_VEGET"
[1019]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
[1300]391      orch_libs="sechiba parameters stomate parallel orglob orchidee"
[1019]392   else
393      orch_libs="sechiba parameters stomate parallel orglob"
394   fi
[1695]395   LIB="${LIB} -L${ORCHIDEE_LIBDIR} ${ORCHIDEE_LIB}"
[1019]396elif [[ "$veget" != "false" ]] ; then
397   echo "Option -v $veget does not exist"
398   echo "Use ./makelmdz_fcm -h for more information"
[3484]399   exit 1
[1]400fi
401
[1300]402if [[ "$sisvat" == "true" ]]
403then
404   CPP_KEY="$CPP_KEY CPP_SISVAT"
[1302]405   SISVAT_PATH="$LIBFGCM/%PHYS/sisvat"
[1300]406fi
407
[1302]408if [[ "$rrtm" == "true" ]]
409then
410   CPP_KEY="$CPP_KEY CPP_RRTM"
411   RRTM_PATH="$LIBFGCM/%PHYS/rrtm"
412fi
413
[1650]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
[1]426if [[ $io == ioipsl ]]
427then
428   CPP_KEY="$CPP_KEY CPP_IOIPSL"
[2645]429   INCLUDE_DIR="$INCLUDE_DIR ${IOIPSL_INCDIR}"
[1695]430   LIB="$LIB ${IOIPSL_LIBDIR} ${IOIPSL_LIB}"
[1391]431elif [[ $io == mix ]]
[1300]432then
433   # For now, xios implies also using ioipsl
434   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS"
[2645]435   INCLUDE_DIR="$INCLUDE_DIR ${IOIPSL_INCDIR} ${XIOS_INCDIR}"
[1695]436   LIB="$LIB ${IOIPSL_LIBDIR} ${IOIPSL_LIB} ${XIOS_LIBDIR} ${XIOS_LIB}"
[1391]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"
[2645]441   INCLUDE_DIR="$INCLUDE_DIR ${IOIPSL_INCDIR} ${XIOS_INCDIR}"
[1695]442   LIB="$LIB ${IOIPSL_LIBDIR} ${IOIPSL_LIB} ${XIOS_LIBDIR} ${XIOS_LIB}"
[1]443fi
[895]444
[1]445if [[ "$cosp" == "true" ]]
446then
447   CPP_KEY="$CPP_KEY CPP_COSP"
448   COSP_PATH="$LIBFGCM/cosp"
449#   LIB="${LIB} -l${LIBPREFIX}cosp"
450fi
451
[1403]452# for Titan (but could be used by others as well), there is also "chimtitan"
453if [[ -d ${LIBFGCM}/chim${physique} ]]
[895]454then
455   CHEM_PATH="${LIBFGCM}/chim${physique}"
[2645]456   INCLUDE_DIR="$INCLUDE_DIR -I${LIBFGCM}/chim${physique}"
[895]457fi
458
[1793]459# for Titan add microphysics dependencies
460if [[ -d ${LIBFGCM}/muphy${physique} ]] ; then
[2369]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
[1793]471  fi
472fi
473
[1661]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}"
[2645]478   INCLUDE_DIR="$INCLUDE_DIR -I${LIBFGCM}/phy${physique}/cloud${physique}"
[1661]479fi
480
[1107]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}"
[2645]485   INCLUDE_DIR="$INCLUDE_DIR -I${LIBFGCM}/aerono${physique}"
[1107]486fi
487
[2781]488if [[ -d ${LIBFGCM}/evolution &&  "$code" == "pem" ]]
[2778]489then
[2985]490if [[ "$physique" == "std" ]]
491then
492   CPP_KEY="$CPP_KEY CPP_STD"
493fi
[2778]494   EVOLUTION_PATH="${LIBFGCM}/evolution"
495   INCLUDE="$INCLUDE -I${LIBFGCM}/evolution"
496fi
497
[2985]498if [[ -d ${LIBFGCM}/evolution &&  "$code" == "reshape_XIOS_output" ]]
499then
500if [[ "$physique" == "std" ]]
501then
502   CPP_KEY="$CPP_KEY CPP_STD"
503fi
504   EVOLUTION_PATH="${LIBFGCM}/evolution"
505   INCLUDE="$INCLUDE -I${LIBFGCM}/evolution"
506fi
507
508
[1695]509# NETCDF library include/library paths
[2645]510INCLUDE_DIR="$INCLUDE_DIR ${NETCDF_INCDIR}"
[1695]511LIB="$LIB ${NETCDF_LIBDIR} ${NETCDF_LIB}"
[270]512
[1]513########################################################################
514# calcul du nombre de dimensions
515########################################################################
516
517
518dim_full=$dim
[3471]519dim=`echo $dim | sed -e 's/[^0-9]/ /g'`
[1]520set $dim
521dimc=$#
522echo calcul de la dimension
523echo dim $dim
524echo dimc $dimc
525
526
527########################################################################
528# Gestion des dimensions du modele.
529# on cree ou remplace le fichier des dimensions
530########################################################################
531
[979]532cd $LIBFGCM/grid
533if [[ -f dimensions.h ]]
534then
535  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
536  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
537  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
538  echo  vous pouvez continuer en repondant oui.
539  echo "Voulez-vous vraiment continuer?"
540  echo ""
541  echo "WARNING: you are probably already compiling the model somewhere else."
542  echo "Wait until the first compilation is finished before launching this one."
543  echo "If you are sure that you are not compiling elsewhere, just answer "
544  echo "yes (or 'oui') to the question below to proceed."
545  echo "Do you wish to continue?"
546  read reponse
547  if [[ $reponse == "oui" || $reponse == "yes" ]]
548  then
549    \rm -f $LIBFGCM/grid/dimensions.h
550  else
[3484]551    exit 1
[979]552  fi
553fi
554
555
[1]556cd $LIBFGCM/grid/dimension
557./makdim $dim
[1441]558if (($? != 0))
559then
560    exit 1
561fi
562
[1]563cat $LIBFGCM/grid/dimensions.h
564cd $LMDGCM
565
[957]566if [[ "$bands" != "" ]]
[847]567then
[957]568  # Generic model, recreate bands.h (IR & VIS bands for radiative transfer)
[2967]569  makbandsarg=$(echo $bands | sed -e 's/[^0-9]/ /g')
[957]570  cd $LIBFGCM/phy$physique/bands
[2967]571  ./makbands $makbandsarg
[957]572  cat $LIBFGCM/phy$physique/bands.h
573  cd $LMDGCM
[847]574fi
[1]575
[957]576if [[ "$scatterers" != "" ]]
577then
[2441]578  if [[ -f $LIBFGCM/phy$physique/scatterers/make_scatterers ]]
579  then
580    # Generic model, recreate scatterers.h
581    cd $LIBFGCM/phy$physique/scatterers
582    ./make_scatterers $scatterers
583    cat $LIBFGCM/phy$physique/scatterers.h
584    cd $LMDGCM
585  else
586    echo "Error: you should not use the -s # option with -p $physique"
[3484]587    exit 1
[2441]588  fi
[957]589fi
590
591
[1]592########################################################################
593# Differentes dynamiques (3d, 2d, 1d)
594########################################################################
595
596dimension=`echo $dim | wc -w`
597echo dimension $dimension
598
599if (( $dimension == 3 ))
600then
601  cd $LIBFGCM/grid
602  \rm fxyprim.h
603  cp -p fxy_${grille}.h fxyprim.h
[895]604#else
605#  echo "Probleme dans les dimensions de la dynamique !!"
606#  echo "Non reactive pour l'instant !!!"
[1]607fi
608
[895]609if (( $dimension == 1 ))
610then
[1530]611## Sanity check: 1D models should be used in serial
[2996]612## unless compiled with xios and then it should be in mpi only
613  if [[ $io == xios ]]
[1530]614  then
[2996]615   echo "OK io xios"
616   if [[ $parallel != "mpi" ]]
617   then
618    echo "Error: a 1D model compiled with xios should also be compiled with "
619    echo "       -parallel mpi option!"
[3484]620    exit 1
[2996]621   fi
622  else
623  # no xios, check that it is in serial only
624   if [[ $parallel != "none" ]]
625   then
[1530]626    echo "Error: a 1D model should not be compiled with "
627    echo "       -parallel [mpi|omp|mpi_omp] option!"
[3484]628    exit 1
[2996]629   fi
630  fi # of if [[ $io == "xios" ]]
[1403]631  CPP_KEY="$CPP_KEY CPP_1D"
[895]632##in 1D, add dyn3d to include path (because main prog is in physics)
[2645]633  INCLUDE_DIR="$INCLUDE_DIR -Ilibf/dyn3d -Ilibf/dyn3d_common"
[1403]634## no filtre in 1d:
635  FILTRE_PATH=$LMDGCM/.void_dir
636## no need to compile all routines in dyn3d_common either:
637  DYN_COMMON_PATH=$LMDGCM/.void_dir
638## no need to compile all routines in dynlmdz_phy... ;
639## (because key ones are included in 1D main program)
640  DYN_PHYS_PATH=$LMDGCM/.void_dir
641  DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
[895]642fi
643
[1]644######################################################################
645#   Traitement special pour le nouveau rayonnement de Laurent Li.
646#   ---> YM desactive pour le traitemement en parallele
647######################################################################
648
649#if [[ -f $libf/phy$physique/raddim.h ]]
650#then
651# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
652#then
653#  \rm -f $libf/phy$physique/raddim.h
654#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
[3471]655#  echo $libf/phy$physique/raddim.$dimh.h
[1]656#  cat $libf/phy$physique/raddim.h
657# else
658#  echo On peut diminuer la taille de l executable en creant
659#  echo le fichier $libf/phy$physique/raddim.$dimh.h
660#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
661# fi
662#fi
663
664######################################################################
665# Gestion du filtre qui n'existe qu'en 3d.
666######################################################################
667
668if (( `expr $dimc \> 2` == 1 ))
669then
670   filtre="FILTRE=$filtre"
671else
672   filtre="FILTRE= L_FILTRE= "
673fi
674echo MACRO FILTRE $filtre
675
676echo $dimc
677
678
679
680######################################################################
681# Creation du suffixe de la configuration
682######################################################################
683
684
685SUFF_NAME=_${dim_full}
686SUFF_NAME=${SUFF_NAME}_phy${physique}
687
[2967]688if [[ "$bands" != "" ]]
689then
690  #if bands option -b VISxIR is used, add "_bVISxIR" to executable name
691  SUFF_NAME=${SUFF_NAME}_b$bands
692fi
693
[1]694if [[ "$parallel" != "none" ]]
695then
696  SUFF_NAME=${SUFF_NAME}_para
[2996]697  if (( $dimension == 1 ))
698  then
[3471]699    # dynamics-related routines in"dyn1d" subdirectory of phy${physique}
[2996]700    DYN=phy${physique}/dyn1d
701  else
702    DYN=dyn${dimc}d${paramem}
703  fi
[979]704  if [[ "$paramem" == "mem" ]]
705  then
706   SUFF_NAME=${SUFF_NAME}_${paramem}
707  fi
[1]708else
709  SUFF_NAME=${SUFF_NAME}_seq
[1403]710  if (( $dimension == 1 ))
711  then
[3471]712    # dynamics-related routines in"dyn1d" subdirectory of phy${physique}
[1403]713    DYN=phy${physique}/dyn1d
714  else
715    DYN=dyn${dimc}d
[895]716  fi
[1]717fi
718
[1019]719if [[ $veget != "false" ]]
[1]720then
721  SUFF_NAME=${SUFF_NAME}_orch
722fi
723
724if [[ $couple != "false" ]]
725then
726  SUFF_NAME=${SUFF_NAME}_couple
727fi
728
729if [[ $chimie == "INCA" ]]
730then
731  SUFF_NAME=${SUFF_NAME}_inca
732fi
[3475]733SUFF_DIR=
[3471]734if [[ "$compil_mod" == "debug" ]]
735then
[3475]736  SUFF_DIR=_debug
[3471]737fi
[3475]738SUFF_DIR=${SUFF_NAME}
[1]739
[1540]740if [[ $libphy == "true" ]]
741then
742  # special case where we compile only the physics
743  DYN=$LMDGCM/.void_dir
744  DYN_COMMON_PATH=$LMDGCM/.void_dir
745  FILTRE_PATH=$LMDGCM/.void_dir
746  DYN_PHYS_PATH=$LMDGCM/.void_dir
747  DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
748  #and there is no main program to generate
749  code=""
750  SUFF_NAME=""
751else
752  SUFF_NAME=${SUFF_NAME}.e
753fi
754
[1]755cd $LMDGCM
756config_fcm="config.fcm"
757rm -f $config_fcm
758touch $config_fcm
759
760echo "%ARCH          $arch"          >> $config_fcm
[3471]761echo "%INCDIR        $INCLUDE_DIR"       >> $config_fcm
[1]762echo "%LIB           $LIB"           >> $config_fcm
763echo "%ROOT_PATH     $PWD"           >> $config_fcm
764echo "%LIBF          $LIBFGCM"       >> $config_fcm
765echo "%LIBO          $LIBOGCM"       >> $config_fcm
766echo "%DYN           $DYN"           >> $config_fcm
[1403]767echo "%DYN_COMMON    $DYN_COMMON_PATH" >> $config_fcm
[1521]768echo "%PHY_COMMON    $PHY_COMMON_PATH" >> $config_fcm
[1403]769echo "%FILTRE        $FILTRE_PATH"   >> $config_fcm
[1]770echo "%PHYS          phy${physique}" >> $config_fcm
[1403]771echo "%DYN_PHYS      $DYN_PHYS_PATH" >> $config_fcm
772echo "%DYN_PHYS_SUB  $DYN_PHYS_SUB_PATH" >> $config_fcm
[1302]773echo "%RRTM          $RRTM_PATH"     >> $config_fcm
[1650]774echo "%DUST          $DUST_PATH"     >> $config_fcm
775echo "%STRATAER      $STRATAER_PATH" >> $config_fcm
[1302]776echo "%SISVAT        $SISVAT_PATH"   >> $config_fcm
[1]777echo "%COSP          $COSP_PATH"     >> $config_fcm
[895]778echo "%CHEM          $CHEM_PATH"     >> $config_fcm
[1661]779echo "%CLOUD         $CLOUD_PATH"    >> $config_fcm
[1793]780echo "%MUPHY         $MUPHY_PATH"    >> $config_fcm
[1107]781echo "%AERONO        $AERONO_PATH"   >> $config_fcm
[2778]782echo "%EVOLUTION     $EVOLUTION_PATH"  >> $config_fcm
[1]783echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
784echo "%EXEC          $code"          >> $config_fcm
785echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
[3475]786echo "%SUFF_DIR      $SUFF_DIR"      >> $config_fcm
[1]787echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
788echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
789echo "%PARA_LD       $PARA_LD"       >> $config_fcm
790echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
791
[2339]792# setup arch.fcm and arch.opt
793rm -f arch.fcm
794rm -f arch.opt
[1]795ln -s arch/arch-${arch}.fcm arch.fcm
796if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
797  then
798  ln -s arch/arch-${arch}.opt arch.opt
799else
800  ln -s .void_file arch.opt
801fi
802
[2339]803# cleanup before compiling
[3481]804if [[ $libphy != "true" ]]; then
805    rm -f bin/${code}${SUFF_NAME}
806fi
[1]807rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
[1019]808./build_gcm ${fcm_path} -j $job $full
[3484]809if [ $? != 0 ]; then # check if fcm command worked
810    exit 1
811fi
[1]812
813rm -rf tmp_src
814rm -rf config
815ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
[1540]816ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/ppsrc tmp_src
[979]817
[1300]818
[979]819if [[ -r $LIBFGCM/grid/dimensions.h ]]
820then
821  # Cleanup: remove dimension.h file
822  \rm -f $LIBFGCM/grid/dimensions.h
823fi
Note: See TracBrowser for help on using the repository browser.