Refactor initialization code for diffusion and grid

This commit is contained in:
Max Lübke 2024-03-19 13:39:59 +00:00
parent b0c65ddbda
commit e3f002de49
3 changed files with 50 additions and 14 deletions

View File

@ -146,9 +146,12 @@ static Rcpp::List parseAlphas2D(const SEXP &input,
return out_list;
}
void InitialList::initDiffusion(const Rcpp::List &diffusion_input) {
const Rcpp::List &boundaries = diffusion_input["boundaries"];
const SEXP &alpha_x = diffusion_input["alpha_x"];
const SEXP &alpha_y = diffusion_input["alpha_y"];
const Rcpp::List &boundaries =
diffusion_input[DIFFU_MEMBER_STR(DiffusionMembers::BOUNDARIES)];
const Rcpp::NumericVector &alpha_x =
diffusion_input[DIFFU_MEMBER_STR(DiffusionMembers::ALPHA_X)];
const Rcpp::NumericVector &alpha_y =
diffusion_input[DIFFU_MEMBER_STR(DiffusionMembers::ALPHA_Y)];
std::vector<std::string> colnames =
Rcpp::as<std::vector<std::string>>(this->initial_grid.names());

View File

@ -100,29 +100,31 @@ void InitialList::initGrid(const Rcpp::List &grid_input) {
std::string database;
if (grid_input.containsElementNamed(
getGridMemberString(GridMembers::PQC_SCRIPT_FILE))) {
GRID_MEMBER_STR(GridMembers::PQC_SCRIPT_FILE))) {
script = readFile(Rcpp::as<std::string>(
grid_input[getGridMemberString(GridMembers::PQC_SCRIPT_FILE)]));
grid_input[GRID_MEMBER_STR(GridMembers::PQC_SCRIPT_FILE)]));
} else {
script = Rcpp::as<std::string>(
grid_input[getGridMemberString(GridMembers::PQC_SCRIPT_STRING)]);
grid_input[GRID_MEMBER_STR(GridMembers::PQC_SCRIPT_STRING)]);
}
if (grid_input.containsElementNamed(
getGridMemberString(GridMembers::PQC_DB_FILE))) {
GRID_MEMBER_STR(GridMembers::PQC_DB_FILE))) {
database = readFile(Rcpp::as<std::string>(
grid_input[getGridMemberString(GridMembers::PQC_DB_FILE)]));
grid_input[GRID_MEMBER_STR(GridMembers::PQC_DB_FILE)]));
} else {
database = Rcpp::as<std::string>(
grid_input[getGridMemberString(GridMembers::PQC_DB_STRING)]);
grid_input[GRID_MEMBER_STR(GridMembers::PQC_DB_STRING)]);
}
this->database = database;
Rcpp::NumericMatrix grid_def =
grid_input[getGridMemberString(GridMembers::GRID_DEF)];
grid_input[GRID_MEMBER_STR(GridMembers::GRID_DEF)];
Rcpp::NumericVector grid_size =
grid_input[getGridMemberString(GridMembers::GRID_SIZE)];
grid_input[GRID_MEMBER_STR(GridMembers::GRID_SIZE)];
// Rcpp::NumericVector constant_cells = grid["constant_cells"].;
this->n_rows = grid_def.nrow();
@ -155,6 +157,13 @@ void InitialList::initGrid(const Rcpp::List &grid_input) {
this->module_sizes = getModuleSizes(phreeqc, this->initial_grid);
std::vector<std::string> colnames =
Rcpp::as<std::vector<std::string>>(this->initial_grid.names());
this->to_transport = this->pqc_sol_order = std::vector<std::string>(
colnames.begin() + 1,
colnames.begin() + 1 + this->module_sizes[POET_SOL]);
// print module sizes
for (std::size_t i = 0; i < this->module_sizes.size(); i++) {
std::cout << this->module_sizes[i] << std::endl;

View File

@ -51,7 +51,7 @@ private:
"pqc_db_file", "grid_def", "grid_size",
"constant_cells", "porosity"};
constexpr const char *getGridMemberString(GridMembers member) const {
constexpr const char *GRID_MEMBER_STR(GridMembers member) const {
return GridMembersString[static_cast<std::size_t>(member)];
}
@ -71,20 +71,44 @@ private:
// No export
Rcpp::NumericMatrix phreeqc_mat;
// Initialized by grid, modified by chemistry
// Initialized by grid
std::map<int, std::string> pqc_raw_dumps;
// Chemistry members
IPhreeqcPOET::ModulesArray module_sizes;
// Diffusion members
static constexpr const char *diffusion_key = "Diffusion";
enum class DiffusionMembers { BOUNDARIES, ALPHA_X, ALPHA_Y, ENUM_SIZE };
static constexpr std::size_t size_DiffusionMembers =
static_cast<std::size_t>(InitialList::DiffusionMembers::ENUM_SIZE);
static constexpr std::array<const char *, size_DiffusionMembers>
DiffusionMembersString = {"boundaries", "alpha_x", "alpha_y"};
constexpr const char *DIFFU_MEMBER_STR(DiffusionMembers member) const {
return DiffusionMembersString[static_cast<std::size_t>(member)];
}
void initDiffusion(const Rcpp::List &diffusion_input);
Rcpp::List boundaries;
Rcpp::List alpha_x;
Rcpp::List alpha_y;
std::vector<std::string> to_transport;
// Chemistry Members
static constexpr const char *chemistry_key = "Chemistry";
void initChemistry();
std::string database;
std::vector<std::string> pqc_scripts;
std::vector<int> pqc_ids;
std::vector<std::string> pqc_sol_order;
};
} // namespace poet