source: LMDZ4/branches/LMDZ4-dev/makelmdz_fcm @ 1233

Last change on this file since 1233 was 1228, checked in by jghattas, 15 years ago

Ajoute une option pour compiler des sources dans un repertoire externes
avec le modele. Les sources dans le repertoire externe seront melange a
la comilation avec LMDZ comme si elles etaient dans un repertoire connue
dans libf.

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