diff --git a/applications/solvers/multiphase/interFoam/overInterDyMFoam/createDyMControls.H b/applications/solvers/multiphase/interFoam/overInterDyMFoam/createDyMControls.H
index cb2dfd5ddd1e49261c47ed18216c802b08afdca0..00673cec243ac65fae2c8bf04534d24ddf8df3b2 100644
--- a/applications/solvers/multiphase/interFoam/overInterDyMFoam/createDyMControls.H
+++ b/applications/solvers/multiphase/interFoam/overInterDyMFoam/createDyMControls.H
@@ -19,6 +19,11 @@ bool massFluxInterpolation
     pimple.dict().lookupOrDefault("massFluxInterpolation", false)
 );
 
+bool adjustFringe
+(
+    pimple.dict().lookupOrDefault("oversetAdjustPhi", false)
+);
+
 bool ddtCorr
 (
     pimple.dict().lookupOrDefault("ddtCorr", true)
diff --git a/applications/solvers/multiphase/interFoam/overInterDyMFoam/interDyMFoam.C b/applications/solvers/multiphase/interFoam/overInterDyMFoam/interDyMFoam.C
index 7bb7f8af6b87112aa1b2bbc93fb68a3582f184b7..075676da7715f829c61600483e7bbb533c9eff9f 100644
--- a/applications/solvers/multiphase/interFoam/overInterDyMFoam/interDyMFoam.C
+++ b/applications/solvers/multiphase/interFoam/overInterDyMFoam/interDyMFoam.C
@@ -53,6 +53,7 @@ Description
 #include "interpolationCellPoint.H"
 #include "transform.H"
 #include "fvMeshSubset.H"
+#include "oversetAdjustPhi.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
diff --git a/applications/solvers/multiphase/interFoam/overInterDyMFoam/pEqn.H b/applications/solvers/multiphase/interFoam/overInterDyMFoam/pEqn.H
index 0a5b0296b8b14d0b5dd4d94235636202d8ee81be..c11ce1dba5cc0c78b125a7e75d39c85124422386 100644
--- a/applications/solvers/multiphase/interFoam/overInterDyMFoam/pEqn.H
+++ b/applications/solvers/multiphase/interFoam/overInterDyMFoam/pEqn.H
@@ -28,6 +28,14 @@
         fvc::makeAbsolute(phiHbyA, U);
     }
 
+    if (adjustFringe)
+    {
+        fvc::makeRelative(phiHbyA, U);
+        oversetAdjustPhi(phiHbyA, U);
+        fvc::makeAbsolute(phiHbyA, U);
+    }
+
+
     surfaceScalarField phig
     (
         (
diff --git a/applications/test/fieldMapping/pipe1D/system/blockMeshDict b/applications/test/fieldMapping/pipe1D/system/blockMeshDict
index 455cdb1f9b94be01493a3b657a601b876e869879..f5e65a7dfde5867b92a4af0691744b2e5d194eac 100644
--- a/applications/test/fieldMapping/pipe1D/system/blockMeshDict
+++ b/applications/test/fieldMapping/pipe1D/system/blockMeshDict
@@ -14,7 +14,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-convertToMeters 1;
+scale   1;
 
 vertices
 (
diff --git a/applications/test/hexRef8/block/system/blockMeshDict b/applications/test/hexRef8/block/system/blockMeshDict
index 594ef61bd1b15e8b27997e1fd251d0a747cdeab4..931f6899a1b8d2250d7964187b56e03c832d15ae 100644
--- a/applications/test/hexRef8/block/system/blockMeshDict
+++ b/applications/test/hexRef8/block/system/blockMeshDict
@@ -14,7 +14,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-convertToMeters 1;
+scale   1;
 
 vertices
 (
diff --git a/applications/test/mapDistributePolyMesh/cavity/system/blockMeshDict b/applications/test/mapDistributePolyMesh/cavity/system/blockMeshDict
index 3118c894d875f5cf3287d1714402b6bd2cd2f48f..6b7e69ca49f5fd62bb46fc54438cc27a4ec33bca 100644
--- a/applications/test/mapDistributePolyMesh/cavity/system/blockMeshDict
+++ b/applications/test/mapDistributePolyMesh/cavity/system/blockMeshDict
@@ -14,7 +14,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-convertToMeters 0.1;
+scale   0.1;
 
 vertices
 (
diff --git a/applications/test/parallelOverset/heatTransfer/system/blockMeshDict b/applications/test/parallelOverset/heatTransfer/system/blockMeshDict
index d04d518b0afd4f8ddda4246bd372216de1e61d3d..7d3c759df321a352fadaa0dad4beadc823d0a40f 100644
--- a/applications/test/parallelOverset/heatTransfer/system/blockMeshDict
+++ b/applications/test/parallelOverset/heatTransfer/system/blockMeshDict
@@ -15,7 +15,7 @@ FoamFile
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-convertToMeters 1;
+scale   1;
 
 vertices
 (
diff --git a/applications/test/patchRegion/cavity_pinched/system/blockMeshDict b/applications/test/patchRegion/cavity_pinched/system/blockMeshDict
index 5f58428dd6957756f1e7d66e8d9a31e95ad07e8c..6c09069cce78a74eb7a1f40bb1e2350e46a2d75d 100644
--- a/applications/test/patchRegion/cavity_pinched/system/blockMeshDict
+++ b/applications/test/patchRegion/cavity_pinched/system/blockMeshDict
@@ -14,7 +14,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-convertToMeters 0.1;
+scale   0.1;
 
 vertices
 (
diff --git a/applications/test/stringSplit/Test-stringSplit.C b/applications/test/stringSplit/Test-stringSplit.C
index 9b1208c252fbf66a5ebcd23bc5717455182dae77..3d0c820d24e5631c876f0b2237c62c65b4fb5391 100644
--- a/applications/test/stringSplit/Test-stringSplit.C
+++ b/applications/test/stringSplit/Test-stringSplit.C
@@ -35,11 +35,10 @@ Description
 
 using namespace Foam;
 
+// Simple utility
 template<class String>
-void printSplitting(const String& str, const char delimiter)
+void printSubStrings(const String& str, const SubStrings<String>& split)
 {
-    auto split = stringOps::split(str, delimiter);
-
     Info<< "string {" << str.size() << " chars} = " << str << nl
         << split.size() << " elements {" << split.length() << " chars}"
         << nl;
@@ -60,7 +59,28 @@ int main(int argc, char *argv[])
 {
     argList::noBanner();
     argList::noParallel();
-
+    argList::addOption
+    (
+        "any",
+        "delimChars",
+        "test split on any delimiter characters"
+    );
+    argList::addOption
+    (
+        "sub",
+        "string",
+        "test split on substring"
+    );
+    argList::addBoolOption
+    (
+        "slash",
+        "test split on slash (default)"
+    );
+    argList::addBoolOption
+    (
+        "space",
+        "test split on space"
+    );
     argList args(argc, argv, false, true);
 
     if (args.size() <= 1 && args.options().empty())
@@ -68,12 +88,83 @@ int main(int argc, char *argv[])
         args.printUsage();
     }
 
-    for (label argi=1; argi < args.size(); ++argi)
+    int nopts = 0;
+    for (auto optName : { "any", "slash", "space", "sub" })
+    {
+        if (args.optionFound(optName))
+        {
+            ++nopts;
+        }
+    }
+
+    if (args.optionFound("any"))
+    {
+        const std::string& str = args["any"];
+        Info<< "split on any chars" << nl
+            << "=" << str << nl
+            << "~~~~~~~~~~~~~~~" << nl;
+
+        for (label argi=1; argi < args.size(); ++argi)
+        {
+            const auto split = stringOps::splitAny(args[argi], str);
+            printSubStrings(args[argi], split);
+        }
+
+        if (nopts == 1)
+        {
+            return 0;
+        }
+    }
+
+    if (args.optionFound("sub"))
+    {
+        const std::string& str = args["sub"];
+        Info<< "split on substring" << nl
+            << "=" << str << nl
+            << "~~~~~~~~~~~~~~~" << nl;
+
+        for (label argi=1; argi < args.size(); ++argi)
+        {
+            const auto split = stringOps::split(args[argi], str);
+            printSubStrings(args[argi], split);
+        }
+
+        if (nopts == 1)
+        {
+            return 0;
+        }
+    }
+
+    if (args.optionFound("space"))
+    {
+        Info<< "split on space" << nl
+            << "~~~~~~~~~~~~~~" << nl;
+
+        for (label argi=1; argi < args.size(); ++argi)
+        {
+            const auto split = stringOps::splitSpace(args[argi]);
+            printSubStrings(args[argi], split);
+        }
+
+        if (nopts == 1)
+        {
+            return 0;
+        }
+    }
+
+    // Default
+    if (!nopts || args.optionFound("slash"))
     {
-        printSplitting(args[argi], '/');
+        Info<< "split on slash" << nl
+            << "~~~~~~~~~~~~~~" << nl;
+
+        for (label argi=1; argi < args.size(); ++argi)
+        {
+            const auto split = stringOps::split(args[argi], '/');
+            printSubStrings(args[argi], split);
+        }
     }
 
-    Info<< "\nEnd\n" << endl;
     return 0;
 }
 
diff --git a/applications/test/volField/cavity/system/blockMeshDict b/applications/test/volField/cavity/system/blockMeshDict
index cb67af8ad1ce0fef2af012af46988a910d3d4421..69ed9d520102702ef63559f7ddcabe8506a4bc33 100644
--- a/applications/test/volField/cavity/system/blockMeshDict
+++ b/applications/test/volField/cavity/system/blockMeshDict
@@ -14,7 +14,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-convertToMeters 0.1;
+scale   0.1;
 
 vertices
 (
diff --git a/applications/utilities/mesh/manipulation/setSet/setSet.C b/applications/utilities/mesh/manipulation/setSet/setSet.C
index 2f5b6a5cca332aa0a81bb4c651caaa2394df1b0f..df20caa2fffe1a40cfea529922ebdd403eb6cec1 100644
--- a/applications/utilities/mesh/manipulation/setSet/setSet.C
+++ b/applications/utilities/mesh/manipulation/setSet/setSet.C
@@ -85,7 +85,7 @@ void writeVTK
         vtk::writeFaceSet
         (
             mesh,
-            currentSet,
+            dynamicCast<const faceSet&>(currentSet),
             mesh.time().path()/vtkBaseName,
             vtk::formatType::LEGACY_BINARY
         );
@@ -96,7 +96,7 @@ void writeVTK
         vtk::writeCellSetFaces
         (
             mesh,
-            currentSet,
+            dynamicCast<const cellSet&>(currentSet),
             mesh.time().path()/vtkBaseName,
             vtk::formatType::LEGACY_BINARY
         );
@@ -106,7 +106,7 @@ void writeVTK
         vtk::writePointSet
         (
             mesh,
-            currentSet,
+            dynamicCast<const pointSet&>(currentSet),
             mesh.time().path()/vtkBaseName,
             vtk::formatType::LEGACY_BINARY
         );
diff --git a/applications/utilities/miscellaneous/foamList/Make/options b/applications/utilities/miscellaneous/foamList/Make/options
index 4d19e8972125a24afe4e96e4bbc4907db6ea287e..adc6ef19a368c37bde87fc390e6d17f82af94a5d 100644
--- a/applications/utilities/miscellaneous/foamList/Make/options
+++ b/applications/utilities/miscellaneous/foamList/Make/options
@@ -68,7 +68,7 @@ EXE_LIBS = \
     -lrigidBodyDynamics \
     -lrigidBodyMeshMotion \
     -lsampling \
-    -lscotchDecomp \
+    -L$(FOAM_LIBBIN)/dummy -lscotchDecomp \
     -lsixDoFRigidBodyMotion \
     -lSLGThermo \
     -lsnappyHexMesh \
diff --git a/applications/utilities/postProcessing/dataConversion/smapToFoam/smapToFoam.C b/applications/utilities/postProcessing/dataConversion/smapToFoam/smapToFoam.C
index 9ac03a63c4ef739c189ba9c6c1d38feea2e680e6..d228a420876c8e508760fdb36408b2b636b3a8c2 100644
--- a/applications/utilities/postProcessing/dataConversion/smapToFoam/smapToFoam.C
+++ b/applications/utilities/postProcessing/dataConversion/smapToFoam/smapToFoam.C
@@ -89,11 +89,7 @@ int main(int argc, char *argv[])
             break;
         }
 
-        if
-        (
-            fieldName.type() != token::WORD
-         && fieldName.wordToken() != "CELL"
-        )
+        if (!fieldName.isWord() || fieldName.wordToken() != "CELL")
         {
             FatalErrorInFunction
                 << "Expected first CELL, found "
@@ -103,7 +99,7 @@ int main(int argc, char *argv[])
 
         label nCols = 0;
         smapFile >> fieldName;
-        while (fieldName.type() == token::WORD)
+        while (fieldName.isWord())
         {
             starFieldNames[nCols++] = fieldName.wordToken();
             smapFile >> fieldName;
diff --git a/applications/utilities/postProcessing/noise/noiseDict b/applications/utilities/postProcessing/noise/noiseDict
index 00a3fbc81d58ede2674bd7ea90b214a366236ac9..ca808462c4c2dceccc6d51c0da878557d969aae7 100644
--- a/applications/utilities/postProcessing/noise/noiseDict
+++ b/applications/utilities/postProcessing/noise/noiseDict
@@ -48,8 +48,11 @@ surfaceNoiseCoeffs
 */
 
 
-    // Input file
-    inputFile   "postProcessing/faceSource1/surface/patch_motorBike_rider-helmet%65/patch_motorBike_rider-helmet%65.case";
+    // Input file(s)
+    file   "postProcessing/faceSource1/surface/patch1/patch1.case";
+    // Multiple inputs
+    //files   ( "postProcessing/faceSource1/surface/patch1/patch1.case"
+    //          "postProcessing/faceSource2/surface/patch2/patch2.case" );
 
     // Surface reader
     reader      ensight;
@@ -83,20 +86,25 @@ surfaceNoiseCoeffs
     //startTime       0;
 
     // Write interval for FFT data, default = 1
-//    fftWriteInterval 100;
+    //fftWriteInterval 100;
+
+    // Bounds for valid pressure from input source
+        // Maximum pressure, default 0.5*VGREAT
+        //maxPressure 150e5;
+
+        // Minimum pressure, default -0.5*VGREAT
+        //minPressure -150e5;
 }
 
 pointNoiseCoeffs
 {
-    csvFileData
-    {
-        file            "pressureData";
-        nHeaderLine     1;
-        refColumn       0;
-        componentColumns (1);
-        separator       " ";
-        mergeSeparators yes;
-    }
+    file            "pressureData";
+    //files           ( "pressureData" "pressureData2");
+    nHeaderLine     1;
+    refColumn       0;
+    componentColumns (1);
+    separator       " ";
+    mergeSeparators yes;
 
     HanningCoeffs
     {
@@ -130,6 +138,13 @@ pointNoiseCoeffs
 
     // Write interval for FFT data, default = 1
     fftWriteInterval 100;
+
+    // Bounds for valid pressure from input source
+        // Maximum pressure, default 0.5*VGREAT
+        //maxPressure 150e5;
+
+        // Minimum pressure, default -0.5*VGREAT
+        //minPressure -150e5;
 }
 
 
diff --git a/bin/tools/foamCreateBashCompletions b/bin/tools/foamCreateBashCompletions
deleted file mode 100755
index 5df15841d395de3f8eb44db6033ab92e1626cacc..0000000000000000000000000000000000000000
--- a/bin/tools/foamCreateBashCompletions
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/bin/sh
-#------------------------------------------------------------------------------
-# =========                 |
-# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-#  \\    /   O peration     |
-#   \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
-#    \\/     M anipulation  |
-#------------------------------------------------------------------------------
-# 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
-#     foamCreateBashCompletions
-#
-# Description
-#     Create bash completions for OpenFOAM applications
-#
-#------------------------------------------------------------------------------
-usage() {
-    exec 1>&2
-    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
-    cat<<USAGE
-
-Usage: ${0##*/} [OPTION] [appName .. [appNameN]]
-options:
-  -d dir | -dir dir       Directory to process
-  -u | -user              Add \$FOAM_USER_APPBIN to the search directories
-  -head | -header         Generate header
-  -h | -help              Print the usage
-
-Create bash completions for OpenFOAM applications and write to stdout.
-By default searches \$FOAM_APPBIN only.
-Alternatively, scan the output from individual applications for single completion
-commands (using the '_of_complete_' backend).
-
-USAGE
-    exit 1
-}
-
-
-#-------------------------------------------------------------------------------
-
-searchDirs="$FOAM_APPBIN"
-unset optHeader
-while [ "$#" -gt 0 ]
-do
-    case "$1" in
-        -h | -help)
-            usage
-            ;;
-        -d | -dir)
-            searchDirs="$2"
-            [ -d $searchDirs ] || usage "directory not found '$searchDirs'"
-            shift
-            ;;
-        -u | -user)
-            searchDirs="$searchDirs $FOAM_USER_APPBIN"
-            ;;
-        -head | -header)
-            optHeader=true
-            ;;
-        -*)
-            usage "unknown option: '$1'"
-            ;;
-        *)
-            break
-            ;;
-    esac
-    shift
-done
-
-# No applications given, then always generate a header
-if [ "$#" -eq 0 ]
-then
-    optHeader=true
-fi
-
-# Header requested or required
-[ "$optHeader" = true ] && cat << HEADER
-#----------------------------------*-sh-*--------------------------------------
-# Bash completions for OpenFOAM applications
-# Recreate with "${0##*/}"
-#
-# Formatted as "complete ... -F _of_APPNAME APPNAME
-
-#
-# Generic completion handler for OpenFOAM applications
-# - arg1 = command-name
-# - arg2 = current word
-# - arg3 = previous word
-# - arg4 = options with args
-# - arg5 = boolean options
-#
-unset -f _of_complete_ 2>/dev/null
-_of_complete_()
-{
-    # Unused: local cmd=\$1
-    local cur=\$2
-    local prev=\$3
-    local optsWithArgs="\$4 "   # Trailing space added for easier matching
-    local opts="\$5 "
-    local choices
-
-    case \${prev} in
-    -help|-doc|-srcDoc)
-        # These options are usage and we can stop here.
-        COMPREPLY=()
-        return 0
-        ;;
-    -case)
-        COMPREPLY=(\$(compgen -d -- \${cur}))
-        ;;
-    -time)
-        # Could use "foamListTimes -withZero", but still doesn't address ranges
-        COMPREPLY=(\$(compgen -d -X '![-0-9]*' -- \${cur}))
-        ;;
-    -region)
-        choices=\$(\ls -d system/*/ 2>/dev/null | sed -e 's#/\$##' -e 's#^.*/##')
-        COMPREPLY=(\$(compgen -W "\$choices" -- \${cur}))
-        ;;
-    -fileHandler)
-        choices="collated uncollated masterUncollated"
-        COMPREPLY=(\$(compgen -W "\$choices" -- \${cur}))
-        ;;
-    *Dict)
-        # local dirs=\$(\ls -d s*/)
-        # local files=\$(\ls -f | grep Dict)
-        # COMPREPLY=(\$(compgen -W \"\$dirs \$files\" -- \${cur}))
-        COMPREPLY=(\$(compgen -f -- \${cur}))
-        ;;
-    *)
-        if [ "\${optsWithArgs/\${prev} /}" != "\${optsWithArgs}" ]
-        then
-            # Option with unknown type of arg - set to files.
-            # Not always correct but can still navigate path if needed...
-            COMPREPLY=(\$(compgen -f -- \${cur}))
-        elif [ -n "\$cur" -a "\${cur#-}" = "\${cur}" ]
-        then
-            # Already started a (non-empty) word that isn't an option,
-            # use files in which case revert to filenames.
-            COMPREPLY=(\$(compgen -f -- \${cur}))
-        else
-            # Catchall
-            # - Present remaining options (not already seen in \$COMP_LINE)
-            choices=\$(
-                for o in \${opts} \${optsWithArgs}
-                do
-                    [ "\${COMP_LINE/\$o/}" = "\${COMP_LINE}" ] && echo \$o
-                done
-            )
-            COMPREPLY=(\$(compgen -W "\$choices" -- \${cur}))
-        fi
-        ;;
-    esac
-
-    return 0
-}
-
-#------------------------------------------------------------------------------
-
-HEADER
-
-#-------------------------------------------------------------------------------
-
-# Scans the output of the application -help to detect options with/without
-# arguments.  Dispatch via _of_complete_
-#
-generateCompletion()
-{
-    local fullName="$1"
-    local appName="${1##*/}"
-    local appHelp
-
-    [ -f "$fullName" -a -x "$fullName" ] || {
-        echo "skip $fullName" 1>&2
-        return 1
-    }
-    if [ "$appName" = "complete_" ]
-    then
-        echo "skip $appName ... reserved name?" 1>&2
-        return 1
-    fi
-
-    appHelp=$($fullName -help) || {
-        echo "error calling $fullName" 1>&2
-        return 1
-    }
-
-    # Options with args - as array
-    local optsWithArgs=($(awk '/^ {0,4}-[a-z]/ && /</ {print $1}' <<< "$appHelp"))
-
-    # Options without args - as array
-    local opts=($(awk '/^ {0,4}-[a-z]/ && !/</ {print $1}' <<< "$appHelp"))
-
-    # See bash(1) for some details. Completion functions are called with
-    # arg1 = command-name, arg2 = current word, arg3 = previous word
-    #
-    # Append known option types and dispatch to _of_complete_
-    echo "    $appName" 1>&2
-    cat << COMPLETION
-
-# [$appName]
-unset -f _of_${appName} 2>/dev/null
-_of_${appName}() {
-    _of_complete_ "\$@" \\
-    "${optsWithArgs[@]}" \\
-    "${opts[@]}"
-}
-complete -o filenames -F _of_${appName} $appName
-
-COMPLETION
-}
-#------------------------------------------------------------------------------
-
-
-if [ "$#" -eq 0 ]
-then
-
-    for dir in ${searchDirs}
-    do
-        if [ -d "$dir" ]
-        then
-            echo "Processing directory $dir" 1>&2
-        else
-            echo "No such directory: $dir" 1>&2
-            continue
-        fi
-
-        # Sort with ignore-case
-        set -- $(\ls $dir | sort -f)
-        for appName
-        do
-            generateCompletion "$dir/$appName"
-        done
-    done
-
-else
-
-    for appName
-    do
-        if [ -f "$appName" -a -x "$appName" ]
-        then
-            generateCompletion "$appName"
-        elif fullName=$(command -v $appName 2>/dev/null)
-        then
-            generateCompletion "$fullName"
-        else
-            echo "No application found: $appName" 1>&2
-        fi
-    done
-
-fi
-
-
-# Generate footer
-[ "$optHeader" = true ] && cat << FOOTER
-
-#------------------------------------------------------------------------------
-FOOTER
-
-#------------------------------------------------------------------------------
diff --git a/bin/tools/foamCreateCompletionCache b/bin/tools/foamCreateCompletionCache
new file mode 100755
index 0000000000000000000000000000000000000000..48f1e3449a4dee43b40aae0129890c013a2c2a03
--- /dev/null
+++ b/bin/tools/foamCreateCompletionCache
@@ -0,0 +1,199 @@
+#!/bin/bash
+#------------------------------------------------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  |
+#------------------------------------------------------------------------------
+# 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
+#     foamCreateCompletionCache
+#
+# Description
+#     Create cache of bash completion values for OpenFOAM applications
+#     The cached values are typically used by the tcsh completion wrapper.
+#
+#------------------------------------------------------------------------------
+defaultOutputFile="$WM_PROJECT_DIR/etc/config.sh/completion_cache"
+
+usage() {
+    exec 1>&2
+    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
+    cat<<USAGE
+
+Usage: ${0##*/} [OPTION] [appName .. [appNameN]]
+options:
+  -d dir | -dir dir   Directory to process
+  -u | -user          Add \$FOAM_USER_APPBIN to the search directories
+  -no-header          Suppress header generation
+  -o FILE             Write to alternative output
+  -h | -help          Print the usage
+
+Create cache of bash completion values for OpenFOAM applications.
+The cached values are typically used by the tcsh completion wrapper.
+Default search: \$FOAM_APPBIN only.
+Default output: $defaultOutputFile
+
+Uses the search directory if applications are specified.
+
+USAGE
+    exit 1
+}
+
+# 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
+}
+
+#-------------------------------------------------------------------------------
+
+searchDirs="$FOAM_APPBIN"
+optHeader=true
+unset outputFile
+while [ "$#" -gt 0 ]
+do
+    case "$1" in
+    -h | -help)
+        usage
+        ;;
+    -d | -dir)
+        [ "$#" -ge 2 ] || die "'$1' option requires an argument"
+        searchDirs="$2"
+        [ -d "$searchDirs" ] || die "directory not found '$searchDirs'"
+        shift
+        ;;
+    -u | -user)
+        searchDirs="$searchDirs $FOAM_USER_APPBIN"
+        ;;
+    -no-head*)
+        optHeader=false
+        ;;
+    -o | -output)
+        [ "$#" -ge 2 ] || die "'$1' option requires an argument"
+        outputFile="$2"
+        shift
+        ;;
+    -*)
+        usage "unknown option: '$1'"
+        ;;
+    *)
+        break
+        ;;
+    esac
+    shift
+done
+
+: ${outputFile:=$defaultOutputFile}
+
+# Verify that output is writeable
+if [ -e "$outputFile" ]
+then
+    [ -f "$outputFile" ] || \
+        die "Cannot overwrite $outputFile" "Not a file"
+    [ -w "$outputFile" ] || \
+        die "Cannot overwrite $outputFile" "No permission?"
+else
+    [ -w "$(dirname $outputFile)" ] || \
+        die "Cannot write $outputFile" "directory is not writeble"
+fi
+
+exec 1>| $outputFile || exit $?
+echo "Writing $outputFile" 1>&2
+echo 1>&2
+
+# Header not disabled
+[ "$optHeader" = true ] && cat << HEADER
+#----------------------------------*-sh-*--------------------------------------
+# Cached options for bash completion of OpenFOAM applications.
+# These are the values expected by the '_of_complete_' function
+#
+# Recreate with "${0##*/}"
+
+# Global associative array (cached options for OpenFOAM applications)
+declare -gA _of_complete_cache_;
+
+# Clear existing cache.
+_of_complete_cache_=()
+
+#------------------------------------------------------------------------------
+HEADER
+
+#-------------------------------------------------------------------------------
+
+# Scans the output of the application -help to detect options with/without
+# arguments.  Dispatch via _of_complete_
+#
+extractOptions()
+{
+    local appName="$1"
+    local helpText=$($appName -help 2>/dev/null | sed -ne '/^  *-/p')
+
+    [ -n "$helpText" ] || {
+        echo "Error calling $appName" 1>&2
+        return 1
+    }
+
+    # Array of options with args
+    local argOpts=($(awk '/^ {0,4}-[a-z]/ && /</ {print $1}' <<< "$helpText"))
+
+    # Array of options without args
+    local boolOpts=($(awk '/^ {0,4}-[a-z]/ && !/</ {print $1}' <<< "$helpText"))
+
+    appName="${appName##*/}"
+    echo "$appName" 1>&2
+    echo "_of_complete_cache_[${appName}]=\"${argOpts[@]} | ${boolOpts[@]}\""
+}
+#------------------------------------------------------------------------------
+
+[ "$#" -gt 0 ] || set -- ${searchDirs}
+
+for item
+do
+    if [ -d "$item" ]
+    then
+        # Process directory for applications - sort with ignore-case
+        echo "[directory] $item" 1>&2
+        choices="$(find $item -maxdepth 1 -executable -type f | sort -f 2>/dev/null)"
+        for appName in $choices
+        do
+            extractOptions $appName
+        done
+    elif command -v "$item" > /dev/null 2>&1
+    then
+        extractOptions $item
+    else
+        echo "No such file or directory: $item" 1>&2
+    fi
+done
+
+# Generate footer
+[ "$optHeader" = true ] && cat << FOOTER
+
+#------------------------------------------------------------------------------
+FOOTER
+
+#------------------------------------------------------------------------------
diff --git a/etc/bashrc b/etc/bashrc
index 623f19affd33e1caa038d6fe26732d62fbc33b77..e2e887ac646048ac52fa5f7ef0845474bc7f4bec 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -175,7 +175,7 @@ then
     _foamEtc config.sh/aliases
 
     # Bash completions
