Alltest 6.92 KB
Newer Older
Henry's avatar
Henry committed
1
2
3
4
5
#!/bin/sh
#------------------------------------------------------------------------------
# =========                 |
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
#  \\    /   O peration     |
6
#   \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
mark's avatar
mark committed
7
#    \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
Henry's avatar
Henry committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#------------------------------------------------------------------------------
# License
#     This file is part of OpenFOAM.
#
#     OpenFOAM is free software: you can redistribute it and/or modify it
#     under the terms of the GNU General Public License as published by
#     the Free Software Foundation, either version 3 of the License, or
#     (at your option) any later version.
#
#     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
#     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
#     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
#     for more details.
#
#     You should have received a copy of the GNU General Public License
#     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
#
# Script
#     Alltest
#
# Description
mark's avatar
mark committed
29
#     Quickly test the tutorials and write out the scheme/solver information
Henry's avatar
Henry committed
30
31
#
#------------------------------------------------------------------------------
Henry's avatar
Henry committed
32
cd ${0%/*} || exit 1    # Run from this directory
Henry's avatar
Henry committed
33
34
35

usage()
{
mark's avatar
mark committed
36
    exec 1>&2
Henry's avatar
Henry committed
37
38
39
40
41
42
    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
    cat<<USAGE

usage: ${0##*/} [OPTION]

options:
mark's avatar
mark committed
43
44
  -git              use git to retrieve the tutorials
  -root dir         specify root directory to run tests from
Henry's avatar
Henry committed
45
46
47
48
49
50
51
52
53
  -default          sets up a default scheme on all schemes
  -help             print the usage

* quickly tests the tutorials and writes out the scheme/solver information

USAGE
    exit 1
}

mark's avatar
mark committed
54
55
56
57
58
59
60
61
62
63
64
65
# Report error and exit
die()
{
    exec 1>&2
    echo
    echo "Error encountered:"
    while [ "$#" -ge 1 ]; do echo "    $1"; shift; done
    echo
    echo "See '${0##*/} -help' for usage"
    echo
    exit 1
}
Henry's avatar
Henry committed
66

mark's avatar
mark committed
67
#------------------------------------------------------------------------------
Henry's avatar
Henry committed
68
69

ROOT="./"
mark's avatar
mark committed
70
71
unset DEFAULT_SCHEMES
unset useGit
Henry's avatar
Henry committed
72
73
74
75
76

# parse options
while [ "$#" -gt 0 ]
do
    case "$1" in
mark's avatar
mark committed
77
78
79
    -h | -help)
        usage
        ;;
Henry's avatar
Henry committed
80
81
82
83
84
    -r | -root)
        [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
        ROOT="$2"
        shift
        ;;
mark's avatar
mark committed
85
86
    -git)
        useGit=true
Henry's avatar
Henry committed
87
88
89
90
91
        ;;
    -d | -default)
        DEFAULT_SCHEMES=true
        ;;
    *)
mark's avatar
mark committed
92
        usage "unknown option/argument: '$1'"
Henry's avatar
Henry committed
93
94
95
96
97
        ;;
    esac
    shift
done

mark's avatar
mark committed
98
99
100
101
102
103
# Set tutorial locations (as required)
. $WM_PROJECT_DIR/bin/tools/RunFunctions


#------------------------------------------------------------------------------

Henry's avatar
Henry committed
104

mark's avatar
mark committed
105
106
107
#
# set up a default scheme on all schemes
#
Henry's avatar
Henry committed
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
setDefaultFvSchemes()
{
cat<<EOF
gradSchemes { default Gauss linear; }
divSchemes
{
    default Gauss linear;
    div(phi,fu_ft_ha) Gauss multivariateSelection
    {
        fu upwind;
        ft upwind;
        h  upwind;
    };
    div(phi,ft_b_ha_hau) Gauss multivariateSelection
    {
        fu upwind;
        ft upwind;
        b  upwind;
        h  upwind;
        hu upwind;
    };
}
laplacianSchemes { default Gauss linear corrected; }
interpolationSchemes { default linear; }
snGradSchemes { default corrected; }
EOF
}

#
mark's avatar
mark committed
137
# Location of the main controlDict
Henry's avatar
Henry committed
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#
unset MAIN_CONTROL_DICT

for i in \
    $HOME/.$WM_PROJECT/$WM_PROJECT_VERSION \
    $HOME/.$WM_PROJECT \
    $WM_PROJECT_DIR/etc \
    ;
do
    if [ -f "$i/controlDict" ]
    then
        MAIN_CONTROL_DICT="$i/controlDict"
        break
    fi
done

[ -f "$MAIN_CONTROL_DICT" ] || usage "main controlDict not found"


TUTORIALS_DIR=$ROOT
TEST_RUN_DIR=../tutorialsTest
FV_SCHEMES=\
" \
    gradScheme \
    divScheme \
    laplacianScheme \
    interpolationScheme \
    snGradScheme \
"
SCHEMES_FILE="FvSchemes"
SCHEMES_TEMP="FvSchemes.temp"
SOLVERS_FILE="FvSolution"
SOLVERS_TEMP="FvSolution.temp"


#
# MAIN
#

if [ -d "$TEST_RUN_DIR" ]
then
mark's avatar
mark committed
179
    echo "Removing old directory: $TEST_RUN_DIR" 1>&2
Henry's avatar
Henry committed
180
181
182
    rm -rf $TEST_RUN_DIR
fi

