chemmisol 0.1
|
#include <species.h>
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) | |
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.
|
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.
name | Name of the component. |
index | Unique index of the component. |
solid_concentration | Quantity of mineral in suspension in the solution, usually expressed in g/l. |
specific_surface_area | Surface of the solid in contact with the solution per unit of mass, usually expressed in m2/g. |
site_concentration | Quantity of sites per unit of surface in contact with the solution, usually expressed as sites/nm2. |
fraction | Initial 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.
|
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.
solid_concentration | Quantity of mineral in suspension in the solution, usually expressed in g/l. |
specific_surface_area | Surface of the solid in contact with the solution per unit of mass, usually expressed in m2/g. |
site_concentration | Quantity of sites per unit of surface in contact with the solution, usually expressed as sites/nm2. |
|
inlineoverridevirtual |
Phase of the chemical species.
Implements chemmisol::ChemicalSpecies.
|
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
.
extent | Quantity of the current component added to the system |
Implements chemmisol::ChemicalSpecies.
|
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...).
Implements chemmisol::ChemicalSpecies.
|
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.
quantity | Quantity of the component |
Implements chemmisol::ChemicalSpecies.
|
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.
activity | Activity of the component |
Implements chemmisol::ChemicalSpecies.
|
inlineoverridevirtual |
Implements chemmisol::ChemicalSpecies.
|
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.
concentration | Concentration of the component |
Implements chemmisol::ChemicalSpecies.
|
inlineoverridevirtual |
Sets the activity of the chemical species. The quantity() and concentration() values are updated accordingly.
Implements chemmisol::ChemicalSpecies.