source: LMDZ5/trunk/makelmdz_fcm @ 1717

Last change on this file since 1717 was 1696, checked in by Laurent Fairhead, 12 years ago

Problème de définition de libf


$libf not defined

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 11.7 KB
RevLine 
[1279]1#!/bin/bash
2# $Id: makelmdz_fcm 1696 2012-12-19 09:30:26Z emillour $
3# This is a script in Bash.
4
[1140]5# FH : on ne crée plus le fichier arch.mk qui est supposé exister par
[783]6# FH : ailleurs.
[1140]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.
[783]12#
[1279]13##set -x
[783]14########################################################################
15# options par defaut pour la commande make
16########################################################################
17
[1279]18dim="96x72x19"
19physique=lmd
20filtre=filtrez
21grille=reg
22couple=false
23veget=false
24chimie=false
25parallel=none
[1680]26paramem="par"
[1279]27compil_mod=prod
28io=ioipsl
29LIBPREFIX=""
30cosp=false
[783]31
[1279]32LMDGCM=`/bin/pwd`
33LIBOGCM=$LMDGCM/libo
34LIBFGCM=$LMDGCM/libf
[1327]35COSP_PATH=$LMDGCM/.void_dir
[1578]36fcm_path=$LMDGCM/tools/fcm/bin
[783]37
38########################################################################
39#  Quelques initialisations de variables du shell.
40########################################################################
41
[1279]42CPP_KEY="" 
43INCLUDE=""
44LIB=""
45adjnt=""
46COMPIL_FFLAGS="%PROD_FFLAGS"
47PARA_FFLAGS=""
48PARA_LD=""
49EXT_SRC=""
[783]50
51########################################################################
52# lecture des options de mymake
53########################################################################
54
[1279]55while (($# > 0))
56  do
57  case $1 in
58      "-h") cat <<fin
[783]59manuel complet sur http://...
60Usage :
[1002]61makegcm [options] -m arch exec
62[-h]                       : manuel abrégé
63[-d [[IMx]JMx]LM]          : IM, JM, LM sont les dims en x, y, z (def: $dim)
64[-p PHYS]                  : compilation avec la physique libf/phyPHYS, (def: lmd)
65[-prod / -dev / -debug]    : compilation en mode production (default) / developpement / debug .
66[-c false/MPI1/MPI2]       : couplé océan : MPI1/MPI2/false (def: false)
67[-v false/true]            : avec ou sans végétation (def: false)
[1018]68[-chimie INCA/false]       : avec ou sans model de chimie INCA (def: false)
[1002]69[-parallel none/mpi/omp/mpi_omp] : parallelisation (default: none) : mpi, openmp ou mixte mpi_openmp
70[-g GRI]                   : conf. grille dans dyn3d/GRI_xy.h  (def: reg inclue un zoom)
71[-io IO]                   : choix d'une librairie I/O, experts (def: ioipsl)
[1132]72[-include INCLUDES]        : variables supplementaires pour include
73[-cpp CPP_KEY]             : cle cpp supplementaires
[1002]74[-adjnt]                   : adjoint, a remettre en route ...
[1680]75[-mem]                     : version memoire reduite (si en mode parallele)
[1002]76[-filtre NOMFILTRE]        : prend le filtre dans libf/NOMFILTRE (def: filtrez)
77[-link LINKS]              : liens optionels avec d'autres librairies
[1578]78[-fcm_path path]           : chemin pour fcm (def: tools/fcm/bin)
[1279]79[-ext_src path]            : chemin d'un repertoire source avec des sources externe a compiler avec le modele
[1137]80 -arch nom_arch            : nom de l'architecture cible
[1002]81 exec                      : exécutable généré
[783]82fin
[1279]83          exit;;
[783]84
[1279]85      "-d")
86          dim=$2 ; shift ; shift ;;
87     
88      "-O")
89          echo "option obsolete dans cette version intermediaire de makegcm"
90          exit;;
[783]91
[1279]92      "-p")
93          physique="$2" ;  shift ; shift ;;
[783]94
[1279]95      "-g")
96          grille="$2" ; shift ; shift ;;
[783]97
[1279]98      "-c")
99          couple="$2" ; shift ; shift ;;
[783]100
[1279]101      "-prod")
102          compil_mod="prod" ; shift ;;
[1002]103
[1279]104      "-dev")
105          compil_mod="dev" ; shift ;;
[1002]106
[1279]107      "-debug")
108          compil_mod="debug" ; shift ;;
[1002]109
[1279]110      "-io")
111          io="$2" ; shift ; shift ;;
[783]112
[1279]113      "-v")
114          veget="$2" ; shift ; shift ;;
[783]115
[1279]116      "-chimie")
117          chimie="$2" ; shift ; shift ;;
[783]118
[1279]119      "-parallel")
120          parallel="$2" ; shift ; shift ;;
121     
122      "-include")
123          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
[783]124
[1279]125      "-cpp")
126          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
[1132]127
[1279]128      "-adjnt")
[1680]129          echo "option a reactiver ";exit
[1279]130          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
131          optim="$optim -Dadj" ; shift ;;
[783]132
[1279]133      "-cosp")
134          cosp="$2" ; shift ; shift ;;
[1680]135     
136      "-mem")
137          paramem="mem" ; shift ;;
[783]138
[1279]139      "-filtre")
140          filtre=$2 ; shift ; shift ;;
[783]141
[1279]142      "-link")
143          LIB="$LIB $2" ; shift ; shift ;;
[1136]144
[1279]145      "-fcm_path")
146          fcm_path=$2 ; shift ; shift ;;
[783]147
[1279]148      "-ext_src")
149          EXT_SRC=$2 ; shift ; shift ;;
[783]150
[1279]151      "-arch")
152          arch=$2 ; shift ; shift ;;
[783]153
[1279]154      *)
155          code="$1" ; shift ;;
156  esac
157done
158
[1136]159###############################################################
160# mettre le chemin du fcm dans le path
161###############################################################
[1578]162export PATH=${fcm_path}:${PATH}
[783]163
[1136]164echo "Chemin du fcm utlise :" 
165which fcm
166
[783]167###############################################################
[1140]168# lecture des chemins propres à l'architecture de la machine #
[783]169###############################################################
[1279]170rm -f .void_file
171echo > .void_file
[1327]172rm -rf .void_dir
173mkdir .void_dir
[1279]174rm -f arch.path
175ln -s arch/arch-${arch}.path ./arch.path
[783]176source arch.path
177
178########################################################################
179# Definition des clefs CPP, des chemins des includes et modules
180#  et des libraries
181########################################################################
182
[1279]183if [[ "$compil_mod" == "prod" ]]
184then
185  COMPIL_FFLAGS="%PROD_FFLAGS"
186elif [[ "$compil_mod" == "dev" ]]
187then
188  COMPIL_FFLAGS="%DEV_FFLAGS"
189elif [[ "$compil_mod" == "debug" ]]
190then
191  COMPIL_FFLAGS="%DEBUG_FFLAGS"
192fi
[783]193
[1279]194if [[ "$physique" != "nophys" ]]
195then
[1615]196   #We'll use some physics
197   CPP_KEY="$CPP_KEY CPP_PHYS"
198   if [[ "${physique:0:3}" == "lmd" ]]
199   then
200   #For lmd physics, default planet type is Earth
[1279]201   CPP_KEY="$CPP_KEY CPP_EARTH"
[1615]202   fi
[1279]203fi
[783]204
[1279]205if [[ "$chimie" == "INCA" ]]
206then
207   CPP_KEY="$CPP_KEY INCA"
208   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
209   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
210fi
[783]211
[1279]212if [[ "$couple" != "false" ]]
213then
214   CPP_KEY="$CPP_KEY CPP_COUPLE"
215   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
216   LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
217fi
[783]218
[1279]219if [[ "$parallel" == "mpi" ]]
220then
221   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
222   PARA_FFLAGS="%MPI_FFLAGS"
223   PARA_LD="%MPI_LD"
224elif [[ "$parallel" == "omp" ]]
225then
226   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
227   PARA_FFLAGS="%OMP_FFLAGS"
228   PARA_LD="%OMP_LD"
229elif [[ "$parallel" == "mpi_omp" ]]
230then
231   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
232   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
233   PARA_LD="%MPI_LD %OMP_LD"
234fi
[783]235
[1279]236if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
237   && "$compil_mod" == "debug" ]]
238then
239    echo "Usually, parallelization with OpenMP requires some optimization."
240    echo "We suggest switching to \"-dev\"."
241fi
[783]242
[1279]243if [[ "$veget" == "true" ]]
244then
245   CPP_KEY="$CPP_KEY CPP_VEGET"
246   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
247   LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob"
248fi
[783]249
[1279]250if [[ $io == ioipsl ]]
251then
252   CPP_KEY="$CPP_KEY CPP_IOIPSL"
253   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
254   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
255fi
256if [[ "$cosp" == "true" ]]
257then
258   CPP_KEY="$CPP_KEY CPP_COSP"
[1327]259   COSP_PATH="$LIBFGCM/cosp"
[1279]260#   LIB="${LIB} -l${LIBPREFIX}cosp"
261fi
[783]262
[1551]263INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
264LIB="$LIB ${NETCDF_LIBDIR}"
265
[783]266########################################################################
267# calcul du nombre de dimensions
268########################################################################
269
270
[1279]271dim_full=$dim
272dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
273set $dim
274dimc=$#
[783]275echo calcul de la dimension
276echo dim $dim
277echo dimc $dimc
278
279
280########################################################################
281# Gestion des dimensions du modele.
[1114]282# on cree ou remplace le fichier des dimensions
[783]283########################################################################
284
[1695]285cd $LIBFGCM/grid
286if [[ -f dimensions.h ]]
287then
288  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
289  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
290  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
291  echo  vous pouvez continuer en repondant oui.
292  echo "Voulez-vous vraiment continuer?"
293  read reponse
294  if [[ $reponse == "oui" ]]
295  then
[1696]296    \rm -f $LIBFGCM/grid/dimensions.h
[1695]297  else
298    exit
299  fi
300fi
301
302
[783]303cd $LIBFGCM/grid/dimension
[1114]304./makdim $dim
[783]305cat $LIBFGCM/grid/dimensions.h
306cd $LMDGCM
307
308
309########################################################################
310# Differentes dynamiques (3d, 2d, 1d)
311########################################################################
312
[1279]313dimension=`echo $dim | wc -w`
[783]314echo dimension $dimension
315
[1279]316if (( $dimension == 3 ))
317then
[783]318  cd $LIBFGCM/grid
319  \rm fxyprim.h
320  cp -p fxy_${grille}.h fxyprim.h
[1279]321else
322  echo "Probleme dans les dimensions de la dynamique !!"
323  echo "Non reactive pour l'instant !!!"
324fi
[783]325
326######################################################################
327#   Traitement special pour le nouveau rayonnement de Laurent Li.
328#   ---> YM desactive pour le traitemement en parallele
329######################################################################
330
[1279]331#if [[ -f $libf/phy$physique/raddim.h ]]
332#then
333# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
334#then
[783]335#  \rm -f $libf/phy$physique/raddim.h
336#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
337#  echo $libf/phy$physique/raddim.$dimh.h
338#  cat $libf/phy$physique/raddim.h
339# else
340#  echo On peut diminuer la taille de l executable en creant
341#  echo le fichier $libf/phy$physique/raddim.$dimh.h
342#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
[1279]343# fi
344#fi
[783]345
346######################################################################
347# Gestion du filtre qui n'existe qu'en 3d.
348######################################################################
349
[1279]350if (( `expr $dimc \> 2` == 1 ))
351then
352   filtre="FILTRE=$filtre"
[783]353else
[1279]354   filtre="FILTRE= L_FILTRE= "
355fi
[783]356echo MACRO FILTRE $filtre
357
358echo $dimc
359
360
361
362######################################################################
363# Creation du suffixe de la configuration
364######################################################################
365
366
[1279]367SUFF_NAME=_${dim_full}
368SUFF_NAME=${SUFF_NAME}_phy${physique}
[783]369
[1279]370if [[ "$parallel" != "none" ]]
371then
372  SUFF_NAME=${SUFF_NAME}_para
[1680]373  DYN=dyn${dimc}d${paramem}
374  if [[ "$paramem" == "mem" ]]
375  then
376   SUFF_NAME=${SUFF_NAME}_${paramem}
377  fi
[783]378else
[1279]379  SUFF_NAME=${SUFF_NAME}_seq
380  DYN=dyn${dimc}d
381fi
[783]382
[1279]383if [[ $veget == "true" ]]
384then
385  SUFF_NAME=${SUFF_NAME}_orch
386fi
[783]387
[1279]388if [[ $couple != "false" ]]
389then
390  SUFF_NAME=${SUFF_NAME}_couple
391fi
[783]392
[1279]393if [[ $chimie == "INCA" ]]
394then
395  SUFF_NAME=${SUFF_NAME}_inca
396fi
[783]397
398cd $LMDGCM
[1279]399config_fcm="config.fcm"
[783]400rm -f $config_fcm
401touch $config_fcm
402rm -f bin/${code}${SUFF_NAME}.e
403rm -f arch.fcm
[1279]404rm -f arch.opt
[783]405
406echo "%ARCH          $arch"          >> $config_fcm
407echo "%INCDIR        $INCLUDE"       >> $config_fcm 
408echo "%LIB           $LIB"           >> $config_fcm
409echo "%ROOT_PATH     $PWD"           >> $config_fcm
410echo "%LIBF          $LIBFGCM"       >> $config_fcm
411echo "%LIBO          $LIBOGCM"       >> $config_fcm
412echo "%DYN           $DYN"           >> $config_fcm
413echo "%PHYS          phy${physique}" >> $config_fcm
[1327]414echo "%COSP          $COSP_PATH"     >> $config_fcm
[783]415echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
416echo "%EXEC          $code"          >> $config_fcm
417echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
[1002]418echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
419echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
420echo "%PARA_LD       $PARA_LD"       >> $config_fcm
[1279]421echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
[783]422
[1002]423
424
[1137]425ln -s arch/arch-${arch}.fcm arch.fcm
[1279]426if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
427  then
428  ln -s arch/arch-${arch}.opt arch.opt
429else
430  ln -s .void_file arch.opt
431fi
432
433
[1002]434rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
[783]435./build_gcm
436
[1279]437rm -rf tmp_src
438rm -rf config
[783]439ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
440ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
[1695]441
[1696]442if [[ -r $LIBFGCM/grid/dimensions.h ]]
[1695]443then
444  # Cleanup: remove dimension.h file
[1696]445  \rm -f $LIBFGCM/grid/dimensions.h
[1695]446fi
Note: See TracBrowser for help on using the repository browser.