Alltest 6.97 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
7
#    \\/     M anipulation  | Copyright (C) 2017-2019 OpenCFD Ltd.
Henry's avatar
Henry committed
8
9
#------------------------------------------------------------------------------
# License
10
11
#     This file is part of OpenFOAM, licensed under GNU General Public License
#     <http://www.gnu.org/licenses/>.
Henry's avatar
Henry committed
12
13
14
15
16
#
# Script
#     Alltest
#
# Description
mark's avatar
mark committed
17
#     Quickly test the tutorials and write out the scheme/solver information
Henry's avatar
Henry committed
18
#
19
20
21
# Environment
#     The entire OpenFOAM environment (WM_PROJECT_DIR, etc)
#
Henry's avatar
Henry committed
22
#------------------------------------------------------------------------------
23
cd "${0%/*}" || exit 1      # Run from this directory
Henry's avatar
Henry committed
24
25
26

usage()
{
mark's avatar
mark committed
27
    exec 1>&2
Henry's avatar
Henry committed
28
29
30
31
32
33
    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
    cat<<USAGE

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

options:
34
35
  -git          Use git to retrieve the tutorials
  -no-git       Do not use git to retrieve the tutorials
36
  -debug        Adjust DebugSwitches (fvSchemes, solution)
37
38
39
  -root dir     Specify root directory to run tests from
  -default      Sets up a default scheme on all schemes
  -help         Print the usage
Henry's avatar
Henry committed
40

41
42
43
Quickly tests the tutorials and writes out the scheme/solver information.
The default is to detect and use 'git' if possible to obtain a fresh set
of tutorial files. This can be overridden with -git or -no-git options.
Henry's avatar
Henry committed
44
45
46
47
48

USAGE
    exit 1
}

mark's avatar
mark committed
49
50
51
52
53
54
55
56
57
58
59
60
# 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
61

mark's avatar
mark committed
62
#------------------------------------------------------------------------------
Henry's avatar
Henry committed
63
64

ROOT="./"
65
adjustDebugSwitches=false
66
useDefaultSchemes=false
67
useGit=auto
Henry's avatar
Henry committed
68

69
# Parse options
Henry's avatar
Henry committed
70
71
72
while [ "$#" -gt 0 ]
do
    case "$1" in
mark's avatar
mark committed
73
74
75
    -h | -help)
        usage
        ;;
Henry's avatar
Henry committed
76
    -r | -root)
77
        [ "$#" -ge 2 ] || die "'$1' option requires an argument"
Henry's avatar
Henry committed
78
79
80
        ROOT="$2"
        shift
        ;;
mark's avatar
mark committed
81
82
    -git)
        useGit=true
Henry's avatar
Henry committed
83
        ;;
84
85
86
    -no-git)
        unset useGit
        ;;
87
88
    -debug)
        adjustDebugSwitches=true
89
        ;;
90
    -default)
91
        useDefaultSchemes=true
Henry's avatar
Henry committed
92
93
        ;;
    *)
94
        die "Unknown option/argument: '$1'"
Henry's avatar
Henry committed
95
96
97
98
99
        ;;
    esac
    shift
done

100
# Set FOAM_TUTORIALS directory location, as required.
101
. "${WM_PROJECT_DIR:?}/bin/tools/RunFunctions"
mark's avatar
mark committed
102
103
104
105


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

mark's avatar
mark committed
106
#
107
# Set up a default scheme on all schemes
mark's avatar
mark committed
108
#
Henry's avatar
Henry committed
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
}

137

Henry's avatar
Henry committed
138
#
139
# Locate the user or project controlDict to adjust
Henry's avatar
Henry committed
140
#
141
142
unset ETC_CONTROL_DICT
if [ "$adjustDebugSwitches" = true ]
143
then
144
    if ETC_CONTROL_DICT="$($WM_PROJECT_DIR/bin/foamEtcFile -mode=uo controlDict)"
Henry's avatar
Henry committed
145
    then
146
147
        if [ -e "${ETC_CONTROL_DICT}.orig" ]
        then
148
149
            echo "File ${ETC_CONTROL_DICT}.orig already exists" \
                "Did Alltest fail in some way and then run again?" 2>&1
150

151
            echo "Not adjusting DebugSwitches ..." 2>&1
152
            unset ETC_CONTROL_DICT
153
154
155
156
157
158
        else
            grep DebugSwitches "${ETC_CONTROL_DICT}" 1> /dev/null 2>&1 || {
                echo "No DebugSwitches to adjust in ${ETC_CONTROL_DICT}" 1>&2
                unset ETC_CONTROL_DICT
            }
        fi
