source: CONFIG/UNIFORM/v7/IPSLCM7/compile_ipslcm7.sh

Last change on this file was 6886, checked in by cetlod, 4 days ago

Being able to compile NEMO in debug mode without changing arch file

  • Property svn:executable set to *
File size: 31.8 KB
RevLine 
[5479]1#!/bin/bash
2# Default options
3#
4#
5#
6date
7#### 1  Set up the compiling options
8#### Define some directories
9submitdir=$( pwd )
10modipsl=$submitdir/../..
11arch_path=$submitdir/ARCH
12mysrc_path=$submitdir/SOURCES
[6722]13export ROOT=$modipsl/modeles/IOIPSL
[6641]14#### Set default options
15# Activate compilation of LMDZ for regular latlon grid without DYNAMICO
[6856]16regular_latlon=n
[6677]17# Atmospheric resolution for regular grid for LMDZ/ORCHIDEE, if regular_latlon=y
[5479]18resol_atm=144x142x79
19# Coupled with ocean biogeochemistry (y/n)
[6346]20nemotop=y
[5479]21# Optimization mode
22# optmode=prod/dev/debug
23optmode=prod
24# fcm_arch
25fcm_arch=default
26# Default values to be overritten
27parallel=mpi_omp
28export fcm_arch parallel xios
29full_flag=""
30full_nemo=n
31full_inca=""
32full_xios=""
33full_lmdz=""
34full_orch=""
35full_dyna=""
[6648]36full_oasis=n
[6296]37# choose radiative code compilation option
38rad=rrtm
39opt_rad=""
[6544]40#choose chemistry inca configuration
41optchimie=GES
[6462]42
[6638]43# subconfig : which sub-configuration to compile. By default, the full extracted configuration is compiled.
44subconfig=default
45
[6707]46# orchversion tells if ORCHIDEE_2_2 or ORCHIDEE_4 is compiled. This is used as argument and also in the suffix of the executables.
[6462]47orchversion=orch22
[6691]48# orchdriver : Permet to compile the ORCHIDEE offline drivers. This option is activated by setting -orchdriver as argument.
[6705]49# Drivers are now compiled by default
50orchdriver="-driver"
[6462]51
[5479]52# Default netcdf_lib is used for XIOS but can be change by argument
53netcdf_lib=""
54
[6827]55## Arguments in order to compress temporary files after compilation
56tar=no
57comp_tar=yes
58
[5479]59# Output text file for compilation of each component
60datestr=`LC_ALL=C date +"%Y%m%dT%H%M"`
61outfile=$submitdir/out_compile_ipslcm7.$datestr
62echo > $outfile
63echo; echo "Text output from compilation will be stored in file out_compile_ipslcm7.$datestr"; echo
64
[6538]65
66rm -f out_compile_ipslcm7
67ln -s ${outfile} out_compile_ipslcm7
68
69
[5479]70#### Read arguments
71# Loop over all arguments to modify default set up
72while (($# > 0)) ; do
73    case $1 in
[6677]74        "-h"|"-help") cat <<end_help
[5479]75########################################################################
76# Usage of the script compile_ipslcm7.sh
77#
78########################################################################
79
80./compile_ipslcm7.sh [Options]
81
[6677]82Description of all options:
[5479]83
[6677]84[-full] Full recompilation of all components. This option can be added to all other options.
85[-cleannemo] Full recompilation of NEMO component only.
[6856]86[-regular_latlon yes/y/no/n] Activate or deactivate compilation of LMDZ dynamics for regular latlon grid.
87                             Default resol_atm size is used. This option is set in addition to the compilation of the icosahedric grid.
[6677]88[-resol_atm XXXxYYYxZZ] Define which regular grid to compile. A default grid is set if this option is not used.
89[-debug / -dev / -prod] Level of optimization. One of these can be added to all other compile options. Default: -prod.
90[-subconfig X] Set this option if you want to compile a sub-configuration. X can be one of following sub-configurations :
91               ICOLMDZORINCA, ICOLMDZOR, LMDZORINCA, LMDZOR, IPSLCM-reg or IPSLCM
92               By default, all available components are compiled.
[6707]93[-orch4 / -orch22] Choice of ORCHIDEE version. The source code are found in modeles/ORCHIDEE_4 or modeles/ORCHIDEE_2_2
[6677]94                   and a link will be set to the choosen model version. Default version is currently ORCHIDEE_2_2 (-orch22).
[6691]95[-orchdriver]   Activate compilation of orchidee offline drivers
[6827]96[-tar]: option to compress XIOS repository that takes many inodes without compilation
97[-comp_tar]: option to compile and compress XIOS repository if compilation succed
98[-notar]: do not compress XIOS repository
[5479]99
[6827]100
[6677]101Example 1: Default compilation of IPSLCM7
[5479]102./compile_ipslcm7.sh
103
[6677]104Example 2: Default compilation in debug mode
[5479]105./compile_ipslcm7.sh -debug
106
107Example 3: Default compilation with full recompilation of all components. No clean is needed.
108./compile_ipslcm7.sh -full
109
[6677]110Example 4: Compilation in addition of LMDZ in regular lat-lon for a specific resolution :
[6641]111./compile_ipslcm7.sh -resol_atm 144x142x95
[5479]112
[6856]113Example 4b: Add compilation of LMDZ in regular grid with default resolution.
114./compile_ipslcm7.sh -regular_latlon yes
[6677]115
[6707]116Example 5: Compilation of ORCHIDEE_4 version
[6462]117./compile_ipslcm7.sh -orch4
118
[6544]119Example 6: compilation of a specific chemistry for INCA (default is GES)
120./compile_ipslcm7.sh -chimie NMHC_AER_S
121
[6677]122Example 7: Compilation of sub-configuration LMDZOR :
123./compile_ipslcm7.sh -subconfig LMDZOR
124
[6827]125Example 5: Compile without compressing XIOS and LMDZ/libo in tar files
126./compile_ipslcm7.sh -notar
127
[5479]128end_help
129            exit;;
130
131        "-parallel")   parallel=$2 ; shift ; shift ;;
132        "-arch")       fcm_arch="$2" ; shift ; shift ;;
133        "-debug")      optmode=debug ; shift ;;
134        "-dev")        optmode=dev ; shift ;;
135        "-prod")       optmode=prod ; shift ;;
[6677]136        "-regular_latlon")  regular_latlon=$2 ; shift ; shift ;;
137        "-resol_atm")  regular_latlon=y ; resol_atm=$2 ; shift ; shift ;;
[6638]138        "-subconfig")  subconfig=$2 ; shift ; shift ;;
[6649]139        "-full")       full_flag="-full"; full_nemo=y ; full_xios="--full" ; full_lmdz="-full" ; full_orch="-full" ; full_oasis=y ; full_inca="-clean" ; full_dyna="-full" ; shift ;;
[5479]140        "-full_xios")  full_xios="--full" ; shift ;;  # Note only full_xios is using double dash: --full
141        "-full_lmdz")  full_lmdz="-full"  ; shift ;;
142        "-full_orch")  full_orch="-full"  ; shift ;;
143        "-full_nemo")  full_nemo=y ; shift ;;
144        "-full_inca")  full_inca="-clean"; shift ;;
[6648]145        "-full_dyna")  full_dyna="-full" ; shift ;;
146        "-full_oasis") full_oasis=y ; shift ;;
[5479]147        "-cleannemo")  full_nemo=y ; shift ;;
[6296]148        "-rad")        rad=$2; shift ; shift ;;
[6640]149        "-orch22")     orchversion="orch22"; shift ;;
150        "-orch4")      orchversion="orch4"shift ;;
[6691]151        "-orchdriver") orchdriver="-driver"shift ;;
[6544]152        "-chimie")     optchimie=$2; shift ; shift;;
[6827]153        "-tar")             tar=yes ; shift ;;
154        "-comp_tar")        comp_tar=yes ; shift ;;
155        "-notar")           comp_tar=no ; shift ;;
[5479]156        *)             echo "unknown option "$1" , exiting..." ; exit
157    esac
158done
159
[6638]160
161# Define which sub-configuration to compile. By default all extracted source components are compiled.
162source define_config.sh
163
[5479]164echo "Following options are set in current compiling:" >> $outfile
165echo "   regular_latlon=$regular_latlon (if yes, then resol_atm=${resol_atm})" >> $outfile 
[6641]166echo "   resol_atm=${resol_atm}, nemotop=${nemotop}" >> $outfile 
[5479]167echo "   optmode = $optmode, parallel = $parallel, fcm_arch = $fcm_arch " >> $outfile 
[6648]168echo "   full_flag=$full_flag, full_xios=$full_xios, full_lmdz=$full_lmdz, full_orch=$full_orch, full_nemo=$full_nemo, full_dyna=$full_dyna, full_oasis=$full_oasis" >> $outfile 
[6827]169echo "   tar=$tar, comp_tar=$comp_tar" >> $outfile
[6638]170echo "   compinca=$compinca compnemo=$compnemo compoasis=$compoasis compdyna=$compdyna complmdz=y comporch=y compxios=y" >> $outfile
[5479]171echo >> $outfile
[6640]172### Verification of argument
173# Set argorch depeinding on the version of ORCHIDEE. This is argument needed for the compilation of LMDZ to consider coherent interface.
174if [ $orchversion == orch22 ] ; then
175    argorch=orchidee2.1
176elif [ $orchversion == orch4 ] ; then
177    argorch=orchideetrunk
178else
179    echo "ERROR in version of ORCHIDEE. It is only possible to have orch22 or orch4 for now"
180fi
[6638]181
[6827]182# Compress XIOS and LMDZ/libo without compiling if tar=yes
183if [ $tar == yes ] ; then
184    echo "Option tar activated to compress XIOS and LMDZ/libo. No compilation will be done."
185    echo >> $outfile
186    echo "Option tar activated to compress XIOS and LMDZ/libo. No compilation will be done." >> $outfile
187    if [[ -d $modipsl/modeles/XIOS ]] ; then
188        echo " Now tar XIOS repository"
189        echo " Now tar XIOS repository" >> $outfile
[6840]190        cd $modipsl/modeles
191        tar -cf XIOS.tar XIOS
192        rm -rf XIOS
[6827]193    else
194        echo " No XIOS repository to compress"
195        echo " No XIOS repository to compress" >> $outfile
196    fi
197
198    if [[ -d $modipsl/modeles/LMDZ/libo ]] ; then
199        echo "Now tar LMDZ/libo repository"
200        echo "Now tar LMDZ/libo repository" >> $outfile
[6840]201        cd $modipsl/modeles/LMDZ
202        tar -cf libo.tar libo
203        rm -rf libo
[6827]204    else
205        echo " No LMDZ/libo repository to compress"
206        echo " No LMDZ/libo repository to compress" >> $outfile
207    fi
208
209    echo "END OF SCRIPT"
210    echo "END OF SCRIPT" >> $outfile
211    exit
212fi
213
[5479]214### Read host dependent default values
215### These variables will not be changed if they were set as argument
216###./host.sh $host
217# Later : Following lines should be set in host.sh file
218# begin host.sh
219if [ $fcm_arch == default ] ; then
220    # Find out current host and source specific paths and commands for the host
221    case $( hostname -s ) in
222        jean-zay*)
[6629]223            if [[ $( hostname -s ) != *"pp"* ]] ; then
224                echo "Warning! You MUST compile on jean-zay-pp."
225                echo "EXIT"
226                exit
227            else
228                fcm_arch=X64_JEANZAY
229            fi ;;
[5479]230        irene170|irene171|irene190|irene191|irene192|irene193)
231            fcm_arch=X64_IRENE;;
232        irene172|irene173|irene194|irene195)
233            fcm_arch=X64_IRENE-AMD;;
234        asterix*|obelix*)
235            fcm_arch=ifort_LSCE
236            if [ "${parallel}" == "mpi_omp" ] ; then
237                echo "Warning!! Currently at Obelix hybrid mode is not possible."
238                echo "          Option -parallel mpi_omp is now changed to -parallel mpi"
239                echo ""
240                parallel=mpi
241            else
242                echo "You used -parallel" $parallel
243            fi ;;
[6296]244        spirit*)
245            fcm_arch=ifort_MESOIPSL;;
[5479]246        ciclad*|climserv*|loholt*|camelot*)
247            fcm_arch=ifort_CICLAD;;
248        *)
249            echo Current host is not known. You must use option -arch to specify which architecuture files to use.
250            echo Exit now.
251            exit
252    esac
253fi
254
255# Set a link to arch.env if arch-${fcm_arch}.env file exist for current fcm_arch.
256# The link arch.env is also set in config.card and will be used by libIGCM to ensure the same running environnement.
257if [ -f ARCH/arch-${fcm_arch}.env ] ; then
258    echo >> $outfile
259    echo "The file ARCH/arch-${fcm_arch}.env will now be sourced with modules needed for compilation for all components."
[6296]260    echo "Note that this new environement might be kept after compilation."
261    echo "If this is the case, source again your personal environment after compilation."
262    echo " Personal module list before sourcing of ARCH/arch.env file:"    >> $outfile 
263    module list   >> $outfile 2>&1
[6808]264    svn_version=$(module -t list | grep subversion)
[6296]265       
[5479]266    # Make a link to this file, to be used also in config.card
267    rm -f ARCH/arch.env
268    ln -s arch-${fcm_arch}.env ARCH/arch.env
269
270    # Source the file
[6296]271    source ARCH/arch.env   >> $outfile 2>&1
272    if [ X$svn_version != X ] ; then
273        module load ${svn_version}
274    fi
275    echo >> $outfile
276    echo " New module list after sourcing of ARCH/arch.env file:"    >> $outfile 
277    module list   >> $outfile 2>&1
[5479]278fi
279
[6462]280
281#### Clean if full_orch
282# If full recompilation of ORCHIDEE then first clean modipsl/lib folder
283if [ X${full_orch} == X"-full" ] ; then
284   rm -f $modipsl/lib/*
285fi
286
[5479]287#### 2 Do the compilation
288## 2.1 Compile ioipsl
289cd $modipsl/modeles/IOIPSL
290echo; echo "NOW COMPILE IOIPSL"
291echo >> $outfile ; echo " NOW COMPILE IOIPSL"   >> $outfile 
292
293echo ./makeioipsl_fcm -$optmode -parallel -arch ${fcm_arch} -arch_path $arch_path -j 8 $full_flag   >> $outfile 
294     ./makeioipsl_fcm -$optmode -parallel -arch ${fcm_arch} -arch_path $arch_path -j 8 $full_flag   >> $outfile 2>&1
295# Test if compiling succeded
296if [[ $? != 0 ]] ; then
297    echo "THERE IS A PROBLEM IN IOIPSL COMPILATION - STOP"
298    exit
299fi
300
[6638]301if [ $compoasis == y ] ; then
[5479]302## 2.2 Compile oasis3-mct
[6648]303if [ $full_oasis == y ] ; then
304    rm -rf $modipsl/oasis3-mct/BLD
305fi
[5479]306cd $modipsl/oasis3-mct/util/make_dir
307echo; echo "NOW COMPILE OASIS3-MCT"
308echo >> $outfile ; echo " NOW COMPILE OASIS3-MCT"   >> $outfile
309cp $mysrc_path/OASIS3-MCT/make_${fcm_arch} make.inc
310
311echo make -f TopMakefileOasis3 >> $outfile
312     make -f TopMakefileOasis3 >> $outfile 2>&1
[6686]313if [[ $? != 0 ]] ; then
314    echo "THERE IS A PROBLEM IN OASIS COMPILATION - STOP"
315    exit
316fi
317 
[5479]318
[6638]319else
320echo ; echo No compilation of OASIS
321fi
[5479]322
323## 2.3 Compile xios
[6840]324cd $modipsl/modeles
[6827]325echo; echo "NOW DECOMPRESS XIOS IF NEEDED"
326# First check if XIOS needs to be decompressed
327# In priority search for modeles/XIOS_${optmode}.tar but if it doesn't exist take
328# the first which is found.
329if [[ -d $modipsl/modeles/XIOS ]] ; then
330    echo "Found XIOS -> no decompress needs to be do";  >> $outfile
331elif [[ -f $modipsl/modeles/XIOS_${optmode}.tar ]]; then
332    echo >> $outfile
333    echo "Found XIOS_${optmode}.tar -> decompress repository" >> $outfile
[6840]334    tar -xf XIOS_${optmode}.tar >> $outfile 2>&1
[6827]335elif [[ -f $modipsl/modeles/XIOS_prod.tar ]]; then
336    echo >> $outfile
337    echo "Found XIOS_prod.tar -> decompress repository" >> $outfile
[6840]338    tar -xf $modipsl/modeles/XIOS_prod.tar >> $outfile 2>&1
[6827]339elif [[ -f $modipsl/modeles/XIOS_debug.tar ]]; then
340    echo >> $outfile
341    echo "Found XIOS_debug.tar -> decompress repository" >> $outfile
[6840]342    tar -xf $modipsl/modeles/XIOS_debug.tar >> $outfile 2>&1
[6827]343elif [[ -f $modipsl/modeles/XIOS_dev.tar ]]; then
344    echo >> $outfile
345    echo "Found XIOS_dev.tar -> decompress repository" >> $outfile
[6840]346    tar -xf $modipsl/modeles/XIOS_dev.tar >> $outfile 2>&1
[6827]347elif [[ -f $modipsl/modeles/XIOS.tar ]]; then
348    echo >> $outfile
349    echo "Found XIOS.tar -> decompress repository" >> $outfile
[6840]350    tar -xf $modipsl/modeles/XIOS.tar >> $outfile 2>&1
[6827]351else
352    echo "XIOS source code was not found. Exit"
353    echo "XIOS source code was not found. Exit" >> $outfile
354    exit
355fi
356
[5479]357cd $modipsl/modeles/XIOS
358echo; echo "NOW COMPILE XIOS"
359echo >> $outfile ; echo " NOW COMPILE XIOS"   >> $outfile 
[6638]360if [ $compoasis == y ] ; then
361argoasis="--use_oasis oasis3_mct "
362else
363argoasis=" "
364fi
365echo ./make_xios $argoasis --$optmode --arch $fcm_arch --arch_path $arch_path ${netcdf_lib} --job 4 $full_xios   >> $outfile 
366     ./make_xios $argoasis --$optmode --arch $fcm_arch --arch_path $arch_path ${netcdf_lib} --job 4 $full_xios   >> $outfile 2>&1
[5479]367# Test if compiling succeded
368if [[ $? != 0 ]] ; then
369    echo "THERE IS A PROBLEM IN XIOS COMPILATION - STOP"
370    exit
371fi
372# Move executables to modipsl/bin
373if [ -f $modipsl/modeles/XIOS/bin/xios_server.exe ] ; then
374    mv $modipsl/modeles/XIOS/bin/xios_server.exe $modipsl/bin/xios_server_${optmode}.exe
375else
376    echo "THERE IS A PROBLEM IN XIOS COMPILATION EXECUTABLE MISSING - STOP"
377    exit
378fi
379
380
[6462]381## 2.4 Compile ORCHIDEE
382# Choose ORCHIDEE version to compile and create a link to generic folder name ORCHIDEE.
383# This link is needed for the compilation of ICOSA_LMDZ for it to find the orchidee librarie.
384cd $modipsl/modeles
385rm -f ORCHIDEE
386if [ $orchversion == orch22 ] ; then
387    ln -s ORCHIDEE_2_2 ORCHIDEE
388    cd $modipsl/modeles/ORCHIDEE_2_2
389    echo; echo "NOW COMPILE ORCHIDEE_2_2"
390    echo >> $outfile ; echo " NOW COMPILE ORCHIDEE_2_2"   >> $outfile 
391else
[6707]392    ln -s ORCHIDEE_4 ORCHIDEE
393    cd $modipsl/modeles/ORCHIDEE_4
394    echo; echo "NOW COMPILE ORCHIDEE_4 (trunk)"
395    echo >> $outfile ; echo " NOW COMPILE ORCHIDEE_4 (trunk)"   >> $outfile 
[6462]396fi
[5479]397
398# Check if the compilation of ORCHIDEE was previsouly interupted prematured.
399# In that case, the files fcm.bld.lock exist. If the file exist, it is here removed to avoid makeorchidee_fcm
400# to ask question and wait for interactivly answer from the user.
401if [ -f build/fcm.bld.lock ] ; then
402    echo >> $outfile
403    echo " WARNING!! The file ORCHIDEE/build/fcm.bld.lock exist. "   >> $outfile
404    echo "           This means that the compilation is either currently on going in another terminal was previous interupted before the end."   >> $outfile
405    echo "           The file will now be removed. "   >> $outfile
406    echo >> $outfile
407    rm -f build/fcm.bld.lock
408fi
409
[6725]410if [ $compoasis == y ] ; then
411    # For this case, XIOS library needs to be linked with OASIS library
412    argoasis="-linkwithoasis"
413else
414    argoasis=""
415fi
416
417echo    ./makeorchidee_fcm -j 8 -xios -parallel $parallel -$optmode -arch ${fcm_arch} -arch_path $arch_path ${argoasis} $full_orch $orchdriver >> $outfile 
418        ./makeorchidee_fcm -j 8 -xios -parallel $parallel -$optmode -arch ${fcm_arch} -arch_path $arch_path ${argoasis} $full_orch $orchdriver >> $outfile 2>&1
[5479]419# Test if compiling finished
420if [[ $? != 0 ]] ; then
421    echo "THERE IS A PROBLEM IN ORCHIDEE COMPILATION - STOP"
422    exit
423fi
424
[6462]425# Rename exetubles for ORCHIDEE offline driver with suffix version
426cd $modipsl/bin
[6705]427if [ -f orchideedriver ] ; then
428    mv orchideedriver orchideedriver.${orchversion}_$optmode
429    ln -sf orchideedriver.${orchversion}_$optmode orchideedriver_$optmode
430fi
431if [ -f orchidee_ol ] ; then
432    mv orchidee_ol orchidee_ol.${orchversion}_$optmode
433    ln -sf orchidee_ol.${orchversion}_$optmode orchidee_ol_$optmode
434fi
[5479]435
[6639]436## 2.5 Compile NEMO
[6638]437if [ $compnemo == y ] ; then
[6639]438    nemo_root=$modipsl/modeles/NEMO
439    cfg_ref=ORCA2_ICE_PISCES
440    cfg_wrk=ORCA_ICE_TRC
441    addkeys="key_oasis3 key_top key_si3 key_isf"
442    delkeys=""
443   
444    if [ ${nemotop} == n ] ; then
445        cfg_wrk=ORCA_ICE
446        delkeys="key_top"
447    fi
448   
449    if [ ${nemotop} == n ] ; then
450        echo; echo "NOW COMPILE NEMO with ice model SI3 without passive tracer model TOP"
451        echo >> $outfile ; echo " NOW COMPILE NEMO with ice model SI3 without passive tracer model TOP"   >> $outfile
452    else
453        echo; echo "NOW COMPILE NEMO with ice model SI3 and passive tracer model TOP"
454        echo >> $outfile ; echo " NOW COMPILE NEMO with ice model SI3 and passive tracer model TOP"   >> $outfile
455    fi
[6886]456
457    # Compilation management
458    # Nemo debug ?
459    cp $mysrc_path/NEMO/arch-${fcm_arch}.fcm   $mysrc_path/NEMO/arch-nemo.fcm
460    if [ $optmode == debug ] ; then
461       if (! grep -q "^%DEBUG_FCFLAGS"  $mysrc_path/NEMO/arch-nemo.fcm); then
462          echo "ERROR: You must defined '%DEBUG_FCFLAGS' in your arch file if you want to compile Nemo in debug mode using '-d' option"
463          exit 1
464       fi
465       # duplicate the lines starting with %DEBUG_XXX and replace, in the duplicated line, %DEBUG_XXX by %XXX
466       sed -i'' -e "/^%DEBUG_/{p;s/^%DEBUG_\([^ ]*\)/%\1/;}" $mysrc_path/NEMO/arch-nemo.fcm
467    else
468       if (! grep -q "^%PROD_FCFLAGS" $mysrc_path/NEMO/arch-nemo.fcm ); then
469          echo "WARNING: '%PROD_FCFLAGS' not defined in your arch file, makenemo will use '%FCFLAGS' instead"
470       fi
471       # duplicate the lines starting with %PROD_XXX and replace, in the duplicated line, %PROD_XXX by %XXX
472      sed -i'' -e "/^%PROD_/{p;s/^%PROD_\([^ ]*\)/%\1/;}" $mysrc_path/NEMO/arch-nemo.fcm
473    fi
474
[6639]475    echo >> $outfile ; echo cd $nemo_root  >> $outfile
[6886]476    echo >> $outfile ; echo cp $mysrc_path/NEMO/arch-nemo.fcm arch/CNRS/arch-${fcm_arch}.fcm   >> $outfile
[6639]477    echo >> $outfile
[6886]478
479    cd $nemo_root ; mv $mysrc_path/NEMO/arch-nemo.fcm   arch/CNRS/arch-${fcm_arch}.fcm
480
[6639]481    # creation of config
482    echo >> $outfile ; echo cd $nemo_root  >> $outfile
483    echo ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref -j0 add_key "$addkeys"  del_key "$delkeys"   >> $outfile
484    echo >> $outfile
485    cd $nemo_root
486    ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref -j0  add_key "$addkeys"  del_key "$delkeys"  >> $outfile 2>&1
487   
488   
489    # Copy of specfic source files
490    echo >> $outfile ; echo cp $mysrc_path/NEMO/*.*90  $nemo_root/cfgs/$cfg_wrk/MY_SRC/.   >> $outfile
491    echo >> $outfile
492    cp $mysrc_path/NEMO/*.*90  $nemo_root/cfgs/$cfg_wrk/MY_SRC/.
493   
494   
495    if [ $full_nemo == y ] ; then
496        # To make a full compilation, first make a clean to remove all files produced during previous compilation
497        echo ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref clean   >> $outfile
498        echo >> $outfile
499        ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref clean  >> $outfile 2>&1
500    fi
501    echo ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref -j8  >> $outfile
502    echo >> $outfile
503    ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref -j8  >> $outfile 2>&1
504   
505    echo >> $outfile
506    echo "Move nemo executable to modipsl/bin" >> $outfile
507    echo ls -lrt $nemo_root/cfgs/$cfg_wrk/BLD/bin   >> $outfile
508    ls -lrt $nemo_root/cfgs/$cfg_wrk/BLD/bin  >> $outfile
509    echo >> $outfile
510   
511    if [ -f $nemo_root/cfgs/$cfg_wrk/BLD/bin/nemo.exe ] ; then
512        mv $nemo_root/cfgs/$cfg_wrk/BLD/bin/nemo.exe $modipsl/bin/opa_${optmode}.exe
513    else
514        echo "ERROR nemo.exe executable does not exist."
515        echo "THERE IS A PROBLEM IN NEMO COMPILATION - STOP"
516        exit
517    fi
518   
[5479]519else
[6639]520    echo ; echo No compilation of NEMO
[5479]521fi
[6346]522
[6639]523##2.6  Compile INCA
[6638]524if [ $compinca == y ] ; then
[6544]525    cd $modipsl/modeles/INCA
[6639]526   
[6544]527    echo; echo "NOW COMPILE INCA ${optchimie}"
[6588]528    echo >> $outfile ; echo " NOW COMPILE INCA ${optchimie}"   >> $outfile 
529   
[6649]530    echo ./makeinca_fcm -chimie ${optchimie} -$optmode -xios -parallel mpi_omp -j 8 -arch ${fcm_arch}  -arch_path $arch_path $full_inca  >> $outfile
531    ./makeinca_fcm -chimie ${optchimie} -$optmode -xios -parallel mpi_omp  -j 8 -arch ${fcm_arch} -arch_path $arch_path $full_inca >> $outfile 2>&1
[6639]532   
[6544]533    # Test if compiling finished
534    if [[ $? != 0 ]] ; then
535        echo "THERE IS A PROBLEM IN INCA COMPILATION - STOP"
536        echo "ALL INFORMATION IN FILE $outfile"
537        exit
538    fi
[6639]539   
[6544]540    echo "Move inca.dat modipsl/bin"
541    if [[ -f $modipsl/modeles/INCA/SIMULATIONS/${optchimie}/inca.dat ]] ;  then 
542        mv $modipsl/modeles/INCA/SIMULATIONS/${optchimie}/inca.dat $modipsl/bin/inca_${optchimie}.dat ;
543    else
544        echo "THERE IS A PROBLEM IN INCA COMPILATION - STOP"
545        echo "ALL INFORMATION IN FILE $outfile"
546        exit   
547    fi
[6639]548   
[6544]549    echo "Move tracer.def to  modipsl/bin"
550    if [[ -f $modipsl/modeles/INCA/tracer.def ]] ;  then
551        mv $modipsl/modeles/INCA/tracer.def $modipsl/bin/tracer_${optchimie}.def ;
552    fi
[6639]553   
[6638]554else
[6639]555    echo ; echo No compilation of INCA
[6638]556fi
[6544]557
558## 2.7 Compile LMDZ
[6703]559
[6827]560# First check if LMDZ/libo exist or if it could be decompressed
561# If neither LMDZ/libo or LMDZ/libo_${optmode}.tar exists, nothing is done. It'll be created
562# during the compilation.
563echo; echo "NOW DECOMPRESS LMDZ/libo IF NEEDED"
564if [[ -d $modipsl/modeles/LMDZ/libo ]] ; then
565    echo "Found LMDZ/libo -> no decompress needs to be done"; >> $outfile
566elif [[ -f $modipsl/modeles/LMDZ/libo_${optmode}.tar ]]; then
567    echo "Found LMDZ/libo_${optmode}.tar -> decompress repository"; >> $outfile
568    echo >> $outfile
[6840]569    cd $modipsl/modeles/LMDZ
570    tar -xf libo_${optmode}.tar >> $outfile 2>&1
[6827]571fi
572
573
[5479]574# Compile LMDZ as library to couple to DYNAMICO
[6639]575if [ $compdyna == y ] ; then
576    echo; echo "NOW COMPILE LMDZ FOR COUPLING TO DYNAMICO"
577    echo >> $outfile ; echo " NOW COMPILE LMDZ FOR COUPLING TO DYNAMICO"   >> $outfile 
[6840]578    cd $modipsl/modeles/LMDZ   
[6639]579   
580    # Check if the compilation of LMDZ was previsouly interupted prematured.
581    # In that case, the files dimension.h and .lock exist. If the files exist, they are here removed to avoid makelmdz_fcm
582    # to ask question and wait for interactivly answer from the user.
583    if [ -f libf/grid/dimensions.h ] || [ -f .lock ] ; then
584        echo >> $outfile
585        echo " WARNING!! The file LMDZ/libf/grid/dimension.h and/or the LMDZ/.lock exist. "   >> $outfile
586        echo "           This means that the compilation is either currently on going in another terminal was previous interupted before the end."   >> $outfile
587        echo "           The files dimension.h and .lock will now be removed. "   >> $outfile
588        echo >> $outfile
589        rm -f libf/grid/dimensions.h
590        rm -f .lock
591    fi
592   
593    # Need to define the proper option for radiative code compilation. By default, we use rrtm
594    case $rad in
595        oldrad) opt_rad="" ;;
[6692]596        rrtm)    opt_rad="-rad rrtm" ;;
[6639]597        ecrad)  opt_rad="-rad ecrad" ;;
598        *) echo Only oldrad rrtm ecrad for rad option ; exit
599    esac
600   
601   
602    if [ $compinca == y ] ; then
603        arginca="-chimie INCA "
604    else
605        arginca=" "
606    fi
607   
608    if [ $compoasis == y ] ; then
609        argoasis="-c OMCT "
610    else
611        argoasis=" "
612    fi
[6640]613
614    echo ./makelmdz_fcm -p lmd $argoasis $opt_rad -$optmode -mem -parallel $parallel -libphy -v $argorch $arginca  -io xios -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz    >> $outfile 
615    ./makelmdz_fcm -p lmd $argoasis $opt_rad -$optmode -mem -parallel $parallel -libphy -v $argorch $arginca  -io xios -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz    >> $outfile 2>&1
[6639]616   
617   
618    # Test if compiling finished
619    if [[ $? != 0 ]] ; then
620        echo "THERE IS A PROBLEM IN LMDZ PHYSICS COMPILATION - STOP"
621        exit
622    fi
[5479]623fi
624
625
[6544]626## 2.8 Compile DYNAMICO
[6639]627if [ $compdyna == y ] ; then
628    cd $modipsl/modeles/DYNAMICO
629    echo; echo "NOW COMPILE DYNAMICO "
630    echo >> $outfile ; echo " NOW COMPILE DYNAMICO"   >> $outfile 
631   
632    if [ $compoasis == y ] ; then
633        argoasis="-with_oasis "
634    else
635        argoasis=" "
636    fi
637    if [ $compinca == y ] ; then
638        arginca="-with_inca "
639    else
640        arginca=" "
641    fi
642   
643   
[6789]644    echo ./make_icosa -$optmode -parallel $parallel -external_ioipsl $argoasis -with_xios -arch $fcm_arch -arch_path $arch_path -job 8 $full_dyna    >> $outfile 
645    ./make_icosa -$optmode -parallel $parallel -external_ioipsl $argoasis -with_xios -arch $fcm_arch -arch_path $arch_path -job 8 $full_dyna    >> $outfile 2>&1
[6639]646    # Test if compiling finished
647    if [[ $? != 0 ]] ; then
648        echo "THERE IS A PROBLEM IN DYNAMICO COMPILATION - STOP"
649        exit
650    fi
[6638]651fi
[6639]652   
[6544]653## 2.9 Compile interface ICOSA_LMDZ
[6642]654if [ $compdyna == y ] ; then
[6639]655    cd $modipsl/modeles/ICOSA_LMDZ
656    echo; echo "NOW COMPILE ICOSA_LMDZ "
657    echo >> $outfile ; echo " NOW COMPILE ICOSA_LMDZ"   >> $outfile 
658   
659    echo ./make_icosa_lmdz -nodeps -p lmd -$optmode -parallel $parallel $argoasis -with_orchidee $arginca -arch ${fcm_arch} -arch_path ${arch_path} -job 8 $full_dyna    >> $outfile 
660    ./make_icosa_lmdz -nodeps -p lmd -$optmode -parallel $parallel $argoasis -with_orchidee $arginca -arch ${fcm_arch} -arch_path ${arch_path} -job 8 $full_dyna    >> $outfile 2>&1
661    # Test if compiling finished
662    if [[ $? != 0 ]] ; then
663        echo "THERE IS A PROBLEM IN ICOSA_LMDZ COMPILATION - STOP"
664        exit
665    fi
666    # Move executables to modipsl/bin
667    if [ -f $modipsl/modeles/ICOSA_LMDZ/bin/icosa_lmdz.exe ] ; then
668        if [ $compinca == y ] ; then
669            mv $modipsl/modeles/ICOSA_LMDZ/bin/icosa_lmdz.exe $modipsl/bin/icosa_lmdz_${orchversion}_${optmode}_${optchimie}.exe
670            # Create link to be use by IPSLCM and LMDZOR without any change in the executable name
671            cd  $modipsl/bin
672            rm -f icosa_lmdz_${orchversion}_${optmode}.exe
673            ln -s icosa_lmdz_${orchversion}_${optmode}_${optchimie}.exe icosa_lmdz_${orchversion}_${optmode}.exe
674        else
675            mv $modipsl/modeles/ICOSA_LMDZ/bin/icosa_lmdz.exe $modipsl/bin/icosa_lmdz_${orchversion}_${optmode}.exe
676        fi
[6638]677    else
[6639]678        echo "THERE IS A PROBLEM IN ICOSA_LMDZ COMPILATION EXECUTABLE MISSING - STOP"
679        exit
[6638]680    fi
[5479]681fi
682
683
[6544]684## 2.10 Compile LMDZ for regular latlon configuration
[6727]685if [ $regular_latlon = y ] && [ $complmdz = y ] ; then
[5479]686
687    cd $modipsl/modeles/LMDZ
[6840]688
[5479]689    # Compile LMDZ regular lat-lon exectuable
690    echo; echo "NOW COMPILE LMDZ REGULAR LAT-LON MODE. Resolution = ${resol_atm}"
691    echo >> $outfile ; echo " NOW COMPILE LMDZ REGULAR LAT-LON MODE. Resolution = ${resol_atm}"   >> $outfile 
692    # Check if the compilation of LMDZ was previsouly interupted prematured.
693    # In that case, the files dimension.h and .lock exist. If the files exist, they are here removed to avoid makelmdz_fcm
694    # to ask question and wait for interactivly answer from the user.
695    if [ -f libf/grid/dimensions.h ] || [ -f .lock ] ; then
696        echo >> $outfile
697        echo " WARNING!! The file LMDZ/libf/grid/dimension.h and/or the LMDZ/.lock exist. "   >> $outfile
698        echo "           This means that the compilation is either currently on going in another terminal was previous interupted before the end."   >> $outfile
699        echo "           The files dimension.h and .lock will now be removed. "   >> $outfile
700        echo >> $outfile
701        rm -f libf/grid/dimensions.h
702        rm -f .lock
703    fi
[6638]704
[6692]705    # Need to define the proper option for radiative code compilation. By default, we use rrtm
706    case $rad in
707        oldrad) opt_rad="" ;;
708        rrtm)    opt_rad="-rad rrtm" ;;
709        ecrad)  opt_rad="-rad ecrad" ;;
710        *) echo Only oldrad rrtm ecrad for rad option ; exit
711    esac
712   
[6638]713    if [ $compinca == y ] ; then
714        arginca="-chimie INCA"
715    else
716        arginca=""
717    fi
718   
719    if [ $compoasis == y ] ; then
720        argoasis="-c OMCT"
721    else
722        argoasis=""
723    fi
[6640]724    echo ./makelmdz_fcm -d ${resol_atm} $argoasis -p lmd $opt_rad -$optmode -mem -parallel $parallel $arginca  -io xios -v $argorch -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz gcm    >> $outfile 
725         ./makelmdz_fcm -d ${resol_atm} $argoasis -p lmd $opt_rad -$optmode -mem -parallel $parallel $arginca  -io xios -v $argorch -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz gcm    >> $outfile 2>&1
[5479]726    # Test if compiling finished
727    if [[ $? != 0 ]] ; then
728        echo "THERE IS A PROBLEM IN LMDZ REGULAR LATLON COMPILATION - STOP"
729        exit
730    fi
731
[6457]732    # Find executable suffix
733    suffix=_${resol_atm}_phylmd
[6692]734    suffix=${suffix}_${rad} 
[6457]735    if [ $parallel == seq ] || [ $parallel == none ] ; then
[6544]736        suffix=${suffix}_seq_orch_inca.e
[6457]737    else
[6638]738        if [ $compoasis == y ] ; then
739            suffix=${suffix}_para_mem_orch_couple
740        else
741            suffix=${suffix}_para_mem_orch
742        fi
743        if [ $compinca == y ] ; then
744            suffix=${suffix}_inca.e
745        else
746            suffix=${suffix}.e
747        fi
[6457]748    fi
749    echo gcm suffix = $suffix
750   
[6462]751    # Move executables to modipsl/bin folder
[6457]752    echo "Move gcm.e executable to modipsl/bin"
753    if [ -f $modipsl/modeles/LMDZ/bin/gcm${suffix} ] ;  then
[6638]754        if [ $compinca == y ] ; then
755            mv $modipsl/modeles/LMDZ/bin/gcm${suffix} $modipsl/bin/gcm_${resol_atm}_${orchversion}_${optmode}_${optchimie}.e
756            # Create link to be use by IPSLCM and LMDZOR without any change in the executable name
757            cd $modipsl/bin
758            rm -f gcm_${resol_atm}_${orchversion}_${optmode}.e
759            ln -s gcm_${resol_atm}_${orchversion}_${optmode}_${optchimie}.e gcm_${resol_atm}_${orchversion}_${optmode}.e
760        else
761            mv $modipsl/modeles/LMDZ/bin/gcm${suffix} $modipsl/bin/gcm_${resol_atm}_${orchversion}_${optmode}.e
762        fi
[6457]763    else
764        echo "ERROR gcm${suffix} executable does not exist." 
765        echo "THERE IS A PROBLEM IN LMDZ REGULAR LATLON COMPILATION - STOP"
766        exit
[6462]767    fi   
768
[6588]769    # Find executable suffix
770    suffix=_${resol_atm}_phylmd
[6692]771    suffix=${suffix}_${rad} 
[6588]772    if [ $parallel == seq ] || [ $parallel == none ] ; then
773        suffix=${suffix}_seq_orch.e
774    else
[6638]775        if [ $compoasis == y ] ; then
776            suffix=${suffix}_para_mem_orch_couple.e
777        else
778            suffix=${suffix}_para_mem_orch.e
779        fi
[6588]780    fi
781    echo ce0l suffix = $suffix
[6638]782
[5479]783    # Compile ce0l initialization program for LMDZ regular lat-lon exectuable
[6544]784    cd $modipsl/modeles/LMDZ
[5479]785    echo; echo "NOW COMPILE CE0L OF LMDZ. Resolution = ${resol_atm}"
786    echo >> $outfile ; echo " NOW COMPILE CE0L OF LMDZ. Resolution = ${resol_atm}"   >> $outfile 
787
[6640]788    echo ./makelmdz_fcm -d ${resol_atm} $argoasis -p lmd -rrtm true -$optmode -mem -parallel $parallel -io xios -v $argorch -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz ce0l    >> $outfile 
789         ./makelmdz_fcm -d ${resol_atm} $argoasis -p lmd -rrtm true -$optmode -mem -parallel $parallel -io xios -v $argorch -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz ce0l    >> $outfile 2>&1
[5479]790    # Test if compiling finished
791    if [[ $? != 0 ]] ; then
792        echo "THERE IS A PROBLEM IN CE0L (LMDZ) REGULAR LATLON COMPILATION - STOP"
793        exit
794    fi
[6462]795   
796 
[6457]797    # Move executable ce0l to modipsl/bin folder
798    echo "Move ce0l executable to modipsl/bin"
[5479]799    if [ -f $modipsl/modeles/LMDZ/bin/ce0l${suffix} ] ;  then
800        mv $modipsl/modeles/LMDZ/bin/ce0l${suffix} $modipsl/bin/ce0l_${resol_atm}_${optmode}.e
801    else
802        echo "ERROR ce0l${suffix} executable does not exist." 
803        echo "THERE IS A PROBLEM IN LMDZ REGULAR LATLON COMPILATION - STOP"
804        exit
805    fi
806fi
807
[6827]808# Compress XIOS and LMDZ/libo
809if [ $comp_tar == yes ] && [ -d $modipsl/modeles/XIOS ] ; then
[6828]810    echo "Option comp_tar activated, now compress XIOS"
811    echo "Option comp_tar activated, now compress XIOS" >> $outfile
[6840]812    cd $modipsl/modeles
813    tar -cf XIOS_${optmode}.tar XIOS
814    rm -rf XIOS
[6828]815fi
[6840]816
[6828]817if [ $comp_tar == yes ] && [ -d $modipsl/modeles/LMDZ/libo ] ; then
818    echo "Option comp_tar activated, now compress LMDZ/libo"
819    echo "Option comp_tar activated, now compress LMDZ/libo" >> $outfile
[6840]820    cd $modipsl/modeles/LMDZ
821    tar -cf libo_${optmode}.tar libo
822    rm -rf libo
[6827]823fi
[6840]824 
[5479]825echo >>$outfile ; echo "ALL COMPILING FINISHED" >> $outfile
826echo ls -lrt modipsl/bin >> $outfile
827ls -lrt $modipsl/bin >> $outfile
828
829echo; echo "ALL COMPILING FINISHED" ; echo
830echo "Executables are found in modipsl/bin"
831echo "Check that executable names correspond with the name set in config.card before launching the job"
832echo ls -lrt modipsl/bin
833ls -lrt $modipsl/bin
834
835date
836
837exit
838
839
Note: See TracBrowser for help on using the repository browser.