source: LMDZ5/trunk/makelmdz_fcm @ 1973

Last change on this file since 1973 was 1965, checked in by acaubel, 11 years ago

AC : Modified to run with Oasis-MCT as coupler in IPSLCM6 coupled configuration

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 14.6 KB
Line 
1#!/bin/bash
2# $Id: makelmdz_fcm 1965 2014-02-11 10:42:52Z fhourdin $
3# This is a script in Bash.
4
5# FH : on ne crée plus le fichier arch.mk qui est supposé exister par
6# FH : ailleurs.
7# FH : ulterieurement, ce fichier sera pré-existant pour une série
8# FH : de configurations en versions optimisées et debug qui seront
9# FH : liés (ln -s) avec arch.mk en fonction de l'architecture.
10# FH : Pour le moment, cette version est en test et on peut créer les
11# FH : arch.mk en lançant une première fois makegcm.
12#
13##set -x
14########################################################################
15# options par defaut pour la commande make
16########################################################################
17
18dim="96x72x19"
19physique=lmd
20filtre=filtrez
21grille=reg
22couple=false
23veget=false
24sisvat=false
25chimie=false
26parallel=none
27paramem="par"
28compil_mod=prod
29io=ioipsl
30LIBPREFIX=""
31cosp=false
32job=1
33full=''
34
35LMDGCM=`/bin/pwd`
36LIBOGCM=$LMDGCM/libo
37LIBFGCM=$LMDGCM/libf
38COSP_PATH=$LMDGCM/.void_dir
39fcm_path=$LMDGCM/tools/fcm/bin
40
41########################################################################
42#  Quelques initialisations de variables du shell.
43########################################################################
44
45CPP_KEY="" 
46INCLUDE=""
47LIB=""
48adjnt=""
49COMPIL_FFLAGS="%PROD_FFLAGS"
50PARA_FFLAGS=""
51PARA_LD=""
52EXT_SRC=""
53
54########################################################################
55# lecture des options de mymake
56########################################################################
57
58while (($# > 0))
59  do
60  case $1 in
61      "-h") cat <<fin
62Usage :
63makelmdz_fcm [options] -arch nom_arch exec
64[-h]                       : brief help
65[-d [[IMx]JMx]LM]          : IM, JM, LM are the dimensions in x, y, z (default: $dim)
66[-p PHYS]                  : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
67[-prod / -dev / -debug]    : compilation mode production (default) / developement / debug
68[-c false/MPI1/OMCT]       : coupling with ocean model : MPI1/OMCT/false (default: false)
69[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
70          false       : no vegetation model
71          orchidee2.0 : compile using ORCHIDEE 2.0 (or more recent version)
72          orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
73          true        : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
74[-chimie INCA/false]       : with INCA chemistry model or without (default: false)
75[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
76[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
77[-io IO]                   : Input/Output library (default: ioipsl)
78[-include INCLUDES]        : extra include path to add
79[-cpp CPP_KEY]             : additional preprocessing definitions
80[-adjnt]                   : adjoint model, not operational ...
81[-mem]                     : reduced memory dynamics (if in parallel mode)
82[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
83[-link LINKS]              : additional links with other libraries
84[-j n]                     : active parallel compiling on ntask
85[-full]                    : full recompiling
86[-fcm_path path]           : path to the fcm tool (default: tools/fcm/bin)
87[-ext_src path]            : path to an additional set of routines to compile with the model
88 -arch nom_arch            : target architecture
89 exec                      : executable to build
90fin
91          exit;;
92
93      "-d")
94          dim=$2 ; shift ; shift ;;
95     
96      "-p")
97          physique="$2" ;  shift ; shift ;;
98
99      "-g")
100          grille="$2" ; shift ; shift ;;
101
102      "-c")
103          couple="$2" ; shift ; shift ;;
104
105      "-prod")
106          compil_mod="prod" ; shift ;;
107
108      "-dev")
109          compil_mod="dev" ; shift ;;
110
111      "-debug")
112          compil_mod="debug" ; shift ;;
113
114      "-io")
115          io="$2" ; shift ; shift ;;
116
117      "-v")
118          veget="$2" ; shift ; shift ;;
119
120      "-sisvat")
121          sisvat="$2" ; shift ; shift ;;
122
123      "-chimie")
124          chimie="$2" ; shift ; shift ;;
125
126      "-parallel")
127          parallel="$2" ; shift ; shift ;;
128     
129      "-include")
130          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
131
132      "-cpp")
133          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
134
135      "-adjnt")
136          echo "not operational ... work to be done here ";exit
137          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
138          optim="$optim -Dadj" ; shift ;;
139
140      "-cosp")
141          cosp="$2" ; shift ; shift ;;
142     
143      "-mem")
144          paramem="mem" ; shift ;;
145
146      "-filtre")
147          filtre=$2 ; shift ; shift ;;
148
149      "-link")
150          LIB="$LIB $2" ; shift ; shift ;;
151
152      "-fcm_path")
153          fcm_path=$2 ; shift ; shift ;;
154
155      "-ext_src")
156          EXT_SRC=$2 ; shift ; shift ;;
157      "-j")
158          job=$2 ; shift ; shift ;;
159      "-full")
160          full="-full" ; shift ;;
161
162      "-arch")
163          arch=$2 ; shift ; shift ;;
164
165      *)
166          code="$1" ; shift ;;
167  esac
168done
169
170###############################################################
171# path to fcm
172###############################################################
173# handle case when provided path to fcm was given as a relative
174# path (from makelmdz_fcm script directory) and not an absolute path
175if [[ ${fcm_path:0:1} != "/" ]] ; then
176  # prepend with makelmdz_fcm location
177  fcm_path=$(cd $(dirname $0) ; pwd)"/"${fcm_path}
178fi
179
180# add fcm_path to PATH
181export PATH=${fcm_path}:${PATH}
182
183echo "Path to fcm:"
184echo ${fcm_path}
185
186###############################################################
187# lecture des chemins propres à l'architecture de la machine #
188###############################################################
189rm -f .void_file
190echo > .void_file
191rm -rf .void_dir
192mkdir .void_dir
193rm -f arch.path
194ln -s arch/arch-${arch}.path ./arch.path
195source arch.path
196
197########################################################################
198# Definition des clefs CPP, des chemins des includes et modules
199#  et des libraries
200########################################################################
201
202if [[ "$compil_mod" == "prod" ]]
203then
204  COMPIL_FFLAGS="%PROD_FFLAGS"
205elif [[ "$compil_mod" == "dev" ]]
206then
207  COMPIL_FFLAGS="%DEV_FFLAGS"
208elif [[ "$compil_mod" == "debug" ]]
209then
210  COMPIL_FFLAGS="%DEBUG_FFLAGS"
211fi
212
213if [[ "$physique" != "nophys" ]]
214then
215   #We'll use some physics
216   CPP_KEY="$CPP_KEY CPP_PHYS"
217   if [[ "${physique:0:3}" == "lmd" ]]
218   then
219   #For lmd physics, default planet type is Earth
220   CPP_KEY="$CPP_KEY CPP_EARTH"
221   fi
222fi
223
224if [[ "$chimie" == "INCA" ]]
225then
226   CPP_KEY="$CPP_KEY INCA"
227   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
228   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
229fi
230
231if [[ "$couple" != "false" ]]
232then
233    if [[ "$couple" == "MPI1" ]]
234    then
235        CPP_KEY="$CPP_KEY CPP_COUPLE"
236        export OASIS_INCDIR=$LMDGCM/../../prism/X64/build/lib/psmile.MPI1
237        export OASIS_LIBDIR=$LMDGCM/../../prism/X64/lib
238        INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
239        LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.MPI1 -lmpp_io"
240    else
241        CPP_KEY="$CPP_KEY CPP_COUPLE CPP_OMCT"
242        INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
243        LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.MPI1 -lscrip -lmct -lmpeu"
244    fi
245fi
246
247if [[ "$parallel" == "mpi" ]]
248then
249   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
250   PARA_FFLAGS="%MPI_FFLAGS"
251   PARA_LD="%MPI_LD"
252elif [[ "$parallel" == "omp" ]]
253then
254   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
255   PARA_FFLAGS="%OMP_FFLAGS"
256   PARA_LD="%OMP_LD"
257elif [[ "$parallel" == "mpi_omp" ]]
258then
259   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
260   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
261   PARA_LD="%MPI_LD %OMP_LD"
262fi
263
264if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
265   && "$compil_mod" == "debug" ]]
266then
267    echo "Usually, parallelization with OpenMP requires some optimization."
268    echo "We suggest switching to \"-dev\"."
269fi
270
271if [ "$veget" = "true" -o "$veget" = "orchidee1.9" -o "$veget" = "orchidee2.0" ]
272then
273#NB: option 'true': for backward compatibility. To be used with ORCHIDEE tag 1.9-1.9.6
274#    For this case, cpp flag ORCHIDEE_NOOPENMP must be added to the makelmdz_fcm arguments
275#    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
276   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
277   CPP_KEY="$CPP_KEY CPP_VEGET"
278# temporary, for Orchidee versions 1.9.* (before openmp activation)
279   if [[ "$veget" == "orchidee1.9" ]] ; then
280      CPP_KEY="$CPP_KEY ORCHIDEE_NOOPENMP"
281   fi
282   if [[ "$veget" == "orchidee2.0" ]] ; then
283      orch_libs="sechiba parameters stomate parallel orglob orchidee"
284   else
285      orch_libs="sechiba parameters stomate parallel orglob"
286   fi
287   LIB="${LIB} -L${ORCH_LIBDIR}"
288   for lib in ${orch_libs} ; do
289      if [ -f ${ORCH_LIBDIR}/lib${LIBPREFIX}$lib.a ] ; then
290         LIB="${LIB} -l${LIBPREFIX}$lib "
291      fi
292   done
293elif [[ "$veget" != "false" ]] ; then
294   echo "Option -v $veget does not exist"
295   echo "Use ./makelmdz_fcm -h for more information"
296   exit 
297fi
298
299if [[ "$sisvat" == "true" ]]
300then
301   CPP_KEY="$CPP_KEY CPP_SISVAT"
302   sed -e 's/^#src::sisvat/src::sisvat/' bld.cfg > bld.tmp
303   mv bld.tmp bld.cfg
304fi
305
306if [[ $io == ioipsl ]]
307then
308   CPP_KEY="$CPP_KEY CPP_IOIPSL"
309   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
310   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
311elif [[ $io == xios ]]
312then
313   # For now, xios implies also using ioipsl
314   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS"
315   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR} -I${XIOS_INCDIR}"
316   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl -L${XIOS_LIBDIR} -l${LIBPREFIX}stdc++ -l${LIBPREFIX}xios"
317fi
318
319if [[ "$cosp" == "true" ]]
320then
321   CPP_KEY="$CPP_KEY CPP_COSP"
322   COSP_PATH="$LIBFGCM/cosp"
323#   LIB="${LIB} -l${LIBPREFIX}cosp"
324fi
325
326INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
327LIB="$LIB ${NETCDF_LIBDIR}"
328
329########################################################################
330# calcul du nombre de dimensions
331########################################################################
332
333
334dim_full=$dim
335dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
336set $dim
337dimc=$#
338echo calcul de la dimension
339echo dim $dim
340echo dimc $dimc
341
342
343########################################################################
344# Gestion des dimensions du modele.
345# on cree ou remplace le fichier des dimensions
346########################################################################
347
348cd $LIBFGCM/grid
349if [[ -f dimensions.h ]]
350then
351  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
352  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
353  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
354  echo  vous pouvez continuer en repondant oui.
355  echo "Voulez-vous vraiment continuer?"
356  echo ""
357  echo "WARNING: you are probably already compiling the model somewhere else."
358  echo "Wait until the first compilation is finished before launching this one."
359  echo "If you are sure that you are not compiling elsewhere, just answer "
360  echo "yes (or 'oui') to the question below to proceed."
361  echo "Do you wish to continue?"
362  read reponse
363  if [[ $reponse == "oui" || $reponse == "yes" ]]
364  then
365    \rm -f $LIBFGCM/grid/dimensions.h
366  else
367    exit
368  fi
369fi
370
371
372cd $LIBFGCM/grid/dimension
373./makdim $dim
374cat $LIBFGCM/grid/dimensions.h
375cd $LMDGCM
376
377
378########################################################################
379# Differentes dynamiques (3d, 2d, 1d)
380########################################################################
381
382dimension=`echo $dim | wc -w`
383echo dimension $dimension
384
385if (( $dimension == 3 ))
386then
387  cd $LIBFGCM/grid
388  \rm fxyprim.h
389  cp -p fxy_${grille}.h fxyprim.h
390else
391  echo "Probleme dans les dimensions de la dynamique !!"
392  echo "Non reactive pour l'instant !!!"
393fi
394
395######################################################################
396#   Traitement special pour le nouveau rayonnement de Laurent Li.
397#   ---> YM desactive pour le traitemement en parallele
398######################################################################
399
400#if [[ -f $libf/phy$physique/raddim.h ]]
401#then
402# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
403#then
404#  \rm -f $libf/phy$physique/raddim.h
405#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
406#  echo $libf/phy$physique/raddim.$dimh.h
407#  cat $libf/phy$physique/raddim.h
408# else
409#  echo On peut diminuer la taille de l executable en creant
410#  echo le fichier $libf/phy$physique/raddim.$dimh.h
411#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
412# fi
413#fi
414
415######################################################################
416# Gestion du filtre qui n'existe qu'en 3d.
417######################################################################
418
419if (( `expr $dimc \> 2` == 1 ))
420then
421   filtre="FILTRE=$filtre"
422else
423   filtre="FILTRE= L_FILTRE= "
424fi
425echo MACRO FILTRE $filtre
426
427echo $dimc
428
429
430
431######################################################################
432# Creation du suffixe de la configuration
433######################################################################
434
435
436SUFF_NAME=_${dim_full}
437SUFF_NAME=${SUFF_NAME}_phy${physique}
438
439if [[ "$parallel" != "none" ]]
440then
441  SUFF_NAME=${SUFF_NAME}_para
442  DYN=dyn${dimc}d${paramem}
443  if [[ "$paramem" == "mem" ]]
444  then
445   SUFF_NAME=${SUFF_NAME}_${paramem}
446  fi
447else
448  SUFF_NAME=${SUFF_NAME}_seq
449  DYN=dyn${dimc}d
450fi
451
452if [[ $veget != "false" ]]
453then
454  SUFF_NAME=${SUFF_NAME}_orch
455fi
456
457if [[ $couple != "false" ]]
458then
459  SUFF_NAME=${SUFF_NAME}_couple
460fi
461
462if [[ $chimie == "INCA" ]]
463then
464  SUFF_NAME=${SUFF_NAME}_inca
465fi
466
467cd $LMDGCM
468config_fcm="config.fcm"
469rm -f $config_fcm
470touch $config_fcm
471rm -f bin/${code}${SUFF_NAME}.e
472rm -f arch.fcm
473rm -f arch.opt
474
475echo "%ARCH          $arch"          >> $config_fcm
476echo "%INCDIR        $INCLUDE"       >> $config_fcm 
477echo "%LIB           $LIB"           >> $config_fcm
478echo "%ROOT_PATH     $PWD"           >> $config_fcm
479echo "%LIBF          $LIBFGCM"       >> $config_fcm
480echo "%LIBO          $LIBOGCM"       >> $config_fcm
481echo "%DYN           $DYN"           >> $config_fcm
482echo "%PHYS          phy${physique}" >> $config_fcm
483echo "%COSP          $COSP_PATH"     >> $config_fcm
484echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
485echo "%EXEC          $code"          >> $config_fcm
486echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
487echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
488echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
489echo "%PARA_LD       $PARA_LD"       >> $config_fcm
490echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
491
492
493
494ln -s arch/arch-${arch}.fcm arch.fcm
495if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
496  then
497  ln -s arch/arch-${arch}.opt arch.opt
498else
499  ln -s .void_file arch.opt
500fi
501
502
503rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
504./build_gcm ${fcm_path} -j $job $full
505
506rm -rf tmp_src
507rm -rf config
508ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
509ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
510
511#eventual cleanup for SISVAT
512sed -e 's/^src::sisvat/#src::sisvat/' bld.cfg > bld.tmp
513mv bld.tmp bld.cfg
514
515
516if [[ -r $LIBFGCM/grid/dimensions.h ]]
517then
518  # Cleanup: remove dimension.h file
519  \rm -f $LIBFGCM/grid/dimensions.h
520fi
Note: See TracBrowser for help on using the repository browser.