source: LMDZ5/trunk/makelmdz_fcm @ 1762

Last change on this file since 1762 was 1757, checked in by Ehouarn Millour, 13 years ago

Reinstate the addition of fcm_path to PATH because it is needed for called subprocesses (which use fcm).
EM

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 12.3 KB
RevLine 
[1279]1#!/bin/bash
2# $Id: makelmdz_fcm 1757 2013-05-16 10:40:53Z fairhead $
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###############################################################
[1755]160# path to fcm
[1136]161###############################################################
[1755]162# handle case when provided path to fcm was given as a relative
163# path (from makelmdz_fcm script directory) and not an absolute path
164if [[ ${fcm_path:0:1} != "/" ]] ; then
165  # prepend with makelmdz_fcm location
166  fcm_path=$(cd $(dirname $0) ; pwd)"/"${fcm_path}
167fi
[783]168
[1757]169# add fcm_path to PATH
170export PATH=${fcm_path}:${PATH}
171
[1755]172echo "Path to fcm:"
173echo ${fcm_path}
[1136]174
[783]175###############################################################
[1140]176# lecture des chemins propres à l'architecture de la machine #
[783]177###############################################################
[1279]178rm -f .void_file
179echo > .void_file
[1327]180rm -rf .void_dir
181mkdir .void_dir
[1279]182rm -f arch.path
183ln -s arch/arch-${arch}.path ./arch.path
[783]184source arch.path
185
186########################################################################
187# Definition des clefs CPP, des chemins des includes et modules
188#  et des libraries
189########################################################################
190
[1279]191if [[ "$compil_mod" == "prod" ]]
192then
193  COMPIL_FFLAGS="%PROD_FFLAGS"
194elif [[ "$compil_mod" == "dev" ]]
195then
196  COMPIL_FFLAGS="%DEV_FFLAGS"
197elif [[ "$compil_mod" == "debug" ]]
198then
199  COMPIL_FFLAGS="%DEBUG_FFLAGS"
200fi
[783]201
[1279]202if [[ "$physique" != "nophys" ]]
203then
[1615]204   #We'll use some physics
205   CPP_KEY="$CPP_KEY CPP_PHYS"
206   if [[ "${physique:0:3}" == "lmd" ]]
207   then
208   #For lmd physics, default planet type is Earth
[1279]209   CPP_KEY="$CPP_KEY CPP_EARTH"
[1615]210   fi
[1279]211fi
[783]212
[1279]213if [[ "$chimie" == "INCA" ]]
214then
215   CPP_KEY="$CPP_KEY INCA"
216   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
217   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
218fi
[783]219
[1279]220if [[ "$couple" != "false" ]]
221then
222   CPP_KEY="$CPP_KEY CPP_COUPLE"
223   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
224   LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
225fi
[783]226
[1279]227if [[ "$parallel" == "mpi" ]]
228then
229   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
230   PARA_FFLAGS="%MPI_FFLAGS"
231   PARA_LD="%MPI_LD"
232elif [[ "$parallel" == "omp" ]]
233then
234   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
235   PARA_FFLAGS="%OMP_FFLAGS"
236   PARA_LD="%OMP_LD"
237elif [[ "$parallel" == "mpi_omp" ]]
238then
239   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
240   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
241   PARA_LD="%MPI_LD %OMP_LD"
242fi
[783]243
[1279]244if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
245   && "$compil_mod" == "debug" ]]
246then
247    echo "Usually, parallelization with OpenMP requires some optimization."
248    echo "We suggest switching to \"-dev\"."
249fi
[783]250
[1279]251if [[ "$veget" == "true" ]]
252then
253   CPP_KEY="$CPP_KEY CPP_VEGET"
254   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
255   LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob"
256fi
[783]257
[1279]258if [[ $io == ioipsl ]]
259then
260   CPP_KEY="$CPP_KEY CPP_IOIPSL"
261   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
262   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
263fi
264if [[ "$cosp" == "true" ]]
265then
266   CPP_KEY="$CPP_KEY CPP_COSP"
[1327]267   COSP_PATH="$LIBFGCM/cosp"
[1279]268#   LIB="${LIB} -l${LIBPREFIX}cosp"
269fi
[783]270
[1551]271INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
272LIB="$LIB ${NETCDF_LIBDIR}"
273
[783]274########################################################################
275# calcul du nombre de dimensions
276########################################################################
277
278
[1279]279dim_full=$dim
280dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
281set $dim
282dimc=$#
[783]283echo calcul de la dimension
284echo dim $dim
285echo dimc $dimc
286
287
288########################################################################
289# Gestion des dimensions du modele.
[1114]290# on cree ou remplace le fichier des dimensions
[783]291########################################################################
292
[1695]293cd $LIBFGCM/grid
294if [[ -f dimensions.h ]]
295then
296  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
297  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
298  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
299  echo  vous pouvez continuer en repondant oui.
300  echo "Voulez-vous vraiment continuer?"
[1755]301  echo ""
302  echo "WARNING: you are probably already compiling the model somewhere else."
303  echo "Wait until the first compilation is finished before launching this one."
304  echo "If you are sure that you are not compiling elsewhere, just answer "
305  echo "yes (or 'oui') to the question below to proceed."
306  echo "Do you wish to continue?"
[1695]307  read reponse
[1755]308  if [[ $reponse == "oui" || $reponse == "yes" ]]
[1695]309  then
[1696]310    \rm -f $LIBFGCM/grid/dimensions.h
[1695]311  else
312    exit
313  fi
314fi
315
316
[783]317cd $LIBFGCM/grid/dimension
[1114]318./makdim $dim
[783]319cat $LIBFGCM/grid/dimensions.h
320cd $LMDGCM
321
322
323########################################################################
324# Differentes dynamiques (3d, 2d, 1d)
325########################################################################
326
[1279]327dimension=`echo $dim | wc -w`
[783]328echo dimension $dimension
329
[1279]330if (( $dimension == 3 ))
331then
[783]332  cd $LIBFGCM/grid
333  \rm fxyprim.h
334  cp -p fxy_${grille}.h fxyprim.h
[1279]335else
336  echo "Probleme dans les dimensions de la dynamique !!"
337  echo "Non reactive pour l'instant !!!"
338fi
[783]339
340######################################################################
341#   Traitement special pour le nouveau rayonnement de Laurent Li.
342#   ---> YM desactive pour le traitemement en parallele
343######################################################################
344
[1279]345#if [[ -f $libf/phy$physique/raddim.h ]]
346#then
347# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
348#then
[783]349#  \rm -f $libf/phy$physique/raddim.h
350#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
351#  echo $libf/phy$physique/raddim.$dimh.h
352#  cat $libf/phy$physique/raddim.h
353# else
354#  echo On peut diminuer la taille de l executable en creant
355#  echo le fichier $libf/phy$physique/raddim.$dimh.h
356#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
[1279]357# fi
358#fi
[783]359
360######################################################################
361# Gestion du filtre qui n'existe qu'en 3d.
362######################################################################
363
[1279]364if (( `expr $dimc \> 2` == 1 ))
365then
366   filtre="FILTRE=$filtre"
[783]367else
[1279]368   filtre="FILTRE= L_FILTRE= "
369fi
[783]370echo MACRO FILTRE $filtre
371
372echo $dimc
373
374
375
376######################################################################
377# Creation du suffixe de la configuration
378######################################################################
379
380
[1279]381SUFF_NAME=_${dim_full}
382SUFF_NAME=${SUFF_NAME}_phy${physique}
[783]383
[1279]384if [[ "$parallel" != "none" ]]
385then
386  SUFF_NAME=${SUFF_NAME}_para
[1680]387  DYN=dyn${dimc}d${paramem}
388  if [[ "$paramem" == "mem" ]]
389  then
390   SUFF_NAME=${SUFF_NAME}_${paramem}
391  fi
[783]392else
[1279]393  SUFF_NAME=${SUFF_NAME}_seq
394  DYN=dyn${dimc}d
395fi
[783]396
[1279]397if [[ $veget == "true" ]]
398then
399  SUFF_NAME=${SUFF_NAME}_orch
400fi
[783]401
[1279]402if [[ $couple != "false" ]]
403then
404  SUFF_NAME=${SUFF_NAME}_couple
405fi
[783]406
[1279]407if [[ $chimie == "INCA" ]]
408then
409  SUFF_NAME=${SUFF_NAME}_inca
410fi
[783]411
412cd $LMDGCM
[1279]413config_fcm="config.fcm"
[783]414rm -f $config_fcm
415touch $config_fcm
416rm -f bin/${code}${SUFF_NAME}.e
417rm -f arch.fcm
[1279]418rm -f arch.opt
[783]419
420echo "%ARCH          $arch"          >> $config_fcm
421echo "%INCDIR        $INCLUDE"       >> $config_fcm 
422echo "%LIB           $LIB"           >> $config_fcm
423echo "%ROOT_PATH     $PWD"           >> $config_fcm
424echo "%LIBF          $LIBFGCM"       >> $config_fcm
425echo "%LIBO          $LIBOGCM"       >> $config_fcm
426echo "%DYN           $DYN"           >> $config_fcm
427echo "%PHYS          phy${physique}" >> $config_fcm
[1327]428echo "%COSP          $COSP_PATH"     >> $config_fcm
[783]429echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
430echo "%EXEC          $code"          >> $config_fcm
431echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
[1002]432echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
433echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
434echo "%PARA_LD       $PARA_LD"       >> $config_fcm
[1279]435echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
[783]436
[1002]437
438
[1137]439ln -s arch/arch-${arch}.fcm arch.fcm
[1279]440if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
441  then
442  ln -s arch/arch-${arch}.opt arch.opt
443else
444  ln -s .void_file arch.opt
445fi
446
447
[1002]448rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
[1755]449./build_gcm ${fcm_path}
[783]450
[1279]451rm -rf tmp_src
452rm -rf config
[783]453ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
454ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
[1695]455
[1696]456if [[ -r $LIBFGCM/grid/dimensions.h ]]
[1695]457then
458  # Cleanup: remove dimension.h file
[1696]459  \rm -f $LIBFGCM/grid/dimensions.h
[1695]460fi
Note: See TracBrowser for help on using the repository browser.