diff --git a/Applications/ApplicationsLib/TestDefinition.cpp b/Applications/ApplicationsLib/TestDefinition.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e51560b38b7313c585dfc13ef35c884e745cb96c
--- /dev/null
+++ b/Applications/ApplicationsLib/TestDefinition.cpp
@@ -0,0 +1,252 @@
+/**
+ * \file
+ *
+ * \copyright
+ * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#include "TestDefinition.h"
+
+#include <cstdlib>
+
+#include "BaseLib/ConfigTree.h"
+#include "BaseLib/Error.h"
+#include "BaseLib/FileTools.h"
+#ifdef USE_PETSC
+#include "MeshLib/IO/VtkIO/VtuInterface.h"  // For petsc file name conversion.
+#include <petsc.h>
+#endif
+
+namespace
+{
+/// Test if the given string is convertible to a valid double value, not a NaN.
+bool isConvertibleToDouble(std::string const& s)
+{
+    std::size_t pos = 0;
+    double value;
+    try
+    {
+        value = std::stod(s, &pos);
+    }
+    catch (...)
+    {
+        OGS_FATAL("The given string '%s' is not convertible to double.",
+                  s.c_str());
+    }
+    if (pos != s.size())
+    {
+        OGS_FATAL(
+            "Only %d characters were used for double conversion of string '%s'",
+            pos, s.c_str());
+    }
+
+    if (std::isnan(value))
+    {
+        OGS_FATAL("The given string '%s' results in a NaN value.", s.c_str());
+    }
+    return true;
+}
+
+/// Wraps a string into double ticks.
+std::string safeString(std::string s)
+{
+    return "\"" + s + "\"";
+}
+
+/// Tries to find a vtkdiff executable by testing 'path/vtkdiff --version' calls
+/// for various paths.
+std::string findVtkdiff()
+{
+    // Try to read the VTKDIFF_EXE environment variable.
+    if (const char* vtkdiff_exe_environment_variable =
+            std::getenv("VTKDIFF_EXE"))
+    {
+        std::string const vtkdiff_exe{vtkdiff_exe_environment_variable};
+        DBUG("VTKDIFF_EXE set to %s.", vtkdiff_exe.c_str());
+
+        //
+        // Sanity checks.
+        //
+        {  // The base name is 'vtkdiff'
+            auto const& base_name =
+                BaseLib::extractBaseNameWithoutExtension(vtkdiff_exe);
+            if (base_name != "vtkdiff")
+            {
+                OGS_FATAL(
+                    "The VTKDIFF_EXE environment variable does not point to "
+                    "'vtkdiff'. VTKDIFF_EXE='%s'",
+                    vtkdiff_exe.c_str());
+            }
+        }
+        {  // vtkdiff must exist.
+            if (!BaseLib::IsFileExisting(vtkdiff_exe))
+            {
+                OGS_FATAL(
+                    "The VTKDIFF_EXE points to a non-existing file. "
+                    "VTKDIFF_EXE='%s'",
+                    vtkdiff_exe.c_str());
+            }
+        }
+
+        //
+        // Test the actual call.
+        //
+        int const return_value =
+            // TODO (naumov) replace system call with output consuming call
+            // (fork + execl seems to be more safe), and extract the vtkdiff
+            // call to common function. Also properly escape all strings in
+            // command lines.
+            // Reference for POSIX and Windows:
+            // https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=87152177
+            // Take care when using fork, which might copy resources.
+            std::system((vtkdiff_exe + " --version").c_str());
+        if (return_value == 0)
+        {
+            return vtkdiff_exe;
+        }
+        WARN(
+            "Calling %s from the VTKDIFF_EXE environment variable didn't work "
+            "as expected. Return value was %d.",
+            vtkdiff_exe.c_str(), return_value);
+    }
+
+    std::string const vtkdiff_exe{"vtkdiff"};
+    std::vector<std::string> const paths = {"", "bin"};
+    auto const path = find_if(
+        begin(paths), end(paths), [&vtkdiff_exe](std::string const& path) {
+            int const return_value =
+                // TODO (naumov) replace system call with output consuming call
+                // as in an above todo comment.
+                std::system(
+                    (BaseLib::joinPaths(path, vtkdiff_exe) + " --version")
+                        .c_str());
+            return return_value == 0;
+        });
+    if (path == end(paths))
+    {
+        OGS_FATAL("vtkdiff not found.");
+    }
+    return BaseLib::joinPaths(*path, vtkdiff_exe);
+}
+
+}  // namespace
+
+namespace ApplicationsLib
+{
+TestDefinition::TestDefinition(BaseLib::ConfigTree const& config_tree,
+                               std::string const& reference_path,
+                               std::string const& output_directory)
+{
+    if (reference_path.empty())
+    {
+        OGS_FATAL(
+            "Reference path containing expected result files can not be "
+            "empty.");
+    }
+
+    std::string const vtkdiff = findVtkdiff();
+
+    // Construct command lines for each entry.
+    //! \ogs_file_param{prj__test_definition__vtkdiff}
+    auto const& vtkdiff_configs = config_tree.getConfigSubtreeList("vtkdiff");
+    _command_lines.reserve(vtkdiff_configs.size());
+    for (auto const& vtkdiff_config : vtkdiff_configs)
+    {
+        std::string const& field_name =
+            //! \ogs_file_param{prj__test_definition__vtkdiff__field}
+            vtkdiff_config.getConfigParameter<std::string>("field");
+        DBUG("vtkdiff will compare field '%s'.", field_name.c_str());
+
+#ifdef USE_PETSC
+        int rank;
+        MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
+        int mpi_size;
+        MPI_Comm_size(PETSC_COMM_WORLD, &mpi_size);
+        std::string const& filename =
+            MeshLib::IO::getVtuFileNameForPetscOutputWithoutExtension(
+                //! \ogs_file_param{prj__test_definition__vtkdiff__file}
+                vtkdiff_config.getConfigParameter<std::string>("file")) +
+            "_" + std::to_string(rank) + ".vtu";
+#else
+        std::string const& filename =
+            //! \ogs_file_param{prj__test_definition__vtkdiff__file}
+            vtkdiff_config.getConfigParameter<std::string>("file");
+#endif  // OGS_USE_PETSC
+        std::string const& output_filename =
+            BaseLib::joinPaths(output_directory, filename);
+        _output_files.push_back(output_filename);
+        // TODO (naumov) expand filename relative to ref path for globbing.
+        std::string const& reference_filename =
+            BaseLib::joinPaths(reference_path, filename);
+
+        auto const absolute_tolerance =
+            //! \ogs_file_param{prj__test_definition__vtkdiff__absolute_tolerance}
+            vtkdiff_config.getConfigParameter<std::string>("absolute_tolerance",
+                                                           "");
+        if (!absolute_tolerance.empty() &&
+            !isConvertibleToDouble(absolute_tolerance))
+        {
+            OGS_FATAL(
+                "The absolute tolerance value '%s' is not convertible to "
+                "double.",
+                absolute_tolerance.c_str());
+        }
+        std::string const absolute_tolerance_parameter =
+            "--abs " + absolute_tolerance;
+
+        auto const relative_tolerance =
+            //! \ogs_file_param{prj__test_definition__vtkdiff__relative_tolerance}
+            vtkdiff_config.getConfigParameter<std::string>("relative_tolerance",
+                                                           "");
+        if (!relative_tolerance.empty() &&
+            !isConvertibleToDouble(relative_tolerance))
+        {
+            OGS_FATAL(
+                "The relative tolerance value '%s' is not convertible to "
+                "double.",
+                relative_tolerance.c_str());
+        }
+        std::string const relative_tolerance_parameter =
+            "--rel " + relative_tolerance;
+
+        //
+        // Construct command line.
+        //
+        std::string command_line =
+            vtkdiff + " -a " + safeString(field_name) + " -b " +
+            safeString(field_name) + " " + safeString(reference_filename) +
+            " " + safeString(output_filename) + " " +
+            absolute_tolerance_parameter + " " + relative_tolerance_parameter;
+        INFO("Will run '%s'", command_line.c_str());
+        _command_lines.emplace_back(std::move(command_line));
+    }
+}
+
+bool TestDefinition::runTests() const
+{
+    std::vector<int> return_values;
+    transform(begin(_command_lines), end(_command_lines),
+              back_inserter(return_values),
+              [](std::string const& command_line) {
+                  int const return_value = std::system(command_line.c_str());
+                  if (return_value != 0)
+                  {
+                      WARN("Return value %d was returned by '%s'.",
+                           return_value, command_line.c_str());
+                  }
+                  return return_value;
+              });
+    return !return_values.empty() &&
+           all_of(begin(return_values), end(return_values),
+                  [](int const& return_value) { return return_value == 0; });
+}
+
+std::vector<std::string> const& TestDefinition::getOutputFiles() const
+{
+    return _output_files;
+}
+}  // namespace ApplicationsLib
diff --git a/Applications/ApplicationsLib/TestDefinition.h b/Applications/ApplicationsLib/TestDefinition.h
new file mode 100644
index 0000000000000000000000000000000000000000..4696280be50f1abeda3710067dbdfca322ddc178
--- /dev/null
+++ b/Applications/ApplicationsLib/TestDefinition.h
@@ -0,0 +1,42 @@
+/**
+ * \file
+ *
+ * \copyright
+ * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include <memory>
+#include <string>
+#include <vector>
+
+namespace BaseLib
+{
+class ConfigTree;
+}
+
+namespace ApplicationsLib
+{
+class TestDefinition final
+{
+public:
+    /// Constructs test definition from the config and reference path
+    /// essentially constructing the command lines to be run on run() function
+    /// call.
+    TestDefinition(BaseLib::ConfigTree const& config_tree,
+                   std::string const& reference_path,
+                   std::string const& output_directory);
+
+    bool runTests() const;
+    std::vector<std::string> const& getOutputFiles() const;
+
+private:
+    std::vector<std::string> _command_lines;
+    std::vector<std::string> _output_files;
+};
+}  // namespace ApplicationsLib
diff --git a/Applications/CLI/ogs.cpp b/Applications/CLI/ogs.cpp
index 777b455e0282c8c66b09da8c0e0265c5c4e88c3a..0d3650f5e59aae9a62b6ff46b3d1af0538d88723 100644
--- a/Applications/CLI/ogs.cpp
+++ b/Applications/CLI/ogs.cpp
@@ -37,6 +37,7 @@
 #include "Applications/ApplicationsLib/LinearSolverLibrarySetup.h"
 #include "Applications/ApplicationsLib/LogogSetup.h"
 #include "Applications/ApplicationsLib/ProjectData.h"
+#include "Applications/ApplicationsLib/TestDefinition.h"
 #include "Applications/InSituLib/Adaptor.h"
 #include "ProcessLib/UncoupledProcessesTimeLoop.h"
 
@@ -63,6 +64,13 @@ int main(int argc, char* argv[])
         ' ',
         BaseLib::BuildInfo::git_describe);
 
+    TCLAP::ValueArg<std::string> reference_path_arg(
+        "r", "reference",
+        "Run output result comparison after successful simulation comparing to "
+        "all files in the given path.",
+        false, "", "PATH");
+    cmd.add(reference_path_arg);
+
     TCLAP::UnlabeledValueArg<std::string> project_arg(
         "project-file",
         "Path to the ogs6 project file.",
@@ -141,6 +149,7 @@ int main(int argc, char* argv[])
         INFO("OGS started on %s.", time_str.c_str());
     }
 
+    std::unique_ptr<ApplicationsLib::TestDefinition> test_definition;
     auto ogs_status = EXIT_SUCCESS;
 
     try
@@ -173,6 +182,22 @@ int main(int argc, char* argv[])
                                 BaseLib::getProjectDirectory(),
                                 outdir_arg.getValue());
 
+            if (!reference_path_arg.isSet())
+            {  // Ignore the test_definition section.
+                project_config->ignoreConfigParameter("test_definition");
+            }
+            else
+            {
+                test_definition =
+                    std::make_unique<ApplicationsLib::TestDefinition>(
+                        //! \ogs_file_param{prj__test_definition}
+                        project_config->getConfigSubtree("test_definition"),
+                        reference_path_arg.getValue(),
+                        outdir_arg.getValue());
+
+                INFO("Cleanup possible output files before running ogs.");
+                BaseLib::removeFiles(test_definition->getOutputFiles());
+            }
 #ifdef USE_INSITU
             auto isInsituConfigured = false;
             //! \ogs_file_param{prj__insitu}
@@ -236,5 +261,27 @@ int main(int argc, char* argv[])
         INFO("OGS terminated on %s.", time_str.c_str());
     }
 
-    return ogs_status;
+    if (ogs_status == EXIT_FAILURE)
+    {
+        ERR("OGS terminated with error.");
+        return EXIT_FAILURE;
+    }
+
+    if (test_definition == nullptr)
+    {
+        // There are no tests, so just exit;
+        return ogs_status;
+    }
+
+    INFO("");
+    INFO("##########################################");
+    INFO("# Running tests                          #");
+    INFO("##########################################");
+    INFO("");
+    if (!test_definition->runTests())
+    {
+        ERR("One of the tests failed.");
+        return EXIT_FAILURE;
+    }
+    return EXIT_SUCCESS;
 }
diff --git a/BaseLib/ConfigTree-impl.h b/BaseLib/ConfigTree-impl.h
index ed4cc075f75175de0e86feea8fdaa5f153bb89d7..0d233614521ad0884073a44ce1f4394b60256b60 100644
--- a/BaseLib/ConfigTree-impl.h
+++ b/BaseLib/ConfigTree-impl.h
@@ -26,6 +26,8 @@ public:
 
     Iterator begin() const { return _begin; }
     Iterator end()   const { return _end; }
+    std::size_t size() const { return std::distance(_begin, _end); }
+
 private:
     Iterator _begin;
     Iterator _end;
diff --git a/BaseLib/FileTools.cpp b/BaseLib/FileTools.cpp
index b1c1a9c3e0e8d5a8ffc7070b7599e0a76e80aa70..7ad69f6b5d884882f198f0f09b9e0f9448743af4 100644
--- a/BaseLib/FileTools.cpp
+++ b/BaseLib/FileTools.cpp
@@ -204,4 +204,26 @@ void setProjectDirectory(std::string const& dir)
     project_directory_is_set = true;
 }
 
+void removeFiles(std::vector<std::string> const& files)
+{
+    for (auto const& file : files)
+    {
+        int const success = std::remove(file.c_str());
+        if (success == 0)
+        {
+            DBUG("Removed '%s'", file.c_str());
+        }
+        else
+        {
+            if (errno == ENOENT)  // File does not exists
+            {
+                continue;
+            }
+            ERR("Removing file '%s' failed with error %d.", file.c_str(),
+                errno);
+            std::perror("Error: ");
+            OGS_FATAL("Unrecoverable error happened while removing a file.");
+        }
+    }
+}
 } // end namespace BaseLib
diff --git a/BaseLib/FileTools.h b/BaseLib/FileTools.h
index 7ba0820d6fbaf21b2ef25e49f84063c5e8f6751e..6fa60a54e6d283c4e8852d25ca1dfeb4161c0652 100644
--- a/BaseLib/FileTools.h
+++ b/BaseLib/FileTools.h
@@ -167,4 +167,7 @@ std::string const& getProjectDirectory();
 /// Sets the project directory.
 void setProjectDirectory(std::string const& dir);
 
-} // end namespace BaseLib
+/// Remove files. If a file does not exist nothing will happen, other errors
+/// lead to OGS_FATAL call.
+void removeFiles(std::vector<std::string> const& files);
+}  // end namespace BaseLib
diff --git a/Documentation/ProjectFile/prj/test_definition/i_test_definition.md b/Documentation/ProjectFile/prj/test_definition/i_test_definition.md
new file mode 100644
index 0000000000000000000000000000000000000000..17e7af123872120e4b1e4e84c8fff218bb383385
--- /dev/null
+++ b/Documentation/ProjectFile/prj/test_definition/i_test_definition.md
@@ -0,0 +1 @@
+Test definitions for post-simulation comparisons.
diff --git a/Documentation/ProjectFile/prj/test_definition/vtkdiff/i_vtkdiff.md b/Documentation/ProjectFile/prj/test_definition/vtkdiff/i_vtkdiff.md
new file mode 100644
index 0000000000000000000000000000000000000000..c61e662d54e152bba95e40187be90ba5cdf39c68
--- /dev/null
+++ b/Documentation/ProjectFile/prj/test_definition/vtkdiff/i_vtkdiff.md
@@ -0,0 +1,3 @@
+Test definition for vtkdiff comparison tool.
+
+See https://github.com/ufz/vtkdiff
diff --git a/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_absolute_tolerance.md b/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_absolute_tolerance.md
new file mode 100644
index 0000000000000000000000000000000000000000..576f7d14590b6e5b41590689ab4e8047ae5eba14
--- /dev/null
+++ b/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_absolute_tolerance.md
@@ -0,0 +1 @@
+Absolute tolerance \f$\epsilon\f$ for comparison \f$|a - b| < \epsilon\f$.
diff --git a/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_field.md b/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_field.md
new file mode 100644
index 0000000000000000000000000000000000000000..ef446458e2b1022675010c1d034a5d4c4f6b325e
--- /dev/null
+++ b/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_field.md
@@ -0,0 +1 @@
+Name of the point data or the cell data field to be compared.
diff --git a/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_file.md b/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_file.md
new file mode 100644
index 0000000000000000000000000000000000000000..266d913ccbe334941c4c8059026c3fc2399a3dc5
--- /dev/null
+++ b/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_file.md
@@ -0,0 +1,3 @@
+Full name of the output file including the `.vtu` ending. For parallel
+simulations specify the same name as for the serial case; conversion of the file
+names according to the number of ranks happens automatically.
diff --git a/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_relative_tolerance.md b/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_relative_tolerance.md
new file mode 100644
index 0000000000000000000000000000000000000000..c59e7d5948226fcf1b552926da3527b494748b20
--- /dev/null
+++ b/Documentation/ProjectFile/prj/test_definition/vtkdiff/t_relative_tolerance.md
@@ -0,0 +1,4 @@
+Relative tolerance \f$\delta\f$ for comparison \f${|a - b| \over {\textrm
+min}(|a|, |b|)} < \delta\f$.
+If the absolute difference \f$|a - b|\f$ is zero, zero is returned.
+If \f$a\f$ or \f$b\f$ are zero, \f$+\infty\f$ is returned.
diff --git a/ProcessLib/SmallDeformation/Tests.cmake b/ProcessLib/SmallDeformation/Tests.cmake
index 2e3ab2a5ed76ba1970208313aeac60f61e7aabf5..e6a44203ea5b67a169899eb930ee66f780f21ed1 100644
--- a/ProcessLib/SmallDeformation/Tests.cmake
+++ b/ProcessLib/SmallDeformation/Tests.cmake
@@ -1,350 +1,37 @@
-# Mechanics; Small deformations, linear (SDL)
-AddTest(
-    NAME Mechanics_SDL_square_1e0_displacementBC
-    PATH Mechanics/Linear
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS square_1e0.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    square_1e0_expected_pcs_0_ts_4_t_1.000000.vtu square_1e0_pcs_0_ts_4_t_1.000000.vtu displacement displacement 1e-16 1e-16
-    square_1e0_expected_pcs_0_ts_4_t_1.000000.vtu square_1e0_pcs_0_ts_4_t_1.000000.vtu sigma sigma 1e-16 1e-16
-)
-AddTest(
-    NAME Mechanics_SDL_square_1e2_tractionBC
-    PATH Mechanics/Linear
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS square_1e2.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    square_1e2_expected_pcs_0_ts_4_t_1.000000.vtu square_1e2_pcs_0_ts_4_t_1.000000.vtu displacement displacement 1e-15 0
-    square_1e2_expected_pcs_0_ts_4_t_1.000000.vtu square_1e2_pcs_0_ts_4_t_1.000000.vtu sigma sigma 1e-15 0
-)
-AddTest(
-    NAME Mechanics_SDL_disc_with_hole
-    PATH Mechanics/Linear
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS disc_with_hole.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    disc_with_hole_expected_pcs_0_ts_4_t_1.000000.vtu disc_with_hole_pcs_0_ts_4_t_1.000000.vtu displacement displacement 1e-16 1e-16
-    VIS disc_with_hole_pcs_0_ts_4_t_1.000000.vtu
-)
-AddTest(
-    NAME LARGE_Mechanics_SDL_square_1e5_tractionBC
-    PATH Mechanics/Linear
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS square_1e5.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    square_1e5_expected_pcs_0_ts_4_t_1.000000.vtu square_1e5_pcs_0_ts_4_t_1.000000.vtu displacement displacement 1e-15 0
-    square_1e5_expected_pcs_0_ts_4_t_1.000000.vtu square_1e5_pcs_0_ts_4_t_1.000000.vtu sigma sigma 1e-13 0
-)
-AddTest(
-    NAME Mechanics_SDL_square_1e2_quad8_traction_topBC
-    PATH Mechanics/Linear
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS square_1e2_quad8_traction_top.prj
-    WRAPPER time
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu displacement displacement 2e-14 1e-15
-    expected_square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu sigma sigma 2e-14 1e-15
-)
-# Mechanics; Small deformations, linear (SDL); Nodal forces
-AddTest(
-    NAME Mechanics_SDL_cube_1e0_nodal_forces
-    PATH Mechanics/Linear
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS cube_1e0.prj
-    WRAPPER time
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_cube_1e0_pcs_0_ts_4_t_1.000000.vtu cube_1e0_pcs_0_ts_4_t_1.000000.vtu displacement displacement 1e-14 1e-15
-    expected_cube_1e0_pcs_0_ts_4_t_1.000000.vtu cube_1e0_pcs_0_ts_4_t_1.000000.vtu NodalForces NodalForces 1e-14 1e-15
-    expected_cube_1e0_pcs_0_ts_4_t_1.000000.vtu cube_1e0_pcs_0_ts_4_t_1.000000.vtu sigma sigma 1e-14 1e-15
-    expected_cube_1e0_pcs_0_ts_4_t_1.000000.vtu cube_1e0_pcs_0_ts_4_t_1.000000.vtu epsilon epsilon 1e-14 1e-15
-)
-AddTest(
-    NAME Mechanics_SDL_cube_1e0_simple_shear_nodal_forces
-    PATH Mechanics/Linear
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS cube_1e0_simple_shear.prj
-    WRAPPER time
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu displacement displacement 1e-14 1e-15
-    expected_cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu NodalForces NodalForces 1e-14 1e-15
-    expected_cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu sigma sigma 1e-14 1e-15
-    expected_cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu epsilon epsilon 1e-14 1e-15
-)
-
-# Mechanics; Small deformations, linear (SDL); Material forces
-AddTest(
-    NAME Mechanics_SDL_material_forces_bar
-    PATH Mechanics/Linear/MaterialForces
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS bar.prj
-    WRAPPER time
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_bar_out_pcs_0_ts_2_t_1.000000.vtu bar_out_pcs_0_ts_2_t_1.000000.vtu displacement displacement 1e-14 1e-15
-    expected_bar_out_pcs_0_ts_2_t_1.000000.vtu bar_out_pcs_0_ts_2_t_1.000000.vtu MaterialForces MaterialForces 1e-14 1e-15
-    expected_bar_out_pcs_0_ts_2_t_1.000000.vtu bar_out_pcs_0_ts_2_t_1.000000.vtu free_energy_density free_energy_density 1e-14 1e-15
-)
-
-# Mechanics; Small deformations, linear (SDL); Material forces
-AddTest(
-    NAME Mechanics_SDL_material_forces_bar_3D
-    PATH Mechanics/Linear/MaterialForces
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS bar_3D.prj
-    WRAPPER time
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_bar_3D_out_pcs_0_ts_2_t_1.000000.vtu bar_3D_out_pcs_0_ts_2_t_1.000000.vtu displacement displacement 1e-14 1e-15
-    expected_bar_3D_out_pcs_0_ts_2_t_1.000000.vtu bar_3D_out_pcs_0_ts_2_t_1.000000.vtu MaterialForces MaterialForces 1e-14 1e-15
-    expected_bar_3D_out_pcs_0_ts_2_t_1.000000.vtu bar_3D_out_pcs_0_ts_2_t_1.000000.vtu free_energy_density free_energy_density 1e-14 1e-15
-)
-
-# Mechanics; Small deformations, Burgers (SDB)
-AddTest(
-    NAME Mechanics_SDB_cube_1e0_tractionBC
-    PATH Mechanics/Burgers
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS cube_1e0.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    cube_1e0_expected_pcs_0_ts_1_t_0.000100.vtu cube_1e0_pcs_0_ts_1_t_0.000100.vtu displacement displacement 1e-16 1e-16
-    cube_1e0_expected_pcs_0_ts_101_t_1.000000.vtu cube_1e0_pcs_0_ts_101_t_1.000000.vtu displacement displacement 1e-16 1e-16
-)
-AddTest(
-    NAME LARGE_Mechanics_SDB_cube_1e3_tractionBC
-    PATH Mechanics/Burgers
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS cube_1e3.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    cube_1e3_expected_pcs_0_ts_1_t_0.000100.vtu cube_1e3_pcs_0_ts_1_t_0.000100.vtu displacement displacement 1e-16 1e-16
-    cube_1e3_expected_pcs_0_ts_101_t_1.000000.vtu cube_1e3_pcs_0_ts_101_t_1.000000.vtu displacement displacement 1e-16 1e-16
-)
-
-# Mechanics; Small deformations, Ehlers (SDE)
-AddTest(
-    NAME Mechanics_SDE_cube_1e0
-    PATH Mechanics/Ehlers
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS cube_1e0.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_cube_1e0_pcs_0_ts_101_t_2.550000.vtu cube_1e0_pcs_0_ts_101_t_2.550000.vtu displacement displacement 1e-17 0
-    expected_cube_1e0_pcs_0_ts_101_t_2.550000.vtu cube_1e0_pcs_0_ts_101_t_2.550000.vtu sigma sigma 1e-15 0
-    expected_cube_1e0_pcs_0_ts_203_t_5.100000.vtu cube_1e0_pcs_0_ts_203_t_5.100000.vtu displacement displacement 1e-17 0
-    expected_cube_1e0_pcs_0_ts_203_t_5.100000.vtu cube_1e0_pcs_0_ts_203_t_5.100000.vtu sigma sigma 2e-15 0
-)
-AddTest(
-    NAME Mechanics_SDE_cube_1e1
-    PATH Mechanics/Ehlers
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS cube_1e1.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_cube_1e1_pcs_0_ts_101_t_2.550000.vtu cube_1e1_pcs_0_ts_101_t_2.550000.vtu displacement displacement 1e-11 0
-    expected_cube_1e1_pcs_0_ts_101_t_2.550000.vtu cube_1e1_pcs_0_ts_101_t_2.550000.vtu sigma sigma 1e-11 0
-    expected_cube_1e1_pcs_0_ts_203_t_5.100000.vtu cube_1e1_pcs_0_ts_203_t_5.100000.vtu displacement displacement 1e-11 0
-    expected_cube_1e1_pcs_0_ts_203_t_5.100000.vtu cube_1e1_pcs_0_ts_203_t_5.100000.vtu sigma sigma 1e-11 0
-)
-AddTest(
-    NAME LARGE_Mechanics_SDE_cube_1e3
-    PATH Mechanics/Ehlers
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS cube_1e3.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_cube_1e3_pcs_0_ts_101_t_2.550000.vtu cube_1e3_pcs_0_ts_101_t_2.550000.vtu displacement displacement 3e-13 1e-16
-    expected_cube_1e3_pcs_0_ts_101_t_2.550000.vtu cube_1e3_pcs_0_ts_101_t_2.550000.vtu sigma sigma 3e-13 1e-16
-    expected_cube_1e3_pcs_0_ts_203_t_5.100000.vtu cube_1e3_pcs_0_ts_203_t_5.100000.vtu displacement displacement 3e-13 1e-16
-    expected_cube_1e3_pcs_0_ts_203_t_5.100000.vtu cube_1e3_pcs_0_ts_203_t_5.100000.vtu sigma sigma 3e-13 1e-16
-)
-
-# Mechanics; Small deformations, Drucker-Prager (SDE-DP)
-AddTest(
-    NAME Mechanics_PlasticModel_SDE-DP_Ehlers_SpecialCase_DruckerPrager
-    PATH Mechanics/Ehlers
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS cube_1e0_dp.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu displacement displacement 1e-14 0
-    expected_cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu sigma sigma 1e-14 0
-    expected_cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu epsilon epsilon 1e-14 0
-)
-
-
-# SMALL DEFORMATION TEST -- AXIALLY SYMMETRIC
-AddTest(
-    NAME SmallDeformation_ring_plane_strain_axi
-    PATH Mechanics/Linear
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS ring_plane_strain.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    ring_plane_strain_1e4_solution.vtu ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu displacement displacement 1e-16 0
-    ring_plane_strain_1e4_solution.vtu ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu sigma sigma 1e-15 0
-)
-
-#With PETSc
-AddTest(
-    NAME Parallel_Mechanics_SDL_disc_with_hole
-    PATH Mechanics/Linear
-    EXECUTABLE_ARGS disc_with_hole.prj
-    WRAPPER mpirun
-    WRAPPER_ARGS -np 4
-    TESTER vtkdiff
-    REQUIREMENTS OGS_USE_MPI
-    DIFF_DATA
-    disc_with_hole_pcs_0_ts_4_t_1_000000_0.vtu disc_with_hole_pcs_0_ts_4_t_1_000000_0.vtu displacement displacement 1e-16 1e-16
-    VIS disc_with_hole_pcs_0_ts_0_t_0_000000.pvtu
-)
-
-# Pressure boundary condition
-AddTest(
-    NAME LARGE_SmallDeformation_PressureBC_hollow_sphere
-    PATH Mechanics/Linear/PressureBC
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS hollow_sphere.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_hollow_sphere_pcs_0_ts_1_t_1.000000.vtu hollow_sphere_pcs_0_ts_1_t_1.000000.vtu displacement displacement 1e-15 0
-    expected_hollow_sphere_pcs_0_ts_1_t_1.000000.vtu hollow_sphere_pcs_0_ts_1_t_1.000000.vtu sigma sigma 1e-11 0
-)
-
-# Pressure boundary condition: elastic pipe plain strain
-AddTest(
-    NAME SmallDeformation_PressureBC_elastic_pipe_plain_strain
-    PATH Mechanics/Linear
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS plain_strain_pipe.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    ref_plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu displacement displacement 2e-11 0
-    ref_plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu sigma sigma 2e-11 0
-)
-
-# Pressure boundary condition: elastic pipe axisymmetric
-AddTest(
-    NAME SmallDeformation_PressureBC_elastic_pipe_axisymmetric
-    PATH Mechanics/Linear/PressureBC
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS axisymmetric_pipe.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    axisymmetric_pipe_pcs_0_ts_1_t_1.000000.vtu axisymmetric_pipe_pcs_0_ts_1_t_1.000000.vtu displacement displacement 1e-11 0
-    axisymmetric_pipe_pcs_0_ts_1_t_1.000000.vtu axisymmetric_pipe_pcs_0_ts_1_t_1.000000.vtu sigma sigma 1e-11 0
-)
-
-# Pressure boundary condition: elastic sphere axisymmetric
-AddTest(
-    NAME SmallDeformation_PressureBC_elastic_sphere_axisymmetric
-    PATH Mechanics/Linear/PressureBC
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS axisymmetric_sphere.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    axisymmetric_sphere_pcs_0_ts_1_t_1.000000.vtu axisymmetric_sphere_pcs_0_ts_1_t_1.000000.vtu displacement displacement 1e-15 0
-    axisymmetric_sphere_pcs_0_ts_1_t_1.000000.vtu axisymmetric_sphere_pcs_0_ts_1_t_1.000000.vtu sigma sigma 2e-8 0
-)
-
-# Pressure boundary condition: plastic sphere axisymmetric
-AddTest(
-    NAME SmallDeformation_PressureBC_plastic_sphere_axisymmetric
-    PATH Mechanics/Ehlers
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS axisymmetric_sphere_pl.prj
-    TESTER vtkdiff
-    REQUIREMENTS OGS_USE_LIS
-    DIFF_DATA
-    ref_axisymmetric_sphere_pcs_0_ts_100_t_1.000000.vtu axisymmetric_sphere_pcs_0_ts_100_t_1.000000.vtu displacement displacement 1e-15 0
-    ref_axisymmetric_sphere_pcs_0_ts_100_t_1.000000.vtu axisymmetric_sphere_pcs_0_ts_100_t_1.000000.vtu sigma sigma 1e-15 0
-)
-
-# Two materials in gravity field variation of density
-AddTest(
-    NAME SmallDeformation_SDL_two_material_gravity_density
-    PATH Mechanics/Linear
-    EXECUTABLE_ARGS two_material_gravity.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_two_material_gravity.vtu two_material_gravity_pcs_0_ts_1_t_1.000000.vtu displacement displacement 5e-14 0
-    expected_two_material_gravity.vtu two_material_gravity_pcs_0_ts_1_t_1.000000.vtu sigma sigma 5e-14 0
-    expected_two_material_gravity.vtu two_material_gravity_pcs_0_ts_1_t_1.000000.vtu epsilon epsilon 5e-14 0
-)
-
-# Two materials in gravity field variation of modulus of elasticity
-AddTest(
-    NAME SmallDeformation_SDL_two_material_gravity_Emodulus
-    PATH Mechanics/Linear
-    EXECUTABLE_ARGS two_material_gravity_Emodulus.prj
-    TESTER vtkdiff
-    REQUIREMENTS NOT OGS_USE_MPI
-    DIFF_DATA
-    expected_two_material_gravity_Emodulus.vtu two_material_gravity_Emodulus_pcs_0_ts_1_t_1.000000.vtu displacement displacement 5e-14 0
-    expected_two_material_gravity_Emodulus.vtu two_material_gravity_Emodulus_pcs_0_ts_1_t_1.000000.vtu sigma sigma 1e-13 0
-    expected_two_material_gravity_Emodulus.vtu two_material_gravity_Emodulus_pcs_0_ts_1_t_1.000000.vtu epsilon epsilon 5e-14 0
-)
-AddTest(
-    NAME PythonBCSmallDeformationPiston
-    PATH Mechanics/Linear/PythonPiston
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS piston.prj
-    WRAPPER time
-    TESTER vtkdiff
-    REQUIREMENTS OGS_USE_PYTHON AND NOT OGS_USE_MPI
-    DIFF_DATA
-    ref_piston_pcs_0_ts_5_t_5.000000.vtu   piston_pcs_0_ts_5_t_5.000000.vtu  displacement displacement 1e-16 0
-    ref_piston_pcs_0_ts_5_t_5.000000.vtu   piston_pcs_0_ts_5_t_5.000000.vtu  epsilon epsilon 1e-14 0
-    ref_piston_pcs_0_ts_5_t_5.000000.vtu   piston_pcs_0_ts_5_t_5.000000.vtu  sigma sigma 1e-8 0
-    ref_piston_pcs_0_ts_10_t_10.000000.vtu piston_pcs_0_ts_10_t_10.000000.vtu displacement displacement 1e-16 0
-    ref_piston_pcs_0_ts_10_t_10.000000.vtu piston_pcs_0_ts_10_t_10.000000.vtu epsilon epsilon 1e-13 0
-    ref_piston_pcs_0_ts_10_t_10.000000.vtu piston_pcs_0_ts_10_t_10.000000.vtu sigma sigma 1e-7 0
-)
-
-AddTest(
-    NAME LARGE_PythonBCSmallDeformationHertzContact
-    PATH Mechanics/Linear/PythonHertzContact
-    EXECUTABLE ogs
-    EXECUTABLE_ARGS hertz_contact.prj
-    WRAPPER time
-    TESTER vtkdiff
-    REQUIREMENTS OGS_USE_PYTHON AND NOT OGS_USE_MPI
-    DIFF_DATA
-    ref_hertz_contact_ts_5.vtu  hertz_pcs_0_ts_5_t_5.000000.vtu  displacement displacement 1e-16 0
-    ref_hertz_contact_ts_5.vtu  hertz_pcs_0_ts_5_t_5.000000.vtu  epsilon epsilon 1e-16 0
-    ref_hertz_contact_ts_5.vtu  hertz_pcs_0_ts_5_t_5.000000.vtu  sigma sigma 1e-16 0
-    ref_hertz_contact_ts_10.vtu hertz_pcs_0_ts_10_t_10.000000.vtu displacement displacement 1e-16 0
-    ref_hertz_contact_ts_10.vtu hertz_pcs_0_ts_10_t_10.000000.vtu epsilon epsilon 1e-16 0
-    ref_hertz_contact_ts_10.vtu hertz_pcs_0_ts_10_t_10.000000.vtu sigma sigma 1e-16 0
-)
+if (NOT OGS_USE_MPI)
+    OgsTest(PROJECTFILE "Mechanics/Linear/square_1e0.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/square_1e2.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/disc_with_hole.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/square_1e5.prj" LARGE)
+    OgsTest(PROJECTFILE "Mechanics/Linear/square_1e2_quad8_traction_top.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/cube_1e0.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/cube_1e0_simple_shear.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/MaterialForces/bar.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/MaterialForces/bar_3D.prj" LARGE)
+    OgsTest(PROJECTFILE "Mechanics/Burgers/cube_1e0.prj")
+    OgsTest(PROJECTFILE "Mechanics/Burgers/cube_1e3.prj" LARGE)
+    OgsTest(PROJECTFILE "Mechanics/Ehlers/cube_1e0.prj")
+    OgsTest(PROJECTFILE "Mechanics/Ehlers/cube_1e1.prj")
+    OgsTest(PROJECTFILE "Mechanics/Ehlers/cube_1e3.prj" LARGE)
+    OgsTest(PROJECTFILE "Mechanics/Ehlers/cube_1e0_dp.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/ring_plane_strain.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/plain_strain_pipe.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/two_material_gravity.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/two_material_gravity_Emodulus.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/PressureBC/axisymmetric_pipe.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/PressureBC/hollow_sphere.prj" LARGE)
+    OgsTest(PROJECTFILE "Mechanics/Linear/PressureBC/axisymmetric_sphere.prj")
+    OgsTest(PROJECTFILE "Mechanics/Ehlers/axisymmetric_sphere_pl.prj" LARGE)
+endif()
+
+if (OGS_USE_PYTHON)
+    OgsTest(PROJECTFILE "Mechanics/Linear/PythonPiston/piston.prj")
+    OgsTest(PROJECTFILE "Mechanics/Linear/PythonHertzContact/hertz_contact.prj")
+endif()
+
+if (OGS_USE_MPI)
+    OgsTest(WRAPPER "mpirun -np 4" PROJECTFILE "Mechanics/Linear/disc_with_hole.prj")
+endif()
 
 # Basic test that MFront works at all.
 # Linear elastic, no internal state variables, no external state variables.
diff --git a/Tests/Data/Mechanics/Burgers/cube_1e0.prj b/Tests/Data/Mechanics/Burgers/cube_1e0.prj
index 9904cc7c2b939b7d02f38d5bec0fae0b03d51ac1..85ea17e6ea1ac9c06ab77b7abb25b882bf46dcbf 100644
--- a/Tests/Data/Mechanics/Burgers/cube_1e0.prj
+++ b/Tests/Data/Mechanics/Burgers/cube_1e0.prj
@@ -237,4 +237,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_1_t_0.000100.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_101_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Burgers/cube_1e0_expected_pcs_0_ts_101_t_1.000000.vtu b/Tests/Data/Mechanics/Burgers/cube_1e0_pcs_0_ts_101_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Burgers/cube_1e0_expected_pcs_0_ts_101_t_1.000000.vtu
rename to Tests/Data/Mechanics/Burgers/cube_1e0_pcs_0_ts_101_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Burgers/cube_1e0_expected_pcs_0_ts_1_t_0.000100.vtu b/Tests/Data/Mechanics/Burgers/cube_1e0_pcs_0_ts_1_t_0.000100.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Burgers/cube_1e0_expected_pcs_0_ts_1_t_0.000100.vtu
rename to Tests/Data/Mechanics/Burgers/cube_1e0_pcs_0_ts_1_t_0.000100.vtu
diff --git a/Tests/Data/Mechanics/Burgers/cube_1e3.prj b/Tests/Data/Mechanics/Burgers/cube_1e3.prj
index 57476da133347f2933a4cfcc8d4956d776bc288c..89050bd85d0c93806eea7ab84ed9346005d0d4f3 100644
--- a/Tests/Data/Mechanics/Burgers/cube_1e3.prj
+++ b/Tests/Data/Mechanics/Burgers/cube_1e3.prj
@@ -237,4 +237,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>cube_1e3_pcs_0_ts_1_t_0.000100.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e3_pcs_0_ts_101_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Burgers/cube_1e3_expected_pcs_0_ts_101_t_1.000000.vtu b/Tests/Data/Mechanics/Burgers/cube_1e3_pcs_0_ts_101_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Burgers/cube_1e3_expected_pcs_0_ts_101_t_1.000000.vtu
rename to Tests/Data/Mechanics/Burgers/cube_1e3_pcs_0_ts_101_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Burgers/cube_1e3_expected_pcs_0_ts_1_t_0.000100.vtu b/Tests/Data/Mechanics/Burgers/cube_1e3_pcs_0_ts_1_t_0.000100.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Burgers/cube_1e3_expected_pcs_0_ts_1_t_0.000100.vtu
rename to Tests/Data/Mechanics/Burgers/cube_1e3_pcs_0_ts_1_t_0.000100.vtu
diff --git a/Tests/Data/Mechanics/Ehlers/axisymmetric_sphere_pl.prj b/Tests/Data/Mechanics/Ehlers/axisymmetric_sphere_pl.prj
index b2d6b7240784d38015556d272115d61ab4c88437..a07a6c2569e45e8a92805c9239fe35fb77b98ee5 100644
--- a/Tests/Data/Mechanics/Ehlers/axisymmetric_sphere_pl.prj
+++ b/Tests/Data/Mechanics/Ehlers/axisymmetric_sphere_pl.prj
@@ -1,7 +1,11 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <OpenGeoSysProject>
-    <mesh  axially_symmetric="true">axisymmetric_sphere_pl.vtu</mesh>
+    <mesh axially_symmetric="true">axisymmetric_sphere_pl.vtu</mesh>
     <geometry>axisymmetric_sphere_pl.gml</geometry>
+    <search_length_algorithm>
+        <type>fixed</type>
+        <value>1e-3</value>
+    </search_length_algorithm>
     <processes>
         <process>
             <name>SD</name>
@@ -73,7 +77,7 @@
         </processes>
         <output>
             <type>VTK</type>
-            <prefix>axisymmetric_sphere</prefix>
+            <prefix>axisymmetric_sphere_pl</prefix>
             <timesteps>
                 <pair>
                     <repeat>1000000</repeat>
@@ -208,21 +212,13 @@
                 <boundary_condition>
                     <geometrical_set>geometry</geometrical_set>
                     <geometry>inner</geometry>
-                    <search_length_algorithm>
-                        <type>fixed</type>
-                        <value>1e-3</value>
-                    </search_length_algorithm>
-                    <type>Pressure</type>
+                    <type>NormalTraction</type>
                     <parameter>pressure_inside</parameter>
                 </boundary_condition>
                 <!-- Fix axis -->
                 <boundary_condition>
                     <geometrical_set>geometry</geometrical_set>
                     <geometry>axis</geometry>
-                    <search_length_algorithm>
-                        <type>fixed</type>
-                        <value>1e-3</value>
-                    </search_length_algorithm>
                     <type>Dirichlet</type>
                     <component>0</component>
                     <parameter>dirichlet0</parameter>
@@ -231,10 +227,6 @@
                 <boundary_condition>
                     <geometrical_set>geometry</geometrical_set>
                     <geometry>central_outer</geometry>
-                    <search_length_algorithm>
-                        <type>fixed</type>
-                        <value>1e-3</value>
-                    </search_length_algorithm>
                     <type>Dirichlet</type>
                     <component>1</component>
                     <parameter>dirichlet0</parameter>
@@ -242,7 +234,7 @@
             </boundary_conditions>
         </process_variable>
     </process_variables>
- <nonlinear_solvers>
+    <nonlinear_solvers>
         <nonlinear_solver>
             <name>basic_newton</name>
             <type>Newton</type>
@@ -266,4 +258,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>axisymmetric_sphere_pl_pcs_0_ts_100_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>axisymmetric_sphere_pl_pcs_0_ts_100_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>2e-5</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Ehlers/axisymmetric_sphere_pl_pcs_0_ts_100_t_1.000000.vtu b/Tests/Data/Mechanics/Ehlers/axisymmetric_sphere_pl_pcs_0_ts_100_t_1.000000.vtu
new file mode 100644
index 0000000000000000000000000000000000000000..a62abc183dde11164d6992ebd3226eecad63ae57
--- /dev/null
+++ b/Tests/Data/Mechanics/Ehlers/axisymmetric_sphere_pl_pcs_0_ts_100_t_1.000000.vtu
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6d021a7fbd59ee77b67bc4e0a60ac3c74627824141ef484017d66c9197f2d79
+size 459383
diff --git a/Tests/Data/Mechanics/Ehlers/cube_1e0.prj b/Tests/Data/Mechanics/Ehlers/cube_1e0.prj
index 53ed09eb4aadce72c495b6e28f745209b8d9ad76..804ca0a644a93c90aedb614c94e8aa9400a2fc27 100644
--- a/Tests/Data/Mechanics/Ehlers/cube_1e0.prj
+++ b/Tests/Data/Mechanics/Ehlers/cube_1e0.prj
@@ -318,4 +318,30 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_101_t_2.550000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-17</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_101_t_2.550000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_203_t_5.100000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-17</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_203_t_5.100000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>2e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Ehlers/cube_1e0_dp.prj b/Tests/Data/Mechanics/Ehlers/cube_1e0_dp.prj
index afa966314b50a77b1821e7a73b5b7d8a9283e912..cce8792cd2e8f8e19a7d1da2e771cc620b535359 100644
--- a/Tests/Data/Mechanics/Ehlers/cube_1e0_dp.prj
+++ b/Tests/Data/Mechanics/Ehlers/cube_1e0_dp.prj
@@ -318,4 +318,24 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu</file>
+            <field>epsilon</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Ehlers/cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu b/Tests/Data/Mechanics/Ehlers/cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu
index c04c4a883ca95de51a05ace307ddfdc2a7d34ce9..e64ade91dbd8bfd79ff7c5e04a3b9d047d4f594d 100644
--- a/Tests/Data/Mechanics/Ehlers/cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu
+++ b/Tests/Data/Mechanics/Ehlers/cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:38e966cf91169df50566f14c5faeece2799026d2dba3b7d59f091bcc9314845f
-size 3579
+oid sha256:6ebdbb6ec9fdc37f701dbf6019dc2869145d8164fbc81cee54078b552efef7aa
+size 2932
diff --git a/Tests/Data/Mechanics/Ehlers/expected_cube_1e0_pcs_0_ts_101_t_2.550000.vtu b/Tests/Data/Mechanics/Ehlers/cube_1e0_pcs_0_ts_101_t_2.550000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Ehlers/expected_cube_1e0_pcs_0_ts_101_t_2.550000.vtu
rename to Tests/Data/Mechanics/Ehlers/cube_1e0_pcs_0_ts_101_t_2.550000.vtu
diff --git a/Tests/Data/Mechanics/Ehlers/cube_1e0_pcs_0_ts_203_t_5.100000.vtu b/Tests/Data/Mechanics/Ehlers/cube_1e0_pcs_0_ts_203_t_5.100000.vtu
index 8d6344069cda50ca331139b41dad3b805735a633..3a4751f46402c1ba97d6e24e71a60e70864a599a 100644
--- a/Tests/Data/Mechanics/Ehlers/cube_1e0_pcs_0_ts_203_t_5.100000.vtu
+++ b/Tests/Data/Mechanics/Ehlers/cube_1e0_pcs_0_ts_203_t_5.100000.vtu
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:bc2056a4a946e28f2010bd2a769049aaa76a509b877ae6b5c6aea7a8684b70da
-size 3622
+oid sha256:a47744820bdae82c358b308f5fc3ee2a9dabf0f8e90df7ab163f4e835cea5076
+size 2916
diff --git a/Tests/Data/Mechanics/Ehlers/cube_1e1.prj b/Tests/Data/Mechanics/Ehlers/cube_1e1.prj
index 12ee66583a7a9f662889edda4d89f8f1e7d4259c..3ba3ab8decc479e1526a4414a54b7285a217d996 100644
--- a/Tests/Data/Mechanics/Ehlers/cube_1e1.prj
+++ b/Tests/Data/Mechanics/Ehlers/cube_1e1.prj
@@ -322,4 +322,30 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>cube_1e1_pcs_0_ts_101_t_2.550000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-11</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e1_pcs_0_ts_101_t_2.550000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-11</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e1_pcs_0_ts_203_t_5.100000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-11</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e1_pcs_0_ts_203_t_5.100000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-11</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Ehlers/expected_cube_1e1_pcs_0_ts_101_t_2.550000.vtu b/Tests/Data/Mechanics/Ehlers/cube_1e1_pcs_0_ts_101_t_2.550000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Ehlers/expected_cube_1e1_pcs_0_ts_101_t_2.550000.vtu
rename to Tests/Data/Mechanics/Ehlers/cube_1e1_pcs_0_ts_101_t_2.550000.vtu
diff --git a/Tests/Data/Mechanics/Ehlers/cube_1e1_pcs_0_ts_203_t_5.100000.vtu b/Tests/Data/Mechanics/Ehlers/cube_1e1_pcs_0_ts_203_t_5.100000.vtu
index 805fb66219291dd10b6e257aae8f81a11a9dc076..ba33c76881d2f4f621a9a3b1053b928ec1e43b2a 100644
--- a/Tests/Data/Mechanics/Ehlers/cube_1e1_pcs_0_ts_203_t_5.100000.vtu
+++ b/Tests/Data/Mechanics/Ehlers/cube_1e1_pcs_0_ts_203_t_5.100000.vtu
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:2106bb8f79aa06306ae20b5d8fd51a8cf4761fb366ec3762a4cc7755ac7d4f8b
-size 4997
+oid sha256:f63652662f4575bb4f5374a2b84b81a24405654c9081e3d6101dc275a6d2f1de
+size 4424
diff --git a/Tests/Data/Mechanics/Ehlers/cube_1e3.prj b/Tests/Data/Mechanics/Ehlers/cube_1e3.prj
index 9006acf73bb0f5a732abd19d8f44d954020ea63d..ee46d7934616e4a2b2f13fa08fffcba37bbbc7de 100644
--- a/Tests/Data/Mechanics/Ehlers/cube_1e3.prj
+++ b/Tests/Data/Mechanics/Ehlers/cube_1e3.prj
@@ -322,4 +322,30 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>cube_1e3_pcs_0_ts_101_t_2.550000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>3e-13</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e3_pcs_0_ts_101_t_2.550000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>3e-13</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e3_pcs_0_ts_203_t_5.100000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>3e-13</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e3_pcs_0_ts_203_t_5.100000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>3e-13</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Ehlers/expected_cube_1e3_pcs_0_ts_101_t_2.550000.vtu b/Tests/Data/Mechanics/Ehlers/cube_1e3_pcs_0_ts_101_t_2.550000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Ehlers/expected_cube_1e3_pcs_0_ts_101_t_2.550000.vtu
rename to Tests/Data/Mechanics/Ehlers/cube_1e3_pcs_0_ts_101_t_2.550000.vtu
diff --git a/Tests/Data/Mechanics/Ehlers/cube_1e3_pcs_0_ts_203_t_5.100000.vtu b/Tests/Data/Mechanics/Ehlers/cube_1e3_pcs_0_ts_203_t_5.100000.vtu
index 6f67e77e8973b99a029843a8930055b6f480aee1..fb15add8d9b13465d3e56fa3e1a3474f53b6784f 100644
--- a/Tests/Data/Mechanics/Ehlers/cube_1e3_pcs_0_ts_203_t_5.100000.vtu
+++ b/Tests/Data/Mechanics/Ehlers/cube_1e3_pcs_0_ts_203_t_5.100000.vtu
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:1aa6d19b680059789c39fde042363c9dda3b3ba9556a30273c25c2a2a88d3e12
-size 132078
+oid sha256:19945e9a8ad51a71d25a155de8bbb160b4bed75feaafccc94ff32e4d131f89c3
+size 95652
diff --git a/Tests/Data/Mechanics/Ehlers/expected_cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu b/Tests/Data/Mechanics/Ehlers/expected_cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu
deleted file mode 100644
index e64ade91dbd8bfd79ff7c5e04a3b9d047d4f594d..0000000000000000000000000000000000000000
--- a/Tests/Data/Mechanics/Ehlers/expected_cube_1e0_dp_pcs_0_ts_203_t_5.100000.vtu
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6ebdbb6ec9fdc37f701dbf6019dc2869145d8164fbc81cee54078b552efef7aa
-size 2932
diff --git a/Tests/Data/Mechanics/Ehlers/expected_cube_1e0_pcs_0_ts_203_t_5.100000.vtu b/Tests/Data/Mechanics/Ehlers/expected_cube_1e0_pcs_0_ts_203_t_5.100000.vtu
deleted file mode 100644
index 3a4751f46402c1ba97d6e24e71a60e70864a599a..0000000000000000000000000000000000000000
--- a/Tests/Data/Mechanics/Ehlers/expected_cube_1e0_pcs_0_ts_203_t_5.100000.vtu
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a47744820bdae82c358b308f5fc3ee2a9dabf0f8e90df7ab163f4e835cea5076
-size 2916
diff --git a/Tests/Data/Mechanics/Ehlers/expected_cube_1e1_pcs_0_ts_203_t_5.100000.vtu b/Tests/Data/Mechanics/Ehlers/expected_cube_1e1_pcs_0_ts_203_t_5.100000.vtu
deleted file mode 100644
index ba33c76881d2f4f621a9a3b1053b928ec1e43b2a..0000000000000000000000000000000000000000
--- a/Tests/Data/Mechanics/Ehlers/expected_cube_1e1_pcs_0_ts_203_t_5.100000.vtu
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f63652662f4575bb4f5374a2b84b81a24405654c9081e3d6101dc275a6d2f1de
-size 4424
diff --git a/Tests/Data/Mechanics/Ehlers/expected_cube_1e3_pcs_0_ts_203_t_5.100000.vtu b/Tests/Data/Mechanics/Ehlers/expected_cube_1e3_pcs_0_ts_203_t_5.100000.vtu
deleted file mode 100644
index fb15add8d9b13465d3e56fa3e1a3474f53b6784f..0000000000000000000000000000000000000000
--- a/Tests/Data/Mechanics/Ehlers/expected_cube_1e3_pcs_0_ts_203_t_5.100000.vtu
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:19945e9a8ad51a71d25a155de8bbb160b4bed75feaafccc94ff32e4d131f89c3
-size 95652
diff --git a/Tests/Data/Mechanics/Ehlers/ref_axisymmetric_sphere_pcs_0_ts_100_t_1.000000.vtu b/Tests/Data/Mechanics/Ehlers/ref_axisymmetric_sphere_pcs_0_ts_100_t_1.000000.vtu
deleted file mode 100644
index bb044b55e8bb3fffa22ae699ef45d87b15003efe..0000000000000000000000000000000000000000
--- a/Tests/Data/Mechanics/Ehlers/ref_axisymmetric_sphere_pcs_0_ts_100_t_1.000000.vtu
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:12ec20948f416feb2674b6171323f3343e7c2d162a00eefd4b19d7a6995099c3
-size 432006
diff --git a/Tests/Data/Mechanics/Linear/MaterialForces/bar.prj b/Tests/Data/Mechanics/Linear/MaterialForces/bar.prj
index 949e626ffe41e4afce251448537640447167ef96..6bde6fc8564a74883c3ff443c9d4e513cbc730cf 100644
--- a/Tests/Data/Mechanics/Linear/MaterialForces/bar.prj
+++ b/Tests/Data/Mechanics/Linear/MaterialForces/bar.prj
@@ -177,4 +177,24 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>bar_out_pcs_0_ts_2_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>bar_out_pcs_0_ts_2_t_1.000000.vtu</file>
+            <field>MaterialForces</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>bar_out_pcs_0_ts_2_t_1.000000.vtu</file>
+            <field>free_energy_density</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/MaterialForces/bar_3D.prj b/Tests/Data/Mechanics/Linear/MaterialForces/bar_3D.prj
index 4607028e5c64fc6db2cecde15d9faac17852a360..6c7490be05dae3f8077ddd9326e9fb7d9685183f 100644
--- a/Tests/Data/Mechanics/Linear/MaterialForces/bar_3D.prj
+++ b/Tests/Data/Mechanics/Linear/MaterialForces/bar_3D.prj
@@ -142,7 +142,6 @@
                     <component>1</component>
                     <parameter>Dirichlet_0</parameter>
                 </boundary_condition>
-
                 <boundary_condition>
                     <geometrical_set>bar_geom</geometrical_set>
                     <geometry>left_vertical</geometry>
@@ -192,4 +191,24 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>bar_3D_out_pcs_0_ts_2_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>bar_3D_out_pcs_0_ts_2_t_1.000000.vtu</file>
+            <field>MaterialForces</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>bar_3D_out_pcs_0_ts_2_t_1.000000.vtu</file>
+            <field>free_energy_density</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/MaterialForces/expected_bar_3D_out_pcs_0_ts_2_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/MaterialForces/bar_3D_out_pcs_0_ts_2_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/MaterialForces/expected_bar_3D_out_pcs_0_ts_2_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/MaterialForces/bar_3D_out_pcs_0_ts_2_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/MaterialForces/expected_bar_out_pcs_0_ts_2_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/MaterialForces/bar_out_pcs_0_ts_2_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/MaterialForces/expected_bar_out_pcs_0_ts_2_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/MaterialForces/bar_out_pcs_0_ts_2_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/PressureBC/axisymmetric_pipe.prj b/Tests/Data/Mechanics/Linear/PressureBC/axisymmetric_pipe.prj
index 4168165648c86071a110f68573b8f91b230c88b4..da1a80ec8c209079afaf916ae890167f698bab80 100644
--- a/Tests/Data/Mechanics/Linear/PressureBC/axisymmetric_pipe.prj
+++ b/Tests/Data/Mechanics/Linear/PressureBC/axisymmetric_pipe.prj
@@ -161,4 +161,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>axisymmetric_pipe_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-11</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>axisymmetric_pipe_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-11</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/PressureBC/axisymmetric_sphere.prj b/Tests/Data/Mechanics/Linear/PressureBC/axisymmetric_sphere.prj
index fa02cd5b593dae739eac56fe04da150c92ded488..b44f12fb233b1bb9d07737f3b141cb486ab32ad5 100644
--- a/Tests/Data/Mechanics/Linear/PressureBC/axisymmetric_sphere.prj
+++ b/Tests/Data/Mechanics/Linear/PressureBC/axisymmetric_sphere.prj
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <OpenGeoSysProject>
-    <mesh  axially_symmetric="true">axisymmetric_sphere.vtu</mesh>
+    <mesh axially_symmetric="true">axisymmetric_sphere.vtu</mesh>
     <geometry>axisymmetric_sphere.gml</geometry>
     <processes>
         <process>
@@ -164,4 +164,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>axisymmetric_sphere_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>axisymmetric_sphere_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>2e-8</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/PressureBC/hollow_sphere.prj b/Tests/Data/Mechanics/Linear/PressureBC/hollow_sphere.prj
index 4cd7a395fa424e976ca61480fe935d13c606be1e..740a31d22be34ea8758bde9583a005affa425e74 100644
--- a/Tests/Data/Mechanics/Linear/PressureBC/hollow_sphere.prj
+++ b/Tests/Data/Mechanics/Linear/PressureBC/hollow_sphere.prj
@@ -19,7 +19,7 @@
             </process_variables>
             <secondary_variables>
                 <secondary_variable type="static" internal_name="sigma" output_name="sigma"/>
-           </secondary_variables>
+            </secondary_variables>
         </process>
     </processes>
     <time_loop>
@@ -188,4 +188,18 @@
             </eigen>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>hollow_sphere_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>hollow_sphere_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-11</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/PressureBC/expected_hollow_sphere_pcs_0_ts_1_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/PressureBC/hollow_sphere_pcs_0_ts_1_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/PressureBC/expected_hollow_sphere_pcs_0_ts_1_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/PressureBC/hollow_sphere_pcs_0_ts_1_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/PythonHertzContact/hertz_contact.prj b/Tests/Data/Mechanics/Linear/PythonHertzContact/hertz_contact.prj
index 8cbeeb41991bf27ac1c70922025bff33b701ec23..9d554c3f150f61c357de6bda32316e01d8a090d1 100644
--- a/Tests/Data/Mechanics/Linear/PythonHertzContact/hertz_contact.prj
+++ b/Tests/Data/Mechanics/Linear/PythonHertzContact/hertz_contact.prj
@@ -151,4 +151,42 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>hertz_pcs_0_ts_5_t_5.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>hertz_pcs_0_ts_5_t_5.000000.vtu</file>
+            <field>epsilon</field>
+            <absolute_tolerance>5e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>hertz_pcs_0_ts_5_t_5.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>5e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>hertz_pcs_0_ts_10_t_10.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>hertz_pcs_0_ts_10_t_10.000000.vtu</file>
+            <field>epsilon</field>
+            <absolute_tolerance>5e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>hertz_pcs_0_ts_10_t_10.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>5e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/PythonHertzContact/ref_hertz_contact_ts_10.vtu b/Tests/Data/Mechanics/Linear/PythonHertzContact/hertz_pcs_0_ts_10_t_10.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/PythonHertzContact/ref_hertz_contact_ts_10.vtu
rename to Tests/Data/Mechanics/Linear/PythonHertzContact/hertz_pcs_0_ts_10_t_10.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/PythonHertzContact/ref_hertz_contact_ts_5.vtu b/Tests/Data/Mechanics/Linear/PythonHertzContact/hertz_pcs_0_ts_5_t_5.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/PythonHertzContact/ref_hertz_contact_ts_5.vtu
rename to Tests/Data/Mechanics/Linear/PythonHertzContact/hertz_pcs_0_ts_5_t_5.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/PythonPiston/piston.prj b/Tests/Data/Mechanics/Linear/PythonPiston/piston.prj
index 474c0517076216aab1880c8a57abbe07653dd7a7..3f8e4239a2e52b4a79bd28cb56f87a4af35dabd6 100644
--- a/Tests/Data/Mechanics/Linear/PythonPiston/piston.prj
+++ b/Tests/Data/Mechanics/Linear/PythonPiston/piston.prj
@@ -149,4 +149,42 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>piston_pcs_0_ts_5_t_5.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>piston_pcs_0_ts_5_t_5.000000.vtu</file>
+            <field>epsilon</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>piston_pcs_0_ts_5_t_5.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-8</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>piston_pcs_0_ts_10_t_10.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>piston_pcs_0_ts_10_t_10.000000.vtu</file>
+            <field>epsilon</field>
+            <absolute_tolerance>1e-13</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>piston_pcs_0_ts_10_t_10.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-7</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/PythonPiston/ref_piston_pcs_0_ts_10_t_10.000000.vtu b/Tests/Data/Mechanics/Linear/PythonPiston/piston_pcs_0_ts_10_t_10.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/PythonPiston/ref_piston_pcs_0_ts_10_t_10.000000.vtu
rename to Tests/Data/Mechanics/Linear/PythonPiston/piston_pcs_0_ts_10_t_10.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/PythonPiston/ref_piston_pcs_0_ts_5_t_5.000000.vtu b/Tests/Data/Mechanics/Linear/PythonPiston/piston_pcs_0_ts_5_t_5.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/PythonPiston/ref_piston_pcs_0_ts_5_t_5.000000.vtu
rename to Tests/Data/Mechanics/Linear/PythonPiston/piston_pcs_0_ts_5_t_5.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/cube_1e0.prj b/Tests/Data/Mechanics/Linear/cube_1e0.prj
index 63aed532dd4813197db017a4483630773dc28402..f8839a2f594f73f319487f8ebc75d54e6c2f1ae1 100644
--- a/Tests/Data/Mechanics/Linear/cube_1e0.prj
+++ b/Tests/Data/Mechanics/Linear/cube_1e0.prj
@@ -171,4 +171,30 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>NodalForces</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>epsilon</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/expected_cube_1e0_pcs_0_ts_4_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/cube_1e0_pcs_0_ts_4_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/expected_cube_1e0_pcs_0_ts_4_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/cube_1e0_pcs_0_ts_4_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/cube_1e0_simple_shear.prj b/Tests/Data/Mechanics/Linear/cube_1e0_simple_shear.prj
index fa5fea5e04279183e64d5d48ee525c0d32fb67d6..33615bd1c045b9c5c72101de67d892c26cd6a990 100644
--- a/Tests/Data/Mechanics/Linear/cube_1e0_simple_shear.prj
+++ b/Tests/Data/Mechanics/Linear/cube_1e0_simple_shear.prj
@@ -189,4 +189,30 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>NodalForces</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>epsilon</field>
+            <absolute_tolerance>1e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/expected_cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/expected_cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/cube_1e0_simple_shear_pcs_0_ts_4_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/disc_with_hole.prj b/Tests/Data/Mechanics/Linear/disc_with_hole.prj
index ceafeaf61d3f6f0a3f4739713b59b7a5cb424924..c77cc2f20f2ee45bdb5e03706fc5d5e66fd1d3a3 100644
--- a/Tests/Data/Mechanics/Linear/disc_with_hole.prj
+++ b/Tests/Data/Mechanics/Linear/disc_with_hole.prj
@@ -156,4 +156,12 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>disc_with_hole_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/disc_with_hole_expected_pcs_0_ts_4_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/disc_with_hole_pcs_0_ts_4_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/disc_with_hole_expected_pcs_0_ts_4_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/disc_with_hole_pcs_0_ts_4_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/plain_strain_pipe.prj b/Tests/Data/Mechanics/Linear/plain_strain_pipe.prj
index d2bb53057ffba7e2826da31ac85599b7a77dd0fb..6338bf386c726fb734f84e0d9dd53371fd2bb5a3 100644
--- a/Tests/Data/Mechanics/Linear/plain_strain_pipe.prj
+++ b/Tests/Data/Mechanics/Linear/plain_strain_pipe.prj
@@ -164,4 +164,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>2e-11</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>2e-11</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/ref_plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/ref_plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/plain_strain_pipe_pcs_0_ts_1_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/ring_plane_strain.prj b/Tests/Data/Mechanics/Linear/ring_plane_strain.prj
index 3b4ddba03b0895984d36e7f0555cf9232d179a16..c54ce8905626e389d6517ce4fb985fa70ac0f9bd 100644
--- a/Tests/Data/Mechanics/Linear/ring_plane_strain.prj
+++ b/Tests/Data/Mechanics/Linear/ring_plane_strain.prj
@@ -155,4 +155,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>6e-4</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>6e-4</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/ring_plane_strain_1e4_solution.vtu b/Tests/Data/Mechanics/Linear/ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/ring_plane_strain_1e4_solution.vtu
rename to Tests/Data/Mechanics/Linear/ring_plane_strain_pcs_0_ts_1_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/square_1e0.prj b/Tests/Data/Mechanics/Linear/square_1e0.prj
index 5cac4e035d50d08fc25c1d463f8ce5f3d028a606..60ecbe3e901733ec2408e5ea5576263d5d02e398 100644
--- a/Tests/Data/Mechanics/Linear/square_1e0.prj
+++ b/Tests/Data/Mechanics/Linear/square_1e0.prj
@@ -151,4 +151,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>square_1e0_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>square_1e0_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-16</absolute_tolerance>
+            <relative_tolerance>1e-16</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/square_1e0_expected_pcs_0_ts_4_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/square_1e0_pcs_0_ts_4_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/square_1e0_expected_pcs_0_ts_4_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/square_1e0_pcs_0_ts_4_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/square_1e2.prj b/Tests/Data/Mechanics/Linear/square_1e2.prj
index 690eef254ce4cebb501bd62b475e675d6622428e..c850559bd17af3dfbe266530d2f9e04897a2c073 100644
--- a/Tests/Data/Mechanics/Linear/square_1e2.prj
+++ b/Tests/Data/Mechanics/Linear/square_1e2.prj
@@ -151,4 +151,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>square_1e2_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>square_1e2_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/square_1e2_expected_pcs_0_ts_4_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/square_1e2_pcs_0_ts_4_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/square_1e2_expected_pcs_0_ts_4_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/square_1e2_pcs_0_ts_4_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/square_1e2_quad8_traction_top.prj b/Tests/Data/Mechanics/Linear/square_1e2_quad8_traction_top.prj
index f10c39ed42cb472a5319d86e70a17611e5cac16c..6c78fd6cb75bd9ad31a77780194df70c5430cbce 100644
--- a/Tests/Data/Mechanics/Linear/square_1e2_quad8_traction_top.prj
+++ b/Tests/Data/Mechanics/Linear/square_1e2_quad8_traction_top.prj
@@ -151,4 +151,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>2e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>2e-14</absolute_tolerance>
+            <relative_tolerance>1e-15</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/expected_square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/expected_square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/square_1e2_quad8_traction_topBC_pcs_0_ts_4_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/square_1e5.prj b/Tests/Data/Mechanics/Linear/square_1e5.prj
index c11f632edcf85bfa642c7ab5e5de3668b2a9eee2..d625e042bc10eb1f1ac134aa133430348312cc92 100644
--- a/Tests/Data/Mechanics/Linear/square_1e5.prj
+++ b/Tests/Data/Mechanics/Linear/square_1e5.prj
@@ -151,4 +151,18 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>square_1e5_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>1e-15</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>square_1e5_pcs_0_ts_4_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-13</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/square_1e5_expected_pcs_0_ts_4_t_1.000000.vtu b/Tests/Data/Mechanics/Linear/square_1e5_pcs_0_ts_4_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/square_1e5_expected_pcs_0_ts_4_t_1.000000.vtu
rename to Tests/Data/Mechanics/Linear/square_1e5_pcs_0_ts_4_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/two_material_gravity.prj b/Tests/Data/Mechanics/Linear/two_material_gravity.prj
index 1b5fe24b48c662eacf8b7106e1585502947e4b00..ffd79b199969fe70224b33bb849a093eae0de169 100644
--- a/Tests/Data/Mechanics/Linear/two_material_gravity.prj
+++ b/Tests/Data/Mechanics/Linear/two_material_gravity.prj
@@ -148,4 +148,24 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>two_material_gravity_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>5e-14</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>two_material_gravity_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>5e-13</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>two_material_gravity_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>epsilon</field>
+            <absolute_tolerance>5e-14</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/two_material_gravity_Emodulus.prj b/Tests/Data/Mechanics/Linear/two_material_gravity_Emodulus.prj
index 0a41d8b26cc7f4a4ba2ffd30d6464e1ec5b2bc40..4b785f9acca670469e0c254efc5908c902685539 100644
--- a/Tests/Data/Mechanics/Linear/two_material_gravity_Emodulus.prj
+++ b/Tests/Data/Mechanics/Linear/two_material_gravity_Emodulus.prj
@@ -158,4 +158,24 @@
             </petsc>
         </linear_solver>
     </linear_solvers>
+    <test_definition>
+        <vtkdiff>
+            <file>two_material_gravity_Emodulus_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>displacement</field>
+            <absolute_tolerance>5e-14</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>two_material_gravity_Emodulus_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>sigma</field>
+            <absolute_tolerance>1e-13</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+        <vtkdiff>
+            <file>two_material_gravity_Emodulus_pcs_0_ts_1_t_1.000000.vtu</file>
+            <field>epsilon</field>
+            <absolute_tolerance>5e-14</absolute_tolerance>
+            <relative_tolerance>0</relative_tolerance>
+        </vtkdiff>
+    </test_definition>
 </OpenGeoSysProject>
diff --git a/Tests/Data/Mechanics/Linear/expected_two_material_gravity_Emodulus.vtu b/Tests/Data/Mechanics/Linear/two_material_gravity_Emodulus_pcs_0_ts_1_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/expected_two_material_gravity_Emodulus.vtu
rename to Tests/Data/Mechanics/Linear/two_material_gravity_Emodulus_pcs_0_ts_1_t_1.000000.vtu
diff --git a/Tests/Data/Mechanics/Linear/expected_two_material_gravity.vtu b/Tests/Data/Mechanics/Linear/two_material_gravity_pcs_0_ts_1_t_1.000000.vtu
similarity index 100%
rename from Tests/Data/Mechanics/Linear/expected_two_material_gravity.vtu
rename to Tests/Data/Mechanics/Linear/two_material_gravity_pcs_0_ts_1_t_1.000000.vtu
diff --git a/scripts/cmake/test/OgsTest.cmake b/scripts/cmake/test/OgsTest.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..cd9d435b6a5ed9efff08b07f628bbddc15b4d9db
--- /dev/null
+++ b/scripts/cmake/test/OgsTest.cmake
@@ -0,0 +1,54 @@
+function (OgsTest)
+    if(NOT OGS_BUILD_TESTS)
+        return()
+    endif()
+    set(options LARGE)
+    set(oneValueArgs PROJECTFILE WRAPPER)
+    set(multiValueArgs XXX)
+    cmake_parse_arguments(OgsTest "${options}" "${oneValueArgs}"
+        "${multiValueArgs}" ${ARGN})
+
+    get_filename_component(OgsTest_DIR "${OgsTest_PROJECTFILE}" DIRECTORY)
+    get_filename_component(OgsTest_NAME "${OgsTest_PROJECTFILE}" NAME)
+    get_filename_component(OgsTest_NAME_WE "${OgsTest_PROJECTFILE}" NAME_WE)
+
+    if (OgsTest_UNPARSED_ARGUMENTS)
+        message(FATAL_ERROR "Unparsed argument(s) '${OgsTest_UNPARSED_ARGUMENTS}' to OgsTest call.")
+    endif()
+
+    set(OgsTest_SOURCE_DIR "${Data_SOURCE_DIR}/${OgsTest_DIR}")
+    set(OgsTest_BINARY_DIR "${Data_BINARY_DIR}/${OgsTest_DIR}")
+    file(MAKE_DIRECTORY ${OgsTest_BINARY_DIR})
+    file(TO_NATIVE_PATH "${OgsTest_BINARY_DIR}" OgsTest_BINARY_DIR_NATIVE)
+
+    set(TEST_NAME "ogs-${OgsTest_DIR}/${OgsTest_NAME_WE}")
+    # Add wrapper postfix (-mpi for mpirun).
+    if (OgsTest_WRAPPER)
+        string(REGEX MATCH "^[^ ]+" WRAPPER ${OgsTest_WRAPPER})
+        if (WRAPPER STREQUAL "mpirun")
+            set(TEST_NAME "${TEST_NAME}-mpi")
+        endif()
+    endif()
+    # Add -LARGE tag.
+    if (${OgsTest_LARGE})
+        set(TEST_NAME "${TEST_NAME}-LARGE")
+    endif()
+
+    add_test(
+        NAME ${TEST_NAME}
+        WORKING_DIRECTORY "${OgsTest_BINARY_DIR}"
+        COMMAND ogs -r "${OgsTest_SOURCE_DIR}" "${OgsTest_SOURCE_DIR}/${OgsTest_NAME}")
+    # For debugging:
+    #message("Adding test with
+    #    NAME ${TEST_NAME}
+    #    WORKING_DIRECTORY ${OgsTest_BINARY_DIR}
+    #    COMMAND ogs -r ${OgsTest_SOURCE_DIR} ${OgsTest_SOURCE_DIR}/${OgsTest_NAME}")
+
+    set_tests_properties(${TEST_NAME} PROPERTIES ENVIRONMENT
+        VTKDIFF_EXE=$<TARGET_FILE:vtkdiff>)
+
+    if(TARGET ${OgsTest_EXECUTABLE})
+        add_dependencies(ctest ${OgsTest_EXECUTABLE})
+        add_dependencies(ctest-large ${OgsTest_EXECUTABLE})
+    endif()
+endfunction()
diff --git a/scripts/cmake/test/Test.cmake b/scripts/cmake/test/Test.cmake
index 81185a61d2ed9333ce2f1193ab189974c4db0f2f..c2c82e9f3a976adb376a15eec17031db157e8d9e 100644
--- a/scripts/cmake/test/Test.cmake
+++ b/scripts/cmake/test/Test.cmake
@@ -35,6 +35,7 @@ configure_file(
 )
 
 include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/AddTest.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/OgsTest.cmake)
 
 set(NUM_CTEST_PROCESSORS 3)