Flow123d  release_2.2.0-914-gf1a3a4f
Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Isotherm Class Reference

#include <isotherm.hh>

Collaboration diagram for Isotherm:
Collaboration graph
[legend]

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_
 

Detailed Description

Class describing one isotherm with possibly precalculated interpolation table.

Definition at line 154 of file isotherm.hh.

Member Enumeration Documentation

Type of adsorption isotherm.

Enumerator
none 
linear 
freundlich 
langmuir 

Definition at line 170 of file isotherm.hh.

Member Function Documentation

void Isotherm::compute ( double &  c_aqua,
double &  c_sorbed 
)
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.

Isotherm::ConcPair Isotherm::compute_projection ( Isotherm::ConcPair  c_pair)
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"   
)
void Isotherm::interpolate ( double &  c_aqua,
double &  c_sorbed 
)
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.

bool Isotherm::is_precomputed ( void  )
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.

template<class Func >
void Isotherm::make_table ( const Func &  isotherm,
int  n_points 
)
protected

Implementation of interpolation construction for particular isotherm functor. Specialized for sorption 'none' - creates empty table.

Definition at line 481 of file isotherm.hh.

Isotherm::ConcPair Isotherm::precipitate ( Isotherm::ConcPair  c_pair)
inlineprotected

Modify concentrations after adsorption for limited solubility.

Definition at line 403 of file isotherm.hh.

void Isotherm::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 
)
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:

Parameters
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.

Here is the caller graph for this function:

Isotherm::ConcPair Isotherm::solve_conc ( Isotherm::ConcPair  c_pair,
const None isotherm 
)

Definition at line 60 of file isotherm.cc.

template<class Func >
Isotherm::ConcPair Isotherm::solve_conc ( Isotherm::ConcPair  c_pair,
const Func &  isotherm 
)
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.

Isotherm::ConcPair Isotherm::solve_conc ( Isotherm::ConcPair  conc)
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   
)

Member Data Documentation

enum SorptionType Isotherm::adsorption_type_
protected

Type of isotherm.

Definition at line 260 of file isotherm.hh.

vector<double> Isotherm::interpolation_table
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.

double Isotherm::inv_scale_aqua_
protected

reciprocal values

Definition at line 283 of file isotherm.hh.

double Isotherm::inv_scale_sorbed_
protected

Definition at line 283 of file isotherm.hh.

bool Isotherm::limited_solubility_on_
protected

Solubility limit flag.

Definition at line 274 of file isotherm.hh.

double Isotherm::mult_coef_
protected

Multiplication parameter of the isotherm.

Definition at line 263 of file isotherm.hh.

double Isotherm::rho_aqua_
protected

density of the solvent

Definition at line 277 of file isotherm.hh.

double Isotherm::scale_aqua_
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.

double Isotherm::scale_sorbed_
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.

double Isotherm::second_coef_
protected

Optional secod parameter of the isotherm.

Definition at line 266 of file isotherm.hh.

double Isotherm::table_limit_
protected

Definition at line 271 of file isotherm.hh.

double Isotherm::total_mass_step_
protected

Step on the rotated X axes (total mass).

Definition at line 292 of file isotherm.hh.


The documentation for this class was generated from the following files: