Flow123d
jenkins-Flow123d-linux-release-multijob-282
|
#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) |
template<> | |
Isotherm::ConcPair | solve_conc (Isotherm::ConcPair c_pair, const None &isotherm) |
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 146 of file isotherm.hh.
Type of adsorption isotherm.
Enumerator | |
---|---|
none | |
linear | |
freundlich | |
langmuir |
Definition at line 162 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 344 of file isotherm.hh.
|
inlineprotected |
Update concentrations using interopolation.
Definition at line 370 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 358 of file isotherm.hh.
|
inline |
Returns true if interpolation table is created.
Definition at line 216 of file isotherm.hh.
void Isotherm::make_table | ( | const None & | isotherm, |
int | n_steps | ||
) |
Definition at line 54 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 11 of file isotherm.cc.
|
protected |
Implementation of interpolation construction for particular isotherm functor. Specialized for sorption 'none' - creates empty table.
Definition at line 473 of file isotherm.hh.
|
inlineprotected |
Modify concentrations after adsorption for limited solubility.
Definition at line 395 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 326 of file isotherm.hh.
Isotherm::ConcPair Isotherm::solve_conc | ( | Isotherm::ConcPair | c_pair, |
const None & | isotherm | ||
) |
Definition at line 49 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 404 of file isotherm.hh.
|
inlineprotected |
Dispatch isotherm type and use appropriate template.
Definition at line 439 of file isotherm.hh.
Isotherm::ConcPair Isotherm::solve_conc | ( | Isotherm::ConcPair | c_pair, |
const None & | isotherm | ||
) |
Isotherm::TYPEDEF_ERR_INFO | ( | EI_BoostMessage | , |
std::string | |||
) |
Isotherm::TYPEDEF_ERR_INFO | ( | EI_TotalMass | , |
double | |||
) |
|
protected |
Type of isotherm.
Definition at line 252 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 280 of file isotherm.hh.
|
protected |
reciprocal values
Definition at line 275 of file isotherm.hh.
|
protected |
Definition at line 275 of file isotherm.hh.
|
protected |
Solubility limit flag.
Definition at line 266 of file isotherm.hh.
|
protected |
Multiplication parameter of the isotherm.
Definition at line 255 of file isotherm.hh.
|
protected |
density of the solvent
Definition at line 269 of file isotherm.hh.
|
protected |
coefficient that convert soluted concentration to mass; porosity = k_W, originally rho_aqua*porosity = k_W
Definition at line 271 of file isotherm.hh.
|
protected |
coefficient that convert adsorbed molar concentration to mass; molar_weight * rho_rock * (1 - porosity) = k_H
Definition at line 273 of file isotherm.hh.
|
protected |
Optional secod parameter of the isotherm.
Definition at line 258 of file isotherm.hh.
|
protected |
Definition at line 263 of file isotherm.hh.
|
protected |
Step on the rotated X axes (total mass).
Definition at line 284 of file isotherm.hh.