diff --git a/src/functionObjects/field/Make/files b/src/functionObjects/field/Make/files
index 1ca07b3766057c5fd3b4b02b4b14d9657ae02e50..18ec9b28dbf1d0b667be96ac98e4c59eef182636 100644
--- a/src/functionObjects/field/Make/files
+++ b/src/functionObjects/field/Make/files
@@ -2,6 +2,8 @@ AMIWeights/AMIWeights.C
 
 columnAverage/columnAverage.C
 
+continuityError/continuityError.C
+
 fieldAverage/fieldAverage.C
 fieldAverage/fieldAverageItem/fieldAverageItem.C
 fieldAverage/fieldAverageItem/fieldAverageItemIO.C
diff --git a/src/functionObjects/field/continuityError/continuityError.C b/src/functionObjects/field/continuityError/continuityError.C
new file mode 100644
index 0000000000000000000000000000000000000000..1bffa5a6c6a2fd11141c02babfded6722fa3672b
--- /dev/null
+++ b/src/functionObjects/field/continuityError/continuityError.C
@@ -0,0 +1,144 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2019 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 "continuityError.H"
+#include "volFields.H"
+#include "fvcDiv.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+    defineTypeNameAndDebug(continuityError, 0);
+    addToRunTimeSelectionTable(functionObject, continuityError, dictionary);
+}
+}
+
+
+// * * * * * * * * * * * * Protected Member Functions  * * * * * * * * * * * //
+
+void Foam::functionObjects::continuityError::writeFileHeader(Ostream& os)
+{
+    writeHeader(os, "Continuity error");
+
+    writeCommented(os, "Time");
+    writeCommented(os, "Local");
+    writeCommented(os, "Global");
+    writeCommented(os, "Cumulative");
+
+    os  << endl;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::functionObjects::continuityError::continuityError
+(
+    const word& name,
+    const Time& runTime,
+    const dictionary& dict
+)
+:
+    fvMeshFunctionObject(name, runTime, dict),
+    writeFile(mesh_, name, typeName, dict),
+    phiName_("phi"),
+    cumulative_(getProperty<scalar>("cumulative"))
+{
+    if (read(dict))
+    {
+        writeFileHeader(file());
+    }
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+bool Foam::functionObjects::continuityError::read(const dictionary& dict)
+{
+    if (fvMeshFunctionObject::read(dict) && writeFile::read(dict))
+    {
+        dict.readIfPresent("phi", phiName_);
+
+        return true;
+    }
+
+    return false;
+}
+
+
+bool Foam::functionObjects::continuityError::execute()
+{
+    return true;
+}
+
+
+bool Foam::functionObjects::continuityError::write()
+{
+    const auto phiPtr = mesh_.lookupObjectPtr<surfaceScalarField>(phiName_);
+
+    if (!phiPtr)
+    {
+        WarningInFunction
+            << "Unable to find flux field " << phiName_
+            << endl;
+
+        return false;
+    }
+
+    const volScalarField error(fvc::div(*phiPtr));
+    const scalar deltaT = mesh_.time().deltaTValue();
+
+    scalar local = deltaT*mag(error)().weightedAverage(mesh_.V()).value();
+    scalar global = deltaT*error.weightedAverage(mesh_.V()).value();
+    cumulative_ += global;
+
+    Ostream& os = file();
+
+    writeTime(os);
+
+    os  << local << tab
+        << global << tab
+        << cumulative_ << endl;
+
+    Log << type() << " " << name() <<  " write:" << nl
+        << "    local = " << local << nl
+        << "    global = " << global << nl
+        << "    cumulative = " << cumulative_ << nl
+        << endl;
+
+    setResult("local", local);
+    setResult("global", global);
+    setResult("cumulative", cumulative_);
+
+    setProperty<scalar>("cumulative", cumulative_);
+
+    return true;
+}
+
+
+// ************************************************************************* //
diff --git a/src/functionObjects/field/continuityError/continuityError.H b/src/functionObjects/field/continuityError/continuityError.H
new file mode 100644
index 0000000000000000000000000000000000000000..7c64dfff5db83ed6764817bd84a692f1ca773b3a
--- /dev/null
+++ b/src/functionObjects/field/continuityError/continuityError.H
@@ -0,0 +1,162 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2019 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::functionObjects::continuityError
+
+Group
+    grpFieldFunctionObjects
+
+Description
+    Calculates the continuity error for a flux field
+
+Usage
+    Example of function object specification:
+    \verbatim
+    continuityError1
+    {
+        type        continuityError;
+        libs        ("libfieldFunctionObjects.so");
+        ...
+        writeToFile yes;
+        log         yes;
+        phi         phi;
+    }
+    \endverbatim
+
+    Where the entries comprise:
+    \table
+        Property     | Description             | Required    | Default value
+        type         | type name: continuityError  | yes         |
+        writeToFile  | write min/max data to file | no       | yes
+        log          | write min/max data to standard output | no | yes
+        phi          | name of flux field      | no | phi
+    \endtable
+
+    Output data is written to the file \<timeDir\>/continuityError.dat
+
+See also
+    Foam::functionObjects::fvMeshFunctionObject
+    Foam::functionObjects::writeFile
+
+SourceFiles
+    continuityError.C
+    continuityErrorTemplates.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef functionObjects_continuityError_H
+#define functionObjects_continuityError_H
+
+#include "Switch.H"
+#include "fvMeshFunctionObject.H"
+#include "writeFile.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+
+/*---------------------------------------------------------------------------*\
+                         Class continuityError Declaration
+\*---------------------------------------------------------------------------*/
+
+class continuityError
+:
+    public fvMeshFunctionObject,
+    public writeFile
+{
+private:
+
+    // Private Member Functions
+
+        //- No copy construct
+        continuityError(const continuityError&) = delete;
+
+        //- No copy assignment
+        void operator=(const continuityError&) = delete;
+
+
+protected:
+
+    // Protected data
+
+        //- Name of the flux field; default = "phi
+        word phiName_;
+
+        //- Cumulative error
+        scalar cumulative_;
+
+
+    // Protected Member Functions
+
+        //- Output file header information
+        virtual void writeFileHeader(Ostream& os);
+
+
+public:
+
+    //- Runtime type information
+    TypeName("continuityError");
+
+
+    // Constructors
+
+        //- Construct from Time and dictionary
+        continuityError
+        (
+            const word& name,
+            const Time& runTime,
+            const dictionary& dict
+        );
+
+
+    //- Destructor
+    virtual ~continuityError() = default;
+
+
+    // Member Functions
+
+        //- Read the field min/max data
+        virtual bool read(const dictionary&);
+
+        //- Execute, currently does nothing
+        virtual bool execute();
+
+        //- Write the continuityError
+        virtual bool write();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace functionObjects
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //