chemmisol 0.1
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | List of all members
chemmisol::MineralSpecies Class Reference

#include <species.h>

Inheritance diagram for chemmisol::MineralSpecies:
Inheritance graph
[legend]
Collaboration diagram for chemmisol::MineralSpecies:
Collaboration graph
[legend]

Public Member Functions

 MineralSpecies (const std::string &name, std::size_t index, double solid_concentration, double specific_surface_area, double site_concentration, double fraction)
 
Phase getPhase () const override
 
void incrementConcentration (double extent) override
 
double concentration () const override
 
double concentration (double quantity) const override
 
double quantity (double activity) const override
 
std::complex< double > quantity (std::complex< double > activity) const override
 
double activity (double concentration) const override
 
void setActivity (double activity) override
 
- Public Member Functions inherited from chemmisol::ChemicalSpecies
const std::string & getName () const
 
std::size_t getIndex () const
 
double activity () const
 
double quantity () const
 

Static Public Member Functions

static double sites_quantity (double solid_concentration, double specific_surface_area, double site_concentration)
 

Additional Inherited Members

- Protected Member Functions inherited from chemmisol::ChemicalSpecies
 ChemicalSpecies (const std::string &name, std::size_t index)
 

Detailed Description

Mineral species implementation.

A mineral component is a component adsorbed on a mineral (i.e. solid) phase to form surface complexes.

In order to define this concept, we need to introduce the notion of free sites. A free site is a metal hydroxide component integrated in a mineral phase, at the interface with the surrounding solution. Free sites are typically noted =SOH, where S is a metal ion such as Fe or Al.

Mineral species can then be formed fixing aqueous species on free sites. Here is some example reactions (charges are not represented except for H+ for the sake of simplicity), that form the =SOH2 and =SOPO3 MineralComponents:

=SOH + H+ <-> =SOH2
=SOH + PO4 + H+ <-> =SOPO3 + H2O

An AqueousSpecies can also occupy several free sites to form bidentate surface complexes:

2=SOH + PO4 + 2H+ <-> (=SOH)2 PO3 + 2H2O

Such feature is easily represented by stoichiometric coefficients, and does not require any particular consideration as long as mineral components activities are properly defined.

Indeed, the concentration of a MineralSpecies is rather considered as a molar fraction (without unit) rather than a mole concentration (mol/l). To define this fraction, we need to define N, the total quantity of possible free sites. Notice that this is different from the currently free sites: it is a constant representing all the surface sites, occupied and unoccupied. The molar fraction of the MineralSpecies used as concentration() is then defined as n/N where n denotes the current quantity of adsorbed MineralSpecies. The activity of the MineralSpecies is defined equal to this concentration.

See Hiemstra 1996 for more detailed and theoretical considerations about surface complexes.

Constructor & Destructor Documentation

◆ MineralSpecies()

chemmisol::MineralSpecies::MineralSpecies ( const std::string &  name,
std::size_t  index,
double  solid_concentration,
double  specific_surface_area,
double  site_concentration,
double  fraction 
)
inline

Defines a MineralSpecies.

N is calculated as V * solid_concentration * specific_surface_area * site_concentration. Where V is the arbitrary and constant volume of the solution defined in AqueousSpecies::V.

The molar fraction of the component is initialized from the specified fraction parameter.

Parameters
nameName of the component.
indexUnique index of the component.
solid_concentrationQuantity of mineral in suspension in the solution, usually expressed in g/l.
specific_surface_areaSurface of the solid in contact with the solution per unit of mass, usually expressed in m2/g.
site_concentrationQuantity of sites per unit of surface in contact with the solution, usually expressed as sites/nm2.
fractionInitial molar fraction of this mineral species.

It is the responsibility of the user to ensure unit consistency. Predefined units can be used for this purpose, for example:

using namespace mineral;
MineralSpecies species(
    "=SOH2", i,
    0.1, // molar fraction, without unit
    2.5 * g/l, // solid concentration
    24.2 * m2/g, // specific surface area
    0.8 * entities/nm2 // site concentration
);

Notice that the previous example is actually consistent, even if the specific surface area is specified as m2 /g and the site concentration is specified in entities/ nm2, since the purpose of the *unit computation is to convert each numerical value to the standard and consistent unit system used internally.

Member Function Documentation

◆ sites_quantity()

static double chemmisol::MineralSpecies::sites_quantity ( double  solid_concentration,
double  specific_surface_area,
double  site_concentration 
)
static

Computes the total quantity of mineral sites that corresponds to the provided parameters.

The chemmisol unit system should be used to ensure unit consistency.

Example
2.5 * g/l,
24.2 * m2/g,
0.8 * entities/nm2,
);
double quantity() const
Definition species.h:159
static double sites_quantity(double solid_concentration, double specific_surface_area, double site_concentration)
Parameters
solid_concentrationQuantity of mineral in suspension in the solution, usually expressed in g/l.
specific_surface_areaSurface of the solid in contact with the solution per unit of mass, usually expressed in m2/g.
site_concentrationQuantity of sites per unit of surface in contact with the solution, usually expressed as sites/nm2.
Returns
quantity of sites (mol)

◆ getPhase()

Phase chemmisol::MineralSpecies::getPhase ( ) const
inlineoverridevirtual

Phase of the chemical species.

Implements chemmisol::ChemicalSpecies.

◆ incrementConcentration()

void chemmisol::MineralSpecies::incrementConcentration ( double  extent)
inlineoverridevirtual

Increments the concentration of the current component, considering that its absolute quantity is incremented by extent.

For components in solution, this is typically C = C + extent/V.

Parameters
extentQuantity of the current component added to the system

Implements chemmisol::ChemicalSpecies.

◆ concentration() [1/2]

double chemmisol::MineralSpecies::concentration ( ) const
inlineoverridevirtual

Returns the current concentration of the component.

The theoretical definition of the concentration might vary depending on the nature of the component (aqueous, gaz, mineral...).

Returns
Current concentration of the component

Implements chemmisol::ChemicalSpecies.

◆ concentration() [2/2]

double chemmisol::MineralSpecies::concentration ( double  quantity) const
inlineoverridevirtual

Computes the concentration of the current component corresponding to the specified quantity.

Notice that quantity might be different from quantity(), and that this call does not modify the concentration of the current component.

Parameters
quantityQuantity of the component
Returns
Computed concentration of the component

Implements chemmisol::ChemicalSpecies.

◆ quantity() [1/2]

double chemmisol::MineralSpecies::quantity ( double  activity) const
inlineoverridevirtual

Computes the quantity of the current component corresponding to the specified concentration.

Notice that activity might be different from activity(), and that this call does not modify the quantity of the current component.

Parameters
activityActivity of the component
Returns
Computed quantity of the component

Implements chemmisol::ChemicalSpecies.

◆ quantity() [2/2]

std::complex< double > chemmisol::MineralSpecies::quantity ( std::complex< double >  activity) const
inlineoverridevirtual

◆ activity()

double chemmisol::MineralSpecies::activity ( double  concentration) const
inlineoverridevirtual

Computes the activity of the current component corresponding to the specified concentration.

Notice that concentration might be different from concentration(), and that this call does not modify the activity of the current component.

Parameters
concentrationConcentration of the component
Returns
Computed activity of the component

Implements chemmisol::ChemicalSpecies.

◆ setActivity()

void chemmisol::MineralSpecies::setActivity ( double  activity)
inlineoverridevirtual

Sets the activity of the chemical species. The quantity() and concentration() values are updated accordingly.

Implements chemmisol::ChemicalSpecies.


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