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

Last change on this file since 1250 was 1250, checked in by yann meurdesoif, 16 years ago

Optimisations SX9

YM

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 10.5 KB
RevLine 
[1199]1#!/bin/bash
2# $Id: makelmdz_fcm 1250 2009-10-29 13:55:23Z ymeurdesoif $
[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###############################################################
[1250]164rm -f .void_file
165echo > .void_file
166rm -f arch.path
167ln -s arch/arch-${arch}.path ./arch.path
[783]168source arch.path
169
170########################################################################
171# Definition des clefs CPP, des chemins des includes et modules
172#  et des libraries
173########################################################################
174
[1197]175if [[ "$compil_mod" == "prod" ]]
176then
177  COMPIL_FFLAGS="%PROD_FFLAGS"
178elif [[ "$compil_mod" == "dev" ]]
179then
180  COMPIL_FFLAGS="%DEV_FFLAGS"
181elif [[ "$compil_mod" == "debug" ]]
182then
183  COMPIL_FFLAGS="%DEBUG_FFLAGS"
184fi
[783]185
[1197]186if [[ "$physique" != "nophys" ]]
187then
[1140]188   #Default planet type is Earth
[1197]189   CPP_KEY="$CPP_KEY CPP_EARTH"
190fi
[783]191
[1197]192if [[ "$chimie" == "INCA" ]]
193then
194   CPP_KEY="$CPP_KEY INCA"
195   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
196   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
197fi
[783]198
[1197]199if [[ "$couple" != "false" ]]
200then
201   CPP_KEY="$CPP_KEY CPP_COUPLE"
202   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
203   LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
204fi
[783]205
[1197]206if [[ "$parallel" == "mpi" ]]
207then
208   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
209   PARA_FFLAGS="%MPI_FFLAGS"
210   PARA_LD="%MPI_LD"
211elif [[ "$parallel" == "omp" ]]
212then
213   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
214   PARA_FFLAGS="%OMP_FFLAGS"
215   PARA_LD="%OMP_LD"
216elif [[ "$parallel" == "mpi_omp" ]]
217then
218   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
219   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
220   PARA_LD="%MPI_LD %OMP_LD"
221fi
[783]222
[1197]223if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
224   && "$compil_mod" == "debug" ]]
225then
226    echo "Usually, parallelization with OpenMP requires some optimization."
227    echo "We suggest switching to \"-dev\"."
228fi
[1154]229
[1197]230if [[ "$veget" == "true" ]]
231then
232   CPP_KEY="$CPP_KEY CPP_VEGET"
233   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
234   LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob"
235fi
[783]236
[1197]237if [[ $io == ioipsl ]]
238then
239   CPP_KEY="$CPP_KEY CPP_IOIPSL"
240   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
241   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
242fi
[783]243
[1197]244INCLUDE="$INCLUDE -I${NETCDF_INCDIR}"
245LIB="$LIB -L${NETCDF_LIBDIR} -lnetcdf"
[783]246
247########################################################################
248# calcul du nombre de dimensions
249########################################################################
250
251
[1197]252dim_full=$dim
253dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
[1199]254set $dim
255dimc=$#
[783]256echo calcul de la dimension
257echo dim $dim
258echo dimc $dimc
259
260
261########################################################################
262# Gestion des dimensions du modele.
[1114]263# on cree ou remplace le fichier des dimensions
[783]264########################################################################
265
266cd $LIBFGCM/grid/dimension
[1114]267./makdim $dim
[783]268cat $LIBFGCM/grid/dimensions.h
269cd $LMDGCM
270
271
272########################################################################
273# Differentes dynamiques (3d, 2d, 1d)
274########################################################################
275
[1197]276dimension=`echo $dim | wc -w`
[783]277echo dimension $dimension
278
[1197]279if (( $dimension == 3 ))
280then
[783]281  cd $LIBFGCM/grid
282  \rm fxyprim.h
283  cp -p fxy_${grille}.h fxyprim.h
[1197]284else
285  echo "Probleme dans les dimensions de la dynamique !!"
286  echo "Non reactive pour l'instant !!!"
287fi
[783]288
289######################################################################
290#   Traitement special pour le nouveau rayonnement de Laurent Li.
291#   ---> YM desactive pour le traitemement en parallele
292######################################################################
293
[1197]294#if [[ -f $libf/phy$physique/raddim.h ]]
295#then
296# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
297#then
[783]298#  \rm -f $libf/phy$physique/raddim.h
299#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
300#  echo $libf/phy$physique/raddim.$dimh.h
301#  cat $libf/phy$physique/raddim.h
302# else
303#  echo On peut diminuer la taille de l executable en creant
304#  echo le fichier $libf/phy$physique/raddim.$dimh.h
305#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
[1197]306# fi
307#fi
[783]308
309######################################################################
310# Gestion du filtre qui n'existe qu'en 3d.
311######################################################################
312
[1197]313if (( `expr $dimc \> 2` == 1 ))
314then
315   filtre="FILTRE=$filtre"
[783]316else
[1197]317   filtre="FILTRE= L_FILTRE= "
318fi
[783]319echo MACRO FILTRE $filtre
320
321echo $dimc
322
323
324
325######################################################################
326# Creation du suffixe de la configuration
327######################################################################
328
329
[1197]330SUFF_NAME=_${dim_full}
331SUFF_NAME=${SUFF_NAME}_phy${physique}
[783]332
[1197]333if [[ "$parallel" != "none" ]]
334then
335  SUFF_NAME=${SUFF_NAME}_para
336  DYN=dyn${dimc}dpar
[783]337else
[1197]338  SUFF_NAME=${SUFF_NAME}_seq
339  DYN=dyn${dimc}d
340fi
[783]341
[1197]342if [[ $veget == "true" ]]
343then
344  SUFF_NAME=${SUFF_NAME}_orch
345fi
[783]346
[1197]347if [[ $couple != "false" ]]
348then
349  SUFF_NAME=${SUFF_NAME}_couple
350fi
[783]351
[1197]352if [[ $chimie == "INCA" ]]
353then
354  SUFF_NAME=${SUFF_NAME}_inca
355fi
[783]356
357cd $LMDGCM
[1197]358config_fcm="config.fcm"
[783]359rm -f $config_fcm
360touch $config_fcm
361rm -f bin/${code}${SUFF_NAME}.e
362rm -f arch.fcm
[1250]363rm -f arch.opt
[783]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
[1250]384if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
385  then
386  ln -s arch/arch-${arch}.opt arch.opt
387else
388  ln -s .void_file arch.opt
389fi
390
391
[1002]392rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
[783]393./build_gcm
394
[1249]395rm -rf tmp_src
396rm -rf config
[783]397ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
398ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
Note: See TracBrowser for help on using the repository browser.