159
160
161
    else
        echo "No main (user or project) controlDict to adjust" 1>&2
        unset ETC_CONTROL_DICT
Henry's avatar
Henry committed
162
    fi
163
fi
Henry's avatar
Henry committed
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187


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
188
    echo "Removing old directory: $TEST_RUN_DIR" 1>&2
Henry's avatar
Henry committed
189
190
191
    rm -rf $TEST_RUN_DIR
fi

192
# Remove old build/ directory
193
buildDir="$WM_PROJECT_DIR/build/$WM_OPTIONS/${TEST_RUN_DIR##*/}"
194
195
196
if [ -d "$buildDir" ]
then
    echo "Removing old build directory: $buildDir" 1>&2
197
    rm -rf "$buildDir"
198
199
fi

200
unset gitbase
Henry's avatar
Henry committed
201

mark's avatar
mark committed
202
203
if [ -n "$useGit" ]
then
204
    if git rev-parse --is-inside-work-tree > /dev/null 2>&1
mark's avatar
mark committed
205
    then
206
        gitbase="$(git rev-parse --show-toplevel 2>/dev/null)"
mark's avatar
mark committed
207
    fi
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228

    case "$useGit" in
    auto)
        if [ -n "$gitbase" ]
        then
            echo "Detected git repository" 1>&2
        else
            echo "No git repository detected" 1>&2
        fi
        ;;

    true)
        [ -n "$gitbase" ] || die "Not in a git repository"
        ;;
    esac
fi


if [ -n "$gitbase" ]
then
    echo "Copying the tutorials from current git branch" 1>&2
229
    mkdir -p "${TEST_RUN_DIR}"
230
231
    ( cd "$gitbase/tutorials" && git archive --format=tar HEAD . ) | \
    ( cd "$TEST_RUN_DIR" && tar -xf - )
mark's avatar
mark committed
232
else
233
234
    echo "Copying the tutorials directory" 1>&2
    cp -a "$TUTORIALS_DIR" "$TEST_RUN_DIR"
mark's avatar
mark committed
235
fi
Henry's avatar
Henry committed
236

237
cd "${TEST_RUN_DIR}" || exit 1
238

239
echo 1>&2
240
241


242
243
244
245
246
# Adjust etc controlDict, and clean up on termination and on Ctrl-C
if [ -f "${ETC_CONTROL_DICT}" ]
then
    trap 'mv ${ETC_CONTROL_DICT}.orig ${ETC_CONTROL_DICT} 2>/dev/null; exit 0' \
        EXIT TERM INT
247

248
    echo "Modifying DebugSwitches: ${ETC_CONTROL_DICT}" 1>&2
249

250
251
252
253
254
255
    cp -f "${ETC_CONTROL_DICT}" "${ETC_CONTROL_DICT}.orig"
    sed \
        -e 's/\(fvSchemes[ \t]*\)\([0-9]\);/\1 1;/g' \
        -e 's/"\(solution[ \t]*\)\([0-9]\);/\1 1;/g'  \
        "${ETC_CONTROL_DICT}.orig" > "${ETC_CONTROL_DICT}"
fi
256

257
258
echo "Modifying the case controlDicts to run only one time step" 1>&2
echo 1>&2
Henry's avatar
Henry committed
259

260
for CD in $(find . -name "controlDict*" -type f)
Henry's avatar
Henry committed
261
do
262
    cp -f "${CD}" "${CD}.orig"
Henry's avatar
Henry committed
263
    sed \
264
265
266
267
        -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' \
268
        "${CD}.orig" > "${CD}"
Henry's avatar
Henry committed
269
270
done

271
if [ "$useDefaultSchemes" = true ]
Henry's avatar
Henry committed
272
then
mark's avatar
mark committed
273
    echo "Modifying the fvSchemes to contain only default schemes" 1>&2
274
    for FV_SC in $(find . -name fvSchemes -type f)
Henry's avatar
Henry committed
275
276
277
    do
        for S in $FV_SCHEMES
        do
278
279
            cp -f "${FV_SC}" "${FV_SC}.orig"
            sed -e /"${S}"/,/$p/d "${FV_SC}.orig" > "${FV_SC}"
Henry's avatar
Henry committed
280
        done
281
        setDefaultFvSchemes >> "${FV_SC}"
Henry's avatar
Henry committed
282
283
284
    done
fi

285
[ -f Allrun ] || cp -f "${FOAM_TUTORIALS:?}/Allrun" .
Henry's avatar
Henry committed
286

287
288
289
echo "Starting Allrun -test" 1>&2
echo "    $PWD" 1>&2
echo 1>&2
290

291
exec ./Allrun -test
Henry's avatar
Henry committed
292

293
#------------------------------------------------------------------------------