forked from NOAA-EMC/WW3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
comp.tmpl
executable file
·153 lines (129 loc) · 5.99 KB
/
comp.tmpl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/bash
# --------------------------------------------------------------------------- #
# comp : Compiler script for use in ad3 (customized for hardware and #
# optimization). Note that this script will not be replaced if part #
# of WAVEWATCH III is re-installed. Used by ad3. #
# #
# use : comp name #
# name: name of source code file without the extension. #
# #
# error codes : 1 : input error #
# 2 : no environment file $ww3_env found. #
# 3 : error in creating scratch directory. #
# 4 : w3adc error. #
# 5 : compiler error. #
# #
# remarks : #
# #
# - This script runs from the scratch directory, where it should remain. #
# #
# - For this script to interact with ad3, it needs to generate / leave #
# following files : #
# $name.F90 : Source code (generated by ad3). #
# $name.l : Listing file. #
# $name.o : Object module. #
# comp.stat.$name : status file of compiler, containing number of #
# errors and number of warnings (generated by comp) #
# #
# - Upon (first) installation of WAVEWATCH III the user needs to check the #
# existing compilers and options available in the script cmplr.env #
# #
# - This version is a template for mpt/intel/gnu/pgi with optimized or #
# debugging options by adding _debug #
# #
# M. Accensi #
# August 2018 #
# --------------------------------------------------------------------------- #
# 1. Preparations #
# --------------------------------------------------------------------------- #
# 1.a Check and process input
if [ "$#" -ne '1' ]
then
echo "usage: comp name" ; exit 1
fi
name="$1"
echo " Compiling $name"
# 1.b Initial clean-up - - - - - - - - - - - - - - - - - - - - - - - - - - - -
rm -f $name.l
rm -f $name.o
rm -f $name.out
rm -f $name.err
rm -f comp.stat.$name
# --------------------------------------------------------------------------- #
# 2. Compile #
# --------------------------------------------------------------------------- #
# 2.a Build options and determine compiler name - - - - - - - - - - - - - - - -
# compiler
if [ "$mpi_mod" = 'yes' ] ; then
comp='<comp_mpi>'
else
comp='<comp_seq>'
fi
# compilation options
opt="<optc>"
# oasis coupler include dir
if [ "$oasis_mod" = 'yes' ]
then
opt="$opt -I$OASISDIR/build/lib/psmile.MPI1"
fi
# netcdf include dir
if [ "$netcdf_compile" = 'yes' ]
then
if [ "$mpi_mod" = 'no' ]; then comp="`$NETCDF_CONFIG --fc`"; fi
opt="$opt `$NETCDF_CONFIG --cflags`"
fi
# ftn include dir
opt="$opt -I$path_i"
opt="$opt $ESMF_F90COMPILEPATHS"
opt="$opt $EXTRA_COMP_OPTIONS"
# OMP support
if [ "$omp_mod" = 'yes' ] ; then
opt="$opt <optomp>"
fi
# 2.b Compile - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$comp $opt $name.$fext 1> $name.out 2> $name.err
OK="$?"
# --------------------------------------------------------------------------- #
# 3. Postprocessing #
# --------------------------------------------------------------------------- #
# 3.a Capture errors - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# nr_err : number of errors.
# nr_war : number of warnings.
nr_err='0'
nr_war='0'
if [ -s $name.err ]
then
nr_err="$(grep -i '<err_pattern>' $name.err | wc -l | awk '{ print $1 }')"
nr_war="$(grep -i '<warn_pattern>' $name.err | wc -l | awk '{ print $1 }')"
else
if [ "$OK" != '0' ]
then
nr_err='1'
fi
fi
# 3.b Make file comp.stat - - - - - - - - - - - - - - - - - - - - - - - - - -
echo "ERROR $nr_err" > comp.stat.$name
echo "WARNING $nr_war" >> comp.stat.$name
# 3.c Prepare listing - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# if compiler does not provide listing, make listing from source code
# and compiler messages. Second input line for w3list identifies if
# comment lines are to be numbered.
# listing done by the compiler
if [ -s $name.lst ]
then
mv $name.lst $name.l
fi
# add comp options, warnings and error to listing
if [ -s $name.l ]
then
echo '------------' >> $name.l
echo "$comp $opt" >> $name.l
echo '------------' >> $name.l
cat $name.out >> $name.l 2> /dev/null
echo '------------' >> $name.l
cat $name.err >> $name.l 2> /dev/null
echo '------------' >> $name.l
fi
# remove empty warning and error files
# find . -name "*.out" -or -name "*.err" -empty -delete
# end of comp --------------------------------------------------------------- #