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

View File

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

View File

@ -3,9 +3,12 @@
#include <RInside.h>
#include <Rcpp.h>
#include <Rcpp/vector/instantiation.h>
#include <array>
#include <cstddef>
#include <cstdint>
#include <IPhreeqcPOET.hpp>
#include <map>
#include <utility>
#include <vector>
@ -26,6 +29,32 @@ private:
RInside &R;
// 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);
std::uint8_t dim;
@ -49,6 +78,9 @@ private:
IPhreeqcPOET::ModulesArray module_sizes;
// Diffusion members
static constexpr const char *diffusion_key = "Diffusion";
void initDiffusion(const Rcpp::List &diffusion_input);
Rcpp::List boundaries;