source: LMDZ6/branches/LMDZ_ECRad/makelmdz_fcm @ 4258

Last change on this file since 4258 was 4203, checked in by lguez, 2 years ago

Sync latest trunk changes to branch LMDZ_ECRad.

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