diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e0dcb8a55..c924723ea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,5 @@ +add_subdirectory(DataStructures) + add_library(poetinitlib Init/InitialList.cpp Init/GridInit.cpp @@ -5,6 +7,7 @@ add_library(poetinitlib ) target_link_libraries(poetinitlib PUBLIC + DataStructures RRuntime IPhreeqcPOET tug @@ -27,11 +30,11 @@ add_library(poetlib Chemistry/SurrogateModels/HashFunctions.cpp Chemistry/SurrogateModels/InterpolationModule.cpp Chemistry/SurrogateModels/ProximityHashTable.cpp - DataStructures/Field.cpp Transport/DiffusionModule.cpp ) target_link_libraries(poetlib PUBLIC + DataStructures MPI::MPI_C ${MATH_LIBRARY} RRuntime diff --git a/src/Chemistry/WorkerFunctions.cpp b/src/Chemistry/WorkerFunctions.cpp index 4e67e33d5..8cec96d62 100644 --- a/src/Chemistry/WorkerFunctions.cpp +++ b/src/Chemistry/WorkerFunctions.cpp @@ -17,6 +17,20 @@ #include namespace poet { + +struct WorkPackage { + std::size_t size; + std::vector> input; + std::vector> output; + std::vector mapping; + + WorkPackage(size_t _size) : size(_size) { + input.resize(size); + output.resize(size); + mapping.resize(size, CHEM_PQC); + } +}; + inline std::string get_string(int root, MPI_Comm communicator) { int count; MPI_Bcast(&count, 1, MPI_INT, root, communicator); diff --git a/src/DataStructures/CMakeLists.txt b/src/DataStructures/CMakeLists.txt new file mode 100644 index 000000000..025671340 --- /dev/null +++ b/src/DataStructures/CMakeLists.txt @@ -0,0 +1,11 @@ +add_library(DataStructures OBJECT + Field.cpp +) + +target_link_libraries(DataStructures + PUBLIC RRuntime +) + +target_include_directories(DataStructures + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} +) \ No newline at end of file diff --git a/src/DataStructures/Field.cpp b/src/DataStructures/Field.cpp index 71d51dea4..69ab648de 100644 --- a/src/DataStructures/Field.cpp +++ b/src/DataStructures/Field.cpp @@ -1,4 +1,4 @@ -#include "DataStructures.hpp" +#include "Field.hpp" #include #include diff --git a/src/DataStructures/DataStructures.hpp b/src/DataStructures/Field.hpp similarity index 84% rename from src/DataStructures/DataStructures.hpp rename to src/DataStructures/Field.hpp index 30f69e5dd..2f2269653 100644 --- a/src/DataStructures/DataStructures.hpp +++ b/src/DataStructures/Field.hpp @@ -1,54 +1,14 @@ #ifndef DATASTRUCTURES_H_ #define DATASTRUCTURES_H_ -#include "../Chemistry/enums.hpp" - #include -#include -#include #include -#include -#include #include -#include #include namespace poet { -struct WorkPackage { - std::size_t size; - std::vector> input; - std::vector> output; - std::vector mapping; - - WorkPackage(size_t _size) : size(_size) { - input.resize(size); - output.resize(size); - mapping.resize(size, CHEM_PQC); - } -}; - -template class NamedVector : public Rcpp::NumericVector { -public: - NamedVector() : Rcpp::NumericVector(){}; - - NamedVector(const std::vector &in_names, - const std::vector &in_values) - : Rcpp::NumericVector(Rcpp::wrap(in_values)) { - this->names() = Rcpp::CharacterVector(Rcpp::wrap(in_names)); - } - - NamedVector(const SEXP &s) : Rcpp::NumericVector(s){}; - - bool empty() const { return (this->size() == 0); } - - std::vector getNames() const { - return Rcpp::as>(this->names()); - } - std::vector getValues() const { return Rcpp::as>(*this); } -}; - using FieldColumn = std::vector; /** diff --git a/src/DataStructures/NamedVector.hpp b/src/DataStructures/NamedVector.hpp new file mode 100644 index 000000000..f120b0e48 --- /dev/null +++ b/src/DataStructures/NamedVector.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include + +namespace poet { +template class NamedVector : public Rcpp::NumericVector { +public: + NamedVector() : Rcpp::NumericVector(){}; + + NamedVector(const std::vector &in_names, + const std::vector &in_values) + : Rcpp::NumericVector(Rcpp::wrap(in_values)) { + this->names() = Rcpp::CharacterVector(Rcpp::wrap(in_names)); + } + + NamedVector(const SEXP &s) : Rcpp::NumericVector(s){}; + + bool empty() const { return (this->size() == 0); } + + std::vector getNames() const { + return Rcpp::as>(this->names()); + } + std::vector getValues() const { return Rcpp::as>(*this); } +}; +} // namespace poet \ No newline at end of file