OGS
ChemicalSolverInterface.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
88#pragma once
89
90#include <Eigen/Sparse>
91
95#include "MeshLib/Mesh.h"
96
98{
99class Medium;
100}
101
103{
104class SpatialPosition;
105}
106
108{
110{
111public:
113 GlobalLinearSolver& linear_solver_)
114 : _mesh(mesh), linear_solver(linear_solver_)
115 {
116 auto const* const bulk_element_ids = bulkElementIDs(_mesh);
117 if (bulk_element_ids == nullptr)
118 {
119 OGS_FATAL(
120 "The 'bulk_element_ids' property does not exist on the mesh "
121 "{:s}.",
122 _mesh.getName());
123 }
124 active_element_ids_.assign(bulk_element_ids->begin(),
125 bulk_element_ids->end());
126 }
127
128 std::vector<std::size_t> const& activeElementIDs() const
129 {
130 return active_element_ids_;
131 }
132
133 virtual void initialize() {}
134
136 std::vector<double> const& /*concentrations*/,
137 GlobalIndexType const& /*chemical_system_id*/,
138 MaterialPropertyLib::Medium const& /*medium*/,
139 ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/)
140 {
141 }
142
144 std::vector<double> const& /*concentrations*/,
145 GlobalIndexType const& /*chemical_system_id*/,
146 MaterialPropertyLib::Medium const* /*medium*/,
148 ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
149 double const /*dt*/)
150 {
151 }
152
154
175 virtual void executeSpeciationCalculation([[maybe_unused]] double const dt)
176 {
177 }
178
179 virtual double getConcentration(
180 int const /*component_id*/,
181 GlobalIndexType const /*chemical_system_id*/) const
182 {
183 return std::numeric_limits<double>::quiet_NaN();
184 }
185
186 virtual std::vector<std::string> const getComponentList() const
187 {
188 return {};
189 }
190
191 virtual Eigen::SparseMatrix<double> const* getStoichiometricMatrix() const
192 {
193 return nullptr;
194 }
195
196 virtual double getKineticPrefactor(
197 [[maybe_unused]] std::size_t reaction_id) const
198 {
199 return std::numeric_limits<double>::quiet_NaN();
200 }
201
215 GlobalIndexType const& /*chemical_system_id*/,
216 MaterialPropertyLib::Medium const& /*medium*/,
217 ParameterLib::SpatialPosition const& /*pos*/, double const /*porosity*/,
218 double const /*t*/, double const /*dt*/)
219 {
220 }
221
230 GlobalIndexType const& /*chemical_system_id*/,
231 MaterialPropertyLib::Medium const& /*medium*/,
232 double& /*porosity*/)
233 {
234 }
235
237 std::size_t const /*ele_id*/,
238 std::vector<GlobalIndexType> const& /*chemical_system_indices*/)
239 {
240 }
241
242 virtual ~ChemicalSolverInterface() = default;
243
244public:
245 std::vector<GlobalIndexType> chemical_system_index_map;
250
251private:
252 std::vector<std::size_t> active_element_ids_;
253};
254} // namespace ChemistryLib
#define OGS_FATAL(...)
Definition Error.h:19
MathLib::EigenLisLinearSolver GlobalLinearSolver
GlobalMatrix::IndexType GlobalIndexType
virtual void updatePorosityPostReaction(GlobalIndexType const &, MaterialPropertyLib::Medium const &, double &)
virtual double getKineticPrefactor(std::size_t reaction_id) const
virtual void computeSecondaryVariable(std::size_t const, std::vector< GlobalIndexType > const &)
virtual void setChemicalSystemConcrete(std::vector< double > const &, GlobalIndexType const &, MaterialPropertyLib::Medium const *, MaterialPropertyLib::VariableArray const &, ParameterLib::SpatialPosition const &, double const, double const)
virtual void updateVolumeFractionPostReaction(GlobalIndexType const &, MaterialPropertyLib::Medium const &, ParameterLib::SpatialPosition const &, double const, double const, double const)
std::vector< GlobalIndexType > chemical_system_index_map
virtual ~ChemicalSolverInterface()=default
virtual void executeSpeciationCalculation(double const dt)
virtual std::vector< std::string > const getComponentList() const
virtual Eigen::SparseMatrix< double > const * getStoichiometricMatrix() const
ChemicalSolverInterface(MeshLib::Mesh const &mesh, GlobalLinearSolver &linear_solver_)
virtual double getConcentration(int const, GlobalIndexType const) const
std::vector< std::size_t > const & activeElementIDs() const
virtual void initializeChemicalSystemConcrete(std::vector< double > const &, GlobalIndexType const &, MaterialPropertyLib::Medium const &, ParameterLib::SpatialPosition const &, double const)