source: CONFIG/UNIFORM/v7/ICOLMDZOR_v7/compile_icolmdzor.sh @ 4921

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

Homogenization of v6.2 and v7. Main difference in compilation:

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