-    if command -v complete > /dev/null 2>&1
+    if [ "${BASH_VERSINFO:-0}" -ge 4 ]
     then
         _foamEtc config.sh/bash_completion
     fi
diff --git a/etc/config.csh/complete b/etc/config.csh/complete
deleted file mode 100644
index 88bd4facd852885eaff4f0a511b03ed1dc715e44..0000000000000000000000000000000000000000
--- a/etc/config.csh/complete
+++ /dev/null
@@ -1,59 +0,0 @@
-#!bash
-# A bash -*- sh -*- adapter for re-using OpenFOAM bash completions with tcsh
-#
-# Called with appName and COMMAND_LINE
-#
-# Source the bash completions
-. $WM_PROJECT_DIR/etc/config.sh/bash_completion
-
-appName=$1
-
-# Ensure COMP_LINE is available for bash function
-if [ "$#" -eq 2 ]
-then
-    COMP_LINE=$2
-else
-    COMP_LINE=$COMMAND_LINE
-fi
-
-# Remove the colon as a completion separator because tcsh cannot handle it
-COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
-
-# Set COMP_WORDS in a way that can be handled by the bash script.
-COMP_WORDS=($COMP_LINE)
-
-# The cursor is at the end of parameter #1.
-# We must check for a space as the last character which will
-# tell us that the previous word is complete and the cursor
-# is on the next word.
-if [ "${COMP_LINE: -1}" = " " ]
-then
-    # The last character is a space, so our location is at the end
-    # of the command-line array
-    COMP_CWORD=${#COMP_WORDS[@]}
-else
-    # The last character is not a space, so our location is on the
-    # last word of the command-line array, so we must decrement the
-    # count by 1
-    COMP_CWORD=$((${#COMP_WORDS[@]}-1))
-fi
-
-# bash completions are "complete ... -F _of_APPNAME APPNAME
-_of_${appName} \
-    "$appName" "${COMP_WORDS[COMP_CWORD]}" "${COMP_WORDS[COMP_CWORD-1]}"
-
-# Need slash on the end of directories for tcsh
-reply=($(for i in ${COMPREPLY[@]}
-    do
-        if [ -d "$i" -a "${i#/}" = "$i" ]
-        then
-            echo "$i/"
-        else
-            echo "$i"
-        fi
-    done
-))
-
-echo ${reply[@]}
-
-#------------------------------------------------------------------------------
diff --git a/etc/config.csh/complete-wrapper b/etc/config.csh/complete-wrapper
new file mode 100644
index 0000000000000000000000000000000000000000..8fbbdffac6766c134c7405aa2374be485d5a9dc7
--- /dev/null
+++ b/etc/config.csh/complete-wrapper
@@ -0,0 +1,102 @@
+#!bash
+#----------------------------------*-sh-*--------------------------------------
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  |
+#------------------------------------------------------------------------------
+# This file is part of OpenFOAM, licensed under the GNU General Public License
+# <http://www.gnu.org/licenses/>.
+#
+# File
+#     etc/config.csh/complete-wrapper
+#
+# Description
+#     A wrapper for using OpenFOAM bash completions with tcsh.
+#
+# Arguments
+#     appName = the application name
+#
+# Environment
+#     The tcsh COMMAND_LINE is passed in via the environment.
+#     This corresponds to the bash COMP_LINE variable
+#
+#------------------------------------------------------------------------------
+[ "$#" -ge 1 ] || exit 1
+
+# Support '-test' option to check bash version
+if [ "$1" = "-test" ]
+then
+    # Uses 'declare -gA' for the implementation
+    # The '-A' requires bash >= 4.0 and the '-g' requires bash >= 4.2
+    [ "${BASH_VERSINFO[0]:-0}${BASH_VERSINFO[1]:-0}" -ge 42 ]
+    exit $?
+fi
+
+# Preload completion cache
+if [ -f $WM_PROJECT_DIR/etc/config.sh/completion_cache ]
+then  . $WM_PROJECT_DIR/etc/config.sh/completion_cache
+fi
+
+# Use the bash completion function, but retain cache etc.
+_of_complete_tcsh=true
+if [ -f $WM_PROJECT_DIR/etc/config.sh/bash_completion ]
+then  . $WM_PROJECT_DIR/etc/config.sh/bash_completion
+else
+    # Could warn about missing file, or treat silently
+    echo
+    exit 1
+fi
+
+appName=$1
+
+# Ensure COMP_LINE is available for bash function
+if [ "$#" -eq 2 ]
+then
+    COMP_LINE=$2
+else
+    COMP_LINE=$COMMAND_LINE
+fi
+
+# Remove the colon as a completion separator because tcsh cannot handle it
+COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
+
+# Set COMP_WORDS in a way that can be handled by the bash script.
+COMP_WORDS=($COMP_LINE)
+
+# The cursor is at the end of parameter #1.
+# We must check for a space as the last character which will
+# tell us that the previous word is complete and the cursor
+# is on the next word.
+if [ "${COMP_LINE: -1}" = " " ]
+then
+    # The last character is a space, so our location is at the end
+    # of the command-line array
+    COMP_CWORD=${#COMP_WORDS[@]}
+else
+    # The last character is not a space, so our location is on the
+    # last word of the command-line array, so we must decrement the
+    # count by 1
+    COMP_CWORD=$((${#COMP_WORDS[@]}-1))
+fi
+
+# Call _of_complete_ APPNAME Current Previous
+_of_complete_ \
+    "$appName" "${COMP_WORDS[COMP_CWORD]}" "${COMP_WORDS[COMP_CWORD-1]}"
+
+# Tcsh needs slash on the end of directories
+reply=($(for i in ${COMPREPLY[@]}
+    do
+        if [ -d "$i" -a "${i#/}" = "$i" ]
+        then
+            echo "$i/"
+        else
+            echo "$i"
+        fi
+    done
+))
+
+echo ${reply[@]}
+
+#------------------------------------------------------------------------------
diff --git a/etc/config.csh/tcsh_completion b/etc/config.csh/tcsh_completion
index 251c63cc3afa41907a8b2b51678c639f554c46c1..9dfcca704650699d808a11aabd486c2678d1b603 100644
--- a/etc/config.csh/tcsh_completion
+++ b/etc/config.csh/tcsh_completion
@@ -1,17 +1,47 @@
 #----------------------------------*-sh-*--------------------------------------
-# Tcsh completions for OpenFOAM applications
-# Using bash_completion functions for the hard work
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  |
+#------------------------------------------------------------------------------
+# This file is part of OpenFOAM, licensed under the GNU General Public License
+# <http://www.gnu.org/licenses/>.
+#
+# File
+#     etc/config.csh/tcsh_completion
+#
+# Description
+#     Tcsh completions for OpenFOAM applications
+#     Using bash completion for the hard work
+#
+# Requires
+#     bash 4.2 or newer
+#
+#------------------------------------------------------------------------------
 
 if ($?tcsh) then  # tcsh only
-    if ( -f $WM_PROJECT_DIR/etc/config.sh/bash_completion \
-      && -f $WM_PROJECT_DIR/etc/config.csh/complete) then
-        foreach appName (`sed -ne 's/^complete.* //p' $WM_PROJECT_DIR/etc/config.sh/bash_completion`)
-            # Pass explicitly
-            ## complete $appName 'p,*,`bash $WM_PROJECT_DIR/etc/config.csh/complete '$appName' "${COMMAND_LINE}"`,'
-            # Pass via environment
-            complete $appName 'p,*,`bash $WM_PROJECT_DIR/etc/config.csh/complete '$appName'`,'
+
+    # Remove old completions, which look like:
+    #   complete APPNAME 'p,*,`bash $WM_PROJECT_DIR/etc/ ...
+    foreach appName (`complete | sed -ne '/WM_PROJECT/s/\t.*$//p'`)
+        uncomplete $appName
+    end
+
+    # Generate completions for predefined directories (if support is possible)
+    bash $WM_PROJECT_DIR/etc/config.csh/complete-wrapper -test
+    if ($status == 0) then
+        foreach dirName ("$FOAM_APPBIN")
+            if ( ! -d $dirName ) continue
+            foreach appName (`find $dirName -maxdepth 1 -executable -type f`)
+                # Pass explicitly
+                ## complete $appName:t 'p,*,`bash $WM_PROJECT_DIR/etc/config.csh/complete-wrapper '$appName:t' "${COMMAND_LINE}"`,'
+                # Pass via environment
+                complete $appName:t 'p,*,`bash $WM_PROJECT_DIR/etc/config.csh/complete-wrapper '$appName:t'`,'
+            end
         end
     endif
+
 endif
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.csh/unset b/etc/config.csh/unset
index d9cb0ff21b005e32c1784d2274af7fde3ca92e5d..20f7c9eb6df633eba43b35fa4755bda3835de18c 100644
--- a/etc/config.csh/unset
+++ b/etc/config.csh/unset
@@ -196,11 +196,10 @@ unalias wmRefresh
 unalias foamVersion
 unalias foamPV
 
-# Cleanup completions, which look like this:
-#   complete blockMesh 'p,*,`bash $WM_PROJECT_DIR/etc/ ...
-
+# Remove old completions, which look like:
+#   complete APPNAME 'p,*,`bash $WM_PROJECT_DIR/etc/ ...
 if ($?prompt && $?tcsh) then  # Interactive tcsh only
-    foreach cleaned (`complete | sed -n -e '/WM_PROJECT/s/\t.*$//p'`)
+    foreach cleaned (`complete | sed -ne '/WM_PROJECT/s/\t.*$//p'`)
         uncomplete $cleaned
     end
 endif
diff --git a/etc/config.sh/bash_completion b/etc/config.sh/bash_completion
index b99683f78fc76bb28b3d053bdf7651cd7423e69d..8d671ee9f7dcaf8ae1885200b413f4f0c56fd8ef 100644
--- a/etc/config.sh/bash_completion
+++ b/etc/config.sh/bash_completion
@@ -1,30 +1,113 @@
 #----------------------------------*-sh-*--------------------------------------
-# Bash completions for OpenFOAM applications
-# Recreate with "foamCreateBashCompletions"
+# =========                 |
+# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+#  \\    /   O peration     |
+#   \\  /    A nd           | Copyright (C) 2017 OpenCFD Ltd.
+#    \\/     M anipulation  |
+#------------------------------------------------------------------------------
+# This file is part of OpenFOAM, licensed under the GNU General Public License
+# <http://www.gnu.org/licenses/>.
 #
-# Formatted as "complete ... -F _of_APPNAME APPNAME
-
+# File
+#     etc/config.sh/bash_completion
+#
+# Description
+#     Bash completion handler for OpenFOAM applications and automatic
+#     generation of completion associations
+#
+# Provides
+#     foamAddCompletion
+#     _of_complete_
 #
+# Uses
+#     _of_complete_cache_
+#
+# Requires
+#     bash 4.2 or newer
+#
+#------------------------------------------------------------------------------
+
+# Remove old completions (skip for tcsh wrapper), which look like:
+#     "complete ... -F _of_complete_ APPNAME
+if [ -z "$_of_complete_tcsh" ]
+then
+    # For economy, obtain list first
+    foamOldDirs="$(complete 2>/dev/null | sed -ne 's/^.*-F _of_.* \(..*\)$/\1/p')"
+    for cleaned in $foamOldDirs
+    do
+        complete -r $cleaned 2>/dev/null
+    done
+fi
+
+
+# Add completion for command or directory of commands
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+unset -f foamAddCompletion 2>/dev/null
+foamAddCompletion()
+{
+    [ "$#" -gt 0 ] || \
+        echo "Usage: foamAddCompletion -clear | -list | dir(s) | app(s)" 1>&2
+
+    local appName choices
+    for appName
+    do
+        if [ "$appName" = "-clear" ]
+        then
+           # Clear cached values
+           echo "clear cached values"
+           _of_complete_cache_=()
+
+        elif [ "$appName" = "-list" ]
+        then
+           # List cached keys
+           choices="${#_of_complete_cache_[@]}"
+           echo "$choices cached values:"
+           [ "$choices" = 0 ] || echo ${!_of_complete_cache_[@]}  # keys
+
+        elif [ -d "$appName" ]
+        then
+            # Process directory for applications
+            choices="$(find $appName -maxdepth 1 -executable -type f 2>/dev/null)"
+            for appName in $choices
+            do
+                complete -o filenames -F _of_complete_ "${appName##*/}"
+                # echo "complete ${appName##*/}" 1>&2
+            done
+
+        elif command -v "$appName" > /dev/null 2>&1
+        then
+            complete -o filenames -F _of_complete_ "${appName##*/}"
+            # echo "complete ${appName##*/}" 1>&2
+        else
+            echo "No completion added for $appName" 1>&2
+        fi
+    done
+}
+
+
 # Generic completion handler for OpenFOAM applications
+#
+# Dispatch via "complete ... -F _of_complete_ APPNAME
 # - arg1 = command-name
 # - arg2 = current word
 # - arg3 = previous word
-# - arg4 = options with args
-# - arg5 = boolean options
+#
+# The respective options are generated on-the-fly from the application's -help
+# output and cached to the _of_complete_cache_ global associative array with
+# entries formatted as "argOpts.. | boolOpts ..".
+# The '|' character separates options with and without arguments.
 #
 unset -f _of_complete_ 2>/dev/null
 _of_complete_()
 {
-    # Unused: local cmd=$1
+    local appName=$1
     local cur=$2
     local prev=$3
-    local optsWithArgs="$4 "   # Trailing space added for easier matching
-    local opts="$5 "
     local choices
 
     case ${prev} in
     -help|-doc|-srcDoc)
-        # These options are usage and we can stop here.
+        # These options are usage - we can stop now.
         COMPREPLY=()
         return 0
         ;;
@@ -43,33 +126,60 @@ _of_complete_()
         choices="collated uncollated masterUncollated"
         COMPREPLY=($(compgen -W "$choices" -- ${cur}))
         ;;
-    *Dict)
-        # local dirs=$(\ls -d s*/)
-        # local files=$(\ls -f | grep Dict)
-        # COMPREPLY=($(compgen -W \"$dirs $files\" -- ${cur}))
-        COMPREPLY=($(compgen -f -- ${cur}))
-        ;;
     *)
-        if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]
+        # All options
+        choices="${_of_complete_cache_[$appName]}"
+
+        # Not in cache, obtain by parsing application -help
+        if [ -z "$choices" ]
         then
-            # Option with unknown type of arg - set to files.
-            # Not always correct but can still navigate path if needed...
-            COMPREPLY=($(compgen -f -- ${cur}))
-        elif [ -n "$cur" -a "${cur#-}" = "${cur}" ]
+            local helpText=$($appName -help 2>/dev/null | sed -ne '/^  *-/p')
+
+            if [ -n "$helpText" ]
+            then
+                # Array of options with args
+                local argOpts=($(awk '/^ {0,4}-[a-z]/ && /</ {print $1}' <<< "$helpText"))
+
+                # Array of options without args
+                local boolOpts=($(awk '/^ {0,4}-[a-z]/ && !/</ {print $1}' <<< "$helpText"))
+
+                choices="${argOpts[@]} | ${boolOpts[@]}"
+            else
+                echo "Error calling $appName" 1>&2
+                choices="false"  # Mark failure to prevent repeating again
+            fi
+            _of_complete_cache_[$appName]="$choices"
+            ## echo "generated $appName = $choices" 1>&2   # Debugging
+        fi
+        if [ "${choices:-false}" = false ]
         then
-            # Already started a (non-empty) word that isn't an option,
-            # use files in which case revert to filenames.
             COMPREPLY=($(compgen -f -- ${cur}))
         else
-            # Catchall
-            # - Present remaining options (not already seen in $COMP_LINE)
-            choices=$(
-                for o in ${opts} ${optsWithArgs}
-                do
-                    [ "${COMP_LINE/$o/}" = "${COMP_LINE}" ] && echo $o
-                done
-            )
-            COMPREPLY=($(compgen -W "$choices" -- ${cur}))
+            # Everything before the '|' ==> options with args.
+            local argOpts="${choices%|*}"
+
+            if [ "${argOpts/${prev} /}" != "${argOpts}" ]
+            then
+                # Option with unknown type of arg - set to files.
+                # Not always correct but can still navigate path if needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            elif [ -n "$cur" -a "${cur#-}" = "${cur}" ]
+            then
+                # Already started a (non-empty) word that isn't an option,
+                # in which case revert to filenames.
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catchall
+                # - Present remaining options (not already seen in $COMP_LINE)
+                choices=$(
+                    for o in ${choices}
+                    do
+                        [ "${COMP_LINE/$o/}" = "${COMP_LINE}" ] && echo "${o#|}"
+                    done
+                )
+
+                COMPREPLY=($(compgen -W "$choices" -- ${cur}))
+            fi
         fi
         ;;
     esac
@@ -80,2434 +190,38 @@ _of_complete_()
 #------------------------------------------------------------------------------
 
 
-# [adiabaticFlameT]
-unset -f _of_adiabaticFlameT 2>/dev/null
-_of_adiabaticFlameT() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-srcDoc -doc -help"
-}
-complete -o filenames -F _of_adiabaticFlameT adiabaticFlameT
-
-
-# [adjointShapeOptimizationFoam]
-unset -f _of_adjointShapeOptimizationFoam 2>/dev/null
-_of_adjointShapeOptimizationFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_adjointShapeOptimizationFoam adjointShapeOptimizationFoam
-
-
-# [ansysToFoam]
-unset -f _of_ansysToFoam 2>/dev/null
-_of_ansysToFoam() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_ansysToFoam ansysToFoam
-
-
-# [applyBoundaryLayer]
-unset -f _of_applyBoundaryLayer 2>/dev/null
-_of_applyBoundaryLayer() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots -ybl" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_applyBoundaryLayer applyBoundaryLayer
-
-
-# [attachMesh]
-unset -f _of_attachMesh 2>/dev/null
-_of_attachMesh() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -overwrite -srcDoc -doc -help"
-}
-complete -o filenames -F _of_attachMesh attachMesh
-
-
-# [autoPatch]
-unset -f _of_autoPatch 2>/dev/null
-_of_autoPatch() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -overwrite -srcDoc -doc -help"
-}
-complete -o filenames -F _of_autoPatch autoPatch
-
-
-# [blockMesh]
-unset -f _of_blockMesh 2>/dev/null
-_of_blockMesh() {
-    _of_complete_ "$@" \
-    "-case -dict -region" \
-    "-blockTopology -noClean -noFunctionObjects -sets -srcDoc -doc -help"
-}
-complete -o filenames -F _of_blockMesh blockMesh
-
-
-# [boundaryFoam]
-unset -f _of_boundaryFoam 2>/dev/null
-_of_boundaryFoam() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_boundaryFoam boundaryFoam
-
-
-# [boxTurb]
-unset -f _of_boxTurb 2>/dev/null
-_of_boxTurb() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_boxTurb boxTurb
-
-
-# [buoyantBoussinesqPimpleFoam]
-unset -f _of_buoyantBoussinesqPimpleFoam 2>/dev/null
-_of_buoyantBoussinesqPimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_buoyantBoussinesqPimpleFoam buoyantBoussinesqPimpleFoam
-
-
-# [buoyantBoussinesqSimpleFoam]
-unset -f _of_buoyantBoussinesqSimpleFoam 2>/dev/null
-_of_buoyantBoussinesqSimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_buoyantBoussinesqSimpleFoam buoyantBoussinesqSimpleFoam
-
-
-# [buoyantPimpleFoam]
-unset -f _of_buoyantPimpleFoam 2>/dev/null
-_of_buoyantPimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_buoyantPimpleFoam buoyantPimpleFoam
-
-
-# [buoyantSimpleFoam]
-unset -f _of_buoyantSimpleFoam 2>/dev/null
-_of_buoyantSimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_buoyantSimpleFoam buoyantSimpleFoam
-
-
-# [cavitatingDyMFoam]
-unset -f _of_cavitatingDyMFoam 2>/dev/null
-_of_cavitatingDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_cavitatingDyMFoam cavitatingDyMFoam
-
-
-# [cavitatingFoam]
-unset -f _of_cavitatingFoam 2>/dev/null
-_of_cavitatingFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_cavitatingFoam cavitatingFoam
-
-
-# [cfx4ToFoam]
-unset -f _of_cfx4ToFoam 2>/dev/null
-_of_cfx4ToFoam() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_cfx4ToFoam cfx4ToFoam
-
-
-# [changeDictionary]
-unset -f _of_changeDictionary 2>/dev/null
-_of_changeDictionary() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -instance -region -roots -subDict -time" \
-    "-constant -disablePatchGroups -enableFunctionEntries -latestTime -literalRE -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_changeDictionary changeDictionary
-
-
-# [checkMesh]
-unset -f _of_checkMesh 2>/dev/null
-_of_checkMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots -time -writeFields -writeSets" \
-    "-allGeometry -allTopology -constant -latestTime -meshQuality -newTimes -noFunctionObjects -noTopology -noZero -parallel -writeAllFields -srcDoc -doc -help"
-}
-complete -o filenames -F _of_checkMesh checkMesh
-
-
-# [chemFoam]
-unset -f _of_chemFoam 2>/dev/null
-_of_chemFoam() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_chemFoam chemFoam
-
-
-# [chemkinToFoam]
-unset -f _of_chemkinToFoam 2>/dev/null
-_of_chemkinToFoam() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-newFormat -srcDoc -doc -help"
-}
-complete -o filenames -F _of_chemkinToFoam chemkinToFoam
-
-
-# [chtMultiRegionFoam]
-unset -f _of_chtMultiRegionFoam 2>/dev/null
-_of_chtMultiRegionFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_chtMultiRegionFoam chtMultiRegionFoam
-
-
-# [chtMultiRegionSimpleFoam]
-unset -f _of_chtMultiRegionSimpleFoam 2>/dev/null
-_of_chtMultiRegionSimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_chtMultiRegionSimpleFoam chtMultiRegionSimpleFoam
-
-
-# [coalChemistryFoam]
-unset -f _of_coalChemistryFoam 2>/dev/null
-_of_coalChemistryFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_coalChemistryFoam coalChemistryFoam
-
-
-# [coldEngineFoam]
-unset -f _of_coldEngineFoam 2>/dev/null
-_of_coldEngineFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_coldEngineFoam coldEngineFoam
-
-
-# [collapseEdges]
-unset -f _of_collapseEdges 2>/dev/null
-_of_collapseEdges() {
-    _of_complete_ "$@" \
-    "-case -collapseFaceSet -decomposeParDict -dict -roots -time" \
-    "-collapseFaces -constant -latestTime -newTimes -noFunctionObjects -noZero -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_collapseEdges collapseEdges
-
-
-# [combinePatchFaces]
-unset -f _of_combinePatchFaces 2>/dev/null
-_of_combinePatchFaces() {
-    _of_complete_ "$@" \
-    "-case -concaveAngle -decomposeParDict -roots" \
-    "-meshQuality -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_combinePatchFaces combinePatchFaces
-
-
-# [compressibleInterDyMFoam]
-unset -f _of_compressibleInterDyMFoam 2>/dev/null
-_of_compressibleInterDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_compressibleInterDyMFoam compressibleInterDyMFoam
-
-
-# [compressibleInterFoam]
-unset -f _of_compressibleInterFoam 2>/dev/null
-_of_compressibleInterFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_compressibleInterFoam compressibleInterFoam
-
-
-# [compressibleMultiphaseInterFoam]
-unset -f _of_compressibleMultiphaseInterFoam 2>/dev/null
-_of_compressibleMultiphaseInterFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_compressibleMultiphaseInterFoam compressibleMultiphaseInterFoam
-
-
-# [createBaffles]
-unset -f _of_createBaffles 2>/dev/null
-_of_createBaffles() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -region -roots" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_createBaffles createBaffles
-
-
-# [createExternalCoupledPatchGeometry]
-unset -f _of_createExternalCoupledPatchGeometry 2>/dev/null
-_of_createExternalCoupledPatchGeometry() {
-    _of_complete_ "$@" \
-    "-case -commsDir -decomposeParDict -region -regions -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_createExternalCoupledPatchGeometry createExternalCoupledPatchGeometry
-
-
-# [createPatch]
-unset -f _of_createPatch 2>/dev/null
-_of_createPatch() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -region -roots" \
-    "-noFunctionObjects -overwrite -parallel -writeObj -srcDoc -doc -help"
-}
-complete -o filenames -F _of_createPatch createPatch
-
-
-# [createZeroDirectory]
-unset -f _of_createZeroDirectory 2>/dev/null
-_of_createZeroDirectory() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots -templateDir" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_createZeroDirectory createZeroDirectory
-
-
-# [datToFoam]
-unset -f _of_datToFoam 2>/dev/null
-_of_datToFoam() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_datToFoam datToFoam
-
-
-# [decomposePar]
-unset -f _of_decomposePar 2>/dev/null
-_of_decomposePar() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -time" \
-    "-allRegions -cellDist -constant -copyUniform -copyZero -fields -force -ifRequired -latestTime -newTimes -noFunctionObjects -noSets -noZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_decomposePar decomposePar
-
-
-# [deformedGeom]
-unset -f _of_deformedGeom 2>/dev/null
-_of_deformedGeom() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_deformedGeom deformedGeom
-
-
-# [dnsFoam]
-unset -f _of_dnsFoam 2>/dev/null
-_of_dnsFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_dnsFoam dnsFoam
-
-
-# [DPMDyMFoam]
-unset -f _of_DPMDyMFoam 2>/dev/null
-_of_DPMDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -cloudName -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_DPMDyMFoam DPMDyMFoam
-
-
-# [DPMFoam]
-unset -f _of_DPMFoam 2>/dev/null
-_of_DPMFoam() {
-    _of_complete_ "$@" \
-    "-case -cloud -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_DPMFoam DPMFoam
-
-
-# [driftFluxFoam]
-unset -f _of_driftFluxFoam 2>/dev/null
-_of_driftFluxFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_driftFluxFoam driftFluxFoam
-
-
-# [dsmcFoam]
-unset -f _of_dsmcFoam 2>/dev/null
-_of_dsmcFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_dsmcFoam dsmcFoam
-
-
-# [dsmcInitialise]
-unset -f _of_dsmcInitialise 2>/dev/null
-_of_dsmcInitialise() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_dsmcInitialise dsmcInitialise
-
-
-# [electrostaticFoam]
-unset -f _of_electrostaticFoam 2>/dev/null
-_of_electrostaticFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_electrostaticFoam electrostaticFoam
-
-
-# [engineCompRatio]
-unset -f _of_engineCompRatio 2>/dev/null
-_of_engineCompRatio() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_engineCompRatio engineCompRatio
-
-
-# [engineFoam]
-unset -f _of_engineFoam 2>/dev/null
-_of_engineFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_engineFoam engineFoam
-
-
-# [engineSwirl]
-unset -f _of_engineSwirl 2>/dev/null
-_of_engineSwirl() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_engineSwirl engineSwirl
-
-
-# [equilibriumCO]
-unset -f _of_equilibriumCO 2>/dev/null
-_of_equilibriumCO() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-srcDoc -doc -help"
-}
-complete -o filenames -F _of_equilibriumCO equilibriumCO
-
-
-# [equilibriumFlameT]
-unset -f _of_equilibriumFlameT 2>/dev/null
-_of_equilibriumFlameT() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-srcDoc -doc -help"
-}
-complete -o filenames -F _of_equilibriumFlameT equilibriumFlameT
-
-
-# [extrude2DMesh]
-unset -f _of_extrude2DMesh 2>/dev/null
-_of_extrude2DMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_extrude2DMesh extrude2DMesh
-
-
-# [extrudeMesh]
-unset -f _of_extrudeMesh 2>/dev/null
-_of_extrudeMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_extrudeMesh extrudeMesh
-
-
-# [extrudeToRegionMesh]
-unset -f _of_extrudeToRegionMesh 2>/dev/null
-_of_extrudeToRegionMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -region -roots" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_extrudeToRegionMesh extrudeToRegionMesh
-
-
-# [faceAgglomerate]
-unset -f _of_faceAgglomerate 2>/dev/null
-_of_faceAgglomerate() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -region -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_faceAgglomerate faceAgglomerate
-
-
-# [financialFoam]
-unset -f _of_financialFoam 2>/dev/null
-_of_financialFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_financialFoam financialFoam
-
-
-# [fireFoam]
-unset -f _of_fireFoam 2>/dev/null
-_of_fireFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_fireFoam fireFoam
-
-
-# [fireToFoam]
-unset -f _of_fireToFoam 2>/dev/null
-_of_fireToFoam() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-ascii -check -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_fireToFoam fireToFoam
-
-
-# [flattenMesh]
-unset -f _of_flattenMesh 2>/dev/null
-_of_flattenMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_flattenMesh flattenMesh
-
-
-# [fluent3DMeshToFoam]
-unset -f _of_fluent3DMeshToFoam 2>/dev/null
-_of_fluent3DMeshToFoam() {
-    _of_complete_ "$@" \
-    "-case -ignoreCellGroups -ignoreFaceGroups -scale" \
-    "-cubit -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_fluent3DMeshToFoam fluent3DMeshToFoam
-
-
-# [fluentMeshToFoam]
-unset -f _of_fluentMeshToFoam 2>/dev/null
-_of_fluentMeshToFoam() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-noFunctionObjects -writeSets -writeZones -srcDoc -doc -help"
-}
-complete -o filenames -F _of_fluentMeshToFoam fluentMeshToFoam
-
-
-# [foamDataToFluent]
-unset -f _of_foamDataToFluent 2>/dev/null
-_of_foamDataToFluent() {
-    _of_complete_ "$@" \
-    "-case -time" \
-    "-latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamDataToFluent foamDataToFluent
-
-
-# [foamDictionary]
-unset -f _of_foamDictionary 2>/dev/null
-_of_foamDictionary() {
-    _of_complete_ "$@" \
-    "-add -case -decomposeParDict -diff -entry -roots -set" \
-    "-disableFunctionEntries -expand -includes -keywords -noFunctionObjects -parallel -remove -value -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamDictionary foamDictionary
-
-
-# [foamFormatConvert]
-unset -f _of_foamFormatConvert 2>/dev/null
-_of_foamFormatConvert() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots -time" \
-    "-constant -enableFunctionEntries -latestTime -newTimes -noConstant -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamFormatConvert foamFormatConvert
-
-
-# [foamHelp]
-unset -f _of_foamHelp 2>/dev/null
-_of_foamHelp() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamHelp foamHelp
-
-
-# [foamList]
-unset -f _of_foamList 2>/dev/null
-_of_foamList() {
-    _of_complete_ "$@" \
-    "-case -scalarBCs -vectorBCs" \
-    "-compressibleTurbulenceModels -functionObjects -fvOptions -incompressibleTurbulenceModels -noFunctionObjects -registeredSwitches -switches -unset -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamList foamList
-
-
-# [foamListTimes]
-unset -f _of_foamListTimes 2>/dev/null
-_of_foamListTimes() {
-    _of_complete_ "$@" \
-    "-case -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noZero -processor -rm -withZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamListTimes foamListTimes
-
-
-# [foamMeshToFluent]
-unset -f _of_foamMeshToFluent 2>/dev/null
-_of_foamMeshToFluent() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamMeshToFluent foamMeshToFluent
-
-
-# [foamToEnsight]
-unset -f _of_foamToEnsight 2>/dev/null
-_of_foamToEnsight() {
-    _of_complete_ "$@" \
-    "-case -cellZone -decomposeParDict -faceZones -fields -name -patches -region -roots -time -width" \
-    "-ascii -constant -latestTime -newTimes -noFunctionObjects -noLagrangian -noPatches -noZero -nodeValues -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamToEnsight foamToEnsight
-
+# Uses 'declare -gA' for the implementation
+# The '-A' requires bash >= 4.0 and the '-g' requires bash >= 4.2
+if [ "${BASH_VERSINFO[0]:-0}${BASH_VERSINFO[1]:-0}" -ge 42 ]
+then
+    # Global associative array (cached options for OpenFOAM applications)
+    declare -gA _of_complete_cache_;
 
-# [foamToEnsightParts]
-unset -f _of_foamToEnsightParts 2>/dev/null
-_of_foamToEnsightParts() {
-    _of_complete_ "$@" \
-    "-case -index -name -time -width" \
-    "-ascii -constant -latestTime -newTimes -noFunctionObjects -noLagrangian -noMesh -noZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamToEnsightParts foamToEnsightParts
-
-
-# [foamToFireMesh]
-unset -f _of_foamToFireMesh 2>/dev/null
-_of_foamToFireMesh() {
-    _of_complete_ "$@" \
-    "-case -scale -time" \
-    "-ascii -constant -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamToFireMesh foamToFireMesh
-
-
-# [foamToGMV]
-unset -f _of_foamToGMV 2>/dev/null
-_of_foamToGMV() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamToGMV foamToGMV
-
-
-# [foamToStarMesh]
-unset -f _of_foamToStarMesh 2>/dev/null
-_of_foamToStarMesh() {
-    _of_complete_ "$@" \
-    "-case -scale -time" \
-    "-constant -latestTime -newTimes -noBnd -noFunctionObjects -noZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamToStarMesh foamToStarMesh
-
-
-# [foamToSurface]
-unset -f _of_foamToSurface 2>/dev/null
-_of_foamToSurface() {
-    _of_complete_ "$@" \
-    "-case -scale -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noZero -tri -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamToSurface foamToSurface
-
-
-# [foamToTetDualMesh]
-unset -f _of_foamToTetDualMesh 2>/dev/null
-_of_foamToTetDualMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots -time" \
-    "-constant -latestTime -noFunctionObjects -noZero -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamToTetDualMesh foamToTetDualMesh
+    # Clear existing cache and reassign bash completions.
+    # But for tcsh wrapper make use of caching and avoid this overhead.
+    if [ -z "$_of_complete_tcsh" ]
+    then
+        _of_complete_cache_=()
 
+        # Generate completions for predefined directories
+        foamAddCompletion $FOAM_APPBIN
+    fi
+else
+    # Bash version is too old.
+    ## echo "No bash completions - requires bash >= 4.2" 1>&2
 
-# [foamToVTK]
-unset -f _of_foamToVTK 2>/dev/null
-_of_foamToVTK() {
-    _of_complete_ "$@" \
-    "-case -cellSet -decomposeParDict -excludePatches -faceSet -fields -name -pointSet -region -roots -time" \
-    "-allPatches -ascii -constant -latestTime -nearCellValue -newTimes -noFaceZones -noFunctionObjects -noInternal -noLagrangian -noLinks -noPointValues -noZero -parallel -poly -surfaceFields -useTimeName -xml -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamToVTK foamToVTK
-
-
-# [foamUpgradeCyclics]
-unset -f _of_foamUpgradeCyclics 2>/dev/null
-_of_foamUpgradeCyclics() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots -time" \
-    "-constant -enableFunctionEntries -latestTime -newTimes -noFunctionObjects -noZero -parallel -test -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamUpgradeCyclics foamUpgradeCyclics
-
-
-# [foamyHexMesh]
-unset -f _of_foamyHexMesh 2>/dev/null
-_of_foamyHexMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-checkGeometry -conformationOnly -noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamyHexMesh foamyHexMesh
-
-
-# [foamyQuadMesh]
-unset -f _of_foamyQuadMesh 2>/dev/null
-_of_foamyQuadMesh() {
-    _of_complete_ "$@" \
-    "-case -pointsFile" \
-    "-noFunctionObjects -overwrite -srcDoc -doc -help"
-}
-complete -o filenames -F _of_foamyQuadMesh foamyQuadMesh
-
-
-# [gambitToFoam]
-unset -f _of_gambitToFoam 2>/dev/null
-_of_gambitToFoam() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_gambitToFoam gambitToFoam
-
-
-# [gmshToFoam]
-unset -f _of_gmshToFoam 2>/dev/null
-_of_gmshToFoam() {
-    _of_complete_ "$@" \
-    "-case -region" \
-    "-keepOrientation -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_gmshToFoam gmshToFoam
+    unset -f foamAddCompletion 2>/dev/null
+    foamAddCompletion()
+    {
+        echo "foamAddCompletion disabled - requires bash >= 4.2" 1>&2
+    }
 
+    unset -f _of_complete_ 2>/dev/null
+fi
 
-# [icoFoam]
-unset -f _of_icoFoam 2>/dev/null
-_of_icoFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_icoFoam icoFoam
-
-
-# [icoUncoupledKinematicParcelDyMFoam]
-unset -f _of_icoUncoupledKinematicParcelDyMFoam 2>/dev/null
-_of_icoUncoupledKinematicParcelDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -cloud -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_icoUncoupledKinematicParcelDyMFoam icoUncoupledKinematicParcelDyMFoam
-
-
-# [icoUncoupledKinematicParcelFoam]
-unset -f _of_icoUncoupledKinematicParcelFoam 2>/dev/null
-_of_icoUncoupledKinematicParcelFoam() {
-    _of_complete_ "$@" \
-    "-case -cloud -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_icoUncoupledKinematicParcelFoam icoUncoupledKinematicParcelFoam
-
-
-# [ideasUnvToFoam]
-unset -f _of_ideasUnvToFoam 2>/dev/null
-_of_ideasUnvToFoam() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-dump -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_ideasUnvToFoam ideasUnvToFoam
-
-
-# [insideCells]
-unset -f _of_insideCells 2>/dev/null
-_of_insideCells() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_insideCells insideCells
-
-
-# [interCondensatingEvaporatingFoam]
-unset -f _of_interCondensatingEvaporatingFoam 2>/dev/null
-_of_interCondensatingEvaporatingFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_interCondensatingEvaporatingFoam interCondensatingEvaporatingFoam
-
-
-# [interDyMFoam]
-unset -f _of_interDyMFoam 2>/dev/null
-_of_interDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_interDyMFoam interDyMFoam
-
-
-# [interFoam]
-unset -f _of_interFoam 2>/dev/null
-_of_interFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_interFoam interFoam
-
-
-# [interIsoFoam]
-unset -f _of_interIsoFoam 2>/dev/null
-_of_interIsoFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_interIsoFoam interIsoFoam
-
-
-# [interMixingFoam]
-unset -f _of_interMixingFoam 2>/dev/null
-_of_interMixingFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_interMixingFoam interMixingFoam
-
-
-# [interPhaseChangeDyMFoam]
-unset -f _of_interPhaseChangeDyMFoam 2>/dev/null
-_of_interPhaseChangeDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_interPhaseChangeDyMFoam interPhaseChangeDyMFoam
-
-
-# [interPhaseChangeFoam]
-unset -f _of_interPhaseChangeFoam 2>/dev/null
-_of_interPhaseChangeFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_interPhaseChangeFoam interPhaseChangeFoam
-
-
-# [kivaToFoam]
-unset -f _of_kivaToFoam 2>/dev/null
-_of_kivaToFoam() {
-    _of_complete_ "$@" \
-    "-case -file -version -zHeadMin" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_kivaToFoam kivaToFoam
-
-
-# [laplacianFoam]
-unset -f _of_laplacianFoam 2>/dev/null
-_of_laplacianFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_laplacianFoam laplacianFoam
-
-
-# [lumpedPointForces]
-unset -f _of_lumpedPointForces 2>/dev/null
-_of_lumpedPointForces() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots -time" \
-    "-constant -latestTime -newTimes -noZero -parallel -vtk -srcDoc -doc -help"
-}
-complete -o filenames -F _of_lumpedPointForces lumpedPointForces
-
-
-# [lumpedPointMovement]
-unset -f _of_lumpedPointMovement 2>/dev/null
-_of_lumpedPointMovement() {
-    _of_complete_ "$@" \
-    "-case -max -scale -span" \
-    "-removeLock -slave -srcDoc -doc -help"
-}
-complete -o filenames -F _of_lumpedPointMovement lumpedPointMovement
-
-
-# [lumpedPointZones]
-unset -f _of_lumpedPointZones 2>/dev/null
-_of_lumpedPointZones() {
-    _of_complete_ "$@" \
-    "-case -region" \
-    "-verbose -srcDoc -doc -help"
-}
-complete -o filenames -F _of_lumpedPointZones lumpedPointZones
-
-
-# [magneticFoam]
-unset -f _of_magneticFoam 2>/dev/null
-_of_magneticFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noB -noFunctionObjects -noH -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_magneticFoam magneticFoam
-
-
-# [mapFields]
-unset -f _of_mapFields 2>/dev/null
-_of_mapFields() {
-    _of_complete_ "$@" \
-    "-case -mapMethod -sourceDecomposeParDict -sourceRegion -sourceTime -targetDecomposeParDict -targetRegion" \
-    "-consistent -noFunctionObjects -parallelSource -parallelTarget -subtract -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mapFields mapFields
-
-
-# [mapFieldsPar]
-unset -f _of_mapFieldsPar 2>/dev/null
-_of_mapFieldsPar() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -fields -mapMethod -patchMapMethod -roots -sourceRegion -sourceTime -targetRegion" \
-    "-consistent -noFunctionObjects -noLagrangian -parallel -subtract -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mapFieldsPar mapFieldsPar
-
-
-# [mdEquilibrationFoam]
-unset -f _of_mdEquilibrationFoam 2>/dev/null
-_of_mdEquilibrationFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mdEquilibrationFoam mdEquilibrationFoam
-
-
-# [mdFoam]
-unset -f _of_mdFoam 2>/dev/null
-_of_mdFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mdFoam mdFoam
-
-
-# [mdInitialise]
-unset -f _of_mdInitialise 2>/dev/null
-_of_mdInitialise() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mdInitialise mdInitialise
-
-
-# [mergeMeshes]
-unset -f _of_mergeMeshes 2>/dev/null
-_of_mergeMeshes() {
-    _of_complete_ "$@" \
-    "-addRegion -case -decomposeParDict -masterRegion -roots" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mergeMeshes mergeMeshes
-
-
-# [mergeOrSplitBaffles]
-unset -f _of_mergeOrSplitBaffles 2>/dev/null
-_of_mergeOrSplitBaffles() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -region -roots" \
-    "-detectOnly -noFunctionObjects -overwrite -parallel -split -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mergeOrSplitBaffles mergeOrSplitBaffles
-
-
-# [mhdFoam]
-unset -f _of_mhdFoam 2>/dev/null
-_of_mhdFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mhdFoam mhdFoam
-
-
-# [mirrorMesh]
-unset -f _of_mirrorMesh 2>/dev/null
-_of_mirrorMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mirrorMesh mirrorMesh
-
-
-# [mixtureAdiabaticFlameT]
-unset -f _of_mixtureAdiabaticFlameT 2>/dev/null
-_of_mixtureAdiabaticFlameT() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-srcDoc -doc -help"
-}
-complete -o filenames -F _of_mixtureAdiabaticFlameT mixtureAdiabaticFlameT
-
-
-# [modifyMesh]
-unset -f _of_modifyMesh 2>/dev/null
-_of_modifyMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_modifyMesh modifyMesh
-
-
-# [moveDynamicMesh]
-unset -f _of_moveDynamicMesh 2>/dev/null
-_of_moveDynamicMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots" \
-    "-checkAMI -noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_moveDynamicMesh moveDynamicMesh
-
-
-# [moveEngineMesh]
-unset -f _of_moveEngineMesh 2>/dev/null
-_of_moveEngineMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_moveEngineMesh moveEngineMesh
-
-
-# [moveMesh]
-unset -f _of_moveMesh 2>/dev/null
-_of_moveMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_moveMesh moveMesh
-
-
-# [MPPICDyMFoam]
-unset -f _of_MPPICDyMFoam 2>/dev/null
-_of_MPPICDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -cloudName -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_MPPICDyMFoam MPPICDyMFoam
-
-
-# [MPPICFoam]
-unset -f _of_MPPICFoam 2>/dev/null
-_of_MPPICFoam() {
-    _of_complete_ "$@" \
-    "-case -cloud -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_MPPICFoam MPPICFoam
-
-
-# [MPPICInterFoam]
-unset -f _of_MPPICInterFoam 2>/dev/null
-_of_MPPICInterFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_MPPICInterFoam MPPICInterFoam
-
-
-# [mshToFoam]
-unset -f _of_mshToFoam 2>/dev/null
-_of_mshToFoam() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-hex -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_mshToFoam mshToFoam
-
-
-# [multiphaseEulerFoam]
-unset -f _of_multiphaseEulerFoam 2>/dev/null
-_of_multiphaseEulerFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_multiphaseEulerFoam multiphaseEulerFoam
-
-
-# [multiphaseInterDyMFoam]
-unset -f _of_multiphaseInterDyMFoam 2>/dev/null
-_of_multiphaseInterDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_multiphaseInterDyMFoam multiphaseInterDyMFoam
-
-
-# [multiphaseInterFoam]
-unset -f _of_multiphaseInterFoam 2>/dev/null
-_of_multiphaseInterFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_multiphaseInterFoam multiphaseInterFoam
-
-
-# [netgenNeutralToFoam]
-unset -f _of_netgenNeutralToFoam 2>/dev/null
-_of_netgenNeutralToFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_netgenNeutralToFoam netgenNeutralToFoam
-
-
-# [noise]
-unset -f _of_noise 2>/dev/null
-_of_noise() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_noise noise
-
-
-# [nonNewtonianIcoFoam]
-unset -f _of_nonNewtonianIcoFoam 2>/dev/null
-_of_nonNewtonianIcoFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_nonNewtonianIcoFoam nonNewtonianIcoFoam
-
-
-# [objToVTK]
-unset -f _of_objToVTK 2>/dev/null
-_of_objToVTK() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_objToVTK objToVTK
-
-
-# [orientFaceZone]
-unset -f _of_orientFaceZone 2>/dev/null
-_of_orientFaceZone() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_orientFaceZone orientFaceZone
-
-
-# [overInterDyMFoam]
-unset -f _of_overInterDyMFoam 2>/dev/null
-_of_overInterDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_overInterDyMFoam overInterDyMFoam
-
-
-# [overLaplacianDyMFoam]
-unset -f _of_overLaplacianDyMFoam 2>/dev/null
-_of_overLaplacianDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_overLaplacianDyMFoam overLaplacianDyMFoam
-
-
-# [overPimpleDyMFoam]
-unset -f _of_overPimpleDyMFoam 2>/dev/null
-_of_overPimpleDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_overPimpleDyMFoam overPimpleDyMFoam
-
-
-# [overRhoPimpleDyMFoam]
-unset -f _of_overRhoPimpleDyMFoam 2>/dev/null
-_of_overRhoPimpleDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_overRhoPimpleDyMFoam overRhoPimpleDyMFoam
-
-
-# [overSimpleFoam]
-unset -f _of_overSimpleFoam 2>/dev/null
-_of_overSimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_overSimpleFoam overSimpleFoam
-
-
-# [particleTracks]
-unset -f _of_particleTracks 2>/dev/null
-_of_particleTracks() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_particleTracks particleTracks
-
-
-# [patchSummary]
-unset -f _of_patchSummary 2>/dev/null
-_of_patchSummary() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots -time" \
-    "-constant -expand -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_patchSummary patchSummary
-
-
-# [pdfPlot]
-unset -f _of_pdfPlot 2>/dev/null
-_of_pdfPlot() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_pdfPlot pdfPlot
-
-
-# [PDRFoam]
-unset -f _of_PDRFoam 2>/dev/null
-_of_PDRFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_PDRFoam PDRFoam
-
-
-# [PDRMesh]
-unset -f _of_PDRMesh 2>/dev/null
-_of_PDRMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_PDRMesh PDRMesh
-
-
-# [pimpleDyMFoam]
-unset -f _of_pimpleDyMFoam 2>/dev/null
-_of_pimpleDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_pimpleDyMFoam pimpleDyMFoam
-
-
-# [pimpleFoam]
-unset -f _of_pimpleFoam 2>/dev/null
-_of_pimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_pimpleFoam pimpleFoam
-
-
-# [pisoFoam]
-unset -f _of_pisoFoam 2>/dev/null
-_of_pisoFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_pisoFoam pisoFoam
-
-
-# [plot3dToFoam]
-unset -f _of_plot3dToFoam 2>/dev/null
-_of_plot3dToFoam() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-noBlank -noFunctionObjects -singleBlock -srcDoc -doc -help"
-}
-complete -o filenames -F _of_plot3dToFoam plot3dToFoam
-
-
-# [polyDualMesh]
-unset -f _of_polyDualMesh 2>/dev/null
-_of_polyDualMesh() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-concaveMultiCells -doNotPreserveFaceZones -noFunctionObjects -overwrite -splitAllFaces -srcDoc -doc -help"
-}
-complete -o filenames -F _of_polyDualMesh polyDualMesh
-
-
-# [porousSimpleFoam]
-unset -f _of_porousSimpleFoam 2>/dev/null
-_of_porousSimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_porousSimpleFoam porousSimpleFoam
-
-
-# [postChannel]
-unset -f _of_postChannel 2>/dev/null
-_of_postChannel() {
-    _of_complete_ "$@" \
-    "-case -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_postChannel postChannel
-
-
-# [postProcess]
-unset -f _of_postProcess 2>/dev/null
-_of_postProcess() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -field -fields -func -funcs -region -roots -time" \
-    "-constant -latestTime -list -newTimes -noFunctionObjects -noZero -parallel -profiling -srcDoc -doc -help"
-}
-complete -o filenames -F _of_postProcess postProcess
-
-
-# [potentialFoam]
-unset -f _of_potentialFoam 2>/dev/null
-_of_potentialFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -pName -roots" \
-    "-initialiseUBCs -noFunctionObjects -parallel -withFunctionObjects -writePhi -writep -srcDoc -doc -help"
-}
-complete -o filenames -F _of_potentialFoam potentialFoam
-
-
-# [potentialFreeSurfaceDyMFoam]
-unset -f _of_potentialFreeSurfaceDyMFoam 2>/dev/null
-_of_potentialFreeSurfaceDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_potentialFreeSurfaceDyMFoam potentialFreeSurfaceDyMFoam
-
-
-# [potentialFreeSurfaceFoam]
-unset -f _of_potentialFreeSurfaceFoam 2>/dev/null
-_of_potentialFreeSurfaceFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_potentialFreeSurfaceFoam potentialFreeSurfaceFoam
-
-
-# [reactingFoam]
-unset -f _of_reactingFoam 2>/dev/null
-_of_reactingFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_reactingFoam reactingFoam
-
-
-# [reactingMultiphaseEulerFoam]
-unset -f _of_reactingMultiphaseEulerFoam 2>/dev/null
-_of_reactingMultiphaseEulerFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_reactingMultiphaseEulerFoam reactingMultiphaseEulerFoam
-
-
-# [reactingParcelFilmFoam]
-unset -f _of_reactingParcelFilmFoam 2>/dev/null
-_of_reactingParcelFilmFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_reactingParcelFilmFoam reactingParcelFilmFoam
-
-
-# [reactingParcelFoam]
-unset -f _of_reactingParcelFoam 2>/dev/null
-_of_reactingParcelFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_reactingParcelFoam reactingParcelFoam
-
-
-# [reactingTwoPhaseEulerFoam]
-unset -f _of_reactingTwoPhaseEulerFoam 2>/dev/null
-_of_reactingTwoPhaseEulerFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_reactingTwoPhaseEulerFoam reactingTwoPhaseEulerFoam
-
-
-# [reconstructPar]
-unset -f _of_reconstructPar 2>/dev/null
-_of_reconstructPar() {
-    _of_complete_ "$@" \
-    "-case -fields -lagrangianFields -region -time" \
-    "-allRegions -constant -latestTime -newTimes -noFields -noFunctionObjects -noLagrangian -noSets -noZero -withZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_reconstructPar reconstructPar
-
-
-# [reconstructParMesh]
-unset -f _of_reconstructParMesh 2>/dev/null
-_of_reconstructParMesh() {
-    _of_complete_ "$@" \
-    "-case -mergeTol -region -time" \
-    "-cellDist -constant -fullMatch -latestTime -newTimes -noFunctionObjects -noZero -withZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_reconstructParMesh reconstructParMesh
-
-
-# [redistributePar]
-unset -f _of_redistributePar 2>/dev/null
-_of_redistributePar() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -mergeTol -region -roots -time" \
-    "-cellDist -constant -decompose -latestTime -newTimes -noFunctionObjects -noZero -overwrite -parallel -reconstruct -withZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_redistributePar redistributePar
-
-
-# [refineHexMesh]
-unset -f _of_refineHexMesh 2>/dev/null
-_of_refineHexMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots" \
-    "-minSet -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_refineHexMesh refineHexMesh
-
-
-# [refinementLevel]
-unset -f _of_refinementLevel 2>/dev/null
-_of_refinementLevel() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -readLevel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_refinementLevel refinementLevel
-
-
-# [refineMesh]
-unset -f _of_refineMesh 2>/dev/null
-_of_refineMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -region -roots" \
-    "-all -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_refineMesh refineMesh
-
-
-# [refineWallLayer]
-unset -f _of_refineWallLayer 2>/dev/null
-_of_refineWallLayer() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots -useSet" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_refineWallLayer refineWallLayer
-
-
-# [removeFaces]
-unset -f _of_removeFaces 2>/dev/null
-_of_removeFaces() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_removeFaces removeFaces
-
-
-# [renumberMesh]
-unset -f _of_renumberMesh 2>/dev/null
-_of_renumberMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -region -roots -time" \
-    "-constant -frontWidth -latestTime -noFunctionObjects -noZero -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_renumberMesh renumberMesh
-
-
-# [rhoCentralDyMFoam]
-unset -f _of_rhoCentralDyMFoam 2>/dev/null
-_of_rhoCentralDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rhoCentralDyMFoam rhoCentralDyMFoam
-
-
-# [rhoCentralFoam]
-unset -f _of_rhoCentralFoam 2>/dev/null
-_of_rhoCentralFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rhoCentralFoam rhoCentralFoam
-
-
-# [rhoPimpleAdiabaticFoam]
-unset -f _of_rhoPimpleAdiabaticFoam 2>/dev/null
-_of_rhoPimpleAdiabaticFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rhoPimpleAdiabaticFoam rhoPimpleAdiabaticFoam
-
-
-# [rhoPimpleDyMFoam]
-unset -f _of_rhoPimpleDyMFoam 2>/dev/null
-_of_rhoPimpleDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rhoPimpleDyMFoam rhoPimpleDyMFoam
-
-
-# [rhoPimpleFoam]
-unset -f _of_rhoPimpleFoam 2>/dev/null
-_of_rhoPimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rhoPimpleFoam rhoPimpleFoam
-
-
-# [rhoPorousSimpleFoam]
-unset -f _of_rhoPorousSimpleFoam 2>/dev/null
-_of_rhoPorousSimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rhoPorousSimpleFoam rhoPorousSimpleFoam
-
-
-# [rhoReactingBuoyantFoam]
-unset -f _of_rhoReactingBuoyantFoam 2>/dev/null
-_of_rhoReactingBuoyantFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rhoReactingBuoyantFoam rhoReactingBuoyantFoam
-
-
-# [rhoReactingFoam]
-unset -f _of_rhoReactingFoam 2>/dev/null
-_of_rhoReactingFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rhoReactingFoam rhoReactingFoam
-
-
-# [rhoSimpleFoam]
-unset -f _of_rhoSimpleFoam 2>/dev/null
-_of_rhoSimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rhoSimpleFoam rhoSimpleFoam
-
-
-# [rotateMesh]
-unset -f _of_rotateMesh 2>/dev/null
-_of_rotateMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_rotateMesh rotateMesh
-
-
-# [scalarTransportFoam]
-unset -f _of_scalarTransportFoam 2>/dev/null
-_of_scalarTransportFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_scalarTransportFoam scalarTransportFoam
-
-
-# [selectCells]
-unset -f _of_selectCells 2>/dev/null
-_of_selectCells() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_selectCells selectCells
-
-
-# [setAlphaField]
-unset -f _of_setAlphaField 2>/dev/null
-_of_setAlphaField() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_setAlphaField setAlphaField
-
-
-# [setFields]
-unset -f _of_setFields 2>/dev/null
-_of_setFields() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -region -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_setFields setFields
-
-
-# [setSet]
-unset -f _of_setSet 2>/dev/null
-_of_setSet() {
-    _of_complete_ "$@" \
-    "-batch -case -decomposeParDict -region -roots -time" \
-    "-constant -latestTime -loop -newTimes -noFunctionObjects -noSync -noVTK -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_setSet setSet
-
-
-# [setsToZones]
-unset -f _of_setsToZones 2>/dev/null
-_of_setsToZones() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots -time" \
-    "-constant -latestTime -newTimes -noFlipMap -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_setsToZones setsToZones
-
-
-# [shallowWaterFoam]
-unset -f _of_shallowWaterFoam 2>/dev/null
-_of_shallowWaterFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_shallowWaterFoam shallowWaterFoam
-
-
-# [simpleCoalParcelFoam]
-unset -f _of_simpleCoalParcelFoam 2>/dev/null
-_of_simpleCoalParcelFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_simpleCoalParcelFoam simpleCoalParcelFoam
-
-
-# [simpleFoam]
-unset -f _of_simpleFoam 2>/dev/null
-_of_simpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_simpleFoam simpleFoam
-
-
-# [simpleReactingParcelFoam]
-unset -f _of_simpleReactingParcelFoam 2>/dev/null
-_of_simpleReactingParcelFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_simpleReactingParcelFoam simpleReactingParcelFoam
-
-
-# [singleCellMesh]
-unset -f _of_singleCellMesh 2>/dev/null
-_of_singleCellMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_singleCellMesh singleCellMesh
-
-
-# [smapToFoam]
-unset -f _of_smapToFoam 2>/dev/null
-_of_smapToFoam() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_smapToFoam smapToFoam
-
-
-# [snappyHexMesh]
-unset -f _of_snappyHexMesh 2>/dev/null
-_of_snappyHexMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -outFile -patches -region -roots -surfaceSimplify" \
-    "-checkGeometry -noFunctionObjects -overwrite -parallel -profiling -srcDoc -doc -help"
-}
-complete -o filenames -F _of_snappyHexMesh snappyHexMesh
-
-
-# [snappyRefineMesh]
-unset -f _of_snappyRefineMesh 2>/dev/null
-_of_snappyRefineMesh() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_snappyRefineMesh snappyRefineMesh
-
-
-# [solidDisplacementFoam]
-unset -f _of_solidDisplacementFoam 2>/dev/null
-_of_solidDisplacementFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_solidDisplacementFoam solidDisplacementFoam
-
-
-# [solidEquilibriumDisplacementFoam]
-unset -f _of_solidEquilibriumDisplacementFoam 2>/dev/null
-_of_solidEquilibriumDisplacementFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_solidEquilibriumDisplacementFoam solidEquilibriumDisplacementFoam
-
-
-# [sonicDyMFoam]
-unset -f _of_sonicDyMFoam 2>/dev/null
-_of_sonicDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_sonicDyMFoam sonicDyMFoam
-
-
-# [sonicFoam]
-unset -f _of_sonicFoam 2>/dev/null
-_of_sonicFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_sonicFoam sonicFoam
-
-
-# [sonicLiquidFoam]
-unset -f _of_sonicLiquidFoam 2>/dev/null
-_of_sonicLiquidFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_sonicLiquidFoam sonicLiquidFoam
-
-
-# [splitCells]
-unset -f _of_splitCells 2>/dev/null
-_of_splitCells() {
-    _of_complete_ "$@" \
-    "-case -set -tol" \
-    "-geometry -noFunctionObjects -overwrite -srcDoc -doc -help"
-}
-complete -o filenames -F _of_splitCells splitCells
-
-
-# [splitMesh]
-unset -f _of_splitMesh 2>/dev/null
-_of_splitMesh() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -overwrite -srcDoc -doc -help"
-}
-complete -o filenames -F _of_splitMesh splitMesh
-
-
-# [splitMeshRegions]
-unset -f _of_splitMeshRegions 2>/dev/null
-_of_splitMeshRegions() {
-    _of_complete_ "$@" \
-    "-blockedFaces -case -cellZonesFileOnly -decomposeParDict -insidePoint -region -roots" \
-    "-cellZones -cellZonesOnly -detectOnly -largestOnly -makeCellZones -noFunctionObjects -overwrite -parallel -prefixRegion -sloppyCellZones -useFaceZones -srcDoc -doc -help"
-}
-complete -o filenames -F _of_splitMeshRegions splitMeshRegions
-
-
-# [sprayDyMFoam]
-unset -f _of_sprayDyMFoam 2>/dev/null
-_of_sprayDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_sprayDyMFoam sprayDyMFoam
-
-
-# [sprayEngineFoam]
-unset -f _of_sprayEngineFoam 2>/dev/null
-_of_sprayEngineFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_sprayEngineFoam sprayEngineFoam
-
-
-# [sprayFoam]
-unset -f _of_sprayFoam 2>/dev/null
-_of_sprayFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_sprayFoam sprayFoam
-
-
-# [SRFPimpleFoam]
-unset -f _of_SRFPimpleFoam 2>/dev/null
-_of_SRFPimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_SRFPimpleFoam SRFPimpleFoam
-
-
-# [SRFSimpleFoam]
-unset -f _of_SRFSimpleFoam 2>/dev/null
-_of_SRFSimpleFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_SRFSimpleFoam SRFSimpleFoam
-
-
-# [star4ToFoam]
-unset -f _of_star4ToFoam 2>/dev/null
-_of_star4ToFoam() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-ascii -noFunctionObjects -solids -srcDoc -doc -help"
-}
-complete -o filenames -F _of_star4ToFoam star4ToFoam
-
-
-# [steadyParticleTracks]
-unset -f _of_steadyParticleTracks 2>/dev/null
-_of_steadyParticleTracks() {
-    _of_complete_ "$@" \
-    "-case -dict -region -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help"
-}
-complete -o filenames -F _of_steadyParticleTracks steadyParticleTracks
-
-
-# [stitchMesh]
-unset -f _of_stitchMesh 2>/dev/null
-_of_stitchMesh() {
-    _of_complete_ "$@" \
-    "-case -region -toleranceDict" \
-    "-noFunctionObjects -overwrite -partial -perfect -srcDoc -doc -help"
-}
-complete -o filenames -F _of_stitchMesh stitchMesh
-
-
-# [subsetMesh]
-unset -f _of_subsetMesh 2>/dev/null
-_of_subsetMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -patch -patches -region -resultTime -roots" \
-    "-noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_subsetMesh subsetMesh
-
-
-# [surfaceAdd]
-unset -f _of_surfaceAdd 2>/dev/null
-_of_surfaceAdd() {
-    _of_complete_ "$@" \
-    "-case -points" \
-    "-mergeRegions -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceAdd surfaceAdd
-
-
-# [surfaceBooleanFeatures]
-unset -f _of_surfaceBooleanFeatures 2>/dev/null
-_of_surfaceBooleanFeatures() {
-    _of_complete_ "$@" \
-    "-case -trim" \
-    "-invertedSpace -noFunctionObjects -perturb -surf1Baffle -surf2Baffle -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceBooleanFeatures surfaceBooleanFeatures
-
-
-# [surfaceCheck]
-unset -f _of_surfaceCheck 2>/dev/null
-_of_surfaceCheck() {
-    _of_complete_ "$@" \
-    "-case -outputThreshold" \
-    "-blockMesh -checkSelfIntersection -noFunctionObjects -splitNonManifold -verbose -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceCheck surfaceCheck
-
-
-# [surfaceClean]
-unset -f _of_surfaceClean 2>/dev/null
-_of_surfaceClean() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noClean -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceClean surfaceClean
-
-
-# [surfaceCoarsen]
-unset -f _of_surfaceCoarsen 2>/dev/null
-_of_surfaceCoarsen() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceCoarsen surfaceCoarsen
-
-
-# [surfaceConvert]
-unset -f _of_surfaceConvert 2>/dev/null
-_of_surfaceConvert() {
-    _of_complete_ "$@" \
-    "-case -scale -writePrecision" \
-    "-clean -group -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceConvert surfaceConvert
-
-
-# [surfaceFeatureConvert]
-unset -f _of_surfaceFeatureConvert 2>/dev/null
-_of_surfaceFeatureConvert() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceFeatureConvert surfaceFeatureConvert
-
-
-# [surfaceFeatureExtract]
-unset -f _of_surfaceFeatureExtract 2>/dev/null
-_of_surfaceFeatureExtract() {
-    _of_complete_ "$@" \
-    "-case -dict" \
-    "-srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceFeatureExtract surfaceFeatureExtract
-
-
-# [surfaceFind]
-unset -f _of_surfaceFind 2>/dev/null
-_of_surfaceFind() {
-    _of_complete_ "$@" \
-    "-case -x -y -z" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceFind surfaceFind
-
-
-# [surfaceHookUp]
-unset -f _of_surfaceHookUp 2>/dev/null
-_of_surfaceHookUp() {
-    _of_complete_ "$@" \
-    "-case -dict" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceHookUp surfaceHookUp
-
-
-# [surfaceInertia]
-unset -f _of_surfaceInertia 2>/dev/null
-_of_surfaceInertia() {
-    _of_complete_ "$@" \
-    "-case -density -referencePoint" \
-    "-noFunctionObjects -shellProperties -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceInertia surfaceInertia
-
-
-# [surfaceInflate]
-unset -f _of_surfaceInflate 2>/dev/null
-_of_surfaceInflate() {
-    _of_complete_ "$@" \
-    "-case -featureAngle -nSmooth" \
-    "-checkSelfIntersection -debug -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceInflate surfaceInflate
-
-
-# [surfaceLambdaMuSmooth]
-unset -f _of_surfaceLambdaMuSmooth 2>/dev/null
-_of_surfaceLambdaMuSmooth() {
-    _of_complete_ "$@" \
-    "-featureFile" \
-    "-srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceLambdaMuSmooth surfaceLambdaMuSmooth
-
-
-# [surfaceMeshConvert]
-unset -f _of_surfaceMeshConvert 2>/dev/null
-_of_surfaceMeshConvert() {
-    _of_complete_ "$@" \
-    "-case -dict -from -scaleIn -scaleOut -to" \
-    "-clean -noFunctionObjects -tri -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceMeshConvert surfaceMeshConvert
-
-
-# [surfaceMeshConvertTesting]
-unset -f _of_surfaceMeshConvertTesting 2>/dev/null
-_of_surfaceMeshConvertTesting() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-clean -noFunctionObjects -orient -stdout -surfMesh -testModify -triFace -triSurface -unsorted -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceMeshConvertTesting surfaceMeshConvertTesting
-
-
-# [surfaceMeshExport]
-unset -f _of_surfaceMeshExport 2>/dev/null
-_of_surfaceMeshExport() {
-    _of_complete_ "$@" \
-    "-case -dict -from -name -scaleIn -scaleOut -to" \
-    "-clean -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceMeshExport surfaceMeshExport
-
-
-# [surfaceMeshImport]
-unset -f _of_surfaceMeshImport 2>/dev/null
-_of_surfaceMeshImport() {
-    _of_complete_ "$@" \
-    "-case -dict -from -name -scaleIn -scaleOut -to" \
-    "-clean -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceMeshImport surfaceMeshImport
-
-
-# [surfaceMeshInfo]
-unset -f _of_surfaceMeshInfo 2>/dev/null
-_of_surfaceMeshInfo() {
-    _of_complete_ "$@" \
-    "-case -scale" \
-    "-areas -noFunctionObjects -xml -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceMeshInfo surfaceMeshInfo
-
-
-# [surfaceMeshTriangulate]
-unset -f _of_surfaceMeshTriangulate 2>/dev/null
-_of_surfaceMeshTriangulate() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -faceZones -patches -region -roots -time" \
-    "-constant -excludeProcPatches -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceMeshTriangulate surfaceMeshTriangulate
-
-
-# [surfaceOrient]
-unset -f _of_surfaceOrient 2>/dev/null
-_of_surfaceOrient() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-inside -noFunctionObjects -usePierceTest -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceOrient surfaceOrient
-
-
-# [surfacePatch]
-unset -f _of_surfacePatch 2>/dev/null
-_of_surfacePatch() {
-    _of_complete_ "$@" \
-    "-case -dict" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfacePatch surfacePatch
-
-
-# [surfacePointMerge]
-unset -f _of_surfacePointMerge 2>/dev/null
-_of_surfacePointMerge() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfacePointMerge surfacePointMerge
-
-
-# [surfaceRedistributePar]
-unset -f _of_surfaceRedistributePar 2>/dev/null
-_of_surfaceRedistributePar() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-keepNonMapped -noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceRedistributePar surfaceRedistributePar
-
-
-# [surfaceRefineRedGreen]
-unset -f _of_surfaceRefineRedGreen 2>/dev/null
-_of_surfaceRefineRedGreen() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceRefineRedGreen surfaceRefineRedGreen
-
-
-# [surfaceSplitByPatch]
-unset -f _of_surfaceSplitByPatch 2>/dev/null
-_of_surfaceSplitByPatch() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceSplitByPatch surfaceSplitByPatch
-
-
-# [surfaceSplitByTopology]
-unset -f _of_surfaceSplitByTopology 2>/dev/null
-_of_surfaceSplitByTopology() {
-    _of_complete_ "$@" \
-    "" \
-    "-srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceSplitByTopology surfaceSplitByTopology
-
-
-# [surfaceSplitNonManifolds]
-unset -f _of_surfaceSplitNonManifolds 2>/dev/null
-_of_surfaceSplitNonManifolds() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-debug -noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceSplitNonManifolds surfaceSplitNonManifolds
-
-
-# [surfaceSubset]
-unset -f _of_surfaceSubset 2>/dev/null
-_of_surfaceSubset() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceSubset surfaceSubset
-
-
-# [surfaceToPatch]
-unset -f _of_surfaceToPatch 2>/dev/null
-_of_surfaceToPatch() {
-    _of_complete_ "$@" \
-    "-case -faceSet -tol" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceToPatch surfaceToPatch
-
-
-# [surfaceTransformPoints]
-unset -f _of_surfaceTransformPoints 2>/dev/null
-_of_surfaceTransformPoints() {
-    _of_complete_ "$@" \
-    "-case -rollPitchYaw -rotate -scale -translate -yawPitchRoll" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_surfaceTransformPoints surfaceTransformPoints
-
-
-# [temporalInterpolate]
-unset -f _of_temporalInterpolate 2>/dev/null
-_of_temporalInterpolate() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -divisions -fields -interpolationType -region -roots -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_temporalInterpolate temporalInterpolate
-
-
-# [tetgenToFoam]
-unset -f _of_tetgenToFoam 2>/dev/null
-_of_tetgenToFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFaceFile -noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_tetgenToFoam tetgenToFoam
-
-
-# [thermoFoam]
-unset -f _of_thermoFoam 2>/dev/null
-_of_thermoFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_thermoFoam thermoFoam
-
-
-# [topoSet]
-unset -f _of_topoSet 2>/dev/null
-_of_topoSet() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -dict -region -roots -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noSync -noZero -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_topoSet topoSet
-
-
-# [transformPoints]
-unset -f _of_transformPoints 2>/dev/null
-_of_transformPoints() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -rollPitchYaw -roots -rotate -scale -translate -yawPitchRoll" \
-    "-noFunctionObjects -parallel -rotateFields -srcDoc -doc -help"
-}
-complete -o filenames -F _of_transformPoints transformPoints
-
-
-# [twoLiquidMixingFoam]
-unset -f _of_twoLiquidMixingFoam 2>/dev/null
-_of_twoLiquidMixingFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_twoLiquidMixingFoam twoLiquidMixingFoam
-
-
-# [twoPhaseEulerFoam]
-unset -f _of_twoPhaseEulerFoam 2>/dev/null
-_of_twoPhaseEulerFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_twoPhaseEulerFoam twoPhaseEulerFoam
-
-
-# [uncoupledKinematicParcelFoam]
-unset -f _of_uncoupledKinematicParcelFoam 2>/dev/null
-_of_uncoupledKinematicParcelFoam() {
-    _of_complete_ "$@" \
-    "-case -cloud -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_uncoupledKinematicParcelFoam uncoupledKinematicParcelFoam
-
-
-# [viewFactorsGen]
-unset -f _of_viewFactorsGen 2>/dev/null
-_of_viewFactorsGen() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_viewFactorsGen viewFactorsGen
-
-
-# [vtkUnstructuredToFoam]
-unset -f _of_vtkUnstructuredToFoam 2>/dev/null
-_of_vtkUnstructuredToFoam() {
-    _of_complete_ "$@" \
-    "-case" \
-    "-noFunctionObjects -srcDoc -doc -help"
-}
-complete -o filenames -F _of_vtkUnstructuredToFoam vtkUnstructuredToFoam
-
-
-# [wallFunctionTable]
-unset -f _of_wallFunctionTable 2>/dev/null
-_of_wallFunctionTable() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_wallFunctionTable wallFunctionTable
-
-
-# [writeMeshObj]
-unset -f _of_writeMeshObj 2>/dev/null
-_of_writeMeshObj() {
-    _of_complete_ "$@" \
-    "-case -cell -cellSet -decomposeParDict -face -faceSet -point -region -roots -time" \
-    "-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -patchEdges -patchFaces -srcDoc -doc -help"
-}
-complete -o filenames -F _of_writeMeshObj writeMeshObj
-
-
-# [XiDyMFoam]
-unset -f _of_XiDyMFoam 2>/dev/null
-_of_XiDyMFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_XiDyMFoam XiDyMFoam
-
-
-# [XiFoam]
-unset -f _of_XiFoam 2>/dev/null
-_of_XiFoam() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -roots" \
-    "-noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
-}
-complete -o filenames -F _of_XiFoam XiFoam
-
-
-# [zipUpMesh]
-unset -f _of_zipUpMesh 2>/dev/null
-_of_zipUpMesh() {
-    _of_complete_ "$@" \
-    "-case -decomposeParDict -region -roots" \
-    "-noFunctionObjects -parallel -srcDoc -doc -help"
-}
-complete -o filenames -F _of_zipUpMesh zipUpMesh
+#------------------------------------------------------------------------------
+# Intermediate variables (do as last for a clean exit code)
 
+unset cleaned foamOldDirs
 
 #------------------------------------------------------------------------------
diff --git a/etc/config.sh/completion_cache b/etc/config.sh/completion_cache
new file mode 100644
index 0000000000000000000000000000000000000000..942dbe4e466966b337c7d37a8f8068bacdcddef1
--- /dev/null
+++ b/etc/config.sh/completion_cache
@@ -0,0 +1,259 @@
+#----------------------------------*-sh-*--------------------------------------
+# Cached options for bash completion of OpenFOAM applications.
+# These are the values expected by the '_of_complete_' function
+#
+# Recreate with "foamCreateCompletionCache"
+
+# Global associative array (cached options for OpenFOAM applications)
+declare -gA _of_complete_cache_;
+
+# Clear existing cache.
+_of_complete_cache_=()
+
+#------------------------------------------------------------------------------
+_of_complete_cache_[adiabaticFlameT]="-case | -srcDoc -doc -help"
+_of_complete_cache_[adjointShapeOptimizationFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[ansysToFoam]="-case -scale | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[applyBoundaryLayer]="-case -decomposeParDict -region -roots -ybl | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[attachMesh]="-case | -noFunctionObjects -overwrite -srcDoc -doc -help"
+_of_complete_cache_[autoPatch]="-case | -noFunctionObjects -overwrite -srcDoc -doc -help"
+_of_complete_cache_[blockMesh]="-case -dict -region | -blockTopology -noClean -noFunctionObjects -sets -srcDoc -doc -help"
+_of_complete_cache_[boundaryFoam]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[boxTurb]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[buoyantBoussinesqPimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[buoyantBoussinesqSimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[buoyantPimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[buoyantSimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[cavitatingDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[cavitatingFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[cfx4ToFoam]="-case -scale | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[changeDictionary]="-case -decomposeParDict -dict -instance -region -roots -subDict -time | -constant -disablePatchGroups -enableFunctionEntries -latestTime -literalRE -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[checkMesh]="-case -decomposeParDict -region -roots -time -writeFields -writeSets | -allGeometry -allTopology -constant -latestTime -meshQuality -newTimes -noFunctionObjects -noTopology -noZero -parallel -writeAllFields -srcDoc -doc -help"
+_of_complete_cache_[chemFoam]="-case | -noFunctionObjects -postProcess -srcDoc -doc -help"
+_of_complete_cache_[chemkinToFoam]="-case | -newFormat -srcDoc -doc -help"
+_of_complete_cache_[chtMultiRegionFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[chtMultiRegionSimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[coalChemistryFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[coldEngineFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[collapseEdges]="-case -collapseFaceSet -decomposeParDict -dict -roots -time | -collapseFaces -constant -latestTime -newTimes -noFunctionObjects -noZero -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[combinePatchFaces]="-case -concaveAngle -decomposeParDict -roots | -meshQuality -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[compressibleInterDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[compressibleInterFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[compressibleMultiphaseInterFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[createBaffles]="-case -decomposeParDict -dict -region -roots | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[createExternalCoupledPatchGeometry]="-case -commsDir -decomposeParDict -region -regions -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[createPatch]="-case -decomposeParDict -dict -region -roots | -noFunctionObjects -overwrite -parallel -writeObj -srcDoc -doc -help"
+_of_complete_cache_[createZeroDirectory]="-case -decomposeParDict -roots -templateDir | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[datToFoam]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[decomposePar]="-case -decomposeParDict -region -time | -allRegions -cellDist -constant -copyUniform -copyZero -fields -force -ifRequired -latestTime -newTimes -noFunctionObjects -noSets -noZero -srcDoc -doc -help"
+_of_complete_cache_[deformedGeom]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[dnsFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[DPMDyMFoam]="-case -cloudName -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[DPMFoam]="-case -cloud -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[driftFluxFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[dsmcFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[dsmcInitialise]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[electrostaticFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[engineCompRatio]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[engineFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[engineSwirl]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[equilibriumCO]="-case | -srcDoc -doc -help"
+_of_complete_cache_[equilibriumFlameT]="-case | -srcDoc -doc -help"
+_of_complete_cache_[extrude2DMesh]="-case -decomposeParDict -roots | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[extrudeMesh]="-case -decomposeParDict -region -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[extrudeToRegionMesh]="-case -decomposeParDict -dict -region -roots | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[faceAgglomerate]="-case -decomposeParDict -dict -region -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[financialFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[fireFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[fireToFoam]="-case -scale | -ascii -check -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[flattenMesh]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[fluent3DMeshToFoam]="-case -ignoreCellGroups -ignoreFaceGroups -scale | -cubit -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[fluentMeshToFoam]="-case -scale | -noFunctionObjects -writeSets -writeZones -srcDoc -doc -help"
+_of_complete_cache_[foamDataToFluent]="-case -time | -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help"
+_of_complete_cache_[foamDictionary]="-add -case -decomposeParDict -diff -entry -roots -set | -disableFunctionEntries -expand -includes -keywords -noFunctionObjects -parallel -remove -value -srcDoc -doc -help"
+_of_complete_cache_[foamFormatConvert]="-case -decomposeParDict -region -roots -time | -constant -enableFunctionEntries -latestTime -newTimes -noConstant -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[foamHelp]="-case -decomposeParDict -region -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[foamList]="-case -scalarBCs -vectorBCs | -compressibleTurbulenceModels -functionObjects -fvOptions -incompressibleTurbulenceModels -noFunctionObjects -registeredSwitches -switches -unset -srcDoc -doc -help"
+_of_complete_cache_[foamListTimes]="-case -time | -constant -latestTime -newTimes -noFunctionObjects -noZero -processor -rm -withZero -srcDoc -doc -help"
+_of_complete_cache_[foamMeshToFluent]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[foamToEnsight]="-case -cellZone -decomposeParDict -faceZones -fields -name -patches -region -roots -time -width | -ascii -constant -latestTime -newTimes -noFunctionObjects -noLagrangian -noPatches -noZero -nodeValues -parallel -srcDoc -doc -help"
+_of_complete_cache_[foamToEnsightParts]="-case -index -name -time -width | -ascii -constant -latestTime -newTimes -noFunctionObjects -noLagrangian -noMesh -noZero -srcDoc -doc -help"
+_of_complete_cache_[foamToFireMesh]="-case -scale -time | -ascii -constant -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help"
+_of_complete_cache_[foamToGMV]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[foamToStarMesh]="-case -scale -time | -constant -latestTime -newTimes -noBnd -noFunctionObjects -noZero -srcDoc -doc -help"
+_of_complete_cache_[foamToSurface]="-case -scale -time | -constant -latestTime -newTimes -noFunctionObjects -noZero -tri -srcDoc -doc -help"
+_of_complete_cache_[foamToTecplot360]="-case -cellSet -decomposeParDict -excludePatches -faceSet -fields -region -roots -time | -constant -latestTime -nearCellValue -newTimes -noFaceZones -noFunctionObjects -noInternal -noPointValues -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[foamToTetDualMesh]="-case -decomposeParDict -roots -time | -constant -latestTime -noFunctionObjects -noZero -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[foamToVTK]="-case -cellSet -decomposeParDict -excludePatches -faceSet -fields -name -pointSet -region -roots -time | -allPatches -ascii -constant -latestTime -nearCellValue -newTimes -noFaceZones -noFunctionObjects -noInternal -noLagrangian -noLinks -noPointValues -noZero -parallel -poly -surfaceFields -useTimeName -xml -srcDoc -doc -help"
+_of_complete_cache_[foamUpgradeCyclics]="-case -decomposeParDict -region -roots -time | -constant -enableFunctionEntries -latestTime -newTimes -noFunctionObjects -noZero -parallel -test -srcDoc -doc -help"
+_of_complete_cache_[foamyHexMesh]="-case -decomposeParDict -roots | -checkGeometry -conformationOnly -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[foamyQuadMesh]="-case -pointsFile | -noFunctionObjects -overwrite -srcDoc -doc -help"
+_of_complete_cache_[gambitToFoam]="-case -scale | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[gmshToFoam]="-case -region | -keepOrientation -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[icoFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[icoUncoupledKinematicParcelDyMFoam]="-case -cloud -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[icoUncoupledKinematicParcelFoam]="-case -cloud -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[ideasUnvToFoam]="-case | -dump -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[insideCells]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[interCondensatingEvaporatingFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[interDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[interFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[interIsoFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[interMixingFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[interPhaseChangeDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[interPhaseChangeFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[kivaToFoam]="-case -file -version -zHeadMin | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[laplacianFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[lumpedPointForces]="-case -decomposeParDict -region -roots -time | -constant -latestTime -newTimes -noZero -parallel -vtk -srcDoc -doc -help"
+_of_complete_cache_[lumpedPointMovement]="-case -max -scale -span | -removeLock -slave -srcDoc -doc -help"
+_of_complete_cache_[lumpedPointZones]="-case -region | -verbose -srcDoc -doc -help"
+_of_complete_cache_[magneticFoam]="-case -decomposeParDict -roots | -noB -noFunctionObjects -noH -parallel -srcDoc -doc -help"
+_of_complete_cache_[mapFields]="-case -mapMethod -sourceDecomposeParDict -sourceRegion -sourceTime -targetDecomposeParDict -targetRegion | -consistent -noFunctionObjects -parallelSource -parallelTarget -subtract -srcDoc -doc -help"
+_of_complete_cache_[mapFieldsPar]="-case -decomposeParDict -fields -mapMethod -patchMapMethod -roots -sourceRegion -sourceTime -targetRegion | -consistent -noFunctionObjects -noLagrangian -parallel -subtract -srcDoc -doc -help"
+_of_complete_cache_[mdEquilibrationFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[mdFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[mdInitialise]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[mergeMeshes]="-addRegion -case -decomposeParDict -masterRegion -roots | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[mergeOrSplitBaffles]="-case -decomposeParDict -dict -region -roots | -detectOnly -noFunctionObjects -overwrite -parallel -split -srcDoc -doc -help"
+_of_complete_cache_[mhdFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[mirrorMesh]="-case -decomposeParDict -roots | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[mixtureAdiabaticFlameT]="-case | -srcDoc -doc -help"
+_of_complete_cache_[modifyMesh]="-case -decomposeParDict -roots | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[moveDynamicMesh]="-case -decomposeParDict -region -roots | -checkAMI -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[moveEngineMesh]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[moveMesh]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[MPPICDyMFoam]="-case -cloudName -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[MPPICFoam]="-case -cloud -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[MPPICInterFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[mshToFoam]="-case | -hex -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[multiphaseEulerFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[multiphaseInterDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[multiphaseInterFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[netgenNeutralToFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[noise]="-case -decomposeParDict -dict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[nonNewtonianIcoFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[objToVTK]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[orientFaceZone]="-case -decomposeParDict -region -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[overInterDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[overLaplacianDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[overPimpleDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[overRhoPimpleDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[overSimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[particleTracks]="-case -decomposeParDict -region -roots -time | -constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[patchSummary]="-case -decomposeParDict -region -roots -time | -constant -expand -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[pdfPlot]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[PDRFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[PDRMesh]="-case -decomposeParDict -roots | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[pimpleDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[pimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[pisoFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[plot3dToFoam]="-case -scale | -noBlank -noFunctionObjects -singleBlock -srcDoc -doc -help"
+_of_complete_cache_[polyDualMesh]="-case | -concaveMultiCells -doNotPreserveFaceZones -noFunctionObjects -overwrite -splitAllFaces -srcDoc -doc -help"
+_of_complete_cache_[porousSimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[postChannel]="-case -time | -constant -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help"
+_of_complete_cache_[postProcess]="-case -decomposeParDict -dict -field -fields -func -funcs -region -roots -time | -constant -latestTime -list -newTimes -noFunctionObjects -noZero -parallel -profiling -srcDoc -doc -help"
+_of_complete_cache_[potentialFoam]="-case -decomposeParDict -pName -roots | -initialiseUBCs -noFunctionObjects -parallel -withFunctionObjects -writePhi -writep -srcDoc -doc -help"
+_of_complete_cache_[potentialFreeSurfaceDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[potentialFreeSurfaceFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[reactingFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[reactingMultiphaseEulerFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[reactingParcelFilmFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[reactingParcelFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[reactingTwoPhaseEulerFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[reconstructPar]="-case -fields -lagrangianFields -region -time | -allRegions -constant -latestTime -newTimes -noFields -noFunctionObjects -noLagrangian -noSets -noZero -withZero -srcDoc -doc -help"
+_of_complete_cache_[reconstructParMesh]="-case -mergeTol -region -time | -cellDist -constant -fullMatch -latestTime -newTimes -noFunctionObjects -noZero -withZero -srcDoc -doc -help"
+_of_complete_cache_[redistributePar]="-case -decomposeParDict -mergeTol -region -roots -time | -cellDist -constant -decompose -latestTime -newTimes -noFunctionObjects -noZero -overwrite -parallel -reconstruct -withZero -srcDoc -doc -help"
+_of_complete_cache_[refineHexMesh]="-case -decomposeParDict -region -roots | -minSet -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[refinementLevel]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -readLevel -srcDoc -doc -help"
+_of_complete_cache_[refineMesh]="-case -decomposeParDict -dict -region -roots | -all -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[refineWallLayer]="-case -decomposeParDict -roots -useSet | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[removeFaces]="-case -decomposeParDict -roots | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[renumberMesh]="-case -decomposeParDict -dict -region -roots -time | -constant -frontWidth -latestTime -noFunctionObjects -noZero -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[rhoCentralDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[rhoCentralFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[rhoPimpleAdiabaticFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[rhoPimpleDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[rhoPimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[rhoPorousSimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[rhoReactingBuoyantFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[rhoReactingFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[rhoSimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[rotateMesh]="-case -decomposeParDict -roots -time | -constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[scalarTransportFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[selectCells]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[setAlphaField]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[setFields]="-case -decomposeParDict -dict -region -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[setSet]="-batch -case -decomposeParDict -region -roots -time | -constant -latestTime -loop -newTimes -noFunctionObjects -noSync -noVTK -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[setsToZones]="-case -decomposeParDict -region -roots -time | -constant -latestTime -newTimes -noFlipMap -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[shallowWaterFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[simpleCoalParcelFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[simpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[simpleReactingParcelFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[singleCellMesh]="-case -decomposeParDict -roots -time | -constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[smapToFoam]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[snappyHexMesh]="-case -decomposeParDict -dict -outFile -patches -region -roots -surfaceSimplify | -checkGeometry -noFunctionObjects -overwrite -parallel -profiling -srcDoc -doc -help"
+_of_complete_cache_[snappyRefineMesh]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[solidDisplacementFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[solidEquilibriumDisplacementFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[sonicDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[sonicFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[sonicLiquidFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[splitCells]="-case -set -tol | -geometry -noFunctionObjects -overwrite -srcDoc -doc -help"
+_of_complete_cache_[splitMesh]="-case | -noFunctionObjects -overwrite -srcDoc -doc -help"
+_of_complete_cache_[splitMeshRegions]="-blockedFaces -case -cellZonesFileOnly -decomposeParDict -insidePoint -region -roots | -cellZones -cellZonesOnly -detectOnly -largestOnly -makeCellZones -noFunctionObjects -overwrite -parallel -prefixRegion -sloppyCellZones -useFaceZones -srcDoc -doc -help"
+_of_complete_cache_[sprayDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[sprayEngineFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[sprayFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[SRFPimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[SRFSimpleFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[star4ToFoam]="-case -scale | -ascii -noFunctionObjects -solids -srcDoc -doc -help"
+_of_complete_cache_[steadyParticleTracks]="-case -dict -region -time | -constant -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help"
+_of_complete_cache_[stitchMesh]="-case -region -toleranceDict | -noFunctionObjects -overwrite -partial -perfect -srcDoc -doc -help"
+_of_complete_cache_[subsetMesh]="-case -decomposeParDict -patch -patches -region -resultTime -roots | -noFunctionObjects -overwrite -parallel -srcDoc -doc -help"
+_of_complete_cache_[surfaceAdd]="-case -points | -mergeRegions -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceBooleanFeatures]="-case -trim | -invertedSpace -noFunctionObjects -perturb -surf1Baffle -surf2Baffle -srcDoc -doc -help"
+_of_complete_cache_[surfaceCheck]="-case -outputThreshold | -blockMesh -checkSelfIntersection -noFunctionObjects -splitNonManifold -verbose -srcDoc -doc -help"
+_of_complete_cache_[surfaceClean]="-case | -noClean -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceCoarsen]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceConvert]="-case -scale -writePrecision | -clean -group -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceFeatureConvert]="-case -scale | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceFeatureExtract]="-case -dict | -srcDoc -doc -help"
+_of_complete_cache_[surfaceFind]="-case -x -y -z | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceHookUp]="-case -dict | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceInertia]="-case -density -referencePoint | -noFunctionObjects -shellProperties -srcDoc -doc -help"
+_of_complete_cache_[surfaceInflate]="-case -featureAngle -nSmooth | -checkSelfIntersection -debug -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceLambdaMuSmooth]="-featureFile | -srcDoc -doc -help"
+_of_complete_cache_[surfaceMeshConvert]="-case -dict -from -scaleIn -scaleOut -to | -clean -noFunctionObjects -tri -srcDoc -doc -help"
+_of_complete_cache_[surfaceMeshConvertTesting]="-case -scale | -clean -noFunctionObjects -orient -stdout -surfMesh -testModify -triFace -triSurface -unsorted -srcDoc -doc -help"
+_of_complete_cache_[surfaceMeshExport]="-case -dict -from -name -scaleIn -scaleOut -to | -clean -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceMeshImport]="-case -dict -from -name -scaleIn -scaleOut -to | -clean -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceMeshInfo]="-case -scale | -areas -noFunctionObjects -xml -srcDoc -doc -help"
+_of_complete_cache_[surfaceMeshTriangulate]="-case -decomposeParDict -faceZones -patches -region -roots -time | -constant -excludeProcPatches -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[surfaceOrient]="-case | -inside -noFunctionObjects -usePierceTest -srcDoc -doc -help"
+_of_complete_cache_[surfacePatch]="-case -dict | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfacePointMerge]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceRedistributePar]="-case -decomposeParDict -roots | -keepNonMapped -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[surfaceRefineRedGreen]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceSplitByPatch]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceSplitByTopology]=" | -srcDoc -doc -help"
+_of_complete_cache_[surfaceSplitNonManifolds]="-case | -debug -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceSubset]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceToPatch]="-case -faceSet -tol | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[surfaceTransformPoints]="-case -rollPitchYaw -rotate -scale -translate -yawPitchRoll | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[temporalInterpolate]="-case -decomposeParDict -divisions -fields -interpolationType -region -roots -time | -constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[tetgenToFoam]="-case -decomposeParDict -roots | -noFaceFile -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[thermoFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[topoSet]="-case -decomposeParDict -dict -region -roots -time | -constant -latestTime -newTimes -noFunctionObjects -noSync -noZero -parallel -srcDoc -doc -help"
+_of_complete_cache_[transformPoints]="-case -decomposeParDict -region -rollPitchYaw -roots -rotate -scale -translate -yawPitchRoll | -noFunctionObjects -parallel -rotateFields -srcDoc -doc -help"
+_of_complete_cache_[twoLiquidMixingFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[twoPhaseEulerFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[uncoupledKinematicParcelFoam]="-case -cloud -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[viewFactorsGen]="-case -decomposeParDict -region -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[vtkUnstructuredToFoam]="-case | -noFunctionObjects -srcDoc -doc -help"
+_of_complete_cache_[wallFunctionTable]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+_of_complete_cache_[writeMeshObj]="-case -cell -cellSet -decomposeParDict -face -faceSet -point -region -roots -time | -constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -patchEdges -patchFaces -srcDoc -doc -help"
+_of_complete_cache_[XiDyMFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[XiFoam]="-case -decomposeParDict -roots | -noFunctionObjects -parallel -postProcess -srcDoc -doc -help"
+_of_complete_cache_[zipUpMesh]="-case -decomposeParDict -region -roots | -noFunctionObjects -parallel -srcDoc -doc -help"
+
+#------------------------------------------------------------------------------
diff --git a/etc/config.sh/unset b/etc/config.sh/unset
index 74eff071b64922bc79e10b5339541efccd8806a8..fe8b8f18e10267cf5121e0e22c26c3872ad2185d 100644
--- a/etc/config.sh/unset
+++ b/etc/config.sh/unset
@@ -181,16 +181,21 @@ unset -f wmRefresh  2>/dev/null
 unset -f foamVersion 2>/dev/null
 unset -f foamPV     2>/dev/null
 
-# Cleanup bash completions, which look like this:
-#     "complete ... -F _of_APPNAME APPNAME
-# For economy, obtain list first but also remove the 'of_complete_' backend
-foamClean="$(complete 2>/dev/null | sed -n -e 's/complete.*-F _of_.* \(..*\)$/\1/p')"
-for cleaned in $foamClean complete_
+# Remove old completions, which look like
+#     "complete ... -F _of_complete_ APPNAME
+# For economy, obtain list first
+foamOldDirs="$(complete 2>/dev/null | sed -ne 's/^.*-F _of_.* \(..*\)$/\1/p')"
+for cleaned in $foamOldDirs
 do
-    unset -f _of_$cleaned 2>/dev/null
-    complete -r $cleaned  2>/dev/null
+    complete -r $cleaned 2>/dev/null
 done
 
+# Completion functions
+unset -f foamAddCompletion 2>/dev/null
+unset -f _of_complete_  2>/dev/null
+
+# Completion cache
+unset _of_complete_cache_
 
 #------------------------------------------------------------------------------
 # Intermediate variables (do as last for a clean exit code)
diff --git a/src/OSspecific/POSIX/cpuInfo/cpuInfo.C b/src/OSspecific/POSIX/cpuInfo/cpuInfo.C
index ef71120a7470f026686229799b97760aff551028..6dbd6abf4b26869af931987db27be86f23d1abac 100644
--- a/src/OSspecific/POSIX/cpuInfo/cpuInfo.C
+++ b/src/OSspecific/POSIX/cpuInfo/cpuInfo.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2016 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2016-2017 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -24,102 +24,61 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "cpuInfo.H"
-#include "IFstream.H"
 #include "IOstreams.H"
 
+#include <fstream>
+
 // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
 
 // file-scope function
-template<class T>
-inline static void writeEntry
-(
-    Foam::Ostream& os, const Foam::word& key, const T& value
-)
+// split things like "a key word\t: value information"
+// into ("a_key_word", "value information")
+//
+static bool split(const std::string& line, std::string& key, std::string& val)
 {
-    os.writeKeyword(key) << value << Foam::token::END_STATEMENT << '\n';
-}
+    key.clear();
+    val.clear();
 
+    const auto keyLen = line.find_first_of("\t:");
+    const auto sep = line.find(':');
 
-// file-scope function
-static bool split(std::string& line, std::string& key, std::string& val)
-{
-    std::string::size_type sep = line.find(':');
-
-    if (sep == std::string::npos)
+    if (keyLen == std::string::npos || sep == std::string::npos)
     {
         return false;
     }
 
-    std::string::size_type endKey = line.find_last_not_of("\t:", sep);
-    std::string::size_type begVal = line.find_first_not_of(" :", sep);
+    const auto begVal = line.find_first_not_of(" :", sep);
 
-    if (endKey == std::string::npos || begVal == std::string::npos)
+    if (begVal == std::string::npos)
     {
         return false;
     }
-    ++endKey;
-
-    // replace spaces in key with '_' for ease of use/consistency
-    for
-    (
-        std::string::iterator iter = line.begin();
-        iter != line.end();
-        ++iter
-    )
+
+    key = line.substr(0, keyLen);
+    val = line.substr(begVal);
+
+    // Avoid spaces in key - replace with '_'
+    for (auto iter = key.begin(); iter < key.end(); ++iter)
     {
         if (*iter == ' ')
         {
             *iter = '_';
         }
-        else if (*iter == ':')
-        {
-            break;
-        }
     }
 
-    key = line.substr(0, endKey);
-    val = line.substr(begVal);
-
-    // std::cerr<<"key=" << key << " val= " << val << '\n';
+    // std::cerr<<"key=<" << key << "> val=<" << val << ">\n";
 
     return true;
 }
 
 
-// file-scope function - get int
-static inline bool getInt(const std::string& str, int& val)
-{
-    int i;
-    if (sscanf(str.c_str(), "%d", &i) == 1)
-    {
-        val = i;
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
-// file-scope function - get float
-static inline bool getFlt(const std::string& str, float& val)
-{
-    float f;
-    if (sscanf(str.c_str(), "%f", &f) == 1)
-    {
-        val = f;
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
-
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
-// parse this type of content:
+// Parse the following type of content.
+// A TAB separates the keyword from content. Eg,
+//
+// "cpu cores\t: 6"
+//
 // ===========================
 // processor       : 0
 // vendor_id       : GenuineIntel
@@ -151,14 +110,14 @@ static inline bool getFlt(const std::string& str, float& val)
 void Foam::cpuInfo::parse()
 {
     int ncpu = 0;
+    std::string line, key, val;
 
-    IFstream is("/proc/cpuinfo");
+    std::ifstream is("/proc/cpuinfo");
     while (is.good())
     {
-        string line, key, value;
-        is.getLine(line);
+        std::getline(is, line);
 
-        if (!split(line, key, value))
+        if (!split(line, key, val))
         {
             continue;
         }
@@ -170,13 +129,13 @@ void Foam::cpuInfo::parse()
                 break; // stop after the first cpu
             }
         }
-        else if (key == "vendor_id")   { vendor_id  = value;        }
-        else if (key == "model_name")  { model_name = value;        }
-        else if (key == "cpu_family")  { getInt(value, cpu_family); }
-        else if (key == "model")       { getInt(value, model);      }
-        else if (key == "cpu_MHz")     { getFlt(value, cpu_MHz);    }
-        else if (key == "cpu_cores")   { getInt(value, cpu_cores);  }
-        else if (key == "siblings")    { getInt(value, siblings);   }
+        else if (key == "vendor_id")   { vendor_id  = val; }
+        else if (key == "model_name")  { model_name = val; }
+        else if (key == "cpu_family")  { cpu_family = std::stoi(val); }
+        else if (key == "model")       { model = std::stoi(val); }
+        else if (key == "cpu_MHz")     { cpu_MHz = std::stof(val); }
+        else if (key == "cpu_cores")   { cpu_cores = std::stoi(val);  }
+        else if (key == "siblings")    { siblings = std::stoi(val); }
     }
 }
 
@@ -209,31 +168,31 @@ void Foam::cpuInfo::write(Ostream& os) const
 {
     if (!vendor_id.empty())
     {
-        writeEntry(os, "vendor_id",     vendor_id);
+        os.writeEntry("vendor_id", vendor_id);
     }
     if (!model_name.empty())
     {
-        writeEntry(os, "model_name",    model_name);
+        os.writeEntry("model_name", model_name);
     }
     if (cpu_family != -1)
     {
-        writeEntry(os, "cpu_family",    cpu_family);
+        os.writeEntry("cpu_family", cpu_family);
     }
     if (model != -1)
     {
-        writeEntry(os, "model",         model);
+        os.writeEntry("model", model);
     }
     if (cpu_MHz > 0)
     {
-        writeEntry(os, "cpu_MHz",       cpu_MHz);
+        os.writeEntry("cpu_MHz", cpu_MHz);
     }
     if (cpu_cores > 0)
     {
-        writeEntry(os, "cpu_cores",     cpu_cores);
+        os.writeEntry("cpu_cores", cpu_cores);
     }
     if (siblings > 0)
     {
-        writeEntry(os, "siblings",      siblings);
+        os.writeEntry("siblings", siblings);
     }
 }
 
diff --git a/src/OSspecific/POSIX/cpuInfo/cpuInfo.H b/src/OSspecific/POSIX/cpuInfo/cpuInfo.H
index 6821684f615d56a9e6a9a0f0915d7d5e088eb0a7..721e2f52bae901652dc11e728cf66aad5b45d680 100644
--- a/src/OSspecific/POSIX/cpuInfo/cpuInfo.H
+++ b/src/OSspecific/POSIX/cpuInfo/cpuInfo.H
@@ -47,7 +47,8 @@ SourceFiles
 
 namespace Foam
 {
-// forward declarations
+
+// Forward declarations
 class Ostream;
 
 /*---------------------------------------------------------------------------*\
@@ -68,6 +69,7 @@ class cpuInfo
         int siblings;
         int cpu_cores;
 
+
     // Private Member Functions
 
         //- Parse /proc/cpuinfo
@@ -83,7 +85,7 @@ public:
 
     // Constructors
 
-        //- Construct null
+        //- Construct and populate with information
         cpuInfo();
 
 
@@ -94,7 +96,7 @@ public:
     // Member Functions
 
         //- Write content as dictionary entries
-        void write(Ostream&) const;
+        void write(Ostream& os) const;
 
 };
 
diff --git a/src/OSspecific/POSIX/memInfo/memInfo.C b/src/OSspecific/POSIX/memInfo/memInfo.C
index c0ff2dd99bf1586172f43df8789575339c84e018..ab27f706ce38df7da0bebfb800f3fe8d5ddda2be 100644
--- a/src/OSspecific/POSIX/memInfo/memInfo.C
+++ b/src/OSspecific/POSIX/memInfo/memInfo.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2016 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2016-2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -24,21 +24,11 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "memInfo.H"
-#include "IFstream.H"
+#include "OSspecific.H"
 #include "IOstreams.H"
 
-// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
-
-// file-scope function
-template<class T>
-inline static void writeEntry
-(
-    Foam::Ostream& os, const Foam::word& key, const T& value
-)
-{
-    os.writeKeyword(key) << value << Foam::token::END_STATEMENT << '\n';
-}
-
+#include <fstream>
+#include <string>
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
@@ -59,34 +49,64 @@ Foam::memInfo::~memInfo()
 
 
 // * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+//
+// Parse the following type of content.
+//
+// ===========================
+// VmPeak:    15920 kB
+// VmSize:    15916 kB
+// VmLck:         0 kB
+// VmPin:         0 kB
+// VmHWM:      6972 kB
+// VmRSS:      6972 kB
+// VmLib:      2208 kB
+// VmPTE:        52 kB
+// VmPMD:        12 kB
+// VmSwap:        0 kB
 
 const Foam::memInfo& Foam::memInfo::update()
 {
-    // reset to invalid values first
+    // Clear (invalidate) values first
     peak_ = size_ = rss_ = 0;
-    IFstream is("/proc/" + name(pid()) + "/status");
+    std::string line;
+
+    unsigned nKeys = 0;
 
-    while (is.good())
+    std::ifstream is("/proc/" + std::to_string(Foam::pid()) + "/status");
+    while (is.good() && nKeys < 3)  // Stop after getting the known keys
     {
-        string line;
-        is.getLine(line);
-        char tag[32];
-        int value;
+        std::getline(is, line);
+
+        const auto keyLen = line.find(':');
+        if (keyLen == std::string::npos)
+        {
+            continue;
+        }
+
+        // Value is after the ':', but skip any leading whitespace since
+        // strtoi will do it anyhow
+        const auto begVal = line.find_first_not_of("\t :", keyLen);
+        if (begVal == std::string::npos)
+        {
+            continue;
+        }
+
+        const std::string key = line.substr(0, keyLen);
 
-        if (sscanf(line.c_str(), "%30s %d", tag, &value) == 2)
+        if (key == "VmPeak")
+        {
+            peak_ = std::stoi(line.substr(begVal));
+            ++nKeys;
+        }
+        else if (key == "VmSize")
         {
-            if (!strcmp(tag, "VmPeak:"))
-            {
-                peak_ = value;
-            }
-            else if (!strcmp(tag, "VmSize:"))
-            {
-                size_ = value;
-            }
-            else if (!strcmp(tag, "VmRSS:"))
-            {
-                rss_ = value;
-            }
+            size_ = std::stoi(line.substr(begVal));
+            ++nKeys;
+        }
+        else if (key == "VmRSS")
+        {
+            rss_ = std::stoi(line.substr(begVal));
+            ++nKeys;
         }
     }
 
@@ -102,9 +122,9 @@ bool Foam::memInfo::valid() const
 
 void Foam::memInfo::write(Ostream& os) const
 {
-    writeEntry(os, "size",  size_);
-    writeEntry(os, "peak",  peak_);
-    writeEntry(os, "rss",   rss_);
+    os.writeEntry("size", size_);
+    os.writeEntry("peak", peak_);
+    os.writeEntry("rss", rss_);
 }
 
 
@@ -113,9 +133,7 @@ void Foam::memInfo::write(Ostream& os) const
 Foam::Istream& Foam::operator>>(Istream& is, memInfo& m)
 {
     is.readBegin("memInfo");
-
     is  >> m.peak_ >> m.size_ >> m.rss_;
-
     is.readEnd("memInfo");
 
     is.check(FUNCTION_NAME);
diff --git a/src/OSspecific/POSIX/memInfo/memInfo.H b/src/OSspecific/POSIX/memInfo/memInfo.H
index 181da5b7efa95ab0ca38a23a67e6d45fd16bb326..3b7c2eda5916c97f99b7e5d28029e6f53e93d33f 100644
--- a/src/OSspecific/POSIX/memInfo/memInfo.H
+++ b/src/OSspecific/POSIX/memInfo/memInfo.H
@@ -38,27 +38,20 @@ SourceFiles
 #ifndef memInfo_H
 #define memInfo_H
 
-#include "OSspecific.H"
-#include "POSIX.H"
-#include "IFstream.H"
-
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
 
 // Forward declaration of friend functions and operators
-
 class memInfo;
-
-Istream& operator>>(Istream&, memInfo&);
-Ostream& operator<<(Ostream&, const memInfo&);
-
-
-// forward declarations
 class Istream;
 class Ostream;
 
+Istream& operator>>(Istream& is, memInfo& m);
+Ostream& operator<<(Ostream& os, const memInfo& m);
+
+
 /*---------------------------------------------------------------------------*\
                            Class memInfo Declaration
 \*---------------------------------------------------------------------------*/
@@ -76,12 +69,6 @@ class memInfo
         //- Resident set size of the process (VmRSS in /proc/PID/status)
         int rss_;
 
-        //- Disallow default bitwise assignment
-        void operator=(const memInfo&) = delete;
-
-        //- Disallow default copy constructor
-        memInfo(const memInfo&) = delete;
-
 public:
 
     // Constructors
@@ -96,44 +83,47 @@ public:
 
     // Member Functions
 
-        //- Parse /proc/PID/status and update accordingly
+        //- Update according to /proc/PID/status contents
         const memInfo& update();
 
-        // Access
 
-            //- Peak memory (VmPeak in /proc/PID/status) at last update()
-            int peak() const
-            {
-                return peak_;
-            }
+      // Access
+
+        //- Peak memory (VmPeak in /proc/PID/status) at last update()
+        inline int peak() const
+        {
+            return peak_;
+        }
+
+        //- Memory size (VmSize in /proc/PID/status) at last update()
+        inline int size() const
+        {
+            return size_;
+        }
 
-            //- Memory size (VmSize in /proc/PID/status) at last update()
-            int size() const
-            {
-                return size_;
-            }
+        //- Resident set size (VmRSS in /proc/PID/status) at last update()
+        inline int rss() const
+        {
+            return rss_;
+        }
 
-            //- Resident set size (VmRSS in /proc/PID/status) at last update()
-            int rss() const
-            {
-                return rss_;
-            }
+        //- True if the memory information appears valid
+        bool valid() const;
 
-            //- True if the memory information appears valid
-            bool valid() const;
 
+      // Write
 
         //- Write content as dictionary entries
-        void write(Ostream&) const;
+        void write(Ostream& os) const;
 
 
     // IOstream Operators
 
         //- Read peak/size/rss from stream
-        friend Istream& operator>>(Istream&, memInfo&);
+        friend Istream& operator>>(Istream& is, memInfo& m);
 
         //- Write peak/size/rss to stream
-        friend Ostream& operator<<(Ostream&, const memInfo&);
+        friend Ostream& operator<<(Ostream& os, const memInfo& m);
 };
 
 
diff --git a/src/OpenFOAM/db/IOobjectList/IOobjectList.C b/src/OpenFOAM/db/IOobjectList/IOobjectList.C
index 981e5ca2e579dcd38079617c1692c6165fcfa44a..f70f3e7ebfcffc107a5d63d45f43488ffcf6606e 100644
--- a/src/OpenFOAM/db/IOobjectList/IOobjectList.C
+++ b/src/OpenFOAM/db/IOobjectList/IOobjectList.C
@@ -154,14 +154,14 @@ Foam::IOobjectList::IOobjectList
     }
 
     // Create a list of file names in this directory
-    fileNameList objNames =
+    const auto objNames =
         readDir(db.path(newInstance, db.dbDir()/local), fileName::FILE);
 
-    forAll(objNames, i)
+    for (const auto& objName : objNames)
     {
         IOobject* objectPtr = new IOobject
         (
-            objNames[i],
+            objName,
             newInstance,
             local,
             db,
@@ -170,8 +170,23 @@ Foam::IOobjectList::IOobjectList
             registerObject
         );
 
-        // Use object with local scope
-        if (objectPtr->typeHeaderOk<IOList<label>>(false))
+        bool ok = false;
+        const bool throwingIOerr = FatalIOError.throwExceptions();
+
+        try
+        {
+            // Use object with local scope and current instance (no searching)
+            ok = objectPtr->typeHeaderOk<IOList<label>>(false, false);
+        }
+        catch (Foam::IOerror& err)
+        {
+            Warning
+                << err << nl << endl;
+        }
+
+        FatalIOError.throwExceptions(throwingIOerr);
+
+        if (ok)
         {
             insert(objectPtr->name(), objectPtr);
         }
diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.C b/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.C
index 5707d2d5c96d8d87bf14f161984d08735fa38714..333aeca259c72b0a1b8edbc98155725df7aab477 100644
--- a/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.C
+++ b/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.C
@@ -56,8 +56,8 @@ inline void Foam::UIPstream::readFromBuffer(T& t)
 inline void Foam::UIPstream::readFromBuffer
 (
     void* data,
-    size_t count,
-    size_t align
+    const size_t count,
+    const size_t align
 )
 {
     if (align > 1)
@@ -76,6 +76,22 @@ inline void Foam::UIPstream::readFromBuffer
 }
 
 
+inline Foam::Istream& Foam::UIPstream::readStringFromBuffer(std::string& str)
+{
+    size_t len;
+    readFromBuffer(len);
+    // Uses the underlying std::string::operator=()
+    // - no stripInvalid invoked (the sending side should have done that)
+    // - relies on trailing '\0' char (so cannot send anything with an embedded
+    //   nul char)
+    str = &externalBuf_[externalBufPosition_];
+    externalBufPosition_ += len + 1;
+    checkEof();
+
+    return *this;
+}
+
+
 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
 
 Foam::UIPstream::~UIPstream()
@@ -107,7 +123,7 @@ Foam::Istream& Foam::UIPstream::read(token& t)
 
     char c;
 
-    // return on error
+    // Return on error
     if (!read(c))
     {
         t.setBad();
@@ -141,7 +157,7 @@ Foam::Istream& Foam::UIPstream::read(token& t)
         }
 
         // Word
-        case token::WORD :
+        case token::tokenType::WORD :
         {
             word* pval = new word;
             if (read(*pval))
@@ -165,30 +181,26 @@ Foam::Istream& Foam::UIPstream::read(token& t)
         }
 
         // String
-        case token::VERBATIMSTRING :
+        case token::tokenType::VERBATIMSTRING :
         {
             // Recurse to read actual string
             read(t);
-            t.type() = token::VERBATIMSTRING;
+            t.type() = token::tokenType::VERBATIMSTRING;
             return *this;
         }
-        case token::VARIABLE :
+        case token::tokenType::VARIABLE :
         {
             // Recurse to read actual string
             read(t);
-            t.type() = token::VARIABLE;
+            t.type() = token::tokenType::VARIABLE;
             return *this;
         }
-        case token::STRING :
+        case token::tokenType::STRING :
         {
             string* pval = new string;
             if (read(*pval))
             {
                 t = pval;
-                if (c == token::VERBATIMSTRING)
-                {
-                    t.type() = token::VERBATIMSTRING;
-                }
             }
             else
             {
@@ -199,7 +211,7 @@ Foam::Istream& Foam::UIPstream::read(token& t)
         }
 
         // Label
-        case token::LABEL :
+        case token::tokenType::LABEL :
         {
             label val;
             if (read(val))
@@ -214,7 +226,7 @@ Foam::Istream& Foam::UIPstream::read(token& t)
         }
 
         // floatScalar
-        case token::FLOAT_SCALAR :
+        case token::tokenType::FLOAT_SCALAR :
         {
             floatScalar val;
             if (read(val))
@@ -229,7 +241,7 @@ Foam::Istream& Foam::UIPstream::read(token& t)
         }
 
         // doubleScalar
-        case token::DOUBLE_SCALAR :
+        case token::tokenType::DOUBLE_SCALAR :
         {
             doubleScalar val;
             if (read(val))
@@ -272,23 +284,13 @@ Foam::Istream& Foam::UIPstream::read(char& c)
 
 Foam::Istream& Foam::UIPstream::read(word& str)
 {
-    size_t len;
-    readFromBuffer(len);
-    str = &externalBuf_[externalBufPosition_];
-    externalBufPosition_ += len + 1;
-    checkEof();
-    return *this;
+    return readStringFromBuffer(str);
 }
 
 
 Foam::Istream& Foam::UIPstream::read(string& str)
 {
-    size_t len;
-    readFromBuffer(len);
-    str = &externalBuf_[externalBufPosition_];
-    externalBufPosition_ += len + 1;
-    checkEof();
-    return *this;
+    return readStringFromBuffer(str);
 }
 
 
diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.H b/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.H
index b4aefe4446b7978ffa177eedcbea18d38fd0a960..4913693741f8b24e50f858947f6ec90b5943a3bd 100644
--- a/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.H
+++ b/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.H
@@ -80,10 +80,19 @@ class UIPstream
 
         //- Read a T from the transfer buffer
         template<class T>
-        inline void readFromBuffer(T&);
+        inline void readFromBuffer(T& t);
 
-        //- Read data from the transfer buffer
-        inline void readFromBuffer(void* data, size_t count, size_t align);
+        //- Read count bytes of data from the transfer buffer
+        //  using align byte alignment
+        inline void readFromBuffer
+        (
+            void* data,
+            const size_t count,
+            const size_t align
+        );
+
+        //- Read string length and its content.
+        inline Istream& readStringFromBuffer(std::string& str);
 
 
 public:
@@ -139,28 +148,28 @@ public:
             );
 
             //- Return next token from stream
-            Istream& read(token&);
+            Istream& read(token& t);
 
             //- Read a character
-            Istream& read(char&);
+            Istream& read(char& c);
 
             //- Read a word
-            Istream& read(word&);
+            Istream& read(word& str);
 
-            // Read a string (including enclosing double-quotes)
-            Istream& read(string&);
+            // Read a string
+            Istream& read(string& str);
 
             //- Read a label
-            Istream& read(label&);
+            Istream& read(label& val);
 
             //- Read a floatScalar
-            Istream& read(floatScalar&);
+            Istream& read(floatScalar& val);
 
             //- Read a doubleScalar
-            Istream& read(doubleScalar&);
+            Istream& read(doubleScalar& val);
 
-            //- Read binary block
-            Istream& read(char*, std::streamsize);
+            //- Read binary block with 8-byte alignment.
+            Istream& read(char* data, const std::streamsize count);
 
             //- Rewind and return the stream so that it may be read again
             Istream& rewind();
diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/UOPstream.C b/src/OpenFOAM/db/IOstreams/Pstreams/UOPstream.C
index cf53be0f848d3672486ae47f8f73effae8c57de0..6667389b742231d9e691716d6dc487a3503db62a 100644
--- a/src/OpenFOAM/db/IOstreams/Pstreams/UOPstream.C
+++ b/src/OpenFOAM/db/IOstreams/Pstreams/UOPstream.C
@@ -51,8 +51,8 @@ inline void Foam::UOPstream::writeToBuffer(const char& c)
 inline void Foam::UOPstream::writeToBuffer
 (
     const void* data,
-    size_t count,
-    size_t align
+    const size_t count,
+    const size_t align
 )
 {
     if (!sendBuf_.capacity())
@@ -77,6 +77,13 @@ inline void Foam::UOPstream::writeToBuffer
 }
 
 
+inline void Foam::UOPstream::writeStringToBuffer(const std::string& str)
+{
+    const size_t len = str.size();
+    writeToBuffer(len);
+    writeToBuffer(str.c_str(), len + 1, 1);
+}
+
 
 // * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
 
@@ -153,14 +160,14 @@ Foam::UOPstream::~UOPstream()
 Foam::Ostream& Foam::UOPstream::write(const token& t)
 {
     // Raw token output only supported for verbatim strings for now
-    if (t.type() == token::VERBATIMSTRING)
+    if (t.type() == token::tokenType::VERBATIMSTRING)
     {
-        write(char(token::VERBATIMSTRING));
+        writeToBuffer(char(token::tokenType::VERBATIMSTRING));
         write(t.stringToken());
     }
-    else if (t.type() == token::VARIABLE)
+    else if (t.type() == token::tokenType::VARIABLE)
     {
-        write(char(token::VARIABLE));
+        writeToBuffer(char(token::tokenType::VARIABLE));
         write(t.stringToken());
     }
     else
@@ -204,11 +211,8 @@ Foam::Ostream& Foam::UOPstream::write(const char* str)
 
 Foam::Ostream& Foam::UOPstream::write(const word& str)
 {
-    write(char(token::WORD));
-
-    size_t len = str.size();
-    writeToBuffer(len);
-    writeToBuffer(str.c_str(), len + 1, 1);
+    writeToBuffer(char(token::tokenType::WORD));
+    writeStringToBuffer(str);
 
     return *this;
 }
@@ -216,11 +220,8 @@ Foam::Ostream& Foam::UOPstream::write(const word& str)
 
 Foam::Ostream& Foam::UOPstream::write(const string& str)
 {
-    write(char(token::STRING));
-
-    size_t len = str.size();
-    writeToBuffer(len);
-    writeToBuffer(str.c_str(), len + 1, 1);
+    writeToBuffer(char(token::tokenType::STRING));
+    writeStringToBuffer(str);
 
     return *this;
 }
@@ -234,16 +235,13 @@ Foam::Ostream& Foam::UOPstream::writeQuoted
 {
     if (quoted)
     {
-        write(char(token::STRING));
+        writeToBuffer(char(token::tokenType::STRING));
     }
     else
     {
-        write(char(token::WORD));
+        writeToBuffer(char(token::tokenType::WORD));
     }
-
-    size_t len = str.size();
-    writeToBuffer(len);
-    writeToBuffer(str.c_str(), len + 1, 1);
+    writeStringToBuffer(str);
 
     return *this;
 }
@@ -251,7 +249,7 @@ Foam::Ostream& Foam::UOPstream::writeQuoted
 
 Foam::Ostream& Foam::UOPstream::write(const int32_t val)
 {
-    write(char(token::LABEL));
+    writeToBuffer(char(token::tokenType::LABEL));
     writeToBuffer(val);
     return *this;
 }
@@ -259,7 +257,7 @@ Foam::Ostream& Foam::UOPstream::write(const int32_t val)
 
 Foam::Ostream& Foam::UOPstream::write(const int64_t val)
 {
-    write(char(token::LABEL));
+    writeToBuffer(char(token::tokenType::LABEL));
     writeToBuffer(val);
     return *this;
 }
@@ -267,7 +265,7 @@ Foam::Ostream& Foam::UOPstream::write(const int64_t val)
 
 Foam::Ostream& Foam::UOPstream::write(const floatScalar val)
 {
-    write(char(token::FLOAT_SCALAR));
+    writeToBuffer(char(token::tokenType::FLOAT_SCALAR));
     writeToBuffer(val);
     return *this;
 }
@@ -275,13 +273,17 @@ Foam::Ostream& Foam::UOPstream::write(const floatScalar val)
 
 Foam::Ostream& Foam::UOPstream::write(const doubleScalar val)
 {
-    write(char(token::DOUBLE_SCALAR));
+    writeToBuffer(char(token::tokenType::DOUBLE_SCALAR));
     writeToBuffer(val);
     return *this;
 }
 
 
-Foam::Ostream& Foam::UOPstream::write(const char* data, std::streamsize count)
+Foam::Ostream& Foam::UOPstream::write
+(
+    const char* data,
+    const std::streamsize count
+)
 {
     if (format() != BINARY)
     {
diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/UOPstream.H b/src/OpenFOAM/db/IOstreams/Pstreams/UOPstream.H
index 349ac52104aedfaa0775bae53aa7f37463908a1b..6ee40e03781dc5042ca3b36d08bcaa639d425671 100644
--- a/src/OpenFOAM/db/IOstreams/Pstreams/UOPstream.H
+++ b/src/OpenFOAM/db/IOstreams/Pstreams/UOPstream.H
@@ -74,13 +74,23 @@ class UOPstream
 
         //- Write a T to the transfer buffer
         template<class T>
-        inline void writeToBuffer(const T&);
+        inline void writeToBuffer(const T& t);
 
         //- Write a char to the transfer buffer
-        inline void writeToBuffer(const char&);
+        inline void writeToBuffer(const char& c);
 
-        //- Write data to the transfer buffer
-        inline void writeToBuffer(const void* data, size_t count, size_t align);
+        //- Write count bytes of data to the transfer buffer
+        //  using align byte alignment
+        inline void writeToBuffer
+        (
+            const void* data,
+            const size_t count,
+            const size_t align
+        );
+
+        //- Write string length and content.
+        //  The content includes the trailing nul char.
+        inline void writeStringToBuffer(const std::string& str);
 
 
 public:
@@ -102,7 +112,7 @@ public:
         );
 
         //- Construct given buffers
-        UOPstream(const int toProcNo, PstreamBuffers&);
+        UOPstream(const int toProcNo, PstreamBuffers& buffers);
 
 
     //- Destructor
@@ -134,42 +144,43 @@ public:
             );
 
             //- Write next token to stream
-            Ostream& write(const token&);
+            Ostream& write(const token& t);
 
-            //- Write character
-            Ostream& write(const char);
+            //- Write single character. Whitespace is suppressed.
+            Ostream& write(const char c);
 
-            //- Write character string
-            Ostream& write(const char*);
+            //- Write the word-characters of a character string.
+            //  Sends as a single char, or as word.
+            Ostream& write(const char* str);
 
             //- Write word
-            Ostream& write(const word&);
+            Ostream& write(const word& str);
 
             //- Write string
-            Ostream& write(const string&);
+            Ostream& write(const string& str);
 
             //- Write std::string surrounded by quotes.
             //  Optional write without quotes.
             Ostream& writeQuoted
             (
-                const std::string&,
+                const std::string& str,
                 const bool quoted=true
             );
 
-            //- Write int32_t
-            virtual Ostream& write(const int32_t);
+            //- Write int32_t as a label
+            virtual Ostream& write(const int32_t val);
 
-            //- Write int64_t
-            Ostream& write(const int64_t);
+            //- Write int64_t as a label
+            Ostream& write(const int64_t val);
 
             //- Write floatScalar
-            Ostream& write(const floatScalar);
+            Ostream& write(const floatScalar val);
 
             //- Write doubleScalar
-            Ostream& write(const doubleScalar);
+            Ostream& write(const doubleScalar val);
 
-            //- Write binary block
-            Ostream& write(const char*, std::streamsize);
+            //- Write binary block with 8-byte alignment.
+            Ostream& write(const char* data, const std::streamsize count);
 
             //- Add indentation characters
             void indent()
@@ -223,7 +234,7 @@ public:
         // Print
 
             //- Print description of IOstream to Ostream
-            void print(Ostream&) const;
+            void print(Ostream& os) const;
 };
 
 
diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.H b/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.H
index 7e71fc543c211a7d1db8a2305023233b33cf9eb5..0b936c9f7eca40bf373c6d109bfd135ee8e7a2ff 100644
--- a/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.H
+++ b/src/OpenFOAM/db/IOstreams/Pstreams/UPstream.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2017 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright 2015-2016 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2015-2016 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
diff --git a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C
index 4d809900b95966854ae319a7c9c021f31cfc5772..40c2d8e5950f39b6bc7d929944eb8d4a33f92c23 100644
--- a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C
+++ b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C
@@ -224,7 +224,7 @@ Foam::Istream& Foam::ISstream::read(token& t)
                 else
                 {
                     t = sPtr;
-                    t.type() = token::VERBATIMSTRING;
+                    t.type() = token::tokenType::VERBATIMSTRING;
                 }
 
                 return *this;
@@ -266,7 +266,7 @@ Foam::Istream& Foam::ISstream::read(token& t)
                 else
                 {
                     t = sPtr;
-                    t.type() = token::VARIABLE;
+                    t.type() = token::tokenType::VARIABLE;
                 }
                 return *this;
             }
diff --git a/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.C b/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.C
index 69897b999da1040152a71c01af665724cb53de4b..5dc8a3e6bd9078250ae44ea908c37b79cd015444 100644
--- a/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.C
+++ b/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.C
@@ -31,7 +31,7 @@ License
 
 Foam::Ostream& Foam::OSstream::write(const token& t)
 {
-    if (t.type() == token::VERBATIMSTRING)
+    if (t.type() == token::tokenType::VERBATIMSTRING)
     {
         write(char(token::HASH));
         write(char(token::BEGIN_BLOCK));
@@ -39,9 +39,9 @@ Foam::Ostream& Foam::OSstream::write(const token& t)
         write(char(token::HASH));
         write(char(token::END_BLOCK));
     }
-    else if (t.type() == token::VARIABLE)
+    else if (t.type() == token::tokenType::VARIABLE)
     {
-        writeQuoted( t.stringToken(), false);
+        writeQuoted(t.stringToken(), false);
     }
     return *this;
 }
diff --git a/src/OpenFOAM/db/IOstreams/Sstreams/prefixOSstream.C b/src/OpenFOAM/db/IOstreams/Sstreams/prefixOSstream.C
index f9ff715821afa3cef7b0a10bd6b7c76ecc2838a9..cb28408f7dec651c2e0bbe902bab9e6c9c6f677b 100644
--- a/src/OpenFOAM/db/IOstreams/Sstreams/prefixOSstream.C
+++ b/src/OpenFOAM/db/IOstreams/Sstreams/prefixOSstream.C
@@ -67,7 +67,7 @@ void Foam::prefixOSstream::print(Ostream& os) const
 
 Foam::Ostream& Foam::prefixOSstream::write(const token& t)
 {
-    if (t.type() == token::VERBATIMSTRING)
+    if (t.type() == token::tokenType::VERBATIMSTRING)
     {
         write(char(token::HASH));
         write(char(token::BEGIN_BLOCK));
@@ -75,7 +75,7 @@ Foam::Ostream& Foam::prefixOSstream::write(const token& t)
         write(char(token::HASH));
         write(char(token::END_BLOCK));
     }
-    else if (t.type() == token::VARIABLE)
+    else if (t.type() == token::tokenType::VARIABLE)
     {
         writeQuoted(t.stringToken(), false);
     }
diff --git a/src/OpenFOAM/db/IOstreams/token/token.C b/src/OpenFOAM/db/IOstreams/token/token.C
index 4246fc80e740c70cbd953beb6c48fbe4e8769f24..17019bda99ddeb9c8ab1ac4e37d3a893312e2b5b 100644
--- a/src/OpenFOAM/db/IOstreams/token/token.C
+++ b/src/OpenFOAM/db/IOstreams/token/token.C
@@ -92,7 +92,7 @@ bool Foam::token::compound::isCompound(const word& name)
 
 Foam::token::compound& Foam::token::transferCompoundToken(const Istream& is)
 {
-    if (type_ == COMPOUND)
+    if (type_ == tokenType::COMPOUND)
     {
         if (compoundTokenPtr_->empty())
         {
diff --git a/src/OpenFOAM/db/IOstreams/token/token.H b/src/OpenFOAM/db/IOstreams/token/token.H
index b883cd376d527cb1a0aeaf01e95b3b0aa02182fd..1de16e5e13a993e556153f224b01ee3a728c6dcd 100644
--- a/src/OpenFOAM/db/IOstreams/token/token.H
+++ b/src/OpenFOAM/db/IOstreams/token/token.H
@@ -197,7 +197,7 @@ public:
 
             // Write
 
-                virtual void write(Ostream&) const = 0;
+                virtual void write(Ostream& os) const = 0;
 
 
         // IOstream Operators
@@ -284,28 +284,47 @@ public:
         inline token();
 
         //- Construct as copy
-        inline token(const token&);
+        inline token(const token& t);
 
         //- Construct punctuation character token
-        inline token(punctuationToken, label lineNumber=0);
+        inline explicit token(punctuationToken p);
 
         //- Construct word token
-        inline token(const word&, label lineNumber=0);
+        inline explicit token(const word& w);
 
         //- Construct string token
-        inline token(const string&, label lineNumber=0);
+        inline explicit token(const string& str);
 
         //- Construct label token
-        inline token(const label, label lineNumber=0);
+        inline explicit token(const label val);
 
         //- Construct floatScalar token
-        inline token(const floatScalar, label lineNumber=0);
+        inline explicit token(const floatScalar val);
 
         //- Construct doubleScalar token
-        inline token(const doubleScalar, label lineNumber=0);
+        inline explicit token(const doubleScalar val);
+
+
+        //- Construct punctuation character token
+        inline token(punctuationToken p, const label lineNumber);
+
+        //- Construct word token
+        inline token(const word& w, const label lineNumber);
+
+        //- Construct string token
+        inline token(const string& str, const label lineNumber);
+
+        //- Construct label token
+        inline token(const label val, const label lineNumber);
+
+        //- Construct floatScalar token
+        inline token(const floatScalar val, const label lineNumber);
+
+        //- Construct doubleScalar token
+        inline token(const doubleScalar val, const label lineNumber);
 
         //- Construct from Istream
-        token(Istream&);
+        token(Istream& is);
 
 
     //- Destructor
@@ -377,43 +396,43 @@ public:
 
         // Assignment
 
-            inline void operator=(const token&);
+            inline void operator=(const token& t);
 
-            inline void operator=(const punctuationToken);
+            inline void operator=(const punctuationToken p);
 
-            inline void operator=(word*);
-            inline void operator=(const word&);
+            inline void operator=(word* wPtr);
+            inline void operator=(const word& w);
 
-            inline void operator=(string*);
-            inline void operator=(const string&);
+            inline void operator=(string* strPtr);
+            inline void operator=(const string& str);
 
-            inline void operator=(const label);
-            inline void operator=(const floatScalar);
-            inline void operator=(const doubleScalar);
+            inline void operator=(const label val);
+            inline void operator=(const floatScalar val);
+            inline void operator=(const doubleScalar val);
 
-            inline void operator=(compound*);
+            inline void operator=(compound* compPtr);
 
 
         // Equality
 
-            inline bool operator==(const token&) const;
-            inline bool operator==(const punctuationToken) const;
-            inline bool operator==(const word&) const;
-            inline bool operator==(const string&) const;
-            inline bool operator==(const label) const;
-            inline bool operator==(const floatScalar) const;
-            inline bool operator==(const doubleScalar) const;
+            inline bool operator==(const token& t) const;
+            inline bool operator==(const punctuationToken p) const;
+            inline bool operator==(const word& w) const;
+            inline bool operator==(const string& str) const;
+            inline bool operator==(const label val) const;
+            inline bool operator==(const floatScalar val) const;
+            inline bool operator==(const doubleScalar val) const;
 
 
         // Inequality
 
-            inline bool operator!=(const token&) const;
-            inline bool operator!=(const punctuationToken) const;
-            inline bool operator!=(const word&) const;
-            inline bool operator!=(const string&) const;
-            inline bool operator!=(const label) const;
-            inline bool operator!=(const floatScalar) const;
-            inline bool operator!=(const doubleScalar) const;
+            inline bool operator!=(const token& t) const;
+            inline bool operator!=(const punctuationToken p) const;
+            inline bool operator!=(const word& w) const;
+            inline bool operator!=(const string& str) const;
+            inline bool operator!=(const label val) const;
+            inline bool operator!=(const floatScalar val) const;
+            inline bool operator!=(const doubleScalar val) const;
 
 
     // IOstream operators
diff --git a/src/OpenFOAM/db/IOstreams/token/tokenI.H b/src/OpenFOAM/db/IOstreams/token/tokenI.H
index 9831e0569551001803544d08216d7f77a8a4617a..32417b4e7507d7fcb32ae525a34f3e97cf88c163 100644
--- a/src/OpenFOAM/db/IOstreams/token/tokenI.H
+++ b/src/OpenFOAM/db/IOstreams/token/tokenI.H
@@ -27,15 +27,20 @@ License
 
 inline void Foam::token::clear()
 {
-    if (type_ == WORD)
+    if (type_ == tokenType::WORD)
     {
         delete wordTokenPtr_;
     }
-    else if (type_ == STRING || type_ == VARIABLE || type_ == VERBATIMSTRING)
+    else if
+    (
+        type_ == tokenType::STRING
+     || type_ == tokenType::VARIABLE
+     || type_ == tokenType::VERBATIMSTRING
+    )
     {
         delete stringTokenPtr_;
     }
-    else if (type_ == COMPOUND)
+    else if (type_ == tokenType::COMPOUND)
     {
         if (compoundTokenPtr_->unique())
         {
@@ -47,7 +52,7 @@ inline void Foam::token::clear()
         }
     }
 
-    type_ = UNDEFINED;
+    type_ = tokenType::UNDEFINED;
 }
 
 
@@ -55,7 +60,7 @@ inline void Foam::token::clear()
 
 inline Foam::token::token()
 :
-    type_(UNDEFINED),
+    type_(tokenType::UNDEFINED),
     lineNumber_(0)
 {}
 
@@ -67,49 +72,85 @@ inline Foam::token::token(const token& t)
 {
     switch (type_)
     {
-        case token::UNDEFINED:
+        case tokenType::UNDEFINED:
         break;
 
-        case PUNCTUATION:
+        case tokenType::PUNCTUATION:
             punctuationToken_ = t.punctuationToken_;
         break;
 
-        case WORD:
+        case tokenType::WORD:
             wordTokenPtr_ = new word(*t.wordTokenPtr_);
         break;
 
-        case STRING:
-        case VARIABLE:
-        case VERBATIMSTRING:
+        case tokenType::STRING:
+        case tokenType::VARIABLE:
+        case tokenType::VERBATIMSTRING:
             stringTokenPtr_ = new string(*t.stringTokenPtr_);
         break;
 
-        case LABEL:
+        case tokenType::LABEL:
             labelToken_ = t.labelToken_;
         break;
 
-        case FLOAT_SCALAR:
+        case tokenType::FLOAT_SCALAR:
             floatScalarToken_ = t.floatScalarToken_;
         break;
 
-        case DOUBLE_SCALAR:
+        case tokenType::DOUBLE_SCALAR:
             doubleScalarToken_ = t.doubleScalarToken_;
         break;
 
-        case COMPOUND:
+        case tokenType::COMPOUND:
             compoundTokenPtr_ = t.compoundTokenPtr_;
             compoundTokenPtr_->refCount::operator++();
         break;
 
-        case token::ERROR:
+        case tokenType::ERROR:
         break;
     }
 }
 
 
+inline Foam::token::token(punctuationToken p)
+:
+    token(p, 0)
+{}
+
+
+inline Foam::token::token(const word& w)
+:
+    token(w, 0)
+{}
+
+
+inline Foam::token::token(const string& str)
+:
+    token(str, 0)
+{}
+
+
+inline Foam::token::token(const label val)
+:
+    token(val, 0)
+{}
+
+
+inline Foam::token::token(const floatScalar val)
+:
+    token(val, 0)
+{}
+
+
+inline Foam::token::token(const doubleScalar val)
+:
+    token(val, 0)
+{}
+
+
 inline Foam::token::token(punctuationToken p, label lineNumber)
 :
-    type_(PUNCTUATION),
+    type_(tokenType::PUNCTUATION),
     punctuationToken_(p),
     lineNumber_(lineNumber)
 {}
@@ -117,40 +158,40 @@ inline Foam::token::token(punctuationToken p, label lineNumber)
 
 inline Foam::token::token(const word& w, label lineNumber)
 :
-    type_(WORD),
+    type_(tokenType::WORD),
     wordTokenPtr_(new word(w)),
     lineNumber_(lineNumber)
 {}
 
 
-inline Foam::token::token(const string& s, label lineNumber)
+inline Foam::token::token(const string& str, label lineNumber)
 :
-    type_(STRING),
-    stringTokenPtr_(new string(s)),
+    type_(tokenType::STRING),
+    stringTokenPtr_(new string(str)),
     lineNumber_(lineNumber)
 {}
 
 
-inline Foam::token::token(const label l, label lineNumber)
+inline Foam::token::token(const label val, label lineNumber)
 :
-    type_(LABEL),
-    labelToken_(l),
+    type_(tokenType::LABEL),
+    labelToken_(val),
     lineNumber_(lineNumber)
 {}
 
 
-inline Foam::token::token(const floatScalar s, label lineNumber)
+inline Foam::token::token(const floatScalar val, label lineNumber)
 :
-    type_(FLOAT_SCALAR),
-    floatScalarToken_(s),
+    type_(tokenType::FLOAT_SCALAR),
+    floatScalarToken_(val),
     lineNumber_(lineNumber)
 {}
 
 
-inline Foam::token::token(const doubleScalar s, label lineNumber)
+inline Foam::token::token(const doubleScalar val, label lineNumber)
 :
-    type_(DOUBLE_SCALAR),
-    doubleScalarToken_(s),
+    type_(tokenType::DOUBLE_SCALAR),
+    doubleScalarToken_(val),
     lineNumber_(lineNumber)
 {}
 
@@ -177,27 +218,27 @@ inline Foam::token::tokenType&  Foam::token::type()
 
 inline bool Foam::token::good() const
 {
-    return (type_ != ERROR && type_ != UNDEFINED);
+    return (type_ != tokenType::ERROR && type_ != tokenType::UNDEFINED);
 }
 
 inline bool Foam::token::undefined() const
 {
-    return (type_ == UNDEFINED);
+    return (type_ == tokenType::UNDEFINED);
 }
 
 inline bool Foam::token::error() const
 {
-    return (type_ == ERROR);
+    return (type_ == tokenType::ERROR);
 }
 
 inline bool Foam::token::isPunctuation() const
 {
-    return (type_ == PUNCTUATION);
+    return (type_ == tokenType::PUNCTUATION);
 }
 
 inline Foam::token::punctuationToken  Foam::token::pToken() const
 {
-    if (type_ == PUNCTUATION)
+    if (type_ == tokenType::PUNCTUATION)
     {
         return punctuationToken_;
     }
@@ -210,12 +251,12 @@ inline Foam::token::punctuationToken  Foam::token::pToken() const
 
 inline bool Foam::token::isWord() const
 {
-    return (type_ == WORD);
+    return (type_ == tokenType::WORD);
 }
 
 inline const Foam::word& Foam::token::wordToken() const
 {
-    if (type_ == WORD)
+    if (type_ == tokenType::WORD)
     {
         return *wordTokenPtr_;
     }
@@ -228,17 +269,27 @@ inline const Foam::word& Foam::token::wordToken() const
 
 inline bool Foam::token::isVariable() const
 {
-    return (type_ == VARIABLE);
+    return (type_ == tokenType::VARIABLE);
 }
 
 inline bool Foam::token::isString() const
 {
-    return (type_ == STRING || type_ == VARIABLE || type_ == VERBATIMSTRING);
+    return
+    (
+        type_ == tokenType::STRING
+     || type_ == tokenType::VARIABLE
+     || type_ == tokenType::VERBATIMSTRING
+    );
 }
 
 inline const Foam::string& Foam::token::stringToken() const
 {
-    if (type_ == STRING || type_ == VARIABLE || type_ == VERBATIMSTRING)
+    if
+    (
+        type_ == tokenType::STRING
+     || type_ == tokenType::VARIABLE
+     || type_ == tokenType::VERBATIMSTRING
+    )
     {
         return *stringTokenPtr_;
     }
@@ -251,12 +302,12 @@ inline const Foam::string& Foam::token::stringToken() const
 
 inline bool Foam::token::isLabel() const
 {
-    return (type_ == LABEL);
+    return (type_ == tokenType::LABEL);
 }
 
 inline Foam::label Foam::token::labelToken() const
 {
-    if (type_ == LABEL)
+    if (type_ == tokenType::LABEL)
     {
         return labelToken_;
     }
@@ -269,12 +320,12 @@ inline Foam::label Foam::token::labelToken() const
 
 inline bool Foam::token::isFloatScalar() const
 {
-    return (type_ == FLOAT_SCALAR);
+    return (type_ == tokenType::FLOAT_SCALAR);
 }
 
 inline Foam::floatScalar Foam::token::floatScalarToken() const
 {
-    if (type_ == FLOAT_SCALAR)
+    if (type_ == tokenType::FLOAT_SCALAR)
     {
         return floatScalarToken_;
     }
@@ -288,12 +339,12 @@ inline Foam::floatScalar Foam::token::floatScalarToken() const
 
 inline bool Foam::token::isDoubleScalar() const
 {
-    return (type_ == DOUBLE_SCALAR);
+    return (type_ == tokenType::DOUBLE_SCALAR);
 }
 
 inline Foam::doubleScalar Foam::token::doubleScalarToken() const
 {
-    if (type_ == DOUBLE_SCALAR)
+    if (type_ == tokenType::DOUBLE_SCALAR)
     {
         return doubleScalarToken_;
     }
@@ -307,16 +358,20 @@ inline Foam::doubleScalar Foam::token::doubleScalarToken() const
 
 inline bool Foam::token::isScalar() const
 {
-    return (type_ == FLOAT_SCALAR || type_ == DOUBLE_SCALAR);
+    return
+    (
+        type_ == tokenType::FLOAT_SCALAR
+     || type_ == tokenType::DOUBLE_SCALAR
+    );
 }
 
 inline Foam::scalar Foam::token::scalarToken() const
 {
-    if (type_ == FLOAT_SCALAR)
+    if (type_ == tokenType::FLOAT_SCALAR)
     {
         return floatScalarToken_;
     }
-    else if (type_ == DOUBLE_SCALAR)
+    else if (type_ == tokenType::DOUBLE_SCALAR)
     {
         return doubleScalarToken_;
     }
@@ -329,12 +384,12 @@ inline Foam::scalar Foam::token::scalarToken() const
 
 inline bool Foam::token::isNumber() const
 {
-    return (type_ == LABEL || isScalar());
+    return (type_ == tokenType::LABEL || isScalar());
 }
 
 inline Foam::scalar Foam::token::number() const
 {
-    if (type_ == LABEL)
+    if (type_ == tokenType::LABEL)
     {
         return labelToken_;
     }
@@ -351,12 +406,12 @@ inline Foam::scalar Foam::token::number() const
 
 inline bool Foam::token::isCompound() const
 {
-    return (type_ == COMPOUND);
+    return (type_ == tokenType::COMPOUND);
 }
 
 inline const Foam::token::compound& Foam::token::compoundToken() const
 {
-    if (type_ == COMPOUND)
+    if (type_ == tokenType::COMPOUND)
     {
         return *compoundTokenPtr_;
     }
@@ -382,7 +437,7 @@ inline Foam::label& Foam::token::lineNumber()
 inline void Foam::token::setBad()
 {
     clear();
-    type_ = ERROR;
+    type_ = tokenType::ERROR;
 }
 
 
@@ -395,41 +450,41 @@ inline void Foam::token::operator=(const token& t)
 
     switch (type_)
     {
-        case token::UNDEFINED:
+        case tokenType::UNDEFINED:
         break;
 
-        case PUNCTUATION:
+        case tokenType::PUNCTUATION:
             punctuationToken_ = t.punctuationToken_;
         break;
 
-        case WORD:
+        case tokenType::WORD:
             wordTokenPtr_ = new word(*t.wordTokenPtr_);
         break;
 
-        case STRING:
-        case VARIABLE:
-        case VERBATIMSTRING:
+        case tokenType::STRING:
+        case tokenType::VARIABLE:
+        case tokenType::VERBATIMSTRING:
             stringTokenPtr_ = new string(*t.stringTokenPtr_);
         break;
 
-        case LABEL:
+        case tokenType::LABEL:
             labelToken_ = t.labelToken_;
         break;
 
-        case FLOAT_SCALAR:
+        case tokenType::FLOAT_SCALAR:
             floatScalarToken_ = t.floatScalarToken_;
         break;
 
-        case DOUBLE_SCALAR:
+        case tokenType::DOUBLE_SCALAR:
             doubleScalarToken_ = t.doubleScalarToken_;
         break;
 
-        case COMPOUND:
+        case tokenType::COMPOUND:
             compoundTokenPtr_ = t.compoundTokenPtr_;
             compoundTokenPtr_->refCount::operator++();
         break;
 
-        case token::ERROR:
+        case tokenType::ERROR:
         break;
     }
 
@@ -439,14 +494,14 @@ inline void Foam::token::operator=(const token& t)
 inline void Foam::token::operator=(const punctuationToken p)
 {
     clear();
-    type_ = PUNCTUATION;
+    type_ = tokenType::PUNCTUATION;
     punctuationToken_ = p;
 }
 
 inline void Foam::token::operator=(word* wPtr)
 {
     clear();
-    type_ = WORD;
+    type_ = tokenType::WORD;
     wordTokenPtr_ = wPtr;
 }
 
@@ -455,44 +510,44 @@ inline void Foam::token::operator=(const word& w)
     operator=(new word(w));
 }
 
-inline void Foam::token::operator=(string* sPtr)
+inline void Foam::token::operator=(string* strPtr)
 {
     clear();
-    type_ = STRING;
-    stringTokenPtr_ = sPtr;
+    type_ = tokenType::STRING;
+    stringTokenPtr_ = strPtr;
 }
 
-inline void Foam::token::operator=(const string& s)
+inline void Foam::token::operator=(const string& str)
 {
-    operator=(new string(s));
+    operator=(new string(str));
 }
 
-inline void Foam::token::operator=(const label l)
+inline void Foam::token::operator=(const label val)
 {
     clear();
-    type_ = LABEL;
-    labelToken_ = l;
+    type_ = tokenType::LABEL;
+    labelToken_ = val;
 }
 
-inline void Foam::token::operator=(const floatScalar s)
+inline void Foam::token::operator=(const floatScalar val)
 {
     clear();
-    type_ = FLOAT_SCALAR;
-    floatScalarToken_ = s;
+    type_ = tokenType::FLOAT_SCALAR;
+    floatScalarToken_ = val;
 }
 
-inline void Foam::token::operator=(const doubleScalar s)
+inline void Foam::token::operator=(const doubleScalar val)
 {
     clear();
-    type_ = DOUBLE_SCALAR;
-    doubleScalarToken_ = s;
+    type_ = tokenType::DOUBLE_SCALAR;
+    doubleScalarToken_ = val;
 }
 
-inline void Foam::token::operator=(Foam::token::compound* cPtr)
+inline void Foam::token::operator=(Foam::token::compound* compPtr)
 {
     clear();
-    type_ = COMPOUND;
-    compoundTokenPtr_ = cPtr;
+    type_ = tokenType::COMPOUND;
+    compoundTokenPtr_ = compPtr;
 }
 
 
@@ -505,33 +560,33 @@ inline bool Foam::token::operator==(const token& t) const
 
     switch (type_)
     {
-        case token::UNDEFINED:
+        case tokenType::UNDEFINED:
             return true;
 
-        case PUNCTUATION:
+        case tokenType::PUNCTUATION:
             return punctuationToken_ == t.punctuationToken_;
 
-        case WORD:
+        case tokenType::WORD:
             return *wordTokenPtr_ == *t.wordTokenPtr_;
 
-        case STRING:
-        case VARIABLE:
-        case VERBATIMSTRING:
+        case tokenType::STRING:
+        case tokenType::VARIABLE:
+        case tokenType::VERBATIMSTRING:
             return *stringTokenPtr_ == *t.stringTokenPtr_;
 
-        case LABEL:
+        case tokenType::LABEL:
             return labelToken_ == t.labelToken_;
 
-        case FLOAT_SCALAR:
+        case tokenType::FLOAT_SCALAR:
             return equal(floatScalarToken_, t.floatScalarToken_);
 
-        case DOUBLE_SCALAR:
+        case tokenType::DOUBLE_SCALAR:
             return equal(doubleScalarToken_, t.doubleScalarToken_);
 
-        case COMPOUND:
+        case tokenType::COMPOUND:
             return compoundTokenPtr_ == t.compoundTokenPtr_;
 
-        case token::ERROR:
+        case tokenType::ERROR:
             return true;
     }
 
@@ -540,36 +595,52 @@ inline bool Foam::token::operator==(const token& t) const
 
 inline bool Foam::token::operator==(const punctuationToken p) const
 {
-    return (type_ == PUNCTUATION && punctuationToken_ == p);
+    return (type_ == tokenType::PUNCTUATION && punctuationToken_ == p);
 }
 
 inline bool Foam::token::operator==(const word& w) const
 {
-    return (type_ == WORD && wordToken() == w);
+    return (type_ == tokenType::WORD && wordToken() == w);
 }
 
-inline bool Foam::token::operator==(const string& s) const
+inline bool Foam::token::operator==(const string& str) const
 {
     return
     (
-        (type_ == STRING || type_ == VARIABLE || type_ == VERBATIMSTRING)
-     && stringToken() == s
+        (
+            type_ == tokenType::STRING
+         || type_ == tokenType::VARIABLE
+         || type_ == tokenType::VERBATIMSTRING
+        )
+     && stringToken() == str
     );
 }
 
-inline bool Foam::token::operator==(const label l) const
+inline bool Foam::token::operator==(const label val) const
 {
-    return (type_ == LABEL && labelToken_ == l);
+    return
+    (
+        type_ == tokenType::LABEL
+     && labelToken_ == val
+    );
 }
 
-inline bool Foam::token::operator==(const floatScalar s) const
+inline bool Foam::token::operator==(const floatScalar val) const
 {
-    return (type_ == FLOAT_SCALAR && equal(floatScalarToken_, s));
+    return
+    (
+        type_ == tokenType::FLOAT_SCALAR
+     && equal(floatScalarToken_, val)
+    );
 }
 
-inline bool Foam::token::operator==(const doubleScalar s) const
+inline bool Foam::token::operator==(const doubleScalar val) const
 {
-    return (type_ == DOUBLE_SCALAR && equal(doubleScalarToken_, s));
+    return
+    (
+        type_ == tokenType::DOUBLE_SCALAR
+     && equal(doubleScalarToken_, val)
+    );
 }
 
 inline bool Foam::token::operator!=(const token& t) const
@@ -587,24 +658,24 @@ inline bool Foam::token::operator!=(const word& w) const
     return !operator==(w);
 }
 
-inline bool Foam::token::operator!=(const string& s) const
+inline bool Foam::token::operator!=(const string& str) const
 {
-    return !operator==(s);
+    return !operator==(str);
 }
 
-inline bool Foam::token::operator!=(const floatScalar s) const
+inline bool Foam::token::operator!=(const label val) const
 {
-    return !operator==(s);
+    return !operator==(val);
 }
 
-inline bool Foam::token::operator!=(const doubleScalar s) const
+inline bool Foam::token::operator!=(const floatScalar val) const
 {
-    return !operator==(s);
+    return !operator==(val);
 }
 
-inline bool Foam::token::operator!=(const label l) const
+inline bool Foam::token::operator!=(const doubleScalar val) const
 {
-    return !operator==(l);
+    return !operator==(val);
 }
 
 
diff --git a/src/OpenFOAM/db/IOstreams/token/tokenIO.C b/src/OpenFOAM/db/IOstreams/token/tokenIO.C
index acf14b96fec6ce949f7a84760aa0229fb02ad360..f451de1796a626335d799b64c3bcbd1df9149a50 100644
--- a/src/OpenFOAM/db/IOstreams/token/tokenIO.C
+++ b/src/OpenFOAM/db/IOstreams/token/tokenIO.C
@@ -33,7 +33,7 @@ License
 
 Foam::token::token(Istream& is)
 :
-    type_(UNDEFINED)
+    type_(tokenType::UNDEFINED)
 {
     is.read(*this);
 }
@@ -52,47 +52,47 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const token& t)
 {
     switch (t.type_)
     {
-        case token::UNDEFINED:
+        case token::tokenType::UNDEFINED:
             os << "UNDEFINED";
             WarningInFunction
                 << "Undefined token" << endl;
         break;
 
-        case token::PUNCTUATION:
+        case token::tokenType::PUNCTUATION:
             os << t.punctuationToken_;
         break;
 
-        case token::WORD:
+        case token::tokenType::WORD:
             os << *t.wordTokenPtr_;
         break;
 
-        case token::STRING:
-        case token::VERBATIMSTRING:
+        case token::tokenType::STRING:
+        case token::tokenType::VERBATIMSTRING:
             os << *t.stringTokenPtr_;
         break;
 
-        case token::VARIABLE:
+        case token::tokenType::VARIABLE:
             // Behaviour differs according to stream type
             os.write(t);
         break;
 
-        case token::LABEL:
+        case token::tokenType::LABEL:
             os << t.labelToken_;
         break;
 
-        case token::FLOAT_SCALAR:
+        case token::tokenType::FLOAT_SCALAR:
             os << t.floatScalarToken_;
         break;
 
-        case token::DOUBLE_SCALAR:
+        case token::tokenType::DOUBLE_SCALAR:
             os << t.doubleScalarToken_;
         break;
 
-        case token::COMPOUND:
+        case token::tokenType::COMPOUND:
             os << *t.compoundTokenPtr_;
         break;
 
-        case token::ERROR:
+        case token::tokenType::ERROR:
             os << "ERROR";
             WarningInFunction
                 << "Error token" << endl;
@@ -141,43 +141,43 @@ ostream& Foam::operator<<(ostream& os, const InfoProxy<token>& ip)
 
     switch (t.type())
     {
-        case token::UNDEFINED:
+        case token::tokenType::UNDEFINED:
             os  << " an undefined token";
         break;
 
-        case token::PUNCTUATION:
+        case token::tokenType::PUNCTUATION:
             os  << " the punctuation token " << '\'' << t.pToken() << '\'';
         break;
 
-        case token::WORD:
+        case token::tokenType::WORD:
             os  << " the word " << '\'' << t.wordToken() << '\'';
         break;
 
-        case token::STRING:
+        case token::tokenType::STRING:
             os  << " the string " << t.stringToken();
         break;
 
-        case token::VARIABLE:
+        case token::tokenType::VARIABLE:
             os  << " the variable " << t.stringToken();
         break;
 
-        case token::VERBATIMSTRING:
+        case token::tokenType::VERBATIMSTRING:
             os  << " the verbatim string " << t.stringToken();
         break;
 
-        case token::LABEL:
+        case token::tokenType::LABEL:
             os  << " the label " << t.labelToken();
         break;
 
-        case token::FLOAT_SCALAR:
+        case token::tokenType::FLOAT_SCALAR:
             os  << " the floatScalar " << t.floatScalarToken();
         break;
 
-        case token::DOUBLE_SCALAR:
+        case token::tokenType::DOUBLE_SCALAR:
             os  << " the doubleScalar " << t.doubleScalarToken();
         break;
 
-        case token::COMPOUND:
+        case token::tokenType::COMPOUND:
         {
             if (t.compoundToken().empty())
             {
@@ -192,7 +192,7 @@ ostream& Foam::operator<<(ostream& os, const InfoProxy<token>& ip)
         }
         break;
 
-        case token::ERROR:
+        case token::tokenType::ERROR:
             os  << " an error";
         break;
 
@@ -213,43 +213,43 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const InfoProxy<token>& ip)
 
     switch (t.type())
     {
-        case token::UNDEFINED:
+        case token::tokenType::UNDEFINED:
             os  << " an undefined token";
         break;
 
-        case token::PUNCTUATION:
+        case token::tokenType::PUNCTUATION:
             os  << " the punctuation token " << '\'' << t.pToken() << '\'';
         break;
 
-        case token::WORD:
+        case token::tokenType::WORD:
             os  << " the word " << '\'' << t.wordToken() << '\'';
         break;
 
-        case token::STRING:
+        case token::tokenType::STRING:
             os  << " the string " << t.stringToken();
         break;
 
-        case token::VARIABLE:
+        case token::tokenType::VARIABLE:
             os  << " the variable " << t.stringToken();
         break;
 
-        case token::VERBATIMSTRING:
+        case token::tokenType::VERBATIMSTRING:
             os  << " the verbatim string " << t.stringToken();
         break;
 
-        case token::LABEL:
+        case token::tokenType::LABEL:
             os  << " the label " << t.labelToken();
         break;
 
-        case token::FLOAT_SCALAR:
+        case token::tokenType::FLOAT_SCALAR:
             os  << " the floatScalar " << t.floatScalarToken();
         break;
 
-        case token::DOUBLE_SCALAR:
+        case token::tokenType::DOUBLE_SCALAR:
             os  << " the doubleScalar " << t.doubleScalarToken();
         break;
 
-        case token::COMPOUND:
+        case token::tokenType::COMPOUND:
         {
             if (t.compoundToken().empty())
             {
@@ -264,7 +264,7 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const InfoProxy<token>& ip)
         }
         break;
 
-        case token::ERROR:
+        case token::tokenType::ERROR:
             os  << " an error";
         break;
 
diff --git a/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntryIO.C b/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntryIO.C
index 96a20c0cc0b59291c32392eaaa1cba1e221407ec..6a040941e741c2e2b90fb694203ddc742db6544c 100644
--- a/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntryIO.C
+++ b/src/OpenFOAM/db/dictionary/primitiveEntry/primitiveEntryIO.C
@@ -236,7 +236,7 @@ void Foam::primitiveEntry::write(Ostream& os, const bool contentsOnly) const
         }
         space = true;  // Prefix any following tokens
 
-        if (t.type() == token::VERBATIMSTRING)
+        if (t.type() == token::tokenType::VERBATIMSTRING)
         {
             // Bypass token output operator to avoid losing verbatimness.
             // Handle in Ostreams themselves
diff --git a/src/OpenFOAM/dimensionSet/dimensionSetIO.C b/src/OpenFOAM/dimensionSet/dimensionSetIO.C
index 032555cd25bba027ab53fd33ce1598bf75299e66..39773831605c2194f8fe17b6ccef45a97b62b720 100644
--- a/src/OpenFOAM/dimensionSet/dimensionSetIO.C
+++ b/src/OpenFOAM/dimensionSet/dimensionSetIO.C
@@ -158,7 +158,7 @@ void Foam::dimensionSet::tokeniser::splitWord(const word& w)
                 }
                 else
                 {
-                    push(token::punctuationToken(w[i]));
+                    push(token(token::punctuationToken(w[i])));
                 }
             }
             start = i+1;
diff --git a/src/OpenFOAM/primitives/bools/Switch/Switch.C b/src/OpenFOAM/primitives/bools/Switch/Switch.C
index f5be21f9417662edda0cdfda38be1248abe4e5f8..9ddb0d95c1394fa405fcac9ed1f98ad87831a38c 100644
--- a/src/OpenFOAM/primitives/bools/Switch/Switch.C
+++ b/src/OpenFOAM/primitives/bools/Switch/Switch.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -32,10 +32,8 @@ License
 const char* Foam::Switch::names[Foam::Switch::INVALID+1] =
 {
     "false", "true",
-    "off",   "on",
     "no",    "yes",
-    "n",     "y",
-    "f",     "t",
+    "off",   "on",
     "none",  "true",  // Is there a reasonable counterpart to "none"?
     "invalid"
 };
@@ -49,55 +47,53 @@ Foam::Switch::switchType Foam::Switch::asEnum
     const bool allowInvalid
 )
 {
-    for (int sw = 0; sw < Switch::INVALID; ++sw)
+    const std::string::size_type len = str.size();
+    switch (len)
     {
-        if (str == names[sw])
+        case 1: // (f|n|t|y) - single-character forms
         {
-            // handle aliases
-            switch (sw)
+            switch (str[0])
             {
-                case Switch::NO_1:
-                case Switch::NONE:
-                {
-                    return Switch::NO;
-                    break;
-                }
-
-                case Switch::YES_1:
-                {
-                    return Switch::YES;
-                    break;
-                }
-
-                case Switch::FALSE_1:
-                {
-                    return Switch::FALSE;
-                    break;
-                }
-
-                case Switch::TRUE_1:
-                {
-                    return Switch::TRUE;
-                    break;
-                }
-
-                default:
-                {
-                    return switchType(sw);
-                    break;
-                }
+                case 'f': return switchType::FALSE;
+                case 'n': return switchType::NO;
+                case 't': return switchType::TRUE;
+                case 'y': return switchType::YES;
             }
+            break;
+        }
+        case 2: // (no|on)
+        {
+            if (str == names[switchType::NO]) return switchType::NO;
+            if (str == names[switchType::ON]) return switchType::ON;
+            break;
+        }
+        case 3: // (off|yes)
+        {
+            if (str == names[switchType::OFF]) return switchType::OFF;
+            if (str == names[switchType::YES]) return switchType::YES;
+            break;
+        }
+        case 4: // (none|true)
+        {
+            if (str == names[switchType::NONE]) return switchType::NONE;
+            if (str == names[switchType::TRUE]) return switchType::TRUE;
+            break;
+        }
+        case 5: // (false)
+        {
+            if (str == names[switchType::FALSE]) return switchType::FALSE;
+            break;
         }
     }
 
     if (!allowInvalid)
     {
         FatalErrorInFunction
-            << "unknown switch word " << str << nl
+            << "Unknown switch word " << str << nl
             << abort(FatalError);
     }
 
-    return Switch::INVALID;
+    return switchType::INVALID;
 }
 
 
@@ -116,7 +112,7 @@ Foam::Switch Foam::Switch::lookupOrAddToDict
 
 bool Foam::Switch::valid() const
 {
-    return switch_ <= Switch::NONE;
+    return switch_ <= switchType::NONE;
 }
 
 
diff --git a/src/OpenFOAM/primitives/bools/Switch/Switch.H b/src/OpenFOAM/primitives/bools/Switch/Switch.H
index 63ef5ead5276c2a5516b82a251dfe2d72b8f123e..256944b936dbd0e9bb67f8a31eeaf986e8429629 100644
--- a/src/OpenFOAM/primitives/bools/Switch/Switch.H
+++ b/src/OpenFOAM/primitives/bools/Switch/Switch.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -69,17 +69,13 @@ public:
 
     // Public data types
 
-        // avoid issues with pre-processor defines
+        // Avoid issues with possible pre-processor defines
         #undef FALSE
         #undef TRUE
-        #undef OFF
-        #undef ON
         #undef NO
         #undef YES
-        #undef NO_1
-        #undef YES_1
-        #undef FALSE_1
-        #undef TRUE_1
+        #undef OFF
+        #undef ON
         #undef NONE
         #undef PLACEHOLDER
         #undef INVALID
@@ -89,11 +85,9 @@ public:
         enum switchType
         {
             FALSE   = 0,  TRUE   = 1,
-            OFF     = 2,  ON     = 3,
-            NO      = 4,  YES    = 5,
-            NO_1    = 6,  YES_1  = 7,
-            FALSE_1 = 8,  TRUE_1 = 9,
-            NONE    = 10, PLACEHOLDER = 11,
+            NO      = 2,  YES    = 3,
+            OFF     = 4,  ON     = 5,
+            NONE    = 6,  PLACEHOLDER = 7,
             INVALID
         };
 
@@ -123,7 +117,7 @@ public:
         //- Construct null as false
         Switch()
         :
-            switch_(Switch::FALSE)
+            switch_(switchType::FALSE)
         {}
 
         //- Construct from enumerated value
@@ -135,25 +129,37 @@ public:
         //- Construct from bool
         Switch(const bool b)
         :
-            switch_(b ? Switch::TRUE : Switch::FALSE)
+            switch_(b ? switchType::TRUE : switchType::FALSE)
         {}
 
         //- Construct from integer values (treats integer as bool value)
         Switch(const int i)
         :
-            switch_(i ? Switch::TRUE : Switch::FALSE)
+            switch_(i ? switchType::TRUE : switchType::FALSE)
+        {}
+
+        //- Construct from string - catches bad input.
+        explicit Switch(const std::string& str)
+        :
+            switch_(asEnum(str, false))
+        {}
+
+        //- Construct from character array - catches bad input.
+        explicit Switch(const char* str)
+        :
+            switch_(asEnum(std::string(str), false))
         {}
 
-        //- Construct from std::string, string, word
+        //- Construct from string.
         //  Optionally allow bad words, and catch the error elsewhere
-        Switch(const std::string& str, const bool allowInvalid=false)
+        Switch(const std::string& str, const bool allowInvalid)
         :
             switch_(asEnum(str, allowInvalid))
         {}
 
-        //- Construct from character array
+        //- Construct from character array.
         //  Optionally allow bad words, and catch the error elsewhere
-        Switch(const char* str, const bool allowInvalid=false)
+        Switch(const char* str, const bool allowInvalid)
         :
             switch_(asEnum(std::string(str), allowInvalid))
         {}
@@ -167,7 +173,7 @@ public:
         (
             const word& name,
             dictionary& dict,
-            const Switch& defaultValue = false
+            const Switch& defaultValue = switchType::FALSE
         );
 
 
diff --git a/src/OpenFOAM/primitives/strings/stringOps/stringOps.H b/src/OpenFOAM/primitives/strings/stringOps/stringOps.H
index 0d7d459f596895a3341e45b4d79fcd3dfe848a22..92092f9d5207ddf0370d1b499bb1600892248b6c 100644
--- a/src/OpenFOAM/primitives/strings/stringOps/stringOps.H
+++ b/src/OpenFOAM/primitives/strings/stringOps/stringOps.H
@@ -304,15 +304,44 @@ namespace stringOps
     Foam::word name(const std::string& fmt, const PrimitiveType& val);
 
 
-    //- Split a string into sub-strings at the delimiter character.
-    //  An empty sub-strings are suppressed.
+    //- Split string into sub-strings at the delimiter character.
+    //  Empty sub-strings are suppressed.
     template<class StringType>
     Foam::SubStrings<StringType> split
     (
         const StringType& str,
-        const char delimiter
+        const char delim
     );
 
+    //- Split string into sub-strings using delimiter string.
+    //  Empty sub-strings are suppressed.
+    template<class StringType>
+    Foam::SubStrings<StringType> split
+    (
+        const StringType& str,
+        const std::string& delim
+    );
+
+
+    //- Split string into sub-strings using any characters in delimiter.
+    //  Empty sub-strings are suppressed.
+    template<class StringType>
+    Foam::SubStrings<StringType> splitAny
+    (
+        const StringType& str,
+        const std::string& delim
+    );
+
+
+    //- Split string into sub-strings at whitespace (TAB, NL, VT, FF, CR, SPC)
+    //  Empty sub-strings are suppressed.
+    template<class StringType>
+    Foam::SubStrings<StringType> splitSpace
+    (
+        const StringType& str
+    );
+
+
 } // End namespace stringOps
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/OpenFOAM/primitives/strings/stringOps/stringOpsTemplates.C b/src/OpenFOAM/primitives/strings/stringOps/stringOpsTemplates.C
index 1b0aa62e9fd2d5561e11cb0abda4d8f44166ff53..dc9f771de88ce092162bbd9fdd5bfb52a7b93459 100644
--- a/src/OpenFOAM/primitives/strings/stringOps/stringOpsTemplates.C
+++ b/src/OpenFOAM/primitives/strings/stringOps/stringOpsTemplates.C
@@ -69,7 +69,7 @@ template<class StringType>
 Foam::SubStrings<StringType> Foam::stringOps::split
 (
     const StringType& str,
-    const char delimiter
+    const char delim
 )
 {
     Foam::SubStrings<StringType> lst;
@@ -77,7 +77,7 @@ Foam::SubStrings<StringType> Foam::stringOps::split
 
     std::string::size_type beg = 0, end = 0;
 
-    while ((end = str.find(delimiter, beg)) != std::string::npos)
+    while ((end = str.find(delim, beg)) != std::string::npos)
     {
         if (beg < end)
         {
@@ -97,4 +97,84 @@ Foam::SubStrings<StringType> Foam::stringOps::split
 }
 
 
+template<class StringType>
+Foam::SubStrings<StringType> Foam::stringOps::split
+(
+    const StringType& str,
+    const std::string& delim
+)
+{
+    Foam::SubStrings<StringType> lst;
+    lst.reserve(20);
+
+    std::string::size_type beg = 0, end = 0;
+
+    while ((end = str.find(delim, beg)) != std::string::npos)
+    {
+        if (beg < end)
+        {
+            // (Non-empty) intermediate element
+            lst.append(str.cbegin() + beg, str.cbegin() + end);
+        }
+        beg = end + delim.size();
+    }
+
+    // (Non-empty) trailing element
+    if (beg < str.size())
+    {
+        lst.append(str.cbegin() + beg, str.cbegin() + str.size());
+    }
+
+    return lst;
+}
+
+
+template<class StringType>
+Foam::SubStrings<StringType> Foam::stringOps::splitAny
+(
+    const StringType& str,
+    const std::string& delim
+)
+{
+    Foam::SubStrings<StringType> lst;
+    lst.reserve(20);
+
+    std::string::size_type beg = 0;
+
+    while
+    (
+        (beg = str.find_first_not_of(delim, beg))
+     != std::string::npos
+    )
+    {
+        const auto end = str.find_first_of(delim, beg);
+
+        if (end == std::string::npos)
+        {
+            // Trailing element
+            lst.append(str.cbegin() + beg, str.cbegin() + str.size());
+            break;
+        }
+        else
+        {
+            // Intermediate element
+            lst.append(str.cbegin() + beg, str.cbegin() + end);
+            beg = end + 1;
+        }
+    }
+
+    return lst;
+}
+
+
+template<class StringType>
+Foam::SubStrings<StringType> Foam::stringOps::splitSpace
+(
+    const StringType& str
+)
+{
+    return splitAny(str, "\t\n\v\f\r ");
+}
+
+
 // ************************************************************************* //
diff --git a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.H b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.H
index 4cf6b7c5153c658cff1b13f097d64a0a8c706754..04697bdb34227517ece77c72ce6e3b94fe2fdc51 100644
--- a/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.H
+++ b/src/functionObjects/field/fieldValues/surfaceFieldValue/surfaceFieldValue.H
@@ -88,7 +88,6 @@ Usage
         operation    | operation to perform    | yes         |
         postOperation | post-operation to perform    | no | none |
         weightField  | name of field to apply weighting | no |
-        orientedWeightField  | name of oriented field to apply weighting | no |
         scaleFactor  | scale factor            | no          | 1
         fields       | list of fields to operate on | yes    |
     \endtable
diff --git a/src/mesh/blockMesh/blocks/block/block.C b/src/mesh/blockMesh/blocks/block/block.C
index dc842131a281384c66f7ffad3305e6fc3fd26899..481e2ed8802b95c99823e5fbe8f5e43ec030fa53 100644
--- a/src/mesh/blockMesh/blocks/block/block.C
+++ b/src/mesh/blockMesh/blocks/block/block.C
@@ -82,7 +82,7 @@ Foam::autoPtr<Foam::block> Foam::block::New
 
     if (!cstrIter.found())
     {
-        is.putBack(blockOrCellShapeType);
+        is.putBack(token(blockOrCellShapeType));
         return autoPtr<block>(new block(dict, index, points, edges, faces, is));
     }
     else
diff --git a/src/meshTools/output/foamVtkWriteFaceSet.H b/src/meshTools/output/foamVtkWriteFaceSet.H
index 24ba0c3932b58e093d629d1daa46ba2433ec6584..2469b45f3d3467b3559aa24048d46191bebda648 100644
--- a/src/meshTools/output/foamVtkWriteFaceSet.H
+++ b/src/meshTools/output/foamVtkWriteFaceSet.H
@@ -26,7 +26,7 @@ InNamespace
 
 Description
     Write faceSet to vtk polydata file.
-    The data are the original point ids.
+    The data are the mesh face ids.
 
 SourceFiles
     foamVtkWritePointSet.C
@@ -49,7 +49,7 @@ class fileName;
 namespace vtk
 {
 
-//- Write pointSet to vtk polydata file.
+//- Write faceSet to vtk polydata file.
 //  Only one data which is original pointID.
 void writeFaceSet
 (
diff --git a/src/meshTools/sets/topoSets/cellSet.H b/src/meshTools/sets/topoSets/cellSet.H
index 260695f6ad1d9df71dee0bdc76bade63c3b5440b..da1dc407d26b0170e4fc9967cd2c5195e6d88b72 100644
--- a/src/meshTools/sets/topoSets/cellSet.H
+++ b/src/meshTools/sets/topoSets/cellSet.H
@@ -65,7 +65,7 @@ public:
     // Constructors
 
         //- Construct from IOobject. No checking.
-        cellSet(const IOobject& obj);
+        explicit cellSet(const IOobject& obj);
 
         //- Construct from polyMesh and name. Checks for valid cell ids.
         cellSet
diff --git a/src/meshTools/sets/topoSets/faceSet.H b/src/meshTools/sets/topoSets/faceSet.H
index 18787ca5debf8e0aa1f3047b2c272750b3c2ee5b..7653db16208595a46fa3d0930e00dac2af819b7b 100644
--- a/src/meshTools/sets/topoSets/faceSet.H
+++ b/src/meshTools/sets/topoSets/faceSet.H
@@ -59,9 +59,8 @@ public:
 
     // Constructors
 
-
         //- Construct from IOobject
-        faceSet(const IOobject& obj);
+        explicit faceSet(const IOobject& obj);
 
         //- Construct from objectRegistry and name
         faceSet
diff --git a/src/meshTools/sets/topoSets/pointSet.H b/src/meshTools/sets/topoSets/pointSet.H
index c31f86e688aaebdb730c064a298520b94d1b94b2..4f4025adc8b4aca55c1fc251c7a25fa471b0e804 100644
--- a/src/meshTools/sets/topoSets/pointSet.H
+++ b/src/meshTools/sets/topoSets/pointSet.H
@@ -60,9 +60,8 @@ public:
 
     // Constructors
 
-
         //- Construct from IOobject
-        pointSet(const IOobject& obj);
+        explicit pointSet(const IOobject& obj);
 
         //- Construct from objectRegistry and name
         pointSet
diff --git a/tutorials/combustion/XiDyMFoam/annularCombustorTurbine/system/blockMeshDict b/tutorials/combustion/XiDyMFoam/annularCombustorTurbine/system/blockMeshDict
index 36e529969ba2144523bde3ac22b31e91b3b4c3bc..2a1810928545cbf35e26dc07281ada5924790a87 100644
--- a/tutorials/combustion/XiDyMFoam/annularCombustorTurbine/system/blockMeshDict
+++ b/tutorials/combustion/XiDyMFoam/annularCombustorTurbine/system/blockMeshDict
@@ -14,7 +14,7 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-convertUoMeters 1;
+scale   1;
 
 r0 34;
 r1 39;