Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F64515783
thermodata.hpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, May 27, 11:04
Size
4 KB
Mime Type
text/x-c++
Expires
Wed, May 29, 11:04 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
17915432
Attached To
rSPECMICP SpecMiCP / ReactMiCP
thermodata.hpp
View Options
/*-------------------------------------------------------
- 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
Log In to Comment