source: trunk/LMDZ.COMMON/makelmdz_fcm @ 1300

Last change on this file since 1300 was 1300, checked in by emillour, 10 years ago

Common dynamics:
Some updates to keep up with LMDZ5 Earth model evolution (up to LMDZ5 rev 1955).
Main change is the introduction of a "dyn3d_common" directory
to store files common to dyn3d and dyn3dpar.
See file "DOC/chantiers/commit_importants.log" for detailed list
of changes. These changes do not change results on test cases.
EM

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