source: CONFIG/UNIFORM/v6/LMDZOR_v6.2/compile_lmdzor.sh @ 5005

Last change on this file since 5005 was 4975, checked in by jgipsl, 4 years ago

Update as done in LMDZOR_v6.3 in changeset [4973]:

  • Change automatiquement -parallel mpi_omp vers -parallel mpi sur obelix
  • Ajoute test si le fichier fcm.bld.lock dans la compilatiation d'ORCHIDEE et efface le s'il existe
  • Also add more names for machines at Climserv (loholt|camelot)

v7/ICOLMDZOR_v7/ARCH/arch-X64_IRENE.env : as done in v6.2 configurations to avoid error message from makelmdz_fcm when doing module purge.

  • Property svn:executable set to *
File size: 11.8 KB
RevLine 
[4972]1#!/bin/bash -l
[4268]2#set -vx
3# Default options
4#
5#
6#
[4409]7date
[4268]8#### 1  Set up the compiling options
9#### Define some directories
10submitdir=$( pwd )
11modipsl=$submitdir/../..
[4275]12arch_path=$submitdir/ARCH
[4268]13
[4278]14#### Set default options
[4268]15# Optimization mode
16# optmode=prod/dev/debug
17optmode=prod
[4411]18# Resolution of LMDZ in regular mode
[4469]19resol_atm=144x142x79
[4643]20# Also compile ce0l subprogram to LMDZ (y/n)
21ce0l=y
[4411]22
[4268]23# fcm_arch
24fcm_arch=default
25# Default values to be overritten
[4339]26parallel=mpi_omp
[4268]27export fcm_arch parallel xios
28full_flag=""
[4643]29full_xios=""
30full_lmdz=""
31full_orch=""
32
[4391]33# Default netcdf_lib is used for XIOS but can be change by argument
34netcdf_lib=""
[4268]35
[4408]36# Output text file for compilation of each component
[4622]37datestr=`LC_ALL=C date +"%Y%m%dT%H%M"`
38outfile=$submitdir/out_compile_lmdzor.$datestr
39echo > $outfile
[4643]40echo; echo "Text output from compilation will be stored in file out_compile_lmdzor.$datestr"; echo 
[4408]41
[4278]42#### Read arguments
[4268]43# Loop over all arguments to modify default set up
44while (($# > 0)) ; do
[4278]45    case $1 in
[4643]46        "-h") cat <<end_help
[4268]47########################################################################
[4411]48# Usage of the script compile_lmdzor.sh
[4268]49#
50########################################################################
51
52./compile_config [Options]
53
[4469]54Options: -full, -resol_atm, -debug, -dev, -prod(default)
[4268]55
[4411]56Example 1: Default compilation of LMDZ-ORCHIDEE with XIOS and IOIPSL
57./compile_lmdzor.sh
[4268]58
[4407]59Example 2: Compile in debug mode
[4411]60./compile_lmdzor.sh -debug
[4407]61
62Example 3: Default compilation with full recompilation of all components
[4411]63./compile_lmdzor.sh -full
[4268]64
[4411]65Example 4: Compilation of LMDZ in regular lat-lon for other dimensions (default: 144x142x79)
66The dimension can be changed to any other 3d dimension.
[4469]67./compile_lmdzor.sh -resol_atm 96x95x79
[4268]68
[4643]69end_help
70exit;;
71        "-parallel")        parallel=$2 ; shift ; shift ;;
72        "-arch")            fcm_arch="$2" ; shift ; shift ;;
73        "-xios")            xios="$2" ; shift ; shift ;;
74        "-debug")           optmode=debug ; shift ;;
75        "-dev")             optmode=dev ; shift ;;
76        "-prod")            optmode=prod ; shift ;;
77        "-resol_atm")       resol_atm=$2 ; shift ; shift ;;
78        "CE0L")             ce0l=y ; shift ;;
79        "-full")            full_flag="-full"; full_xios="--full" ; full_lmdz="-full" ; full_orch="-full" ; shift ;;
80        "-full_xios")       full_xios="--full" ; shift ;;  # Note only full_xios is using double dash: --full
81        "-full_lmdz")       full_lmdz="-full"  ; shift ;;
82        "-full_orch")       full_orch="-full"  ; shift ;;
83        "-netcdf_lib_seq")  netcdf_lib="--netcdf_lib netcdf4_seq"; shift ;;
[4644]84        *)                  echo "unknown option "$1" , exiting..." ; exit
[4278]85    esac
86done
[4268]87
[4643]88echo "Following options are set in current compiling:" >> $outfile 
89echo "   resol_atm=${resol_atm}" >> $outfile 
90echo "   ce0l=${ce0l}" >> $outfile 
91echo "   optmode = $optmode, parallel = $parallel, fcm_arch = $fcm_arch " >> $outfile 
92echo "   full_flag=$full_flag, full_xios=$full_xios, full_lmdz=$full_lmdz, full_orch=$full_orch" >> $outfile 
[4408]93echo >> $outfile
[4268]94
[4278]95### Read host dependent default values
96### These variables will not be changed if they were set as argument
[4268]97###./host.sh $host
98# Later : Following lines should be set in host.sh file
99# begin host.sh
100if [ $fcm_arch == default ] ; then
[4278]101    # Find out current host and source specific paths and commands for the host
102    case $( hostname -s ) in
[4744]103        jean-zay*)
104            fcm_arch=X64_JEANZAY;;
[4278]105        irene*)
[4391]106            fcm_arch=X64_IRENE;;
[4278]107        asterix*|obelix*)
[4975]108            fcm_arch=ifort_LSCE
109            if [ "${parallel}" == "mpi_omp" ] ; then
110                echo "Warning!! Currently at Obelix hybrid mode is not possible."
111                echo "          Option -parallel mpi_omp is now changed to -parallel mpi"
112                echo ""
113                parallel=mpi
114            else
115                echo "You used -parallel" $parallel
116            fi ;;
117        ciclad*|climserv*|loholt*|camelot*)
[4391]118            fcm_arch=ifort_CICLAD;;
[4278]119        *)
[4391]120            echo Current host is not known. You must use option -arch to specify which architecuture files to use.
[4278]121            echo Exit now.
122            exit
123    esac
[4268]124fi
125
[4452]126# Set a link to arch.env if arch-${fcm_arch}.env file exist for current fcm_arch.
[4391]127# The link arch.env is also set in config.card and will be used by libIGCM to ensure the same running environnement.
128if [ -f ARCH/arch-${fcm_arch}.env ] ; then
[4408]129    echo >> $outfile
[4932]130    echo "The file ARCH/arch-${fcm_arch}.env will now be sourced with modules needed for compilation for all components."
[4470]131    echo "Note that this new environement might be kept after compilation." 
132    echo "If this is the case, source again your personal environment after compilation. "
133    echo " Personal module list before sourcing of ARCH/arch.env file:"    >> $outfile 
134    module list   >> $outfile 2>&1
135
136    # Make a link to this file, to be used also in config.card
[4391]137    rm -f ARCH/arch.env
138    ln -s arch-${fcm_arch}.env ARCH/arch.env
[4470]139
140    # Source the file
141    source ARCH/arch.env   >> $outfile 2>&1
142    echo >> $outfile 
143    echo " New module list after sourcing of ARCH/arch.env file:"    >> $outfile 
144    module list   >> $outfile 2>&1
[4391]145fi
146
[4268]147#### 2 Do the compilation
148## 2.1 Compile ioipsl
149cd $modipsl/modeles/IOIPSL
[4278]150echo; echo "NOW COMPILE IOIPSL"
[4408]151echo >> $outfile ; echo " NOW COMPILE IOIPSL"   >> $outfile 
152
[4411]153# Check if compilation with fcm is included in IOIPSL
154if [ ! -f makeioipsl_fcm ] ; then
155  echo "The file makeiopsl_fcm do not exist. Probably this is not the right version of IOIPSL."
156  echo "Version of IOIPSL with fcm compilation is needed to compile with this script. Stop now."
157  exit
158fi
159
[4972]160echo ./makeioipsl_fcm -$optmode -arch ${fcm_arch} -arch_path $arch_path -j 8 $full_flag   >> $outfile 
161     ./makeioipsl_fcm -$optmode -arch ${fcm_arch} -arch_path $arch_path -j 8 $full_flag   >> $outfile 2>&1
[4268]162# Test if compiling succeded
163if [[ $? != 0 ]] ; then
[4278]164    echo "THERE IS A PROBLEM IN IOIPSL COMPILATION - STOP"
165    exit
[4268]166fi
167
168## 2.2 Compile xios
169cd $modipsl/modeles/XIOS
[4278]170echo; echo "NOW COMPILE XIOS"
[4408]171echo >> $outfile ; echo " NOW COMPILE XIOS"   >> $outfile 
[4643]172echo ./make_xios --$optmode --arch $fcm_arch --arch_path $arch_path ${netcdf_lib} --job 4 $full_xios   >> $outfile 
173     ./make_xios --$optmode --arch $fcm_arch --arch_path $arch_path ${netcdf_lib} --job 4 $full_xios   >> $outfile 2>&1
[4268]174# Test if compiling succeded
175if [[ $? != 0 ]] ; then
[4278]176    echo "THERE IS A PROBLEM IN XIOS COMPILATION - STOP"
177    exit
[4268]178fi
[4391]179# Move executables to modipsl/bin
[4457]180if [ -f $modipsl/modeles/XIOS/bin/xios_server.exe ] ; then
181    mv $modipsl/modeles/XIOS/bin/xios_server.exe $modipsl/bin/xios_server_${optmode}.exe
[4391]182else
183    echo "THERE IS A PROBLEM IN XIOS COMPILATION EXECUTABLE MISSING - STOP"
184    exit
185fi
[4268]186
[4391]187
[4268]188## 2.3 Compile orchidee
189cd $modipsl/modeles/ORCHIDEE
[4278]190echo; echo "NOW COMPILE ORCHIDEE"
[4408]191echo >> $outfile ; echo " NOW COMPILE ORCHIDEE"   >> $outfile 
192
[4975]193
194# Check if the compilation of ORCHIDEE was previsouly interupted prematured.
195# In that case, the files fcm.bld.lock exist. If the file exist, it is here removed to avoid makeorchidee_fcm
196# to ask question and wait for interactivly answer from the user.
197if [ -f build/fcm.bld.lock ] ; then
198    echo >> $outfile
199    echo " WARNING!! The file ORCHIDEE/build/fcm.bld.lock exist. "   >> $outfile
200    echo "           This means that the compilation is either currently on going in another terminal was previous interupted before the end."   >> $outfile
201    echo "           The file will now be removed. "   >> $outfile
202    echo >> $outfile
203    rm -f build/fcm.bld.lock
204fi
205
[4643]206echo    ./makeorchidee_fcm -j 8 -xios -parallel $parallel -$optmode -arch ${fcm_arch} -arch_path $arch_path $full_orch -driver   >> $outfile 
207        ./makeorchidee_fcm -j 8 -xios -parallel $parallel -$optmode -arch ${fcm_arch} -arch_path $arch_path $full_orch -driver    >> $outfile 2>&1
[4268]208# Test if compiling finished
209if [[ $? != 0 ]] ; then
210    echo "THERE IS A PROBLEM IN ORCHIDEE COMPILATION - STOP"
211    exit
212fi
213
[4643]214# Rename executables to contain $optmode
215if [ -f $modipsl/bin/orchidee_ol ] ; then mv $modipsl/bin/orchidee_ol  $modipsl/bin/orchidee_ol_${optmode} ; fi
216if [ -f $modipsl/bin/orchideedriver ] ; then mv $modipsl/bin/orchideedriver  $modipsl/bin/orchideedriver_${optmode} ; fi
[4408]217
[4643]218
[4411]219## 2.4 Compile LMDZ for regular latlon configuration
[4469]220cd $modipsl/modeles/LMDZ
[4932]221# Compile LMDZ regular lat-lon executable
[4469]222echo; echo "NOW COMPILE LMDZ REGULAR LAT-LON MODE. Resolution = ${resol_atm}"
223echo >> $outfile ; echo " NOW COMPILE LMDZ REGULAR LAT-LON MODE. Resolution = ${resol_atm}"   >> $outfile 
[4268]224
[4622]225# Check if the compilation of LMDZ was previsouly interupted prematured.
226# In that case, the files dimension.h and .lock exist. If the files exist, they are here removed to avoid makelmdz_fcm
227# to ask question and wait for interactivly answer from the user.
228if [ -f libf/grid/dimensions.h ] || [ -f .lock ] ; then
229  echo >> $outfile
230  echo " WARNING!! The file LMDZ/libf/grid/dimension.h and/or the LMDZ/.lock exist. "   >> $outfile
231  echo "           This means that the compilation is either currently on going in another terminal was previous interupted before the end."   >> $outfile
232  echo "           The files dimension.h and .lock will now be removed. "   >> $outfile
233  echo >> $outfile
234  rm -f libf/grid/dimensions.h
235  rm -f .lock
236fi
237
[4643]238echo ./makelmdz_fcm -d ${resol_atm} -p lmd -rrtm true -$optmode -mem -parallel $parallel -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz gcm    >> $outfile 
239./makelmdz_fcm -d ${resol_atm} -p lmd -rrtm true -$optmode -mem -parallel $parallel -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz gcm    >> $outfile 2>&1
[4469]240# Test if compiling finished
241if [[ $? != 0 ]] ; then
242    echo "THERE IS A PROBLEM IN LMDZ REGULAR LATLON COMPILATION - STOP"
243    exit
244fi
[4408]245
[4643]246# Move executables to modipsl/bin folder
247echo >> $outfile
248echo "Move gcm.e executable to modipsl/bin" >> $outfile
249echo ls -lrt $modipsl/modeles/LMDZ/bin   >> $outfile
250ls -lrt $modipsl/modeles/LMDZ/bin  >> $outfile
251echo >> $outfile
[4278]252
[4469]253# Find executable suffix
254if [ $parallel == seq ] || [ $parallel == none ] ; then
[4643]255    suffix=_${resol_atm}_phylmd_seq_orch.e
[4469]256else
[4643]257    suffix=_${resol_atm}_phylmd_para_mem_orch.e
[4469]258fi
[4643]259echo gcm suffix = $suffix
[4408]260
[4643]261if [ -f $modipsl/modeles/LMDZ/bin/gcm${suffix} ] ;  then
262    mv $modipsl/modeles/LMDZ/bin/gcm${suffix} $modipsl/bin/gcm_${resol_atm}_${optmode}.e
263else
264    echo "ERROR gcm${suffix} executable does not exist." 
265    echo "THERE IS A PROBLEM IN LMDZ REGULAR LATLON COMPILATION - STOP"
266    exit
267fi 
[4278]268
[4268]269
[4643]270# Compile ce0l initialization program for LMDZ regular lat-lon exectuable
271if [ $ce0l == y ] ; then
272    echo; echo "NOW COMPILE CE0L OF LMDZ. Resolution = ${resol_atm}"
273    echo >> $outfile ; echo " NOW COMPILE CE0L OF LMDZ. Resolution = ${resol_atm}"   >> $outfile 
274   
275    echo ./makelmdz_fcm -d ${resol_atm} -p lmd -rrtm true -$optmode -mem -parallel $parallel -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz ce0l    >> $outfile 
276    ./makelmdz_fcm -d ${resol_atm} -p lmd -rrtm true -$optmode -mem -parallel $parallel -io xios -v orchidee2.1 -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz ce0l    >> $outfile 2>&1
277    # Test if compiling finished
278    if [[ $? != 0 ]] ; then
279        echo "THERE IS A PROBLEM IN CE0L (LMDZ) REGULAR LATLON COMPILATION - STOP"
280        exit
281    fi
282
283   
284    # Move executables to modipsl/bin folder
285    echo >> $outfile
286    echo "Move ce0l.e executable to modipsl/bin" >> $outfile
287    echo ls -lrt $modipsl/modeles/LMDZ/bin   >> $outfile
288    ls -lrt $modipsl/modeles/LMDZ/bin  >> $outfile
289    echo >> $outfile
290    echo ce0l suffix = $suffix
291
292    if [ -f $modipsl/modeles/LMDZ/bin/ce0l${suffix} ] ;  then
293        mv $modipsl/modeles/LMDZ/bin/ce0l${suffix} $modipsl/bin/ce0l_${resol_atm}_${optmode}.e
294    else
295        echo "ERROR ce0l${suffix} executable does not exist." 
296        echo "THERE IS A PROBLEM IN CE0L (LMDZ) REGULAR LATLON COMPILATION - STOP"
297        exit
298    fi 
299fi
300
301
[4408]302echo >>$outfile ; echo "ALL COMPILING FINISHED" >> $outfile
[4643]303echo ls -lrt modipsl/bin >> $outfile
304ls -lrt $modipsl/bin >> $outfile
[4278]305
[4643]306echo; echo "ALL COMPILING FINISHED" ; echo
307echo "Executables are found in modipsl/bin"
308echo "Check that executable names correspond with the name set in config.card before launching the job"
309echo ls -lrt modipsl/bin
310ls -lrt $modipsl/bin
311
[4409]312date
[4643]313
[4268]314exit
Note: See TracBrowser for help on using the repository browser.