source: LMDZ6/trunk/makelmdz_fcm @ 3795

Last change on this file since 3795 was 3794, checked in by evignon, 4 years ago

AJOUT INLANDSIS, correction makefiles

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 20.9 KB
Line 
1#!/bin/bash
2# $Id: makelmdz_fcm 3794 2021-01-05 11:48:20Z fairhead $
3# This is a script in Bash.
4
5# FH : on ne cr\'ee plus le fichier arch.mk qui est suppos\'e exister par
6# FH : ailleurs.
7# FH : ulterieurement, ce fichier sera pr\'e-existant pour une s\'erie
8# FH : de configurations en versions optimis\'ees et debug qui seront
9# FH : li\'es (ln -s) avec arch.mk en fonction de l'architecture.
10# FH : Pour le moment, cette version est en test et on peut cr\'eer les
11# FH : arch.mk en lan\c{}cant une premi\`ere fois makegcm.
12#
13##set -x
14set -e
15########################################################################
16# options par defaut pour la commande make
17########################################################################
18
19dim="96x72x19"
20physique=lmd
21filtre=filtrez
22grille=reg
23couple=false
24veget=false
25sisvat=false
26inlandsis=false
27rrtm=false
28dust=false
29strataer=false
30chimie=false
31parallel=none
32paramem="par"
33compil_mod=prod
34io=ioipsl
35LIBPREFIX=""
36cosp=false
37cosp2=false
38cospv2=false
39job=1
40full=''
41libphy=false
42
43arch_defined="FALSE"
44arch_path="arch"
45arch_default_path="arch"
46
47LMDGCM=`/bin/pwd`
48LIBOGCM=$LMDGCM/libo
49LIBFGCM=$LMDGCM/libf
50DYN_COMMON_PATH=$LIBFGCM/dyn3d_common
51# path for optional packages, but default set to ".void_dir"
52FILTRE_PATH=$LMDGCM/.void_dir
53DYN_PHYS_PATH=$LMDGCM/.void_dir
54DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
55PHY_COMMON_PATH=$LMDGCM/.void_dir
56RRTM_PATH=$LMDGCM/.void_dir
57DUST_PATH=$LMDGCM/.void_dir
58STRATAER_PATH=$LMDGCM/.void_dir
59SISVAT_PATH=$LMDGCM/.void_dir
60COSP_PATH=$LMDGCM/.void_dir
61fcm_path=$LMDGCM/tools/fcm/bin
62
63########################################################################
64#  Quelques initialisations de variables du shell.
65########################################################################
66
67CPP_KEY="" 
68INCLUDE=""
69LIB=""
70adjnt=""
71COMPIL_FFLAGS="%PROD_FFLAGS"
72PARA_FFLAGS=""
73PARA_LD=""
74EXT_SRC=""
75
76########################################################################
77# lecture des options de mymake
78########################################################################
79
80while (($# > 0))
81  do
82  case $1 in
83      "-h") cat <<fin
84Usage :
85makelmdz_fcm [options] -arch nom_arch exec
86[-h]                       : brief help
87[-d [[IMx]JMx]LM]          : IM, JM, LM are the dimensions in x, y, z (default: $dim)
88[-p PHYS]                  : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
89[-prod / -dev / -debug]    : compilation mode production (default) / developement / debug
90[-c false/MPI1/OMCT]       : coupling with ocean model : MPI1/OMCT/false (default: false)
91[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
92          false       : no vegetation model
93          orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version)
94          orchidee2.0 : compile using ORCHIDEE 2.0
95          orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
96          true        : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
97[-chimie INCA/false]       : with INCA chemistry model or without (default: false)
98[-cosp true/false]    : compile with/without cosp package (default: false)
99[-cosp2 true/false]    : compile with/without cosp2 package (default: false)
100[-cospv2 true/false]    : compile with/without cospv2 package (default: false)
101[-sisvat true/false]  : compile with/without sisvat package (default: false)
102[-inlandsis true/false]  : compile with/without inlandsis package (default: false)
103[-rrtm true/false]    : compile with/without rrtm package (default: false)
104[-dust true/false]    : compile with/without the dust package by Boucher and co (default: false)
105[-strataer true/false]    : compile with/without the strat aer package by Boucher and co (default: false)
106[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
107[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
108[-io ioipsl/mix/xios]                   : Input/Output library (default: ioipsl)
109[-include INCLUDES]        : extra include path to add
110[-cpp CPP_KEY]             : additional preprocessing definitions
111[-adjnt]                   : adjoint model, not operational ...
112[-mem]                     : reduced memory dynamics (if in parallel mode)
113[-filtre NOMFILTRE]        : use filtre from libf/NOMFILTRE (default: filtrez)
114[-link LINKS]              : additional links with other libraries
115[-j n]                     : active parallel compiling on ntask
116[-full]                    : full recompiling
117[-libphy]                  : only compile physics package (no dynamics or main program)
118[-fcm_path path]           : path to the fcm tool (default: tools/fcm/bin)
119[-ext_src path]            : path to an additional set of routines to compile with the model
120[-arch_path path]          : path to architecture files (default: $arch_default_path)
121 -arch nom_arch            : target architecture
122 exec                      : executable to build
123fin
124          exit;;
125
126      "-d")
127          dim=$2 ; shift ; shift ;;
128     
129      "-p")
130          physique="$2" ;  shift ; shift ;;
131
132      "-g")
133          grille="$2" ; shift ; shift ;;
134
135      "-c")
136          couple="$2" ; shift ; shift ;;
137
138      "-prod")
139          compil_mod="prod" ; shift ;;
140
141      "-dev")
142          compil_mod="dev" ; shift ;;
143
144      "-debug")
145          compil_mod="debug" ; shift ;;
146
147      "-io")
148          io="$2" ; shift ; shift ;;
149
150      "-v")
151          veget="$2" ; shift ; shift ;;
152
153      "-sisvat")
154          sisvat="$2" ; shift ; shift ;;
155
156      "-inlandsis")
157    inlandsis="$2" ; shift ; shift ;;
158
159      "-rrtm")
160          rrtm="$2" ; shift ; shift ;;
161
162      "-dust")
163          dust="$2" ; shift ; shift ;;
164
165      "-strataer")
166          strataer="$2" ; shift ; shift ;;
167
168      "-chimie")
169          chimie="$2" ; shift ; shift ;;
170
171      "-parallel")
172          parallel="$2" ; shift ; shift ;;
173     
174      "-include")
175          INCLUDE="$INCLUDE -I$2" ; shift ; shift ;;
176
177      "-cpp")
178          CPP_KEY="$CPP_KEY $2" ; shift ; shift ;;
179
180      "-adjnt")
181          echo "not operational ... work to be done here ";exit
182          opt_dep="$opt_dep adjnt" ; adjnt="-ladjnt -ldyn3d "
183          optim="$optim -Dadj" ; shift ;;
184
185      "-cosp")
186          cosp="$2" ; shift ; shift ;;
187
188      "-cosp2")
189          cosp2="$2" ; shift ; shift ;;
190
191      "-cospv2")
192          cospv2="$2" ; shift ; shift ;;
193     
194      "-mem")
195          paramem="mem" ; shift ;;
196
197      "-filtre")
198          filtre=$2 ; shift ; shift ;;
199
200      "-link")
201          LIB="$LIB $2" ; shift ; shift ;;
202
203      "-fcm_path")
204          fcm_path=$2 ; shift ; shift ;;
205
206      "-ext_src")
207          EXT_SRC=$2 ; shift ; shift ;;
208
209      "-j")
210          job=$2 ; shift ; shift ;;
211
212      "-full")
213          full="-full" ; shift ;;
214
215      "-libphy")
216          libphy="true" ; shift ;;
217
218      "-arch")
219          arch=$2 ; arch_defined="TRUE" ; shift ; shift ;;
220
221      "-arch_path")
222          arch_path=$2 ; arch_path_defined="TRUE"; shift ; shift ;;
223
224      *)
225          code="$1" ; shift ;;
226  esac
227done
228
229###############################################################
230# path to fcm
231###############################################################
232# handle case when provided path to fcm was given as a relative
233# path (from makelmdz_fcm script directory) and not an absolute path
234if [[ ${fcm_path:0:1} != "/" ]] ; then
235  # prepend with makelmdz_fcm location
236  fcm_path=$(cd $(dirname $0) ; pwd)"/"${fcm_path}
237fi
238
239# add fcm_path to PATH
240export PATH=${fcm_path}:${PATH}
241
242echo "Path to fcm:"
243echo ${fcm_path}
244
245###############################################################
246# lecture des chemins propres \`a l'architecture de la machine #
247###############################################################
248rm -f .void_file
249echo > .void_file
250rm -rf .void_dir
251mkdir .void_dir
252
253if [[ "$arch_defined" == "TRUE" ]]
254then
255  rm -f arch.path
256  rm -f arch.fcm
257  rm -f arch.env
258
259  if test -f $arch_path/arch-${arch}.path
260  then
261    ln -s $arch_path/arch-${arch}.path arch.path
262  elif test -f $arch_default_path/arch-${arch}.path
263  then
264    ln -s $arch_default_path/arch-${arch}.path arch.path
265  fi
266       
267  if test -f $arch_path/arch-${arch}.fcm
268  then
269    ln -s $arch_path/arch-${arch}.fcm arch.fcm
270  elif test -f $arch_default_path/arch-${arch}.fcm
271  then
272    ln -s $arch_default_path/arch-${arch}.fcm arch.fcm
273  fi
274
275  if test -f $arch_path/arch-${arch}.env
276  then
277    ln -s $arch_path/arch-${arch}.env arch.env
278  elif test -f $arch_default_path/arch-${arch}.env
279  then
280    ln -s $arch_default_path/arch-${arch}.env arch.env
281  else
282    ln -s .void_file arch.env
283  fi
284  # source architecture PATH and ENV files
285  source arch.env
286  source arch.path
287else
288  echo "You must define a target architecture"
289  exit 1
290fi
291
292########################################################################
293# Definition des clefs CPP, des chemins des includes et modules
294#  et des libraries
295########################################################################
296
297if [[ "$compil_mod" == "prod" ]]
298then
299  COMPIL_FFLAGS="%PROD_FFLAGS"
300elif [[ "$compil_mod" == "dev" ]]
301then
302  COMPIL_FFLAGS="%DEV_FFLAGS"
303elif [[ "$compil_mod" == "debug" ]]
304then
305  COMPIL_FFLAGS="%DEBUG_FFLAGS"
306fi
307
308phys_root=$physique
309if [[ "${physique:0:3}" == "lmd" ]] ; then phys_root=lmd ; fi
310if [[ "${physique:0:4}" == "mars" ]] ; then phys_root=mars ; fi
311if [[ "${physique:0:3}" == "std" ]] ; then phys_root=std ; fi
312if [[ "${physique:0:5}" == "venus" ]] ; then phys_root=venus ; fi
313if [[ "${physique:0:5}" == "titan" ]] ; then phys_root=titan ; fi
314if [[ "${physique:0:3}" == "mar" ]] ; then phys_root=mar ; fi
315if [[ "${physique:0:3}" == "dev" ]] ; then phys_root=dev ; fi
316
317if [[ "$physique" != "nophys" ]]
318then
319   #We'll use some physics
320   CPP_KEY="$CPP_KEY CPP_PHYS"
321   if [[ "${phys_root}" == "lmd" ]]
322   then
323   #For lmd physics, default planet type is Earth
324   CPP_KEY="$CPP_KEY CPP_EARTH"
325   fi
326   # set physics common utilities path
327   PHY_COMMON_PATH="${LIBFGCM}/phy_common"
328   # set the dyn/phys interface path
329   DYN_PHYS_PATH="${LIBFGCM}/dynphy_lonlat"
330   DYN_PHYS_SUB_PATH="${LIBFGCM}/dynphy_lonlat/phy${phys_root}"
331fi
332
333if [[ "$filtre" == "filtrez" ]]
334then
335   FILTRE_PATH=${LIBFGCM}/$filtre
336fi
337
338if [[ "$chimie" == "INCA" ]]
339then
340   CPP_KEY="$CPP_KEY INCA"
341   INCLUDE="$INCLUDE -I${INCA_INCDIR}"
342   LIB="$LIB -L${INCA_LIBDIR} -lchimie"
343fi
344
345if [[ "$couple" != "false" ]]
346then
347    if [[ "$couple" == "MPI1" ]]
348    then
349        CPP_KEY="$CPP_KEY CPP_COUPLE"
350        export OASIS_INCDIR=$LMDGCM/../../prism/X64/build/lib/psmile.MPI1
351        export OASIS_LIBDIR=$LMDGCM/../../prism/X64/lib
352        INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
353        LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.MPI1 -lmpp_io"
354    else
355        CPP_KEY="$CPP_KEY CPP_COUPLE CPP_OMCT"
356        INCLUDE="$INCLUDE -I${OASIS_INCDIR}"
357        LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.MPI1 -lscrip -lmct -lmpeu"
358    fi
359fi
360
361if [[ "$parallel" == "mpi" ]]
362then
363   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI"
364   PARA_FFLAGS="%MPI_FFLAGS"
365   PARA_LD="%MPI_LD"
366elif [[ "$parallel" == "omp" ]]
367then
368   CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP"
369   PARA_FFLAGS="%OMP_FFLAGS"
370   PARA_LD="%OMP_LD"
371elif [[ "$parallel" == "mpi_omp" ]]
372then
373   CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP"
374   PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS"
375   PARA_LD="%MPI_LD %OMP_LD"
376fi
377
378if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \
379   && "$compil_mod" == "debug" ]]
380then
381    echo "Usually, parallelization with OpenMP requires some optimization."
382    echo "We suggest switching to \"-dev\"."
383fi
384
385if [ "$veget" = "true" -o "$veget" = "orchidee1.9" -o "$veget" = "orchidee2.0" -o "$veget" = "orchidee2.1" ]
386then
387#NB: option 'true': for backward compatibility. To be used with ORCHIDEE tag 1.9-1.9.6
388#    For this case, cpp flag ORCHIDEE_NOOPENMP must be added to the makelmdz_fcm arguments
389#    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
390   INCLUDE="${INCLUDE} -I${ORCH_INCDIR}"
391   CPP_KEY="$CPP_KEY CPP_VEGET"
392# temporary, for Orchidee versions 1.9.* (before openmp activation)
393   if [[ "$veget" == "orchidee1.9" ]] ; then
394      CPP_KEY="$CPP_KEY ORCHIDEE_NOOPENMP"
395   fi
396   if [[ "$veget" == "orchidee2.0" ]] ; then
397      orch_libs="sechiba parameters stomate parallel orglob orchidee"
398      CPP_KEY="$CPP_KEY ORCHIDEE_NOUNSTRUCT"
399   elif [[ "$veget" == "orchidee2.1" ]] ; then
400      orch_libs="sechiba parameters stomate parallel orglob orchidee"
401   else
402      orch_libs="sechiba parameters stomate parallel orglob"
403   fi
404   LIB="${LIB} -L${ORCH_LIBDIR}"
405   for lib in ${orch_libs} ; do
406      if [ -f ${ORCH_LIBDIR}/lib${LIBPREFIX}$lib.a ] ; then
407         LIB="${LIB} -l${LIBPREFIX}$lib "
408      fi
409   done
410elif [[ "$veget" != "false" ]] ; then
411   echo "Option -v $veget does not exist"
412   echo "Use ./makelmdz_fcm -h for more information"
413   exit 
414fi
415
416if [[ "$sisvat" == "true" ]]
417then
418   CPP_KEY="$CPP_KEY CPP_SISVAT"
419   SISVAT_PATH="$LIBFGCM/%PHYS/sisvat"
420fi
421
422if [[ "$inlandsis" == "true" ]]
423then
424   CPP_KEY="$CPP_KEY CPP_INLANDSIS"
425   INLANDSIS_PATH="$LIBFGCM/%PHYS/inlandsis"
426fi
427
428
429if [[ "$rrtm" == "true" ]]
430then
431   CPP_KEY="$CPP_KEY CPP_RRTM"
432   RRTM_PATH="$LIBFGCM/%PHYS/rrtm"
433fi
434
435if [[ "$dust" == "true" ]]
436then
437   CPP_KEY="$CPP_KEY CPP_Dust"
438   DUST_PATH="$LIBFGCM/%PHYS/Dust"
439fi
440
441if [[ "$strataer" == "true" ]]
442then
443   CPP_KEY="$CPP_KEY CPP_StratAer"
444   STRATAER_PATH="$LIBFGCM/%PHYS/StratAer"
445fi
446
447if [[ $io == ioipsl ]]
448then
449   CPP_KEY="$CPP_KEY CPP_IOIPSL"
450   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}"
451   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl"
452elif [[ $io == mix ]]
453then
454   # For now, xios implies also using ioipsl
455   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS"
456   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR} -I${XIOS_INCDIR}"
457   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl -L${XIOS_LIBDIR} -l${LIBPREFIX}stdc++ -l${LIBPREFIX}xios -l${LIBPREFIX}stdc++"
458elif [[ $io == xios ]]
459then
460   # For now, xios implies also using ioipsl
461   CPP_KEY="$CPP_KEY CPP_IOIPSL CPP_XIOS CPP_IOIPSL_NO_OUTPUT"
462   INCLUDE="$INCLUDE -I${IOIPSL_INCDIR} -I${XIOS_INCDIR}"
463   LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl -L${XIOS_LIBDIR} -l${LIBPREFIX}stdc++ -l${LIBPREFIX}xios -l${LIBPREFIX}stdc++"
464fi
465
466if [[ "$cosp" == "true" ]]
467then
468   CPP_KEY="$CPP_KEY CPP_COSP"
469   COSP_PATH="$LIBFGCM/phylmd/cosp"
470#   LIB="${LIB} -l${LIBPREFIX}cosp"
471fi
472
473if [[ "$cosp2" == "true" ]]
474then
475   CPP_KEY="$CPP_KEY CPP_COSP2"
476   COSP_PATH="$LIBFGCM/phylmd/cosp2"
477#   LIB="${LIB} -l${LIBPREFIX}cosp2"
478fi
479
480if [[ "$cospv2" == "true" ]]
481then
482   CPP_KEY="$CPP_KEY CPP_COSPV2"
483   COSP_PATH="$LIBFGCM/phylmd/cospv2"
484#   LIB="${LIB} -l${LIBPREFIX}cosp2"
485fi
486
487
488
489INCLUDE="$INCLUDE ${NETCDF_INCDIR}"
490LIB="$LIB ${NETCDF_LIBDIR}"
491
492########################################################################
493# calcul du nombre de dimensions
494########################################################################
495
496
497dim_full=$dim
498dim=`echo $dim | sed -e 's/[^0-9]/ /g'` 
499set $dim
500dimc=$#
501echo calcul de la dimension
502echo dim $dim
503echo dimc $dimc
504
505
506########################################################################
507# Gestion des dimensions du modele.
508# on cree ou remplace le fichier des dimensions
509########################################################################
510
511cd $LIBFGCM/grid
512if [[ -f dimensions.h ]]
513then
514  echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs'
515  echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
516  echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
517  echo  vous pouvez continuer en repondant oui.
518  echo "Voulez-vous vraiment continuer?"
519  echo ""
520  echo "WARNING: you are probably already compiling the model somewhere else."
521  echo "Wait until the first compilation is finished before launching this one."
522  echo "If you are sure that you are not compiling elsewhere, just answer "
523  echo "yes (or 'oui') to the question below to proceed."
524  echo "Do you wish to continue?"
525  read reponse
526  if [[ $reponse == "oui" || $reponse == "yes" ]]
527  then
528    \rm -f $LIBFGCM/grid/dimensions.h
529  else
530    exit
531  fi
532fi
533
534
535cd $LIBFGCM/grid/dimension
536./makdim $dim
537cat $LIBFGCM/grid/dimensions.h
538cd $LMDGCM
539
540
541########################################################################
542# Differentes dynamiques (3d, 2d, 1d)
543########################################################################
544
545dimension=`echo $dim | wc -w`
546echo dimension $dimension
547
548if (( $dimension == 3 ))
549then
550  cd $LIBFGCM/grid
551  \rm fxyprim.h
552  cp -p fxy_${grille}.h fxyprim.h
553#else
554#  echo "Probleme dans les dimensions de la dynamique !!"
555#  echo "Non reactive pour l'instant !!!"
556fi
557
558if (( $dimension == 1 ))
559then
560  CPP_KEY="$CPP_KEY CPP_1D"
561##in 1D, add dyn3d to include path (because main prog is in physics)
562  INCLUDE="$INCLUDE -Ilibf/dyn3d -Ilibf/dyn3d_common"
563## no filtre in 1d:
564  FILTRE_PATH=$LMDGCM/.void_dir
565## no need to compile all routines in dyn3d_common either:
566  DYN_COMMON_PATH=$LMDGCM/.void_dir
567## no need to compile all routines in dynlmdz_phy... ;
568## (because key ones are included in 1D main program)
569  DYN_PHYS_PATH=$LMDGCM/.void_dir
570  DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
571fi
572
573######################################################################
574#   Traitement special pour le nouveau rayonnement de Laurent Li.
575#   ---> YM desactive pour le traitemement en parallele
576######################################################################
577
578#if [[ -f $libf/phy$physique/raddim.h ]]
579#then
580# if [[ -f $libf/phy$physique/raddim.$dimh.h ]]
581#then
582#  \rm -f $libf/phy$physique/raddim.h
583#  cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
584#  echo $libf/phy$physique/raddim.$dimh.h
585#  cat $libf/phy$physique/raddim.h
586# else
587#  echo On peut diminuer la taille de l executable en creant
588#  echo le fichier $libf/phy$physique/raddim.$dimh.h
589#  \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
590# fi
591#fi
592
593######################################################################
594# Gestion du filtre qui n'existe qu'en 3d.
595######################################################################
596
597if (( `expr $dimc \> 2` == 1 ))
598then
599   filtre="FILTRE=$filtre"
600else
601   filtre="FILTRE= L_FILTRE= "
602fi
603echo MACRO FILTRE $filtre
604
605echo $dimc
606
607
608
609######################################################################
610# Creation du suffixe de la configuration
611######################################################################
612
613
614SUFF_NAME=_${dim_full}
615SUFF_NAME=${SUFF_NAME}_phy${physique}
616
617if [[ "$parallel" != "none" ]]
618then
619  SUFF_NAME=${SUFF_NAME}_para
620  DYN=dyn${dimc}d${paramem}
621  if [[ "$paramem" == "mem" ]]
622  then
623      SUFF_NAME=${SUFF_NAME}_${paramem}
624  else
625      echo "The version of the dynamics in dyn3dpar is no longer updated."
626      echo "You should use option \"-mem\"."
627      exit 1
628  fi
629else
630  SUFF_NAME=${SUFF_NAME}_seq
631  if (( $dimension == 1 ))
632  then
633    # dynamics-related routines in"dyn1d" subdirectory of phy${physique}
634    DYN=phy${physique}/dyn1d
635  else
636    DYN=dyn${dimc}d
637  fi
638fi
639
640if [[ $veget != "false" ]]
641then
642  SUFF_NAME=${SUFF_NAME}_orch
643fi
644
645if [[ $couple != "false" ]]
646then
647  SUFF_NAME=${SUFF_NAME}_couple
648fi
649
650if [[ $chimie == "INCA" ]]
651then
652  SUFF_NAME=${SUFF_NAME}_inca
653fi
654
655if [[ $libphy == "true" ]]
656then
657  # special case where we compile only the physics
658  DYN=$LMDGCM/.void_dir
659  DYN_COMMON_PATH=$LMDGCM/.void_dir
660  FILTRE_PATH=$LMDGCM/.void_dir
661  DYN_PHYS_PATH=$LMDGCM/.void_dir
662  DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
663  #and there is no main program to generate
664  code=""
665  SUFF_NAME=""
666else
667  SUFF_NAME=${SUFF_NAME}.e
668fi
669
670cd $LMDGCM
671config_fcm="config.fcm"
672rm -f $config_fcm
673touch $config_fcm
674rm -f bin/${code}${SUFF_NAME}.e
675rm -f arch.fcm
676rm -f arch.opt
677
678echo "%ARCH          $arch"          >> $config_fcm
679echo "%INCDIR        $INCLUDE"       >> $config_fcm 
680echo "%LIB           $LIB"           >> $config_fcm
681echo "%ROOT_PATH     $PWD"           >> $config_fcm
682echo "%LIBF          $LIBFGCM"       >> $config_fcm
683echo "%LIBO          $LIBOGCM"       >> $config_fcm
684echo "%DYN           $DYN"           >> $config_fcm
685echo "%DYN_COMMON    $DYN_COMMON_PATH" >> $config_fcm
686echo "%PHY_COMMON    $PHY_COMMON_PATH" >> $config_fcm
687echo "%FILTRE        $FILTRE_PATH"   >> $config_fcm
688echo "%PHYS          phy${physique}" >> $config_fcm
689echo "%DYN_PHYS      $DYN_PHYS_PATH" >> $config_fcm
690echo "%DYN_PHYS_SUB  $DYN_PHYS_SUB_PATH" >> $config_fcm
691echo "%RRTM          $RRTM_PATH"     >> $config_fcm
692echo "%DUST          $DUST_PATH"     >> $config_fcm
693echo "%STRATAER      $STRATAER_PATH" >> $config_fcm
694echo "%SISVAT        $SISVAT_PATH"   >> $config_fcm
695echo "%INLANDSIS     $INLANDSIS_PATH" >> $config_fcm
696echo "%COSP          $COSP_PATH"     >> $config_fcm
697echo "%CPP_KEY       $CPP_KEY"       >> $config_fcm
698echo "%EXEC          $code"          >> $config_fcm
699echo "%SUFF_NAME     $SUFF_NAME"     >> $config_fcm
700echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm
701echo "%PARA_FFLAGS   $PARA_FFLAGS"   >> $config_fcm
702echo "%PARA_LD       $PARA_LD"       >> $config_fcm
703echo "%EXT_SRC       $EXT_SRC"       >> $config_fcm
704
705
706
707ln -s arch/arch-${arch}.fcm arch.fcm
708if test -f arch/arch-${arch}.opt &&  [ $compil_mod = "prod" ]
709  then
710  ln -s arch/arch-${arch}.opt arch.opt
711else
712  ln -s .void_file arch.opt
713fi
714
715rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock
716./build_gcm ${fcm_path} -j $job $full
717
718err=$?
719# Check error message from fcm build
720if [ $err != 0 ] ; then
721  exit 1
722fi
723
724rm -rf tmp_src
725rm -rf config
726ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config
727ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/ppsrc tmp_src
728
729
730if [[ -r $LIBFGCM/grid/dimensions.h ]]
731then
732  # Cleanup: remove dimension.h file
733  \rm -f $LIBFGCM/grid/dimensions.h
734fi
Note: See TracBrowser for help on using the repository browser.