Flow123d
release_2.2.0-21-g2806cf6
|
#include <isotherm.hh>
Classes | |
struct | ConcPair |
Pair of soluted and adsorbed concentration. More... | |
Public Types | |
enum | SorptionType { none = 0, linear = 1, freundlich = 2, langmuir = 3 } |
Type of adsorption isotherm. More... | |
Public Member Functions | |
TYPEDEF_ERR_INFO (EI_BoostMessage, std::string) | |
DECLARE_EXCEPTION (ExcBoostSolver,<< "The Boost solver of nonlinear equation did not converge in sorption model.\n"<< "Check input at the following address for possible user error: \t"<< Input::EI_Address::val<< "\n""Solver message: \n"<< EI_BoostMessage::val) | |
TYPEDEF_ERR_INFO (EI_TotalMass, double) | |
DECLARE_EXCEPTION (ExcNegativeTotalMass,<< "The total mass in sorption model became negative during the computation (value: "<< EI_TotalMass::val<< ").\n"<< "Check input at the following address for possible user error: \t"<< Input::EI_Address::val<< "\n") | |
void | reinit (enum SorptionType sorption_type, bool limited_solubility_on, double aqua_density, double scale_aqua, double scale_sorbed, double c_aqua_limit, double mult_coef, double second_coef) |
void | make_table (int n_points) |
void | compute (double &c_aqua, double &c_sorbed) |
void | interpolate (double &c_aqua, double &c_sorbed) |
bool | is_precomputed (void) |
template<> | |
Isotherm::ConcPair | solve_conc (Isotherm::ConcPair c_pair, const None &isotherm) |
template<> | |
void | make_table (const None &isotherm, int n_steps) |
Protected Member Functions | |
template<class Func > | |
void | make_table (const Func &isotherm, int n_points) |
template<class Func > | |
ConcPair | solve_conc (ConcPair c_pair, const Func &isotherm) |
ConcPair | solve_conc (ConcPair conc) |
ConcPair | compute_projection (ConcPair conc) |
ConcPair | precipitate (ConcPair conc) |
Protected Attributes | |
enum SorptionType | adsorption_type_ |
Type of isotherm. More... | |
double | mult_coef_ |
Multiplication parameter of the isotherm. More... | |
double | second_coef_ |
Optional secod parameter of the isotherm. More... | |
double | table_limit_ |
bool | limited_solubility_on_ |
Solubility limit flag. More... | |
double | rho_aqua_ |
density of the solvent More... | |
double | scale_aqua_ |
coefficient that convert soluted concentration to mass; porosity = k_W, originally rho_aqua*porosity = k_W More... | |
double | scale_sorbed_ |
coefficient that convert adsorbed molar concentration to mass; molar_weight * rho_rock * (1 - porosity) = k_H More... | |
double | inv_scale_aqua_ |
reciprocal values More... | |
double | inv_scale_sorbed_ |
vector< double > | interpolation_table |
double | total_mass_step_ |
Class describing one isotherm with possibly precalculated interpolation table.
Definition at line 154 of file isotherm.hh.
Type of adsorption isotherm.
Enumerator | |
---|---|
none | |
linear | |
freundlich | |
langmuir |
Definition at line 170 of file isotherm.hh.
|
inline |
Direct calculation of the equilibrium adsorption using a non-linear solver. reinit
has to be called just before this method.
Definition at line 352 of file isotherm.hh.
|
inlineprotected |
Update concentrations using interopolation.
Definition at line 378 of file isotherm.hh.
Isotherm::DECLARE_EXCEPTION | ( | ExcBoostSolver | , |
<< "The Boost solver of nonlinear equation did not converge in sorption model.\n"<< "Check input at the following address for possible user error: \t"<< Input::EI_Address::val<< "\n""Solver message: \n"<< EI_BoostMessage::val | |||
) |
Isotherm::DECLARE_EXCEPTION | ( | ExcNegativeTotalMass | , |
<< "The total mass in sorption model became negative during the computation (value: "<< EI_TotalMass::val<< ").\n"<< "Check input at the following address for possible user error: \t"<< Input::EI_Address::val<< "\n" | |||
) |
|
inline |
Use interpolation to determine equilibrium state. Assumes previous call to make_table
. If total mass is larger then table limit we either call precipitate
(limit_solubility_on) or use direct computation.
Definition at line 366 of file isotherm.hh.
|
inline |
Returns true if interpolation table is created.
Definition at line 224 of file isotherm.hh.
void Isotherm::make_table | ( | const None & | isotherm, |
int | n_steps | ||
) |
Definition at line 65 of file isotherm.cc.
void Isotherm::make_table | ( | int | n_points | ) |
Create interpolation table for isotherm in rotated coordinate system with X axes given by total mass in both phases. Size of the table is the only parameter. Currently we support only linear interpolation. reinit
has to be called just before this method.
Definition at line 22 of file isotherm.cc.
|
protected |
Implementation of interpolation construction for particular isotherm functor. Specialized for sorption 'none' - creates empty table.
Definition at line 481 of file isotherm.hh.
|
inlineprotected |
Modify concentrations after adsorption for limited solubility.
Definition at line 403 of file isotherm.hh.
|
inline |
Setting adsorption parameters for general isotherm. These parameters are then used either for creation of the interpolation table via make_table
method or just one adsorption is computed through compute
method. Provided parameters are:
sorption_type | - type of isotherm |
limited_solubility_on | - true if c_aqua_limit is solubility limit |
aqua_density | - density of the liquid phase |
scale_aqua | - generalized porosity, fraction of the space with liquid phase |
scale_sorbed | - fraction of the space with the solid to which we adsorp |
c_aqua_limit | - limit for interpolation table, possibly solubility limit |
mult_coef | - multiplicative coefficient of the isotherm (all isotherms have one) |
second_coef | - possibly second parameter of the isotherm |
Definition at line 334 of file isotherm.hh.
Isotherm::ConcPair Isotherm::solve_conc | ( | Isotherm::ConcPair | c_pair, |
const None & | isotherm | ||
) |
Definition at line 60 of file isotherm.cc.
|
inlineprotected |
Find new values for concentrations in c_pair
that has same total mass and lies on the isotherm
(functor object). Specialized for sorption 'none' - returns unchanged c_pair
.
Definition at line 412 of file isotherm.hh.
|
inlineprotected |
Dispatch isotherm type and use appropriate template.
Definition at line 447 of file isotherm.hh.
Isotherm::TYPEDEF_ERR_INFO | ( | EI_BoostMessage | , |
std::string | |||
) |
Isotherm::TYPEDEF_ERR_INFO | ( | EI_TotalMass | , |
double | |||
) |
|
protected |
Type of isotherm.
Definition at line 260 of file isotherm.hh.
|
protected |
Interpolation table of isotherm in the rotated coordinates. The X axes of rotated system is total mass, the Y axes is perpendicular.
Definition at line 288 of file isotherm.hh.
|
protected |
reciprocal values
Definition at line 283 of file isotherm.hh.
|
protected |
Definition at line 283 of file isotherm.hh.
|
protected |
Solubility limit flag.
Definition at line 274 of file isotherm.hh.
|
protected |
Multiplication parameter of the isotherm.
Definition at line 263 of file isotherm.hh.
|
protected |
density of the solvent
Definition at line 277 of file isotherm.hh.
|
protected |
coefficient that convert soluted concentration to mass; porosity = k_W, originally rho_aqua*porosity = k_W
Definition at line 279 of file isotherm.hh.
|
protected |
coefficient that convert adsorbed molar concentration to mass; molar_weight * rho_rock * (1 - porosity) = k_H
Definition at line 281 of file isotherm.hh.
|
protected |
Optional secod parameter of the isotherm.
Definition at line 266 of file isotherm.hh.
|
protected |
Definition at line 271 of file isotherm.hh.
|
protected |
Step on the rotated X axes (total mass).
Definition at line 292 of file isotherm.hh.