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

Last change on this file since 6241 was 6241, checked in by lfairhead, 22 months ago

copy of r6210 and r6212 from IPSLCM configuration to LMDZOR configuration
update compilation script to include new lmdz option : rad. Try to propose retrocompatibility
remove xios from ce0l compilation

  • Property svn:executable set to *
File size: 13.0 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            fcm_arch=X64_JEANZAY;;
120        irene170|irene171|irene190|irene191|irene192|irene193)
121            fcm_arch=X64_IRENE;;
122        irene172|irene173|irene194|irene195)
123            fcm_arch=X64_IRENE-AMD;;
124        asterix*|obelix*)
125            fcm_arch=ifort_LSCE
126            if [ "${parallel}" == "mpi_omp" ] ; then
127                echo "Warning!! Currently at Obelix hybrid mode is not possible."
128                echo "          Option -parallel mpi_omp is now changed to -parallel mpi"
129                echo ""
130                parallel=mpi
131            else
132                echo "You used -parallel" $parallel
133            fi ;;
134        ciclad*|climserv*|loholt*|camelot*)
135            fcm_arch=ifort_CICLAD;;
136        *)
137            echo Current host is not known. You must use option -arch to specify which architecuture files to use.
138            echo Exit now.
139            exit
140    esac
141fi
142
143# Set a link to arch.env if arch-${fcm_arch}.env file exist for current fcm_arch.
144# The link arch.env is also set in config.card and will be used by libIGCM to ensure the same running environnement.
145if [ -f ARCH/arch-${fcm_arch}.env ] ; then
146    echo >> $outfile
147    echo "The file ARCH/arch-${fcm_arch}.env will now be sourced with modules needed for compilation for all components."
148    echo "Note that this new environement might be kept after compilation." 
149    echo "If this is the case, source again your personal environment after compilation. "
150    echo " Personal module list before sourcing of ARCH/arch.env file:"    >> $outfile 
151    module list   >> $outfile 2>&1
152
153    # Make a link to this file, to be used also in config.card
154    rm -f ARCH/arch.env
155    ln -s arch-${fcm_arch}.env ARCH/arch.env
156
157    # Source the file
158    source ARCH/arch.env   >> $outfile 2>&1
159    echo >> $outfile 
160    echo " New module list after sourcing of ARCH/arch.env file:"    >> $outfile 
161    module list   >> $outfile 2>&1
162fi
163
164#### 2 Do the compilation
165## 2.1 Compile ioipsl
166cd $modipsl/modeles/IOIPSL
167echo; echo "NOW COMPILE IOIPSL"
168echo >> $outfile ; echo " NOW COMPILE IOIPSL"   >> $outfile 
169
170# Check if compilation with fcm is included in IOIPSL
171if [ ! -f makeioipsl_fcm ] ; then
172  echo "The file makeiopsl_fcm do not exist. Probably this is not the right version of IOIPSL."
173  echo "Version of IOIPSL with fcm compilation is needed to compile with this script. Stop now."
174  exit
175fi
176
177echo ./makeioipsl_fcm -$optmode -arch ${fcm_arch} -arch_path $arch_path -j 8 $full_flag   >> $outfile 
178     ./makeioipsl_fcm -$optmode -arch ${fcm_arch} -arch_path $arch_path -j 8 $full_flag   >> $outfile 2>&1
179# Test if compiling succeded
180if [[ $? != 0 ]] ; then
181    echo "THERE IS A PROBLEM IN IOIPSL COMPILATION - STOP"
182    exit
183fi
184
185## 2.2 Compile xios
186cd $modipsl/modeles/XIOS
187echo; echo "NOW COMPILE XIOS"
188echo >> $outfile ; echo " NOW COMPILE XIOS"   >> $outfile 
189echo ./make_xios --$optmode --arch $fcm_arch --arch_path $arch_path ${netcdf_lib} --job 4 $full_xios   >> $outfile 
190     ./make_xios --$optmode --arch $fcm_arch --arch_path $arch_path ${netcdf_lib} --job 4 $full_xios   >> $outfile 2>&1
191# Test if compiling succeded
192if [[ $? != 0 ]] ; then
193    echo "THERE IS A PROBLEM IN XIOS COMPILATION - STOP"
194    exit
195fi
196# Move executables to modipsl/bin
197if [ -f $modipsl/modeles/XIOS/bin/xios_server.exe ] ; then
198    mv $modipsl/modeles/XIOS/bin/xios_server.exe $modipsl/bin/xios_server_${optmode}.exe
199else
200    echo "THERE IS A PROBLEM IN XIOS COMPILATION EXECUTABLE MISSING - STOP"
201    exit
202fi
203
204
205## 2.3 Compile orchidee
206cd $modipsl/modeles/ORCHIDEE
207echo; echo "NOW COMPILE ORCHIDEE"
208echo >> $outfile ; echo " NOW COMPILE ORCHIDEE"   >> $outfile 
209
210
211# Check if the compilation of ORCHIDEE was previsouly interupted prematured.
212# In that case, the files fcm.bld.lock exist. If the file exist, it is here removed to avoid makeorchidee_fcm
213# to ask question and wait for interactivly answer from the user.
214if [ -f build/fcm.bld.lock ] ; then
215    echo >> $outfile
216    echo " WARNING!! The file ORCHIDEE/build/fcm.bld.lock exist. "   >> $outfile
217    echo "           This means that the compilation is either currently on going in another terminal was previous interupted before the end."   >> $outfile
218    echo "           The file will now be removed. "   >> $outfile
219    echo >> $outfile
220    rm -f build/fcm.bld.lock
221fi
222
223echo    ./makeorchidee_fcm -j 8 -xios -parallel $parallel -$optmode -arch ${fcm_arch} -arch_path $arch_path $full_orch -driver   >> $outfile 
224        ./makeorchidee_fcm -j 8 -xios -parallel $parallel -$optmode -arch ${fcm_arch} -arch_path $arch_path $full_orch -driver    >> $outfile 2>&1
225# Test if compiling finished
226if [[ $? != 0 ]] ; then
227    echo "THERE IS A PROBLEM IN ORCHIDEE COMPILATION - STOP"
228    exit
229fi
230
231# Rename executables to contain $optmode
232if [ -f $modipsl/bin/orchidee_ol ] ; then mv $modipsl/bin/orchidee_ol  $modipsl/bin/orchidee_ol_${optmode} ; fi
233if [ -f $modipsl/bin/orchideedriver ] ; then mv $modipsl/bin/orchideedriver  $modipsl/bin/orchideedriver_${optmode} ; fi
234
235
236## 2.4 Compile LMDZ for regular latlon configuration
237cd $modipsl/modeles/LMDZ
238# Compile LMDZ regular lat-lon executable
239echo; echo "NOW COMPILE LMDZ REGULAR LAT-LON MODE. Resolution = ${resol_atm}"
240echo >> $outfile ; echo " NOW COMPILE LMDZ REGULAR LAT-LON MODE. Resolution = ${resol_atm}"   >> $outfile 
241# Retrieve the final svn release number, needed for radiative code suffix of executable
242lmdzsvn=`svnversion . | egrep -o "[0-9]+"  | awk 'NR==1'`
243
244# Check if the compilation of LMDZ was previsouly interupted prematured.
245# In that case, the files dimension.h and .lock exist. If the files exist, they are here removed to avoid makelmdz_fcm
246# to ask question and wait for interactivly answer from the user.
247if [ -f libf/grid/dimensions.h ] || [ -f .lock ] ; then
248  echo >> $outfile
249  echo " WARNING!! The file LMDZ/libf/grid/dimension.h and/or the LMDZ/.lock exist. "   >> $outfile
250  echo "           This means that the compilation is either currently on going in another terminal was previous interupted before the end."   >> $outfile
251  echo "           The files dimension.h and .lock will now be removed. "   >> $outfile
252  echo >> $outfile
253  rm -f libf/grid/dimensions.h
254  rm -f .lock
255fi
256
257# Need to define the proper option for radiative code compilation. By default, we use rrtm
258case $rad in
259    oldrad) opt_rad="" ;;
260    rrtm)   if [ $lmdzsvn -le 4185 ] ; then opt_rad="-rrtm true" ; else opt_rad="-rad rrtm" ; fi ;;
261    ecrad)  opt_rad="-rad ecrad" ;;
262    *) echo Only oldrad rrtm ecrad for rad option ; exit
263esac
264
265if [ $lmdzsvn -le 4185 -a $rad = "ecrad" ] ; then echo "ecrad only available for LMDZ rev starting with 4186 " ; exit ; fi
266
267
268echo ./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 
269./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
270# Test if compiling finished
271if [[ $? != 0 ]] ; then
272    echo "THERE IS A PROBLEM IN LMDZ REGULAR LATLON COMPILATION - STOP"
273    exit
274fi
275
276# Move executables to modipsl/bin folder
277echo >> $outfile
278echo "Move gcm.e executable to modipsl/bin" >> $outfile
279echo ls -lrt $modipsl/modeles/LMDZ/bin   >> $outfile
280ls -lrt $modipsl/modeles/LMDZ/bin  >> $outfile
281echo >> $outfile
282
283suffix=${resol_atm}_phylmd
284if [ $lmdzsvn -ge 4186 ] ; then suffix=${suffix}_${rad} ; fi
285if [ $parallel == seq ] || [ $parallel == none ] ; then
286    suffix=_${suffix}_seq_orch.e
287else
288    suffix=_${suffix}_para_mem_orch.e
289fi
290echo gcm suffix = $suffix
291
292if [ -f $modipsl/modeles/LMDZ/bin/gcm${suffix} ] ;  then
293    mv $modipsl/modeles/LMDZ/bin/gcm${suffix} $modipsl/bin/gcm_${resol_atm}_${optmode}.e
294else
295    echo "ERROR gcm${suffix} executable does not exist." 
296    echo "THERE IS A PROBLEM IN LMDZ REGULAR LATLON COMPILATION - STOP"
297    exit
298fi 
299
300
301# Compile ce0l initialization program for LMDZ regular lat-lon exectuable
302if [ $ce0l == y ] ; then
303    echo; echo "NOW COMPILE CE0L OF LMDZ. Resolution = ${resol_atm}"
304    echo >> $outfile ; echo " NOW COMPILE CE0L OF LMDZ. Resolution = ${resol_atm}"   >> $outfile 
305   
306    echo ./makelmdz_fcm -d ${resol_atm} -p lmd  $opt_rad -$optmode -arch $fcm_arch -arch_path $arch_path -j 8 $full_lmdz ce0l    >> $outfile 
307    ./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
308    # Test if compiling finished
309    if [[ $? != 0 ]] ; then
310        echo "THERE IS A PROBLEM IN CE0L (LMDZ) REGULAR LATLON COMPILATION - STOP"
311        exit
312    fi
313
314   
315    # Move executables to modipsl/bin folder
316    echo >> $outfile
317    echo "Move ce0l.e executable to modipsl/bin" >> $outfile
318    echo ls -lrt $modipsl/modeles/LMDZ/bin   >> $outfile
319    ls -lrt $modipsl/modeles/LMDZ/bin  >> $outfile
320    echo >> $outfile
321    suffix=_${resol_atm}_phylmd_seq.e
322    if [ $lmdzsvn -ge 4186 ] ; then suffix=_${resol_atm}_phylmd_${rad}_seq.e ; fi
323    echo ce0l suffix = $suffix
324
325    if [ -f $modipsl/modeles/LMDZ/bin/ce0l${suffix} ] ;  then
326        mv $modipsl/modeles/LMDZ/bin/ce0l${suffix} $modipsl/bin/ce0l_${resol_atm}_${optmode}.e
327    else
328        echo "ERROR ce0l${suffix} executable does not exist." 
329        echo "THERE IS A PROBLEM IN CE0L (LMDZ) REGULAR LATLON COMPILATION - STOP"
330        exit
331    fi 
332fi
333
334
335echo >>$outfile ; echo "ALL COMPILING FINISHED" >> $outfile
336echo ls -lrt modipsl/bin >> $outfile
337ls -lrt $modipsl/bin >> $outfile
338
339echo; echo "ALL COMPILING FINISHED" ; echo
340echo "Executables are found in modipsl/bin"
341echo "Check that executable names correspond with the name set in config.card before launching the job"
342echo ls -lrt modipsl/bin
343ls -lrt $modipsl/bin
344
345date
346
347exit
Note: See TracBrowser for help on using the repository browser.