diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/constantSurfaceTensionCoefficient/constantSurfaceTensionCoefficient.C b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/constantSurfaceTensionCoefficient/constantSurfaceTensionCoefficient.C
index d0632c55dce39f1c0c772b29c46ea582210515ac..72392f76c353bd9e5693b70325446608a5574fe1 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/constantSurfaceTensionCoefficient/constantSurfaceTensionCoefficient.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/constantSurfaceTensionCoefficient/constantSurfaceTensionCoefficient.C
@@ -38,7 +38,7 @@ namespace surfaceTensionModels
     (
         surfaceTensionModel,
         constantSurfaceTensionCoefficient,
-        dictionary
+        multiphase
     );
 }
 }
diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/newSurfaceTensionModel.C b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/newSurfaceTensionModel.C
index f14c0da92f5b6f9c615bae2521b71c2522ac60f5..f2c28eeb5ddbfba5a968bfbd990ffeb9fc8cf10c 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/newSurfaceTensionModel.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/newSurfaceTensionModel.C
@@ -40,8 +40,8 @@ Foam::surfaceTensionModel::New
     Info<< "Selecting surfaceTensionModel for "
         << pair << ": " << surfaceTensionModelType << endl;
 
-    dictionaryConstructorTable::iterator cstrIter =
-        dictionaryConstructorTablePtr_->find(surfaceTensionModelType);
+    multiphaseConstructorTable::iterator cstrIter =
+        multiphaseConstructorTablePtr_->find(surfaceTensionModelType);
 
     if (!cstrIter.found())
     {
@@ -49,7 +49,7 @@ Foam::surfaceTensionModel::New
             << "Unknown surfaceTensionModelType type "
             << surfaceTensionModelType << endl << endl
             << "Valid surfaceTensionModel types are : " << endl
-            << dictionaryConstructorTablePtr_->sortedToc()
+            << multiphaseConstructorTablePtr_->sortedToc()
             << exit(FatalError);
     }
 
diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/surfaceTensionModel.C b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/surfaceTensionModel.C
index 8d7a487495a787ef32fa17cadc5da186fa5b3793..9836cad23564036517ff1b6b6ead113aac291b1e 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/surfaceTensionModel.C
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/surfaceTensionModel.C
@@ -31,7 +31,7 @@ License
 namespace Foam
 {
     defineTypeNameAndDebug(surfaceTensionModel, 0);
-    defineRunTimeSelectionTable(surfaceTensionModel, dictionary);
+    defineRunTimeSelectionTable(surfaceTensionModel, multiphase);
 }
 
 const Foam::dimensionSet Foam::surfaceTensionModel::dimSigma(1, 0, -2, 0, 0);
