From 8fac48c5df1cacfb4c9ab5fee9920f9027a34900 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Tue, 21 Apr 2020 20:10:25 +0200
Subject: [PATCH] Change include management.

Now subdirectory must be specified.
The main reason for this change, is that this explicitely sets where
the file is. Moreover, it "simplifies" `CMakeLists.txt` files.
---
 CMakeLists.txt                             | 16 ++--------
 src/CMakeLists.txt                         |  7 +----
 src/algebra/CRSMatrix.hpp                  |  8 ++---
 src/algebra/SparseMatrixDescriptor.hpp     |  2 +-
 src/algebra/TinyMatrix.hpp                 |  9 +++---
 src/algebra/TinyVector.hpp                 |  6 ++--
 src/algebra/Vector.hpp                     |  8 ++---
 src/language/CMakeLists.txt                |  5 ----
 src/language/PugsParser.cpp                |  6 ++--
 src/main.cpp                               | 32 ++++++++++----------
 src/mesh/CMakeLists.txt                    |  5 ----
 src/mesh/CellType.hpp                      |  3 +-
 src/mesh/Connectivity.cpp                  |  8 ++---
 src/mesh/Connectivity.hpp                  | 34 +++++++++++-----------
 src/mesh/ConnectivityComputer.cpp          |  7 ++---
 src/mesh/ConnectivityComputer.hpp          |  4 +--
 src/mesh/ConnectivityDescriptor.hpp        |  7 +++--
 src/mesh/ConnectivityDispatcher.cpp        |  6 ++--
 src/mesh/ConnectivityDispatcher.hpp        |  9 +++---
 src/mesh/ConnectivityMatrix.hpp            |  5 ++--
 src/mesh/GmshReader.cpp                    | 32 +++++++++-----------
 src/mesh/GmshReader.hpp                    |  8 ++---
 src/mesh/IConnectivity.hpp                 |  7 +++--
 src/mesh/ItemId.hpp                        |  5 ++--
 src/mesh/ItemOfItemType.hpp                |  2 +-
 src/mesh/ItemToItemMatrix.hpp              |  8 ++---
 src/mesh/ItemType.hpp                      |  2 ++
 src/mesh/ItemValue.hpp                     | 11 ++++---
 src/mesh/ItemValueUtils.hpp                | 11 ++++---
 src/mesh/Mesh.hpp                          |  6 ++--
 src/mesh/MeshData.hpp                      |  8 ++---
 src/mesh/MeshNodeBoundary.hpp              | 20 ++++++-------
 src/mesh/RefItemList.hpp                   |  7 +++--
 src/mesh/SubItemValuePerItem.hpp           | 14 ++++-----
 src/mesh/Synchronizer.hpp                  |  6 ++--
 src/mesh/SynchronizerManager.cpp           |  7 ++---
 src/mesh/SynchronizerManager.hpp           |  4 +--
 src/output/OutputNamedItemValueSet.hpp     |  7 +++--
 src/output/VTKWriter.hpp                   | 13 +++++----
 src/scheme/AcousticSolver.hpp              | 28 +++++++++---------
 src/scheme/BlockPerfectGas.hpp             |  2 +-
 src/scheme/BoundaryCondition.hpp           | 10 +++----
 src/scheme/BoundaryConditionDescriptor.hpp |  3 +-
 src/scheme/FiniteVolumesEulerUnknowns.hpp  |  4 +--
 src/utils/Array.hpp                        |  6 ++--
 src/utils/ArrayUtils.hpp                   |  6 ++--
 src/utils/BacktraceManager.cpp             |  2 +-
 src/utils/BuildInfo.cpp                    |  6 ++--
 src/utils/CMakeLists.txt                   |  7 -----
 src/utils/CSRGraph.hpp                     |  2 +-
 src/utils/CastArray.hpp                    |  7 ++---
 src/utils/ConsoleManager.cpp               |  2 +-
 src/utils/Exceptions.cpp                   |  5 ++--
 src/utils/FPEManager.cpp                   |  7 +++--
 src/utils/Messenger.cpp                    |  2 +-
 src/utils/Messenger.hpp                    | 18 ++++++------
 src/utils/Partitioner.cpp                  |  9 +++---
 src/utils/Partitioner.hpp                  |  2 +-
 src/utils/PugsAssert.hpp                   |  2 +-
 src/utils/PugsUtils.cpp                    | 16 +++++-----
 src/utils/PugsUtils.hpp                    |  2 +-
 src/utils/RevisionInfo.cpp                 |  7 +++--
 src/utils/SignalManager.cpp                | 18 +++++-------
 tests/CMakeLists.txt                       |  5 +++-
 tests/mpi_test_Messenger.cpp               |  7 ++---
 tests/mpi_test_main.cpp                    |  3 +-
 tests/test_Array.cpp                       |  6 ++--
 tests/test_ArrayUtils.cpp                  | 10 +++----
 tests/test_BiCGStab.cpp                    |  4 +--
 tests/test_CRSMatrix.cpp                   |  2 +-
 tests/test_ItemType.cpp                    |  4 +--
 tests/test_PCG.cpp                         |  4 +--
 tests/test_PugsAssert.cpp                  |  3 +-
 tests/test_RevisionInfo.cpp                |  6 ++--
 tests/test_SparseMatrixDescriptor.cpp      |  5 ++--
 tests/test_TinyMatrix.cpp                  |  8 +++--
 tests/test_TinyVector.cpp                  |  5 ++--
 tests/test_Vector.cpp                      |  5 ++--
 78 files changed, 301 insertions(+), 314 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 62e336341..16a82546d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -258,21 +258,11 @@ include_directories(${PUGS_SOURCE_DIR}/packages/CLI11/include)
 include_directories(${PUGS_SOURCE_DIR}/packages/PEGTL/include/tao)
 
 # Pugs src
-add_subdirectory(src)
-
-include_directories(src)
-include_directories(src/algebra)
-include_directories(src/language)
-include_directories(src/mesh)
-include_directories(src/output)
-include_directories(src/scheme)
-include_directories(src/utils)
-
-# Pugs generated sources
-include_directories(${PUGS_BINARY_DIR}/src/utils)
+add_subdirectory(${PUGS_SOURCE_DIR}/src)
+include_directories(${PUGS_SOURCE_DIR}/src)
+include_directories(${PUGS_BINARY_DIR}/src)
 
 # Pugs tests
-
 set(CATCH_MODULE_PATH "${PUGS_SOURCE_DIR}/packages/Catch2")
 include("${CATCH_MODULE_PATH}/contrib/ParseAndAddCatchTests.cmake")
 add_subdirectory("${CATCH_MODULE_PATH}")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7557831db..42d75ad7e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,23 +5,18 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR})
 
 # Pugs utils
 add_subdirectory(utils)
-include_directories(utils)
 
 # Pugs language
 add_subdirectory(language)
-include_directories(language)
 
 # Pugs algebra
 #add_subdirectory(algebra)
-include_directories(algebra)
 
 # Pugs mesh
 add_subdirectory(mesh)
-include_directories(mesh)
 
 # Pugs mesh
 #add_subdirectory(mesh)
-include_directories(scheme)
 
 # Pugs output
-include_directories(output)
+#add_subdirectory(output)
diff --git a/src/algebra/CRSMatrix.hpp b/src/algebra/CRSMatrix.hpp
index 740343cd6..97a0a8a8e 100644
--- a/src/algebra/CRSMatrix.hpp
+++ b/src/algebra/CRSMatrix.hpp
@@ -1,13 +1,13 @@
 #ifndef CRS_MATRIX_HPP
 #define CRS_MATRIX_HPP
 
-#include <Array.hpp>
 #include <Kokkos_StaticCrsGraph.hpp>
-#include <PugsAssert.hpp>
 
-#include <SparseMatrixDescriptor.hpp>
+#include <utils/Array.hpp>
+#include <utils/PugsAssert.hpp>
 
-#include <Vector.hpp>
+#include <algebra/SparseMatrixDescriptor.hpp>
+#include <algebra/Vector.hpp>
 
 #include <iostream>
 
