source: LMDZ5/trunk/makelmdz_fcm @ 1593

Last change on this file since 1593 was 1578, checked in by jghattas, 13 years ago
  • Add fcm in LMDZ5/tools directory

It is no longer needed to have fcm in your environement PATH variable.
Now makelmdz_fcm takes by default this fcm. It is still possible to use
another fcm, using -fcm_path argument in makelmdz_fcm.

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