diff --git a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/surfaceTensionModel.H b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/surfaceTensionModel.H
index 8fb8877d5ca45b7fbedf97a443ca0e8d3947d040..a69f14e58e26cb499457a14960f1be802f550c50 100644
--- a/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/surfaceTensionModel.H
+++ b/applications/solvers/multiphase/reactingEulerFoam/interfacialCompositionModels/surfaceTensionModels/surfaceTensionModel/surfaceTensionModel.H
@@ -73,7 +73,7 @@ public:
     (
         autoPtr,
         surfaceTensionModel,
-        dictionary,
+        multiphase,
         (
             const dictionary& dict,
             const phasePair& pair,
diff --git a/applications/utilities/miscellaneous/foamHelp/addToolOption.H b/applications/utilities/miscellaneous/foamHelp/addToolOption.H
new file mode 100644
index 0000000000000000000000000000000000000000..71aa07117944da5cc97f276d757b30d89d1752ce
--- /dev/null
+++ b/applications/utilities/miscellaneous/foamHelp/addToolOption.H
@@ -0,0 +1,10 @@
+argList::validArgs.append("tool");
+const wordList opts(helpType::dictionaryConstructorTablePtr_->sortedToc());
+
+string note = "Valid <tool> options include:";
+forAll(opts, i)
+{
+    note = note + ' ' + opts[i];
+}
+
+argList::notes.append(note);
diff --git a/applications/utilities/miscellaneous/foamHelp/foamHelp.C b/applications/utilities/miscellaneous/foamHelp/foamHelp.C
index d4d145ee218bbcb1365e0e9bca3281a54c817e0c..a0e7097e4f96c52479f66520f3821179215388eb 100644
--- a/applications/utilities/miscellaneous/foamHelp/foamHelp.C
+++ b/applications/utilities/miscellaneous/foamHelp/foamHelp.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2012-2014 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -42,6 +42,14 @@ using namespace Foam;
 int main(int argc, char *argv[])
 {
     #include "addRegionOption.H"
+    #include "addToolOption.H"
+
+    // Intercept request for help
+    if ((argc > 0) && (strcmp(argv[1], "-help") == 0))
+    {
+        #include "setRootCase.H"
+    }
+
     if (argc < 2)
     {
         FatalError
@@ -49,8 +57,7 @@ int main(int argc, char *argv[])
             << exit(FatalError);
     }
 
-    const word utilityName = argv[1];
-
+    word utilityName = argv[1];
     Foam::autoPtr<Foam::helpType> utility
     (
         helpType::New(utilityName)
diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
index 5052b76a14f5d3d417e1fe27b3b598a3081f3fa0..3e3931c4c3006ff8249a4ce12a0783aaf3e024ea 100644
--- a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpBoundary/helpBoundary.C
@@ -62,8 +62,6 @@ void Foam::helpTypes::helpBoundary::init()
 {
     helpType::init();
 
-    argList::validArgs.append("boundary");
-
     argList::addOption
     (
         "field",
diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpFunctionObject/helpFunctionObject.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpFunctionObject/helpFunctionObject.C
index c42a430a061a2becd08672b59890a99d6cc26efd..81fca4a91844aeff6d9d931e6f284b2c6142ad07 100644
--- a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpFunctionObject/helpFunctionObject.C
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpFunctionObject/helpFunctionObject.C
@@ -61,8 +61,6 @@ Foam::helpTypes::helpFunctionObject::~helpFunctionObject()
 void Foam::helpTypes::helpFunctionObject::init()
 {
     helpType::init();
-
-    argList::validArgs.append("functionObject");
 }
 
 
diff --git a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpSolver/helpSolver.C b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpSolver/helpSolver.C
index cac59967c31b236de66a2e6e8ba65c752aaa214f..ac628c09c6784796bcf07309056bfbf58cdd1f45 100644
--- a/applications/utilities/miscellaneous/foamHelp/helpTypes/helpSolver/helpSolver.C
+++ b/applications/utilities/miscellaneous/foamHelp/helpTypes/helpSolver/helpSolver.C
@@ -63,7 +63,6 @@ void Foam::helpTypes::helpSolver::init()
 {
     helpType::init();
 
-    argList::validArgs.append("solver");
     argList::addBoolOption
     (
         "read",
diff --git a/applications/utilities/miscellaneous/foamList/Make/options b/applications/utilities/miscellaneous/foamList/Make/options
index 6487208998ceee12b05c030abe852f123cfa7d3c..4d19e8972125a24afe4e96e4bbc4907db6ea287e 100644
--- a/applications/utilities/miscellaneous/foamList/Make/options
+++ b/applications/utilities/miscellaneous/foamList/Make/options
@@ -38,28 +38,22 @@ EXE_LIBS = \
     -lfvMotionSolvers \
     -lfvOptions \
     -lgenericPatchFields \
-    -limmiscibleIncompressibleTwoPhaseMixture \
     -lincompressibleTransportModels \
     -lincompressibleTurbulenceModels \
-    -linterfaceProperties \
+    -llagrangian \
     -llagrangianFunctionObjects \
     -llagrangianIntermediate \
-    -llagrangian \
     -llagrangianSpray \
     -llagrangianTurbulence \
     -llaminarFlameSpeedModels \
-    -lthermophysicalProperties \
     -lmeshTools \
     -lmolecularMeasurements \
     -lmolecule \
     -lODE \
-    -lOpenFOAM \
     -lpairPatchAgglomeration \
-    -lphaseChangeTwoPhaseMixtures \
     -lpotential \
     -lpyrolysisModels \
     -lradiationModels \
-    -lrandomProcesses \
     -lreactingEulerianInterfacialCompositionModels \
     -lreactingEulerianInterfacialModels \
     -lreactingPhaseSystem \
@@ -88,10 +82,17 @@ EXE_LIBS = \
     -lsurfaceFilmModels \
     -lsurfMesh \
     -lthermalBaffleModels \
+    -lthermophysicalProperties \
     -ltopoChangerFvMesh \
     -lturbulenceModels \
     -ltwoPhaseMixture \
-    -ltwoPhaseMixtureThermo \
-    -ltwoPhaseProperties \
     -ltwoPhaseReactingTurbulenceModels \
     -lutilityFunctionObjects
+/*
+    Combinations of the following libs leads to corruption errors... ?
+    -limmiscibleIncompressibleTwoPhaseMixture \
+    -linterfaceProperties \
+    -lphaseChangeTwoPhaseMixtures \
+    -ltwoPhaseMixtureThermo \
+    -ltwoPhaseProperties \
+*/
diff --git a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
index ef68688bf7cd60df7aef8c79a7a319536eb7b9d7..b1fa2872af2ea9ad5684b94d1e5b48293046988f 100644
--- a/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
+++ b/applications/utilities/parallelProcessing/reconstructParMesh/reconstructParMesh.C
@@ -87,8 +87,11 @@ static void renumber
 autoPtr<faceCoupleInfo> determineCoupledFaces
 (
     const bool fullMatch,
-    const label proci,
+    const label masterMeshProcStart,
+    const label masterMeshProcEnd,
     const polyMesh& masterMesh,
+    const label meshToAddProcStart,
+    const label meshToAddProcEnd,
     const polyMesh& meshToAdd,
     const scalar mergeDist
 )
@@ -113,7 +116,6 @@ autoPtr<faceCoupleInfo> determineCoupledFaces
 
         const polyBoundaryMesh& masterPatches = masterMesh.boundaryMesh();
 
-        const string toProcString("to" + name(proci));
 
         DynamicList<label> masterFaces
         (
@@ -121,24 +123,35 @@ autoPtr<faceCoupleInfo> determineCoupledFaces
           - masterMesh.nInternalFaces()
         );
 
+
         forAll(masterPatches, patchi)
         {
             const polyPatch& pp = masterPatches[patchi];
 
-            if
-            (
-                isA<processorPolyPatch>(pp)
-             && (
-                    pp.name().rfind(toProcString)
-                 == (pp.name().size()-toProcString.size())
-                )
-            )
+            if (isA<processorPolyPatch>(pp))
             {
-                label meshFacei = pp.start();
-                forAll(pp, i)
+                for
+                (
+                    label proci=meshToAddProcStart;
+                    proci<meshToAddProcEnd;
+                    proci++
+                )
                 {
-                    masterFaces.append(meshFacei++);
+                    const string toProcString("to" + name(proci));
+                    if (
+                        pp.name().rfind(toProcString)
+                     == (pp.name().size()-toProcString.size())
+                    )
+                    {
+                        label meshFacei = pp.start();
+                        forAll(pp, i)
+                        {
+                            masterFaces.append(meshFacei++);
+                        }
+                        break;
+                    }
                 }
+
             }
         }
         masterFaces.shrink();
@@ -163,17 +176,30 @@ autoPtr<faceCoupleInfo> determineCoupledFaces
             {
                 bool isConnected = false;
 
-                for (label mergedProci = 0; mergedProci < proci; mergedProci++)
+                for
+                (
+                    label mergedProci=masterMeshProcStart;
+                    !isConnected && (mergedProci < masterMeshProcEnd);
+                    mergedProci++
+                )
                 {
-                    const word fromProcString
+                    for
                     (
-                        processorPolyPatch::newName(proci, mergedProci)
-                    );
-
-                    if (pp.name() == fromProcString)
+                        label proci = meshToAddProcStart;
+                        proci < meshToAddProcEnd;
+                        proci++
+                    )
                     {
-                        isConnected = true;
-                        break;
+                        const word fromProcString
+                        (
+                            processorPolyPatch::newName(proci, mergedProci)
+                        );
+
+                        if (pp.name() == fromProcString)
+                        {
+                            isConnected = true;
+                            break;
+                        }
                     }
                 }
 
@@ -623,27 +649,28 @@ int main(int argc, char *argv[])
 
         {
             // Construct empty mesh.
-            Info<< "Constructing empty mesh to add to." << nl << endl;
-            fvMesh masterMesh
-            (
-                IOobject
-                (
-                    regionName,
-                    runTime.timeName(),
-                    runTime,
-                    IOobject::NO_READ
-                ),
-                xferCopy(pointField()),
-                xferCopy(faceList()),
-                xferCopy(cellList())
-            );
+            // fvMesh** masterMesh = new fvMesh*[nProcs];
+            PtrList<fvMesh> masterMesh(nProcs);
 
-            for (label proci = 0; proci < nProcs; proci++)
+            for (label proci=0; proci<nProcs; proci++)
             {
-                Info<< "Reading mesh to add from "
-                    << databases[proci].caseName()
-                    << " for time = " << databases[proci].timeName()
-                    << nl << endl;
+                masterMesh.set
+                (
+                    proci,
+                    new fvMesh
+                    (
+                        IOobject
+                        (
+                            regionName,
+                            runTime.timeName(),
+                            runTime,
+                            IOobject::NO_READ
+                        ),
+                        xferCopy(pointField()),
+                        xferCopy(faceList()),
+                        xferCopy(cellList())
+                    )
+                );
 
                 fvMesh meshToAdd
                 (
@@ -662,78 +689,169 @@ int main(int argc, char *argv[])
                 boundaryProcAddressing[proci] =
                     identity(meshToAdd.boundaryMesh().size());
 
-
                 // Find geometrically shared points/faces.
                 autoPtr<faceCoupleInfo> couples = determineCoupledFaces
                 (
                     fullMatch,
                     proci,
-                    masterMesh,
+                    proci,
+                    masterMesh[proci],
+                    proci,
+                    proci,
                     meshToAdd,
                     mergeDist
                 );
 
-
                 // Add elements to mesh
-                Info<< "Adding to master mesh" << nl << endl;
-
                 autoPtr<mapAddedPolyMesh> map = fvMeshAdder::add
                 (
-                    masterMesh,
+                    masterMesh[proci],
                     meshToAdd,
                     couples
                 );
 
-                // Update all addressing so xxProcAddressing points to correct
-                // item in masterMesh.
-
-                // Processors that were already in masterMesh
-                for (label mergedI = 0; mergedI < proci; mergedI++)
-                {
-                    renumber(map().oldCellMap(), cellProcAddressing[mergedI]);
-                    renumber(map().oldFaceMap(), faceProcAddressing[mergedI]);
-                    renumber(map().oldPointMap(), pointProcAddressing[mergedI]);
-                    // Note: boundary is special since can contain -1.
-                    renumber
-                    (
-                        map().oldPatchMap(),
-                        boundaryProcAddressing[mergedI]
-                    );
-                }
-
                 // Added processor
                 renumber(map().addedCellMap(), cellProcAddressing[proci]);
                 renumber(map().addedFaceMap(), faceProcAddressing[proci]);
                 renumber(map().addedPointMap(), pointProcAddressing[proci]);
                 renumber(map().addedPatchMap(), boundaryProcAddressing[proci]);
+            }
+            for (label step=2; step<nProcs*2; step*=2)
+            {
+                for (label proci=0; proci<nProcs; proci+=step)
+                {
+                    label next = proci + step/2;
+                    if(next >= nProcs)
+                    {
+                        continue;
+                    }
+
+                    Info<< "Merging mesh " << proci << " with " << next << endl;
+
+                    // Find geometrically shared points/faces.
+                    autoPtr<faceCoupleInfo> couples = determineCoupledFaces
+                    (
+                        fullMatch,
+                        proci,
+                        next,
+                        masterMesh[proci],
+                        next,
+                        proci+step,
+                        masterMesh[next],
+                        mergeDist
+                    );
+
+                    // Add elements to mesh
+                    autoPtr<mapAddedPolyMesh> map = fvMeshAdder::add
+                    (
+                        masterMesh[proci],
+                        masterMesh[next],
+                        couples
+                    );
 
-                Info<< endl;
+                    // Processors that were already in masterMesh
+                    for (label mergedI=proci; mergedI<next; mergedI++)
+                    {
+                        renumber
+                        (
+                            map().oldCellMap(),
+                            cellProcAddressing[mergedI]
+                        );
+
+                        renumber
+                        (
+                            map().oldFaceMap(),
+                            faceProcAddressing[mergedI]
+                        );
+
+                        renumber
+                        (
+                            map().oldPointMap(),
+                            pointProcAddressing[mergedI]
+                        );
+
+                        // Note: boundary is special since can contain -1.
+                        renumber
+                        (
+                            map().oldPatchMap(),
+                            boundaryProcAddressing[mergedI]
+                        );
+                    }
+
+                    // Added processor
+                    for
+                    (
+                        label addedI=next;
+                        addedI<min(proci+step, nProcs);
+                        addedI++
+                    )
+                    {
+                        renumber
+                        (
+                            map().addedCellMap(),
+                            cellProcAddressing[addedI]
+                        );
+
+                        renumber
+                        (
+                            map().addedFaceMap(),
+                            faceProcAddressing[addedI]
+                        );
+
+                        renumber
+                        (
+                            map().addedPointMap(),
+                            pointProcAddressing[addedI]
+                        );
+
+                        renumber
+                        (
+                            map().addedPatchMap(),
+                            boundaryProcAddressing[addedI]
+                        );
+                    }
+
+                    masterMesh.set(next, nullptr);
+                }
+            }
+
+            for (label proci=0; proci<nProcs; proci++)
+            {
+                Info<< "Reading mesh to add from "
+                    << databases[proci].caseName()
+                    << " for time = " << databases[proci].timeName()
+                    << nl << nl << endl;
             }
 
             // See if any points on the mastermesh have become connected
             // because of connections through processor meshes.
-            mergeSharedPoints(mergeDist, masterMesh, pointProcAddressing);
+            mergeSharedPoints(mergeDist, masterMesh[0], pointProcAddressing);
 
             // Save some properties on the reconstructed mesh
-            masterInternalFaces = masterMesh.nInternalFaces();
-            masterOwner = masterMesh.faceOwner();
+            masterInternalFaces = masterMesh[0].nInternalFaces();
+            masterOwner = masterMesh[0].faceOwner();
 
 
             Info<< "\nWriting merged mesh to "
                 << runTime.path()/runTime.timeName()
                 << nl << endl;
 
-            if (!masterMesh.write())
+            if (!masterMesh[0].write())
             {
                 FatalErrorInFunction
                     << "Failed writing polyMesh."
                     << exit(FatalError);
             }
-            topoSet::removeFiles(masterMesh);
+            topoSet::removeFiles(masterMesh[0]);
 
             if (writeCellDist)
             {
-                writeCellDistance(runTime, masterMesh, cellProcAddressing);
+                writeCellDistance
+                (
+                    runTime,
+                    masterMesh[0],
+                    cellProcAddressing
+                );
             }
         }
 
@@ -810,7 +928,7 @@ int main(int argc, char *argv[])
             // See reconstructPar for meaning of turning index.
             forAll(faceProcAddr, procFacei)
             {
-                label masterFacei = faceProcAddr[procFacei];
+                const label masterFacei = faceProcAddr[procFacei];
 
                 if
                 (
diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK/writeVTK/controlDict b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK/writeVTK/controlDict
index fc69a6776f6e7943092f266c7ef1cc0da38b3932..2888266a2ff183dbfe84755dd70695941550f7f0 100644
--- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK/writeVTK/controlDict
+++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK/writeVTK/controlDict
@@ -40,7 +40,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/applications/utilities/postProcessing/noise/noiseDict b/applications/utilities/postProcessing/noise/noiseDict
index 95eedffff161de4806787493d683e86dd43aee88..00a3fbc81d58ede2674bd7ea90b214a366236ac9 100644
--- a/applications/utilities/postProcessing/noise/noiseDict
+++ b/applications/utilities/postProcessing/noise/noiseDict
@@ -90,7 +90,7 @@ pointNoiseCoeffs
 {
     csvFileData
     {
-        fileName        "pressureData";
+        file            "pressureData";
         nHeaderLine     1;
         refColumn       0;
         componentColumns (1);
diff --git a/bin/foamCreateBashCompletions b/bin/foamCreateBashCompletions
new file mode 100755
index 0000000000000000000000000000000000000000..ea366c1f0fb0b4b62c6a4c44ffc2ab2b303ba1c0
--- /dev/null
+++ b/bin/foamCreateBashCompletions
@@ -0,0 +1,195 @@
+#!/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
+#
+#------------------------------------------------------------------------------
+#set -x
+
+usage() {
+    exec 1>&2
+    while [ "$#" -ge 1 ]; do echo "$1"; shift; done
+    cat<<USAGE
+
+Usage: $Script [OPTION] <file>
+
+* Create bash completions for OpenFOAM applications and write to <file>.
+  By default searches directories \$FOAM_APPBIN and \$FOAM_USER_APPBIN
+
+
+Options:
+  -d | -directory   Directory to process
+  -h | -help        Print the usage
+
+USAGE
+    exit 1
+}
+
+searchDirs="$FOAM_APPBIN $FOAM_USER_APPBIN"
+while [ "$#" -gt 0 ]
+do
+    case "$1" in
+        -h | -help)
+            usage
+            ;;
+        -d | -directory)
+            searchDirs="$2"
+            [ -d $searchDirs ] || usage "directory not found '$searchDirs'"
+            shift
+            ;;
+        -*)
+            usage "unknown option: '$1'"
+            ;;
+        *)
+            outFile=$1
+            break
+            ;;
+    esac
+    shift
+done
+
+[ -z $outFile ] && usage
+\rm -f $outFile
+touch $outFile
+
+
+writeFilterFunction()
+{
+    cat<<WRITEFILTER >> $1
+unset -f _filter_opts
+_filter_opts()
+{
+    local allOpts=\$1
+    local applied=\$2
+    for o in \${allOpts}; do
+        [ "\${applied/\$o/}" == "\${applied}" ] && echo \$o
+    done
+}
+
+WRITEFILTER
+}
+
+
+commonOptions()
+{
+    local options=$@
+    local indent1="        "
+    local indent2="            "
+    for o in ${options[@]}; do
+        case $o in
+            -case)
+                echo "${indent1}-case)"
+                echo "${indent2}COMPREPLY=(\$(compgen -d -- \${cur}))"
+                echo "${indent2};;"
+                ;;
+            -srcDoc|-help)
+                echo "${indent1}-srcDoc|-help)"
+                echo "${indent2}COMPREPLY=()"
+                echo "${indent2};;"
+                ;;
+            -time)
+                echo "${indent1}-time)"
+                echo "${indent2}COMPREPLY=(\$(compgen -d -X '![-0-9]*' -- \${cur}))"
+                echo "${indent2};;"
+                ;;
+            -region)
+                echo "${indent1}-region)"
+                echo "${indent2}local regions=\$(sed 's#/##g' <<< \$([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))"
+                echo "${indent2}COMPREPLY=(\$(compgen -W \"\$regions\" -- \${cur}))"
+                echo "${indent2};;"
+                ;;
+            *Dict)
+                echo "${indent1}*Dict)"
+#                echo "${indent2}local dirs=\$(\ls -d s*/)"
+#                echo "${indent2}local files=\$(\ls -f | grep Dict)"
+#                echo "${indent2}COMPREPLY=(\$(compgen -W \"\$dirs \$files\" -- \${cur}))"
+                echo "${indent2}COMPREPLY=(\$(compgen -f -- \${cur}))"
+                echo "${indent2};;"
+                ;;
+        esac
+    done
+}
+
+
+writeFilterFunction $outFile
+
+for dir in ${searchDirs}
+do
+    echo "Processing directory $dir"
+
+    apps=($(\ls $dir))
+    for appName in "${apps[@]}"; do
+        appHelp=$($appName -help)
+
+        echo "Processing $appName"
+
+        # Options with args
+        optsWithArgs=($(awk '/^ {0,4}-[a-z]/ && /</ {print $1}' <<< "$appHelp"))
+
+        # Options without args
+        opts=($(awk '/^ {0,4}-[a-z]/ && !/</ {print $1}' <<< "$appHelp"))
+
+        cat<<WRITECOMPLETION >> $outFile
+unset -f _${appName}
+_${appName}()
+{
+    local cur="\${COMP_WORDS[COMP_CWORD]}"
+    local prev="\${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="${opts[@]} "
+    local optsWithArgs="${optsWithArgs[@]} "
+
+    case \${prev} in
+$(commonOptions ${optsWithArgs[@]})
+        *)
+            if [ "\${optsWithArgs/\${prev} /}" != "\${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=(\$(compgen -f -- \${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=\$(_filter_opts "\${opts}" "\${COMP_LINE}")
+                optsWithArgs=\$(_filter_opts "\${optsWithArgs}" "\${COMP_LINE}")
+                COMPREPLY=(\$(compgen -W "\${opts} \${optsWithArgs}" -- \${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _${appName} $appName
+
+WRITECOMPLETION
+    done
+done
+
+unset searchDirs writeFilterFunction commonOptions
+
+
+#------------------------------------------------------------------------------
diff --git a/etc/bashrc b/etc/bashrc
index ccc6a3eebcc2ef45dce00947fa3810d96f43a6a1..188c0a133c65d3fd2ed5aa1dd54080a796a20e5f 100644
--- a/etc/bashrc
+++ b/etc/bashrc
@@ -170,6 +170,7 @@ export PATH LD_LIBRARY_PATH MANPATH
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~
 _foamEtc config.sh/settings
 _foamEtc config.sh/aliases
+_foamEtc config.sh/bashcompletion
 
 
 # Source user setup files for optional packages
diff --git a/etc/config.sh/bashcompletion b/etc/config.sh/bashcompletion
new file mode 100644
index 0000000000000000000000000000000000000000..34fe2f5e915d2e807101c63ee80e6cfd82e9987b
--- /dev/null
+++ b/etc/config.sh/bashcompletion
@@ -0,0 +1,8185 @@
+unset -f _filter_opts
+_filter_opts()
+{
+    local allOpts=$1
+    local applied=$2
+    for o in ${allOpts}; do
+        [ "${applied/$o/}" == "${applied}" ] && echo $o
+    done
+}
+
+unset -f _adiabaticFlameT
+_adiabaticFlameT()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _adiabaticFlameT adiabaticFlameT
+
+unset -f _adjointShapeOptimizationFoam
+_adjointShapeOptimizationFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _adjointShapeOptimizationFoam adjointShapeOptimizationFoam
+
+unset -f _ansysToFoam
+_ansysToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _ansysToFoam ansysToFoam
+
+unset -f _applyBoundaryLayer
+_applyBoundaryLayer()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots -ybl "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _applyBoundaryLayer applyBoundaryLayer
+
+unset -f _attachMesh
+_attachMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _attachMesh attachMesh
+
+unset -f _autoPatch
+_autoPatch()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _autoPatch autoPatch
+
+unset -f _blockMesh
+_blockMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-blockTopology -noClean -noFunctionObjects -sets -srcDoc -doc -help "
+    local optsWithArgs="-case -dict -region "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _blockMesh blockMesh
+
+unset -f _boundaryFoam
+_boundaryFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _boundaryFoam boundaryFoam
+
+unset -f _boxTurb
+_boxTurb()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _boxTurb boxTurb
+
+unset -f _buoyantBoussinesqPimpleFoam
+_buoyantBoussinesqPimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _buoyantBoussinesqPimpleFoam buoyantBoussinesqPimpleFoam
+
+unset -f _buoyantBoussinesqSimpleFoam
+_buoyantBoussinesqSimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _buoyantBoussinesqSimpleFoam buoyantBoussinesqSimpleFoam
+
+unset -f _buoyantPimpleFoam
+_buoyantPimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _buoyantPimpleFoam buoyantPimpleFoam
+
+unset -f _buoyantSimpleFoam
+_buoyantSimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _buoyantSimpleFoam buoyantSimpleFoam
+
+unset -f _cavitatingDyMFoam
+_cavitatingDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _cavitatingDyMFoam cavitatingDyMFoam
+
+unset -f _cavitatingFoam
+_cavitatingFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _cavitatingFoam cavitatingFoam
+
+unset -f _cfx4ToFoam
+_cfx4ToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _cfx4ToFoam cfx4ToFoam
+
+unset -f _changeDictionary
+_changeDictionary()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -disablePatchGroups -enableFunctionEntries -latestTime -literalRE -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -instance -region -roots -subDict -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _changeDictionary changeDictionary
+
+unset -f _checkMesh
+_checkMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-allGeometry -allTopology -constant -latestTime -meshQuality -newTimes -noFunctionObjects -noTopology -noZero -parallel -writeAllFields -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots -time -writeFields -writeSets "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _checkMesh checkMesh
+
+unset -f _chemFoam
+_chemFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _chemFoam chemFoam
+
+unset -f _chemkinToFoam
+_chemkinToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-newFormat -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _chemkinToFoam chemkinToFoam
+
+unset -f _chtMultiRegionFoam
+_chtMultiRegionFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _chtMultiRegionFoam chtMultiRegionFoam
+
+unset -f _chtMultiRegionSimpleFoam
+_chtMultiRegionSimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _chtMultiRegionSimpleFoam chtMultiRegionSimpleFoam
+
+unset -f _coalChemistryFoam
+_coalChemistryFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _coalChemistryFoam coalChemistryFoam
+
+unset -f _coldEngineFoam
+_coldEngineFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _coldEngineFoam coldEngineFoam
+
+unset -f _collapseEdges
+_collapseEdges()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-collapseFaces -constant -latestTime -newTimes -noFunctionObjects -noZero -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -collapseFaceSet -decomposeParDict -dict -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _collapseEdges collapseEdges
+
+unset -f _combinePatchFaces
+_combinePatchFaces()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-meshQuality -noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -concaveAngle -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _combinePatchFaces combinePatchFaces
+
+unset -f _compressibleInterDyMFoam
+_compressibleInterDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _compressibleInterDyMFoam compressibleInterDyMFoam
+
+unset -f _compressibleInterFoam
+_compressibleInterFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _compressibleInterFoam compressibleInterFoam
+
+unset -f _compressibleMultiphaseInterFoam
+_compressibleMultiphaseInterFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _compressibleMultiphaseInterFoam compressibleMultiphaseInterFoam
+
+unset -f _createBaffles
+_createBaffles()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _createBaffles createBaffles
+
+unset -f _createExternalCoupledPatchGeometry
+_createExternalCoupledPatchGeometry()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -commsDir -decomposeParDict -region -regions -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _createExternalCoupledPatchGeometry createExternalCoupledPatchGeometry
+
+unset -f _createPatch
+_createPatch()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -writeObj -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _createPatch createPatch
+
+unset -f _createZeroDirectory
+_createZeroDirectory()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots -templateDir "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _createZeroDirectory createZeroDirectory
+
+unset -f _datToFoam
+_datToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _datToFoam datToFoam
+
+unset -f _decomposePar
+_decomposePar()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-allRegions -cellDist -constant -copyUniform -copyZero -fields -force -ifRequired -latestTime -newTimes -noFunctionObjects -noSets -noZero -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _decomposePar decomposePar
+
+unset -f _deformedGeom
+_deformedGeom()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _deformedGeom deformedGeom
+
+unset -f _dnsFoam
+_dnsFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _dnsFoam dnsFoam
+
+unset -f _DPMDyMFoam
+_DPMDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -cloudName -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _DPMDyMFoam DPMDyMFoam
+
+unset -f _DPMFoam
+_DPMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -cloud -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _DPMFoam DPMFoam
+
+unset -f _driftFluxFoam
+_driftFluxFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _driftFluxFoam driftFluxFoam
+
+unset -f _dsmcFoam
+_dsmcFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _dsmcFoam dsmcFoam
+
+unset -f _dsmcInitialise
+_dsmcInitialise()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _dsmcInitialise dsmcInitialise
+
+unset -f _electrostaticFoam
+_electrostaticFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _electrostaticFoam electrostaticFoam
+
+unset -f _engineCompRatio
+_engineCompRatio()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _engineCompRatio engineCompRatio
+
+unset -f _engineFoam
+_engineFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _engineFoam engineFoam
+
+unset -f _engineSwirl
+_engineSwirl()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _engineSwirl engineSwirl
+
+unset -f _equilibriumCO
+_equilibriumCO()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _equilibriumCO equilibriumCO
+
+unset -f _equilibriumFlameT
+_equilibriumFlameT()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _equilibriumFlameT equilibriumFlameT
+
+unset -f _extrude2DMesh
+_extrude2DMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _extrude2DMesh extrude2DMesh
+
+unset -f _extrudeMesh
+_extrudeMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _extrudeMesh extrudeMesh
+
+unset -f _extrudeToRegionMesh
+_extrudeToRegionMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _extrudeToRegionMesh extrudeToRegionMesh
+
+unset -f _faceAgglomerate
+_faceAgglomerate()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _faceAgglomerate faceAgglomerate
+
+unset -f _financialFoam
+_financialFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _financialFoam financialFoam
+
+unset -f _fireFoam
+_fireFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _fireFoam fireFoam
+
+unset -f _fireToFoam
+_fireToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-ascii -check -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _fireToFoam fireToFoam
+
+unset -f _flattenMesh
+_flattenMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _flattenMesh flattenMesh
+
+unset -f _fluent3DMeshToFoam
+_fluent3DMeshToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-cubit -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -ignoreCellGroups -ignoreFaceGroups -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _fluent3DMeshToFoam fluent3DMeshToFoam
+
+unset -f _fluentMeshToFoam
+_fluentMeshToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -writeSets -writeZones -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _fluentMeshToFoam fluentMeshToFoam
+
+unset -f _foamDataToFluent
+_foamDataToFluent()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help "
+    local optsWithArgs="-case -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamDataToFluent foamDataToFluent
+
+unset -f _foamDictionary
+_foamDictionary()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-disableFunctionEntries -expand -includes -keywords -noFunctionObjects -parallel -remove -value -srcDoc -doc -help "
+    local optsWithArgs="-add -case -decomposeParDict -diff -entry -roots -set "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamDictionary foamDictionary
+
+unset -f _foamFormatConvert
+_foamFormatConvert()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -enableFunctionEntries -latestTime -newTimes -noConstant -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamFormatConvert foamFormatConvert
+
+unset -f _foamHelp
+_foamHelp()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamHelp foamHelp
+
+unset -f _foamList
+_foamList()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-compressibleTurbulenceModels -functionObjects -fvOptions -incompressibleTurbulenceModels -noFunctionObjects -registeredSwitches -switches -unset -srcDoc -doc -help "
+    local optsWithArgs="-case -scalarBCs -vectorBCs "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamList foamList
+
+unset -f _foamListTimes
+_foamListTimes()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noZero -processor -rm -withZero -srcDoc -doc -help "
+    local optsWithArgs="-case -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamListTimes foamListTimes
+
+unset -f _foamMeshToFluent
+_foamMeshToFluent()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamMeshToFluent foamMeshToFluent
+
+unset -f _foamToEnsight
+_foamToEnsight()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-ascii -constant -deprecatedOrder -latestTime -newTimes -noFunctionObjects -noLagrangian -noPatches -noZero -nodeValues -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -cellZone -decomposeParDict -faceZones -fields -name -patches -region -roots -time -width "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamToEnsight foamToEnsight
+
+unset -f _foamToEnsightParts
+_foamToEnsightParts()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-ascii -constant -latestTime -newTimes -noFunctionObjects -noLagrangian -noMesh -noZero -srcDoc -doc -help "
+    local optsWithArgs="-case -index -name -time -width "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamToEnsightParts foamToEnsightParts
+
+unset -f _foamToFireMesh
+_foamToFireMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-ascii -constant -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help "
+    local optsWithArgs="-case -scale -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamToFireMesh foamToFireMesh
+
+unset -f _foamToGMV
+_foamToGMV()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamToGMV foamToGMV
+
+unset -f _foamToStarMesh
+_foamToStarMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noBnd -noFunctionObjects -noZero -srcDoc -doc -help "
+    local optsWithArgs="-case -scale -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamToStarMesh foamToStarMesh
+
+unset -f _foamToSurface
+_foamToSurface()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noZero -tri -srcDoc -doc -help "
+    local optsWithArgs="-case -scale -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamToSurface foamToSurface
+
+unset -f _foamToTetDualMesh
+_foamToTetDualMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -noFunctionObjects -noZero -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamToTetDualMesh foamToTetDualMesh
+
+unset -f _foamToVTK
+_foamToVTK()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-allPatches -ascii -constant -latestTime -nearCellValue -newTimes -noFaceZones -noFunctionObjects -noInternal -noLagrangian -noLinks -noPointValues -noZero -parallel -poly -surfaceFields -useTimeName -srcDoc -doc -help "
+    local optsWithArgs="-case -cellSet -decomposeParDict -excludePatches -faceSet -fields -pointSet -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamToVTK foamToVTK
+
+unset -f _foamUpgradeCyclics
+_foamUpgradeCyclics()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -enableFunctionEntries -latestTime -newTimes -noFunctionObjects -noZero -parallel -test -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamUpgradeCyclics foamUpgradeCyclics
+
+unset -f _foamyHexMesh
+_foamyHexMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-checkGeometry -conformationOnly -noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamyHexMesh foamyHexMesh
+
+unset -f _foamyQuadMesh
+_foamyQuadMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -srcDoc -doc -help "
+    local optsWithArgs="-case -pointsFile "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _foamyQuadMesh foamyQuadMesh
+
+unset -f _gambitToFoam
+_gambitToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _gambitToFoam gambitToFoam
+
+unset -f _gmshToFoam
+_gmshToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-keepOrientation -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -region "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _gmshToFoam gmshToFoam
+
+unset -f _icoFoam
+_icoFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _icoFoam icoFoam
+
+unset -f _icoUncoupledKinematicParcelDyMFoam
+_icoUncoupledKinematicParcelDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -cloud -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _icoUncoupledKinematicParcelDyMFoam icoUncoupledKinematicParcelDyMFoam
+
+unset -f _icoUncoupledKinematicParcelFoam
+_icoUncoupledKinematicParcelFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -cloud -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _icoUncoupledKinematicParcelFoam icoUncoupledKinematicParcelFoam
+
+unset -f _ideasUnvToFoam
+_ideasUnvToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-dump -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _ideasUnvToFoam ideasUnvToFoam
+
+unset -f _insideCells
+_insideCells()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _insideCells insideCells
+
+unset -f _interCondensatingEvaporatingFoam
+_interCondensatingEvaporatingFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _interCondensatingEvaporatingFoam interCondensatingEvaporatingFoam
+
+unset -f _interDyMFoam
+_interDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _interDyMFoam interDyMFoam
+
+unset -f _interFoam
+_interFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _interFoam interFoam
+
+unset -f _interMixingFoam
+_interMixingFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _interMixingFoam interMixingFoam
+
+unset -f _interPhaseChangeDyMFoam
+_interPhaseChangeDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _interPhaseChangeDyMFoam interPhaseChangeDyMFoam
+
+unset -f _interPhaseChangeFoam
+_interPhaseChangeFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _interPhaseChangeFoam interPhaseChangeFoam
+
+unset -f _kivaToFoam
+_kivaToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -file -version -zHeadMin "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _kivaToFoam kivaToFoam
+
+unset -f _laplacianFoam
+_laplacianFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _laplacianFoam laplacianFoam
+
+unset -f _magneticFoam
+_magneticFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noB -noFunctionObjects -noH -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _magneticFoam magneticFoam
+
+unset -f _mapFields
+_mapFields()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-consistent -noFunctionObjects -parallelSource -parallelTarget -subtract -srcDoc -doc -help "
+    local optsWithArgs="-case -mapMethod -sourceDecomposeParDict -sourceRegion -sourceTime -targetDecomposeParDict -targetRegion "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mapFields mapFields
+
+unset -f _mapFieldsPar
+_mapFieldsPar()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-consistent -noFunctionObjects -noLagrangian -parallel -subtract -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -fields -mapMethod -patchMapMethod -roots -sourceRegion -sourceTime -targetRegion "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mapFieldsPar mapFieldsPar
+
+unset -f _mdEquilibrationFoam
+_mdEquilibrationFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mdEquilibrationFoam mdEquilibrationFoam
+
+unset -f _mdFoam
+_mdFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mdFoam mdFoam
+
+unset -f _mdInitialise
+_mdInitialise()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mdInitialise mdInitialise
+
+unset -f _mergeMeshes
+_mergeMeshes()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-addRegion -case -decomposeParDict -masterRegion -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mergeMeshes mergeMeshes
+
+unset -f _mergeOrSplitBaffles
+_mergeOrSplitBaffles()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-detectOnly -noFunctionObjects -overwrite -parallel -split -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mergeOrSplitBaffles mergeOrSplitBaffles
+
+unset -f _mhdFoam
+_mhdFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mhdFoam mhdFoam
+
+unset -f _mirrorMesh
+_mirrorMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mirrorMesh mirrorMesh
+
+unset -f _mixtureAdiabaticFlameT
+_mixtureAdiabaticFlameT()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mixtureAdiabaticFlameT mixtureAdiabaticFlameT
+
+unset -f _modifyMesh
+_modifyMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _modifyMesh modifyMesh
+
+unset -f _moveDynamicMesh
+_moveDynamicMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-checkAMI -noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _moveDynamicMesh moveDynamicMesh
+
+unset -f _moveEngineMesh
+_moveEngineMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _moveEngineMesh moveEngineMesh
+
+unset -f _moveMesh
+_moveMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _moveMesh moveMesh
+
+unset -f _MPPICDyMFoam
+_MPPICDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -cloudName -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _MPPICDyMFoam MPPICDyMFoam
+
+unset -f _MPPICFoam
+_MPPICFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -cloud -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _MPPICFoam MPPICFoam
+
+unset -f _MPPICInterFoam
+_MPPICInterFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _MPPICInterFoam MPPICInterFoam
+
+unset -f _mshToFoam
+_mshToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-hex -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _mshToFoam mshToFoam
+
+unset -f _multiphaseEulerFoam
+_multiphaseEulerFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _multiphaseEulerFoam multiphaseEulerFoam
+
+unset -f _multiphaseInterDyMFoam
+_multiphaseInterDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _multiphaseInterDyMFoam multiphaseInterDyMFoam
+
+unset -f _multiphaseInterFoam
+_multiphaseInterFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _multiphaseInterFoam multiphaseInterFoam
+
+unset -f _netgenNeutralToFoam
+_netgenNeutralToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _netgenNeutralToFoam netgenNeutralToFoam
+
+unset -f _noise
+_noise()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _noise noise
+
+unset -f _nonNewtonianIcoFoam
+_nonNewtonianIcoFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _nonNewtonianIcoFoam nonNewtonianIcoFoam
+
+unset -f _objToVTK
+_objToVTK()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _objToVTK objToVTK
+
+unset -f _orientFaceZone
+_orientFaceZone()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _orientFaceZone orientFaceZone
+
+unset -f _particleTracks
+_particleTracks()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _particleTracks particleTracks
+
+unset -f _patchSummary
+_patchSummary()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -expand -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _patchSummary patchSummary
+
+unset -f _pdfPlot
+_pdfPlot()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _pdfPlot pdfPlot
+
+unset -f _PDRFoam
+_PDRFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _PDRFoam PDRFoam
+
+unset -f _PDRMesh
+_PDRMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _PDRMesh PDRMesh
+
+unset -f _pimpleDyMFoam
+_pimpleDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _pimpleDyMFoam pimpleDyMFoam
+
+unset -f _pimpleFoam
+_pimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _pimpleFoam pimpleFoam
+
+unset -f _pisoFoam
+_pisoFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _pisoFoam pisoFoam
+
+unset -f _plot3dToFoam
+_plot3dToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noBlank -noFunctionObjects -singleBlock -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _plot3dToFoam plot3dToFoam
+
+unset -f _polyDualMesh
+_polyDualMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-concaveMultiCells -doNotPreserveFaceZones -noFunctionObjects -overwrite -splitAllFaces -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _polyDualMesh polyDualMesh
+
+unset -f _porousSimpleFoam
+_porousSimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _porousSimpleFoam porousSimpleFoam
+
+unset -f _postChannel
+_postChannel()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help "
+    local optsWithArgs="-case -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _postChannel postChannel
+
+unset -f _postProcess
+_postProcess()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -list -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -field -fields -func -funcs -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _postProcess postProcess
+
+unset -f _potentialFoam
+_potentialFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-initialiseUBCs -noFunctionObjects -parallel -withFunctionObjects -writePhi -writep -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -pName -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _potentialFoam potentialFoam
+
+unset -f _potentialFreeSurfaceDyMFoam
+_potentialFreeSurfaceDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _potentialFreeSurfaceDyMFoam potentialFreeSurfaceDyMFoam
+
+unset -f _potentialFreeSurfaceFoam
+_potentialFreeSurfaceFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _potentialFreeSurfaceFoam potentialFreeSurfaceFoam
+
+unset -f _reactingFoam
+_reactingFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _reactingFoam reactingFoam
+
+unset -f _reactingMultiphaseEulerFoam
+_reactingMultiphaseEulerFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _reactingMultiphaseEulerFoam reactingMultiphaseEulerFoam
+
+unset -f _reactingParcelFilmFoam
+_reactingParcelFilmFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _reactingParcelFilmFoam reactingParcelFilmFoam
+
+unset -f _reactingParcelFoam
+_reactingParcelFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _reactingParcelFoam reactingParcelFoam
+
+unset -f _reactingTwoPhaseEulerFoam
+_reactingTwoPhaseEulerFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _reactingTwoPhaseEulerFoam reactingTwoPhaseEulerFoam
+
+unset -f _reconstructPar
+_reconstructPar()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-allRegions -constant -latestTime -newTimes -noFields -noFunctionObjects -noLagrangian -noSets -noZero -withZero -srcDoc -doc -help "
+    local optsWithArgs="-case -fields -lagrangianFields -region -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _reconstructPar reconstructPar
+
+unset -f _reconstructParMesh
+_reconstructParMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-cellDist -constant -fullMatch -latestTime -newTimes -noFunctionObjects -noZero -withZero -srcDoc -doc -help "
+    local optsWithArgs="-case -mergeTol -region -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _reconstructParMesh reconstructParMesh
+
+unset -f _redistributePar
+_redistributePar()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-cellDist -constant -decompose -latestTime -newTimes -noFunctionObjects -noZero -overwrite -parallel -reconstruct -withZero -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -mergeTol -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _redistributePar redistributePar
+
+unset -f _refineHexMesh
+_refineHexMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-minSet -noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _refineHexMesh refineHexMesh
+
+unset -f _refinementLevel
+_refinementLevel()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -readLevel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _refinementLevel refinementLevel
+
+unset -f _refineMesh
+_refineMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-all -noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _refineMesh refineMesh
+
+unset -f _refineWallLayer
+_refineWallLayer()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots -useSet "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _refineWallLayer refineWallLayer
+
+unset -f _removeFaces
+_removeFaces()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _removeFaces removeFaces
+
+unset -f _renumberMesh
+_renumberMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -frontWidth -latestTime -noFunctionObjects -noZero -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _renumberMesh renumberMesh
+
+unset -f _rhoCentralDyMFoam
+_rhoCentralDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _rhoCentralDyMFoam rhoCentralDyMFoam
+
+unset -f _rhoCentralFoam
+_rhoCentralFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _rhoCentralFoam rhoCentralFoam
+
+unset -f _rhoPimpleDyMFoam
+_rhoPimpleDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _rhoPimpleDyMFoam rhoPimpleDyMFoam
+
+unset -f _rhoPimpleFoam
+_rhoPimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _rhoPimpleFoam rhoPimpleFoam
+
+unset -f _rhoPorousSimpleFoam
+_rhoPorousSimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _rhoPorousSimpleFoam rhoPorousSimpleFoam
+
+unset -f _rhoReactingBuoyantFoam
+_rhoReactingBuoyantFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _rhoReactingBuoyantFoam rhoReactingBuoyantFoam
+
+unset -f _rhoReactingFoam
+_rhoReactingFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _rhoReactingFoam rhoReactingFoam
+
+unset -f _rhoSimpleFoam
+_rhoSimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _rhoSimpleFoam rhoSimpleFoam
+
+unset -f _rotateMesh
+_rotateMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _rotateMesh rotateMesh
+
+unset -f _scalarTransportFoam
+_scalarTransportFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _scalarTransportFoam scalarTransportFoam
+
+unset -f _selectCells
+_selectCells()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _selectCells selectCells
+
+unset -f _setFields
+_setFields()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _setFields setFields
+
+unset -f _setSet
+_setSet()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -loop -newTimes -noFunctionObjects -noSync -noVTK -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-batch -case -decomposeParDict -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _setSet setSet
+
+unset -f _setsToZones
+_setsToZones()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFlipMap -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _setsToZones setsToZones
+
+unset -f _shallowWaterFoam
+_shallowWaterFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _shallowWaterFoam shallowWaterFoam
+
+unset -f _simpleCoalParcelFoam
+_simpleCoalParcelFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _simpleCoalParcelFoam simpleCoalParcelFoam
+
+unset -f _simpleFoam
+_simpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _simpleFoam simpleFoam
+
+unset -f _simpleReactingParcelFoam
+_simpleReactingParcelFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _simpleReactingParcelFoam simpleReactingParcelFoam
+
+unset -f _singleCellMesh
+_singleCellMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _singleCellMesh singleCellMesh
+
+unset -f _smapToFoam
+_smapToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _smapToFoam smapToFoam
+
+unset -f _snappyHexMesh
+_snappyHexMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-checkGeometry -noFunctionObjects -overwrite -parallel -profiling -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -outFile -patches -region -roots -surfaceSimplify "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _snappyHexMesh snappyHexMesh
+
+unset -f _snappyRefineMesh
+_snappyRefineMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _snappyRefineMesh snappyRefineMesh
+
+unset -f _solidDisplacementFoam
+_solidDisplacementFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _solidDisplacementFoam solidDisplacementFoam
+
+unset -f _solidEquilibriumDisplacementFoam
+_solidEquilibriumDisplacementFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _solidEquilibriumDisplacementFoam solidEquilibriumDisplacementFoam
+
+unset -f _sonicDyMFoam
+_sonicDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _sonicDyMFoam sonicDyMFoam
+
+unset -f _sonicFoam
+_sonicFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _sonicFoam sonicFoam
+
+unset -f _sonicLiquidFoam
+_sonicLiquidFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _sonicLiquidFoam sonicLiquidFoam
+
+unset -f _splitCells
+_splitCells()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-geometry -noFunctionObjects -overwrite -srcDoc -doc -help "
+    local optsWithArgs="-case -set -tol "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _splitCells splitCells
+
+unset -f _splitMesh
+_splitMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _splitMesh splitMesh
+
+unset -f _splitMeshRegions
+_splitMeshRegions()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-cellZones -cellZonesOnly -detectOnly -largestOnly -makeCellZones -noFunctionObjects -overwrite -parallel -prefixRegion -sloppyCellZones -useFaceZones -srcDoc -doc -help "
+    local optsWithArgs="-blockedFaces -case -cellZonesFileOnly -decomposeParDict -insidePoint -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _splitMeshRegions splitMeshRegions
+
+unset -f _sprayDyMFoam
+_sprayDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _sprayDyMFoam sprayDyMFoam
+
+unset -f _sprayEngineFoam
+_sprayEngineFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _sprayEngineFoam sprayEngineFoam
+
+unset -f _sprayFoam
+_sprayFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _sprayFoam sprayFoam
+
+unset -f _SRFPimpleFoam
+_SRFPimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _SRFPimpleFoam SRFPimpleFoam
+
+unset -f _SRFSimpleFoam
+_SRFSimpleFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _SRFSimpleFoam SRFSimpleFoam
+
+unset -f _star4ToFoam
+_star4ToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-ascii -noFunctionObjects -solids -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _star4ToFoam star4ToFoam
+
+unset -f _steadyParticleTracks
+_steadyParticleTracks()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noZero -srcDoc -doc -help "
+    local optsWithArgs="-case -dict -region -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _steadyParticleTracks steadyParticleTracks
+
+unset -f _stitchMesh
+_stitchMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -partial -perfect -srcDoc -doc -help "
+    local optsWithArgs="-case -region -toleranceDict "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _stitchMesh stitchMesh
+
+unset -f _subsetMesh
+_subsetMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -overwrite -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -patch -patches -region -resultTime -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _subsetMesh subsetMesh
+
+unset -f _surfaceAdd
+_surfaceAdd()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-mergeRegions -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -points "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceAdd surfaceAdd
+
+unset -f _surfaceBooleanFeatures
+_surfaceBooleanFeatures()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-invertedSpace -noFunctionObjects -perturb -surf1Baffle -surf2Baffle -srcDoc -doc -help "
+    local optsWithArgs="-case -trim "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceBooleanFeatures surfaceBooleanFeatures
+
+unset -f _surfaceCheck
+_surfaceCheck()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-blockMesh -checkSelfIntersection -noFunctionObjects -splitNonManifold -verbose -srcDoc -doc -help "
+    local optsWithArgs="-case -outputThreshold "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceCheck surfaceCheck
+
+unset -f _surfaceClean
+_surfaceClean()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noClean -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceClean surfaceClean
+
+unset -f _surfaceCoarsen
+_surfaceCoarsen()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceCoarsen surfaceCoarsen
+
+unset -f _surfaceConvert
+_surfaceConvert()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-clean -group -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -scale -writePrecision "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceConvert surfaceConvert
+
+unset -f _surfaceFeatureConvert
+_surfaceFeatureConvert()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceFeatureConvert surfaceFeatureConvert
+
+unset -f _surfaceFeatureExtract
+_surfaceFeatureExtract()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-srcDoc -doc -help "
+    local optsWithArgs="-case -dict "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceFeatureExtract surfaceFeatureExtract
+
+unset -f _surfaceFind
+_surfaceFind()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -x -y -z "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceFind surfaceFind
+
+unset -f _surfaceHookUp
+_surfaceHookUp()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -dict "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceHookUp surfaceHookUp
+
+unset -f _surfaceInertia
+_surfaceInertia()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -shellProperties -srcDoc -doc -help "
+    local optsWithArgs="-case -density -referencePoint "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceInertia surfaceInertia
+
+unset -f _surfaceInflate
+_surfaceInflate()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-checkSelfIntersection -debug -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -featureAngle -nSmooth "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceInflate surfaceInflate
+
+unset -f _surfaceLambdaMuSmooth
+_surfaceLambdaMuSmooth()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-srcDoc -doc -help "
+    local optsWithArgs="-featureFile "
+
+    case ${prev} in
+
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceLambdaMuSmooth surfaceLambdaMuSmooth
+
+unset -f _surfaceMeshConvert
+_surfaceMeshConvert()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-clean -noFunctionObjects -tri -srcDoc -doc -help "
+    local optsWithArgs="-case -dict -from -scaleIn -scaleOut -to "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceMeshConvert surfaceMeshConvert
+
+unset -f _surfaceMeshConvertTesting
+_surfaceMeshConvertTesting()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-clean -noFunctionObjects -orient -stdout -surfMesh -testModify -triFace -triSurface -unsorted -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceMeshConvertTesting surfaceMeshConvertTesting
+
+unset -f _surfaceMeshExport
+_surfaceMeshExport()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-clean -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -dict -from -name -scaleIn -scaleOut -to "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceMeshExport surfaceMeshExport
+
+unset -f _surfaceMeshImport
+_surfaceMeshImport()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-clean -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -dict -from -name -scaleIn -scaleOut -to "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceMeshImport surfaceMeshImport
+
+unset -f _surfaceMeshInfo
+_surfaceMeshInfo()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-areas -noFunctionObjects -xml -srcDoc -doc -help "
+    local optsWithArgs="-case -scale "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceMeshInfo surfaceMeshInfo
+
+unset -f _surfaceMeshTriangulate
+_surfaceMeshTriangulate()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -excludeProcPatches -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -faceZones -patches -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceMeshTriangulate surfaceMeshTriangulate
+
+unset -f _surfaceOrient
+_surfaceOrient()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-inside -noFunctionObjects -usePierceTest -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceOrient surfaceOrient
+
+unset -f _surfacePatch
+_surfacePatch()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -dict "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfacePatch surfacePatch
+
+unset -f _surfacePointMerge
+_surfacePointMerge()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfacePointMerge surfacePointMerge
+
+unset -f _surfaceRedistributePar
+_surfaceRedistributePar()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-keepNonMapped -noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceRedistributePar surfaceRedistributePar
+
+unset -f _surfaceRefineRedGreen
+_surfaceRefineRedGreen()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceRefineRedGreen surfaceRefineRedGreen
+
+unset -f _surfaceSplitByPatch
+_surfaceSplitByPatch()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceSplitByPatch surfaceSplitByPatch
+
+unset -f _surfaceSplitByTopology
+_surfaceSplitByTopology()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-srcDoc -doc -help "
+    local optsWithArgs=" "
+
+    case ${prev} in
+
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceSplitByTopology surfaceSplitByTopology
+
+unset -f _surfaceSplitNonManifolds
+_surfaceSplitNonManifolds()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-debug -noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceSplitNonManifolds surfaceSplitNonManifolds
+
+unset -f _surfaceSubset
+_surfaceSubset()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceSubset surfaceSubset
+
+unset -f _surfaceToPatch
+_surfaceToPatch()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -faceSet -tol "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceToPatch surfaceToPatch
+
+unset -f _surfaceTransformPoints
+_surfaceTransformPoints()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case -rollPitchYaw -rotate -scale -translate -yawPitchRoll "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _surfaceTransformPoints surfaceTransformPoints
+
+unset -f _temporalInterpolate
+_temporalInterpolate()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -divisions -fields -interpolationType -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _temporalInterpolate temporalInterpolate
+
+unset -f _tetgenToFoam
+_tetgenToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFaceFile -noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _tetgenToFoam tetgenToFoam
+
+unset -f _thermoFoam
+_thermoFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _thermoFoam thermoFoam
+
+unset -f _topoSet
+_topoSet()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noSync -noZero -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -dict -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _topoSet topoSet
+
+unset -f _transformPoints
+_transformPoints()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -rotateFields -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -rollPitchYaw -roots -rotate -scale -translate -yawPitchRoll "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _transformPoints transformPoints
+
+unset -f _twoLiquidMixingFoam
+_twoLiquidMixingFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _twoLiquidMixingFoam twoLiquidMixingFoam
+
+unset -f _twoPhaseEulerFoam
+_twoPhaseEulerFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _twoPhaseEulerFoam twoPhaseEulerFoam
+
+unset -f _uncoupledKinematicParcelFoam
+_uncoupledKinematicParcelFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -cloud -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _uncoupledKinematicParcelFoam uncoupledKinematicParcelFoam
+
+unset -f _viewFactorsGen
+_viewFactorsGen()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _viewFactorsGen viewFactorsGen
+
+unset -f _vtkUnstructuredToFoam
+_vtkUnstructuredToFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -srcDoc -doc -help "
+    local optsWithArgs="-case "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _vtkUnstructuredToFoam vtkUnstructuredToFoam
+
+unset -f _wallFunctionTable
+_wallFunctionTable()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _wallFunctionTable wallFunctionTable
+
+unset -f _writeMeshObj
+_writeMeshObj()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-constant -latestTime -newTimes -noFunctionObjects -noZero -parallel -patchEdges -patchFaces -srcDoc -doc -help "
+    local optsWithArgs="-case -cell -cellSet -decomposeParDict -face -faceSet -point -region -roots -time "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        -time)
+            COMPREPLY=($(compgen -d -X '![-0-9]*' -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _writeMeshObj writeMeshObj
+
+unset -f _XiDyMFoam
+_XiDyMFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _XiDyMFoam XiDyMFoam
+
+unset -f _XiFoam
+_XiFoam()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -postProcess -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _XiFoam XiFoam
+
+unset -f _zipUpMesh
+_zipUpMesh()
+{
+    local cur="${COMP_WORDS[COMP_CWORD]}"
+    local prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+    local opts="-noFunctionObjects -parallel -srcDoc -doc -help "
+    local optsWithArgs="-case -decomposeParDict -region -roots "
+
+    case ${prev} in
+        -case)
+            COMPREPLY=($(compgen -d -- ${cur}))
+            ;;
+        *Dict)
+            COMPREPLY=($(compgen -f -- ${cur}))
+            ;;
+        -region)
+            local regions=$(sed 's#/##g' <<< $([ -d system ] && (\cd system && (\ls -d */ 2>/dev/null))))
+            COMPREPLY=($(compgen -W "$regions" -- ${cur}))
+            ;;
+        *)
+            if [ "${optsWithArgs/${prev} /}" != "${optsWithArgs}" ]; then
+                # Unknown what type of arg follows - set to files
+                # not always correct but at least can still navigate path if
+                # needed...
+                COMPREPLY=($(compgen -f -- ${cur}))
+            else
+                # Catch-all - present all remaining options
+                opts=$(_filter_opts "${opts}" "${COMP_LINE}")
+                optsWithArgs=$(_filter_opts "${optsWithArgs}" "${COMP_LINE}")
+                COMPREPLY=($(compgen -W "${opts} ${optsWithArgs}" -- ${cur}))
+            fi
+            ;;
+    esac
+
+    return 0
+}
+complete -o nospace -F _zipUpMesh zipUpMesh
+
diff --git a/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H
index 6ba129558ac5ec318dc1aaf272210ad6004c1f2e..09f2e74442544a312f849e20fb6c59432dd5b329 100644
--- a/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H
+++ b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H
@@ -42,7 +42,7 @@ Description
     Read csv format:
     \verbatim
         readerType      csv;
-        fileName        "$FOAM_CASE/constant/p0vsTime.csv";
+        file            "$FOAM_CASE/constant/p0vsTime.csv";
         hasHeaderLine   true;   // skip first line
         timeColumn      0;      // time is in column 0
         valueColumns    (1);    // value starts in column 1
diff --git a/src/OpenFOAM/meshes/meshTools/mergePoints.C b/src/OpenFOAM/meshes/meshTools/mergePoints.C
index 2b99235b72b3fabf38346b39b5937317c11c2567..041a6f819440b3ed6b88f06b1a21d1296d4b8c53 100644
--- a/src/OpenFOAM/meshes/meshTools/mergePoints.C
+++ b/src/OpenFOAM/meshes/meshTools/mergePoints.C
@@ -41,22 +41,28 @@ Foam::label Foam::mergePoints
 {
     typedef typename PointList::value_type point_type;
 
-    // Create a old to new point mapping array
-    pointMap.setSize(points.size());
+    const label nPoints = points.size();
+
+    // Create an old to new point mapping array
+    pointMap.setSize(nPoints);
     pointMap = -1;
 
-    if (points.empty())
+    if (!nPoints)
     {
         return 0;
     }
 
-    // Explicitly convert to Field to support various list types
-    tmp<Field<point_type>> tPoints(new Field<point_type>(points));
-
     point_type compareOrigin = origin;
     if (origin == point_type::max)
     {
-        compareOrigin = sum(tPoints())/points.size();
+        // Use average of input points to define a comparison origin.
+        // Same as sum(points)/nPoints, but handles different list types
+        compareOrigin = points[0];
+        for (label pointi=1; pointi < nPoints; ++pointi)
+        {
+            compareOrigin += points[pointi];
+        }
+        compareOrigin /= nPoints;
     }
 
     // We're comparing distance squared to origin first.
@@ -68,34 +74,31 @@ Foam::label Foam::mergePoints
     //     x^2+y^2+z^2 + 2*mergeTol*(x+z+y) + mergeTol^2*...
     // so the difference will be 2*mergeTol*(x+y+z)
 
-    const scalar mergeTolSqr = Foam::sqr(scalar(mergeTol));
+    const scalar mergeTolSqr = Foam::sqr(mergeTol);
 
     // Sort points by magSqr
-    const Field<point_type> d(tPoints - compareOrigin);
-
-    List<scalar> magSqrD(d.size());
-    forAll(d, pointi)
+    List<scalar> magSqrDist(nPoints);
+    forAll(points, pointi)
     {
-        magSqrD[pointi] = magSqr(d[pointi]);
+        magSqrDist[pointi] = magSqr(points[pointi] - compareOrigin);
     }
     labelList order;
-    Foam::sortedOrder(magSqrD, order);
+    Foam::sortedOrder(magSqrDist, order);
 
 
-    Field<scalar> sortedTol(points.size());
+    Field<scalar> sortedTol(nPoints);
     forAll(order, sortI)
     {
-        const label pointi = order[sortI];
+        const point_type& pt = points[order[sortI]];
 
-        // Convert to scalar precision
-        // NOTE: not yet using point_type template parameter
-        const point pt
-        (
-            scalar(d[pointi].x()),
-            scalar(d[pointi].y()),
-            scalar(d[pointi].z())
-        );
-        sortedTol[sortI] = 2*mergeTol*(mag(pt.x())+mag(pt.y())+mag(pt.z()));
+        // Use scalar precision
+        sortedTol[sortI] =
+            2*mergeTol*
+            (
+                mag(scalar(pt.x() - compareOrigin.x())),
+              + mag(scalar(pt.y() - compareOrigin.y())),
+              + mag(scalar(pt.z() - compareOrigin.z()))
+            );
     }
 
     label newPointi = 0;
@@ -104,11 +107,11 @@ Foam::label Foam::mergePoints
     label pointi = order[0];
     pointMap[pointi] = newPointi++;
 
-    for (label sortI = 1; sortI < order.size(); sortI++)
+    for (label sortI = 1; sortI < order.size(); ++sortI)
     {
         // Get original point index
         const label pointi = order[sortI];
-        const scalar mag2 = magSqrD[order[sortI]];
+        const scalar mag2 = magSqrDist[order[sortI]];
 
         // Convert to scalar precision
         // NOTE: not yet using point_type template parameter
@@ -127,8 +130,8 @@ Foam::label Foam::mergePoints
         (
             label prevSortI = sortI - 1;
             prevSortI >= 0
-         && (mag(magSqrD[order[prevSortI]] - mag2) <= sortedTol[sortI]);
-            prevSortI--
+         && (mag(magSqrDist[order[prevSortI]] - mag2) <= sortedTol[sortI]);
+            --prevSortI
         )
         {
             const label prevPointi = order[prevSortI];
diff --git a/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.H b/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.H
index 711bffe50769b1a9b7fe3798898266c6f2d8a161..fe427300c2feb847e39699b73770b14eebeeb7d0 100644
--- a/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.H
+++ b/src/OpenFOAM/primitives/functions/Function1/CSV/CSV.H
@@ -39,7 +39,7 @@ Description
             componentColumns    (1 2 3);    // component column indices
             separator           ",";        // optional (defaults to ",")
             mergeSeparators     no;         // merge multiple separators
-            fileName            "fileXYZ";  // name of csv data file
+            file                "fileXYZ";  // name of csv data file
             outOfBounds         clamp;      // optional out-of-bounds handling
             interpolationScheme linear;     // optional interpolation scheme
         }
diff --git a/src/conversion/fire/FIREMeshWriter.C b/src/conversion/fire/FIREMeshWriter.C
index 9c6146c3e00a9f4470432cd98807b7478df8cc58..2fc9de6e1f3574f832c14ad0fea8d551dae2739a 100644
--- a/src/conversion/fire/FIREMeshWriter.C
+++ b/src/conversion/fire/FIREMeshWriter.C
@@ -281,22 +281,22 @@ bool Foam::fileFormats::FIREMeshWriter::write(const fileName& meshName) const
         if (FIRECore::file3dExtensions.hasEnum(ext))
         {
             FIRECore::fileExt3d fireFileType = FIRECore::file3dExtensions[ext];
-            if (fireFileType == FIRECore::POLY_ASCII)
+            if (fireFileType == FIRECore::fileExt3d::POLY_ASCII)
             {
                 useBinary   = false;
                 useCompress = false;
             }
-            else if (fireFileType == FIRECore::POLY_BINARY)
+            else if (fireFileType == FIRECore::fileExt3d::POLY_BINARY)
             {
                 useBinary   = true;
                 useCompress = false;
             }
-            else if (fireFileType == FIRECore::POLY_ASCII_COMPRESSED)
+            else if (fireFileType == FIRECore::fileExt3d::POLY_ASCII_Z)
             {
                 useBinary   = false;
                 useCompress = true;
             }
-            else if (fireFileType == FIRECore::POLY_BINARY_COMPRESSED)
+            else if (fireFileType == FIRECore::fileExt3d::POLY_BINARY_Z)
             {
                 useBinary   = true;
                 useCompress = true;
diff --git a/src/fileFormats/coordSet/coordSet.C b/src/fileFormats/coordSet/coordSet.C
index 5d7dd92b79a49cff7462f972e5186bc1ea672717..c4149dc943582a3a4723846a98c744437016b1c5 100644
--- a/src/fileFormats/coordSet/coordSet.C
+++ b/src/fileFormats/coordSet/coordSet.C
@@ -27,26 +27,15 @@ License
 
 // * * * * * * * * * * * * * Static Member Data  * * * * * * * * * * * * * * //
 
-namespace Foam
-{
-    template<>
-    const char* Foam::NamedEnum
-    <
-        Foam::coordSet::coordFormat,
-        5
-    >::names[] =
+const Foam::Enum<Foam::coordSet::coordFormat>
+    Foam::coordSet::coordFormatNames_
     {
-        "xyz",
-        "x",
-        "y",
-        "z",
-        "distance"
+        { coordFormat::XYZ, "xyz" },
+        { coordFormat::X, "x" },
+        { coordFormat::Y, "y" },
+        { coordFormat::Z, "z" },
+        { coordFormat::DISTANCE, "distance" }
     };
-}
-
-
-const Foam::NamedEnum<Foam::coordSet::coordFormat, 5>
-    Foam::coordSet::coordFormatNames_;
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
diff --git a/src/fileFormats/coordSet/coordSet.H b/src/fileFormats/coordSet/coordSet.H
index 5492f37b4351f98bbb1395118d2efd836f44a11d..bf764cc143cb87213e9bbd48b939ae74fafab75c 100644
--- a/src/fileFormats/coordSet/coordSet.H
+++ b/src/fileFormats/coordSet/coordSet.H
@@ -37,6 +37,7 @@ SourceFiles
 
 #include "pointField.H"
 #include "word.H"
+#include "Enum.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -70,7 +71,7 @@ public:
 private:
 
         //- String representation of coordFormat enums
-        static const NamedEnum<coordFormat, 5> coordFormatNames_;
+        static const Enum<coordFormat> coordFormatNames_;
 
 
 protected:
diff --git a/src/fileFormats/fire/FIRECore.C b/src/fileFormats/fire/FIRECore.C
index ab576116348cdc4d698b2966e16b4b1a7b69b051..4cf98960801fec203d0017f4ee69fd4ff270401a 100644
--- a/src/fileFormats/fire/FIRECore.C
+++ b/src/fileFormats/fire/FIRECore.C
@@ -27,24 +27,14 @@ License
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
-const Foam::NamedEnum<Foam::fileFormats::FIRECore::fileExt3d, 4>
-    Foam::fileFormats::FIRECore::file3dExtensions;
-
-namespace Foam
-{
-    template<>
-    const char* Foam::NamedEnum
-    <
-        Foam::fileFormats::FIRECore::fileExt3d,
-        4
-    >::names[] =
+const Foam::Enum<Foam::fileFormats::FIRECore::fileExt3d>
+    Foam::fileFormats::FIRECore::file3dExtensions
     {
-        "fpma",
-        "fpmb",
-        "fpmaz",
-        "fpmbz"
+        { fileExt3d::POLY_ASCII, "fpma" },
+        { fileExt3d::POLY_BINARY, "fpmb" },
+        { fileExt3d::POLY_ASCII_Z, "fpmaz" },
+        { fileExt3d::POLY_BINARY_Z, "fpmbz" }
     };
-}
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
diff --git a/src/fileFormats/fire/FIRECore.H b/src/fileFormats/fire/FIRECore.H
index 3f9c654cc1ea1acdf0b5027a140d2014a3e44859..96eb73ee5f31669d2b34a0889a52e6e7878dd460 100644
--- a/src/fileFormats/fire/FIRECore.H
+++ b/src/fileFormats/fire/FIRECore.H
@@ -40,7 +40,7 @@ SourceFiles
 #include "labelList.H"
 #include "pointField.H"
 #include "IOstreams.H"
-#include "NamedEnum.H"
+#include "Enum.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -86,8 +86,8 @@ public:
         {
             POLY_ASCII,
             POLY_BINARY,
-            POLY_ASCII_COMPRESSED,
-            POLY_BINARY_COMPRESSED
+            POLY_ASCII_Z,
+            POLY_BINARY_Z
         };
 
 
@@ -97,11 +97,12 @@ public:
         //- Float type (binary format)
         typedef double  fireReal_t;
 
+
 protected:
 
     // Protected Data
 
-        static const NamedEnum<fileExt3d, 4>  file3dExtensions;
+        static const Enum<fileExt3d>  file3dExtensions;
 
 
     // Protected Member Functions
diff --git a/src/fileFormats/starcd/STARCDCore.C b/src/fileFormats/starcd/STARCDCore.C
index 7ea833b488ae291e55cbbc68f7c260ba903200ee..412738131e200a35e3625a31ed50aacefbfcdf94 100644
--- a/src/fileFormats/starcd/STARCDCore.C
+++ b/src/fileFormats/starcd/STARCDCore.C
@@ -33,40 +33,22 @@ License
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
-const Foam::NamedEnum<Foam::fileFormats::STARCDCore::fileHeader, 3>
-    Foam::fileFormats::STARCDCore::fileHeaders_;
-
-const Foam::NamedEnum<Foam::fileFormats::STARCDCore::fileExt, 4>
-    Foam::fileFormats::STARCDCore::fileExtensions_;
-
-namespace Foam
-{
-    template<>
-    const char* Foam::NamedEnum
-    <
-        Foam::fileFormats::STARCDCore::fileHeader,
-        3
-    >::names[] =
+const Foam::Enum<Foam::fileFormats::STARCDCore::fileHeader>
+    Foam::fileFormats::STARCDCore::fileHeaders_
     {
-        "PROSTAR_CELL",
-        "PROSTAR_VERTEX",
-        "PROSTAR_BOUNDARY"
+        { fileHeader::HEADER_CEL, "PROSTAR_CELL" },
+        { fileHeader::HEADER_VRT, "PROSTAR_VERTEX" },
+        { fileHeader::HEADER_BND, "PROSTAR_BOUNDARY" }
     };
 
-    template<>
-    const char* Foam::NamedEnum
-    <
-        Foam::fileFormats::STARCDCore::fileExt,
-        4
-    >::names[] =
+const Foam::Enum<Foam::fileFormats::STARCDCore::fileExt>
+    Foam::fileFormats::STARCDCore::fileExtensions_
     {
-        "cel",
-        "vrt",
-        "bnd",
-        "inp"
+        { fileExt::CEL_FILE, "cel" },
+        { fileExt::VRT_FILE, "vrt" },
+        { fileExt::BND_FILE, "bnd" },
+        { fileExt::INP_FILE, "inp" }
     };
-}
-
 
 const char* const Foam::fileFormats::STARCDCore::defaultBoundaryName =
     "Default_Boundary_Region";
diff --git a/src/fileFormats/starcd/STARCDCore.H b/src/fileFormats/starcd/STARCDCore.H
index cae3d1e7c0de7a8e7a6a3e6d305f49642f354cff..21f64cae72c50ad5c6a5fcd43d9d9393d8aa7728 100644
--- a/src/fileFormats/starcd/STARCDCore.H
+++ b/src/fileFormats/starcd/STARCDCore.H
@@ -36,7 +36,7 @@ SourceFiles
 #define STARCDCore_H
 
 #include "IFstream.H"
-#include "NamedEnum.H"
+#include "Enum.H"
 #include "pointField.H"
 #include "Map.H"
 #include "FixedList.H"
@@ -113,8 +113,8 @@ private:
 
     // Private Data
 
-        static const NamedEnum<fileHeader, 3> fileHeaders_;
-        static const NamedEnum<fileExt, 4>    fileExtensions_;
+        static const Enum<fileHeader> fileHeaders_;
+        static const Enum<fileExt>    fileExtensions_;
 
 
 protected:
diff --git a/src/fileFormats/stl/STLReader.C b/src/fileFormats/stl/STLReader.C
index b7b91a0bb755574f216bb4d4f37a941286939610..ca7451d886a2ad7726a6b1f8d1a290a371414eaa 100644
--- a/src/fileFormats/stl/STLReader.C
+++ b/src/fileFormats/stl/STLReader.C
@@ -26,6 +26,7 @@ License
 #include "STLReader.H"
 #include "Map.H"
 #include "IFstream.H"
+#include "mergePoints.H"
 
 #undef DEBUG_STLBINARY
 
@@ -202,4 +203,38 @@ void Foam::fileFormats::STLReader::clear()
 }
 
 
+Foam::label Foam::fileFormats::STLReader::mergePointsMap
+(
+    labelList& pointMap
+) const
+{
+    // With the merge distance depending on the input format (ASCII | BINARY),
+    // but must be independent of WM_SP or WM_DP flag.
+    // - floatScalarSMALL  = 1e-6
+    // - doubleScalarSMALL = 1e-15
+
+    return mergePointsMap
+    (
+        (format_ == BINARY ? 10 : 100) * doubleScalarSMALL,
+        pointMap
+    );
+}
+
+
+Foam::label Foam::fileFormats::STLReader::mergePointsMap
+(
+    const scalar mergeTol,
+    labelList& pointMap
+) const
+{
+    return Foam::mergePoints
+    (
+        points_,
+        mergeTol,
+        false, // verbose
+        pointMap
+    );
+}
+
+
 // ************************************************************************* //
diff --git a/src/fileFormats/stl/STLReader.H b/src/fileFormats/stl/STLReader.H
index 9ed6838bc136feb7954060ad70bb93d7f0d2ba45..e9873aafe74bad823e3c4db840698f82efdfaf7a 100644
--- a/src/fileFormats/stl/STLReader.H
+++ b/src/fileFormats/stl/STLReader.H
@@ -61,7 +61,7 @@ class STLReader
         bool sorted_;
 
         //- The points supporting the facets
-        pointField points_;
+        List<STLpoint> points_;
 
         //- The zones associated with the faces
         List<label> zoneIds_;
@@ -117,6 +117,15 @@ public:
         //- Flush all values
         void clear();
 
+        //- Calculate merge points mapping, return old to new pointMap.
+        //  The merge tolerance based on ASCII or BINARY input format.
+        //  \return number of unique points
+        label mergePointsMap(labelList& pointMap) const;
+
+        //- Calculate merge points mapping, return old to new pointMap.
+        //  \return number of unique points
+        label mergePointsMap(const scalar mergeTol, labelList& pointMap) const;
+
         //- File read was already sorted?
         inline bool sorted() const
         {
@@ -124,7 +133,7 @@ public:
         }
 
         //- Return full access to the points
-        inline pointField& points()
+        inline List<STLpoint>& points()
         {
             return points_;
         }
diff --git a/src/fileFormats/stl/STLReaderASCII.L b/src/fileFormats/stl/STLReaderASCII.L
index 0ea759151c2a05f59b2aa437dd74f11928bd952d..46c9ab1a853195dd9c28254f436a50b46f5eb478 100644
--- a/src/fileFormats/stl/STLReaderASCII.L
+++ b/src/fileFormats/stl/STLReaderASCII.L
@@ -23,9 +23,10 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-%{
+%option prefix="yySTL"
+%option yyclass="yySTLFlexLexer"
 
-#undef yyFlexLexer
+%{
 
  /* ------------------------------------------------------------------------ *\
    ------ local definitions
@@ -35,9 +36,9 @@ License
 #include "OSspecific.H"
 
 using namespace Foam;
-
 // Dummy yyFlexLexer::yylex() to keep the linker happy. It is not called
 //! \cond dummy
+#if YY_FLEX_MAJOR_VERSION <= 2 && YY_FLEX_MINOR_VERSION <= 5 && YY_FLEX_SUBMINOR_VERSION < 34
 int yyFlexLexer::yylex()
 {
     FatalErrorInFunction
@@ -45,29 +46,29 @@ int yyFlexLexer::yylex()
         << abort(FatalError);
     return 0;
 }
+#endif
 //! \endcond
 
 // Dummy yywrap to keep yylex happy at compile time.
 // It is called by yylex but is not used as the mechanism to change file.
 // See <<EOF>>
 //! \cond dummy
-#if YY_FLEX_MINOR_VERSION < 6 && YY_FLEX_SUBMINOR_VERSION < 34
+#if YY_FLEX_MAJOR_VERSION <= 2 && YY_FLEX_MINOR_VERSION <= 5 && YY_FLEX_SUBMINOR_VERSION < 34
 extern "C" int yywrap()
 #else
-int yyFlexLexer::yywrap()
+int yySTLFlexLexer::yywrap()
 #endif
 {
     return 1;
 }
 //! \endcond
 
-
 //- A lexer for parsing STL ASCII files.
 //  Returns DynamicList(s) of points and facets (zoneIds).
 //  The facets are within a solid/endsolid grouping
 class STLASCIILexer
 :
-    public yyFlexLexer
+    public yySTLFlexLexer
 {
     // Private data
 
@@ -76,7 +77,7 @@ class STLASCIILexer
         label lineNo_;
         word  startError_;
 
-        DynamicList<point> points_;
+        DynamicList<STLpoint> points_;
         DynamicList<label> facets_;
         DynamicList<word>  names_;
         DynamicList<label> sizes_;
@@ -95,7 +96,7 @@ public:
         //- The lexer function itself
         int lex();
 
-    // Access
+      // Access
 
         //- Do all the solid groups appear in order?
         inline bool sorted() const
@@ -104,7 +105,7 @@ public:
         }
 
         //- A list of unstitched triangle points
-        inline DynamicList<point>& points()
+        inline DynamicList<STLpoint>& points()
         {
             return points_;
         }
@@ -132,7 +133,7 @@ public:
 
 STLASCIILexer::STLASCIILexer(istream* is, const label approxNpoints)
 :
-    yyFlexLexer(is),
+    yySTLFlexLexer(is),
     sorted_(true),
     groupID_(-1),
     lineNo_(1),
@@ -145,6 +146,7 @@ STLASCIILexer::STLASCIILexer(istream* is, const label approxNpoints)
    ------ cppLexer::yylex()
  \* ------------------------------------------------------------------------ */
 
+#undef YY_DECL
 #define YY_DECL int STLASCIILexer::lex()
 
 %}
@@ -202,9 +204,9 @@ endsolid              {space}("endsolid"|"ENDSOLID")({some_space}{word})*
     // End of read character pointer returned by strtof
     // char* endPtr;
 
-    STLpoint normal;
+    label cmpt = 0;   // Component index when reading vertex
     STLpoint vertex;
-    label cmpt = 0;   // component index used for reading vertex
+    // STLpoint normal;
 
     static const char* stateNames[7] =
     {
@@ -237,154 +239,167 @@ endsolid              {space}("endsolid"|"ENDSOLID")({some_space}{word})*
  /*                      ------ Reading control header ------                */
 
 {solid} {
-        BEGIN(readSolidName);
-    }
+    BEGIN(readSolidName);
+}
 
 <readSolidName>{string} {
-        word name(Foam::string::validate<word>(YYText()));
+    const word solidName(Foam::string::validate<word>(YYText()));
 
-        HashTable<label>::const_iterator fnd = lookup_.find(name);
-        if (fnd != lookup_.end())
+    auto iter = lookup_.cfind(solidName);
+    if (iter.found())
+    {
+        if (groupID_ != iter.object())
         {
-            if (groupID_ != fnd())
-            {
-                // group appeared out of order
-                sorted_ = false;
-            }
-            groupID_ = fnd();
+            sorted_ = false;  // Group appeared out of order
+            groupID_ = iter.object();
         }
-        else
+    }
+    else
+    {
+        groupID_ = sizes_.size();
+        if (lookup_.insert(solidName, groupID_))
         {
-            groupID_ = sizes_.size();
-            lookup_.insert(name, groupID_);
-            names_.append(name);
+            names_.append(solidName);
             sizes_.append(0);
         }
-        BEGIN(INITIAL);
+        else
+        {
+            FatalErrorInFunction<< "Duplicate solid-name: " << solidName
+                << exit(FatalError);
+        }
     }
+    BEGIN(INITIAL);
+}
 
 <readSolidName>{space}\n {
-        word name("solid");
+    const word solidName("solid");  // Could also use solid0, solid1, ...
 
-        HashTable<label>::const_iterator fnd = lookup_.find(name);
-        if (fnd != lookup_.end())
+    auto iter = lookup_.cfind(solidName);
+    if (iter.found())
+    {
+        if (groupID_ != iter.object())
         {
-            if (groupID_ != fnd())
-            {
-                // group appeared out of order
-                sorted_ = false;
-            }
-            groupID_ = fnd();
+            sorted_ = false;  // Group appeared out of order
+            groupID_ = iter.object();
         }
-        else
+    }
+    else
+    {
+        groupID_ = sizes_.size();
+        if (lookup_.insert(solidName, groupID_))
         {
-            groupID_ = sizes_.size();
-            lookup_.insert(name, groupID_);
-            names_.append(name);
+            names_.append(solidName);
             sizes_.append(0);
         }
-
-        lineNo_++;
-        BEGIN(INITIAL);
+        else
+        {
+            FatalErrorInFunction<< "Duplicate solid-name: " << solidName
+                << exit(FatalError);
+        }
     }
 
+    ++lineNo_;
+    BEGIN(INITIAL);
+}
+
 {color} {
-    }
+    /* ignore 'color' */
+}
 
 {facet} {
-        BEGIN(readFacet);
-    }
+    BEGIN(readFacet);
+}
 
 <readFacet>{normal} {
-        BEGIN(readNormal);
-    }
+    BEGIN(readNormal);
+}
 
 <readNormal>{point} {
-        /*
-         skip reading normals:
-         normal.x() = strtof(YYText(), &endPtr);
-         normal.y() = strtof(endPtr, &endPtr);
-         normal.z() = strtof(endPtr, &endPtr);
-         normals_.append(normal);
-         */
-        BEGIN(readFacet);
-    }
+    /*
+     skip reading normals:
+     normal.x() = strtof(YYText(), &endPtr);
+     normal.y() = strtof(endPtr, &endPtr);
+     normal.z() = strtof(endPtr, &endPtr);
+     normals_.append(normal);
+     */
+    BEGIN(readFacet);
+}
 
 <readFacet>{outerloop} {
-        BEGIN(readVertices);
-    }
+    BEGIN(readVertices);
+}
 
 <readVertices>{vertex} {
-        BEGIN(readVertex);
-    }
+    BEGIN(readVertex);
+}
 
 <readVertex>{space}{signedInteger}{space} {
-        vertex[cmpt++] = atol(YYText());
+    vertex[cmpt++] = atol(YYText());
 
-        if (cmpt == 3)
-        {
-            cmpt = 0;
-            points_.append(vertex);
-            BEGIN(readVertices);
-        }
+    if (cmpt == 3)
+    {
+        cmpt = 0;
+        points_.append(vertex);
+        BEGIN(readVertices);
     }
+}
 
 <readVertex>{space}{floatNum}{space} {
-        vertex[cmpt++] = atof(YYText());
+    vertex[cmpt++] = atof(YYText());
 
-        if (cmpt == 3)
-        {
-            cmpt = 0;
-            points_.append(vertex);
-            BEGIN(readVertices);
-        }
+    if (cmpt == 3)
+    {
+        cmpt = 0;
+        points_.append(vertex);
+        BEGIN(readVertices);
     }
+}
 
 <readVertices>{endloop} {
-        BEGIN(readFacet);
-    }
+    BEGIN(readFacet);
+}
 
 <readFacet>{endfacet} {
-        facets_.append(groupID_);
-        sizes_[groupID_]++;
-        BEGIN(INITIAL);
-    }
+    facets_.append(groupID_);
+    sizes_[groupID_]++;
+    BEGIN(INITIAL);
+}
 
 {endsolid} {
-    }
+}
 
 
- /* ------------------ Ignore remaining space and \n s. -------------------- */
+ /* ---------------- Ignore remaining spaces and newlines ------------------ */
 
 <*>{space} {}
