diff --git a/src/Init/DiffusionInit.cpp b/src/Init/DiffusionInit.cpp index becaaa977..c740091a5 100644 --- a/src/Init/DiffusionInit.cpp +++ b/src/Init/DiffusionInit.cpp @@ -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 colnames = Rcpp::as>(this->initial_grid.names()); diff --git a/src/Init/GridInit.cpp b/src/Init/GridInit.cpp index eead62881..8e5061c76 100644 --- a/src/Init/GridInit.cpp +++ b/src/Init/GridInit.cpp @@ -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( - grid_input[getGridMemberString(GridMembers::PQC_SCRIPT_FILE)])); + grid_input[GRID_MEMBER_STR(GridMembers::PQC_SCRIPT_FILE)])); } else { script = Rcpp::as( - 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( - grid_input[getGridMemberString(GridMembers::PQC_DB_FILE)])); + grid_input[GRID_MEMBER_STR(GridMembers::PQC_DB_FILE)])); } else { database = Rcpp::as( - 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 colnames = + Rcpp::as>(this->initial_grid.names()); + + this->to_transport = this->pqc_sol_order = std::vector( + 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; diff --git a/src/Init/InitialList.hpp b/src/Init/InitialList.hpp index b75a9b2d8..bc4a4dafd 100644 --- a/src/Init/InitialList.hpp +++ b/src/Init/InitialList.hpp @@ -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(member)]; } @@ -71,20 +71,44 @@ private: // No export Rcpp::NumericMatrix phreeqc_mat; - // Initialized by grid, modified by chemistry + // Initialized by grid std::map 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(InitialList::DiffusionMembers::ENUM_SIZE); + + static constexpr std::array + DiffusionMembersString = {"boundaries", "alpha_x", "alpha_y"}; + + constexpr const char *DIFFU_MEMBER_STR(DiffusionMembers member) const { + return DiffusionMembersString[static_cast(member)]; + } + void initDiffusion(const Rcpp::List &diffusion_input); Rcpp::List boundaries; Rcpp::List alpha_x; Rcpp::List alpha_y; + + std::vector to_transport; + + // Chemistry Members + static constexpr const char *chemistry_key = "Chemistry"; + + void initChemistry(); + + std::string database; + std::vector pqc_scripts; + std::vector pqc_ids; + + std::vector pqc_sol_order; }; } // namespace poet \ No newline at end of file