Skip to content
Snippets Groups Projects
Commit c9b24861 authored by renchao.lu's avatar renchao.lu
Browse files

[CL] Initialize array of Phreeqc::rates.

parent f560a790
No related branches found
No related tags found
No related merge requests found
......@@ -11,13 +11,19 @@
#include "Common/CreateReactionRate.h"
#include "MeshLib/Mesh.h"
#include "PhreeqcIO.h"
#include "PhreeqcIOData/AqueousSolution.h"
#include "PhreeqcIOData/CreateAqueousSolution.h"
#include "PhreeqcIOData/CreateEquilibriumPhase.h"
#include "PhreeqcIOData/CreateKineticReactant.h"
#include "PhreeqcIOData/CreateOutput.h"
#include "PhreeqcIOData/EquilibriumPhase.h"
#include "PhreeqcIOData/KineticReactant.h"
#include "PhreeqcIOData/ReactionRate.h"
#include "PhreeqcKernel.h"
#include "PhreeqcKernelData/AqueousSolution.h"
#include "PhreeqcKernelData/CreateAqueousSolution.h"
#include "PhreeqcKernelData/CreateKineticReactant.h"
#include "PhreeqcKernelData/ReactionRate.h"
#include "ThirdParty/iphreeqc/src/src/phreeqcpp/cxxKinetics.h"
......@@ -131,6 +137,7 @@ createChemicalSolverInterface<ChemicalSolver::PhreeqcKernel>(
return std::make_unique<PhreeqcKernelData::PhreeqcKernel>(
mesh.getNumberOfBaseNodes(), process_id_to_component_name_map,
path_to_database, aqueous_solution, kinetic_reactants, reaction_rates);
path_to_database, aqueous_solution, kinetic_reactants,
std::move(reaction_rates));
}
} // namespace ChemistryLib
......@@ -11,6 +11,7 @@
#pragma once
#include <memory>
#include <string>
#include <vector>
#include "ChemicalSolverType.h"
......
......@@ -11,6 +11,7 @@
#include "BaseLib/Error.h"
#include "PhreeqcKernel.h"
#include "PhreeqcKernelData/ReactionRate.h"
#include "ThirdParty/iphreeqc/src/src/phreeqcpp/cxxKinetics.h"
......@@ -25,8 +26,9 @@ PhreeqcKernel::PhreeqcKernel(
std::string const& database,
PhreeqcKernelData::AqueousSolution& aqueous_solution,
cxxKinetics& kinetic_reactants,
std::tuple<rate*, int> const& reaction_rates)
: Phreeqc()
std::vector<ReactionRate>&& reaction_rates)
: Phreeqc(),
_reaction_rates(std::move(reaction_rates))
{
do_initialize();
......@@ -63,8 +65,19 @@ PhreeqcKernel::PhreeqcKernel(
use.Set_kinetics_in(true);
}
// rates
std::tie(rates, count_rates) = reaction_rates;
// Initialize array of struct rates
count_rates = _reaction_rates.size();
rates = (struct rate*)realloc(
rates, (std::size_t)(count_rates) * sizeof(struct rate));
int rate_id = 0;
for (auto const& reaction_rate : _reaction_rates)
{
rates[rate_id].name = reaction_rate.kinetic_reactant.data();
rates[rate_id].commands =
const_cast<char*>(reaction_rate.commands().data());
rates[rate_id].new_def = 1;
++rate_id;
};
// set a strict convergence tolerance
convergence_tolerance = 1e-12;
......
......@@ -23,6 +23,7 @@ namespace ChemistryLib
{
namespace PhreeqcKernelData
{
class ReactionRate;
class PhreeqcKernel final : public ChemicalSolverInterface, private Phreeqc
{
......@@ -33,7 +34,7 @@ public:
std::string const& database,
AqueousSolution& aqueous_solution,
cxxKinetics& kinetic_reactants,
std::tuple<rate*, int> const& reaction_rates);
std::vector<ReactionRate>&& reaction_rates);
void doWaterChemistryCalculation(
std::vector<GlobalVector*>& process_solutions,
......@@ -53,6 +54,7 @@ public:
private:
std::map<int, struct master*> _process_id_to_master_map;
cxxISolution _templated_initial_aqueous_solution;
std::vector<ReactionRate> const _reaction_rates;
};
} // namespace PhreeqcKernelData
} // namespace ChemistryLib
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment