source: trunk/LMDZ.COMMON/makelmdz_fcm @ 1019

Last change on this file since 1019 was 1019, checked in by emillour, 11 years ago

Common dynamics; keep up with updates (seq and ) in LMDZ5 (up tio rev 1845):

  • General stuff:
  • makelmdz_fcm: add options -j # (compile using # threads) and -full, and to keep up

with Earth model, possibility to compile with various versions of orchidee

  • bld.cfg: adaptations to enable compiling using multiple threads
  • build_gcm: adaptations to enable compiling using multiple threads
  • makelmdz: keep up with Earth model: possibility to compile with various versions of orchidee + cosmetic changes + library directory name change
  • bibio:
  • wxios.F90 : Added for possible future use of XIOS library
  • filtrez:
  • mkl_dft_type.f90 & mkl_dfti.f90 : MKL (for MKL FFT) interface definitions
  • filtreg_mod : limit use of FFT to parallel mode
  • mod_filtre_fft.F90 & mod_filtre_fft_lov.F90 : swich to use parallel_lmdz
  • dyn3d:
  • abort_gcm.F : add things for xios
  • advtrac.F90 : minor change in CFL outputs
  • ce0l.F90 : indicesol.h is now module indice_sol_mod
  • comvert.h : cosmetic change on comments
  • gcm.F : add xios and use module indice_sol_mod (for INCA)
  • inigeom.F : move two computations outside loop
  • dyn3dpar:
  • parallel.F90 => parallel_lmdz.F90 : and change all the "use parallel" into "use parallel_lmdz" in all files in dyn3dpar
  • comvert.h : cosmetic change on comments
  • gcm.F : add xios and use module indice_sol_mod (for INCA)
  • leapfrog_p.F : add xios + correction for times in Newtonian case
  • ce0l.F90 : indicesol.h is now module indice_sol_mod
  • inigeom.F : move two computations outside loop

EM