-<*>\n      { lineNo_++; }
+<*>\n      { ++lineNo_; }
 
 
  /* ------------------- Any other characters are errors -------------------- */
 
 <*>. {
-        startError_ = YYText();
-        yy_push_state(stlError);
-    }
+    startError_ = YYText();
+    yy_push_state(stlError);
+}
 
 
  /* ---------------------------- Error handler ----------------------------- */
 
 <stlError>.* {
-        yy_pop_state();
-        FatalErrorInFunction
-            << "while " << stateNames[YY_START] << " on line " << lineNo_ << nl
-            << "    expected " << stateExpects[YY_START]
-            << " but found '" << startError_.c_str() << YYText() << "'"
-            << exit(FatalError);
-    }
+    yy_pop_state();
+    FatalErrorInFunction
+        << "while " << stateNames[YY_START] << " on line " << lineNo_ << nl
+        << "    expected " << stateExpects[YY_START]
+        << " but found '" << startError_.c_str() << YYText() << "'"
+        << exit(FatalError);
+}
 
 
  /*  ------------------------ On EOF terminate ----------------------------  */
 
 <<EOF>> {
-            yyterminate();
-    }
+    yyterminate();
+}
 %%
 
 
diff --git a/src/fileFormats/stl/STLpoint.H b/src/fileFormats/stl/STLpoint.H
index 3c432c09ee307fd7d33bc4ca305774fe4c946d69..f6c1f2ea922f691c690660b328d70a835f6388a3 100644
--- a/src/fileFormats/stl/STLpoint.H
+++ b/src/fileFormats/stl/STLpoint.H
@@ -47,7 +47,7 @@ namespace Foam
 
 class STLpoint
 :
