diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake
index 8135a404..1d25e094 100644
--- a/CMakeLists_files.cmake
+++ b/CMakeLists_files.cmake
@@ -192,6 +192,7 @@ list (APPEND TEST_DATA_FILES
# originally generated with the command:
# find tutorials examples -name '*.c*' -printf '\t%p\n' | sort
list (APPEND EXAMPLE_SOURCE_FILES
+ examples/compute_initial_state.cpp
examples/compute_tof.cpp
examples/compute_tof_from_files.cpp
examples/import_rewrite.cpp
diff --git a/examples/compute_initial_state.cpp b/examples/compute_initial_state.cpp
new file mode 100644
index 00000000..0b11ecf1
--- /dev/null
+++ b/examples/compute_initial_state.cpp
@@ -0,0 +1,104 @@
+/*
+ Copyright 2014 SINTEF ICT, Applied Mathematics.
+
+ This file is part of the Open Porous Media project (OPM).
+
+ OPM 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.
+
+ OPM 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 OPM. If not, see .
+*/
+
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif // HAVE_CONFIG_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace
+{
+ void warnIfUnusedParams(const Opm::parameter::ParameterGroup& param)
+ {
+ if (param.anyUnused()) {
+ std::cout << "-------------------- Unused parameters: --------------------\n";
+ param.displayUsage();
+ std::cout << "----------------------------------------------------------------" << std::endl;
+ }
+ }
+
+ void outputData(const std::string& output_dir,
+ const std::string& name,
+ const std::vector& data)
+ {
+ std::ostringstream fname;
+ fname << output_dir << "/" << name;
+ boost::filesystem::path fpath = fname.str();
+ try {
+ create_directories(fpath);
+ }
+ catch (...) {
+ OPM_THROW(std::runtime_error, "Creating directories failed: " << fpath);
+ }
+ fname << "/" << "initial.txt";
+ std::ofstream file(fname.str().c_str());
+ if (!file) {
+ OPM_THROW(std::runtime_error, "Failed to open " << fname.str());
+ }
+ std::copy(data.begin(), data.end(), std::ostream_iterator(file, "\n"));
+ }
+
+
+
+} // anon namespace
+
+
+
+// ----------------- Main program -----------------
+int
+main(int argc, char** argv)
+try
+{
+ using namespace Opm;
+
+ // Setup.
+ parameter::ParameterGroup param(argc, argv, false);
+ std::cout << "--------------- Reading parameters ---------------" << std::endl;
+ const std::string deck_filename = param.get("deck_filename");
+ const double grav = param.getDefault("gravity", unit::gravity);
+ EclipseGridParser deck(deck_filename);
+ GridManager gm(deck);
+ const UnstructuredGrid& grid = *gm.c_grid();
+ BlackoilPropertiesFromDeck props(deck, grid, param);
+ warnIfUnusedParams(param);
+
+ // Initialisation.
+ BlackoilState state;
+ initStateEquil(grid, props, deck, grav, state);
+
+ // Output.
+ const std::string output_dir = param.getDefault("output_dir", "output");
+ outputData(output_dir, "pressure", state.pressure());
+ outputData(output_dir, "saturation", state.saturation());
+ outputData(output_dir, "rs", state.gasoilratio());
+ outputData(output_dir, "rv", state.rv());
+}
+catch (const std::exception& e) {
+ std::cerr << "Program threw an exception: " << e.what() << "\n";
+ throw;
+}