diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake
index 28648cbc..1a6c4bb0 100644
--- a/CMakeLists_files.cmake
+++ b/CMakeLists_files.cmake
@@ -124,6 +124,7 @@ list (APPEND MAIN_SOURCE_FILES
opm/core/transport/reorder/TransportSolverTwophaseReorder.cpp
opm/core/transport/reorder/reordersequence.cpp
opm/core/transport/reorder/tarjan.c
+ opm/core/utility/compressedToCartesian.cpp
opm/core/utility/Event.cpp
opm/core/utility/MonotCubicInterpolator.cpp
opm/core/utility/StopWatch.cpp
diff --git a/opm/core/utility/compressedToCartesian.cpp b/opm/core/utility/compressedToCartesian.cpp
new file mode 100644
index 00000000..641ee817
--- /dev/null
+++ b/opm/core/utility/compressedToCartesian.cpp
@@ -0,0 +1,48 @@
+/*
+ Copyright 2015 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 .
+*/
+
+
+#include
+#include
+
+namespace Opm
+{
+
+ // Construct explicit mapping from active/compressed to logical cartesian
+ // indices, either as given in global_cell or as { 0, 1, 2, ....} if null.
+ // \param[in] num_cells The number of active cells.
+ // \param[in] global_cell Either null, or an array of size num_cells.
+ // \return A vector containing the same data as global_cell,
+ // or the sequence { 0, 1, ... , num_cells - 1 } if
+ // global_cell was null.
+ std::vector compressedToCartesian(const int num_cells,
+ const int* global_cell)
+ {
+ std::vector retval;
+ if (global_cell) {
+ retval.assign(global_cell, global_cell + num_cells);
+ } else {
+ retval.resize(num_cells);
+ std::iota(retval.begin(), retval.end(), 0);
+ }
+ return retval;
+ }
+
+
+} // namespace Opm
diff --git a/opm/core/utility/compressedToCartesian.hpp b/opm/core/utility/compressedToCartesian.hpp
index 9b84e2fc..83a5ebc1 100644
--- a/opm/core/utility/compressedToCartesian.hpp
+++ b/opm/core/utility/compressedToCartesian.hpp
@@ -33,20 +33,8 @@ namespace Opm
// \return A vector containing the same data as global_cell,
// or the sequence { 0, 1, ... , num_cells - 1 } if
// global_cell was null.
- inline
std::vector compressedToCartesian(const int num_cells,
- const int* global_cell)
- {
- std::vector retval;
- if (global_cell) {
- retval.assign(global_cell, global_cell + num_cells);
- } else {
- retval.resize(num_cells);
- std::iota(retval.begin(), retval.end(), 0);
- }
- return retval;
- }
-
+ const int* global_cell);
} // namespace Opm