Page MenuHomec4science

thermodata.hpp
No OneTemporary

File Metadata

Created
Mon, May 27, 11:04

thermodata.hpp

/*-------------------------------------------------------
- Module : specmicp
- File : thermodata.hpp
- Author : Fabien Georget
Copyright (c) 2014, Fabien Georget, Princeton University
---------------------------------------------------------*/
#ifndef SPECMICP_SPECMICP_THERMODATA_HPP
#define SPECMICP_SPECMICP_THERMODATA_HPP
//! \file thermodata.hpp Thermodynamic data
#include <memory>
#include <Eigen/Dense>
#include "database/data_container.hpp"
namespace specmicp {
// FIXME : use value in database instead
const double molar_mass_water = 18e-3;
//! Contains the thermodynamic data necessary to the computation
//!
//! Huge storage class
class ThermoData
{
public:
using id_t = int;
ThermoData() {}
ThermoData(std::shared_ptr<database::DataContainer> thedata):
data(thedata)
{}
//! Return the number of components
int nb_component() {return data->nb_component;}
//! Return the number of aqueous species
int nb_aqueous() {return data->nb_aqueous;}
//! Return the number of minerals
int nb_mineral() {return data->nb_mineral;}
//! Return the number of minerals governed by kinetics
int nb_mineral_kinetic() {return data->nb_mineral_kinetic;}
//! Return the equilibrium constant for species 'id'
double logkr(id_t id) {
if (id < nb_aqueous()) return data->logk_aqueous(id);
else return data->logk_mineral(id - nb_aqueous());
}
//! Return the equilibrium constant for aqueous species 'id'
double logkr_aq(id_t id) {
assert(id < nb_aqueous());
return data->logk_aqueous(id);
}
//! Return the equilibrium constant for mineral 'id'
double logkr_min(id_t id) {
assert(id < nb_mineral());
return data->logk_mineral(id);
}
//! Return the equilibrium constant for mineral governed by kinetic 'id'
double logkr_min_kinetic(id_t id) {
assert(id < nb_mineral());
return data->logk_mineral_kinetic(id);
}
//! Return the stoeichiometric coefficient for reaction 'ids' and component 'idp'
double nu(id_t ids, id_t idp) {
if (ids < nb_aqueous()) return data->nu_aqueous(ids, idp);
else return data->nu_mineral(ids - nb_aqueous(), idp);
}
//! Return the stoechiometric coefficient for aqueous species 'ids' and component 'idp'
double nu_aq(id_t ids, id_t idp) {
assert(ids < nb_aqueous());
return data->nu_aqueous(ids, idp);
}
//! Return the stoeochiometric coefficient for mineral 'idm' and and component 'idp'
double nu_min(id_t idm, id_t idp) {
assert(idm < nb_mineral());
return data->nu_mineral(idm, idp);
}
//! Return the stoeochiometric coefficient for mineral governed by kinetic 'idm' and and component 'idp'
double nu_min_kinetic(id_t idm, id_t idp) {
assert(idm < nb_mineral_kinetic());
return data->nu_mineral_kinetic(idm, idp);
}
//! Return charge of aqueous species 'id'
double charge(id_t id) {return data->param_aq(id, 0);}
//! Return charge of primary species
double charge_paq(id_t idp) {return charge(idp);}
//! Return charge of secondary aqueous species
double charge_saq(id_t ids) {return charge(ids+nb_component());}
//! Return ion size parameter
double ao_debye(id_t id) {return data->param_aq(id, 1);}
//! Return ion size parameter of a primary species
double ao_debye_paq(id_t idp) {return ao_debye(idp);}
//! Return ion size parameter of a secondary species
double ao_debye_saq(id_t ids) {return ao_debye(ids+nb_component());}
//! Return 'bdot' parameter
double bdot_debye(id_t id) {return data->param_aq(id, 2);}
//! Return 'bdot' parameter for a primary species
double bdot_debye_paq(id_t idp) {return bdot_debye(idp);}
//! Return 'bdot' parameter for a aqueous secondary species
double bdot_debye_saq(id_t ids) {return bdot_debye(ids+nb_component());}
std::string label_basis(id_t id) {return data->labels_basis[id];}
std::string label_aqueous(id_t id) {return data->labels_aqueous[id];}
std::string label_mineral(id_t id) {return data->labels_minerals[id];}
std::shared_ptr<database::DataContainer> get_raw_database() {return data;}
private:
std::shared_ptr<database::DataContainer> data;
};
} // end namespace specmicp
#endif // SPECMICP_SPECMICP_THERMODATA_HPP

Event Timeline