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

Last change on this file since 6261 was 6261, checked in by jgipsl, 20 months ago

Added arch env file for Spirit and Spritx new cluster at MESO IPSL center.

Note that for the moment, only mode MPI only is working. Hybrid mode do not yet work. Compilation with "-parallel mpi" is needed.

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