-    public Vector<float>
+    public floatVector
 {
 
 public:
@@ -58,28 +58,34 @@ public:
         inline STLpoint()
         {}
 
+        //- Construct from base class
+        inline STLpoint(const floatVector& v)
+        :
+            floatVector(v)
+        {}
+
         //- Construct from components
         inline STLpoint(float x, float y, float z)
         :
-            Vector<float>(x, y, z)
+            floatVector(x, y, z)
         {}
 
         //- Construct from components
         inline STLpoint(double x, double y, double z)
         :
-            Vector<float>(float(x), float(y), float(z))
+            floatVector(float(x), float(y), float(z))
         {}
 
         //- Construct from point
         inline STLpoint(const point& pt)
         :
-            Vector<float>(float(pt.x()), float(pt.y()), float(pt.z()))
+            floatVector(float(pt.x()), float(pt.y()), float(pt.z()))
         {}
 
         //- Construct from istream
         inline STLpoint(Istream& is)
         :
-            Vector<float>(is)
+            floatVector(is)
         {}
 
 
diff --git a/src/fileFormats/vtk/read/vtkUnstructuredReader.C b/src/fileFormats/vtk/read/vtkUnstructuredReader.C
index d834f4d5ebab183b171a2053f929833d1cec1106..153c16578263edc40d1cbd951d702a73fd26202e 100644
--- a/src/fileFormats/vtk/read/vtkUnstructuredReader.C
+++ b/src/fileFormats/vtk/read/vtkUnstructuredReader.C
@@ -35,49 +35,38 @@ License
 namespace Foam
 {
     defineTypeNameAndDebug(vtkUnstructuredReader, 1);
+}
 
-    template<>
-    const char*
-    NamedEnum<vtkUnstructuredReader::vtkDataType, 8>::names[] =
+const Foam::Enum<Foam::vtkUnstructuredReader::vtkDataType>
+    Foam::vtkUnstructuredReader::vtkDataTypeNames
     {
-        "int",
-        "unsigned_int",
-        "long",
-        "unsigned_long",
-        "float",
-        "double",
-        "string",
-        "vtkIdType"
+        { vtkDataType::VTK_INT, "int" },
+        { vtkDataType::VTK_UINT, "unsigned_int" },
+        { vtkDataType::VTK_LONG, "long" },
+        { vtkDataType::VTK_ULONG, "unsigned_long" },
+        { vtkDataType::VTK_FLOAT, "float" },
+        { vtkDataType::VTK_DOUBLE, "double" },
+        { vtkDataType::VTK_STRING, "string" },
+        { vtkDataType::VTK_ID, "vtkIdType" }
     };
-    const NamedEnum<vtkUnstructuredReader::vtkDataType, 8>
-    vtkUnstructuredReader::vtkDataTypeNames;
-
 
-    template<>
-    const char*
-    NamedEnum<vtkUnstructuredReader::vtkDataSetType, 3>::names[] =
+const Foam::Enum<Foam::vtkUnstructuredReader::vtkDataSetType>
+    Foam::vtkUnstructuredReader::vtkDataSetTypeNames
     {
-        "FIELD",
-        "SCALARS",
-        "VECTORS"
+        { vtkDataSetType::VTK_FIELD, "FIELD" },
+        { vtkDataSetType::VTK_SCALARS, "SCALARS" },
+        { vtkDataSetType::VTK_VECTORS, "VECTORS" }
     };
-    const NamedEnum<vtkUnstructuredReader::vtkDataSetType, 3>
-    vtkUnstructuredReader::vtkDataSetTypeNames;
 
-
-    template<>
-    const char*
-    NamedEnum<vtkUnstructuredReader::parseMode, 5>::names[] =
+const Foam::Enum<Foam::vtkUnstructuredReader::parseMode>
+    Foam::vtkUnstructuredReader::parseModeNames
     {
-        "NOMODE",
-        "UNSTRUCTURED_GRID",
-        "POLYDATA",
-        "CELL_DATA",
-        "POINT_DATA"
+        { parseMode::NOMODE, "NOMODE" },
+        { parseMode::UNSTRUCTURED_GRID, "UNSTRUCTURED_GRID" },
+        { parseMode::POLYDATA, "POLYDATA" },
+        { parseMode::CELL_DATA, "CELL_DATA" },
+        { parseMode::POINT_DATA, "POINT_DATA" }
     };
-    const NamedEnum<vtkUnstructuredReader::parseMode, 5>
-    vtkUnstructuredReader::parseModeNames;
-}
 
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
diff --git a/src/fileFormats/vtk/read/vtkUnstructuredReader.H b/src/fileFormats/vtk/read/vtkUnstructuredReader.H
index 77bd71b4aac8f6ebcbaf9b90e1e1023871bae610..48dc38890a843b60b6dd1bf2d3823afeb032999c 100644
--- a/src/fileFormats/vtk/read/vtkUnstructuredReader.H
+++ b/src/fileFormats/vtk/read/vtkUnstructuredReader.H
@@ -51,7 +51,7 @@ SourceFiles
 #include "objectRegistry.H"
 #include "cellShapeList.H"
 #include "HashSet.H"
-#include "NamedEnum.H"
+#include "Enum.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -83,7 +83,7 @@ public:
             VTK_ID
         };
 
-        static const NamedEnum<vtkDataType, 8> vtkDataTypeNames;
+        static const Enum<vtkDataType> vtkDataTypeNames;
 
 
         //- Enumeration defining the vtk dataset types
@@ -94,11 +94,10 @@ public:
             VTK_VECTORS
         };
 
-        static const NamedEnum<vtkDataSetType, 3> vtkDataSetTypeNames;
+        static const Enum<vtkDataSetType> vtkDataSetTypeNames;
 
 
-        //- Enumeration defining the parse mode - what type of data is being
-        //  read
+        //- Enumeration defining the parse mode - type of data being read
         enum parseMode
         {
             NOMODE,
@@ -108,7 +107,7 @@ public:
             POINT_DATA
         };
 
-        static const NamedEnum<parseMode, 5> parseModeNames;
+        static const Enum<parseMode> parseModeNames;
 
 
 private:
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H
index 28b5a6a6dddf9348642c91c1dbe4c713e20da74f..567c3a29f563c61da7ffe7237e145eda8e843542 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fan/fanFvPatchField.H
@@ -59,7 +59,7 @@ Usage
             componentColumns 1(1);
             separator       ",";
             mergeSeparators no;
-            fileName        "$FOAM_CASE/constant/pressureVsU";
+            file            "$FOAM_CASE/constant/pressureVsU";
         }
         value           uniform 0;
     }
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fanPressure/fanPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/fanPressure/fanPressureFvPatchScalarField.C
index 2cc9641d52b9b4008e9e2a14294f15afb39cccb7..9719903efc9c37a9667755f7114c466c7f6e3d1a 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fanPressure/fanPressureFvPatchScalarField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fanPressure/fanPressureFvPatchScalarField.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.
@@ -61,7 +61,10 @@ Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
 :
     totalPressureFvPatchScalarField(p, iF),
     fanCurve_(),
-    direction_(ffdOut)
+    direction_(ffdOut),
+    nonDimensional_(false),
+    rpm_(0.0),
+    dm_(0.0)
 {}
 
 
@@ -75,7 +78,10 @@ Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
 :
     totalPressureFvPatchScalarField(ptf, p, iF, mapper),
     fanCurve_(ptf.fanCurve_),
-    direction_(ptf.direction_)
+    direction_(ptf.direction_),
+    nonDimensional_(ptf.nonDimensional_),
+    rpm_(ptf.rpm_),
+    dm_(ptf.dm_)
 {}
 
 
@@ -88,8 +94,17 @@ Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
 :
     totalPressureFvPatchScalarField(p, iF, dict),
     fanCurve_(dict),
-    direction_(fanFlowDirectionNames_.read(dict.lookup("direction")))
-{}
+    direction_(fanFlowDirectionNames_.read(dict.lookup("direction"))),
+    nonDimensional_(dict.lookupOrDefault<Switch>("nonDimensional", false)),
+    rpm_(dict.lookupOrDefault<scalar>("rpm", 0.0)),
+    dm_(dict.lookupOrDefault<scalar>("dm", 0.0))
+{
+    if (nonDimensional_)
+    {
+        dict.lookup("rpm") >> rpm_;
+        dict.lookup("dm") >> dm_;
+    }
+}
 
 
 Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
@@ -99,7 +114,10 @@ Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
 :
     totalPressureFvPatchScalarField(pfopsf),
     fanCurve_(pfopsf.fanCurve_),
-    direction_(pfopsf.direction_)
+    direction_(pfopsf.direction_),
+    nonDimensional_(pfopsf.nonDimensional_),
+    rpm_(pfopsf.rpm_),
+    dm_(pfopsf.dm_)
 {}
 
 
@@ -111,7 +129,10 @@ Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
 :
     totalPressureFvPatchScalarField(pfopsf, iF),
     fanCurve_(pfopsf.fanCurve_),
-    direction_(pfopsf.direction_)
+    direction_(pfopsf.direction_),
+    nonDimensional_(pfopsf.nonDimensional_),
+    rpm_(pfopsf.rpm_),
+    dm_(pfopsf.dm_)
 {}
 
 
@@ -156,8 +177,21 @@ void Foam::fanPressureFvPatchScalarField::updateCoeffs()
                 << exit(FatalError);
     }
 
+    if (nonDimensional_)
+    {
+        // Create an adimensional flow rate
+        volFlowRate =
+            120.0*volFlowRate/pow3(constant::mathematical::pi)/pow3(dm_);
+    }
+
     // Pressure drop for this flow rate
-    const scalar pdFan = fanCurve_(max(volFlowRate, 0.0));
+    scalar pdFan = fanCurve_(max(volFlowRate, 0.0));
+
+    if (nonDimensional_)
+    {
+        // Convert the adimensional deltap from curve into deltaP
+        pdFan = pdFan*pow4(constant::mathematical::pi)*rpm_*sqr(dm_)/1800;
+    }
 
     totalPressureFvPatchScalarField::updateCoeffs
     (
@@ -173,6 +207,10 @@ void Foam::fanPressureFvPatchScalarField::write(Ostream& os) const
     fanCurve_.write(os);
     os.writeKeyword("direction")
         << fanFlowDirectionNames_[direction_] << token::END_STATEMENT << nl;
+    os.writeKeyword("nonDimensional") << nonDimensional_
+        << token::END_STATEMENT << nl;
+    os.writeEntry("rpm", rpm_);
+    os.writeEntry("dm", dm_);
 }
 
 
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fanPressure/fanPressureFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/fanPressure/fanPressureFvPatchScalarField.H
index aa4b19f28b81caf81d591330afa3d343ce0cd860..60780a0cd8c4b18d1d631e276ca528d346547f44 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fanPressure/fanPressureFvPatchScalarField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fanPressure/fanPressureFvPatchScalarField.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.
@@ -31,13 +31,34 @@ Description
     This boundary condition can be applied to assign either a pressure inlet
     or outlet total pressure condition for a fan.
 
+    The switch nonDimensional can be used for a non-dimensional table. It needs
+    inputs rpm and dm of the fan.
+
+    The nonDimensional flux for the table is calculate as :
+
+        phi = 4.0*mDot/(rho*sqr(PI)*dm^3*omega)
+        where:
+            dm is the mean diameter.
+            omega is rad/sec.
+
+    The nonDimensinal pressure :
+
+        Psi = 2 deltaP/(rho*(sqr(PI*omega*dm)))
+        where:
+            deltaP is the pressure drop
+
+    The non-dimensional table should be given as Psi = F(phi).
+
 Usage
     \table
         Property     | Description             | Required    | Default value
-        fileName     | fan curve file name     | yes         |
+        file         | fan curve file name     | yes         |
         outOfBounds  | out of bounds handling  | yes         |
         direction    | direction of flow through fan [in/out] | yes |
         p0           | environmental total pressure | yes    |
+        nonDimensional | uses non-dimensional table | no | false
+        rpm          | fan rpm for non-dimensional table | no | 0.0
+        dm           | mean diameter for non-dimensional table | no | 0.0
     \endtable
 
     Example of the boundary condition specification:
