From f4b9dfab311210221d3b5c3fedd65bf86f6af09e Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Mon, 2 Feb 2026 16:36:36 +0100 Subject: [PATCH 1/9] feurst --- include/samurai/array_of_interval_and_point.hpp | 7 ++++++- include/samurai/box.hpp | 5 +++++ include/samurai/cell.hpp | 5 +++++ include/samurai/cell_array.hpp | 4 ++++ include/samurai/cell_list.hpp | 5 +++++ src/samurai/array_of_interval_and_point.cpp | 10 ++++++++++ src/samurai/box.cpp | 10 ++++++++++ src/samurai/cell.cpp | 10 ++++++++++ src/samurai/cell_array.cpp | 10 ++++++++++ src/samurai/cell_list.cpp | 10 ++++++++++ 10 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/samurai/array_of_interval_and_point.cpp create mode 100644 src/samurai/box.cpp create mode 100644 src/samurai/cell.cpp create mode 100644 src/samurai/cell_array.cpp create mode 100644 src/samurai/cell_list.cpp diff --git a/include/samurai/array_of_interval_and_point.hpp b/include/samurai/array_of_interval_and_point.hpp index 78e178575..668e6394f 100644 --- a/include/samurai/array_of_interval_and_point.hpp +++ b/include/samurai/array_of_interval_and_point.hpp @@ -136,4 +136,9 @@ namespace samurai }); m_idx.erase(it, m_idx.end()); } -} + + extern template class ArrayOfIntervalAndPoint::coords_t>; + extern template class ArrayOfIntervalAndPoint::coords_t>; + extern template class ArrayOfIntervalAndPoint::coords_t>; + +} // namespace samurai diff --git a/include/samurai/box.hpp b/include/samurai/box.hpp index 3bbd72dd8..168ca40f6 100644 --- a/include/samurai/box.hpp +++ b/include/samurai/box.hpp @@ -361,4 +361,9 @@ namespace samurai approx_box.max_corner() = box.min_corner() + approx_length; return approx_box; } + + extern template class Box; + extern template class Box; + extern template class Box; + } // namespace samurai diff --git a/include/samurai/cell.hpp b/include/samurai/cell.hpp index dffa6cdee..f759d187a 100644 --- a/include/samurai/cell.hpp +++ b/include/samurai/cell.hpp @@ -170,4 +170,9 @@ namespace samurai { return !(c1 == c2); } + + extern template struct Cell<1, default_config::interval_t>; + extern template struct Cell<2, default_config::interval_t>; + extern template struct Cell<3, default_config::interval_t>; + } // namespace samurai diff --git a/include/samurai/cell_array.hpp b/include/samurai/cell_array.hpp index 3c0c726d4..e52f3e8e3 100644 --- a/include/samurai/cell_array.hpp +++ b/include/samurai/cell_array.hpp @@ -735,4 +735,8 @@ namespace samurai return it1.base().equal(it2.base()); } + extern template class CellArray<1, default_config::interval_t, default_config::max_level>; + extern template class CellArray<2, default_config::interval_t, default_config::max_level>; + extern template class CellArray<3, default_config::interval_t, default_config::max_level>; + } // namespace samurai diff --git a/include/samurai/cell_list.hpp b/include/samurai/cell_list.hpp index 75fb25a96..77b9f8c56 100644 --- a/include/samurai/cell_list.hpp +++ b/include/samurai/cell_list.hpp @@ -121,4 +121,9 @@ namespace samurai cell_list.to_stream(out); return out; } + + extern template class CellList<1, default_config::interval_t, default_config::max_level>; + extern template class CellList<2, default_config::interval_t, default_config::max_level>; + extern template class CellList<3, default_config::interval_t, default_config::max_level>; + } // namespace samurai diff --git a/src/samurai/array_of_interval_and_point.cpp b/src/samurai/array_of_interval_and_point.cpp new file mode 100644 index 000000000..8a4014469 --- /dev/null +++ b/src/samurai/array_of_interval_and_point.cpp @@ -0,0 +1,10 @@ +#include "array_of_interval_and_point.hpp" + +namespace samurai +{ + + template class ArrayOfIntervalAndPoint::coords_t>; + template class ArrayOfIntervalAndPoint::coords_t>; + template class ArrayOfIntervalAndPoint::coords_t>; + +} // namespace samurai diff --git a/src/samurai/box.cpp b/src/samurai/box.cpp new file mode 100644 index 000000000..11245a5c0 --- /dev/null +++ b/src/samurai/box.cpp @@ -0,0 +1,10 @@ +#include "box.hpp" + +namespace samurai +{ + + template class Box; + template class Box; + template class Box; + +} // namespace samurai diff --git a/src/samurai/cell.cpp b/src/samurai/cell.cpp new file mode 100644 index 000000000..9c5ff2770 --- /dev/null +++ b/src/samurai/cell.cpp @@ -0,0 +1,10 @@ +#include "cell.hpp" + +namespace samurai +{ + + template struct Cell<1, default_config::interval_t>; + template struct Cell<2, default_config::interval_t>; + template struct Cell<3, default_config::interval_t>; + +} // namespace samurai diff --git a/src/samurai/cell_array.cpp b/src/samurai/cell_array.cpp new file mode 100644 index 000000000..feee33446 --- /dev/null +++ b/src/samurai/cell_array.cpp @@ -0,0 +1,10 @@ +#include "cell_array.hpp" + +namespace samurai +{ + + template class CellArray<1, default_config::interval_t, default_config::max_level>; + template class CellArray<2, default_config::interval_t, default_config::max_level>; + template class CellArray<3, default_config::interval_t, default_config::max_level>; + +} // namespace samurai diff --git a/src/samurai/cell_list.cpp b/src/samurai/cell_list.cpp new file mode 100644 index 000000000..62c80de2f --- /dev/null +++ b/src/samurai/cell_list.cpp @@ -0,0 +1,10 @@ +#include "cell_list.hpp" + +namespace samurai +{ + + template class CellList<1, default_config::interval_t, default_config::max_level>; + template class CellList<2, default_config::interval_t, default_config::max_level>; + template class CellList<3, default_config::interval_t, default_config::max_level>; + +} // namespace samurai From d5e6b3f4f86b48fb313ed3ad0210b16267b56e25 Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Tue, 3 Feb 2026 17:15:33 +0100 Subject: [PATCH 2/9] added pre-compiled classes --- CMakeLists.txt | 50 ++--- demos/FiniteVolume/CMakeLists.txt | 4 +- .../samurai/array_of_interval_and_point.hpp | 19 +- include/samurai/box.hpp | 12 +- include/samurai/cell.hpp | 17 +- include/samurai/cell_array.hpp | 12 +- include/samurai/cell_list.hpp | 12 +- include/samurai/domain_builder.hpp | 8 + include/samurai/field/scalar_field.hpp | 17 ++ include/samurai/field/vector_field.hpp | 27 +++ include/samurai/interval.hpp | 7 + include/samurai/level_cell_array.hpp | 9 + include/samurai/level_cell_list.hpp | 10 +- include/samurai/list_of_intervals.hpp | 7 + include/samurai/mesh_interval.hpp | 4 + include/samurai/mr/adapt.hpp | 182 ++++++++++++++++++ include/samurai/mr/mesh.hpp | 120 +++++++----- include/samurai/reconstruction.hpp | 20 +- include/samurai/stencil_field.hpp | 8 + src/samurai/array_of_interval_and_point.cpp | 19 +- src/samurai/box.cpp | 2 +- src/samurai/cell.cpp | 2 +- src/samurai/cell_array.cpp | 9 +- src/samurai/cell_list.cpp | 9 +- src/samurai/field/scalar_field.cpp | 16 ++ src/samurai/field/vector_field.cpp | 25 +++ src/samurai/interval.cpp | 8 + src/samurai/level_cell_array.cpp | 11 ++ src/samurai/level_cell_list.cpp | 11 ++ src/samurai/list_of_intervals.cpp | 9 + src/samurai/mesh_interval.cpp | 11 ++ src/samurai/mr/adapt.cpp | 178 +++++++++++++++++ src/samurai/mr/mesh.cpp | 8 + src/samurai/reconstruction.cpp | 15 ++ src/samurai/stencil_field.cpp | 14 ++ 35 files changed, 775 insertions(+), 117 deletions(-) create mode 100644 src/samurai/field/scalar_field.cpp create mode 100644 src/samurai/field/vector_field.cpp create mode 100644 src/samurai/interval.cpp create mode 100644 src/samurai/level_cell_array.cpp create mode 100644 src/samurai/level_cell_list.cpp create mode 100644 src/samurai/list_of_intervals.cpp create mode 100644 src/samurai/mesh_interval.cpp create mode 100644 src/samurai/mr/adapt.cpp create mode 100644 src/samurai/mr/mesh.cpp create mode 100644 src/samurai/reconstruction.cpp create mode 100644 src/samurai/stencil_field.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 48e17e288..03da1f8a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,13 +96,18 @@ project_options( ${ENABLE_CONAN} ) -add_library(samurai INTERFACE) -target_compile_features(samurai INTERFACE cxx_std_20) -target_link_libraries(samurai INTERFACE project_options project_warnings) +file(GLOB_RECURSE SAMURAI_SOURCES + "src/*.cpp" + "src/*.c" +) + +add_library(samurai ${SAMURAI_SOURCES}) +target_compile_features(samurai PUBLIC cxx_std_20) +target_link_libraries(samurai PUBLIC project_options project_warnings) # Includes set(INCLUDE_DIR "include") # must be relative paths -target_include_directories(samurai INTERFACE "$" +target_include_directories(samurai PUBLIC "$" "$") # Find dependencies: @@ -122,7 +127,7 @@ endforeach() # Link dependencies: target_link_system_libraries( samurai - INTERFACE + PUBLIC HighFive pugixml::pugixml fmt::fmt @@ -140,7 +145,7 @@ if(SAMURAI_FIELD_CONTAINER MATCHES xtensor) target_link_system_libraries( samurai - INTERFACE + PUBLIC xtensor ) @@ -155,17 +160,17 @@ if(SAMURAI_FIELD_CONTAINER MATCHES eigen3 OR SAMURAI_FLUX_CONTAINER MATCHES eige find_package(Eigen3 CONFIG REQUIRED) target_link_system_libraries( samurai - INTERFACE + PUBLIC Eigen3::Eigen ) - target_compile_definitions(samurai INTERFACE EIGEN_ARRAYBASE_PLUGIN="${CMAKE_CURRENT_SOURCE_DIR}/include/samurai/storage/eigen/array_eigen_addons.hpp") + target_compile_definitions(samurai PUBLIC EIGEN_ARRAYBASE_PLUGIN="${CMAKE_CURRENT_SOURCE_DIR}/include/samurai/storage/eigen/array_eigen_addons.hpp") endif() if(${WITH_OPENMP}) find_package(OpenMP) if(OpenMP_CXX_FOUND) - target_link_libraries(samurai INTERFACE OpenMP::OpenMP_CXX) - target_compile_definitions(samurai INTERFACE SAMURAI_WITH_OPENMP) + target_link_libraries(samurai PUBLIC OpenMP::OpenMP_CXX) + target_compile_definitions(samurai PUBLIC SAMURAI_WITH_OPENMP) else() message(FATAL_ERROR "OpenMP not found") endif() @@ -178,15 +183,14 @@ if(${WITH_MPI}) find_package(Boost REQUIRED COMPONENTS serialization mpi) target_link_system_libraries( samurai - INTERFACE + PUBLIC Boost::serialization Boost::mpi ) - target_compile_definitions(samurai INTERFACE SAMURAI_WITH_MPI) + target_compile_definitions(samurai PUBLIC SAMURAI_WITH_MPI) endif() - -target_compile_features(samurai INTERFACE cxx_std_20) +target_compile_features(samurai PUBLIC cxx_std_20) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) OPTION(BUILD_BENCHMARKS "samurai benchmark suite" OFF) @@ -199,20 +203,20 @@ option(SAMURAI_CHECK_NAN "Check NaN in computations" OFF) if(WITH_STATS) find_package(nlohmann_json REQUIRED) - target_link_libraries(samurai INTERFACE nlohmann_json::nlohmann_json) - target_compile_definitions(samurai INTERFACE WITH_STATS) + target_link_libraries(samurai PUBLIC nlohmann_json::nlohmann_json) + target_compile_definitions(samurai PUBLIC WITH_STATS) endif() if(SAMURAI_CHECK_NAN) - target_compile_definitions(samurai INTERFACE SAMURAI_CHECK_NAN) + target_compile_definitions(samurai PUBLIC SAMURAI_CHECK_NAN) endif() if(SAMURAI_ENABLE_INLINE) - target_compile_definitions(samurai INTERFACE SAMURAI_ENABLE_INLINE) + target_compile_definitions(samurai PUBLIC SAMURAI_ENABLE_INLINE) endif() if(SAMURAI_FORCE_INLINE) - target_compile_definitions(samurai INTERFACE SAMURAI_FORCE_INLINE) + target_compile_definitions(samurai PUBLIC SAMURAI_FORCE_INLINE) endif() if(BUILD_BENCHMARKS) @@ -234,28 +238,28 @@ else() endif() if(SAMURAI_CONTAINER_LAYOUT_COL_MAJOR) - target_compile_definitions(samurai INTERFACE SAMURAI_CONTAINER_LAYOUT_COL_MAJOR) + target_compile_definitions(samurai PUBLIC SAMURAI_CONTAINER_LAYOUT_COL_MAJOR) endif() if(NOT SAMURAI_FIELD_CONTAINER IN_LIST FIELD_CONTAINER_LIST) message(FATAL_ERROR "SAMURAI_FIELD_CONTAINER must be one of: ${FIELD_CONTAINER_LIST}") else() string(TOUPPER ${SAMURAI_FIELD_CONTAINER} SAMURAI_FIELD_CONTAINER) - target_compile_definitions(samurai INTERFACE SAMURAI_FIELD_CONTAINER_${SAMURAI_FIELD_CONTAINER}) + target_compile_definitions(samurai PUBLIC SAMURAI_FIELD_CONTAINER_${SAMURAI_FIELD_CONTAINER}) endif() if(NOT SAMURAI_FLUX_CONTAINER IN_LIST FLUX_CONTAINER_LIST) message(FATAL_ERROR "SAMURAI_FLUX_CONTAINER must be one of: ${FLUX_CONTAINER_LIST}") else() string(TOUPPER ${SAMURAI_FLUX_CONTAINER} SAMURAI_FLUX_CONTAINER) - target_compile_definitions(samurai INTERFACE SAMURAI_FLUX_CONTAINER_${SAMURAI_FLUX_CONTAINER}) + target_compile_definitions(samurai PUBLIC SAMURAI_FLUX_CONTAINER_${SAMURAI_FLUX_CONTAINER}) endif() if(NOT SAMURAI_STATIC_MAT_CONTAINER IN_LIST STATIC_MATRIX_CONTAINER_LIST) message(FATAL_ERROR "SAMURAI_STATIC_MAT_CONTAINER must be one of: ${STATIC_MATRIX_CONTAINER_LIST}") else() string(TOUPPER ${SAMURAI_STATIC_MAT_CONTAINER} SAMURAI_STATIC_MAT_CONTAINER) - target_compile_definitions(samurai INTERFACE SAMURAI_STATIC_MAT_CONTAINER_${SAMURAI_STATIC_MAT_CONTAINER}) + target_compile_definitions(samurai PUBLIC SAMURAI_STATIC_MAT_CONTAINER_${SAMURAI_STATIC_MAT_CONTAINER}) endif() # Package the project diff --git a/demos/FiniteVolume/CMakeLists.txt b/demos/FiniteVolume/CMakeLists.txt index e55a22913..03e1d4e20 100644 --- a/demos/FiniteVolume/CMakeLists.txt +++ b/demos/FiniteVolume/CMakeLists.txt @@ -42,7 +42,7 @@ if(${WITH_PETSC}) add_executable(${executable_name} ${source_file}) target_compile_definitions(${executable_name} PUBLIC SAMURAI_WITH_PETSC) - target_link_libraries(${executable_name} samurai ${PETSC_LINK_LIBRARIES}) + target_link_libraries(${executable_name} PUBLIC samurai ${PETSC_LINK_LIBRARIES}) endforeach() endif() @@ -53,7 +53,7 @@ foreach(demo_entry ${STANDARD_DEMOS}) list(GET demo_parts 1 executable_name) add_executable(${executable_name} ${source_file}) - target_link_libraries(${executable_name} samurai) + target_link_libraries(${executable_name} PUBLIC samurai) endforeach() # Specific options for MSVC diff --git a/include/samurai/array_of_interval_and_point.hpp b/include/samurai/array_of_interval_and_point.hpp index 668e6394f..423b5fc57 100644 --- a/include/samurai/array_of_interval_and_point.hpp +++ b/include/samurai/array_of_interval_and_point.hpp @@ -1,8 +1,9 @@ #pragma once +#include "samurai_config.hpp" + namespace samurai { - template class ArrayOfIntervalAndPoint { @@ -83,6 +84,18 @@ namespace samurai std::vector m_idx; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class ArrayOfIntervalAndPoint>>; + extern template class ArrayOfIntervalAndPoint>>; + extern template class ArrayOfIntervalAndPoint>>; + + //////////////////////////////////////////////////////////////////// + //// method implementation + //////////////////////////////////////////////////////////////////// + template void ArrayOfIntervalAndPoint::sort_intervals() { @@ -137,8 +150,4 @@ namespace samurai m_idx.erase(it, m_idx.end()); } - extern template class ArrayOfIntervalAndPoint::coords_t>; - extern template class ArrayOfIntervalAndPoint::coords_t>; - extern template class ArrayOfIntervalAndPoint::coords_t>; - } // namespace samurai diff --git a/include/samurai/box.hpp b/include/samurai/box.hpp index 168ca40f6..830801415 100644 --- a/include/samurai/box.hpp +++ b/include/samurai/box.hpp @@ -65,6 +65,14 @@ namespace samurai point_t m_max_corner{0}; }; + //////////////////////////////// + // Box explicit instanciation // + //////////////////////////////// + + extern template class Box; + extern template class Box; + extern template class Box; + //////////////////////// // Box implementation // //////////////////////// @@ -362,8 +370,4 @@ namespace samurai return approx_box; } - extern template class Box; - extern template class Box; - extern template class Box; - } // namespace samurai diff --git a/include/samurai/cell.hpp b/include/samurai/cell.hpp index f759d187a..2cb02e8ed 100644 --- a/include/samurai/cell.hpp +++ b/include/samurai/cell.hpp @@ -9,6 +9,7 @@ #include #include +#include "interval.hpp" #include "samurai_config.hpp" namespace samurai @@ -76,6 +77,18 @@ namespace samurai double length = 0; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template struct Cell<1, default_config::interval_t>; + extern template struct Cell<2, default_config::interval_t>; + extern template struct Cell<3, default_config::interval_t>; + + //////////////////////////////////////////////////////////////////// + //// method implementation + //////////////////////////////////////////////////////////////////// + template SAMURAI_INLINE Cell::Cell(const coords_t& origin_point_, double scaling_factor, @@ -171,8 +184,4 @@ namespace samurai return !(c1 == c2); } - extern template struct Cell<1, default_config::interval_t>; - extern template struct Cell<2, default_config::interval_t>; - extern template struct Cell<3, default_config::interval_t>; - } // namespace samurai diff --git a/include/samurai/cell_array.hpp b/include/samurai/cell_array.hpp index e52f3e8e3..d66091a03 100644 --- a/include/samurai/cell_array.hpp +++ b/include/samurai/cell_array.hpp @@ -168,6 +168,14 @@ namespace samurai #endif }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class CellArray<1>; + extern template class CellArray<2>; + extern template class CellArray<3>; + //////////////////////////////////// // CellArray_iterator definition // /////////////////////////////////// @@ -735,8 +743,4 @@ namespace samurai return it1.base().equal(it2.base()); } - extern template class CellArray<1, default_config::interval_t, default_config::max_level>; - extern template class CellArray<2, default_config::interval_t, default_config::max_level>; - extern template class CellArray<3, default_config::interval_t, default_config::max_level>; - } // namespace samurai diff --git a/include/samurai/cell_list.hpp b/include/samurai/cell_list.hpp index 77b9f8c56..c5030c598 100644 --- a/include/samurai/cell_list.hpp +++ b/include/samurai/cell_list.hpp @@ -46,6 +46,14 @@ namespace samurai std::array m_cells; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class CellList<1>; + extern template class CellList<2>; + extern template class CellList<3>; + ///////////////////////////// // CellList implementation // ///////////////////////////// @@ -122,8 +130,4 @@ namespace samurai return out; } - extern template class CellList<1, default_config::interval_t, default_config::max_level>; - extern template class CellList<2, default_config::interval_t, default_config::max_level>; - extern template class CellList<3, default_config::interval_t, default_config::max_level>; - } // namespace samurai diff --git a/include/samurai/domain_builder.hpp b/include/samurai/domain_builder.hpp index 60452f42b..cb6dc90d2 100644 --- a/include/samurai/domain_builder.hpp +++ b/include/samurai/domain_builder.hpp @@ -115,4 +115,12 @@ namespace samurai return largest_subdivision; } }; + + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class DomainBuilder<1>; + extern template class DomainBuilder<2>; + extern template class DomainBuilder<3>; } diff --git a/include/samurai/field/scalar_field.hpp b/include/samurai/field/scalar_field.hpp index 6ba8cc335..54e6d26a2 100644 --- a/include/samurai/field/scalar_field.hpp +++ b/include/samurai/field/scalar_field.hpp @@ -10,6 +10,7 @@ #include "../concepts.hpp" #include "../field_expression.hpp" #include "../mesh_holder.hpp" +#include "../mr/mesh.hpp" #include "../numeric/gauss_legendre.hpp" #include "access_base.hpp" #include "field_base.hpp" @@ -109,6 +110,22 @@ namespace samurai ~ScalarField() = default; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class ScalarField, MRMeshId>>, float>; + extern template class ScalarField, MRMeshId>>, float>; + extern template class ScalarField, MRMeshId>>, float>; + + extern template class ScalarField, MRMeshId>>, double>; + extern template class ScalarField, MRMeshId>>, double>; + extern template class ScalarField, MRMeshId>>, double>; + + extern template class ScalarField, MRMeshId>>, long double>; + extern template class ScalarField, MRMeshId>>, long double>; + extern template class ScalarField, MRMeshId>>, long double>; + // ScalarField constructors ----------------------------------------------- template diff --git a/include/samurai/field/vector_field.hpp b/include/samurai/field/vector_field.hpp index 121a9ccbd..6e09445c8 100644 --- a/include/samurai/field/vector_field.hpp +++ b/include/samurai/field/vector_field.hpp @@ -9,8 +9,10 @@ #include #include "../algorithm.hpp" +#include "../concepts.hpp" #include "../field_expression.hpp" #include "../mesh_holder.hpp" +#include "../mr/mesh.hpp" #include "../numeric/gauss_legendre.hpp" #include "access_base.hpp" #include "concepts.hpp" @@ -172,6 +174,31 @@ namespace samurai ~VectorField() = default; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class VectorField, MRMeshId>>, float, 1, false>; + extern template class VectorField, MRMeshId>>, float, 1, true>; + extern template class VectorField, MRMeshId>>, float, 2, false>; + extern template class VectorField, MRMeshId>>, float, 2, true>; + extern template class VectorField, MRMeshId>>, float, 3, false>; + extern template class VectorField, MRMeshId>>, float, 3, true>; + + extern template class VectorField, MRMeshId>>, double, 1, false>; + extern template class VectorField, MRMeshId>>, double, 1, true>; + extern template class VectorField, MRMeshId>>, double, 2, false>; + extern template class VectorField, MRMeshId>>, double, 2, true>; + extern template class VectorField, MRMeshId>>, double, 3, false>; + extern template class VectorField, MRMeshId>>, double, 3, true>; + + extern template class VectorField, MRMeshId>>, long double, 1, false>; + extern template class VectorField, MRMeshId>>, long double, 1, true>; + extern template class VectorField, MRMeshId>>, long double, 2, false>; + extern template class VectorField, MRMeshId>>, long double, 2, true>; + extern template class VectorField, MRMeshId>>, long double, 3, false>; + extern template class VectorField, MRMeshId>>, long double, 3, true>; + // VectorField constructors ----------------------------------------------- template diff --git a/include/samurai/interval.hpp b/include/samurai/interval.hpp index 816ab39de..70ee10f04 100644 --- a/include/samurai/interval.hpp +++ b/include/samurai/interval.hpp @@ -99,6 +99,12 @@ namespace samurai #endif }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class Interval; + ///////////////////////////// // Interval implementation // ///////////////////////////// @@ -376,6 +382,7 @@ namespace samurai { return i1.start < i2.start; } + } // namespace samurai template diff --git a/include/samurai/level_cell_array.hpp b/include/samurai/level_cell_array.hpp index 5df8f2a78..30a94dedc 100644 --- a/include/samurai/level_cell_array.hpp +++ b/include/samurai/level_cell_array.hpp @@ -313,6 +313,14 @@ namespace samurai mutable coord_type m_index; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class LevelCellArray<1>; + extern template class LevelCellArray<2>; + extern template class LevelCellArray<3>; + /////////////////////////////////// // LevelCellArray implementation // /////////////////////////////////// @@ -1340,4 +1348,5 @@ namespace samurai { return it1.base().equal(it2.base()); } + } // namespace samurai diff --git a/include/samurai/level_cell_list.hpp b/include/samurai/level_cell_list.hpp index 153b09dbf..94b964136 100644 --- a/include/samurai/level_cell_list.hpp +++ b/include/samurai/level_cell_list.hpp @@ -48,7 +48,7 @@ namespace samurai SAMURAI_INLINE decltype(auto) access_grid_yz(GridYZ& grid_yz, const Index& index, std::integral_constant) { // For other dimensions, we dive into the nested std::map - return access_grid_yz(grid_yz[index[dim - 1]], index, std::integral_constant{}); + return access_grid_yz(grid_yz.at(index.at(dim - 1)), index, std::integral_constant{}); } } // namespace detail @@ -103,6 +103,14 @@ namespace samurai double m_scaling_factor = 1; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class LevelCellList<1>; + extern template class LevelCellList<2>; + extern template class LevelCellList<3>; + ////////////////////////////////// // LevelCellList implementation // ////////////////////////////////// diff --git a/include/samurai/list_of_intervals.hpp b/include/samurai/list_of_intervals.hpp index 2e7b43ef1..ee6913990 100644 --- a/include/samurai/list_of_intervals.hpp +++ b/include/samurai/list_of_intervals.hpp @@ -50,6 +50,7 @@ namespace samurai using list_t::begin; using list_t::cbegin; using list_t::cend; + using list_t::clear; using list_t::empty; using list_t::end; @@ -64,6 +65,12 @@ namespace samurai void add_interval(const interval_t& interval); }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class ListOfIntervals; + //////////////////////////////////// // ListOfIntervals implementation // //////////////////////////////////// diff --git a/include/samurai/mesh_interval.hpp b/include/samurai/mesh_interval.hpp index ae8cfa9cd..3a197b1da 100644 --- a/include/samurai/mesh_interval.hpp +++ b/include/samurai/mesh_interval.hpp @@ -37,6 +37,10 @@ namespace samurai } }; + extern template class MeshInterval<1, default_config::interval_t>; + extern template class MeshInterval<2, default_config::interval_t>; + extern template class MeshInterval<3, default_config::interval_t>; + template MeshInterval operator+(const MeshInterval& mi, const xt::xtensor_fixed>& translate) diff --git a/include/samurai/mr/adapt.hpp b/include/samurai/mr/adapt.hpp index 0bd4ee9ee..e85c45c4a 100644 --- a/include/samurai/mr/adapt.hpp +++ b/include/samurai/mr/adapt.hpp @@ -128,6 +128,188 @@ namespace samurai tag_t m_tag; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class Adapt, MRMeshId>>, float>>; + extern template class Adapt, MRMeshId>>, float>>; + extern template class Adapt, MRMeshId>>, float>>; + + extern template class Adapt, MRMeshId>>, double>>; + extern template class Adapt, MRMeshId>>, double>>; + extern template class Adapt, MRMeshId>>, double>>; + + extern template class Adapt, MRMeshId>>, long double>>; + extern template class Adapt, MRMeshId>>, long double>>; + extern template class Adapt, MRMeshId>>, long double>>; + + extern template class Adapt, MRMeshId>>, float>>; + extern template class Adapt, MRMeshId>>, float>>; + extern template class Adapt, MRMeshId>>, float>>; + + extern template class Adapt, MRMeshId>>, double>>; + extern template class Adapt, MRMeshId>>, double>>; + extern template class Adapt, MRMeshId>>, double>>; + + extern template class Adapt, MRMeshId>>, long double>>; + extern template class Adapt, MRMeshId>>, long double>>; + extern template class Adapt, MRMeshId>>, long double>>; + + extern template class Adapt, MRMeshId>>, float, 1, false>>; + extern template class Adapt, MRMeshId>>, float, 1, true>>; + extern template class Adapt, MRMeshId>>, float, 2, false>>; + extern template class Adapt, MRMeshId>>, float, 2, true>>; + extern template class Adapt, MRMeshId>>, float, 3, false>>; + extern template class Adapt, MRMeshId>>, float, 3, true>>; + + extern template class Adapt, MRMeshId>>, double, 1, false>>; + extern template class Adapt, MRMeshId>>, double, 1, true>>; + extern template class Adapt, MRMeshId>>, double, 2, false>>; + extern template class Adapt, MRMeshId>>, double, 2, true>>; + extern template class Adapt, MRMeshId>>, double, 3, false>>; + extern template class Adapt, MRMeshId>>, double, 3, true>>; + + extern template class Adapt, MRMeshId>>, long double, 1, false>>; + extern template class Adapt, MRMeshId>>, long double, 1, true>>; + extern template class Adapt, MRMeshId>>, long double, 2, false>>; + extern template class Adapt, MRMeshId>>, long double, 2, true>>; + extern template class Adapt, MRMeshId>>, long double, 3, false>>; + extern template class Adapt, MRMeshId>>, long double, 3, true>>; + + extern template class Adapt, MRMeshId>>, float, 1, false>>; + extern template class Adapt, MRMeshId>>, float, 1, true>>; + extern template class Adapt, MRMeshId>>, float, 2, false>>; + extern template class Adapt, MRMeshId>>, float, 2, true>>; + extern template class Adapt, MRMeshId>>, float, 3, false>>; + extern template class Adapt, MRMeshId>>, float, 3, true>>; + + extern template class Adapt, MRMeshId>>, double, 1, false>>; + extern template class Adapt, MRMeshId>>, double, 1, true>>; + extern template class Adapt, MRMeshId>>, double, 2, false>>; + extern template class Adapt, MRMeshId>>, double, 2, true>>; + extern template class Adapt, MRMeshId>>, double, 3, false>>; + extern template class Adapt, MRMeshId>>, double, 3, true>>; + + extern template class Adapt, MRMeshId>>, long double, 1, false>>; + extern template class Adapt, MRMeshId>>, long double, 1, true>>; + extern template class Adapt, MRMeshId>>, long double, 2, false>>; + extern template class Adapt, MRMeshId>>, long double, 2, true>>; + extern template class Adapt, MRMeshId>>, long double, 3, false>>; + extern template class Adapt, MRMeshId>>, long double, 3, true>>; + + //////////////////////////////////////////////////////////////////// + //// method imlementation + //////////////////////////////////////////////////////////////////// + template SAMURAI_INLINE Adapt::Adapt(PredictionFn&& prediction_fn, TField& field, TFields&... fields) : m_prediction_fn(std::forward(prediction_fn)) diff --git a/include/samurai/mr/mesh.hpp b/include/samurai/mr/mesh.hpp index 958a8823d..35929c995 100644 --- a/include/samurai/mr/mesh.hpp +++ b/include/samurai/mr/mesh.hpp @@ -113,6 +113,18 @@ namespace samurai xt::xtensor exists(mesh_id_t type, std::size_t level, interval_t interval, T... index) const; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class MRMesh, MRMeshId>>; + extern template class MRMesh, MRMeshId>>; + extern template class MRMesh, MRMeshId>>; + + //////////////////////////////////////////////////////////////////// + //// methods implementations + //////////////////////////////////////////////////////////////////// + template SAMURAI_INLINE MRMesh::MRMesh(const ca_type& ca, const self_type& ref_mesh) : base_type(ca, ref_mesh) @@ -149,61 +161,63 @@ namespace samurai { } - template - SAMURAI_INLINE MRMesh::MRMesh(const samurai::Box& b, - std::size_t min_level, - std::size_t max_level, - double approx_box_tol, - double scaling_factor_) - : base_type(b, - mesh_config() - .max_stencil_radius(Config::max_stencil_width) - .graduation_width(Config::graduation_width) - .start_level(max_level) - .min_level(min_level) - .max_level(max_level) - .approx_box_tol(approx_box_tol) - .scaling_factor(scaling_factor_)) - { - } + /* + template + SAMURAI_INLINE MRMesh::MRMesh(const samurai::Box& b, + std::size_t min_level, + std::size_t max_level, + double approx_box_tol, + double scaling_factor_) + : base_type(b, + mesh_config() + .max_stencil_radius(Config::max_stencil_width) + .graduation_width(Config::graduation_width) + .start_level(max_level) + .min_level(min_level) + .max_level(max_level) + .approx_box_tol(approx_box_tol) + .scaling_factor(scaling_factor_)) + { + } - template - SAMURAI_INLINE MRMesh::MRMesh(const samurai::DomainBuilder& domain_builder, - std::size_t min_level, - std::size_t max_level, - double approx_box_tol, - double scaling_factor_) - : base_type(domain_builder, - mesh_config() - .max_stencil_radius(Config::max_stencil_width) - .graduation_width(Config::graduation_width) - .start_level(max_level) - .min_level(min_level) - .max_level(max_level) - .approx_box_tol(approx_box_tol) - .scaling_factor(scaling_factor_)) - { - } + template + SAMURAI_INLINE MRMesh::MRMesh(const samurai::DomainBuilder& domain_builder, + std::size_t min_level, + std::size_t max_level, + double approx_box_tol, + double scaling_factor_) + : base_type(domain_builder, + mesh_config() + .max_stencil_radius(Config::max_stencil_width) + .graduation_width(Config::graduation_width) + .start_level(max_level) + .min_level(min_level) + .max_level(max_level) + .approx_box_tol(approx_box_tol) + .scaling_factor(scaling_factor_)) + { + } - template - SAMURAI_INLINE MRMesh::MRMesh(const samurai::Box& b, - std::size_t min_level, - std::size_t max_level, - const std::array& periodic, - double approx_box_tol, - double scaling_factor_) - : base_type(b, - mesh_config() - .max_stencil_radius(Config::max_stencil_width) - .graduation_width(Config::graduation_width) - .start_level(max_level) - .min_level(min_level) - .max_level(max_level) - .periodic(periodic) - .approx_box_tol(approx_box_tol) - .scaling_factor(scaling_factor_)) - { - } + template + SAMURAI_INLINE MRMesh::MRMesh(const samurai::Box& b, + std::size_t min_level, + std::size_t max_level, + const std::array& periodic, + double approx_box_tol, + double scaling_factor_) + : base_type(b, + mesh_config() + .max_stencil_radius(Config::max_stencil_width) + .graduation_width(Config::graduation_width) + .start_level(max_level) + .min_level(min_level) + .max_level(max_level) + .periodic(periodic) + .approx_box_tol(approx_box_tol) + .scaling_factor(scaling_factor_)) + { + } + */ template SAMURAI_INLINE void MRMesh::update_sub_mesh_impl() diff --git a/include/samurai/reconstruction.hpp b/include/samurai/reconstruction.hpp index 785bc3a52..b5093e75c 100644 --- a/include/samurai/reconstruction.hpp +++ b/include/samurai/reconstruction.hpp @@ -54,6 +54,7 @@ namespace samurai return coeff[k]; } + /* double& get(std::array index) { return (*this)(index[0]); @@ -68,7 +69,7 @@ namespace samurai { return (*this)(index[0], index[1], index[2]); } - + */ prediction_map& operator+=(const prediction_map& p) { for (const auto& c : p.coeff) @@ -134,6 +135,18 @@ namespace samurai std::unordered_map, double, ArrayHash> coeff; }; + //////////////////////////////////////////////////////////////////// + //// explicit instanciation + //////////////////////////////////////////////////////////////////// + + extern template class prediction_map<1>; + extern template class prediction_map<2>; + extern template class prediction_map<3>; + + //////////////////////////////////////////////////////////////////// + //// methods implementations + //////////////////////////////////////////////////////////////////// + template auto operator+(const prediction_map& p1, const prediction_map& p2) { @@ -499,6 +512,10 @@ namespace samurai } }; + extern template class reconstruction_op_<1, default_config::interval_t>; + extern template class reconstruction_op_<2, default_config::interval_t>; + extern template class reconstruction_op_<3, default_config::interval_t>; + template SAMURAI_INLINE auto make_reconstruction(std::size_t& reconstruct_level, T1&& reconstruct_field, T2&& field) { @@ -936,4 +953,5 @@ namespace samurai } } } + } diff --git a/include/samurai/stencil_field.hpp b/include/samurai/stencil_field.hpp index 474567a75..7e1d7b1c8 100644 --- a/include/samurai/stencil_field.hpp +++ b/include/samurai/stencil_field.hpp @@ -172,6 +172,10 @@ namespace samurai } }; + extern template class upwind_op<1, default_config::interval_t>; + extern template class upwind_op<2, default_config::interval_t>; + extern template class upwind_op<3, default_config::interval_t>; + template SAMURAI_INLINE auto upwind(CT&&... e) { @@ -242,6 +246,10 @@ namespace samurai } }; + extern template class upwind_scalar_burgers_op<1, default_config::interval_t>; + extern template class upwind_scalar_burgers_op<2, default_config::interval_t>; + extern template class upwind_scalar_burgers_op<3, default_config::interval_t>; + template SAMURAI_INLINE auto upwind_scalar_burgers(CT&&... e) { diff --git a/src/samurai/array_of_interval_and_point.cpp b/src/samurai/array_of_interval_and_point.cpp index 8a4014469..d2c105946 100644 --- a/src/samurai/array_of_interval_and_point.cpp +++ b/src/samurai/array_of_interval_and_point.cpp @@ -1,10 +1,17 @@ -#include "array_of_interval_and_point.hpp" +#include // for stable_sort +#include // size_t +#include // for iota +#include // pair +#include +#include // for coord_type + +#include "samurai/array_of_interval_and_point.hpp" +#include "samurai/interval.hpp" +#include "samurai/samurai_config.hpp" namespace samurai { - - template class ArrayOfIntervalAndPoint::coords_t>; - template class ArrayOfIntervalAndPoint::coords_t>; - template class ArrayOfIntervalAndPoint::coords_t>; - + template class ArrayOfIntervalAndPoint>>; + template class ArrayOfIntervalAndPoint>>; + template class ArrayOfIntervalAndPoint>>; } // namespace samurai diff --git a/src/samurai/box.cpp b/src/samurai/box.cpp index 11245a5c0..6ae307a4b 100644 --- a/src/samurai/box.cpp +++ b/src/samurai/box.cpp @@ -1,4 +1,4 @@ -#include "box.hpp" +#include "samurai/box.hpp" namespace samurai { diff --git a/src/samurai/cell.cpp b/src/samurai/cell.cpp index 9c5ff2770..9d9574c00 100644 --- a/src/samurai/cell.cpp +++ b/src/samurai/cell.cpp @@ -1,4 +1,4 @@ -#include "cell.hpp" +#include "samurai/cell.hpp" namespace samurai { diff --git a/src/samurai/cell_array.cpp b/src/samurai/cell_array.cpp index feee33446..aa700b8fd 100644 --- a/src/samurai/cell_array.cpp +++ b/src/samurai/cell_array.cpp @@ -1,10 +1,11 @@ -#include "cell_array.hpp" +#include "samurai/cell_array.hpp" +#include "samurai/interval.hpp" namespace samurai { - template class CellArray<1, default_config::interval_t, default_config::max_level>; - template class CellArray<2, default_config::interval_t, default_config::max_level>; - template class CellArray<3, default_config::interval_t, default_config::max_level>; + template class CellArray<1>; + template class CellArray<2>; + template class CellArray<3>; } // namespace samurai diff --git a/src/samurai/cell_list.cpp b/src/samurai/cell_list.cpp index 62c80de2f..80d0dc5f3 100644 --- a/src/samurai/cell_list.cpp +++ b/src/samurai/cell_list.cpp @@ -1,10 +1,11 @@ -#include "cell_list.hpp" +#include "samurai/cell_list.hpp" +#include "samurai/interval.hpp" namespace samurai { - template class CellList<1, default_config::interval_t, default_config::max_level>; - template class CellList<2, default_config::interval_t, default_config::max_level>; - template class CellList<3, default_config::interval_t, default_config::max_level>; + template class CellList<1>; + template class CellList<2>; + template class CellList<3>; } // namespace samurai diff --git a/src/samurai/field/scalar_field.cpp b/src/samurai/field/scalar_field.cpp new file mode 100644 index 000000000..1eba1ba04 --- /dev/null +++ b/src/samurai/field/scalar_field.cpp @@ -0,0 +1,16 @@ +#include "samurai/field/scalar_field.hpp" + +namespace samurai +{ + template class ScalarField, MRMeshId>>, float>; + template class ScalarField, MRMeshId>>, float>; + template class ScalarField, MRMeshId>>, float>; + + template class ScalarField, MRMeshId>>, double>; + template class ScalarField, MRMeshId>>, double>; + template class ScalarField, MRMeshId>>, double>; + + template class ScalarField, MRMeshId>>, long double>; + template class ScalarField, MRMeshId>>, long double>; + template class ScalarField, MRMeshId>>, long double>; +} // namespace samurai diff --git a/src/samurai/field/vector_field.cpp b/src/samurai/field/vector_field.cpp new file mode 100644 index 000000000..307acca8e --- /dev/null +++ b/src/samurai/field/vector_field.cpp @@ -0,0 +1,25 @@ +#include "samurai/field/vector_field.hpp" + +namespace samurai +{ + template class VectorField, MRMeshId>>, float, 1, false>; + template class VectorField, MRMeshId>>, float, 1, true>; + template class VectorField, MRMeshId>>, float, 2, false>; + template class VectorField, MRMeshId>>, float, 2, true>; + template class VectorField, MRMeshId>>, float, 3, false>; + template class VectorField, MRMeshId>>, float, 3, true>; + + template class VectorField, MRMeshId>>, double, 1, false>; + template class VectorField, MRMeshId>>, double, 1, true>; + template class VectorField, MRMeshId>>, double, 2, false>; + template class VectorField, MRMeshId>>, double, 2, true>; + template class VectorField, MRMeshId>>, double, 3, false>; + template class VectorField, MRMeshId>>, double, 3, true>; + + template class VectorField, MRMeshId>>, long double, 1, false>; + template class VectorField, MRMeshId>>, long double, 1, true>; + template class VectorField, MRMeshId>>, long double, 2, false>; + template class VectorField, MRMeshId>>, long double, 2, true>; + template class VectorField, MRMeshId>>, long double, 3, false>; + template class VectorField, MRMeshId>>, long double, 3, true>; +} // namespace samurai diff --git a/src/samurai/interval.cpp b/src/samurai/interval.cpp new file mode 100644 index 000000000..b3fc1d09d --- /dev/null +++ b/src/samurai/interval.cpp @@ -0,0 +1,8 @@ +#include "samurai/interval.hpp" + +namespace samurai +{ + + template class Interval; + +} // namespace samurai diff --git a/src/samurai/level_cell_array.cpp b/src/samurai/level_cell_array.cpp new file mode 100644 index 000000000..da79e91fb --- /dev/null +++ b/src/samurai/level_cell_array.cpp @@ -0,0 +1,11 @@ +#include "samurai/level_cell_array.hpp" +#include "samurai/interval.hpp" + +namespace samurai +{ + + template class LevelCellArray<1>; + template class LevelCellArray<2>; + template class LevelCellArray<3>; + +} // namespace samurai diff --git a/src/samurai/level_cell_list.cpp b/src/samurai/level_cell_list.cpp new file mode 100644 index 000000000..77cab6647 --- /dev/null +++ b/src/samurai/level_cell_list.cpp @@ -0,0 +1,11 @@ +#include "samurai/level_cell_list.hpp" +#include "samurai/interval.hpp" + +namespace samurai +{ + + template class LevelCellList<1>; + template class LevelCellList<2>; + template class LevelCellList<3>; + +} // namespace samurai diff --git a/src/samurai/list_of_intervals.cpp b/src/samurai/list_of_intervals.cpp new file mode 100644 index 000000000..10729f3aa --- /dev/null +++ b/src/samurai/list_of_intervals.cpp @@ -0,0 +1,9 @@ +#include "samurai/list_of_intervals.hpp" +#include "samurai/interval.hpp" + +namespace samurai +{ + + template class ListOfIntervals; + +} // namespace samurai diff --git a/src/samurai/mesh_interval.cpp b/src/samurai/mesh_interval.cpp new file mode 100644 index 000000000..87301d027 --- /dev/null +++ b/src/samurai/mesh_interval.cpp @@ -0,0 +1,11 @@ +#include "samurai/mesh_interval.hpp" +#include "samurai/interval.hpp" + +namespace samurai +{ + + template class MeshInterval<1, default_config::interval_t>; + template class MeshInterval<2, default_config::interval_t>; + template class MeshInterval<3, default_config::interval_t>; + +} // namespace samurai diff --git a/src/samurai/mr/adapt.cpp b/src/samurai/mr/adapt.cpp new file mode 100644 index 000000000..576c31235 --- /dev/null +++ b/src/samurai/mr/adapt.cpp @@ -0,0 +1,178 @@ +#include "samurai/mr/adapt.hpp" + +namespace samurai +{ + template class Adapt, MRMeshId>>, float>>; + template class Adapt, MRMeshId>>, float>>; + template class Adapt, MRMeshId>>, float>>; + + template class Adapt, MRMeshId>>, double>>; + template class Adapt, MRMeshId>>, double>>; + template class Adapt, MRMeshId>>, double>>; + + template class Adapt, MRMeshId>>, long double>>; + template class Adapt, MRMeshId>>, long double>>; + template class Adapt, MRMeshId>>, long double>>; + + template class Adapt, MRMeshId>>, float>>; + template class Adapt, MRMeshId>>, float>>; + template class Adapt, MRMeshId>>, float>>; + + template class Adapt, MRMeshId>>, double>>; + template class Adapt, MRMeshId>>, double>>; + template class Adapt, MRMeshId>>, double>>; + + template class Adapt, MRMeshId>>, long double>>; + template class Adapt, MRMeshId>>, long double>>; + template class Adapt, MRMeshId>>, long double>>; + + template class Adapt, MRMeshId>>, float, 1, false>>; + template class Adapt, MRMeshId>>, float, 1, true>>; + template class Adapt, MRMeshId>>, float, 2, false>>; + template class Adapt, MRMeshId>>, float, 2, true>>; + template class Adapt, MRMeshId>>, float, 3, false>>; + template class Adapt, MRMeshId>>, float, 3, true>>; + + template class Adapt, MRMeshId>>, double, 1, false>>; + template class Adapt, MRMeshId>>, double, 1, true>>; + template class Adapt, MRMeshId>>, double, 2, false>>; + template class Adapt, MRMeshId>>, double, 2, true>>; + template class Adapt, MRMeshId>>, double, 3, false>>; + template class Adapt, MRMeshId>>, double, 3, true>>; + + template class Adapt, MRMeshId>>, long double, 1, false>>; + template class Adapt, MRMeshId>>, long double, 1, true>>; + template class Adapt, MRMeshId>>, long double, 2, false>>; + template class Adapt, MRMeshId>>, long double, 2, true>>; + template class Adapt, MRMeshId>>, long double, 3, false>>; + template class Adapt, MRMeshId>>, long double, 3, true>>; + + template class Adapt, MRMeshId>>, float, 1, false>>; + template class Adapt, MRMeshId>>, float, 1, true>>; + template class Adapt, MRMeshId>>, float, 2, false>>; + template class Adapt, MRMeshId>>, float, 2, true>>; + template class Adapt, MRMeshId>>, float, 3, false>>; + template class Adapt, MRMeshId>>, float, 3, true>>; + + template class Adapt, MRMeshId>>, double, 1, false>>; + template class Adapt, MRMeshId>>, double, 1, true>>; + template class Adapt, MRMeshId>>, double, 2, false>>; + template class Adapt, MRMeshId>>, double, 2, true>>; + template class Adapt, MRMeshId>>, double, 3, false>>; + template class Adapt, MRMeshId>>, double, 3, true>>; + + template class Adapt, MRMeshId>>, long double, 1, false>>; + template class Adapt, MRMeshId>>, long double, 1, true>>; + template class Adapt, MRMeshId>>, long double, 2, false>>; + template class Adapt, MRMeshId>>, long double, 2, true>>; + template class Adapt, MRMeshId>>, long double, 3, false>>; + template class Adapt, MRMeshId>>, long double, 3, true>>; +} // namespace samurai diff --git a/src/samurai/mr/mesh.cpp b/src/samurai/mr/mesh.cpp new file mode 100644 index 000000000..a9c6eb5fd --- /dev/null +++ b/src/samurai/mr/mesh.cpp @@ -0,0 +1,8 @@ +#include "samurai/mr/mesh.hpp" + +namespace samurai +{ + template class MRMesh, MRMeshId>>; + template class MRMesh, MRMeshId>>; + template class MRMesh, MRMeshId>>; +} diff --git a/src/samurai/reconstruction.cpp b/src/samurai/reconstruction.cpp new file mode 100644 index 000000000..b60295c79 --- /dev/null +++ b/src/samurai/reconstruction.cpp @@ -0,0 +1,15 @@ +#include "samurai/reconstruction.hpp" +#include "samurai/interval.hpp" + +namespace samurai +{ + + template class prediction_map<1>; + template class prediction_map<2>; + template class prediction_map<3>; + + template class reconstruction_op_<1, default_config::interval_t>; + template class reconstruction_op_<2, default_config::interval_t>; + template class reconstruction_op_<3, default_config::interval_t>; + +} // namespace samurai diff --git a/src/samurai/stencil_field.cpp b/src/samurai/stencil_field.cpp new file mode 100644 index 000000000..ba4321090 --- /dev/null +++ b/src/samurai/stencil_field.cpp @@ -0,0 +1,14 @@ +#include "samurai/stencil_field.hpp" + +namespace samurai +{ + + template class upwind_op<1, default_config::interval_t>; + template class upwind_op<2, default_config::interval_t>; + template class upwind_op<3, default_config::interval_t>; + + template class upwind_scalar_burgers_op<1, default_config::interval_t>; + template class upwind_scalar_burgers_op<2, default_config::interval_t>; + template class upwind_scalar_burgers_op<3, default_config::interval_t>; + +} // namespace samurai From 0135ed350868408175bf33e8eb4b3e4f78dcda95 Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Tue, 3 Feb 2026 17:39:05 +0100 Subject: [PATCH 3/9] fixed mesh_interval compile error --- include/samurai/mesh_interval.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/samurai/mesh_interval.hpp b/include/samurai/mesh_interval.hpp index 3a197b1da..1d37942e1 100644 --- a/include/samurai/mesh_interval.hpp +++ b/include/samurai/mesh_interval.hpp @@ -2,6 +2,8 @@ #include #include +#include "samurai_config.hpp" + using namespace xt::placeholders; namespace samurai From 4fa07a353f7d5db801f9148e1d77328dee9bee39 Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Tue, 3 Feb 2026 17:40:28 +0100 Subject: [PATCH 4/9] fixed mesh_interval compile error --- include/samurai/mesh_interval.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/samurai/mesh_interval.hpp b/include/samurai/mesh_interval.hpp index 1d37942e1..7cc5cd583 100644 --- a/include/samurai/mesh_interval.hpp +++ b/include/samurai/mesh_interval.hpp @@ -2,6 +2,7 @@ #include #include +#include "interval.hpp" #include "samurai_config.hpp" using namespace xt::placeholders; From df351bbdc0744cad293c032adb5083064926567f Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Tue, 17 Mar 2026 16:10:23 +0100 Subject: [PATCH 5/9] minor stuff --- include/samurai/interval.hpp | 2 +- include/samurai/list_of_intervals.hpp | 2 +- include/samurai/mesh_interval.hpp | 6 +++--- src/samurai/interval.cpp | 2 +- src/samurai/list_of_intervals.cpp | 2 +- src/samurai/mesh_interval.cpp | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/samurai/interval.hpp b/include/samurai/interval.hpp index 70ee10f04..0e239dba7 100644 --- a/include/samurai/interval.hpp +++ b/include/samurai/interval.hpp @@ -103,7 +103,7 @@ namespace samurai //// explicit instanciation //////////////////////////////////////////////////////////////////// - extern template class Interval; + extern template struct Interval; ///////////////////////////// // Interval implementation // diff --git a/include/samurai/list_of_intervals.hpp b/include/samurai/list_of_intervals.hpp index ee6913990..5b8e308bf 100644 --- a/include/samurai/list_of_intervals.hpp +++ b/include/samurai/list_of_intervals.hpp @@ -69,7 +69,7 @@ namespace samurai //// explicit instanciation //////////////////////////////////////////////////////////////////// - extern template class ListOfIntervals; + extern template struct ListOfIntervals; //////////////////////////////////// // ListOfIntervals implementation // diff --git a/include/samurai/mesh_interval.hpp b/include/samurai/mesh_interval.hpp index 7cc5cd583..7ecc290c4 100644 --- a/include/samurai/mesh_interval.hpp +++ b/include/samurai/mesh_interval.hpp @@ -40,9 +40,9 @@ namespace samurai } }; - extern template class MeshInterval<1, default_config::interval_t>; - extern template class MeshInterval<2, default_config::interval_t>; - extern template class MeshInterval<3, default_config::interval_t>; + extern template struct MeshInterval<1, default_config::interval_t>; + extern template struct MeshInterval<2, default_config::interval_t>; + extern template struct MeshInterval<3, default_config::interval_t>; template MeshInterval diff --git a/src/samurai/interval.cpp b/src/samurai/interval.cpp index b3fc1d09d..4a80b4a4b 100644 --- a/src/samurai/interval.cpp +++ b/src/samurai/interval.cpp @@ -3,6 +3,6 @@ namespace samurai { - template class Interval; + template struct Interval; } // namespace samurai diff --git a/src/samurai/list_of_intervals.cpp b/src/samurai/list_of_intervals.cpp index 10729f3aa..6a50a7f5d 100644 --- a/src/samurai/list_of_intervals.cpp +++ b/src/samurai/list_of_intervals.cpp @@ -4,6 +4,6 @@ namespace samurai { - template class ListOfIntervals; + template struct ListOfIntervals; } // namespace samurai diff --git a/src/samurai/mesh_interval.cpp b/src/samurai/mesh_interval.cpp index 87301d027..810622f30 100644 --- a/src/samurai/mesh_interval.cpp +++ b/src/samurai/mesh_interval.cpp @@ -4,8 +4,8 @@ namespace samurai { - template class MeshInterval<1, default_config::interval_t>; - template class MeshInterval<2, default_config::interval_t>; - template class MeshInterval<3, default_config::interval_t>; + template struct MeshInterval<1, default_config::interval_t>; + template struct MeshInterval<2, default_config::interval_t>; + template struct MeshInterval<3, default_config::interval_t>; } // namespace samurai From e07d7f0d94a2923d569071efdc28c8f957cdb2a3 Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Wed, 18 Mar 2026 11:45:23 +0100 Subject: [PATCH 6/9] merge --- include/samurai/field/scalar_field.hpp | 22 ++- include/samurai/field/vector_field.hpp | 40 ++--- include/samurai/mr/adapt.hpp | 238 +++++++------------------ include/samurai/mr/mesh.hpp | 122 +------------ src/samurai/field/scalar_field.cpp | 18 +- src/samurai/field/vector_field.cpp | 36 ++-- src/samurai/mr/adapt.cpp | 216 ++++++---------------- src/samurai/mr/mesh.cpp | 6 +- 8 files changed, 185 insertions(+), 513 deletions(-) diff --git a/include/samurai/field/scalar_field.hpp b/include/samurai/field/scalar_field.hpp index 54e6d26a2..559b6418e 100644 --- a/include/samurai/field/scalar_field.hpp +++ b/include/samurai/field/scalar_field.hpp @@ -114,17 +114,21 @@ namespace samurai //// explicit instanciation //////////////////////////////////////////////////////////////////// - extern template class ScalarField, MRMeshId>>, float>; - extern template class ScalarField, MRMeshId>>, float>; - extern template class ScalarField, MRMeshId>>, float>; + extern template class ScalarField>, float>; + extern template class ScalarField>, float>; + extern template class ScalarField>, float>; - extern template class ScalarField, MRMeshId>>, double>; - extern template class ScalarField, MRMeshId>>, double>; - extern template class ScalarField, MRMeshId>>, double>; + extern template class ScalarField>, double>; + extern template class ScalarField>, double>; + extern template class ScalarField>, double>; - extern template class ScalarField, MRMeshId>>, long double>; - extern template class ScalarField, MRMeshId>>, long double>; - extern template class ScalarField, MRMeshId>>, long double>; + extern template class ScalarField>, long double>; + extern template class ScalarField>, long double>; + extern template class ScalarField>, long double>; + + //////////////////////////////////////////////////////////////////// + //// methods implementations + //////////////////////////////////////////////////////////////////// // ScalarField constructors ----------------------------------------------- diff --git a/include/samurai/field/vector_field.hpp b/include/samurai/field/vector_field.hpp index 6e09445c8..97c580ca9 100644 --- a/include/samurai/field/vector_field.hpp +++ b/include/samurai/field/vector_field.hpp @@ -178,26 +178,26 @@ namespace samurai //// explicit instanciation //////////////////////////////////////////////////////////////////// - extern template class VectorField, MRMeshId>>, float, 1, false>; - extern template class VectorField, MRMeshId>>, float, 1, true>; - extern template class VectorField, MRMeshId>>, float, 2, false>; - extern template class VectorField, MRMeshId>>, float, 2, true>; - extern template class VectorField, MRMeshId>>, float, 3, false>; - extern template class VectorField, MRMeshId>>, float, 3, true>; - - extern template class VectorField, MRMeshId>>, double, 1, false>; - extern template class VectorField, MRMeshId>>, double, 1, true>; - extern template class VectorField, MRMeshId>>, double, 2, false>; - extern template class VectorField, MRMeshId>>, double, 2, true>; - extern template class VectorField, MRMeshId>>, double, 3, false>; - extern template class VectorField, MRMeshId>>, double, 3, true>; - - extern template class VectorField, MRMeshId>>, long double, 1, false>; - extern template class VectorField, MRMeshId>>, long double, 1, true>; - extern template class VectorField, MRMeshId>>, long double, 2, false>; - extern template class VectorField, MRMeshId>>, long double, 2, true>; - extern template class VectorField, MRMeshId>>, long double, 3, false>; - extern template class VectorField, MRMeshId>>, long double, 3, true>; + extern template class VectorField>, float, 1, false>; + extern template class VectorField>, float, 1, true>; + extern template class VectorField>, float, 2, false>; + extern template class VectorField>, float, 2, true>; + extern template class VectorField>, float, 3, false>; + extern template class VectorField>, float, 3, true>; + + extern template class VectorField>, double, 1, false>; + extern template class VectorField>, double, 1, true>; + extern template class VectorField>, double, 2, false>; + extern template class VectorField>, double, 2, true>; + extern template class VectorField>, double, 3, false>; + extern template class VectorField>, double, 3, true>; + + extern template class VectorField>, long double, 1, false>; + extern template class VectorField>, long double, 1, true>; + extern template class VectorField>, long double, 2, false>; + extern template class VectorField>, long double, 2, true>; + extern template class VectorField>, long double, 3, false>; + extern template class VectorField>, long double, 3, true>; // VectorField constructors ----------------------------------------------- diff --git a/include/samurai/mr/adapt.hpp b/include/samurai/mr/adapt.hpp index 8fc6ae3ae..e13247cfa 100644 --- a/include/samurai/mr/adapt.hpp +++ b/include/samurai/mr/adapt.hpp @@ -137,179 +137,71 @@ namespace samurai //// explicit instanciation //////////////////////////////////////////////////////////////////// - extern template class Adapt, MRMeshId>>, float>>; - extern template class Adapt, MRMeshId>>, float>>; - extern template class Adapt, MRMeshId>>, float>>; - - extern template class Adapt, MRMeshId>>, double>>; - extern template class Adapt, MRMeshId>>, double>>; - extern template class Adapt, MRMeshId>>, double>>; - - extern template class Adapt, MRMeshId>>, long double>>; - extern template class Adapt, MRMeshId>>, long double>>; - extern template class Adapt, MRMeshId>>, long double>>; - - extern template class Adapt, MRMeshId>>, float>>; - extern template class Adapt, MRMeshId>>, float>>; - extern template class Adapt, MRMeshId>>, float>>; - - extern template class Adapt, MRMeshId>>, double>>; - extern template class Adapt, MRMeshId>>, double>>; - extern template class Adapt, MRMeshId>>, double>>; - - extern template class Adapt, MRMeshId>>, long double>>; - extern template class Adapt, MRMeshId>>, long double>>; - extern template class Adapt, MRMeshId>>, long double>>; - - extern template class Adapt, MRMeshId>>, float, 1, false>>; - extern template class Adapt, MRMeshId>>, float, 1, true>>; - extern template class Adapt, MRMeshId>>, float, 2, false>>; - extern template class Adapt, MRMeshId>>, float, 2, true>>; - extern template class Adapt, MRMeshId>>, float, 3, false>>; - extern template class Adapt, MRMeshId>>, float, 3, true>>; - - extern template class Adapt, MRMeshId>>, double, 1, false>>; - extern template class Adapt, MRMeshId>>, double, 1, true>>; - extern template class Adapt, MRMeshId>>, double, 2, false>>; - extern template class Adapt, MRMeshId>>, double, 2, true>>; - extern template class Adapt, MRMeshId>>, double, 3, false>>; - extern template class Adapt, MRMeshId>>, double, 3, true>>; - - extern template class Adapt, MRMeshId>>, long double, 1, false>>; - extern template class Adapt, MRMeshId>>, long double, 1, true>>; - extern template class Adapt, MRMeshId>>, long double, 2, false>>; - extern template class Adapt, MRMeshId>>, long double, 2, true>>; - extern template class Adapt, MRMeshId>>, long double, 3, false>>; - extern template class Adapt, MRMeshId>>, long double, 3, true>>; - - extern template class Adapt, MRMeshId>>, float, 1, false>>; - extern template class Adapt, MRMeshId>>, float, 1, true>>; - extern template class Adapt, MRMeshId>>, float, 2, false>>; - extern template class Adapt, MRMeshId>>, float, 2, true>>; - extern template class Adapt, MRMeshId>>, float, 3, false>>; - extern template class Adapt, MRMeshId>>, float, 3, true>>; - - extern template class Adapt, MRMeshId>>, double, 1, false>>; - extern template class Adapt, MRMeshId>>, double, 1, true>>; - extern template class Adapt, MRMeshId>>, double, 2, false>>; - extern template class Adapt, MRMeshId>>, double, 2, true>>; - extern template class Adapt, MRMeshId>>, double, 3, false>>; - extern template class Adapt, MRMeshId>>, double, 3, true>>; - - extern template class Adapt, MRMeshId>>, long double, 1, false>>; - extern template class Adapt, MRMeshId>>, long double, 1, true>>; - extern template class Adapt, MRMeshId>>, long double, 2, false>>; - extern template class Adapt, MRMeshId>>, long double, 2, true>>; - extern template class Adapt, MRMeshId>>, long double, 3, false>>; - extern template class Adapt, MRMeshId>>, long double, 3, true>>; + extern template class Adapt>, float>>; + extern template class Adapt>, float>>; + extern template class Adapt>, float>>; + + extern template class Adapt>, double>>; + extern template class Adapt>, double>>; + extern template class Adapt>, double>>; + + extern template class Adapt>, long double>>; + extern template class Adapt>, long double>>; + extern template class Adapt>, long double>>; + + extern template class Adapt>, float>>; + extern template class Adapt>, float>>; + extern template class Adapt>, float>>; + + extern template class Adapt>, double>>; + extern template class Adapt>, double>>; + extern template class Adapt>, double>>; + + extern template class Adapt>, long double>>; + extern template class Adapt>, long double>>; + extern template class Adapt>, long double>>; + + extern template class Adapt>, float, 1, false>>; + extern template class Adapt>, float, 1, true>>; + extern template class Adapt>, float, 2, false>>; + extern template class Adapt>, float, 2, true>>; + extern template class Adapt>, float, 3, false>>; + extern template class Adapt>, float, 3, true>>; + + extern template class Adapt>, double, 1, false>>; + extern template class Adapt>, double, 1, true>>; + extern template class Adapt>, double, 2, false>>; + extern template class Adapt>, double, 2, true>>; + extern template class Adapt>, double, 3, false>>; + extern template class Adapt>, double, 3, true>>; + + extern template class Adapt>, long double, 1, false>>; + extern template class Adapt>, long double, 1, true>>; + extern template class Adapt>, long double, 2, false>>; + extern template class Adapt>, long double, 2, true>>; + extern template class Adapt>, long double, 3, false>>; + extern template class Adapt>, long double, 3, true>>; + + extern template class Adapt>, float, 1, false>>; + extern template class Adapt>, float, 1, true>>; + extern template class Adapt>, float, 2, false>>; + extern template class Adapt>, float, 2, true>>; + extern template class Adapt>, float, 3, false>>; + extern template class Adapt>, float, 3, true>>; + + extern template class Adapt>, double, 1, false>>; + extern template class Adapt>, double, 1, true>>; + extern template class Adapt>, double, 2, false>>; + extern template class Adapt>, double, 2, true>>; + extern template class Adapt>, double, 3, false>>; + extern template class Adapt>, double, 3, true>>; + + extern template class Adapt>, long double, 1, false>>; + extern template class Adapt>, long double, 1, true>>; + extern template class Adapt>, long double, 2, false>>; + extern template class Adapt>, long double, 2, true>>; + extern template class Adapt>, long double, 3, false>>; + extern template class Adapt>, long double, 3, true>>; //////////////////////////////////////////////////////////////////// //// method imlementation diff --git a/include/samurai/mr/mesh.hpp b/include/samurai/mr/mesh.hpp index c0cdfbddb..57e4e6336 100644 --- a/include/samurai/mr/mesh.hpp +++ b/include/samurai/mr/mesh.hpp @@ -130,9 +130,9 @@ namespace samurai //// explicit instanciation //////////////////////////////////////////////////////////////////// - extern template class MRMesh, MRMeshId>>; - extern template class MRMesh, MRMeshId>>; - extern template class MRMesh, MRMeshId>>; + extern template class MRMesh>; + extern template class MRMesh>; + extern template class MRMesh>; //////////////////////////////////////////////////////////////////// //// methods implementations @@ -174,122 +174,6 @@ namespace samurai { } -<<<<<<< precompile_some_classes - /* - template - SAMURAI_INLINE MRMesh::MRMesh(const samurai::Box& b, - std::size_t min_level, - std::size_t max_level, - double approx_box_tol, - double scaling_factor_) - : base_type(b, - mesh_config() - .max_stencil_radius(Config::max_stencil_width) - .graduation_width(Config::graduation_width) - .start_level(max_level) - .min_level(min_level) - .max_level(max_level) - .approx_box_tol(approx_box_tol) - .scaling_factor(scaling_factor_)) - { - } - - template - SAMURAI_INLINE MRMesh::MRMesh(const samurai::DomainBuilder& domain_builder, - std::size_t min_level, - std::size_t max_level, - double approx_box_tol, - double scaling_factor_) - : base_type(domain_builder, - mesh_config() - .max_stencil_radius(Config::max_stencil_width) - .graduation_width(Config::graduation_width) - .start_level(max_level) - .min_level(min_level) - .max_level(max_level) - .approx_box_tol(approx_box_tol) - .scaling_factor(scaling_factor_)) - { - } - - template - SAMURAI_INLINE MRMesh::MRMesh(const samurai::Box& b, - std::size_t min_level, - std::size_t max_level, - const std::array& periodic, - double approx_box_tol, - double scaling_factor_) - : base_type(b, - mesh_config() - .max_stencil_radius(Config::max_stencil_width) - .graduation_width(Config::graduation_width) - .start_level(max_level) - .min_level(min_level) - .max_level(max_level) - .periodic(periodic) - .approx_box_tol(approx_box_tol) - .scaling_factor(scaling_factor_)) - { - } - */ -======= - template - SAMURAI_INLINE MRMesh::MRMesh(const samurai::Box& b, - std::size_t min_level, - std::size_t max_level, - double approx_box_tol, - double scaling_factor_) - : base_type(b, - mesh_config() - .max_stencil_radius(config_t::max_stencil_width) - .graduation_width(config_t::graduation_width) - .start_level(max_level) - .min_level(min_level) - .max_level(max_level) - .approx_box_tol(approx_box_tol) - .scaling_factor(scaling_factor_)) - { - } - - template - SAMURAI_INLINE MRMesh::MRMesh(const samurai::DomainBuilder& domain_builder, - std::size_t min_level, - std::size_t max_level, - double approx_box_tol, - double scaling_factor_) - : base_type(domain_builder, - mesh_config() - .max_stencil_radius(config_t::max_stencil_width) - .graduation_width(config_t::graduation_width) - .start_level(max_level) - .min_level(min_level) - .max_level(max_level) - .approx_box_tol(approx_box_tol) - .scaling_factor(scaling_factor_)) - { - } - - template - SAMURAI_INLINE MRMesh::MRMesh(const samurai::Box& b, - std::size_t min_level, - std::size_t max_level, - const std::array& periodic, - double approx_box_tol, - double scaling_factor_) - : base_type(b, - mesh_config() - .max_stencil_radius(config_t::max_stencil_width) - .graduation_width(config_t::graduation_width) - .start_level(max_level) - .min_level(min_level) - .max_level(max_level) - .periodic(periodic) - .approx_box_tol(approx_box_tol) - .scaling_factor(scaling_factor_)) - { - } ->>>>>>> main - template SAMURAI_INLINE void MRMesh::update_sub_mesh_impl() { diff --git a/src/samurai/field/scalar_field.cpp b/src/samurai/field/scalar_field.cpp index 1eba1ba04..04039f466 100644 --- a/src/samurai/field/scalar_field.cpp +++ b/src/samurai/field/scalar_field.cpp @@ -2,15 +2,15 @@ namespace samurai { - template class ScalarField, MRMeshId>>, float>; - template class ScalarField, MRMeshId>>, float>; - template class ScalarField, MRMeshId>>, float>; + template class ScalarField>, float>; + template class ScalarField>, float>; + template class ScalarField>, float>; - template class ScalarField, MRMeshId>>, double>; - template class ScalarField, MRMeshId>>, double>; - template class ScalarField, MRMeshId>>, double>; + template class ScalarField>, double>; + template class ScalarField>, double>; + template class ScalarField>, double>; - template class ScalarField, MRMeshId>>, long double>; - template class ScalarField, MRMeshId>>, long double>; - template class ScalarField, MRMeshId>>, long double>; + template class ScalarField>, long double>; + template class ScalarField>, long double>; + template class ScalarField>, long double>; } // namespace samurai diff --git a/src/samurai/field/vector_field.cpp b/src/samurai/field/vector_field.cpp index 307acca8e..a6c4a3188 100644 --- a/src/samurai/field/vector_field.cpp +++ b/src/samurai/field/vector_field.cpp @@ -2,24 +2,24 @@ namespace samurai { - template class VectorField, MRMeshId>>, float, 1, false>; - template class VectorField, MRMeshId>>, float, 1, true>; - template class VectorField, MRMeshId>>, float, 2, false>; - template class VectorField, MRMeshId>>, float, 2, true>; - template class VectorField, MRMeshId>>, float, 3, false>; - template class VectorField, MRMeshId>>, float, 3, true>; + template class VectorField>, float, 1, false>; + template class VectorField>, float, 1, true>; + template class VectorField>, float, 2, false>; + template class VectorField>, float, 2, true>; + template class VectorField>, float, 3, false>; + template class VectorField>, float, 3, true>; - template class VectorField, MRMeshId>>, double, 1, false>; - template class VectorField, MRMeshId>>, double, 1, true>; - template class VectorField, MRMeshId>>, double, 2, false>; - template class VectorField, MRMeshId>>, double, 2, true>; - template class VectorField, MRMeshId>>, double, 3, false>; - template class VectorField, MRMeshId>>, double, 3, true>; + template class VectorField>, double, 1, false>; + template class VectorField>, double, 1, true>; + template class VectorField>, double, 2, false>; + template class VectorField>, double, 2, true>; + template class VectorField>, double, 3, false>; + template class VectorField>, double, 3, true>; - template class VectorField, MRMeshId>>, long double, 1, false>; - template class VectorField, MRMeshId>>, long double, 1, true>; - template class VectorField, MRMeshId>>, long double, 2, false>; - template class VectorField, MRMeshId>>, long double, 2, true>; - template class VectorField, MRMeshId>>, long double, 3, false>; - template class VectorField, MRMeshId>>, long double, 3, true>; + template class VectorField>, long double, 1, false>; + template class VectorField>, long double, 1, true>; + template class VectorField>, long double, 2, false>; + template class VectorField>, long double, 2, true>; + template class VectorField>, long double, 3, false>; + template class VectorField>, long double, 3, true>; } // namespace samurai diff --git a/src/samurai/mr/adapt.cpp b/src/samurai/mr/adapt.cpp index 576c31235..63f6c70c2 100644 --- a/src/samurai/mr/adapt.cpp +++ b/src/samurai/mr/adapt.cpp @@ -2,177 +2,69 @@ namespace samurai { - template class Adapt, MRMeshId>>, float>>; - template class Adapt, MRMeshId>>, float>>; - template class Adapt, MRMeshId>>, float>>; + template class Adapt>, float>>; + template class Adapt>, float>>; + template class Adapt>, float>>; - template class Adapt, MRMeshId>>, double>>; - template class Adapt, MRMeshId>>, double>>; - template class Adapt, MRMeshId>>, double>>; + template class Adapt>, double>>; + template class Adapt>, double>>; + template class Adapt>, double>>; - template class Adapt, MRMeshId>>, long double>>; - template class Adapt, MRMeshId>>, long double>>; - template class Adapt, MRMeshId>>, long double>>; + template class Adapt>, long double>>; + template class Adapt>, long double>>; + template class Adapt>, long double>>; - template class Adapt, MRMeshId>>, float>>; - template class Adapt, MRMeshId>>, float>>; - template class Adapt, MRMeshId>>, float>>; + template class Adapt>, float>>; + template class Adapt>, float>>; + template class Adapt>, float>>; - template class Adapt, MRMeshId>>, double>>; - template class Adapt, MRMeshId>>, double>>; - template class Adapt, MRMeshId>>, double>>; + template class Adapt>, double>>; + template class Adapt>, double>>; + template class Adapt>, double>>; - template class Adapt, MRMeshId>>, long double>>; - template class Adapt, MRMeshId>>, long double>>; - template class Adapt, MRMeshId>>, long double>>; + template class Adapt>, long double>>; + template class Adapt>, long double>>; + template class Adapt>, long double>>; - template class Adapt, MRMeshId>>, float, 1, false>>; - template class Adapt, MRMeshId>>, float, 1, true>>; - template class Adapt, MRMeshId>>, float, 2, false>>; - template class Adapt, MRMeshId>>, float, 2, true>>; - template class Adapt, MRMeshId>>, float, 3, false>>; - template class Adapt, MRMeshId>>, float, 3, true>>; + template class Adapt>, float, 1, false>>; + template class Adapt>, float, 1, true>>; + template class Adapt>, float, 2, false>>; + template class Adapt>, float, 2, true>>; + template class Adapt>, float, 3, false>>; + template class Adapt>, float, 3, true>>; - template class Adapt, MRMeshId>>, double, 1, false>>; - template class Adapt, MRMeshId>>, double, 1, true>>; - template class Adapt, MRMeshId>>, double, 2, false>>; - template class Adapt, MRMeshId>>, double, 2, true>>; - template class Adapt, MRMeshId>>, double, 3, false>>; - template class Adapt, MRMeshId>>, double, 3, true>>; + template class Adapt>, double, 1, false>>; + template class Adapt>, double, 1, true>>; + template class Adapt>, double, 2, false>>; + template class Adapt>, double, 2, true>>; + template class Adapt>, double, 3, false>>; + template class Adapt>, double, 3, true>>; - template class Adapt, MRMeshId>>, long double, 1, false>>; - template class Adapt, MRMeshId>>, long double, 1, true>>; - template class Adapt, MRMeshId>>, long double, 2, false>>; - template class Adapt, MRMeshId>>, long double, 2, true>>; - template class Adapt, MRMeshId>>, long double, 3, false>>; - template class Adapt, MRMeshId>>, long double, 3, true>>; + template class Adapt>, long double, 1, false>>; + template class Adapt>, long double, 1, true>>; + template class Adapt>, long double, 2, false>>; + template class Adapt>, long double, 2, true>>; + template class Adapt>, long double, 3, false>>; + template class Adapt>, long double, 3, true>>; - template class Adapt, MRMeshId>>, float, 1, false>>; - template class Adapt, MRMeshId>>, float, 1, true>>; - template class Adapt, MRMeshId>>, float, 2, false>>; - template class Adapt, MRMeshId>>, float, 2, true>>; - template class Adapt, MRMeshId>>, float, 3, false>>; - template class Adapt, MRMeshId>>, float, 3, true>>; + template class Adapt>, float, 1, false>>; + template class Adapt>, float, 1, true>>; + template class Adapt>, float, 2, false>>; + template class Adapt>, float, 2, true>>; + template class Adapt>, float, 3, false>>; + template class Adapt>, float, 3, true>>; - template class Adapt, MRMeshId>>, double, 1, false>>; - template class Adapt, MRMeshId>>, double, 1, true>>; - template class Adapt, MRMeshId>>, double, 2, false>>; - template class Adapt, MRMeshId>>, double, 2, true>>; - template class Adapt, MRMeshId>>, double, 3, false>>; - template class Adapt, MRMeshId>>, double, 3, true>>; + template class Adapt>, double, 1, false>>; + template class Adapt>, double, 1, true>>; + template class Adapt>, double, 2, false>>; + template class Adapt>, double, 2, true>>; + template class Adapt>, double, 3, false>>; + template class Adapt>, double, 3, true>>; - template class Adapt, MRMeshId>>, long double, 1, false>>; - template class Adapt, MRMeshId>>, long double, 1, true>>; - template class Adapt, MRMeshId>>, long double, 2, false>>; - template class Adapt, MRMeshId>>, long double, 2, true>>; - template class Adapt, MRMeshId>>, long double, 3, false>>; - template class Adapt, MRMeshId>>, long double, 3, true>>; + template class Adapt>, long double, 1, false>>; + template class Adapt>, long double, 1, true>>; + template class Adapt>, long double, 2, false>>; + template class Adapt>, long double, 2, true>>; + template class Adapt>, long double, 3, false>>; + template class Adapt>, long double, 3, true>>; } // namespace samurai diff --git a/src/samurai/mr/mesh.cpp b/src/samurai/mr/mesh.cpp index a9c6eb5fd..ab7080112 100644 --- a/src/samurai/mr/mesh.cpp +++ b/src/samurai/mr/mesh.cpp @@ -2,7 +2,7 @@ namespace samurai { - template class MRMesh, MRMeshId>>; - template class MRMesh, MRMeshId>>; - template class MRMesh, MRMeshId>>; + template class MRMesh>; + template class MRMesh>; + template class MRMesh>; } From 308f6ef46b4fe3b2b47f231cecb1d8e4f8eabdbd Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Wed, 18 Mar 2026 12:27:25 +0100 Subject: [PATCH 7/9] explicitly set the sources in cmakelists.txt --- CMakeLists.txt | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 03da1f8a0..2e5e7df52 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,10 +96,24 @@ project_options( ${ENABLE_CONAN} ) -file(GLOB_RECURSE SAMURAI_SOURCES - "src/*.cpp" - "src/*.c" -) +set(SAMURAI_SOURCES + src/samurai/mesh_interval.cpp + src/samurai/level_cell_list.cpp + src/samurai/box.cpp + src/samurai/reconstruction.cpp + src/samurai/interval.cpp + src/samurai/cell.cpp + src/samurai/cell_list.cpp + src/samurai/stencil_field.cpp + src/samurai/cell_array.cpp + src/samurai/level_cell_array.cpp + src/samurai/list_of_intervals.cpp + src/samurai/domain_builder.cpp + src/samurai/mr/mesh.cpp + src/samurai/mr/adapt.cpp + src/samurai/array_of_interval_and_point.cpp + src/samurai/field/scalar_field.cpp + src/samurai/field/vector_field.cpp) add_library(samurai ${SAMURAI_SOURCES}) target_compile_features(samurai PUBLIC cxx_std_20) From f77b60501e4bf8ef97413e22010f6a05816f8734 Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Wed, 18 Mar 2026 12:50:53 +0100 Subject: [PATCH 8/9] .gitignore prevented me from adding this one --- src/samurai/domain_builder.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/samurai/domain_builder.cpp diff --git a/src/samurai/domain_builder.cpp b/src/samurai/domain_builder.cpp new file mode 100644 index 000000000..415b36fa5 --- /dev/null +++ b/src/samurai/domain_builder.cpp @@ -0,0 +1,10 @@ +#include "samurai/domain_builder.hpp" + +namespace samurai +{ + + template class DomainBuilder<1>; + template class DomainBuilder<2>; + template class DomainBuilder<3>; + +} // namespace samurai From b6e91f6996baf560e9896a6f44ac39ea35fc2a1e Mon Sep 17 00:00:00 2001 From: Alexandre Hoffmann Date: Wed, 18 Mar 2026 14:52:39 +0100 Subject: [PATCH 9/9] SAMURAI_INLINE auto LevelCellList::operator[](const index_yz_t& index) const -> const list_interval_t& --- include/samurai/level_cell_list.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/samurai/level_cell_list.hpp b/include/samurai/level_cell_list.hpp index 94b964136..33ebd796d 100644 --- a/include/samurai/level_cell_list.hpp +++ b/include/samurai/level_cell_list.hpp @@ -48,7 +48,7 @@ namespace samurai SAMURAI_INLINE decltype(auto) access_grid_yz(GridYZ& grid_yz, const Index& index, std::integral_constant) { // For other dimensions, we dive into the nested std::map - return access_grid_yz(grid_yz.at(index.at(dim - 1)), index, std::integral_constant{}); + return access_grid_yz(grid_yz[index[dim - 1]], index, std::integral_constant{}); } } // namespace detail @@ -137,11 +137,11 @@ namespace samurai } /// Constant access to the interval list at given dim-1 coordinates - template - SAMURAI_INLINE auto LevelCellList::operator[](const index_yz_t& index) const -> const list_interval_t& - { - return detail::access_grid_yz(m_grid_yz, index, std::integral_constant{}); - } + //~ template + //~ SAMURAI_INLINE auto LevelCellList::operator[](const index_yz_t& index) const -> const list_interval_t& + //~ { + //~ return detail::access_grid_yz(m_grid_yz, index, std::integral_constant{}); + //~ } /// Mutable access to the interval list at given dim-1 coordinates template