mark's avatar
mark committed
183
echo "Modifying ${MAIN_CONTROL_DICT}" 1>&2
184
if [ -e ${MAIN_CONTROL_DICT}.orig ]
Henry's avatar
Henry committed
185
then
mark's avatar
mark committed
186
187
    die "File ${MAIN_CONTROL_DICT}.orig already exists" \
        "Did Alltest fail in some way and then run again?"
Henry's avatar
Henry committed
188
189
190
fi

# Clean up on termination and on Ctrl-C
191
trap 'mv ${MAIN_CONTROL_DICT}.orig ${MAIN_CONTROL_DICT} 2>/dev/null; exit 0' \
Henry's avatar
Henry committed
192
    EXIT TERM INT
193
cp ${MAIN_CONTROL_DICT} ${MAIN_CONTROL_DICT}.orig
Henry's avatar
Henry committed
194
195

sed \
mark's avatar
mark committed
196
197
198
    -e s/"\(fvSchemes[ \t]*\)\([0-9]\);"/"\1 1;"/g \
    -e s/"\(solution[ \t]*\)\([0-9]\);"/"\1 1;"/g  \
    ${MAIN_CONTROL_DICT}.orig > ${MAIN_CONTROL_DICT}
Henry's avatar
Henry committed
199

mark's avatar
mark committed
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
if [ -n "$useGit" ]
then
    echo "Copying the tutorials from current git branch" 1>&2
    if  git rev-parse --is-inside-work-tree > /dev/null 2>&1 && \
        base="$(git rev-parse --show-toplevel 2>/dev/null)"
    then
        mkdir -p ${TEST_RUN_DIR}
        ( cd $base/tutorials && git archive --format=tar HEAD . ) | \
        ( cd $TEST_RUN_DIR && tar -xf - )
    else
        die "Not in a git-repo"
    fi
else
    echo "Copying the tutorials" 1>&2
    cp -a ${TUTORIALS_DIR} ${TEST_RUN_DIR}
fi
Henry's avatar
Henry committed
216

mark's avatar
mark committed
217
echo "Modifying the controlDicts to run only one time step" 1>&2
Henry's avatar
Henry committed
218
219
cd ${TEST_RUN_DIR} || exit 1

220
for CD in $(find . -name "controlDict*" -type f)
Henry's avatar
Henry committed
221
do
222
    mv ${CD} ${CD}.orig
Henry's avatar
Henry committed
223
    sed \
mark's avatar
mark committed
224
225
226
227
228
        -e s/"\(startFrom[ \t]*\)\([a-zA-Z]*\);"/"\1 latestTime;"/g \
        -e s/"\(stopAt[ \t]*\)\([a-zA-Z]*\);"/"\1 nextWrite;"/g \
        -e s/"\(writeControl[ \t]*\)\([a-zA-Z]*\);"/"\1 timeStep;"/g \
        -e s/"\(writeInterval[ \t]*\)\([0-9a-zA-Z.-]*\);"/"\1 1;"/g \
        ${CD}.orig > ${CD}
Henry's avatar
Henry committed
229
230
231
232
done

if [ "$DEFAULT_SCHEMES" = true ]
then
mark's avatar
mark committed
233
    echo "Modifying the fvSchemes to contain only default schemes" 1>&2
234
    for FV_SC in $(find . -name fvSchemes -type f)
Henry's avatar
Henry committed
235
236
237
    do
        for S in $FV_SCHEMES
        do
238
239
            mv ${FV_SC} ${FV_SC}.orig
            sed -e /"${S}"/,/$p/d ${FV_SC}.orig > ${FV_SC}
Henry's avatar
Henry committed
240
241
242
243
244
        done
        setDefaultFvSchemes >> ${FV_SC}
    done
fi

mark's avatar
mark committed
245

Henry's avatar
Henry committed
246
cp -f $FOAM_TUTORIALS/Allrun .
247
./Allrun -test
Henry's avatar
Henry committed
248
249
250

sed -e :a -e '/\\$/N; s/\\\n//; ta' Allrun > temp
APPLICATIONS=\
mark's avatar
mark committed
251
    $(grep "applications=" temp | sed 's/applications=\"\([A-Za-z \t]*\)\"/\1/g')
Henry's avatar
Henry committed
252
253
254
255
256
257
258
259
260
261

rm $SCHEMES_FILE > /dev/null 2>&1
for APP in $APPLICATIONS
do
    echo $APP >> $SCHEMES_FILE
    echo "$APP: " | tr -d "\n" >> $SOLVERS_FILE
    for ST in $FV_SCHEMES
    do
        rm $SCHEMES_TEMP $SOLVERS_TEMP > /dev/null 2>&1
        echo "  ${ST}" >> $SCHEMES_FILE
262
        for LOG in $(find ${APP} -name "log.${APP}" -type f)
Henry's avatar
Henry committed
263
        do
mark's avatar
mark committed
264
            for S in $(grep ${ST} ${LOG} | cut -d" " -f4)
Henry's avatar
Henry committed
265
266
267
            do
                echo "    ${S}" >> $SCHEMES_TEMP
            done
mark's avatar
mark committed
268
        echo $(grep solver ${LOG} | cut -d" " -f4) >> $SOLVERS_TEMP
Henry's avatar
Henry committed
269
270
271
272
273
274
275
276
277
278
        done
        if [ -f $SCHEMES_TEMP ]
        then
            cat $SCHEMES_TEMP | sort -u >> $SCHEMES_FILE
        fi
    done
    cat $SOLVERS_TEMP | tr " " "\n" | sort -u | tr "\n" " " >> $SOLVERS_FILE
    echo "" >> $SOLVERS_FILE
done

279
#------------------------------------------------------------------------------