@@ -45,7 +66,7 @@ Usage
     inlet
     {
         type            fanPressure;
-        fileName        "fanCurve";
+        file            "fanCurve";
         outOfBounds     clamp;
         direction       in;
         p0              uniform 0;
@@ -55,7 +76,7 @@ Usage
     outlet
     {
         type            fanPressure;
-        fileName        "fanCurve";
+        file            "fanCurve";
         outOfBounds     clamp;
         direction       out;
         p0              uniform 0;
@@ -116,6 +137,17 @@ private:
         //- Direction of flow through the fan relative to patch
         fanFlowDirection direction_;
 
+        //- Swtich for using non-dimensional curve
+        Switch nonDimensional_;
+
+        // Parameters for non-dimensional table
+
+            //- Fan rpm
+            scalar rpm_;
+
+            //- Fan mean diameter
+            scalar dm_;
+
 
 public:
 
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/fixedProfile/fixedProfileFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/fixedProfile/fixedProfileFvPatchField.H
index 502be93b545c3722b914deea347753757599c95d..d63eb973295a3789c47afcaf1ba7bb029b0a2961 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/fixedProfile/fixedProfileFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/fixedProfile/fixedProfileFvPatchField.H
@@ -42,7 +42,7 @@ Usage
     \verbatim
     <patchName>
     {
-        type            fixedProfile;
+        type       fixedProfile;
         profile    csvFile;
 
         profileCoeffs
@@ -52,7 +52,7 @@ Usage
             componentColumns    (1 2 3);    // Component column indices
             separator           ",";        // Optional (defaults to ",")
             mergeSeparators     no;         // Merge multiple separators
-            fileName            "Uprofile.csv";  // name of csv data file
+            file                "Uprofile.csv";  // name of csv data file
             outOfBounds         clamp;      // Optional out-of-bounds handling
             interpolationScheme linear;     // Optional interpolation scheme
         }
diff --git a/src/finiteVolume/interpolation/surfaceInterpolation/limitedSchemes/LimitedScheme/LimitedScheme.C b/src/finiteVolume/interpolation/surfaceInterpolation/limitedSchemes/LimitedScheme/LimitedScheme.C
index efe01350d4da1e46721485130bd56746c775d1b2..9c19472a1fdc2242df5da8ae0cf6a264c0ac1f3c 100644
--- a/src/finiteVolume/interpolation/surfaceInterpolation/limitedSchemes/LimitedScheme/LimitedScheme.C
+++ b/src/finiteVolume/interpolation/surfaceInterpolation/limitedSchemes/LimitedScheme/LimitedScheme.C
@@ -37,18 +37,19 @@ void Foam::LimitedScheme<Type, Limiter, LimitFunc>::calcLimiter
     surfaceScalarField& limiterField
 ) const
 {
-    const fvMesh& mesh = this->mesh();
+    typedef GeometricField<typename Limiter::phiType, fvPatchField, volMesh>
+        VolFieldType;
+
+    typedef GeometricField<typename Limiter::gradPhiType, fvPatchField, volMesh>
+        GradVolFieldType;
 
-    tmp<GeometricField<typename Limiter::phiType, fvPatchField, volMesh>>
-        tlPhi = LimitFunc<Type>()(phi);
+    const fvMesh& mesh = this->mesh();
 
-    const GeometricField<typename Limiter::phiType, fvPatchField, volMesh>&
-        lPhi = tlPhi();
+    tmp<VolFieldType> tlPhi = LimitFunc<Type>()(phi);
+    const VolFieldType& lPhi = tlPhi();
 
-    tmp<GeometricField<typename Limiter::gradPhiType, fvPatchField, volMesh>>
-        tgradc(fvc::grad(lPhi));
-    const GeometricField<typename Limiter::gradPhiType, fvPatchField, volMesh>&
-        gradc = tgradc();
+    tmp<GradVolFieldType> tgradc(fvc::grad(lPhi));
+    const GradVolFieldType& gradc = tgradc();
 
     const surfaceScalarField& CDweights = mesh.surfaceInterpolation::weights();
 
@@ -76,8 +77,7 @@ void Foam::LimitedScheme<Type, Limiter, LimitFunc>::calcLimiter
         );
     }
 
-    surfaceScalarField::Boundary& bLim =
-        limiterField.boundaryFieldRef();
+    surfaceScalarField::Boundary& bLim = limiterField.boundaryFieldRef();
 
     forAll(bLim, patchi)
     {
@@ -128,6 +128,8 @@ void Foam::LimitedScheme<Type, Limiter, LimitFunc>::calcLimiter
             pLim = 1.0;
         }
     }
+
+    limiterField.setOriented();
 }
 
 
diff --git a/src/fvOptions/Make/files b/src/fvOptions/Make/files
index 889ddebabb8d09aecf0d3468a589e85f329665e7..9a8376a95cd20672f6f6037df3ced67776fc5cae 100644
--- a/src/fvOptions/Make/files
+++ b/src/fvOptions/Make/files
@@ -22,6 +22,8 @@ $(derivedSources)/directionalPressureGradientExplicitSource/directionalPressureG
 $(derivedSources)/directionalPressureGradientExplicitSource/directionalPressureGradientExplicitSourceIO.C
 $(derivedSources)/effectivenessHeatExchangerSource/effectivenessHeatExchangerSource.C
 $(derivedSources)/explicitPorositySource/explicitPorositySource.C
+$(derivedSources)/jouleHeatingSource/jouleHeatingSource.C
+$(derivedSources)/jouleHeatingSource/jouleHeatingSourceIO.C
 $(derivedSources)/meanVelocityForce/meanVelocityForce.C
 $(derivedSources)/meanVelocityForce/meanVelocityForceIO.C
 $(derivedSources)/meanVelocityForce/patchMeanVelocityForce/patchMeanVelocityForce.C
diff --git a/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C
new file mode 100644
index 0000000000000000000000000000000000000000..7a7a8ccde7db991d1bea27b65168f93b0cf3db3c
--- /dev/null
+++ b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.C
@@ -0,0 +1,215 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016-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/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "jouleHeatingSource.H"
+#include "fvMatrices.H"
+#include "fvmLaplacian.H"
+#include "fvcGrad.H"
+#include "zeroGradientFvPatchField.H"
+#include "basicThermo.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace fv
+{
+    defineTypeNameAndDebug(jouleHeatingSource, 0);
+
+    addToRunTimeSelectionTable
+    (
+        option,
+        jouleHeatingSource,
+        dictionary
+    );
+}
+}
+
+
+const Foam::word Foam::fv::jouleHeatingSource::sigmaName(typeName + ":sigma");
+
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+const Foam::coordinateSystem& Foam::fv::jouleHeatingSource::coordSys() const
+{
+    if (!coordSysPtr_.valid())
+    {
+        FatalErrorInFunction
+            << "Co-ordinate system invalid"
+            << abort(FatalError);
+    }
+
+    return coordSysPtr_();
+}
+
+
+Foam::tmp<Foam::volSymmTensorField>
+Foam::fv::jouleHeatingSource::transformSigma
+(
+    const volVectorField& sigmaLocal
+) const
+{
+    tmp<volSymmTensorField> tsigma
+    (
+        new volSymmTensorField
+        (
+            IOobject
+            (
+                sigmaName,
+                mesh_.time().timeName(),
+                mesh_,
+                IOobject::NO_READ,
+                IOobject::NO_WRITE,
+                false
+            ),
+            mesh_,
+            dimensionedSymmTensor("0", sigmaLocal.dimensions(), Zero),
+            zeroGradientFvPatchField<symmTensor>::typeName
+        )
+    );
+
+    volSymmTensorField& sigma = tsigma.ref();
+    sigma.primitiveFieldRef() = coordSys().R().transformVector(sigmaLocal);
+
+    sigma.correctBoundaryConditions();
+
+    return tsigma;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::fv::jouleHeatingSource::jouleHeatingSource
+(
+    const word& sourceName,
+    const word& modelType,
+    const dictionary& dict,
+    const fvMesh& mesh
+)
+:
+    option(sourceName, modelType, dict, mesh),
+    TName_("T"),
+    V_
+    (
+        IOobject
+        (
+            typeName + ":V",
+            mesh.time().timeName(),
+            mesh,
+            IOobject::MUST_READ,
+            IOobject::AUTO_WRITE
+        ),
+        mesh
+    ),
+    anisotropicElectricalConductivity_(false),
+    scalarSigmaVsTPtr_(nullptr),
+    vectorSigmaVsTPtr_(nullptr),
+    coordSysPtr_(nullptr),
+    curTimeIndex_(-1)
+{
+    // Set the field name to that of the energy field from which the temperature
+    // is obtained
+
+    const basicThermo& thermo =
+        mesh_.lookupObject<basicThermo>(basicThermo::dictName);
+
+    fieldNames_.setSize(1, thermo.he().name());
+
+    applied_.setSize(fieldNames_.size(), false);
+
+    read(dict);
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::fv::jouleHeatingSource::~jouleHeatingSource()
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+void Foam::fv::jouleHeatingSource::addSup
+(
+    const volScalarField& rho,
+    fvMatrix<scalar>& eqn,
+    const label fieldi
+)
+{
+    DebugInfo<< name() << ": applying source to " << eqn.psi().name() << endl;
+
+    if (curTimeIndex_ != mesh_.time().timeIndex())
+    {
+        if (anisotropicElectricalConductivity_)
+        {
+            // Update sigma as a function of T if required
+            const volVectorField& sigmaLocal = updateSigma(vectorSigmaVsTPtr_);
+
+            tmp<volSymmTensorField> sigma = transformSigma(sigmaLocal);
+
+            // Solve the electrical potential equation
+            fvScalarMatrix VEqn(fvm::laplacian(sigma, V_));
+            VEqn.relax();
+            VEqn.solve();
+        }
+        else
+        {
+            // Update sigma as a function of T if required
+            const volScalarField& sigma = updateSigma(scalarSigmaVsTPtr_);
+
+            // Solve the electrical potential equation
+            fvScalarMatrix VEqn(fvm::laplacian(sigma, V_));
+            VEqn.relax();
+            VEqn.solve();
+        }
+
+        curTimeIndex_ = mesh_.time().timeIndex();
+    }
+
+    // Add the Joule heating contribution
+
+    const volVectorField gradV(fvc::grad(V_));
+    if (anisotropicElectricalConductivity_)
+    {
+        const volVectorField& sigmaLocal =
+            mesh_.lookupObject<volVectorField>(sigmaName);
+
+        tmp<volSymmTensorField> sigma = transformSigma(sigmaLocal);
+
+        eqn += (sigma & gradV) & gradV;
+    }
+    else
+    {
+        const volScalarField& sigma =
+            mesh_.lookupObject<volScalarField>(sigmaName);
+
+        eqn += (sigma*gradV) & gradV;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.H b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.H
new file mode 100644
index 0000000000000000000000000000000000000000..58565647393f01904d4fc9e8e25be88cc09b99ce
--- /dev/null
+++ b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSource.H
@@ -0,0 +1,278 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016-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/>.
+
+Class
+    Foam::fv::jouleHeatingSource
+
+Group
+    grpFvOptionsSources
+
+Description
+    Evolves an electrical potential equation
+
+    \f[
+        \grad \left( \sigma \grad V \right)
+    \f]
+
+    where \f$ V \f$ is electrical potential and \f$\sigma\f$ is the
+    electrical current
+
+    To provide a Joule heating contribution according to:
+
+    Differential form of Joule heating - power per unit volume:
+    
+    \f[
+        \frac{d(P)}{d(V)} = J \cdot E
+    \f]
+    
+    where \f$ J \f$ is the current density and \f$ E \f$ the electric field.
+    If no magnetic field is present:
+    
+    \f[
+        J = \sigma E
+    \f]
+    
+    The electric field given by
+    
+    \f[
+        E = \grad V
+    \f]
+    
+    Therefore:
+
+    \f[
+        \frac{d(P)}{d(V)} = J \cdot E
+                          = (sigma E) \cdot E
+                          = (sigma \grad V) \cdot \grad V
+    \f]
+
+
+Usage
+    Isotropic (scalar) electrical conductivity
+    \verbatim
+    jouleHeatingSourceCoeffs
+    {
+        anisotropicElectricalConductivity no;
+
+        // Optionally specify the conductivity as a function of temperature
+        // Note: if not supplied, this will be read from the time directory
+        sigma           table
+        (
+            (273        1e5)
+            (1000       1e5)   
+        );
+    }
+    \endverbatim
+
+    Anisotropic (vectorial) electrical conductivity
+    jouleHeatingSourceCoeffs
+    {
+        anisotropicElectricalConductivity yes;
+
+        coordinateSystem
+        {
+            type        cartesian;
+            origin      (0 0 0);
+
+            coordinateRotation
+            {
+                type        axesRotation;
+                e1          (1 0 0);
+                e3          (0 0 1);
+            }
+        }
+
+        // Optionally specify sigma as a function of temperature
+        //sigma           (31900 63800 127600);
+        //
+        //sigma           table
+        //(
+        //    (0      (0 0 0))
+        //    (1000   (127600 127600 127600))
+        //);
+    }
+
+
+    Where:
+    \table
+        Property     | Description               | Required  | Default value
+        T            | Name of temperature field | no        | T
+        sigma        | Electrical conductivity as a function of temperature |no|
+        anisotropicElectricalConductivity | Anisotropic flag | yes |
+    \endtable
+
+    The electrical conductivity can be specified using either:
+    - If the \c sigma entry is present the electrical conductivity is specified
+      as a function of temperature using a Function1 type
+    - If not present the sigma field will be read from file
+    - If the anisotropicElectricalConductivity flag is set to 'true', sigma
+      should be specified as a vector quantity
+
+SourceFiles
+    jouleHeatingSource.C
+
+SeeAlso
+    Foam::Function1
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef fv_jouleHeatingSource_H
+#define fv_jouleHeatingSource_H
+
+#include "fvOption.H"
+#include "Function1.H"
+#include "coordinateSystem.H"
+#include "volFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace fv
+{
+
+/*---------------------------------------------------------------------------*\
+                        Class jouleHeatingSource Declaration
+\*---------------------------------------------------------------------------*/
+
+class jouleHeatingSource
+:
+    public option
+{
+    // Private data
+
+        //- Name of electrical conductivity field
+        static const word sigmaName;
+
+        //- Name of temperature field - default = "T" (optional)
+        word TName_;
+
+        //- Electrical potential field / [V]
+        volScalarField V_;
+
+        //- Flag to indicate that the electrical conductivity is anisotropic
+        bool anisotropicElectricalConductivity_;
+
+        //- Electrical conductivity as a scalar function of temperature
+        autoPtr<Function1<scalar>> scalarSigmaVsTPtr_;
+
+        //- Electrical conductivity as a vector function of temperature
+        autoPtr<Function1<vector>> vectorSigmaVsTPtr_;
+
+        //- Co-ordinate system - used for vectorial electrical conductivity
+        autoPtr<coordinateSystem> coordSysPtr_;
+
+        //- Current time index (used for updating)
+        label curTimeIndex_;
+
+
+    // Private Member Functions
+
+        //- Disallow default bitwise copy construct
+        jouleHeatingSource(const jouleHeatingSource&);
+
+        //- Disallow default bitwise assignment
+        void operator=(const jouleHeatingSource&);
+
+        //- Return the co-ordinate system for anisotropic electrical
+        //  conductivity
+        const coordinateSystem& coordSys() const;
+
+        //- Transform the anisotropic electrical conductivity into global system
+        tmp<volSymmTensorField> transformSigma
+        (
+            const volVectorField& sigmaLocal
+        ) const;
+
+        //- Initialise the electrical conductivity field
+        template<class Type>
+        void initialiseSigma
+        (
+            const dictionary& dict,
+            autoPtr<Function1<Type>>& sigmaVsTPtr
+        );
+
+        //- Update the electrical conductivity field
+        template<class Type>
+        const GeometricField<Type, fvPatchField, volMesh>&
+        updateSigma(const autoPtr<Function1<Type>>& sigmaVsTPtr) const;
+
+
+public:
+
+    //- Runtime type information
+    TypeName("jouleHeatingSource");
+
+
+    // Constructors
+
+        //- Construct from explicit source name and mesh
+        jouleHeatingSource
+        (
+            const word& sourceName,
+            const word& modelType,
+            const dictionary& dict,
+            const fvMesh& mesh
+        );
+
+
+    //- Destructor
+    virtual ~jouleHeatingSource();
+
+
+    // Member Functions
+
+        // Evaluate
+
+            //- Add explicit contribution to compressible momentum equation
+            virtual void addSup
+            (
+                const volScalarField& rho,
+                fvMatrix<scalar>& eqn,
+                const label fieldi
+            );
+
+
+        // IO
+
+            //- Read source dictionary
+            virtual bool read(const dictionary& dict);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fv
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+    #include "jouleHeatingSourceTemplates.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSourceIO.C b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSourceIO.C
new file mode 100644
index 0000000000000000000000000000000000000000..ce4dde6f95ee0c2b9fd5cc807e0ce638b5639f38
--- /dev/null
+++ b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSourceIO.C
@@ -0,0 +1,59 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016-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/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "jouleHeatingSource.H"
+
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+bool Foam::fv::jouleHeatingSource::read(const dictionary& dict)
+{
+    if (option::read(dict))
+    {
+        coeffs_.readIfPresent("T", TName_);
+        coeffs_.lookup("anisotropicElectricalConductivity")
+            >> anisotropicElectricalConductivity_;
+
+        if (anisotropicElectricalConductivity_)
+        {
+            Info<< "    Using vector electrical conductivity" << endl;
+
+            initialiseSigma(coeffs_, vectorSigmaVsTPtr_);
+            coordSysPtr_ = coordinateSystem::New(mesh_, coeffs_);
+        }
+        else
+        {
+            Info<< "    Using scalar electrical conductivity" << endl;
+
+            initialiseSigma(coeffs_, scalarSigmaVsTPtr_);
+        }
+
+        return true;
+    }
+
+    return false;
+}
+
+
+// ************************************************************************* //
diff --git a/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSourceTemplates.C b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSourceTemplates.C
new file mode 100644
index 0000000000000000000000000000000000000000..11d7eed98c6ef912f4422511220ff3208686ec42
--- /dev/null
+++ b/src/fvOptions/sources/derived/jouleHeatingSource/jouleHeatingSourceTemplates.C
@@ -0,0 +1,147 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2016-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/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "emptyFvPatchField.H"
+
+template<class Type>
+void Foam::fv::jouleHeatingSource::initialiseSigma
+(
+    const dictionary& dict,
+    autoPtr<Function1<Type>>& sigmaVsTPtr
+)
+{
+    typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
+
+    if (dict.found("sigma"))
+    {
+        // Sigma to be defined using a Funcion1 type
+        sigmaVsTPtr = Function1<Type>::New("sigma", dict);
+
+        tmp<VolFieldType> tsigma
+        (
+            new VolFieldType
+            (
+                IOobject
+                (
+                    typeName + ":sigma",
+                    mesh_.time().timeName(),
+                    mesh_,
+                    IOobject::NO_READ,
+                    IOobject::AUTO_WRITE
+                ),
+                mesh_,
+                dimensioned<Type>
+                (
+                    "0",
+                    sqr(dimCurrent)/dimPower/dimLength,
+                    Zero
+                )
+            )
+        );
+
+        mesh_.objectRegistry::store(tsigma.ptr());
+
+        Info<< "    Conductivity 'sigma' read from dictionary as f(T)"
+            << nl << endl;
+    }
+    else
+    {
+        // Sigma to be defined by user input
+        tmp<VolFieldType> tsigma
+        (
+            new VolFieldType
+            (
+                IOobject
+                (
+                    typeName + ":sigma",
+                    mesh_.time().timeName(),
+                    mesh_,
+                    IOobject::MUST_READ,
+                    IOobject::AUTO_WRITE
+                ),
+                mesh_
+            )
+        );
+
+        mesh_.objectRegistry::store(tsigma.ptr());
+
+        Info<< "    Conductivity 'sigma' read from file" << nl << endl;
+    }
+}
+
+
+template<class Type>
+const Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh>&
+Foam::fv::jouleHeatingSource::updateSigma
+(
+    const autoPtr<Function1<Type>>& sigmaVsTPtr
+) const
+{
+    typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
+
+    VolFieldType& sigma =
+        const_cast<VolFieldType&>
+        (
+            mesh_.lookupObject<VolFieldType>(typeName + ":sigma")
+        );
+
+    if (!sigmaVsTPtr.valid())
+    {
+        // Electrical conductivity field, sigma, was specified by the user
+        return sigma;
+    }
+
+    const volScalarField& T = mesh_.lookupObject<volScalarField>(TName_);
+
+    // Internal field
+    forAll(sigma, i)
+    {
+        sigma[i] = sigmaVsTPtr->value(T[i]);
+    }
+
+
+    // Boundary field
+    typename VolFieldType::Boundary& bf = sigma.boundaryFieldRef();
+    forAll(bf, patchi)
+    {
+        fvPatchField<Type>& pf = bf[patchi];
+        if (!isA<emptyFvPatchField<Type>>(pf))
+        {
+            const scalarField& Tbf = T.boundaryField()[patchi];
+            forAll(pf, facei)
+            {
+                pf[facei] = sigmaVsTPtr->value(Tbf[facei]);
+            }
+        }
+    }
+
+    // Update processor patches
+    sigma.correctBoundaryConditions();
+
+    return sigma;
+}
+
+
+// ************************************************************************* //
diff --git a/src/sampling/probes/patchProbes.C b/src/sampling/probes/patchProbes.C
index f72647b34e6019f27135cd6ef3d8e678df37c3e6..f9c62f7f64a23f912a413768c12416022ba21729 100644
--- a/src/sampling/probes/patchProbes.C
+++ b/src/sampling/probes/patchProbes.C
@@ -200,6 +200,9 @@ void Foam::patchProbes::findElements(const fvMesh& mesh)
     processor_.setSize(nearest.size());
     processor_ = -1;
 
+    processor_.setSize(size());
+    processor_ = -1;
+
     forAll(nearest, sampleI)
     {
         processor_[sampleI] = nearest[sampleI].second().second();
@@ -207,7 +210,10 @@ void Foam::patchProbes::findElements(const fvMesh& mesh)
         {
             // Store the face to sample
             faceList_[sampleI] = nearest[sampleI].first().index();
+            label facei = faceList_[sampleI];
+            processor_[sampleI] = (facei != -1 ? Pstream::myProcNo() : -1);
         }
+        reduce(processor_[sampleI], maxOp<label>());
     }
 }
 
diff --git a/src/surfMesh/surfaceFormats/fire/FLMAsurfaceFormat.C b/src/surfMesh/surfaceFormats/fire/FLMAsurfaceFormat.C
index 4cbfb60d561c486b225e6d90d819cc72451bb768..de258c1010b627d4dca7107f909eb481b304c981 100644
--- a/src/surfMesh/surfaceFormats/fire/FLMAsurfaceFormat.C
+++ b/src/surfMesh/surfaceFormats/fire/FLMAsurfaceFormat.C
@@ -222,7 +222,7 @@ void Foam::fileFormats::FLMAsurfaceFormat<Face>::write
     // Set the precision of the points data to 10
     os.precision(10);
 
-    Info<< "points: " << pointLst.size() << endl;
+    Info<< nl << "points: " << pointLst.size() << endl;
     putFireLabel(os, pointLst.size());
     newline(os);
 
diff --git a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C
index f9e335c39eb8dd7cca3f629b277f68c197e86077..a746232d18aafdcb371dcb74c7ed7f42828d17e6 100644
--- a/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C
+++ b/src/surfMesh/surfaceFormats/stl/STLsurfaceFormat.C
@@ -24,7 +24,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "STLsurfaceFormat.H"
-#include "labelledTri.H"
 #include "triPointRef.H"
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
@@ -126,13 +125,25 @@ bool Foam::fileFormats::STLsurfaceFormat<Face>::read
 {
     this->clear();
 
-    // read in the values
+    // Read in the values
     STLReader reader(filename);
 
-    // transfer points
-    this->storedPoints().transfer(reader.points());
+    // Get the map for stitched surface points, with merge tolerance depending
+    // on the input format
+    labelList pointMap;
+    const label nUniquePoints = reader.mergePointsMap(pointMap);
 
-    // retrieve the original zone information
+    const auto& readpts = reader.points();
+
+    // Assign points
+    pointField& pointLst = this->storedPoints();
+    pointLst.setSize(nUniquePoints);
+    forAll(readpts, pointi)
+    {
+        pointLst[pointMap[pointi]] = readpts[pointi];
+    }
+
+    // Retrieve the original zone information
     List<word>  names(reader.names().xfer());
     List<label> sizes(reader.sizes().xfer());
     List<label> zoneIds(reader.zoneIds().xfer());
@@ -142,16 +153,21 @@ bool Foam::fileFormats::STLsurfaceFormat<Face>::read
 
     if (reader.sorted())
     {
-        // already sorted - generate directly
+        // Already sorted - generate directly
         forAll(faceLst, facei)
         {
             const label startPt = 3*facei;
-            faceLst[facei] = Face{startPt, startPt+1, startPt+2};
+            faceLst[facei] = Face
+            {
+                pointMap[startPt],
+                pointMap[startPt+1],
+                pointMap[startPt+2]
+            };
         }
     }
     else
     {
-        // unsorted - determine the sorted order:
+        // Unsorted - determine the sorted order:
         // avoid SortableList since we discard the main list anyhow
         List<label> faceMap;
         sortedOrder(zoneIds, faceMap);
@@ -160,7 +176,12 @@ bool Foam::fileFormats::STLsurfaceFormat<Face>::read
         forAll(faceMap, facei)
         {
             const label startPt = 3*faceMap[facei];
-            faceLst[facei] = Face{startPt, startPt+1, startPt+2};
+            faceLst[facei] = Face
+            {
+                pointMap[startPt],
+                pointMap[startPt+1],
+                pointMap[startPt+2]
+            };
         }
     }
     zoneIds.clear();
@@ -177,7 +198,6 @@ bool Foam::fileFormats::STLsurfaceFormat<Face>::read
         this->addZones(sizes);
     }
     this->addZonesToFaces(); // for labelledTri
-    this->stitchFaces(SMALL);
 
     return true;
 }
diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C
index cb2aa80823b8b074fc90c665010a7236b245cd51..b36c5fd321d6c668069709f0b5493a47dc3ca15c 100644
--- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C
+++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormat.C
@@ -78,13 +78,24 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read
 {
     this->clear();
 
-    // read in the values
+    // Read in the values
     TRIsurfaceFormatCore reader(filename);
 
-    // transfer points
-    this->storedPoints().transfer(reader.points());
+    // Get the map for stitched surface points
+    labelList pointMap;
+    const label nUniquePoints = reader.mergePointsMap(pointMap);
 
-    // retrieve the original zone information
+    const auto& readpts = reader.points();
+
+    // Assign points
+    pointField& pointLst = this->storedPoints();
+    pointLst.setSize(nUniquePoints);
+    forAll(readpts, pointi)
+    {
+        pointLst[pointMap[pointi]] = readpts[pointi];
+    }
+
+    // Retrieve the original zone information
     List<label> sizes(reader.sizes().xfer());
     List<label> zoneIds(reader.zoneIds().xfer());
 
@@ -93,16 +104,21 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read
 
     if (reader.sorted())
     {
-        // already sorted - generate directly
+        // Already sorted - generate directly
         forAll(faceLst, facei)
         {
             const label startPt = 3*facei;
-            faceLst[facei] = Face{startPt, startPt+1, startPt+2};
+            faceLst[facei] = Face
+            {
+                pointMap[startPt],
+                pointMap[startPt+1],
+                pointMap[startPt+2]
+            };
         }
     }
     else
     {
-        // unsorted - determine the sorted order:
+        // Unsorted - determine the sorted order:
         // avoid SortableList since we discard the main list anyhow
         List<label> faceMap;
         sortedOrder(zoneIds, faceMap);
@@ -111,7 +127,12 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read
         forAll(faceMap, facei)
         {
             const label startPt = 3*faceMap[facei];
-            faceLst[facei] = Face{startPt, startPt+1, startPt+2};
+            faceLst[facei] = Face
+            {
+                pointMap[startPt],
+                pointMap[startPt+1],
+                pointMap[startPt+2]
+            };
         }
     }
     zoneIds.clear();
@@ -121,7 +142,7 @@ bool Foam::fileFormats::TRIsurfaceFormat<Face>::read
 
     this->addZones(sizes);
     this->addZonesToFaces(); // for labelledTri
-    this->stitchFaces(SMALL);
+
     return true;
 }
 
diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C
index 87cc04d20ec49afcef7da2ff05adef49922aaae6..8f473d11203f5553a5b6907b45814ec375eae1d2 100644
--- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C
+++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -27,6 +27,7 @@ License
 #include "IFstream.H"
 #include "IOmanip.H"
 #include "IStringStream.H"
+#include "mergePoints.H"
 #include "Map.H"
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
@@ -71,7 +72,7 @@ bool Foam::fileFormats::TRIsurfaceFormatCore::read
 
     // uses similar structure as STL, just some points
     // the rest of the reader resembles the STL binary reader
-    DynamicList<point> dynPoints;
+    DynamicList<STLpoint> dynPoints;
     DynamicList<label> dynZones;
     DynamicList<label> dynSizes;
     HashTable<label>   lookup;
@@ -94,7 +95,7 @@ bool Foam::fileFormats::TRIsurfaceFormatCore::read
 
         IStringStream lineStream(line);
 
-        point p
+        STLpoint p
         (
             readScalar(lineStream),
             readScalar(lineStream),
@@ -106,7 +107,7 @@ bool Foam::fileFormats::TRIsurfaceFormatCore::read
         dynPoints.append(p);
         dynPoints.append
         (
-            point
+            STLpoint
             (
                 readScalar(lineStream),
                 readScalar(lineStream),
@@ -115,7 +116,7 @@ bool Foam::fileFormats::TRIsurfaceFormatCore::read
         );
         dynPoints.append
         (
-            point
+            STLpoint
             (
                 readScalar(lineStream),
                 readScalar(lineStream),
@@ -179,4 +180,43 @@ bool Foam::fileFormats::TRIsurfaceFormatCore::read
 }
 
 
+void Foam::fileFormats::TRIsurfaceFormatCore::clear()
+{
+    sorted_ = true;
+    points_.clear();
+    zoneIds_.clear();
+    sizes_.clear();
+}
+
+
+Foam::label Foam::fileFormats::TRIsurfaceFormatCore::mergePointsMap
+(
+    labelList& pointMap
+) const
+{
+    // Use merge tolerance as per STL ascii
+    return mergePointsMap
+    (
+        100 * doubleScalarSMALL,
+        pointMap
+    );
+}
+
+
+Foam::label Foam::fileFormats::TRIsurfaceFormatCore::mergePointsMap
+(
+    const scalar mergeTol,
+    labelList& pointMap
+) const
+{
+    return Foam::mergePoints
+    (
+        points_,
+        mergeTol,
+        false, // verbose
+        pointMap
+    );
+}
+
+
 // ************************************************************************* //
diff --git a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.H b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.H
index 12ce08e3725fdc72d03e1f4b96313f7879baa186..5d4b76fd6e0d122fb238e2433fca22430043a90f 100644
--- a/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.H
+++ b/src/surfMesh/surfaceFormats/tri/TRIsurfaceFormatCore.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -36,7 +36,7 @@ SourceFiles
 #define TRIsurfaceFormatCore_H
 
 #include "surfaceFormatsCore.H"
-#include "triFace.H"
+#include "STLpoint.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -58,7 +58,7 @@ class TRIsurfaceFormatCore
         bool sorted_;
 
         //- The points supporting the facets
-        pointField points_;
+        List<STLpoint> points_;
 
         //- The zones associated with the faces
         List<label> zoneIds_;
@@ -83,7 +83,7 @@ public:
     // Constructors
 
         //- Read from file, filling in the information
-        TRIsurfaceFormatCore(const fileName&);
+        TRIsurfaceFormatCore(const fileName& filename);
 
 
     //- Destructor
@@ -92,35 +92,39 @@ public:
 
     // Member Functions
 
+        //- Flush all values
+        void clear();
+
+        //- Calculate merge points mapping, return old to new pointMap.
+        //  Use merge tolerance as per STL ascii
+        //  \return number of unique points
+        label mergePointsMap(labelList& pointMap) const;
+
+        //- Calculate merge points mapping, return old to new pointMap.
+        //  \return number of unique points
+        label mergePointsMap(const scalar mergeTol, labelList& pointMap) const;
+
+
         //- File read was already sorted
-        bool sorted() const
+        inline bool sorted() const
         {
             return sorted_;
         }
 
-        //- Flush all values
-        void clear()
-        {
-            sorted_ = true;
-            points_.clear();
-            zoneIds_.clear();
-            sizes_.clear();
-        }
-
         //- Return full access to the points
-        pointField& points()
+        inline List<STLpoint>& points()
         {
             return points_;
         }
 
         //- Return full access to the zones
-        List<label>& zoneIds()
+        inline List<label>& zoneIds()
         {
             return zoneIds_;
         }
 
         //- The list of zone sizes in the order of their first appearance
-        List<label>& sizes()
+        inline List<label>& sizes()
         {
             return sizes_;
         }
diff --git a/src/surfMesh/triSurface/interfaces/STL/readSTL.C b/src/surfMesh/triSurface/interfaces/STL/readSTL.C
index 43c9453a524e045805b69c0561a878d819b626a9..70b1e9f44454d172af6031f59e0127d865efb751 100644
--- a/src/surfMesh/triSurface/interfaces/STL/readSTL.C
+++ b/src/surfMesh/triSurface/interfaces/STL/readSTL.C
@@ -24,7 +24,6 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "STLReader.H"
-#include "mergePoints.H"
 #include "triSurface.H"
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
@@ -42,22 +41,13 @@ bool Foam::triSurface::readSTL(const fileName& STLfileName, bool forceBinary)
         )
     );
 
-    // Stitch points
+    // Get the map for stitched surface points, with merge tolerance depending
+    // on the input format
     labelList pointMap;
-    label nUniquePoints = mergePoints
-    (
-        reader.points(),
-        (
-            // With the merge distance depending on the input format
-            (reader.stlFormat() == fileFormats::STLCore::BINARY ? 10 : 100)
-          * SMALL
-        ),
-        false,                  // verbose
-        pointMap                // old to new point map
-    );
+    const label nUniquePoints = reader.mergePointsMap(pointMap);
 
-    const pointField& readpts = reader.points();
-    const labelList&  zoneIds = reader.zoneIds();
+    const auto& readpts = reader.points();
+    const labelList& zoneIds = reader.zoneIds();
 
     pointField& pointLst = storedPoints();
     List<Face>& faceLst  = storedFaces();
@@ -84,18 +74,16 @@ bool Foam::triSurface::readSTL(const fileName& STLfileName, bool forceBinary)
         f.region() = zoneIds[i];
     }
 
-    // Set patch names (and sizes)
-    // - there is likely a more efficient means of doing this
+    // Set patch name/index.
     if (reader.stlFormat() == fileFormats::STLCore::ASCII)
     {
         const List<word>& names = reader.names();
 
         patches_.setSize(names.size());
-        forAll(names, namei)
+        forAll(patches_, patchi)
         {
-            patches_[namei].name() = names[namei];
+            patches_[patchi] = geometricSurfacePatch(names[patchi], patchi);
         }
-        setDefaultPatches();
     }
 
     return true;
diff --git a/tutorials/combustion/chemFoam/gri/system/controlDict b/tutorials/combustion/chemFoam/gri/system/controlDict
index caaf117c7cedf56bd9e3b95b68f0557864e5a722..699b1695dc2915d034559fe0f911f99d4f720317 100644
--- a/tutorials/combustion/chemFoam/gri/system/controlDict
+++ b/tutorials/combustion/chemFoam/gri/system/controlDict
@@ -39,7 +39,7 @@ purgeWrite      0;
 
 writeFormat     ascii;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/chemFoam/h2/system/controlDict b/tutorials/combustion/chemFoam/h2/system/controlDict
index 51a10024b785b5980a1711fc7af8f9b2886f771f..c1890e0c3d91baa48b01eb4769421f64d8542c04 100644
--- a/tutorials/combustion/chemFoam/h2/system/controlDict
+++ b/tutorials/combustion/chemFoam/h2/system/controlDict
@@ -39,7 +39,7 @@ purgeWrite      0;
 
 writeFormat     ascii;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/chemFoam/ic8h18/system/controlDict b/tutorials/combustion/chemFoam/ic8h18/system/controlDict
index 6f840429abdeb38829e928bb946ff494426b0f30..728ba8b503d02096d897dfa0049ffdd24b7ed0ec 100644
--- a/tutorials/combustion/chemFoam/ic8h18/system/controlDict
+++ b/tutorials/combustion/chemFoam/ic8h18/system/controlDict
@@ -39,7 +39,7 @@ purgeWrite      0;
 
 writeFormat     ascii;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/chemFoam/ic8h18_TDAC/system/controlDict b/tutorials/combustion/chemFoam/ic8h18_TDAC/system/controlDict
index 6f840429abdeb38829e928bb946ff494426b0f30..728ba8b503d02096d897dfa0049ffdd24b7ed0ec 100644
--- a/tutorials/combustion/chemFoam/ic8h18_TDAC/system/controlDict
+++ b/tutorials/combustion/chemFoam/ic8h18_TDAC/system/controlDict
@@ -39,7 +39,7 @@ purgeWrite      0;
 
 writeFormat     ascii;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/chemFoam/nc7h16/system/controlDict b/tutorials/combustion/chemFoam/nc7h16/system/controlDict
index d3354cfdcffcdab9840c134e306621d62fc4bfd1..eea52780494a16c3f84c8328e6fb0ab2ca3aa05e 100644
--- a/tutorials/combustion/chemFoam/nc7h16/system/controlDict
+++ b/tutorials/combustion/chemFoam/nc7h16/system/controlDict
@@ -39,7 +39,7 @@ purgeWrite      0;
 
 writeFormat     ascii;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/engineFoam/kivaTest/system/controlDict b/tutorials/combustion/engineFoam/kivaTest/system/controlDict
index 8418e8b269b73a068188d23d5a8ed226563051b6..57744257b5e21438580bea4909cb30c213886483 100644
--- a/tutorials/combustion/engineFoam/kivaTest/system/controlDict
+++ b/tutorials/combustion/engineFoam/kivaTest/system/controlDict
@@ -59,10 +59,6 @@ functions
         libs            ("libutilityFunctionObjects.so");
         name            setDeltaT;
 
-        code
-        #{
-        #};
-
         codeExecute
         #{
             const Time& runTime = mesh().time();
@@ -75,6 +71,14 @@ functions
             }
         #};
     }
+
+    fieldMinMax
+    {
+        type            fieldMinMax;
+        libs            ("libfieldFunctionObjects.so");
+        fields          (p);
+    }
 }
 
+
 // ************************************************************************* //
diff --git a/tutorials/combustion/fireFoam/LES/compartmentFire/system/controlDict b/tutorials/combustion/fireFoam/LES/compartmentFire/system/controlDict
index 0c0df8816b6ddffd133d6954b0aba4f4686d8088..c26e8826fa0e291636fed5a31cc84fadaa9a3104 100644
--- a/tutorials/combustion/fireFoam/LES/compartmentFire/system/controlDict
+++ b/tutorials/combustion/fireFoam/LES/compartmentFire/system/controlDict
@@ -36,7 +36,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/fireFoam/LES/flameSpreadWaterSuppressionPanel/system/controlDict b/tutorials/combustion/fireFoam/LES/flameSpreadWaterSuppressionPanel/system/controlDict
index 6698f3e0760e158b91db8de41755d367e15720e9..e44ce64c193d369636f69a335cb90b7d501239c6 100644
--- a/tutorials/combustion/fireFoam/LES/flameSpreadWaterSuppressionPanel/system/controlDict
+++ b/tutorials/combustion/fireFoam/LES/flameSpreadWaterSuppressionPanel/system/controlDict
@@ -38,7 +38,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/fireFoam/LES/simplePMMApanel/system/controlDict b/tutorials/combustion/fireFoam/LES/simplePMMApanel/system/controlDict
index dbe28ded588c72ef946835da3d5ddf940f28b0c9..3e5e6b6df62431d413aaf2d7ffb6323cb8420c20 100644
--- a/tutorials/combustion/fireFoam/LES/simplePMMApanel/system/controlDict
+++ b/tutorials/combustion/fireFoam/LES/simplePMMApanel/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/fireFoam/LES/smallPoolFire2D/system/controlDict b/tutorials/combustion/fireFoam/LES/smallPoolFire2D/system/controlDict
index 7b31a377fccfe28b75b09bc033980c1bfb81ea94..89e9955257779ec8649fae5f7872bed067ba413b 100644
--- a/tutorials/combustion/fireFoam/LES/smallPoolFire2D/system/controlDict
+++ b/tutorials/combustion/fireFoam/LES/smallPoolFire2D/system/controlDict
@@ -36,7 +36,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/fireFoam/LES/smallPoolFire3D/system/controlDict b/tutorials/combustion/fireFoam/LES/smallPoolFire3D/system/controlDict
index 7a6bda787caaa6714d28b06967dc479aeafdec36..460b414a692d16ec0d21e714b7f54b98e58e9bf7 100644
--- a/tutorials/combustion/fireFoam/LES/smallPoolFire3D/system/controlDict
+++ b/tutorials/combustion/fireFoam/LES/smallPoolFire3D/system/controlDict
@@ -36,7 +36,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/controlDict b/tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/controlDict
index f10cc8d6f23a8018772c116eabeff8b94f2dc869..617aeee0aafce990e08d20b6d4b9c8b5ae4b760d 100644
--- a/tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/controlDict
+++ b/tutorials/combustion/reactingFoam/RAS/DLR_A_LTS/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  10;
 
-writeCompression no;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/controlDict b/tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/controlDict
index eb59adc50e9bfeff4cdd04800ddda58d6596ccab..049999fab6b995d85ae0c32612878319a33630c2 100644
--- a/tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/controlDict
+++ b/tutorials/combustion/reactingFoam/RAS/SandiaD_LTS/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  10;
 
-writeCompression no;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/controlDict b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/controlDict
index 3698ec483f8f65e1dbf090a6f96401acd7ae8803..6a78a12018d1ba100e94be223a4eb17a817ddb11 100644
--- a/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/controlDict
+++ b/tutorials/compressible/rhoPimpleFoam/RAS/TJunction/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/air/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/air/changeDictionaryDict
index 46208629875248ea9a0723a09c2d3026cd632907..9e4ef1a6b35a0a287a7da91c60270409b0613c29 100644
--- a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/air/changeDictionaryDict
+++ b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/air/changeDictionaryDict
@@ -72,6 +72,7 @@ dictionaryReplacement
                 qrNbr           none;
                 qr              qr;
                 kappa           none;
+                thermalInertia  true;
                 value           uniform 300;
             }
         }
diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/controlDict b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/controlDict
index b03a976296f63ce07d1f8535c23b77f28492c957..597aae81209652e2ff18ab331f700b3153ebe4b8 100644
--- a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/controlDict
+++ b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  7;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/floor/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/floor/changeDictionaryDict
index 3860f7dc3fcc24b619a2f3a19ac13d94d2d8e0ef..1b15cfcc0613b25b41d073917a7e77771830fbb1 100644
--- a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/floor/changeDictionaryDict
+++ b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/floor/changeDictionaryDict
@@ -43,6 +43,7 @@ dictionaryReplacement
                 qrNbr           none;
                 qr              none;
                 kappa           none;
+                thermalInertia  true;
                 value           uniform 300;
             }
 
@@ -54,6 +55,7 @@ dictionaryReplacement
                 qrNbr           qr;
                 qr              none;
                 kappa           none;
+                thermalInertia  true;
                 value           uniform 300;
             }
 
diff --git a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/solid/changeDictionaryDict b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/solid/changeDictionaryDict
index 080b5fba86def0d2b8101ace168d0f0e7217dfbb..4c0e93ace8af2683d28905180d4f5530baefca21 100644
--- a/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/solid/changeDictionaryDict
+++ b/tutorials/heatTransfer/chtMultiRegionFoam/externalSolarLoad/system/solid/changeDictionaryDict
@@ -37,6 +37,7 @@ dictionaryReplacement
                 qrNbr           qr;
                 qr              none;
                 kappa           none;
+                thermalInertia  true;
                 value           uniform 300;
             }
 
@@ -48,6 +49,7 @@ dictionaryReplacement
                 qrNbr           none;
                 qr              none;
                 kappa           none;
