source: branches/nemo_v3_3_beta/NEMOGCM/CONFIG/makenemo @ 2354

Last change on this file since 2354 was 2354, checked in by flavoni, 10 years ago

first draft for SETTE (SET tests for NEMO), a new version of NVTK, see ticket #752

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 7.4 KB
Line 
1#!/bin/bash
2#set -x
3set -o posix
4#set -u
5#set -e
6#+
7#
8# ===============
9# makenemo
10# ===============
11#
12# --------------------------
13# Compile NEMO
14# --------------------------
15#
16# SYNOPSIS
17# ========
18#
19# ::
20#
21#  $ makenemo
22#
23#
24# DESCRIPTION
25# ===========
26#
27#
28# This script aims :
29#
30# - to choose MYCONFIG
31# - to choose compiler options 
32# - to create the CONFIG/MYCONFIG/WORK directory
33# - to compile this configuration
34#
35#  Variables used :
36#
37#  From user input
38#
39# - NEW_CONF    : configuration to be created
40# - REF_CONF    : reference configuration to build the new one
41# - CMP_NAM     : compiler name
42# - NBR_PRC     : number of processes used to compile 
43# - NEM_SUBDIR  : NEMO subdirectory used (specified)
44#
45#  Locally defined :
46#
47# - TAB         : NEMO subdirectory used (read) 
48# - MAIN_DIR    : self explaining
49# - CONFIG_DIR  :   "    "    "   
50# - MODELES_DIR :   "    "    "
51# - TOOLS_DIR   :   "    "    "
52# - NEMO_DIR    :   "    "    "
53#
54# EXAMPLES
55# ========
56#
57# ::
58#
59#  $ ./makenemo -m ifort_osx - j3 -n ORCA2_LIM
60#
61#
62# TODO
63# ====
64#
65# option debug
66#
67#
68# EVOLUTIONS
69# ==========
70#
71# $Id$
72#
73#
74#
75#   * creation
76#
77#-
78
79#- Local variables ---
80b_n=$(basename ${0})
81   OPTIND=1
82   MAIN_DIR=$(cd $(dirname "$0"); pwd)
83   MAIN_DIR=${MAIN_DIR%/SETTE*}
84   MAIN_DIR=${MAIN_DIR%/TOOLS*}
85   MAIN_DIR=${MAIN_DIR%/CONFIG*}
86   export MAIN_DIR
87#
88   export CONFIG_DIR=${MAIN_DIR}/CONFIG
89   export TOOLS_DIR=${MAIN_DIR}/TOOLS
90   export COMPIL_DIR=${MAIN_DIR}/TOOLS/COMPILE
91   export NEMO_DIR=${MAIN_DIR}/NEMO
92   export AGRIFUSE=10
93
94   declare -a TAB
95#-
96#- FCM and functions location ---
97   export PATH=${MAIN_DIR}/EXTERNAL/fcm/bin:$PATH
98
99#-
100#- Choice of the options ---
101   x_d="";
102   x_n="";
103   x_r="";
104   x_m="";
105   x_t="";
106   x_c="";
107   x_j=1;
108   while getopts :hd:n:r:m:j:t: V
109   do
110   case $V in
111   (h)  echo "Usage   : "${b_n} \
112      " [-h] [-n name] [-m arch] [-d "dir1 dir2"] [-r conf] [-j No]";
113echo " -h    : help";
114echo " -n name : config name, [-n help] to list existing configurations";
115echo " -m arch : choose compiler, [-m help] to list existing compilers";
116echo " -d dir  : choose NEMO sub-directories";
117echo " -r conf : choose reference configuration";
118echo " -j No    : number of processes used to compile (0=nocompilation)";
119echo " -t dir  : temporary directory for compilation"
120echo "";
121echo "Example to install a new configuration MY_CONFIG";
122echo "with OPA_SRC and LIM_SRC_2 ";
123echo "makenemo -n MY_CONFIG -d \"OPA_SRC LIM_SRC_2\"";
124echo "";
125echo "Available configurations :"; cat ${COMPIL_DIR}/cfg.txt;
126echo "";
127echo "Example to remove bad configuration ";
128echo "./makenemo -n MY_CONFIG clean_config";
129echo "";
130echo "Example to clean ";
131echo "./makenemo clean";
132echo "";
133echo "Example to add and remove keys";
134echo "./makenemo add_key \"key_iomput key_mpp_mpi\" del_key \"key_agrif\" ";
135echo "";
136echo "Example to add and remove keys for a new configuration, and do not compile";
137echo "./makenemo -n MY_CONFIG -j0 add_key \"key_iomput key_mpp_mpi\" del_key \"key_agrif\" ";
138echo "";
139. ${COMPIL_DIR}/Flist_archfile.sh  ;
140echo "";
141echo "Default : previous configuration and compiler";
142exit 0;;
143(d)  x_d=${OPTARG};;
144(n)  x_n=${OPTARG};;
145(r)  x_r=${OPTARG};;
146(m)  x_m=${OPTARG};;
147(j)  x_j=${OPTARG};;
148(t)  x_t=${OPTARG};;
149(:)  echo ${b_n}" : -"${OPTARG}" option : missing value" 1>&2;
150exit 2;;
151(\?) echo ${b_n}" : -"${OPTARG}" option : not supported" 1>&2;
152exit 2;;
153esac
154done
155shift $(($OPTIND-1));
156
157while [ ${#1} -gt 0 ]   # Get clean, clean_config options
158do
159case "$1" in
160clean)
161x_c="--$1"
162;;
163clean_config)
164. ${COMPIL_DIR}/Fclean_config.sh
165exit
166;;
167add_key)
168list_add_key=$2
169export ${list_add_key}
170shift
171;;
172del_key)
173list_del_key=$2
174export ${list_del_key}
175shift
176;;
177*)
178echo " \"$1\" BAD OPTION" 
179exit
180;;
181
182esac
183shift
184done
185
186
187#-
188#- Go to NEMOGCM/config directory ---
189cd ${CONFIG_DIR}
190
191#-
192#- Initialisation from input ---
193export NEW_CONF=${x_n}
194NBR_PRC=${x_j}
195CMP_NAM=${x_m}
196NEM_SUBDIR=${x_d}
197REF_CONF=${x_r}
198NEMO_TDIR=${x_t:-$NEMO_TDIR}
199export NEMO_TDIR=${NEMO_TDIR:-$CONFIG_DIR}
200
201#- Check if the tool or the compiler exist or list it
202if [ "${NEW_CONF}" == help ] ; then
203echo "Available configurations :" 
204cat ${COMPIL_DIR}/cfg.txt
205exit
206fi
207[ "${CMP_NAM}" ==  help ] && . ${COMPIL_DIR}/Flist_archfile.sh && exit
208
209#- When used for the first time, choose a compiler ---
210. ${COMPIL_DIR}/Fcheck_archfile.sh arch_nemo.fcm ${CMP_NAM} || exit
211
212#-
213#- Choose a default configuration if needed ---
214#- ORCA2_LIM or last one used ---
215. ${COMPIL_DIR}/Fcheck_config.sh cfg.txt ${NEW_CONF} || exit
216
217
218if [ ${#NEW_CONF} -eq 0 ] ; then
219if [ ${#NEM_SUBDIR} -eq 0 -a ${#REF_CONF} -eq 0 ]; then
220echo "You are  installing a new configuration"
221ind=0
222. ${COMPIL_DIR}/Fread_dir.sh OPA_SRC   YES
223. ${COMPIL_DIR}/Fread_dir.sh LIM_SRC_2   YES
224. ${COMPIL_DIR}/Fread_dir.sh LIM_SRC_3    NO 
225. ${COMPIL_DIR}/Fread_dir.sh TOP_SRC    NO 
226. ${COMPIL_DIR}/Fread_dir.sh C1D_SRC   YES
227. ${COMPIL_DIR}/Fread_dir.sh NST_SRC   YES
228. ${COMPIL_DIR}/Fread_dir.sh OFF_SRC    NO 
229REF_CONF=ORCA2_LIM
230elif [ ${#NEM_SUBDIR} -gt 0 ] && [ ${#REF_CONF} -eq 0 ]; then
231   echo "You are  installing a new configuration"
232TAB=( ${NEM_SUBDIR} )
233   REF_CONF=ORCA2_LIM
234   elif [ ${#NEM_SUBDIR} -eq 0 ] && [ ${#REF_CONF} -gt 0 ]; then
235   echo "You are  installing a new configuration based on ${REF_CONF}"
236   . ${COMPIL_DIR}/Fcopy_dir.sh ${REF_CONF} 
237   fi
238   NEW_CONF=${x_n}
239   . ${COMPIL_DIR}/Fmake_config.sh ${NEW_CONF} ${REF_CONF}
240   else
241   sed -e "/${NEW_CONF} /d"  ${COMPIL_DIR}/cfg.txt >  ${COMPIL_DIR}/cfg.tmp
242   \m${COMPIL_DIR}/cfg.tmp  ${COMPIL_DIR}/cfg.txt
243   fi
244
245#-
246#- Save new configuration and directories names ---
247   echo ${NEW_CONF} ${TAB[*]} >> ${COMPIL_DIR}/cfg.txt
248
249#-
250#- Create the WORK ---
251#- Clean links and librairies ---
252#- Creating the good links, at first on OPA_SRC ---
253   . ${COMPIL_DIR}/Fmake_WORK.sh ${NEW_CONF} ${TAB[*]} || exit
254
255   . ${COMPIL_DIR}/Fmake_bld.sh ${CONFIG_DIR} ${NEW_CONF}  ${NEMO_TDIR} || exit
256
257#- At this stage new configuration has been added,
258#- We add or remove keys
259   if [ ${#list_add_key} -ne 0 ] ; then
260   . ${COMPIL_DIR}/Fadd_keys.sh ${NEW_CONF} add_key ${list_add_key} 
261   fi
262
263   if [ ${#list_del_key} -ne 0 ] ; then
264   . ${COMPIL_DIR}/Fdel_keys.sh ${NEW_CONF} del_key ${list_del_key}
265   fi
266
267#- At this stage the configuration has beeen chosen
268#- We look after agrif
269   grep key_agrif ${COMPIL_DIR}/cpp.fcm && export AGRIFUSE=1
270   . ${COMPIL_DIR}/Fprep_agrif.sh ${NEW_CONF} ${NEMO_TDIR} || exit
271
272#- and test whether we need to build the ioserver
273   export USEBLD=bldxio.cfg
274   grep key_iomput ${COMPIL_DIR}/cpp.fcm && export USEBLD=bld.cfg
275
276#-
277#_ END OF CONFIGURATION PHASE
278#_
279
280#-
281#- Compile ---
282
283   if [ "${NBR_PRC}" -gt 0 ]; then
284   cd ${NEMO_TDIR}/${NEW_CONF} || cd -
285
286#if AGRIF we do a first preprocessing
287   if [ ${#x_c} -eq 0 ]; then
288   [ "$AGRIFUSE" == 1 ] && fcm build --ignore-lock -s 2 ${COMPIL_DIR}/$USEBLD 
289   [ "$AGRIFUSE" == 1 ] && rm -rf  ${NEMO_TDIR}/${NEW_CONF}/BLD/*
290                               fi
291                               fcm build ${x_c} --ignore-lock -v 1 -j ${NBR_PRC} ${COMPIL_DIR}/$USEBLD || cd -
292                               [ -f ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/nemo.exe ] && ln -sf ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/nemo.exe  ${CONFIG_DIR}/${NEW_CONF}/EXP00/opa
293                               [ -f ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/server.exe ] && ln -sf ${NEMO_TDIR}/${NEW_CONF}/BLD/bin/server.exe  ${CONFIG_DIR}/${NEW_CONF}/EXP00/server.exe
294
295#add remove for clean option
296if  [ ${#x_c} -ne 0 ]; then
297rm -rf ${NEMO_TDIR}/${NEW_CONF}/WORK
298rm -rf ${NEMO_TDIR}/${NEW_CONF}/BLD
299rm -rf ${NEMO_TDIR}/${NEW_CONF}/EXP00/opa
300rm -rf ${NEMO_TDIR}/${NEW_CONF}/EXP00/server.exe
301echo "cleaning ${NEW_CONF} WORK, BLD"
302fi
303
304fi
305
306#-
307#- Come back to original directory ---
308cd -
309
310#-
311#- Unset variables
312${COMPIL_DIR}/Fclean_var.sh
313
314
Note: See TracBrowser for help on using the repository browser.