diff --git a/src/algebra/SparseMatrixDescriptor.hpp b/src/algebra/SparseMatrixDescriptor.hpp
index badfb9630..3533a4017 100644
--- a/src/algebra/SparseMatrixDescriptor.hpp
+++ b/src/algebra/SparseMatrixDescriptor.hpp
@@ -1,7 +1,7 @@
 #ifndef SPARSE_MATRIX_DESCRIPTOR_HPP
 #define SPARSE_MATRIX_DESCRIPTOR_HPP
 
-#include <Array.hpp>
+#include <utils/Array.hpp>
 
 #include <map>
 #include <type_traits>
diff --git a/src/algebra/TinyMatrix.hpp b/src/algebra/TinyMatrix.hpp
index 7a67fe0c1..6cff7777f 100644
--- a/src/algebra/TinyMatrix.hpp
+++ b/src/algebra/TinyMatrix.hpp
@@ -1,11 +1,12 @@
 #ifndef TINY_MATRIX_HPP
 #define TINY_MATRIX_HPP
 
-#include <PugsAssert.hpp>
-#include <PugsMacros.hpp>
+#include <utils/PugsAssert.hpp>
+#include <utils/PugsMacros.hpp>
 
-#include <TinyVector.hpp>
-#include <Types.hpp>
+#include <utils/Types.hpp>
+
+#include <algebra/TinyVector.hpp>
 
 #include <iostream>
 
diff --git a/src/algebra/TinyVector.hpp b/src/algebra/TinyVector.hpp
index 187c405ee..a999ec7bc 100644
--- a/src/algebra/TinyVector.hpp
+++ b/src/algebra/TinyVector.hpp
@@ -3,10 +3,10 @@
 
 #include <iostream>
 
-#include <PugsAssert.hpp>
-#include <PugsMacros.hpp>
+#include <utils/PugsAssert.hpp>
+#include <utils/PugsMacros.hpp>
 
-#include <Types.hpp>
+#include <utils/Types.hpp>
 
 #include <cmath>
 
diff --git a/src/algebra/Vector.hpp b/src/algebra/Vector.hpp
index 43865dae1..ac48d969f 100644
--- a/src/algebra/Vector.hpp
+++ b/src/algebra/Vector.hpp
@@ -1,12 +1,12 @@
 #ifndef VECTOR_HPP
 #define VECTOR_HPP
 
-#include <PugsMacros.hpp>
-#include <PugsUtils.hpp>
+#include <utils/PugsMacros.hpp>
+#include <utils/PugsUtils.hpp>
 
-#include <PugsAssert.hpp>
+#include <utils/PugsAssert.hpp>
 
-#include <Array.hpp>
+#include <utils/Array.hpp>
 
 template <typename DataType>
 class Vector   // LCOV_EXCL_LINE
diff --git a/src/language/CMakeLists.txt b/src/language/CMakeLists.txt
index 2c7d8dd1f..b01587e45 100644
--- a/src/language/CMakeLists.txt
+++ b/src/language/CMakeLists.txt
@@ -1,14 +1,9 @@
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-
 # ------------------- Source files --------------------
 
 add_library(
   PugsLanguage
   PugsParser.cpp)
 
-#include_directories(${PUGS_SOURCE_DIR}/utils)
-
 # Additional dependencies
 #add_dependencies(PugsMesh)
 
diff --git a/src/language/PugsParser.cpp b/src/language/PugsParser.cpp
index 6efab91fb..a413c3fa7 100644
--- a/src/language/PugsParser.cpp
+++ b/src/language/PugsParser.cpp
@@ -1,12 +1,12 @@
-#include <PugsParser.hpp>
-
-#include <iostream>
+#include <language/PugsParser.hpp>
 
 #include <rang.hpp>
 
 #include <pegtl.hpp>
 #include <pegtl/analyze.hpp>
 
+#include <iostream>
+
 using namespace TAO_PEGTL_NAMESPACE;
 
 namespace language
diff --git a/src/main.cpp b/src/main.cpp
index 346d6ed62..e48f74965 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,29 +1,29 @@
-#include <PugsUtils.hpp>
+#include <utils/PugsUtils.hpp>
 
-#include <rang.hpp>
+#include <mesh/Connectivity.hpp>
+#include <mesh/Mesh.hpp>
 
-#include <Connectivity.hpp>
+#include <scheme/AcousticSolver.hpp>
+#include <scheme/BoundaryCondition.hpp>
 
-#include <AcousticSolver.hpp>
-#include <BoundaryCondition.hpp>
-#include <Mesh.hpp>
+#include <output/VTKWriter.hpp>
 
-#include <VTKWriter.hpp>
+#include <utils/Exceptions.hpp>
+#include <utils/Timer.hpp>
 
-#include <Exceptions.hpp>
-#include <Timer.hpp>
+#include <algebra/TinyMatrix.hpp>
+#include <algebra/TinyVector.hpp>
 
-#include <TinyMatrix.hpp>
-#include <TinyVector.hpp>
+#include <scheme/BoundaryConditionDescriptor.hpp>
 
-#include <BoundaryConditionDescriptor.hpp>
+#include <mesh/MeshNodeBoundary.hpp>
 
-#include <MeshNodeBoundary.hpp>
+#include <language/PugsParser.hpp>
+#include <mesh/GmshReader.hpp>
 
-#include <GmshReader.hpp>
-#include <PugsParser.hpp>
+#include <mesh/SynchronizerManager.hpp>
 
-#include <SynchronizerManager.hpp>
+#include <rang.hpp>
 
 #include <iostream>
 
