Refactor grid initialization and update member access in InitialList

This commit is contained in:
Max Lübke 2024-03-19 12:32:16 +00:00
parent 15d9b06516
commit 14411ac319
3 changed files with 42 additions and 8 deletions

View File

@ -4,8 +4,6 @@
#include <RInside.h> #include <RInside.h>
#include <Rcpp/Function.h> #include <Rcpp/Function.h>
#include <Rcpp/vector/instantiation.h> #include <Rcpp/vector/instantiation.h>
#include <algorithm>
#include <cstdint>
#include <map> #include <map>
#include <regex> #include <regex>
#include <string> #include <string>
@ -77,8 +75,10 @@ getModuleSizes(IPhreeqcPOET &phreeqc, const Rcpp::List &initial_grid) {
void InitialList::initGrid(const Rcpp::List &grid_input) { void InitialList::initGrid(const Rcpp::List &grid_input) {
// parse input values // parse input values
const std::string script = Rcpp::as<std::string>(grid_input["pqc_in"]); const std::string script = Rcpp::as<std::string>(
const std::string database = Rcpp::as<std::string>(grid_input["pqc_db"]); grid_input[getGridMemberString(GridMembers::PQC_SCRIPT_FILE)]);
const std::string database = Rcpp::as<std::string>(
grid_input[getGridMemberString(GridMembers::PQC_DB_FILE)]);
std::string script_rp(PATH_MAX, '\0'); std::string script_rp(PATH_MAX, '\0');
std::string database_rp(PATH_MAX, '\0'); std::string database_rp(PATH_MAX, '\0');
@ -93,8 +93,10 @@ void InitialList::initGrid(const Rcpp::List &grid_input) {
database); database);
} }
Rcpp::NumericMatrix grid_def = grid_input["grid_def"]; Rcpp::NumericMatrix grid_def =
Rcpp::NumericVector grid_size = grid_input["grid_size"]; grid_input[getGridMemberString(GridMembers::GRID_DEF)];
Rcpp::NumericVector grid_size =
grid_input[getGridMemberString(GridMembers::GRID_SIZE)];
// Rcpp::NumericVector constant_cells = grid["constant_cells"].; // Rcpp::NumericVector constant_cells = grid["constant_cells"].;
this->n_rows = grid_def.nrow(); this->n_rows = grid_def.nrow();

View File

@ -2,7 +2,7 @@
namespace poet { namespace poet {
void InitialList::initializeFromList(const Rcpp::List &setup) { void InitialList::initializeFromList(const Rcpp::List &setup) {
initGrid(setup["grid"]); initGrid(setup[grid_key]);
initDiffusion(setup["diffusion"]); initDiffusion(setup[diffusion_key]);
} }
} // namespace poet } // namespace poet

View File

@ -3,9 +3,12 @@
#include <RInside.h> #include <RInside.h>
#include <Rcpp.h> #include <Rcpp.h>
#include <Rcpp/vector/instantiation.h> #include <Rcpp/vector/instantiation.h>
#include <array>
#include <cstddef>
#include <cstdint> #include <cstdint>
#include <IPhreeqcPOET.hpp> #include <IPhreeqcPOET.hpp>
#include <map>
#include <utility> #include <utility>
#include <vector> #include <vector>
@ -26,6 +29,32 @@ private:
RInside &R; RInside &R;
// Grid members // Grid members
static constexpr const char *grid_key = "Grid";
enum class GridMembers {
PQC_SCRIPT_STRING,
PQC_SCRIPT_FILE,
PQC_DB_STRING,
PQC_DB_FILE,
GRID_DEF,
GRID_SIZE,
CONSTANT_CELLS,
POROSITY,
ENUM_SIZE
};
static constexpr std::size_t size_GridMembers =
static_cast<std::size_t>(InitialList::GridMembers::ENUM_SIZE);
static constexpr std::array<const char *, size_GridMembers>
GridMembersString = {"pqc_in_string", "pqc_in_file", "pqc_db_string",
"pqc_db_file", "grid_def", "grid_size",
"constant_cells", "porosity"};
constexpr const char *getGridMemberString(GridMembers member) const {
return GridMembersString[static_cast<std::size_t>(member)];
}
void initGrid(const Rcpp::List &grid_input); void initGrid(const Rcpp::List &grid_input);
std::uint8_t dim; std::uint8_t dim;
@ -49,6 +78,9 @@ private:
IPhreeqcPOET::ModulesArray module_sizes; IPhreeqcPOET::ModulesArray module_sizes;
// Diffusion members // Diffusion members
static constexpr const char *diffusion_key = "Diffusion";
void initDiffusion(const Rcpp::List &diffusion_input); void initDiffusion(const Rcpp::List &diffusion_input);
Rcpp::List boundaries; Rcpp::List boundaries;