source: CONFIG/UNIFORM/v6/NEMO_v6.5/compile_nemo.sh @ 6890

Last change on this file since 6890 was 6890, checked in by cetlod, 5 months ago

NEMO : Being able to compile NEMO in debug mode without changing arch file

  • Property svn:executable set to *
File size: 9.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
13mysrc_path=$submitdir/SOURCES
14
15#### Set default options
16# Coupled with ocean biogeochemistry (y/n)
17cpltop=WithTOP
18# Coupled with ocean biogeochemistry (y/n)
19cplmode=online
20
21# Optimization mode
22# optmode=prod/dev/debug
23optmode=prod
24# fcm_arch
25fcm_arch=default
26export fcm_arch xios
27full_nemo=n
28full_xios=""
29
30
31# Output text file for compilation of each component
32datestr=`LC_ALL=C date +"%Y%m%dT%H%M"`
33outfile=$submitdir/out_compile_nemo.$datestr
34echo > $outfile
35echo; echo "Text output from compilation will be stored in file out_compile_nemo.$datestr"; echo 
36
37#### Read arguments
38# Loop over all arguments to modify default set up
39while (($# > 0)) ; do
40    case $1 in
41        "-h") cat <<end_help
42########################################################################
43# Usage of the script compile_nemo.sh
44#
45########################################################################
46
47./compile_nemo.sh [Options]
48
49
50Options: [ORCA1 / ORCA2 / ORCA025 ] Model resolution, choose only one. Default: ORCA2
51         [OFFLINE] Compile Coupled NEMO-TOP in offline mode
52         [-full] Full recompilation of all components. This option can be added to all other options.
53         [-cleannemo] Full recompilation of NEMO component  only.
54         [-debug / -dev / -prod] Level of optimization. One of these can be added to all other compile options. Default: -prod.
55
56
57Example 1: Default compilation of ORCA_ICE_TOP
58./compile_nemo.sh
59
60Example 2: Compilation of TOP offline
61./compile_nemo.sh OFFLINE
62
63Example 3: Compilation of ORCA_ICE without passive tracers
64./compile_nemo.sh  NOTOP -cleannemo
65
66
67Example 4: Default resoltuion (LR) compiled in debug mode
68./compile_nemo.sh -debug
69
70Example 5: Default compilation with full recompilation of NEMO and XIOS. No clean is needed.
71./compile_nemo.sh -full
72
73Example 6: Full recompilation in debug mode
74./compile_nemo.sh OFFLINE -debug -full
75
76end_help
77exit;;
78        "NOTOP")       cpltop=WithoutTOP; shift ;;
79        "OFFLINE")     cplmode=offline; shift ;;
80        "-arch")       fcm_arch="$2" ; shift ; shift ;;
81        "-debug")      optmode=debug ; shift ;;
82        "-dev")        optmode=dev ; shift ;;
83        "-prod")       optmode=prod ; shift ;;
84        "-full")       full_nemo=y ; full_xios="--full" ; shift ;;
85        "-full_xios")  full_xios="--full" ; shift ;;  # Note only full_xios is using double dash: --full
86        "-full_nemo")  full_nemo=y ; shift ;;
87        "-cleannemo")  full_nemo=y ; shift ;;
88        *)             echo "unknown option "$1" , exiting..." ; exit
89    esac
90done
91
92echo "Following options are set in current compiling:" >> $outfile
93echo "   WithTracer=${cpltop}, coupled_mode=${cplmode}" >> $outfile 
94echo "   optmode = $optmode, fcm_arch = $fcm_arch " >> $outfile 
95echo "   full_xios=$full_xios, full_nemo=$full_nemo," >> $outfile 
96echo >> $outfile
97
98### Read host dependent default values
99### These variables will not be changed if they were set as argument
100###./host.sh $host
101# Later : Following lines should be set in host.sh file
102# begin host.sh
103if [ $fcm_arch == default ] ; then
104    # Find out current host and source specific paths and commands for the host
105    case $( hostname -s ) in
106        jean-zay*)
107            fcm_arch=X64_JEANZAY;;
108        irene170|irene171|irene190|irene191|irene192|irene193)
109            fcm_arch=X64_IRENE;;
110        irene172|irene173|irene194|irene195)
111            fcm_arch=X64_IRENE-AMD;;
112        ciclad*|climserv*)
113            fcm_arch=ifort_CICLAD;;
114        *)
115            echo Current host is not known. You must use option -arch to specify which architecuture files to use.
116            echo Exit now.
117            exit
118    esac
119fi
120
121# Set a link to arch.env if arch-${fcm_arch}.env file exist for current fcm_arch.
122# The link arch.env is also set in config.card and will be used by libIGCM to ensure the same running environnement.
123if [ -f ARCH/arch-${fcm_arch}.env ] ; then
124    echo >> $outfile
125    echo "The file ARCH/arch-${fcm_arch}.env will now be sourced with modules needed for compilation for all components"
126    echo "Note that this new environement might be kept after compilation." 
127    echo "If this is the case, source again your personal environment after compilation. "
128    echo " Personal module list before sourcing of ARCH/arch.env file:"    >> $outfile 
129    module list   >> $outfile 2>&1
130
131    # Make a link to this file, to be used also in config.card
132    rm -f ARCH/arch.env
133    ln -s arch-${fcm_arch}.env ARCH/arch.env
134
135    # Source the file
136    source ARCH/arch.env   >> $outfile 2>&1
137    echo >> $outfile 
138    echo " New module list after sourcing of ARCH/arch.env file:"    >> $outfile 
139    module list   >> $outfile 2>&1
140fi
141
142#### 2 Do the compilation
143
144## 2.3 Compile xios
145cd $modipsl/modeles/XIOS
146echo; echo "NOW COMPILE XIOS"
147echo >> $outfile ; echo " NOW COMPILE XIOS"   >> $outfile 
148echo ./make_xios  --$optmode --arch $fcm_arch --arch_path $arch_path --job 4 $full_xios   >> $outfile 
149     ./make_xios  --$optmode --arch $fcm_arch --arch_path $arch_path --job 4 $full_xios   >> $outfile 2>&1
150# Test if compiling succeded
151if [[ $? != 0 ]] ; then
152    echo "THERE IS A PROBLEM IN XIOS COMPILATION - STOP"
153    exit
154fi
155# Move executables to modipsl/bin
156if [ -f $modipsl/modeles/XIOS/bin/xios_server.exe ] ; then
157    mv $modipsl/modeles/XIOS/bin/xios_server.exe $modipsl/bin/xios_server_${optmode}.exe
158else
159    echo "THERE IS A PROBLEM IN XIOS COMPILATION EXECUTABLE MISSING - STOP"
160    exit
161fi
162
163
164## 2.5 Compile NEMO
165nemo_root=$modipsl/modeles/NEMO
166cfg_ref=ORCA2_ICE_PISCES
167cfg_wrk=ORCA_ICE_TRC
168addkeys="key_isf"
169
170if [ ${cpltop} == WithoutTOP ]  ;  then
171   cfg_wrk=ORCA_ICE
172   delkeys="key_top"
173fi
174
175if [ ${cplmode} == offline ]  ;  then
176   cfg_ref=ORCA2_OFF_TRC
177   cfg_wrk=ORCA_OFF_TRC
178   delkeys="key_si3 key_qco key_isf"
179fi
180
181echo >> $outfile ; echo cd $nemo_root  >> $outfile
182echo >> $outfile ; echo cp $mysrc_path/arch-${fcm_arch}.fcm arch/CNRS/.   >> $outfile
183echo >> $outfile
184
185# Compilation management
186# Nemo debug ?
187cp $mysrc_path/arch-${fcm_arch}.fcm   $mysrc_path/arch-nemo.fcm
188if [ $optmode == debug ] ; then
189    if (! grep -q "^%DEBUG_FCFLAGS"  $mysrc_path/arch-nemo.fcm); then
190       echo "ERROR: You must defined '%DEBUG_FCFLAGS' in your arch file if you want to compile Nemo in debug mode using '-d' option"
191       exit 1
192    fi
193    # duplicate the lines starting with %DEBUG_XXX and replace, in the duplicated line, %DEBUG_XXX by %XXX
194    sed -i'' -e "/^%DEBUG_/{p;s/^%DEBUG_\([^ ]*\)/%\1/;}" $mysrc_path/arch-nemo.fcm
195else
196    if (! grep -q "^%PROD_FCFLAGS" $mysrc_path/arch-nemo.fcm ); then
197        echo "WARNING: '%PROD_FCFLAGS' not defined in your arch file, makenemo will use '%FCFLAGS' instead"
198    fi
199    # duplicate the lines starting with %PROD_XXX and replace, in the duplicated line, %PROD_XXX by %XXX
200    sed -i'' -e "/^%PROD_/{p;s/^%PROD_\([^ ]*\)/%\1/;}" $mysrc_path/arch-nemo.fcm
201fi
202cd $nemo_root ; mv $mysrc_path/arch-nemo.fcm   arch/CNRS/arch-${fcm_arch}.fcm
203
204
205echo >> $outfile
206# creation of config
207echo >> $outfile ; echo cd $nemo_root  >> $outfile
208echo ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref -j0 add_key "$addkeys"  del_key "$delkeys"   >> $outfile
209echo >> $outfile
210cd $nemo_root
211./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref -j0  add_key "$addkeys"  del_key "$delkeys"  >> $outfile 2>&1
212
213# Copy of additional source filesa from another configuration if needed ( i.e PISCES-GAS )
214if [ ${cpltop} == WithTOP ]  ;  then
215   echo >> $outfile ; echo cp $nemo_root/cfgs/ORCA_ICE_PISCES_GAS/MY_SRC/*  $nemo_root/cfgs/$cfg_wrk/MY_SRC/.   >> $outfile
216   echo >> $outfile
217   cp $nemo_root/cfgs/ORCA_ICE_PISCES_GAS/MY_SRC/*  $nemo_root/cfgs/$cfg_wrk/MY_SRC/.
218fi
219
220# Copy of specfic source files
221echo >> $outfile ; echo cp $mysrc_path/*.*90  $nemo_root/cfgs/$cfg_wrk/MY_SRC/.   >> $outfile
222echo >> $outfile
223cp $mysrc_path/*.*90  $nemo_root/cfgs/$cfg_wrk/MY_SRC/.
224
225if [ $full_nemo == y ] ; then
226   # To make a full compilation, first make a clean to remove all files produced during previous compilation
227   echo ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref clean   >> $outfile
228   echo >> $outfile
229   ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref clean  >> $outfile 2>&1
230fi
231echo ./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref -j8  >> $outfile
232echo >> $outfile
233./makenemo -m ${fcm_arch} -n $cfg_wrk -r $cfg_ref -j8  >> $outfile 2>&1
234
235
236# Test if compiling finished
237if [[ $? != 0 ]] ; then
238    echo "THERE IS A PROBLEM IN NEMO COMPILATION - STOP"
239    exit
240fi
241
242echo >> $outfile
243echo "Move nemo executable to modipsl/bin" >> $outfile
244echo ls -lrt $nemo_root/cfgs/$cfg_wrk/BLD/bin   >> $outfile
245ls -lrt $nemo_root/cfgs/$cfg_wrk/BLD/bin  >> $outfile
246echo >> $outfile
247
248if [ -f $nemo_root/cfgs/$cfg_wrk/BLD/bin/nemo.exe ] ; then
249   if [ ${cpltop} == WithoutTOP ]  ;  then
250      mv $nemo_root/cfgs/$cfg_wrk/BLD/bin/nemo.exe $modipsl/bin/opa_${optmode}.exe
251   else
252      mv $nemo_root/cfgs/$cfg_wrk/BLD/bin/nemo.exe $modipsl/bin/opa_top_${cplmode}_${optmode}.exe
253   fi
254else
255    echo "ERROR gcm${suffix} executable does not exist."
256    echo "THERE IS A PROBLEM IN NEMO COMPILATION - STOP"
257    exit
258fi
259
260echo >>$outfile ; echo "ALL COMPILING FINISHED" >> $outfile
261echo ls -lrt modipsl/bin >> $outfile
262ls -lrt $modipsl/bin >> $outfile
263
264echo; echo "ALL COMPILING FINISHED" ; echo
265echo "Executables are found in modipsl/bin"
266echo "Check that executable names correspond with the name set in config.card before launching the job"
267echo ls -lrt modipsl/bin
268ls -lrt $modipsl/bin
269
270date
271
272exit
273
274
Note: See TracBrowser for help on using the repository browser.