+                thermalInertia  true;
                 value           uniform 300;
             }
 
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/T b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/T
new file mode 100644
index 0000000000000000000000000000000000000000..302392cd2cb9d078fd840f16e39aba279492d901
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/T
@@ -0,0 +1,49 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v1612+                                |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0/solid";
+    object      T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [ 0 0 0 1 0 0 0 ];
+
+internalField   uniform 500;
+
+boundaryField
+{
+    left
+    {
+        type            fixedValue;
+        value           uniform 500;
+    }
+    right
+    {
+        type            fixedValue;
+        value           uniform 500;
+    }
+    top
+    {
+        type            zeroGradient;
+    }
+    bottom
+    {
+        type            zeroGradient;
+    }
+    frontAndBack
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/jouleHeatingSource:V b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/jouleHeatingSource:V
new file mode 100644
index 0000000000000000000000000000000000000000..407005dbd410f993be2fa147e144f63d8e00281b
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/jouleHeatingSource:V
@@ -0,0 +1,49 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v1612+                                |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0/heater";
+    object      jouleHeatingSource:V;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [ 1 2 -3 0 0 -1 0 ];
+
+internalField   uniform 0;
+
+boundaryField
+{
+    left
+    {
+        type            fixedValue;
+        value           uniform 1.5;
+    }
+    right
+    {
+        type            fixedValue;
+        value           uniform 0;
+    }
+    top
+    {
+        type            zeroGradient;
+    }
+    bottom
+    {
+        type            zeroGradient;
+    }
+    frontAndBack
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/jouleHeatingSource:sigma b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/jouleHeatingSource:sigma
new file mode 100644
index 0000000000000000000000000000000000000000..b3acde6b3665c798eb5bd0aabecb0df601553d39
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/jouleHeatingSource:sigma
@@ -0,0 +1,47 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v1612+                                |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0/heater";
+    object      jouleHeatingSource:sigma;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [ -1 -3 3 0 0 2 0 ];
+
+internalField   uniform  127599.8469;
+
+boundaryField
+{
+    left
+    {
+        type            zeroGradient;
+    }
+    right
+    {
+        type            zeroGradient;
+    }
+    top
+    {
+        type            zeroGradient;
+    }
+    bottom
+    {
+        type            zeroGradient;
+    }
+    frontAndBack
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/p b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/p
new file mode 100644
index 0000000000000000000000000000000000000000..d0b8fa4f65eaa44367c142cbf6c7894c0090a632
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/0.orig/solid/p
@@ -0,0 +1,36 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  v1612+                                |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       volScalarField;
+    location    "0/solid";
+    object      p;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions      [1 -1 -2 0 0 0 0];
+
+internalField   uniform 100000;
+
+boundaryField
+{
+    ".*"
+    {
+        type            calculated;
+        value           uniform 100000;
+    }
+    frontAndBack
+    {
+        type            empty;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allclean b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allclean
new file mode 100755
index 0000000000000000000000000000000000000000..31c0b764b5a135ceb1891ba7d5dda8123cb51ded
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allclean
@@ -0,0 +1,14 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # Run from this directory
+
+# Source tutorial clean functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+cleanCase
+rm -rf 0
+
+foamCleanPolyMesh -region solid
+
+rm -f *.OpenFOAM OF_vs_ANALYTICAL.eps
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allrun b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allrun
new file mode 100755
index 0000000000000000000000000000000000000000..98857416a91cbba898dc7c53731e2306b08af098
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allrun
@@ -0,0 +1,13 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # Run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+./Allrun.pre
+
+runApplication $(getApplication)
+
+./createGraphs
+
+# -----------------------------------------------------------------------------
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allrun-parallel b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allrun-parallel
new file mode 100755
index 0000000000000000000000000000000000000000..b48e4c119d991666fbaa5898f239939af8a88f90
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allrun-parallel
@@ -0,0 +1,17 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # Run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+./Allrun.pre
+
+runApplication -s solid decomposePar -region solid
+
+runParallel $(getApplication)
+
+runApplication -s solid reconstructPar -latestTime -region solid
+
+./createGraphs
+
+# -----------------------------------------------------------------------------
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allrun.pre b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allrun.pre
new file mode 100755
index 0000000000000000000000000000000000000000..c8198f9848a5385a6251bd757cbee53fa0ed6398
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/Allrun.pre
@@ -0,0 +1,15 @@
+#!/bin/sh
+cd ${0%/*} || exit 1    # Run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+# Create meshe
+runApplication -s solid blockMesh -region solid
+
+# create dummy files for post-processing
+paraFoam -touch -region solid
+
+restore0Dir
+
+# -----------------------------------------------------------------------------
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/constant/regionProperties b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/constant/regionProperties
new file mode 100644
index 0000000000000000000000000000000000000000..4b0d4cf1d548510b21558fdebebb15562da22a53
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/constant/regionProperties
@@ -0,0 +1,24 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "constant";
+    object      regionProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+regions
+(
+    fluid   ()
+    solid   (solid)
+);
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/constant/solid/thermophysicalProperties b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/constant/solid/thermophysicalProperties
new file mode 100644
index 0000000000000000000000000000000000000000..a24fa3e3ab72e2e13fccba9fb102b26c43802341
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/constant/solid/thermophysicalProperties
@@ -0,0 +1,54 @@
+/*--------------------------------*- C++ -*----------------------------------* \
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      thermophysicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType
+{
+    type            heSolidThermo;
+    mixture         pureMixture;
+    transport       constIso;
+    thermo          hConst;
+    equationOfState rhoConst;
+    specie          specie;
+    energy          sensibleEnthalpy;
+}
+
+mixture
+{
+    specie
+    {
+        nMoles      1;
+        molWeight   12;
+    }
+
+    transport
+    {
+        kappa   200;
+    }
+
+    thermodynamics
+    {
+        Hf      0;
+        Cp      700;
+    }
+
+    equationOfState
+    {
+        rho     8000;
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/createGraphs b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/createGraphs
new file mode 100755
index 0000000000000000000000000000000000000000..04bbc57ea0a4109b12822ba42e3cac767d0ef9ea
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/createGraphs
@@ -0,0 +1,87 @@
+#!/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
+#     createGraphs
+#
+# Description
+#     Creates .eps graph of OpenFOAM results vs analytical solution for the
+#     Joule heating case
+#
+#------------------------------------------------------------------------------
+
+cd ${0%/*} || exit 1    # Run from this directory
+
+# Stop on first error
+set -e
+
+# test if gnuplot exists on the system
+if ! which gnuplot > /dev/null 2>&1
+then
+    echo "FOAM FATAL ERROR: gnuplot not found - skipping graph creation" >&2
+    exit 1
+fi
+
+
+echo "Creating graph"
+OFDATA='postProcessing/sample1/solid/20000/centreLine_T_jouleHeatingSource:V_jouleHeatingSource:sigma.xy'
+
+if [ ! -f "$OFDATA" ]
+then
+    echo "FOAM FATAL ERROR: OpenFOAM results not available in $OFDATA" >&2
+    exit 1
+fi
+
+gnuplot<<EOF
+set terminal postscript eps color enhanced
+set output "OF_vs_ANALYTICAL.eps"
+set xlabel "Length, x / [m]"
+set ylabel "Temperature / [K]"
+set grid
+set key left top
+rho = 7.837e-6
+sigma = 1/rho
+kappa = 200
+L = 2.5
+D = 0.1
+H = 0.1
+vol = 2.0*L*D*H
+V = 1.5
+R = rho*2*L/(D*H)
+I = V/R
+P = I*V
+Q = P/vol
+Ts = 500
+T(x) = Q*L*L/(2*kappa)*(1-(x/L)*(x/L)) + Ts
+
+
+plot \
+    "$OFDATA" u 1:2 w lines title "OpenFOAM", \
+    T(x) w linespoints lt 0 pt 6 pi 15 title "Analytical"
+EOF
+
+
+echo "End"
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/controlDict b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/controlDict
new file mode 100644
index 0000000000000000000000000000000000000000..a07195d4fe62c70e9959cc1590c0ebc6fb533317
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/controlDict
@@ -0,0 +1,75 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application     chtMultiRegionSimpleFoam;
+
+startFrom       startTime;
+
+startTime       0;
+
+stopAt          endTime;
+
+endTime         20000;
+
+deltaT          1;
+
+writeControl    timeStep;
+
+writeInterval   50;
+
+purgeWrite      2;
+
+writeFormat     ascii;
+
+writePrecision  6;
+
+writeCompression off;
+
+timeFormat      general;
+
+timePrecision   6;
+
+runTimeModifiable true;
+
+functions
+{
+    sample1
+    {
+        type            sets;
+        libs            ("libsampling.so");
+        writeControl    outputTime;
+        region          solid;
+        fields          (T jouleHeatingSource:V jouleHeatingSource:sigma);
+        interpolationScheme cellPoint;
+        setFormat       raw;
+
+        sets
+        (
+            centreLine
+            {
+                type        uniform;
+                axis        x;
+                start       (-2.5 0.05 0.05);
+                end         ( 2.5 0.05 0.05);
+                nPoints     20;
+            }
+        );
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/decomposeParDict b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/decomposeParDict
new file mode 100644
index 0000000000000000000000000000000000000000..5448946b393246ebd70ba0b83352f9c4d257c619
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/decomposeParDict
@@ -0,0 +1,23 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      decomposeParDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+numberOfSubdomains 4;
+
+method          scotch;
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/blockMeshDict b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/blockMeshDict
new file mode 100644
index 0000000000000000000000000000000000000000..aad40c34c05f32dc3e2a59a878501abeadb2ef7c
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/blockMeshDict
@@ -0,0 +1,89 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+convertToMeters 1;
+
+vertices
+(
+    (-2.5   0   0)
+    ( 2.5   0   0)
+    ( 2.5 0.1   0)
+    (-2.5 0.1   0)
+    (-2.5   0 0.1)
+    ( 2.5   0 0.1)
+    ( 2.5 0.1 0.1)
+    (-2.5 0.1 0.1)
+);
+
+blocks
+(
+    hex (0 1 2 3 4 5 6 7) (500 20 1) simpleGrading (1 1 1)
+);
+
+edges
+(
+);
+
+boundary
+(
+    top
+    {
+        type    patch;
+        faces
+        (
+            (3 7 6 2)
+        );
+    }
+    bottom
+    {
+        type    patch;
+        faces
+        (
+            (1 5 4 0)
+        );
+    }
+    left
+    {
+        type    patch;
+        faces
+        (
+            (0 4 7 3)
+        );
+    }
+    right
+    {
+        type    patch;
+        faces
+        (
+            (2 6 5 1)
+        );
+    }
+    frontAndBack
+    {
+        type empty;
+        faces
+        (
+            (0 3 2 1)
+            (4 5 6 7)
+        );
+    }
+);
+
+mergePatchPairs
+(
+);
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/decomposeParDict b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/decomposeParDict
new file mode 120000
index 0000000000000000000000000000000000000000..46638e60f61f453fde97c51772ad6111792db0f6
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/decomposeParDict
@@ -0,0 +1 @@
+../decomposeParDict
\ No newline at end of file
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/fvOptions b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/fvOptions
new file mode 100644
index 0000000000000000000000000000000000000000..114d7e7736edc6ac2c79cda92d90c1c9056b8f98
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/fvOptions
@@ -0,0 +1,39 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    location    "system";
+    object      fvOptions;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+heating
+{
+    type            jouleHeatingSource;
+    active          true;
+
+    jouleHeatingSourceCoeffs
+    {
+        anisotropicElectricalConductivity no;
+
+        // Optionally specify sigma as a function of temperature
+        //sigma           127599.8469;
+        //
+        //sigma           table
+        //(
+        //    (0      127599.8469)
+        //    (1000   127599.8469)
+        //);
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/fvSchemes b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/fvSchemes
new file mode 100644
index 0000000000000000000000000000000000000000..3ae1552969519ccbadf1bdce0a105a55cf0db8c8
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/fvSchemes
@@ -0,0 +1,50 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+    default     steadyState;
+}
+
+gradSchemes
+{
+    default     Gauss linear;
+}
+
+divSchemes
+{
+    default     none;
+}
+
+laplacianSchemes
+{
+    default     none;
+    laplacian(alpha,h) Gauss linear uncorrected;
+    laplacian(jouleHeatingSource:sigma,jouleHeatingSource:V) Gauss linear uncorrected;
+}
+
+interpolationSchemes
+{
+    default     linear;
+}
+
+snGradSchemes
+{
+    default     uncorrected;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/fvSolution b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/fvSolution
new file mode 100644
index 0000000000000000000000000000000000000000..b155dcedefa184000b2319c6daf5e5d4abcd398d
--- /dev/null
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/jouleHeatingSolid/system/solid/fvSolution
@@ -0,0 +1,49 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+| =========                 |                                                 |
+| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
+|  \\    /   O peration     | Version:  plus                                  |
+|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
+|    \\/     M anipulation  |                                                 |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+    version     2.0;
+    format      ascii;
+    class       dictionary;
+    object      fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+    h
+    {
+        solver           PCG;
+        preconditioner   DIC;
+        tolerance        0;
+        relTol           0.1;
+    }
+
+    jouleHeatingSource:V
+    {
+        solver           PCG;
+        preconditioner   DIC;
+        tolerance        0;
+        relTol           0.1;
+    }
+}
+
+SIMPLE
+{
+    nNonOrthogonalCorrectors 0;
+}
+
+relaxationFactors
+{
+    equations
+    {
+        h               0.99;
+    }
+}
+
+// ************************************************************************* //
diff --git a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/controlDict b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/controlDict
index a67a916f4bb77ef31ed82fb1dd3b2e15a1a2d0b4..33a09ba5bbdad27c1c4112740db6209d25932fcc 100644
--- a/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/controlDict
+++ b/tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  7;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/SRFPimpleFoam/rotor2D/system/controlDict b/tutorials/incompressible/SRFPimpleFoam/rotor2D/system/controlDict
index 8a0278ff0786b192fcd8f1234e43d1e07f64a746..1b010ffc90b57c46aa6577192426a2668f09e6aa 100644
--- a/tutorials/incompressible/SRFPimpleFoam/rotor2D/system/controlDict
+++ b/tutorials/incompressible/SRFPimpleFoam/rotor2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/pimpleFoam/RAS/TJunction/system/controlDict b/tutorials/incompressible/pimpleFoam/RAS/TJunction/system/controlDict
index 7f5d24e02256c4b4c0c5fd1bd6717ec68262c6e6..78cd54325ad2a9b62c2e61b108badd63482792df 100644
--- a/tutorials/incompressible/pimpleFoam/RAS/TJunction/system/controlDict
+++ b/tutorials/incompressible/pimpleFoam/RAS/TJunction/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/0.orig/p b/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/0.orig/p
index 8260a694a24eadfaae231b941a363a69f0cbbfcc..ea3298915748482ac5d006c308e7bd635c8a330a 100644
--- a/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/0.orig/p
+++ b/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/0.orig/p
@@ -23,12 +23,17 @@ boundaryField
 {
     inlet
     {
-        type            uniformTotalPressure;
-        p0              table
-        (
-            (0 10)
-            (1 40)
-        );
+        type            fanPressure;
+        outOfBounds     clamp;
+        direction       in;
+        readerType      openFoam;
+        hasHeaderLine   true;
+        file            "$FOAM_CASE/constant/FluxVsdP.dat";
+        //nonDimensional  true;
+        //rpm             300;
+        //dm              2e-2;
+        outOfBounds     clamp;
+        p0              uniform 30;
     }
     outlet1
     {
diff --git a/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/constant/FluxVsdP.dat b/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/constant/FluxVsdP.dat
new file mode 100644
index 0000000000000000000000000000000000000000..94cdf398acb1ac9416d6efefa2f1a07da282381c
--- /dev/null
+++ b/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/constant/FluxVsdP.dat
@@ -0,0 +1,5 @@
+(
+    (0      20)
+    (0.0023 10)
+    (0.003  5)
+);
diff --git a/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/system/controlDict b/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/system/controlDict
index 1f9cdb00906dc73ca084532ac136ee3b69667414..7b96503d8e216020f64bc80870aee6b932689cd5 100644
--- a/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/system/controlDict
+++ b/tutorials/incompressible/pimpleFoam/RAS/TJunctionFan/system/controlDict
@@ -36,7 +36,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/pimpleFoam/RAS/elipsekkLOmega/system/controlDict b/tutorials/incompressible/pimpleFoam/RAS/elipsekkLOmega/system/controlDict
index 9ae227f73dd17cea3db38c689a338acab16a727b..f199f31bca204015d57468d0eb2bc90cb02dd247 100644
--- a/tutorials/incompressible/pimpleFoam/RAS/elipsekkLOmega/system/controlDict
+++ b/tutorials/incompressible/pimpleFoam/RAS/elipsekkLOmega/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/pisoFoam/LES/motorBike/lesFiles/controlDict b/tutorials/incompressible/pisoFoam/LES/motorBike/lesFiles/controlDict
index ae0d555e82486dd91934504588853b61260cbc0e..174d5b764464cc927176d590b2a29f8cd295d122 100644
--- a/tutorials/incompressible/pisoFoam/LES/motorBike/lesFiles/controlDict
+++ b/tutorials/incompressible/pisoFoam/LES/motorBike/lesFiles/controlDict
@@ -38,7 +38,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/system/controlDict b/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/system/controlDict
index bfbcc3d750b4fd244d5fd360f14fbea46e5a6c8b..452037f221d4480916172215414e4685cc623e42 100644
--- a/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/system/controlDict
+++ b/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike/system/controlDict
@@ -39,7 +39,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/system/controlDict b/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/system/controlDict
index f300392734d171a735e4319c60423fd0fee51b17..b3be6562c841366d9ec77f4eab1a29dddb50dc78 100644
--- a/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/system/controlDict
+++ b/tutorials/incompressible/porousSimpleFoam/straightDuctImplicit/system/controlDict
@@ -36,7 +36,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/simpleFoam/motorBike/system/controlDict b/tutorials/incompressible/simpleFoam/motorBike/system/controlDict
index d728f0be9c3d7a85c8ae660c9530b9b9a66386b6..a626f4d688372f87d2a73d1ece56ba06125112c6 100644
--- a/tutorials/incompressible/simpleFoam/motorBike/system/controlDict
+++ b/tutorials/incompressible/simpleFoam/motorBike/system/controlDict
@@ -36,7 +36,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/simpleFoam/pipeCyclic/system/controlDict b/tutorials/incompressible/simpleFoam/pipeCyclic/system/controlDict
index 5731dba7683c1530cbd646b21d4c5e8ebe277e4a..ab71ea78193c935afa2f301c55133632c3722a9b 100644
--- a/tutorials/incompressible/simpleFoam/pipeCyclic/system/controlDict
+++ b/tutorials/incompressible/simpleFoam/pipeCyclic/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/incompressible/simpleFoam/turbineSiting/system/controlDict b/tutorials/incompressible/simpleFoam/turbineSiting/system/controlDict
index 32921b4093cd76d9155c2139faea28bd57b61da5..2654bdd2569c8bc3350463191d72288e994d5c0b 100644
--- a/tutorials/incompressible/simpleFoam/turbineSiting/system/controlDict
+++ b/tutorials/incompressible/simpleFoam/turbineSiting/system/controlDict
@@ -36,7 +36,7 @@ writeFormat     binary;
 
 writePrecision  12;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/DPMFoam/Goldschmidt/system/controlDict b/tutorials/lagrangian/DPMFoam/Goldschmidt/system/controlDict
index 5d2939e0722bf0928c6fb951e38638f6060e0339..d51f8ac5e31427d32c84568312f7a43ec4c4464c 100644
--- a/tutorials/lagrangian/DPMFoam/Goldschmidt/system/controlDict
+++ b/tutorials/lagrangian/DPMFoam/Goldschmidt/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/MPPICFoam/Goldschmidt/system/controlDict b/tutorials/lagrangian/MPPICFoam/Goldschmidt/system/controlDict
index c86a8ad98118bdc7d9533dc2dc04aeab945b9013..5145a84a04b1da1db91cc9d93931cfbe0ab29b32 100644
--- a/tutorials/lagrangian/MPPICFoam/Goldschmidt/system/controlDict
+++ b/tutorials/lagrangian/MPPICFoam/Goldschmidt/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/MPPICFoam/column/system/controlDict b/tutorials/lagrangian/MPPICFoam/column/system/controlDict
index b2382111776da2243da4500a1154ad2eb8650b25..8dc0b7be58d049affcf7ce1375392246673b4514 100644
--- a/tutorials/lagrangian/MPPICFoam/column/system/controlDict
+++ b/tutorials/lagrangian/MPPICFoam/column/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  8;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/MPPICFoam/cyclone/system/controlDict b/tutorials/lagrangian/MPPICFoam/cyclone/system/controlDict
index 28d86e96e0ebfd20e446e9bf21306ee18944e461..9dfb0e9b3ba231c2769ecd05de7462b69ef0835d 100644
--- a/tutorials/lagrangian/MPPICFoam/cyclone/system/controlDict
+++ b/tutorials/lagrangian/MPPICFoam/cyclone/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/MPPICFoam/injectionChannel/system/controlDict b/tutorials/lagrangian/MPPICFoam/injectionChannel/system/controlDict
index 7ce96d90567a70dcd0b614690a8541723e2a7178..34cf54c42f0cfd2a46dea236d5d8932101aed3e4 100644
--- a/tutorials/lagrangian/MPPICFoam/injectionChannel/system/controlDict
+++ b/tutorials/lagrangian/MPPICFoam/injectionChannel/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/system/controlDict b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/system/controlDict
index 877f52c968d21de7d9bc5cbfd5dc95565d9764ed..4d9f2988e25a372d102f42aa3c457a5da4758740 100644
--- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/system/controlDict
+++ b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperEmptying/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/system/controlDict b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/system/controlDict
index 840a5e7d22b3513bc77dc447bd583dbe7f4f7adb..a5f8f6b4a7a8c8c12468cc33fe2d7a810168e241 100644
--- a/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/system/controlDict
+++ b/tutorials/lagrangian/icoUncoupledKinematicParcelFoam/hopper/hopperInitialState/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/system/controlDict b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/system/controlDict
index 3957db47cd77a9cea66d4f8dea2ef3ce244e709b..0e40fa759fd576515639fe794844f28c76e44d52 100644
--- a/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/system/controlDict
+++ b/tutorials/lagrangian/reactingParcelFilmFoam/cylinder/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/controlDict b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/controlDict
index 1a54857fc1a856071b2c8f3cc4dc6050c4ea2c9d..c4d96a03a655a43b4f24bf05d6e1e046748fb9fe 100644
--- a/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/controlDict
+++ b/tutorials/lagrangian/reactingParcelFilmFoam/hotBoxes/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii; // binary;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/system/controlDict b/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/system/controlDict
index 965206481dfd7583921c23f8f8dd1a433bc8433c..152db5be516b4111d4ef267660df5bf050da6c62 100644
--- a/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/system/controlDict
+++ b/tutorials/lagrangian/reactingParcelFilmFoam/rivuletPanel/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/system/controlDict b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/system/controlDict
index 123f5831d268c06b32b3dee4a0b886e87eff6894..c0d58ea671030b23f68282d2e1bac5329534d5fe 100644
--- a/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/system/controlDict
+++ b/tutorials/lagrangian/reactingParcelFilmFoam/splashPanel/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/reactingParcelFoam/counterFlowFlame2DLTS/system/controlDict b/tutorials/lagrangian/reactingParcelFoam/counterFlowFlame2DLTS/system/controlDict
index 2053042a7d605edf6e318424b0b57333efbeaf23..4b0b525b705ac28d131eeb408cabc1d8882bfc35 100644
--- a/tutorials/lagrangian/reactingParcelFoam/counterFlowFlame2DLTS/system/controlDict
+++ b/tutorials/lagrangian/reactingParcelFoam/counterFlowFlame2DLTS/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/reactingParcelFoam/verticalChannelLTS/system/controlDict b/tutorials/lagrangian/reactingParcelFoam/verticalChannelLTS/system/controlDict
index 7474ea94329ad48457d7b869797a1b0d96af558e..9d57eaaa1948991f5605fa0f3d265ee402013b6a 100644
--- a/tutorials/lagrangian/reactingParcelFoam/verticalChannelLTS/system/controlDict
+++ b/tutorials/lagrangian/reactingParcelFoam/verticalChannelLTS/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/system/controlDict b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/system/controlDict
index 7727a9ab6b0981035b48334951063b7003ab470e..cfa6cd0056bc521711f613fb31c3f1d2c230dc8a 100644
--- a/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/system/controlDict
+++ b/tutorials/lagrangian/simpleReactingParcelFoam/verticalChannel/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict b/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict
index d9b620638ab37f052228a816de511bcbad48248b..2447f51f397418d08fdcf3afcc615e7ab4d7c173 100644
--- a/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict
+++ b/tutorials/lagrangian/sprayFoam/aachenBomb/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/foamyHexMesh/blob/system/controlDict b/tutorials/mesh/foamyHexMesh/blob/system/controlDict
index 52d2ecd366c83e073b1f67b3d7a725f3398e8c58..e8cdf291237dc35347dc0458c686b92d3c50c4c0 100644
--- a/tutorials/mesh/foamyHexMesh/blob/system/controlDict
+++ b/tutorials/mesh/foamyHexMesh/blob/system/controlDict
@@ -42,7 +42,7 @@ writeFormat     ascii;
 
 writePrecision  12;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/foamyHexMesh/flange/system/controlDict b/tutorials/mesh/foamyHexMesh/flange/system/controlDict
index 7311884b4f4b557199a334cf55a0b2eea0ac4e55..dda104c89dc07c342b6f737204c2578aa0d82f8e 100644
--- a/tutorials/mesh/foamyHexMesh/flange/system/controlDict
+++ b/tutorials/mesh/foamyHexMesh/flange/system/controlDict
@@ -44,7 +44,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict b/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict
index dbf955d0662de6e4657299a67534fd5828b8f0c3..4e2a4097623ce5455d7e5df5de05759d232186ad 100644
--- a/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict
+++ b/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict.flow b/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict.flow
index 701a0bb50a861a835c69c281e68e7ad2936cf0e7..f54d0952281cbcb1c4ac5448054e6ed1c7a4fb9c 100644
--- a/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict.flow
+++ b/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict.flow
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict.mesh b/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict.mesh
index dbf955d0662de6e4657299a67534fd5828b8f0c3..4e2a4097623ce5455d7e5df5de05759d232186ad 100644
--- a/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict.mesh
+++ b/tutorials/mesh/foamyHexMesh/mixerVessel/system/controlDict.mesh
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/foamyHexMesh/simpleShapes/system/controlDict b/tutorials/mesh/foamyHexMesh/simpleShapes/system/controlDict
index e98a86b5501c71fe634779aab5b2212e387434bf..dbce2dfd3c628c01f6ea7bd11b835b6a0d5d02fb 100644
--- a/tutorials/mesh/foamyHexMesh/simpleShapes/system/controlDict
+++ b/tutorials/mesh/foamyHexMesh/simpleShapes/system/controlDict
@@ -35,7 +35,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict
index ccedbf13e0364c272ebc6f384b8f5c79971fb657..b1fd70ca501622dc1cc71ea92d1689a8596d17c6 100644
--- a/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict
+++ b/tutorials/mesh/moveDynamicMesh/SnakeRiverCanyon/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/moveDynamicMesh/relativeMotion/box2D_moveDynamicMesh/system/controlDict b/tutorials/mesh/moveDynamicMesh/relativeMotion/box2D_moveDynamicMesh/system/controlDict
index 1b7c966f790088a17041d23f8d84075188b4a4f9..2319906c282317879130f30efaef54d35b833d7f 100644
--- a/tutorials/mesh/moveDynamicMesh/relativeMotion/box2D_moveDynamicMesh/system/controlDict
+++ b/tutorials/mesh/moveDynamicMesh/relativeMotion/box2D_moveDynamicMesh/system/controlDict
@@ -39,7 +39,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/moveDynamicMesh/relativeMotion/box_snappyHexMesh/system/controlDict b/tutorials/mesh/moveDynamicMesh/relativeMotion/box_snappyHexMesh/system/controlDict
index 1b7c966f790088a17041d23f8d84075188b4a4f9..2319906c282317879130f30efaef54d35b833d7f 100644
--- a/tutorials/mesh/moveDynamicMesh/relativeMotion/box_snappyHexMesh/system/controlDict
+++ b/tutorials/mesh/moveDynamicMesh/relativeMotion/box_snappyHexMesh/system/controlDict
@@ -39,7 +39,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/refineMesh/refineFieldDirs/system/controlDict b/tutorials/mesh/refineMesh/refineFieldDirs/system/controlDict
index 253c63f53f19f51ee829956b5b6abe52ddfba25c..e575056d0e2ab23b7b2fa59fe36727f63a59f508 100644
--- a/tutorials/mesh/refineMesh/refineFieldDirs/system/controlDict
+++ b/tutorials/mesh/refineMesh/refineFieldDirs/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  8;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/mesh/snappyHexMesh/flange/system/controlDict b/tutorials/mesh/snappyHexMesh/flange/system/controlDict
index 6bc231ae39bf2b75fd998cee4d3270614dbddc15..5e2bcf4d50c81d5fb44aa93cbbffd2e671c3005a 100644
--- a/tutorials/mesh/snappyHexMesh/flange/system/controlDict
+++ b/tutorials/mesh/snappyHexMesh/flange/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/MPPICInterFoam/twoPhasePachuka/system/controlDict b/tutorials/multiphase/MPPICInterFoam/twoPhasePachuka/system/controlDict
index b5c1fa8993c8b99c450fbb05a4cd5d28c608d3c7..072e105c6e3d16fba38f933497081e3b89eb52f9 100644
--- a/tutorials/multiphase/MPPICInterFoam/twoPhasePachuka/system/controlDict
+++ b/tutorials/multiphase/MPPICInterFoam/twoPhasePachuka/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/cavitatingFoam/LES/throttle/system/controlDict b/tutorials/multiphase/cavitatingFoam/LES/throttle/system/controlDict
index 254cc1d5ebd611e3786adb19a64346ee546314af..e6e0febcb025577bd35fd7f069bf379150b683bf 100644
--- a/tutorials/multiphase/cavitatingFoam/LES/throttle/system/controlDict
+++ b/tutorials/multiphase/cavitatingFoam/LES/throttle/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/cavitatingFoam/RAS/throttle/system/controlDict b/tutorials/multiphase/cavitatingFoam/RAS/throttle/system/controlDict
index 8b7e2550aafa7eb450a74515f805fe88b9d6461f..9578dcda884c0221cb964e92acde9c04748ab2c2 100644
--- a/tutorials/multiphase/cavitatingFoam/RAS/throttle/system/controlDict
+++ b/tutorials/multiphase/cavitatingFoam/RAS/throttle/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sloshingTank2D/system/controlDict b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sloshingTank2D/system/controlDict
index 2db280b666f36ab52db80c289ffd5280bb77ac35..043e81b4966d0f3588526cf91acec69f0ba76c38 100644
--- a/tutorials/multiphase/compressibleInterDyMFoam/laminar/sloshingTank2D/system/controlDict
+++ b/tutorials/multiphase/compressibleInterDyMFoam/laminar/sloshingTank2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/compressibleMultiphaseInterFoam/laminar/damBreak4phase/system/controlDict b/tutorials/multiphase/compressibleMultiphaseInterFoam/laminar/damBreak4phase/system/controlDict
index 1ab97ab1b302256208d63fee75d368d254afb064..b62b6caecb5e2ba06d5f7b83b547e5fcef3377f3 100644
--- a/tutorials/multiphase/compressibleMultiphaseInterFoam/laminar/damBreak4phase/system/controlDict
+++ b/tutorials/multiphase/compressibleMultiphaseInterFoam/laminar/damBreak4phase/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/driftFluxFoam/RAS/dahl/system/controlDict b/tutorials/multiphase/driftFluxFoam/RAS/dahl/system/controlDict
index b96e3bb9c3394d72254ca3f7bc180ec6fe29a187..9c97d10aa5ae1bbbca8ab20dfc49d77bd60a5f15 100644
--- a/tutorials/multiphase/driftFluxFoam/RAS/dahl/system/controlDict
+++ b/tutorials/multiphase/driftFluxFoam/RAS/dahl/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/driftFluxFoam/RAS/mixerVessel2D/system/controlDict b/tutorials/multiphase/driftFluxFoam/RAS/mixerVessel2D/system/controlDict
index 7860b179b37f484517ba19de536109bea3222c2a..e5ed4a7012a638117b304a4c8342101820d6134a 100644
--- a/tutorials/multiphase/driftFluxFoam/RAS/mixerVessel2D/system/controlDict
+++ b/tutorials/multiphase/driftFluxFoam/RAS/mixerVessel2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/driftFluxFoam/RAS/tank3D/system/controlDict b/tutorials/multiphase/driftFluxFoam/RAS/tank3D/system/controlDict
index df0118911b7ee7ef401123380d44a2123dd1c1e6..502e42c8c68218ab5f7d54afd87212e5acdad5e5 100644
--- a/tutorials/multiphase/driftFluxFoam/RAS/tank3D/system/controlDict
+++ b/tutorials/multiphase/driftFluxFoam/RAS/tank3D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interCondensingEvaporatingFoam/condensatingVessel/system/controlDict b/tutorials/multiphase/interCondensingEvaporatingFoam/condensatingVessel/system/controlDict
index 8038616849ef1811913d5316076c4475691ee8de..ee5ce61c37ee4e662d804f2b4ddc85d955b298b8 100644
--- a/tutorials/multiphase/interCondensingEvaporatingFoam/condensatingVessel/system/controlDict
+++ b/tutorials/multiphase/interCondensingEvaporatingFoam/condensatingVessel/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/RAS/DTCHull/system/controlDict b/tutorials/multiphase/interDyMFoam/RAS/DTCHull/system/controlDict
index 602f03cff29e940cfa5108f6f2cdfb2f7532eeac..dd740c799828df90b122e7de3df6833ec17419ce 100644
--- a/tutorials/multiphase/interDyMFoam/RAS/DTCHull/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/RAS/DTCHull/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/RAS/floatingObject/system/controlDict b/tutorials/multiphase/interDyMFoam/RAS/floatingObject/system/controlDict
index 27f4cc092bc57357b3abec6101bac88034399040..70a793b9c34d2aab6a3e01942698fd41c2bae5ea 100644
--- a/tutorials/multiphase/interDyMFoam/RAS/floatingObject/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/RAS/floatingObject/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  12;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/RAS/mixerVesselAMI/system/controlDict b/tutorials/multiphase/interDyMFoam/RAS/mixerVesselAMI/system/controlDict
index 0bf4f3f8ac7c981f66b4c6d9318342df369a3783..980cef59b694ac4b75699d5a1b93f1525c7987e2 100644
--- a/tutorials/multiphase/interDyMFoam/RAS/mixerVesselAMI/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/RAS/mixerVesselAMI/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict b/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict
index caab84a9c0e4186935a20f1d8c0d3d1ae22d2b3e..d445bb74e902dcb1944591c50908e65621d92b4b 100644
--- a/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict
@@ -42,7 +42,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict_nextWrite b/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict_nextWrite
index fa46cc601da3182340a4a8a2e56c9fd7535f3491..63fc4349d25f71e1be4a47c8f7552db8d4110ab3 100644
--- a/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict_nextWrite
+++ b/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict_nextWrite
@@ -42,7 +42,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict_run b/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict_run
index caab84a9c0e4186935a20f1d8c0d3d1ae22d2b3e..d445bb74e902dcb1944591c50908e65621d92b4b 100644
--- a/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict_run
+++ b/tutorials/multiphase/interDyMFoam/RAS/motorBike/system/controlDict_run
@@ -42,7 +42,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/laminar/damBreakWithObstacle/system/controlDict b/tutorials/multiphase/interDyMFoam/laminar/damBreakWithObstacle/system/controlDict
index 28954f8992b862e537a316e1d3141de7c44987b5..950a5f2ae8ad5fb33a1eaa98e64d02c2973fbbaf 100644
--- a/tutorials/multiphase/interDyMFoam/laminar/damBreakWithObstacle/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/laminar/damBreakWithObstacle/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingCylinder/system/controlDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingCylinder/system/controlDict
index a2a64dbe15caa3157d1343698ab9cef6bda75255..881a805fe6933f5233d7fa743e70c84e5c69c936 100644
--- a/tutorials/multiphase/interDyMFoam/laminar/sloshingCylinder/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingCylinder/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression yes;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D/system/controlDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D/system/controlDict
index 9044a220a873deca672be7c080ba2a9f7027797a..2504a198485f259c93ff1a076e8514e5b99937f1 100644
--- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D3DoF/system/controlDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D3DoF/system/controlDict
index 643153a8336b9c2ec4dfc4bf38074ac11a4b2dd9..62fc087b4f8980d3eee83bfcbbc4d69e0f203bd8 100644
--- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D3DoF/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank2D3DoF/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D/system/controlDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D/system/controlDict
index 496f44ff1455b53cc0cc5c6b11731b9d8c94d855..cbe906979deeb1afd25488914f130dd88d86d70f 100644
--- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D3DoF/system/controlDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D3DoF/system/controlDict
index 05dcf8430342bac85e9a0a7038c2cf87caea4986..724eea4c414f7ee70f8f621eff1c64b3bfa78c9f 100644
--- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D3DoF/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D3DoF/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D6DoF/system/controlDict b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D6DoF/system/controlDict
index 05dcf8430342bac85e9a0a7038c2cf87caea4986..724eea4c414f7ee70f8f621eff1c64b3bfa78c9f 100644
--- a/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D6DoF/system/controlDict
+++ b/tutorials/multiphase/interDyMFoam/laminar/sloshingTank3D6DoF/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/LES/nozzleFlow2D/system/controlDict b/tutorials/multiphase/interFoam/LES/nozzleFlow2D/system/controlDict
index 103f37469fb91d701797160ab951422f2b5259d1..6f386fe2549d225e71b94ebe217241c12d803d6e 100644
--- a/tutorials/multiphase/interFoam/LES/nozzleFlow2D/system/controlDict
+++ b/tutorials/multiphase/interFoam/LES/nozzleFlow2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  8;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/RAS/DTCHull/system/controlDict b/tutorials/multiphase/interFoam/RAS/DTCHull/system/controlDict
index 03a05ff1bece3649a7c2c1f335976f50c255eda4..a6ce36d2dd14b5c97cf2fc79711d03d102504d2d 100644
--- a/tutorials/multiphase/interFoam/RAS/DTCHull/system/controlDict
+++ b/tutorials/multiphase/interFoam/RAS/DTCHull/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/RAS/angledDuct/system/controlDict b/tutorials/multiphase/interFoam/RAS/angledDuct/system/controlDict
index fc0d088632c957200343e6cade12537ced56aa2a..4187166c11ebec5d9a12dd051ae3aec6f9e23f28 100644
--- a/tutorials/multiphase/interFoam/RAS/angledDuct/system/controlDict
+++ b/tutorials/multiphase/interFoam/RAS/angledDuct/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/RAS/damBreak/damBreak/system/controlDict b/tutorials/multiphase/interFoam/RAS/damBreak/damBreak/system/controlDict
index b13bf74248c9cbc97d4084875a9eb546a9359f1d..456036b2866a4359a35ea8c22d94a01d6081e3a5 100644
--- a/tutorials/multiphase/interFoam/RAS/damBreak/damBreak/system/controlDict
+++ b/tutorials/multiphase/interFoam/RAS/damBreak/damBreak/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/RAS/damBreakPorousBaffle/system/controlDict b/tutorials/multiphase/interFoam/RAS/damBreakPorousBaffle/system/controlDict
index 61152aae3dc3264ae7a4c39751472e05c8495247..7b7986241763c636164c32476f1b41927360eb6a 100644
--- a/tutorials/multiphase/interFoam/RAS/damBreakPorousBaffle/system/controlDict
+++ b/tutorials/multiphase/interFoam/RAS/damBreakPorousBaffle/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/RAS/waterChannel/system/controlDict b/tutorials/multiphase/interFoam/RAS/waterChannel/system/controlDict
index fa88ee565ea05a94f8ecc2eaf108cf0ff5248148..b9189739bcdfff3a22ade23a4e561d98126a814b 100644
--- a/tutorials/multiphase/interFoam/RAS/waterChannel/system/controlDict
+++ b/tutorials/multiphase/interFoam/RAS/waterChannel/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/RAS/weirOverflow/system/controlDict b/tutorials/multiphase/interFoam/RAS/weirOverflow/system/controlDict
index 0a7327831707fd74c85d584f876b2f769e6573f4..bfaa7856cec2d7de6b2ec3c25add56346045e1e6 100644
--- a/tutorials/multiphase/interFoam/RAS/weirOverflow/system/controlDict
+++ b/tutorials/multiphase/interFoam/RAS/weirOverflow/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/capillaryRise/system/controlDict b/tutorials/multiphase/interFoam/laminar/capillaryRise/system/controlDict
index 45ffd23627191f4c93c215216ccaec12f0f3cbb0..e55145e7ce17559b04d2f83cf4a05067be632396 100644
--- a/tutorials/multiphase/interFoam/laminar/capillaryRise/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/capillaryRise/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/controlDict b/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/controlDict
index fe26a8b3385603502fb853d53d2680829b18109b..e306a5ca5c982347966a9d0b8b8f3581d69cd762 100644
--- a/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/damBreak/damBreak/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/mixerVessel2D/system/controlDict b/tutorials/multiphase/interFoam/laminar/mixerVessel2D/system/controlDict
index 761ede47c0bf658c5ce74a072f68040364c71b46..f614c5c98b6f299598f06956bb35162a7b2d3fbf 100644
--- a/tutorials/multiphase/interFoam/laminar/mixerVessel2D/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/mixerVessel2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/eulerianInjection/system/controlDict b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/eulerianInjection/system/controlDict
index f307bd85eb9914a1d324af216e39fc1b35b953df..1e08f60d6b6d59af491ffb3d2322f15048f31318 100644
--- a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/eulerianInjection/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/eulerianInjection/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianDistributionInjection/system/controlDict b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianDistributionInjection/system/controlDict
index e8a8c97553eb04e4a5b9c126f1381ff6474be077..dd5e4b662bd92855e9a2ae0578001b35c273d0d9 100644
--- a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianDistributionInjection/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianDistributionInjection/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianParticleInjection/system/controlDict b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianParticleInjection/system/controlDict
index e8a8c97553eb04e4a5b9c126f1381ff6474be077..dd5e4b662bd92855e9a2ae0578001b35c273d0d9 100644
--- a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianParticleInjection/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianParticleInjection/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/controlDict b/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/controlDict
index 92a1a646e9e951a5107396320f90da56ee549d26..6c16c94c5da3ae0ee9f75c7c1bec0831b94c5d6b 100644
--- a/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleCnoidal/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleSolitary/system/controlDict b/tutorials/multiphase/interFoam/laminar/waveExampleSolitary/system/controlDict
index 87022a24cebf4c34bedec5879f5f03c4bbfcfecb..c2e2d110a3dafbb400e74c21080df37e685fb535 100644
--- a/tutorials/multiphase/interFoam/laminar/waveExampleSolitary/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleSolitary/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleStokesI/system/controlDict b/tutorials/multiphase/interFoam/laminar/waveExampleStokesI/system/controlDict
index 91f0a8a1440ffec8363f12775becdcf362dafc01..20a487c4596e41d3d290e7f9fea580e99e5e24ab 100644
--- a/tutorials/multiphase/interFoam/laminar/waveExampleStokesI/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleStokesI/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleStokesII/system/controlDict b/tutorials/multiphase/interFoam/laminar/waveExampleStokesII/system/controlDict
index 8c005190cc18fe61ad6fca2be1db516d691c3e00..1b4b2f24c6792affbd7ebc08d28358221d9f0b11 100644
--- a/tutorials/multiphase/interFoam/laminar/waveExampleStokesII/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleStokesII/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interFoam/laminar/waveExampleStokesV/system/controlDict b/tutorials/multiphase/interFoam/laminar/waveExampleStokesV/system/controlDict
index 76911c1e87a88678cdb67c8e518aa0a9a8f997a5..d1ce716a7ed76f0d397fdcf27ee175033f4c3e89 100644
--- a/tutorials/multiphase/interFoam/laminar/waveExampleStokesV/system/controlDict
+++ b/tutorials/multiphase/interFoam/laminar/waveExampleStokesV/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/controlDict b/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/controlDict
index c2745e5c2a04d864b97021029e01373ae5451288..3f3e90059efcdddcedc25f21e7e6a69574d0f1d3 100644
--- a/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/controlDict
+++ b/tutorials/multiphase/interMixingFoam/laminar/damBreak/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/controlDict b/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/controlDict
index 8177f17bf17e2e9fdd88bd3bcbf95e448d2c613e..7c7d14ba022706b1943a7d1a6f8152a0b98f33b3 100644
--- a/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/controlDict
+++ b/tutorials/multiphase/interPhaseChangeFoam/cavitatingBullet/system/controlDict
@@ -14,37 +14,37 @@ FoamFile
 }
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-application             interPhaseChangeFoam;
+application     interPhaseChangeFoam;
 
-startFrom               latestTime;
+startFrom       latestTime;
 
-startTime               0;
+startTime       0;
 
-stopAt                  endTime;
+stopAt          endTime;
 
-endTime                 0.05;
+endTime         0.05;
 
-deltaT                  1e-8;
+deltaT          1e-8;
 
-writeControl            adjustableRunTime;
+writeControl    adjustableRunTime;
 
-writeInterval           0.001;
+writeInterval   0.001;
 
-purgeWrite              0;
+purgeWrite      0;
 
-writeFormat             ascii;
+writeFormat     ascii;
 
-writePrecision          6;
+writePrecision  6;
 
-writeCompression        uncompressed;
+writeCompression off;
 
-timeFormat              general;
+timeFormat      general;
 
-runTimeModifiable       yes;
+runTimeModifiable yes;
 
-adjustTimeStep          on;
+adjustTimeStep  on;
 
-maxCo                   5;
+maxCo           5;
 
 
 // ************************************************************************* //
diff --git a/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/system/controlDict b/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/system/controlDict
index 9fab348ad93b19b042129d74e7b8890cc1ea4460..14d2a14f1a5d7d051a85a87a554a25b5ab828636 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/system/controlDict
+++ b/tutorials/multiphase/multiphaseEulerFoam/bubbleColumn/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/system/controlDict b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/system/controlDict
index 95ee20a9c87d7ad234a0b96538050d74f6d7259a..efeb97422c9b1269d8797672644c6c5a5387fc59 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/system/controlDict
+++ b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phase/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/system/controlDict b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/system/controlDict
index e074c6da3e4ca3f912698fed3fa61a72497206eb..d1d43c3ad6c8d00828a95021c77f846ffef005f8 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/system/controlDict
+++ b/tutorials/multiphase/multiphaseEulerFoam/damBreak4phaseFine/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/system/controlDict b/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/system/controlDict
index 43fbcdd49e4929278adb732ac463cc6cc2205f3d..88f53583bbf76f1a5cd463530d302d47e125e5c1 100644
--- a/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/system/controlDict
+++ b/tutorials/multiphase/multiphaseEulerFoam/mixerVessel2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/controlDict b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/controlDict
index 46cbc1a16b9f1c2777da286cc95857ac3f296466..0e75d49c2d4ed9f906814e9e9463201ca00c6f42 100644
--- a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/controlDict
+++ b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phase/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/controlDict b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/controlDict
index ef983c735ca896575bc217d5a612a6a70bdceb08..73479d76b02711a041c95250b65292d6d8842161 100644
--- a/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/controlDict
+++ b/tutorials/multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/multiphaseInterFoam/laminar/mixerVessel2D/system/controlDict b/tutorials/multiphase/multiphaseInterFoam/laminar/mixerVessel2D/system/controlDict
index 5152dd9020364732face8db6cbc88edfd7b31c52..b36bb2f3081d72cb79b0180dba6deeb9e7885777 100644
--- a/tutorials/multiphase/multiphaseInterFoam/laminar/mixerVessel2D/system/controlDict
+++ b/tutorials/multiphase/multiphaseInterFoam/laminar/mixerVessel2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/potentialFreeSurfaceDyMFoam/oscillatingBox/system/controlDict b/tutorials/multiphase/potentialFreeSurfaceDyMFoam/oscillatingBox/system/controlDict
index b10e4dc192f7f95045d4afdfd7291e5126754f35..37d1afb7c942fb4c47ad9c8c2b1edbad193bb624 100644
--- a/tutorials/multiphase/potentialFreeSurfaceDyMFoam/oscillatingBox/system/controlDict
+++ b/tutorials/multiphase/potentialFreeSurfaceDyMFoam/oscillatingBox/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/potentialFreeSurfaceFoam/oscillatingBox/system/controlDict b/tutorials/multiphase/potentialFreeSurfaceFoam/oscillatingBox/system/controlDict
index 90e0c142f796c8a428e8565dc5e01974808731d6..a4742986b39bd65c7a616945503cfc2cb03be71c 100644
--- a/tutorials/multiphase/potentialFreeSurfaceFoam/oscillatingBox/system/controlDict
+++ b/tutorials/multiphase/potentialFreeSurfaceFoam/oscillatingBox/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/system/controlDict b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/system/controlDict
index ac46ec5c1cdb6244edab69efa72936f24667e2c8..f00d524fc8e6f9fb4cecc34cc1ece5690f75cfcb 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/system/controlDict
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/bubbleColumn/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/mixerVessel2D/system/controlDict b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/mixerVessel2D/system/controlDict
index c06d2806615bf4410bec5be67d9bc5e544e5cec6..fa576eb812d9c2470d3212b2b7d4e62f6f81f7b2 100644
--- a/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/mixerVessel2D/system/controlDict
+++ b/tutorials/multiphase/reactingMultiphaseEulerFoam/laminar/mixerVessel2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/LES/bubbleColumn/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/LES/bubbleColumn/system/controlDict
index 543d11e19d88a0afdb503d32f25e37886d9124d3..8d0fff95d647cf2c95aac928ff098f20193761be 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/LES/bubbleColumn/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/LES/bubbleColumn/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/LBend/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/LBend/system/controlDict
index 2c940ec04c14cf9316433f8176d6f960de45bfa1..d58c291e45f4a79ba2f9d116486e9258e9c17ca8 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/LBend/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/LBend/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  9;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumn/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumn/system/controlDict
index 543d11e19d88a0afdb503d32f25e37886d9124d3..8d0fff95d647cf2c95aac928ff098f20193761be 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumn/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumn/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnEvaporatingReacting/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnEvaporatingReacting/system/controlDict
index 0368ac9718b819f12995472986f3fc7a6caab676..958721d440e64fe1e2d1145a53a13784ce37c771 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnEvaporatingReacting/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/bubbleColumnEvaporatingReacting/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/fluidisedBed/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/fluidisedBed/system/controlDict
index b51ef4b30714af93162f30e1bd538d33daf48348..fda5893b2b2da851f2485d3696705fc8b731c9f5 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/fluidisedBed/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/fluidisedBed/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/system/controlDict
index 7d2afa433b3a7e3e1ef86efe5bd8969df7b3bbd4..3ae614f481bdc2244b2b1b2b5d388a450a509095 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  9;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/system/controlDict.org b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/system/controlDict.org
index 7d2afa433b3a7e3e1ef86efe5bd8969df7b3bbd4..3ae614f481bdc2244b2b1b2b5d388a450a509095 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/system/controlDict.org
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling/system/controlDict.org
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  9;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/system/controlDict
index 7d2afa433b3a7e3e1ef86efe5bd8969df7b3bbd4..3ae614f481bdc2244b2b1b2b5d388a450a509095 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  9;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/system/controlDict.org b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/system/controlDict.org
index 7d2afa433b3a7e3e1ef86efe5bd8969df7b3bbd4..3ae614f481bdc2244b2b1b2b5d388a450a509095 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/system/controlDict.org
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE/system/controlDict.org
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  9;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumn/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumn/system/controlDict
index 543d11e19d88a0afdb503d32f25e37886d9124d3..8d0fff95d647cf2c95aac928ff098f20193761be 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumn/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumn/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporating/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporating/system/controlDict
index fbbe670af2b370ebd03db364de866118d8db10ed..61ab89db5cf7e232f4a6358d8f47beeeea2779ec 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporating/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporating/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporatingDissolving/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporatingDissolving/system/controlDict
index fbbe670af2b370ebd03db364de866118d8db10ed..61ab89db5cf7e232f4a6358d8f47beeeea2779ec 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporatingDissolving/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnEvaporatingDissolving/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnIATE/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnIATE/system/controlDict
index ae64706efbc14981f6d3a426f090386d3b0ebcb2..624b1b26cbd9de412b5d74a79a3de7692eeda8e2 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnIATE/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/bubbleColumnIATE/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/fluidisedBed/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/fluidisedBed/system/controlDict
index 5537ebc0d303b09a3acde2dd4ead8b8cf79eaf5a..48a6124dac7ef26785681e822e4219a47067818c 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/fluidisedBed/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/fluidisedBed/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/injection/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/injection/system/controlDict
index caa9dcaae3db89b294281dd2dbb07b2b93f56337..a4309393d579becf84e1097619d10239217bd9f5 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/injection/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/injection/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/mixerVessel2D/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/mixerVessel2D/system/controlDict
index 804a5fc90804cea799be26cd37f9030e355809bc..cb7d26b24351a63423c0d3db3356035512ae97d1 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/mixerVessel2D/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/mixerVessel2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/steamInjection/system/controlDict b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/steamInjection/system/controlDict
index 54aafe8c3df82e44ed3cf653134dd539128f73b2..2452962436b72657b23af502d7f101b7aee1c75b 100644
--- a/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/steamInjection/system/controlDict
+++ b/tutorials/multiphase/reactingTwoPhaseEulerFoam/laminar/steamInjection/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  10;
 
-writeCompression compressed;
+writeCompression on;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/twoLiquidMixingFoam/lockExchange/system/controlDict b/tutorials/multiphase/twoLiquidMixingFoam/lockExchange/system/controlDict
index ddaba37530b5a2850a1ae153be5311517d96e80d..2aef3dfe1e97ca13deda439773f373e50b637f51 100644
--- a/tutorials/multiphase/twoLiquidMixingFoam/lockExchange/system/controlDict
+++ b/tutorials/multiphase/twoLiquidMixingFoam/lockExchange/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/LES/bubbleColumn/system/controlDict b/tutorials/multiphase/twoPhaseEulerFoam/LES/bubbleColumn/system/controlDict
index 9ca02c63922e7f8e2d13ac383dec5fa825e62291..cd6305fa763edbdf299b10e07cf0e907f2f6baf1 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/LES/bubbleColumn/system/controlDict
+++ b/tutorials/multiphase/twoPhaseEulerFoam/LES/bubbleColumn/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/RAS/bubbleColumn/system/controlDict b/tutorials/multiphase/twoPhaseEulerFoam/RAS/bubbleColumn/system/controlDict
index 9ca02c63922e7f8e2d13ac383dec5fa825e62291..cd6305fa763edbdf299b10e07cf0e907f2f6baf1 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/RAS/bubbleColumn/system/controlDict
+++ b/tutorials/multiphase/twoPhaseEulerFoam/RAS/bubbleColumn/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/system/controlDict b/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/system/controlDict
index 0048b4d94d553e035fb0571b5be3a1a9b8ad0705..7e4bd20c7fce85653c3876f053fd34e6c229419e 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/system/controlDict
+++ b/tutorials/multiphase/twoPhaseEulerFoam/RAS/fluidisedBed/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumn/system/controlDict b/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumn/system/controlDict
index 9ca02c63922e7f8e2d13ac383dec5fa825e62291..cd6305fa763edbdf299b10e07cf0e907f2f6baf1 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumn/system/controlDict
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumn/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumnIATE/system/controlDict b/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumnIATE/system/controlDict
index 9ca02c63922e7f8e2d13ac383dec5fa825e62291..cd6305fa763edbdf299b10e07cf0e907f2f6baf1 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumnIATE/system/controlDict
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/bubbleColumnIATE/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/fluidisedBed/system/controlDict b/tutorials/multiphase/twoPhaseEulerFoam/laminar/fluidisedBed/system/controlDict
index ef63c992cfe3140ffeb88faa323401de039f2b4e..be7304553952415fe8575ed027780632640940e2 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/fluidisedBed/system/controlDict
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/fluidisedBed/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/injection/system/controlDict b/tutorials/multiphase/twoPhaseEulerFoam/laminar/injection/system/controlDict
index 9da5e5e3b9675132493ddea6644ed5e9c569a3f7..88093aac6d3e8f55da47468efdf24dd58eab0a63 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/injection/system/controlDict
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/injection/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/multiphase/twoPhaseEulerFoam/laminar/mixerVessel2D/system/controlDict b/tutorials/multiphase/twoPhaseEulerFoam/laminar/mixerVessel2D/system/controlDict
index d21f8e800098fb21ff85664f71aef1a8da7e5c10..511860591bad27d3c330bc0678cecd37f3dca08a 100644
--- a/tutorials/multiphase/twoPhaseEulerFoam/laminar/mixerVessel2D/system/controlDict
+++ b/tutorials/multiphase/twoPhaseEulerFoam/laminar/mixerVessel2D/system/controlDict
@@ -37,7 +37,7 @@ writeFormat     ascii;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/preProcessing/createZeroDirectory/motorBike/system/controlDict b/tutorials/preProcessing/createZeroDirectory/motorBike/system/controlDict
index c544fdf10e5a0a74aaba163e5e9cba5d4ba37eb8..763be9f5cfb30685d95fc5fbd799aed677064347 100644
--- a/tutorials/preProcessing/createZeroDirectory/motorBike/system/controlDict
+++ b/tutorials/preProcessing/createZeroDirectory/motorBike/system/controlDict
@@ -39,7 +39,7 @@ writeFormat     binary;
 
 writePrecision  6;
 
-writeCompression uncompressed;
+writeCompression off;
 
 timeFormat      general;
 
diff --git a/tutorials/preProcessing/createZeroDirectory/snappyMultiRegionHeater/system/bottomAir/fvSolution b/tutorials/preProcessing/createZeroDirectory/snappyMultiRegionHeater/system/bottomAir/fvSolution
index 99a5b3879c78c48ea789dcca698287f05d0bc76f..0c04403a67359d90156002974692d3a0b3b9fe7d 100644
--- a/tutorials/preProcessing/createZeroDirectory/snappyMultiRegionHeater/system/bottomAir/fvSolution
+++ b/tutorials/preProcessing/createZeroDirectory/snappyMultiRegionHeater/system/bottomAir/fvSolution
@@ -68,6 +68,8 @@ PIMPLE
     momentumPredictor   on;
     nCorrectors         2;
     nNonOrthogonalCorrectors 0;
+    pRefCell            0;
+    pRefValue           1e5;
 }
 
 relaxationFactors
diff --git a/tutorials/preProcessing/createZeroDirectory/snappyMultiRegionHeater/system/topAir/fvSolution b/tutorials/preProcessing/createZeroDirectory/snappyMultiRegionHeater/system/topAir/fvSolution
index 7f5e19a75e5394e7e5025e5db7f393daddec862e..cf4dd593b8635ffc81527a341d6a32a1f4b0c216 100644
--- a/tutorials/preProcessing/createZeroDirectory/snappyMultiRegionHeater/system/topAir/fvSolution
+++ b/tutorials/preProcessing/createZeroDirectory/snappyMultiRegionHeater/system/topAir/fvSolution
@@ -68,6 +68,8 @@ PIMPLE
     momentumPredictor   on;
     nCorrectors         2;
     nNonOrthogonalCorrectors 0;
+    pRefCell            0;
+    pRefValue           1e5;
 }
 
 relaxationFactors