File size: 15.2 KB
Line 
1#!/bin/bash
2# $Id: makelmdz_fcm 1615 2012-02-10 15:42:26Z emillour $
3# This is a script in Bash.
4
5# FH : on ne crée plus le fichier arch.mk qui est supposé exister par
6# FH : ailleurs.
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.
12#
13##set -x
14########################################################################
15# options par defaut pour la commande make
16########################################################################
17
18dim="96x72x19"
19physique=lmd
20filtre=filtrez
21grille=reg
22couple=false
23veget=false
24chimie=false
25chemistry=false
26parallel=none
27paramem="par"
28compil_mod=prod
29io=ioipsl
30LIBPREFIX=""
31cosp=false
32bands=""
33scatterers=""
34job=1
35full=''
36
37LMDGCM=`/bin/pwd`
38LIBOGCM=$LMDGCM/libo
39LIBFGCM=$LMDGCM/libf
40# path for optional packages, but default set to ".void_dir"
41COSP_PATH=$LMDGCM/.void_dir
42CHEM_PATH=$LMDGCM/.void_dir
43# Path to fcm utility:
44##fcm_path=$LMDGCM/tools/fcm/bin
45fcm_path=$(dirname $(which fcm))
46
47########################################################################
48#  Quelques initialisations de variables du shell.
49########################################################################
50
51CPP_KEY="" 
52INCLUDE=""
53LIB=""
54adjnt=""
55COMPIL_FFLAGS="%PROD_FFLAGS"
56PARA_FFLAGS=""
57PARA_LD=""
58EXT_SRC=""
59
60########################################################################
61# lecture des options de mymake
62########################################################################
63
64while (($# > 0))
65  do
66  case $1 in
67      "-h") cat <<fin
68Usage :
69makegcm [options] -arch arch exec
70[-h]                       : brief help
71[-d [[IMx]JMx]LM]          : IM, JM, LM are the dimensions in x, y, z (default: $dim)
72[-s nscat]                 : (Generic) Number of radiatively active scatterers
73[-b IRxVIS]                : (Generic) Number of infrared (IR) and visible (VIS) bands for radiative transfer
74[-p PHYS]                  : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
75[-prod / -dev / -debug]    : compilation mode production (default) / developement / debug .
76[-c false/MPI1/MPI2]       : (Earth) coupling with ocean model : MPI1/MPI2/false (default: false)
77[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
78          false       : no vegetation model
79          orchidee2.0 : compile using ORCHIDEE 2.0 (or more recent version)
80          orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
81          true        : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
82[-chimie INCA/false]       : (Earth) with INCA chemistry model or without (default: false)
83[-cosp cosp/false]         : (Earth) add the cosp model (default: false)
84[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
85[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
86[-io IO]                   : Input/Output library (default: ioipsl)
87[-include INCLUDES]        : extra include path to add
88[-cpp CPP_KEY]             : additional preprocessing definitions
89[-adjnt]                   : adjoint model, not operational ...
90[-mem]                     : reduced memory dynamics (if in parallel mode)
91[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
92[-link LINKS]              : additional links with other libraries
93[-j n]                     : active parallel compiling on ntask
94[-full]                    : full recompiling
95[-fcm_path path]           : path to the fcm tool (default: tools/fcm/bin)
96[-ext_src path]            : path to an additional set of routines to compile with the model
97 -arch arch                : target architecture
98 exec                      : executable to build
99fin
100          exit;;
101
102      "-d")
103          dim=$2 ; shift ; shift ;;
104     
105      "-p")
106          physique="$2" ;  shift ; shift ;;
107
108      "-s")
109          scatterers=$2 ; shift ; shift ;;
110
111      "-b")
112          bands=$2 ; shift ; shift ;;
113
114      "-g")
115          grille="$2" ; shift ; shift ;;
116
117      "-c")
118          couple="$2" ; shift ; shift ;;
119
120      "-prod")
121          compil_mod="prod" ; shift ;;
122
123      "-dev")
124          compil_mod="dev" ; shift ;;
125
126      "-debug")
127          compil_mod="debug" ; shift ;;
128
129      "-io")
130          io="$2" ; shift ; shift ;;
131
132      "-v")
133          veget="$2" ; shift ; shift ;;
134
135      "-chimie")
136          chimie="$2" ; shift ; shift ;;
137
138      "-parallel")
139          parallel="$2" ; shift ; shift ;;
140     
141      "-include")
142          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
143
144      "-cpp")
145          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
146
147      "-adjnt")
148          echo "not operational ... work to be done here ";exit
149          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
150          optim="$optim -Dadj" ; shift ;;
151
152      "-cosp")
153          cosp="$2" ; shift ; shift ;;
154
155      "-mem")
156          paramem="mem" ; shift ;;
157
158      "-filtre")
159          filtre=$2 ; shift ; shift ;;
160
161      "-link")
162          LIB="$LIB $2" ; shift ; shift ;;
163
164      "-fcm_path")
165          fcm_path=$2 ; shift ; shift ;;
166
167      "-ext_src")
168          EXT_SRC=$2 ; shift ; shift ;;
169
170      "-j")
171          job=$2 ; shift ; shift ;;
172
173      "-full")
174          full="-full" ; shift ;;
175
176      "-arch")
177          arch=$2 ; shift ; shift ;;
178
179      *)
180          code="$1" ; shift ;;
181  esac
182done
183
184###############################################################
185# path to fcm
186###############################################################
187# handle case when provided path to fcm was given as a relative
188# path (from makelmdz_fcm script directory) and not an absolute path
189if [[ ${fcm_path:0:1} != "/" ]] ; then
190  # prepend with makelmdz_fcm location
191  fcm_path=$(cd $(dirname $0) ; pwd)"/"${fcm_path}
192fi
193
194# add fcm_path to PATH
195export PATH=${fcm_path}:${PATH}
196
197echo "Path to fcm:"
198echo ${fcm_path}
199
200###############################################################
201# lecture des chemins propres à l'architecture de la machine #
202###############################################################
203rm -f .void_file
204echo > .void_file
205rm -rf .void_dir
206mkdir .void_dir
207rm -f arch.path
208ln -s arch/arch-${arch}.path ./arch.path
209source arch.path
210
211########################################################################
212# Definition des clefs CPP, des chemins des includes et modules
213#  et des libraries
214########################################################################
215
216if [[ "$compil_mod" == "prod" ]]
217then
218  COMPIL_FFLAGS="%PROD_FFLAGS"
219elif [[ "$compil_mod" == "dev" ]]
220then
221  COMPIL_FFLAGS="%DEV_FFLAGS"
222elif [[ "$compil_mod" == "debug" ]]
223then
224  COMPIL_FFLAGS="%DEBUG_FFLAGS"
225fi
226
227if [[ "$physique" != "nophys" ]]
228then
229   #We'll use some physics
230   CPP_KEY="$CPP_KEY CPP_PHYS"
231   if [[ "${physique:0:3}" == "lmd" ]]
232   then
233   #For lmd physics, default planet type is Earth
234   CPP_KEY="$CPP_KEY CPP_EARTH"
235   fi
236fi
237
238if [[ "$chimie" == "INCA" ]]
239then
240   CPP_KEY="$CPP_KEY INCA"
241   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
242   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
243fi
244
245if [[ "$couple" != "false" ]]
246then
247   CPP_KEY="$CPP_KEY CPP_COUPLE"
248   INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
249   LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io"
250fi
251
252if [[ "$parallel" == "mpi" ]]
253then
254   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
255   PARA_FFLAGS="%MPI_FFLAGS"
256   PARA_LD="%MPI_LD"
257elif [[ "$parallel" == "omp" ]]
258then
259   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
260   PARA_FFLAGS="%OMP_FFLAGS"
261   PARA_LD="%OMP_LD"
262elif [[ "$parallel" == "mpi_omp" ]]
263then
264   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
265   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
266   PARA_LD="%MPI_LD %OMP_LD"
267fi
268
269if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
270   && "$compil_mod" == "debug" ]]
271then
272    echo "Usually, parallelization with OpenMP requires some optimization."
273    echo "We suggest switching to \"-dev\"."
274fi
275
276if [ "$veget" = "true" -o "$veget" = "orchidee1.9" -o "$veget" = "orchidee2.0" ]
277then
278#NB: option 'true': for backward compatibility. To be used with ORCHIDEE tag 1.9-1.9.6
279#    For this case, cpp flag ORCHIDEE_NOOPENMP must be added to the makelmdz_fcm arguments
280#    option orchidee1.9 : Compile with ORCHIDEE version up to the inclusion of OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
281   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
282   CPP_KEY="$CPP_KEY CPP_VEGET"
283# temporary, for Orchidee versions 1.9.* (before openmp activation)
284   if [[ "$veget" == "orchidee1.9" ]] ; then
285      CPP_KEY="$CPP_KEY ORCHIDEE_NOOPENMP"
286   fi
287   if [[ "$veget" == "orchidee2.0" ]] ; then
288      orch_libs=orchidee
289   else
290      orch_libs="sechiba parameters stomate parallel orglob"
291   fi
292   LIB="${LIB} -L${ORCH_LIBDIR}"
293   for lib in ${orch_libs} ; do
294      if [ -f ${ORCH_LIBDIR}/lib${LIBPREFIX}$lib.a ] ; then
295         LIB="${LIB} -l${LIBPREFIX}$lib "
296      fi
297   done
298elif [[ "$veget" != "false" ]] ; then
299   echo "Option -v $veget does not exist"
300   echo "Use ./makelmdz_fcm -h for more information"
301   exit 
302fi
303
304if [[ $io == ioipsl ]]
305then
306   CPP_KEY="$CPP_KEY CPP_IOIPSL"
307   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
308   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
309fi
310
311if [[ "$cosp" == "true" ]]
312then
313   CPP_KEY="$CPP_KEY CPP_COSP"
314   COSP_PATH="$LIBFGCM/cosp"
315#   LIB="${LIB} -l${LIBPREFIX}cosp"
316fi
317
318if [[ "$physique" == "titan" ]]
319then
320   CHEM_PATH="${LIBFGCM}/chim${physique}"
321   INCLUDE="$INCLUDE -I${LIBFGCM}/chim${physique}"
322fi
323
324INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
325LIB="$LIB ${NETCDF_LIBDIR}"
326
327########################################################################
328# calcul du nombre de dimensions
329########################################################################
330
331
332dim_full=$dim
333dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
334set $dim
335dimc=$#
336echo calcul de la dimension
337echo dim $dim
338echo dimc $dimc
339
340
341########################################################################
342# Gestion des dimensions du modele.
343# on cree ou remplace le fichier des dimensions
344########################################################################
345
346cd $LIBFGCM/grid
347if [[ -f dimensions.h ]]
348then
349  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
350  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
351  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
352  echo  vous pouvez continuer en repondant oui.
353  echo "Voulez-vous vraiment continuer?"
354  echo ""
355  echo "WARNING: you are probably already compiling the model somewhere else."
356  echo "Wait until the first compilation is finished before launching this one."
357  echo "If you are sure that you are not compiling elsewhere, just answer "
358  echo "yes (or 'oui') to the question below to proceed."
359  echo "Do you wish to continue?"
360  read reponse
361  if [[ $reponse == "oui" || $reponse == "yes" ]]
362  then
363    \rm -f $LIBFGCM/grid/dimensions.h
364  else
365    exit
366  fi
367fi
368
369
370cd $LIBFGCM/grid/dimension
371./makdim $dim
372cat $LIBFGCM/grid/dimensions.h
373cd $LMDGCM
374
375if [[ "$bands" != "" ]]
376then
377  # Generic model, recreate bands.h (IR & VIS bands for radiative transfer)
378  bands=$(echo $bands | sed -e 's/[^0-9]/ /g')
379  cd $LIBFGCM/phy$physique/bands
380  ./makbands $bands
381  cat $LIBFGCM/phy$physique/bands.h
382  cd $LMDGCM
383fi
384
385if [[ "$scatterers" != "" ]]
386then
387  # Generic model, recreate scatterers.h
388  cd $LIBFGCM/phy$physique/scatterers
389  ./make_scatterers $scatterers
390  cat $LIBFGCM/phy$physique/scatterers.h
391  cd $LMDGCM
392fi
393
394
395########################################################################
396# Differentes dynamiques (3d, 2d, 1d)
397########################################################################
398
399dimension=`echo $dim | wc -w`
400echo dimension $dimension
401
402if (( $dimension == 3 ))
403then
404  cd $LIBFGCM/grid
405  \rm fxyprim.h
406  cp -p fxy_${grille}.h fxyprim.h
407#else
408#  echo "Probleme dans les dimensions de la dynamique !!"
409#  echo "Non reactive pour l'instant !!!"
410fi
411
412if (( $dimension == 1 ))
413then
414##in 1D, add dyn3d to include path (because main prog is in physics)
415  INCLUDE="$INCLUDE -Ilibf/dyn3d"
416#  echo pas de dynamique
417#  dyn="DYN= L_DYN=-ldyn3d "
418fi
419
420######################################################################
421#   Traitement special pour le nouveau rayonnement de Laurent Li.
422#   ---> YM desactive pour le traitemement en parallele
423######################################################################
424
425#if [[ -f $libf/phy$physique/raddim.h ]]
426#then
427# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
428#then
429#  \rm -f $libf/phy$physique/raddim.h
430#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
431#  echo $libf/phy$physique/raddim.$dimh.h
432#  cat $libf/phy$physique/raddim.h
433# else
434#  echo On peut diminuer la taille de l executable en creant
435#  echo le fichier $libf/phy$physique/raddim.$dimh.h
436#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
437# fi
438#fi
439
440######################################################################
441# Gestion du filtre qui n'existe qu'en 3d.
442######################################################################
443
444if (( `expr $dimc \> 2` == 1 ))
445then
446   filtre="FILTRE=$filtre"
447else
448   filtre="FILTRE= L_FILTRE= "
449fi
450echo MACRO FILTRE $filtre
451
452echo $dimc
453
454
455
456######################################################################
457# Creation du suffixe de la configuration
458######################################################################
459
460
461SUFF_NAME=_${dim_full}
462SUFF_NAME=${SUFF_NAME}_phy${physique}
463
464if [[ "$parallel" != "none" ]]
465then
466  SUFF_NAME=${SUFF_NAME}_para
467  DYN=dyn${dimc}d${paramem}
468  if [[ "$paramem" == "mem" ]]
469  then
470   SUFF_NAME=${SUFF_NAME}_${paramem}
471  fi
472else
473  SUFF_NAME=${SUFF_NAME}_seq
474  DYN=dyn${dimc}d
475  ## specific stuff for 1D model (needs includes which are in dyn3d)
476  if (( $dimension == 1 )) ; then
477    SUFF_NAME=${SUFF_NAME}
478    DYN=dyn3d
479  fi
480fi
481
482if [[ $veget != "false" ]]
483then
484  SUFF_NAME=${SUFF_NAME}_orch
485fi
486
487if [[ $couple != "false" ]]
488then
489  SUFF_NAME=${SUFF_NAME}_couple
490fi
491
492if [[ $chimie == "INCA" ]]
493then
494  SUFF_NAME=${SUFF_NAME}_inca
495fi
496
497cd $LMDGCM
498config_fcm="config.fcm"
499rm -f $config_fcm
500touch $config_fcm
501rm -f bin/${code}${SUFF_NAME}.e
502rm -f arch.fcm
503rm -f arch.opt
504
505echo "%ARCH          $arch"          >> $config_fcm
506echo "%INCDIR        $INCLUDE"       >> $config_fcm 
507echo "%LIB           $LIB"           >> $config_fcm
508echo "%ROOT_PATH     $PWD"           >> $config_fcm
509echo "%LIBF          $LIBFGCM"       >> $config_fcm
510echo "%LIBO          $LIBOGCM"       >> $config_fcm
511echo "%DYN           $DYN"           >> $config_fcm
512echo "%PHYS          phy${physique}" >> $config_fcm
513echo "%COSP          $COSP_PATH"     >> $config_fcm
514echo "%CHEM          $CHEM_PATH"     >> $config_fcm
515echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
516echo "%EXEC          $code"          >> $config_fcm
517echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
518echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
519echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
520echo "%PARA_LD       $PARA_LD"       >> $config_fcm
521echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
522
523
524
525ln -s arch/arch-${arch}.fcm arch.fcm
526if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
527  then
528  ln -s arch/arch-${arch}.opt arch.opt
529else
530  ln -s .void_file arch.opt
531fi
532
533
534rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
535./build_gcm ${fcm_path} -j $job $full
536
537rm -rf tmp_src
538rm -rf config
539ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
540ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
541
542if [[ -r $LIBFGCM/grid/dimensions.h ]]
543then
544  # Cleanup: remove dimension.h file
545  \rm -f $LIBFGCM/grid/dimensions.h
546fi
Note: See TracBrowser for help on using the repository browser.