diff --git a/src/mesh/CMakeLists.txt b/src/mesh/CMakeLists.txt
index ec94fd4b7..73d686fb2 100644
--- a/src/mesh/CMakeLists.txt
+++ b/src/mesh/CMakeLists.txt
@@ -1,6 +1,3 @@
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-
 # ------------------- Source files --------------------
 
 add_library(
@@ -11,8 +8,6 @@ add_library(
   ConnectivityDispatcher.cpp
   SynchronizerManager.cpp)
 
-include_directories(${PUGS_BINARY_DIR}/src/utils)
-
 # Additional dependencies
 #add_dependencies(PugsMesh)
 
diff --git a/src/mesh/CellType.hpp b/src/mesh/CellType.hpp
index c0949ffbe..d0f6986d6 100644
--- a/src/mesh/CellType.hpp
+++ b/src/mesh/CellType.hpp
@@ -1,7 +1,8 @@
 #ifndef CELL_TYPE_HPP
 #define CELL_TYPE_HPP
 
-#include <PugsMacros.hpp>
+#include <utils/PugsMacros.hpp>
+
 #include <string_view>
 
 enum class CellType : unsigned short
diff --git a/src/mesh/Connectivity.cpp b/src/mesh/Connectivity.cpp
index 632726a16..dc51fe75a 100644
--- a/src/mesh/Connectivity.cpp
+++ b/src/mesh/Connectivity.cpp
@@ -1,9 +1,9 @@
-#include <Connectivity.hpp>
-#include <map>
+#include <mesh/Connectivity.hpp>
 
-#include <Messenger.hpp>
+#include <mesh/ConnectivityDescriptor.hpp>
+#include <utils/Messenger.hpp>
 
-#include <ConnectivityDescriptor.hpp>
+#include <map>
 
 template <size_t Dimension>
 Connectivity<Dimension>::Connectivity()
diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index 6b7e31a40..3c319b053 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -1,37 +1,37 @@
 #ifndef CONNECTIVITY_HPP
 #define CONNECTIVITY_HPP
 
-#include <PugsAssert.hpp>
-#include <PugsMacros.hpp>
+#include <utils/PugsAssert.hpp>
+#include <utils/PugsMacros.hpp>
 
-#include <PugsUtils.hpp>
+#include <utils/PugsUtils.hpp>
 
-#include <PugsTraits.hpp>
+#include <utils/PugsTraits.hpp>
 
-#include <TinyVector.hpp>
+#include <algebra/TinyVector.hpp>
 
-#include <ItemValue.hpp>
+#include <mesh/ItemValue.hpp>
 
-#include <IConnectivity.hpp>
+#include <mesh/IConnectivity.hpp>
 
-#include <ConnectivityMatrix.hpp>
-#include <ItemToItemMatrix.hpp>
+#include <mesh/ConnectivityMatrix.hpp>
+#include <mesh/ItemToItemMatrix.hpp>
 
-#include <ConnectivityComputer.hpp>
-#include <SubItemValuePerItem.hpp>
+#include <mesh/ConnectivityComputer.hpp>
+#include <mesh/SubItemValuePerItem.hpp>
 
 #include <algorithm>
 #include <vector>
 
-#include <CellType.hpp>
+#include <mesh/CellType.hpp>
 
-#include <CSRGraph.hpp>
+#include <utils/CSRGraph.hpp>
 
-#include <ItemType.hpp>
-#include <RefId.hpp>
-#include <RefItemList.hpp>
+#include <mesh/ItemType.hpp>
+#include <mesh/RefId.hpp>
+#include <mesh/RefItemList.hpp>
 
-#include <SynchronizerManager.hpp>
+#include <mesh/SynchronizerManager.hpp>
 
 #include <iostream>
 #include <set>
diff --git a/src/mesh/ConnectivityComputer.cpp b/src/mesh/ConnectivityComputer.cpp
index 8e1d5d526..a47b49116 100644
--- a/src/mesh/ConnectivityComputer.cpp
+++ b/src/mesh/ConnectivityComputer.cpp
@@ -1,8 +1,7 @@
-#include <Connectivity.hpp>
+#include <mesh/Connectivity.hpp>
 
-#include <ConnectivityComputer.hpp>
-
-#include <Exceptions.hpp>
+#include <mesh/ConnectivityComputer.hpp>
+#include <utils/Exceptions.hpp>
 
 #include <iostream>
 #include <map>
diff --git a/src/mesh/ConnectivityComputer.hpp b/src/mesh/ConnectivityComputer.hpp
index b56b1895e..c6e2a569b 100644
--- a/src/mesh/ConnectivityComputer.hpp
+++ b/src/mesh/ConnectivityComputer.hpp
@@ -1,8 +1,8 @@
 #ifndef CONNECTIVITY_COMPUTER_HPP
 #define CONNECTIVITY_COMPUTER_HPP
 
-#include <ConnectivityMatrix.hpp>
-#include <SubItemValuePerItem.hpp>
+#include <mesh/ConnectivityMatrix.hpp>
+#include <mesh/SubItemValuePerItem.hpp>
 
 class ConnectivityComputer
 {
diff --git a/src/mesh/ConnectivityDescriptor.hpp b/src/mesh/ConnectivityDescriptor.hpp
index 8b190be0c..352a664ea 100644
--- a/src/mesh/ConnectivityDescriptor.hpp
+++ b/src/mesh/ConnectivityDescriptor.hpp
@@ -1,9 +1,10 @@
 #ifndef CONNECTIVITY_DESCRIPTOR_HPP
 #define CONNECTIVITY_DESCRIPTOR_HPP
 
-#include <ItemOfItemType.hpp>
-#include <PugsTraits.hpp>
-#include <RefItemList.hpp>
+#include <mesh/ItemOfItemType.hpp>
+#include <mesh/RefItemList.hpp>
+
+#include <utils/PugsTraits.hpp>
 
 #include <vector>
 
diff --git a/src/mesh/ConnectivityDispatcher.cpp b/src/mesh/ConnectivityDispatcher.cpp
index 0136c264c..ebba8dbe1 100644
--- a/src/mesh/ConnectivityDispatcher.cpp
+++ b/src/mesh/ConnectivityDispatcher.cpp
@@ -1,7 +1,7 @@
-#include <ConnectivityDispatcher.hpp>
-#include <Partitioner.hpp>
+#include <mesh/ConnectivityDispatcher.hpp>
+#include <mesh/ItemOfItemType.hpp>
 
-#include <ItemOfItemType.hpp>
+#include <utils/Partitioner.hpp>
 
 #include <iostream>
 #include <unordered_map>
diff --git a/src/mesh/ConnectivityDispatcher.hpp b/src/mesh/ConnectivityDispatcher.hpp
index 0e28f02e8..3de9c1c59 100644
--- a/src/mesh/ConnectivityDispatcher.hpp
+++ b/src/mesh/ConnectivityDispatcher.hpp
@@ -1,11 +1,12 @@
 #ifndef CONNECTIVITY_DISPATCHER_HPP
 #define CONNECTIVITY_DISPATCHER_HPP
 
-#include <ItemValue.hpp>
-#include <ItemValueUtils.hpp>
-#include <Mesh.hpp>
+#include <mesh/ItemValue.hpp>
+#include <mesh/ItemValueUtils.hpp>
+#include <mesh/Mesh.hpp>
+
+#include <mesh/ConnectivityDescriptor.hpp>
 
-#include <ConnectivityDescriptor.hpp>
 #include <unordered_map>
 
 template <int Dimension>
diff --git a/src/mesh/ConnectivityMatrix.hpp b/src/mesh/ConnectivityMatrix.hpp
index 0ddb21a96..bef24bde5 100644
--- a/src/mesh/ConnectivityMatrix.hpp
+++ b/src/mesh/ConnectivityMatrix.hpp
@@ -1,9 +1,10 @@
 #ifndef CONNECTIVITY_MATRIX_HPP
 #define CONNECTIVITY_MATRIX_HPP
 
-#include <Array.hpp>
+#include <utils/Array.hpp>
+#include <utils/PugsUtils.hpp>
+
 #include <Kokkos_StaticCrsGraph.hpp>
-#include <PugsUtils.hpp>
 
 class ConnectivityMatrix
 {
diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp
index 25a224caf..cf1706c9c 100644
--- a/src/mesh/GmshReader.cpp
+++ b/src/mesh/GmshReader.cpp
@@ -1,29 +1,25 @@
-#include <GmshReader.hpp>
-#include <PugsMacros.hpp>
+#include <mesh/GmshReader.hpp>
 
-#include <fstream>
-#include <iostream>
-#include <rang.hpp>
-#include <set>
-
-#include <CellType.hpp>
-#include <Connectivity.hpp>
+#include <utils/PugsMacros.hpp>
 
-#include <Mesh.hpp>
-#include <MeshData.hpp>
+#include <mesh/CellType.hpp>
+#include <mesh/Connectivity.hpp>
+#include <mesh/ConnectivityDispatcher.hpp>
+#include <mesh/ItemValueUtils.hpp>
+#include <mesh/Mesh.hpp>
+#include <mesh/MeshData.hpp>
+#include <mesh/RefItemList.hpp>
 
-#include <Messenger.hpp>
-#include <RefItemList.hpp>
+#include <utils/ArrayUtils.hpp>
 
-#include <ArrayUtils.hpp>
-#include <ItemValueUtils.hpp>
+#include <utils/Exceptions.hpp>
 
-#include <ConnectivityDispatcher.hpp>
-
-#include <Exceptions.hpp>
+#include <rang.hpp>
 
+#include <fstream>
 #include <iomanip>
 #include <iostream>
+#include <set>
 #include <sstream>
 
 #include <map>
diff --git a/src/mesh/GmshReader.hpp b/src/mesh/GmshReader.hpp
index d6d5f3887..3501cafdf 100644
--- a/src/mesh/GmshReader.hpp
+++ b/src/mesh/GmshReader.hpp
@@ -1,12 +1,12 @@
 #ifndef GMSH_READER_HPP
 #define GMSH_READER_HPP
 
-#include <Array.hpp>
-#include <TinyVector.hpp>
+#include <algebra/TinyVector.hpp>
 
-#include <Mesh.hpp>
+#include <utils/Array.hpp>
 
-#include <RefId.hpp>
+#include <mesh/Mesh.hpp>
+#include <mesh/RefId.hpp>
 
 #include <array>
 #include <fstream>
diff --git a/src/mesh/IConnectivity.hpp b/src/mesh/IConnectivity.hpp
index d548be0a4..76a85e0e3 100644
--- a/src/mesh/IConnectivity.hpp
+++ b/src/mesh/IConnectivity.hpp
@@ -1,9 +1,10 @@
 #ifndef ICONNECTIVITY_HPP
 #define ICONNECTIVITY_HPP
 
-#include <ConnectivityMatrix.hpp>
-#include <ItemOfItemType.hpp>
-#include <ItemType.hpp>
+#include <mesh/ConnectivityMatrix.hpp>
+#include <mesh/ItemOfItemType.hpp>
+#include <mesh/ItemType.hpp>
+
 #include <memory>
 
 class IConnectivity : public std::enable_shared_from_this<IConnectivity>
diff --git a/src/mesh/ItemId.hpp b/src/mesh/ItemId.hpp
index de7790668..8863c1a28 100644
--- a/src/mesh/ItemId.hpp
+++ b/src/mesh/ItemId.hpp
@@ -1,8 +1,9 @@
 #ifndef ITEM_ID_HPP
 #define ITEM_ID_HPP
 
-#include <ItemType.hpp>
-#include <PugsMacros.hpp>
+#include <mesh/ItemType.hpp>
+
+#include <utils/PugsMacros.hpp>
 
 template <ItemType item_type>
 class ItemIdT
diff --git a/src/mesh/ItemOfItemType.hpp b/src/mesh/ItemOfItemType.hpp
index 9921eea68..8d27a599b 100644
--- a/src/mesh/ItemOfItemType.hpp
+++ b/src/mesh/ItemOfItemType.hpp
@@ -1,7 +1,7 @@
 #ifndef ITEM_OF_ITEM_TYPE_HPP
 #define ITEM_OF_ITEM_TYPE_HPP
 
-#include <ItemType.hpp>
+#include <mesh/ItemType.hpp>
 
 template <ItemType sub_item_t, ItemType item_t>
 struct ItemOfItemType
diff --git a/src/mesh/ItemToItemMatrix.hpp b/src/mesh/ItemToItemMatrix.hpp
index 04b8a7b74..a3fc307e0 100644
--- a/src/mesh/ItemToItemMatrix.hpp
+++ b/src/mesh/ItemToItemMatrix.hpp
@@ -1,11 +1,11 @@
 #ifndef ITEM_TO_ITEM_MATRIX_HPP
 #define ITEM_TO_ITEM_MATRIX_HPP
 
-#include <ItemId.hpp>
-#include <ItemType.hpp>
+#include <mesh/ConnectivityMatrix.hpp>
+#include <mesh/ItemId.hpp>
+#include <mesh/ItemType.hpp>
 
-#include <ConnectivityMatrix.hpp>
-#include <PugsUtils.hpp>
+#include <utils/PugsUtils.hpp>
 
 template <ItemType SourceItemType, ItemType TargetItemType>
 class ItemToItemMatrix
diff --git a/src/mesh/ItemType.hpp b/src/mesh/ItemType.hpp
index 1f4cbbd74..21aebfc5d 100644
--- a/src/mesh/ItemType.hpp
+++ b/src/mesh/ItemType.hpp
@@ -1,6 +1,8 @@
 #ifndef ITEM_TYPE_HPP
 #define ITEM_TYPE_HPP
 
+#include <utils/PugsMacros.hpp>
+
 #include <limits>
 #include <string>
 #include <utility>
diff --git a/src/mesh/ItemValue.hpp b/src/mesh/ItemValue.hpp
index 81301f7a3..eb9f23113 100644
--- a/src/mesh/ItemValue.hpp
+++ b/src/mesh/ItemValue.hpp
@@ -1,14 +1,13 @@
 #ifndef ITEM_VALUE_HPP
 #define ITEM_VALUE_HPP
 
-#include <PugsAssert.hpp>
+#include <utils/Array.hpp>
+#include <utils/PugsAssert.hpp>
 
-#include <Array.hpp>
+#include <mesh/IConnectivity.hpp>
+#include <mesh/ItemId.hpp>
+#include <mesh/ItemType.hpp>
 
-#include <ItemId.hpp>
-#include <ItemType.hpp>
-
-#include <IConnectivity.hpp>
 #include <memory>
 
 template <typename DataType, ItemType item_type, typename ConnectivityPtr = std::shared_ptr<const IConnectivity>>
diff --git a/src/mesh/ItemValueUtils.hpp b/src/mesh/ItemValueUtils.hpp
index 666d4a0e9..b9570fc9c 100644
--- a/src/mesh/ItemValueUtils.hpp
+++ b/src/mesh/ItemValueUtils.hpp
@@ -1,13 +1,12 @@
 #ifndef ITEM_VALUE_UTILS_HPP
 #define ITEM_VALUE_UTILS_HPP
 
-#include <ItemValue.hpp>
-#include <Messenger.hpp>
+#include <utils/Messenger.hpp>
 
-#include <Connectivity.hpp>
-
-#include <Synchronizer.hpp>
-#include <SynchronizerManager.hpp>
+#include <mesh/Connectivity.hpp>
+#include <mesh/ItemValue.hpp>
+#include <mesh/Synchronizer.hpp>
+#include <mesh/SynchronizerManager.hpp>
 
 #include <iostream>
 
diff --git a/src/mesh/Mesh.hpp b/src/mesh/Mesh.hpp
index a8e941100..afafc7a21 100644
--- a/src/mesh/Mesh.hpp
+++ b/src/mesh/Mesh.hpp
@@ -1,10 +1,10 @@
 #ifndef MESH_HPP
 #define MESH_HPP
 
-#include <ItemValue.hpp>
-#include <TinyVector.hpp>
+#include <algebra/TinyVector.hpp>
 
-#include <CSRGraph.hpp>
+#include <mesh/ItemValue.hpp>
+#include <utils/CSRGraph.hpp>
 
 #include <memory>
 
diff --git a/src/mesh/MeshData.hpp b/src/mesh/MeshData.hpp
index 17a1ac4c3..2a1406c44 100644
--- a/src/mesh/MeshData.hpp
+++ b/src/mesh/MeshData.hpp
@@ -1,11 +1,11 @@
 #ifndef MESH_DATA_HPP
 #define MESH_DATA_HPP
 
-#include <PugsUtils.hpp>
-#include <TinyVector.hpp>
+#include <algebra/TinyVector.hpp>
+#include <utils/PugsUtils.hpp>
 
-#include <ItemValue.hpp>
-#include <SubItemValuePerItem.hpp>
+#include <mesh/ItemValue.hpp>
+#include <mesh/SubItemValuePerItem.hpp>
 
 #include <map>
 
diff --git a/src/mesh/MeshNodeBoundary.hpp b/src/mesh/MeshNodeBoundary.hpp
index fdb771eb5..8a3d4c913 100644
--- a/src/mesh/MeshNodeBoundary.hpp
+++ b/src/mesh/MeshNodeBoundary.hpp
@@ -1,20 +1,20 @@
 #ifndef MESH_NODE_BOUNDARY_HPP
 #define MESH_NODE_BOUNDARY_HPP
 
-#include <Array.hpp>
-#include <ItemValue.hpp>
+#include <utils/Array.hpp>
 
-#include <Kokkos_Vector.hpp>
-#include <TinyVector.hpp>
+#include <algebra/TinyVector.hpp>
 
-#include <RefItemList.hpp>
+#include <mesh/ItemValue.hpp>
+#include <mesh/RefItemList.hpp>
 
-#include <ConnectivityMatrix.hpp>
-#include <IConnectivity.hpp>
-#include <iostream>
+#include <mesh/ConnectivityMatrix.hpp>
+#include <mesh/IConnectivity.hpp>
 
-#include <Exceptions.hpp>
-#include <Messenger.hpp>
+#include <utils/Exceptions.hpp>
+#include <utils/Messenger.hpp>
+
+#include <Kokkos_Vector.hpp>
 
 #include <iostream>
 
diff --git a/src/mesh/RefItemList.hpp b/src/mesh/RefItemList.hpp
index a3b9bb71f..594b5ad25 100644
--- a/src/mesh/RefItemList.hpp
+++ b/src/mesh/RefItemList.hpp
@@ -1,9 +1,10 @@
 #ifndef REF_ITEM_LIST_HPP
 #define REF_ITEM_LIST_HPP
 
-#include <Array.hpp>
-#include <ItemId.hpp>
-#include <RefId.hpp>
+#include <utils/Array.hpp>
+
+#include <mesh/ItemId.hpp>
+#include <mesh/RefId.hpp>
 
 template <ItemType item_type>
 class RefItemList
diff --git a/src/mesh/SubItemValuePerItem.hpp b/src/mesh/SubItemValuePerItem.hpp
index 132a0fb83..d09af2536 100644
--- a/src/mesh/SubItemValuePerItem.hpp
+++ b/src/mesh/SubItemValuePerItem.hpp
@@ -3,17 +3,17 @@
 
 #include <Kokkos_StaticCrsGraph.hpp>
 
-#include <PugsAssert.hpp>
+#include <utils/PugsAssert.hpp>
 
-#include <Array.hpp>
+#include <utils/Array.hpp>
 
-#include <ItemId.hpp>
+#include <mesh/ItemId.hpp>
 
-#include <ConnectivityMatrix.hpp>
-#include <IConnectivity.hpp>
+#include <mesh/ConnectivityMatrix.hpp>
+#include <mesh/IConnectivity.hpp>
 
-#include <ItemOfItemType.hpp>
-#include <ItemType.hpp>
+#include <mesh/ItemOfItemType.hpp>
+#include <mesh/ItemType.hpp>
 
 #include <memory>
 
diff --git a/src/mesh/Synchronizer.hpp b/src/mesh/Synchronizer.hpp
index 7c2f97a6c..69b7c8b15 100644
--- a/src/mesh/Synchronizer.hpp
+++ b/src/mesh/Synchronizer.hpp
@@ -1,8 +1,10 @@
 #ifndef SYNCHRONIZER_HPP
 #define SYNCHRONIZER_HPP
 
-#include <Connectivity.hpp>
-#include <ItemValue.hpp>
+#include <mesh/Connectivity.hpp>
+#include <mesh/ItemValue.hpp>
+
+#include <utils/Messenger.hpp>
 
 #include <iostream>
 #include <map>
diff --git a/src/mesh/SynchronizerManager.cpp b/src/mesh/SynchronizerManager.cpp
index b02ae8300..8e2346c79 100644
--- a/src/mesh/SynchronizerManager.cpp
+++ b/src/mesh/SynchronizerManager.cpp
@@ -1,8 +1,7 @@
-#include <PugsAssert.hpp>
-#include <SynchronizerManager.hpp>
+#include <utils/PugsAssert.hpp>
 
-#include <Messenger.hpp>
-#include <Synchronizer.hpp>
+#include <mesh/Synchronizer.hpp>
+#include <mesh/SynchronizerManager.hpp>
 
 SynchronizerManager* SynchronizerManager::m_instance{nullptr};
 
diff --git a/src/mesh/SynchronizerManager.hpp b/src/mesh/SynchronizerManager.hpp
index da01e9845..e2f89cbda 100644
--- a/src/mesh/SynchronizerManager.hpp
+++ b/src/mesh/SynchronizerManager.hpp
@@ -1,8 +1,8 @@
 #ifndef SYNCHRONIZER_MANAGER_HPP
 #define SYNCHRONIZER_MANAGER_HPP
 
-#include <PugsAssert.hpp>
-#include <PugsMacros.hpp>
+#include <utils/PugsAssert.hpp>
+#include <utils/PugsMacros.hpp>
 
 #include <map>
 #include <memory>
diff --git a/src/output/OutputNamedItemValueSet.hpp b/src/output/OutputNamedItemValueSet.hpp
index a893ab31c..7dcc23e3d 100644
--- a/src/output/OutputNamedItemValueSet.hpp
+++ b/src/output/OutputNamedItemValueSet.hpp
@@ -1,9 +1,10 @@
 #ifndef OUTPUT_NAMED_ITEM_VALUE_SET_HPP
 #define OUTPUT_NAMED_ITEM_VALUE_SET_HPP
 
-#include <ItemValue.hpp>
-#include <TinyMatrix.hpp>
-#include <TinyVector.hpp>
+#include <mesh/ItemValue.hpp>
+
+#include <algebra/TinyMatrix.hpp>
+#include <algebra/TinyVector.hpp>
 
 #include <map>
 #include <string>
diff --git a/src/output/VTKWriter.hpp b/src/output/VTKWriter.hpp
index c48da737a..17cb61ebc 100644
--- a/src/output/VTKWriter.hpp
+++ b/src/output/VTKWriter.hpp
@@ -1,14 +1,15 @@
 #ifndef VTK_WRITER_HPP
 #define VTK_WRITER_HPP
 
-#include <IConnectivity.hpp>
-#include <TinyVector.hpp>
+#include <mesh/IConnectivity.hpp>
 
-#include <ItemValue.hpp>
-#include <Messenger.hpp>
-#include <OutputNamedItemValueSet.hpp>
+#include <algebra/TinyVector.hpp>
 
-#include <Exceptions.hpp>
+#include <mesh/ItemValue.hpp>
+#include <output/OutputNamedItemValueSet.hpp>
+#include <utils/Messenger.hpp>
+
+#include <utils/Exceptions.hpp>
 
 #include <fstream>
 #include <iomanip>
diff --git a/src/scheme/AcousticSolver.hpp b/src/scheme/AcousticSolver.hpp
index 3fb130013..1310ddc4c 100644
--- a/src/scheme/AcousticSolver.hpp
+++ b/src/scheme/AcousticSolver.hpp
@@ -3,23 +3,25 @@
 
 #include <rang.hpp>
 
-#include <ArrayUtils.hpp>
+#include <utils/ArrayUtils.hpp>
 
-#include <BlockPerfectGas.hpp>
-#include <PugsAssert.hpp>
+#include <scheme/BlockPerfectGas.hpp>
+#include <utils/PugsAssert.hpp>
 
-#include <BoundaryCondition.hpp>
-#include <FiniteVolumesEulerUnknowns.hpp>
-#include <Mesh.hpp>
-#include <MeshData.hpp>
-#include <TinyMatrix.hpp>
-#include <TinyVector.hpp>
+#include <scheme/BoundaryCondition.hpp>
+#include <scheme/FiniteVolumesEulerUnknowns.hpp>
 
-#include <ItemValueUtils.hpp>
-#include <Messenger.hpp>
-#include <SubItemValuePerItem.hpp>
+#include <mesh/Mesh.hpp>
+#include <mesh/MeshData.hpp>
 
-#include <Exceptions.hpp>
+#include <algebra/TinyMatrix.hpp>
+#include <algebra/TinyVector.hpp>
+
+#include <mesh/ItemValueUtils.hpp>
+#include <mesh/SubItemValuePerItem.hpp>
+
+#include <utils/Exceptions.hpp>
+#include <utils/Messenger.hpp>
 
 #include <iostream>
 
diff --git a/src/scheme/BlockPerfectGas.hpp b/src/scheme/BlockPerfectGas.hpp
index 69f1c24e8..1a51da28e 100644
--- a/src/scheme/BlockPerfectGas.hpp
+++ b/src/scheme/BlockPerfectGas.hpp
@@ -1,7 +1,7 @@
 #ifndef BLOCK_PERFECTGAS_HPP
 #define BLOCK_PERFECTGAS_HPP
 
-#include <ItemValue.hpp>
+#include <mesh/ItemValue.hpp>
 
 struct BlockPerfectGas
 {
diff --git a/src/scheme/BoundaryCondition.hpp b/src/scheme/BoundaryCondition.hpp
index 23aaaa899..9e1c65cd3 100644
--- a/src/scheme/BoundaryCondition.hpp
+++ b/src/scheme/BoundaryCondition.hpp
@@ -1,13 +1,13 @@
 #ifndef BOUNDARY_CONDITION_HANDLER_HPP
 #define BOUNDARY_CONDITION_HANDLER_HPP
 
-#include <memory>
-#include <vector>
+#include <utils/Array.hpp>
 
-#include <Array.hpp>
+#include <mesh/MeshNodeBoundary.hpp>
+#include <mesh/RefItemList.hpp>
 
-#include <MeshNodeBoundary.hpp>
-#include <RefItemList.hpp>
+#include <memory>
+#include <vector>
 
 class BoundaryCondition
 {
diff --git a/src/scheme/BoundaryConditionDescriptor.hpp b/src/scheme/BoundaryConditionDescriptor.hpp
index 78a2ba947..b73cd6fca 100644
--- a/src/scheme/BoundaryConditionDescriptor.hpp
+++ b/src/scheme/BoundaryConditionDescriptor.hpp
@@ -1,7 +1,8 @@
 #ifndef BOUNDARY_CONDITION_DESCRIPTOR_HPP
 #define BOUNDARY_CONDITION_DESCRIPTOR_HPP
 
-#include <RefId.hpp>
+#include <mesh/RefId.hpp>
+
 #include <memory>
 
 class BoundaryDescriptor
diff --git a/src/scheme/FiniteVolumesEulerUnknowns.hpp b/src/scheme/FiniteVolumesEulerUnknowns.hpp
index d433e74af..6997b63a0 100644
--- a/src/scheme/FiniteVolumesEulerUnknowns.hpp
+++ b/src/scheme/FiniteVolumesEulerUnknowns.hpp
@@ -1,8 +1,8 @@
 #ifndef FINITE_VOLUMES_EULER_UNKNOWNS_HPP
 #define FINITE_VOLUMES_EULER_UNKNOWNS_HPP
 
-#include <ItemValue.hpp>
-#include <TinyVector.hpp>
+#include <algebra/TinyVector.hpp>
+#include <mesh/ItemValue.hpp>
 
 template <typename TMeshData>
 class FiniteVolumesEulerUnknowns
diff --git a/src/utils/Array.hpp b/src/utils/Array.hpp
index eaf368b3e..2d6668c68 100644
--- a/src/utils/Array.hpp
+++ b/src/utils/Array.hpp
@@ -1,10 +1,10 @@
 #ifndef ARRAY_HPP
 #define ARRAY_HPP
 
-#include <PugsMacros.hpp>
-#include <PugsUtils.hpp>
+#include <utils/PugsMacros.hpp>
+#include <utils/PugsUtils.hpp>
 
-#include <PugsAssert.hpp>
+#include <utils/PugsAssert.hpp>
 
 #include <Kokkos_CopyViews.hpp>
 #include <algorithm>
diff --git a/src/utils/ArrayUtils.hpp b/src/utils/ArrayUtils.hpp
index 54f5497bc..6b5b09685 100644
--- a/src/utils/ArrayUtils.hpp
+++ b/src/utils/ArrayUtils.hpp
@@ -1,10 +1,10 @@
 #ifndef ARRAY_UTILS_HPP
 #define ARRAY_UTILS_HPP
 
-#include <PugsMacros.hpp>
-#include <PugsUtils.hpp>
+#include <utils/PugsMacros.hpp>
+#include <utils/PugsUtils.hpp>
 
-#include <Types.hpp>
+#include <utils/Types.hpp>
 
 template <typename DataType, template <typename> typename ArrayT>
 std::remove_const_t<DataType>
diff --git a/src/utils/BacktraceManager.cpp b/src/utils/BacktraceManager.cpp
index 80d947344..a07f34d57 100644
--- a/src/utils/BacktraceManager.cpp
+++ b/src/utils/BacktraceManager.cpp
@@ -1,4 +1,4 @@
-#include <BacktraceManager.hpp>
+#include <utils/BacktraceManager.hpp>
 
 #include <iomanip>
 #include <rang.hpp>
diff --git a/src/utils/BuildInfo.cpp b/src/utils/BuildInfo.cpp
index 2f46fb371..13b8633c2 100644
--- a/src/utils/BuildInfo.cpp
+++ b/src/utils/BuildInfo.cpp
@@ -1,6 +1,6 @@
-#include <BuildInfo.hpp>
-#include <pugs_build_info.hpp>
-#include <pugs_config.hpp>
+#include <utils/BuildInfo.hpp>
+#include <utils/pugs_build_info.hpp>
+#include <utils/pugs_config.hpp>
 
 #include <sstream>
 
diff --git a/src/utils/CMakeLists.txt b/src/utils/CMakeLists.txt
index 9c4e30584..21b313acd 100644
--- a/src/utils/CMakeLists.txt
+++ b/src/utils/CMakeLists.txt
@@ -1,6 +1,3 @@
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-
 # ------------------- Source files --------------------
 
 add_library(
@@ -73,10 +70,6 @@ list(
   ${PUGS_BINARY_DIR}/pugs_config.hpp
   )
 
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-include_directories(${PUGS_BINARY_DIR})
-include_directories(${PUGS_SOURCE_DIR}/packages/rang/include)
-
 # Additional dependencies
 add_dependencies(
   PugsUtils
diff --git a/src/utils/CSRGraph.hpp b/src/utils/CSRGraph.hpp
index 52a7989a9..f2e8ea286 100644
--- a/src/utils/CSRGraph.hpp
+++ b/src/utils/CSRGraph.hpp
@@ -1,7 +1,7 @@
 #ifndef CSR_GRAPH_HPP
 #define CSR_GRAPH_HPP
 
-#include <Array.hpp>
+#include <utils/Array.hpp>
 
 class CSRGraph
 {
diff --git a/src/utils/CastArray.hpp b/src/utils/CastArray.hpp
index b7587abcb..26397a160 100644
--- a/src/utils/CastArray.hpp
+++ b/src/utils/CastArray.hpp
@@ -1,13 +1,12 @@
 #ifndef CAST_ARRAY_HPP
 #define CAST_ARRAY_HPP
 
-#include <Array.hpp>
-#include <PugsTraits.hpp>
+#include <utils/Array.hpp>
+#include <utils/Exceptions.hpp>
+#include <utils/PugsTraits.hpp>
 
 #include <iostream>
 
-#include <Exceptions.hpp>
-
 template <typename DataType, typename CastDataType>
 class CastArray
 {
diff --git a/src/utils/ConsoleManager.cpp b/src/utils/ConsoleManager.cpp
index 83e4c84cb..aa6d23b04 100644
--- a/src/utils/ConsoleManager.cpp
+++ b/src/utils/ConsoleManager.cpp
@@ -1,4 +1,4 @@
-#include <ConsoleManager.hpp>
+#include <utils/ConsoleManager.hpp>
 
 #include <rang.hpp>
 
diff --git a/src/utils/Exceptions.cpp b/src/utils/Exceptions.cpp
index fa3220716..6c7603e83 100644
--- a/src/utils/Exceptions.cpp
+++ b/src/utils/Exceptions.cpp
@@ -1,8 +1,9 @@
-#include <Exceptions.hpp>
-#include <sstream>
+#include <utils/Exceptions.hpp>
 
 #include <rang.hpp>
 
+#include <sstream>
+
 NormalError::NormalError(std::string_view error_msg)
   : std::runtime_error([&] {
       std::ostringstream os;
diff --git a/src/utils/FPEManager.cpp b/src/utils/FPEManager.cpp
index b0295f77d..2bf268392 100644
--- a/src/utils/FPEManager.cpp
+++ b/src/utils/FPEManager.cpp
@@ -1,7 +1,8 @@
-#include <FPEManager.hpp>
-#include <PugsMacros.hpp>
+#include <utils/FPEManager.hpp>
+
+#include <utils/PugsMacros.hpp>
+#include <utils/pugs_config.hpp>
 
-#include <pugs_config.hpp>
 #include <rang.hpp>
 
 #ifdef PUGS_HAS_FENV_H
diff --git a/src/utils/Messenger.cpp b/src/utils/Messenger.cpp
index bb79a3719..e3fff49d0 100644
--- a/src/utils/Messenger.cpp
+++ b/src/utils/Messenger.cpp
@@ -1,4 +1,4 @@
-#include <Messenger.hpp>
+#include <utils/Messenger.hpp>
 
 #include <iostream>
 
diff --git a/src/utils/Messenger.hpp b/src/utils/Messenger.hpp
index 85a95711a..b1acd5e0f 100644
--- a/src/utils/Messenger.hpp
+++ b/src/utils/Messenger.hpp
@@ -1,24 +1,24 @@
 #ifndef MESSENGER_HPP
 #define MESSENGER_HPP
 
-#include <PugsAssert.hpp>
-#include <PugsMacros.hpp>
+#include <utils/PugsAssert.hpp>
+#include <utils/PugsMacros.hpp>
 
-#include <Array.hpp>
-#include <ArrayUtils.hpp>
-#include <CastArray.hpp>
+#include <utils/Array.hpp>
+#include <utils/ArrayUtils.hpp>
+#include <utils/CastArray.hpp>
 
 #include <type_traits>
 #include <vector>
 
-#include <pugs_config.hpp>
+#include <utils/pugs_config.hpp>
+
 #ifdef PUGS_HAS_MPI
 #include <mpi.h>
 #endif   // PUGS_HAS_MPI
 
-#include <PugsTraits.hpp>
-
-#include <Exceptions.hpp>
+#include <utils/Exceptions.hpp>
+#include <utils/PugsTraits.hpp>
 
 #include <iostream>
 
diff --git a/src/utils/Partitioner.cpp b/src/utils/Partitioner.cpp
index 2e22aa4f2..43ee64851 100644
--- a/src/utils/Partitioner.cpp
+++ b/src/utils/Partitioner.cpp
@@ -1,6 +1,7 @@
-#include <Messenger.hpp>
-#include <Partitioner.hpp>
-#include <pugs_config.hpp>
+#include <utils/Partitioner.hpp>
+
+#include <utils/Messenger.hpp>
+#include <utils/pugs_config.hpp>
 
 #ifdef PUGS_HAS_MPI
 
@@ -11,7 +12,7 @@
 #include <iostream>
 #include <vector>
 
-#include <Exceptions.hpp>
+#include <utils/Exceptions.hpp>
 
 Array<int>
 Partitioner::partition(const CSRGraph& graph)
diff --git a/src/utils/Partitioner.hpp b/src/utils/Partitioner.hpp
index 33e9f85f6..30f50723a 100644
--- a/src/utils/Partitioner.hpp
+++ b/src/utils/Partitioner.hpp
@@ -1,7 +1,7 @@
 #ifndef PARTITIONER_HPP
 #define PARTITIONER_HPP
 
-#include <CSRGraph.hpp>
+#include <utils/CSRGraph.hpp>
 
 class Partitioner
 {
diff --git a/src/utils/PugsAssert.hpp b/src/utils/PugsAssert.hpp
index 5c0a2cc62..837d63761 100644
--- a/src/utils/PugsAssert.hpp
+++ b/src/utils/PugsAssert.hpp
@@ -1,7 +1,7 @@
 #ifndef PUGS_ASSERT_HPP
 #define PUGS_ASSERT_HPP
 
-#include <PugsMacros.hpp>
+#include <utils/PugsMacros.hpp>
 
 #include <iostream>
 #include <rang.hpp>
diff --git a/src/utils/PugsUtils.cpp b/src/utils/PugsUtils.cpp
index 9aa20750e..ec024977f 100644
--- a/src/utils/PugsUtils.cpp
+++ b/src/utils/PugsUtils.cpp
@@ -1,17 +1,17 @@
-#include <PugsUtils.hpp>
+#include <utils/PugsUtils.hpp>
 
-#include <Kokkos_Core.hpp>
+#include <utils/BuildInfo.hpp>
+#include <utils/RevisionInfo.hpp>
 
-#include <BuildInfo.hpp>
-#include <RevisionInfo.hpp>
+#include <utils/Messenger.hpp>
 
-#include <Messenger.hpp>
+#include <utils/ConsoleManager.hpp>
+#include <utils/FPEManager.hpp>
+#include <utils/SignalManager.hpp>
 
 #include <rang.hpp>
 
-#include <ConsoleManager.hpp>
-#include <FPEManager.hpp>
-#include <SignalManager.hpp>
+#include <Kokkos_Core.hpp>
 
 #include <CLI/CLI.hpp>
 
diff --git a/src/utils/PugsUtils.hpp b/src/utils/PugsUtils.hpp
index 339f5de53..6a64867db 100644
--- a/src/utils/PugsUtils.hpp
+++ b/src/utils/PugsUtils.hpp
@@ -2,7 +2,7 @@
 #define PUGS_UTILS_HPP
 
 #include <Kokkos_Core.hpp>
-#include <PugsMacros.hpp>
+#include <utils/PugsMacros.hpp>
 
 #include <functional>
 #include <string>
diff --git a/src/utils/RevisionInfo.cpp b/src/utils/RevisionInfo.cpp
index 4d3965b33..f31e67950 100644
--- a/src/utils/RevisionInfo.cpp
+++ b/src/utils/RevisionInfo.cpp
@@ -1,6 +1,7 @@
-#include <RevisionInfo.hpp>
-#include <pugs_git_revision.hpp>
-#include <pugs_version.hpp>
+#include <utils/RevisionInfo.hpp>
+
+#include <utils/pugs_git_revision.hpp>
+#include <utils/pugs_version.hpp>
 
 std::string
 RevisionInfo::version()
diff --git a/src/utils/SignalManager.cpp b/src/utils/SignalManager.cpp
index a9981848d..2ff1499b4 100644
--- a/src/utils/SignalManager.cpp
+++ b/src/utils/SignalManager.cpp
@@ -1,19 +1,17 @@
-#include <SignalManager.hpp>
+#include <utils/SignalManager.hpp>
 
-#include <PugsAssert.hpp>
+#include <utils/BacktraceManager.hpp>
+#include <utils/ConsoleManager.hpp>
+#include <utils/Messenger.hpp>
+#include <utils/PugsAssert.hpp>
 
-#include <BacktraceManager.hpp>
-#include <ConsoleManager.hpp>
+#include <utils/pugs_config.hpp>
 
-#include <csignal>
-#include <unistd.h>
-
-#include <pugs_config.hpp>
 #include <rang.hpp>
 
-#include <Messenger.hpp>
-
+#include <csignal>
 #include <iostream>
+#include <unistd.h>
 
 bool SignalManager::s_pause_on_error = false;
 
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 79892a849..b1670a12c 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,6 +1,9 @@
-include_directories("${PUGS_BINARY_DIR}/src/utils")
 set(EXECUTABLE_OUTPUT_PATH ${PUGS_BINARY_DIR})
 
+include_directories(${PUGS_SOURCE_DIR}/src)
+include_directories(${PUGS_BINARY_DIR}/src)
+include_directories(${PUGS_SOURCE_DIR}/test)
+
 add_executable (unit_tests
   test_main.cpp
   test_Array.cpp
diff --git a/tests/mpi_test_Messenger.cpp b/tests/mpi_test_Messenger.cpp
index 7dae0088d..d7a782595 100644
--- a/tests/mpi_test_Messenger.cpp
+++ b/tests/mpi_test_Messenger.cpp
@@ -1,10 +1,9 @@
 #include <catch2/catch.hpp>
 
-#include <Array.hpp>
-#include <Messenger.hpp>
+#include <utils/Array.hpp>
+#include <utils/Messenger.hpp>
 
-#include <fstream>
-#include <pugs_config.hpp>
+#include <utils/pugs_config.hpp>
 
 #ifdef PUGS_HAS_MPI
 #include <mpi.h>
diff --git a/tests/mpi_test_main.cpp b/tests/mpi_test_main.cpp
index ec01b679b..3b40c79cf 100644
--- a/tests/mpi_test_main.cpp
+++ b/tests/mpi_test_main.cpp
@@ -2,7 +2,8 @@
 #include <catch2/catch.hpp>
 
 #include <Kokkos_Core.hpp>
-#include <Messenger.hpp>
+
+#include <utils/Messenger.hpp>
 
 #include <cstdlib>
 
diff --git a/tests/test_Array.cpp b/tests/test_Array.cpp
index e9f7238ef..948cfb554 100644
--- a/tests/test_Array.cpp
+++ b/tests/test_Array.cpp
@@ -1,8 +1,8 @@
 #include <catch2/catch.hpp>
 
-#include <Array.hpp>
-#include <PugsAssert.hpp>
-#include <Types.hpp>
+#include <utils/Array.hpp>
+#include <utils/PugsAssert.hpp>
+#include <utils/Types.hpp>
 
 #include <deque>
 #include <list>
diff --git a/tests/test_ArrayUtils.cpp b/tests/test_ArrayUtils.cpp
index 0f54e23a0..6a7774e1d 100644
--- a/tests/test_ArrayUtils.cpp
+++ b/tests/test_ArrayUtils.cpp
@@ -1,11 +1,11 @@
 #include <catch2/catch.hpp>
 
-#include <Array.hpp>
-#include <ArrayUtils.hpp>
-#include <PugsAssert.hpp>
+#include <utils/Array.hpp>
+#include <utils/ArrayUtils.hpp>
+#include <utils/PugsAssert.hpp>
 
-#include <TinyMatrix.hpp>
-#include <TinyVector.hpp>
+#include <algebra/TinyMatrix.hpp>
+#include <algebra/TinyVector.hpp>
 
 // Instantiate to ensure full coverage is performed
 template class Array<int>;
diff --git a/tests/test_BiCGStab.cpp b/tests/test_BiCGStab.cpp
index 8769200f6..a40fa8a4f 100644
--- a/tests/test_BiCGStab.cpp
+++ b/tests/test_BiCGStab.cpp
@@ -1,7 +1,7 @@
 #include <catch2/catch.hpp>
 
-#include <BiCGStab.hpp>
-#include <CRSMatrix.hpp>
+#include <algebra/BiCGStab.hpp>
+#include <algebra/CRSMatrix.hpp>
 
 TEST_CASE("BiCGStab", "[algebra]")
 {
diff --git a/tests/test_CRSMatrix.cpp b/tests/test_CRSMatrix.cpp
index 4d555b281..651eb2350 100644
--- a/tests/test_CRSMatrix.cpp
+++ b/tests/test_CRSMatrix.cpp
@@ -1,6 +1,6 @@
 #include <catch2/catch.hpp>
 
-#include <CRSMatrix.hpp>
+#include <algebra/CRSMatrix.hpp>
 
 // Instantiate to ensure full coverage is performed
 template class SparseMatrixDescriptor<int, uint8_t>;
diff --git a/tests/test_ItemType.cpp b/tests/test_ItemType.cpp
index 8560f8790..88e3ad877 100644
--- a/tests/test_ItemType.cpp
+++ b/tests/test_ItemType.cpp
@@ -1,7 +1,7 @@
-#include <PugsMacros.hpp>
 #include <catch2/catch.hpp>
 
-#include <ItemType.hpp>
+#include <mesh/ItemType.hpp>
+#include <utils/PugsMacros.hpp>
 
 TEST_CASE("ItemType", "[connectivity]")
 {
diff --git a/tests/test_PCG.cpp b/tests/test_PCG.cpp
index 97bbe1ce2..d0939d327 100644
--- a/tests/test_PCG.cpp
+++ b/tests/test_PCG.cpp
@@ -1,7 +1,7 @@
 #include <catch2/catch.hpp>
 
-#include <CRSMatrix.hpp>
-#include <PCG.hpp>
+#include <algebra/CRSMatrix.hpp>
+#include <algebra/PCG.hpp>
 
 TEST_CASE("PCG", "[algebra]")
 {
diff --git a/tests/test_PugsAssert.cpp b/tests/test_PugsAssert.cpp
index ccbc47203..9f155fc63 100644
--- a/tests/test_PugsAssert.cpp
+++ b/tests/test_PugsAssert.cpp
@@ -1,6 +1,7 @@
 #include <catch2/catch.hpp>
 
-#include <PugsAssert.hpp>
+#include <utils/PugsAssert.hpp>
+
 #include <string>
 
 TEST_CASE("PugsAssert", "[utils]")
diff --git a/tests/test_RevisionInfo.cpp b/tests/test_RevisionInfo.cpp
index 8bf2cf49f..e3becb6cb 100644
--- a/tests/test_RevisionInfo.cpp
+++ b/tests/test_RevisionInfo.cpp
@@ -1,9 +1,9 @@
 #include <catch2/catch.hpp>
 
-#include <RevisionInfo.hpp>
+#include <utils/RevisionInfo.hpp>
 
-#include <pugs_git_revision.hpp>
-#include <pugs_version.hpp>
+#include <utils/pugs_git_revision.hpp>
+#include <utils/pugs_version.hpp>
 
 TEST_CASE("RevisionInfo", "[utils]")
 {
diff --git a/tests/test_SparseMatrixDescriptor.cpp b/tests/test_SparseMatrixDescriptor.cpp
index c34352f61..039ba0824 100644
--- a/tests/test_SparseMatrixDescriptor.cpp
+++ b/tests/test_SparseMatrixDescriptor.cpp
@@ -1,7 +1,8 @@
 #include <catch2/catch.hpp>
 
-#include <PugsAssert.hpp>
-#include <SparseMatrixDescriptor.hpp>
+#include <utils/PugsAssert.hpp>
+
+#include <algebra/SparseMatrixDescriptor.hpp>
 
 // Instantiate to ensure full coverage is performed
 template class SparseMatrixDescriptor<int, uint8_t>;
diff --git a/tests/test_TinyMatrix.cpp b/tests/test_TinyMatrix.cpp
index fe45b86e0..d764a88fc 100644
--- a/tests/test_TinyMatrix.cpp
+++ b/tests/test_TinyMatrix.cpp
@@ -1,9 +1,11 @@
 #include <catch2/catch.hpp>
 
 #include <Kokkos_Core.hpp>
-#include <PugsAssert.hpp>
-#include <TinyMatrix.hpp>
-#include <Types.hpp>
+
+#include <utils/PugsAssert.hpp>
+#include <utils/Types.hpp>
+
+#include <algebra/TinyMatrix.hpp>
 
 // Instantiate to ensure full coverage is performed
 template class TinyMatrix<1, int>;
diff --git a/tests/test_TinyVector.cpp b/tests/test_TinyVector.cpp
index 79ffb373e..f64e2da09 100644
--- a/tests/test_TinyVector.cpp
+++ b/tests/test_TinyVector.cpp
@@ -1,7 +1,8 @@
 #include <catch2/catch.hpp>
 
-#include <PugsAssert.hpp>
-#include <TinyVector.hpp>
+#include <utils/PugsAssert.hpp>
+
+#include <algebra/TinyVector.hpp>
 
 // Instantiate to ensure full coverage is performed
 template class TinyVector<1, int>;
diff --git a/tests/test_Vector.cpp b/tests/test_Vector.cpp
index 15e02d0eb..9b6730f05 100644
--- a/tests/test_Vector.cpp
+++ b/tests/test_Vector.cpp
@@ -1,7 +1,8 @@
 #include <catch2/catch.hpp>
 
-#include <PugsAssert.hpp>
-#include <Vector.hpp>
+#include <utils/PugsAssert.hpp>
+
+#include <algebra/Vector.hpp>
 
 // Instantiate to ensure full coverage is performed
 template class Vector<int>;
-- 
GitLab