source: LMDZ6/branches/Amaury_dev/makelmdz_fcm @ 5090

Last change on this file since 5090 was 5089, checked in by abarral, 4 months ago

Remove unused (2015+) CPP_EARTH
Start refactoring makelmdz_fcm to prepare investigating fcm upgrade

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