source: CONFIG/UNIFORM/v6/LMDZOR_v6.4/compile_lmdzor.sh @ 6653

Last change on this file since 6653 was 6629, checked in by falletti, 8 months ago

Adding a compilation check on Jean-Zay, to be sure that we compile on jean-za-pp (_work configurations)

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