|
chemmisol 0.1
|
Namespaces | |
| namespace | solver |
Classes | |
| class | AqueousSpecies |
| class | ChemicalComponent |
| class | ChemicalSpecies |
| struct | ChemicalSpeciesReagent |
| class | ChemicalSystem |
| struct | ComponentReagent |
| class | dH |
| class | EmptyReagents |
| class | FixedAqueousSpecies |
| class | FixedChemicalComponent |
| class | FixedChemicalSpecies |
| class | FixedMineralSpecies |
| class | H |
| class | Homotopy |
| class | InvalidMineralSpeciesWithUndefinedSitesCount |
| class | InvalidReaction |
| class | InvalidSpecies |
| class | MineralSpecies |
| class | MissingProducedSpeciesInReaction |
| class | Newton |
| class | Reaction |
| struct | Reagent |
| class | RegulaFalsi |
| class | Solvent |
| class | TooManyProducedSpeciesInReaction |
Typedefs | |
| template<typename T , std::size_t N> | |
| using | X = std::array< T, N > |
| template<typename T , std::size_t N, std::size_t P = N> | |
| using | M = std::array< std::array< T, P >, N > |
| template<typename T > | |
| using | VecX = std::vector< T > |
| template<typename T > | |
| using | VecM = std::vector< std::vector< T > > |
| template<typename X , typename M > | |
| using | AbsoluteNewton = Newton< X, M, abs > |
Enumerations | |
| enum | Phase { SOLVENT , AQUEOUS , MINERAL } |
| enum | Category { MASS , LENGTH , VOLUME , SURFACE , QUANTITY } |
Functions | |
| std::ostream & | operator<< (std::ostream &o, const Phase &phase) |
| el::Logger * | init_logger (const char *logger_id) |
| void | log_to_file (el::Logger *logger, const std::string &log_file, bool terminal_logging) |
| template<typename T > | |
| std::list< std::complex< T > > | unit_roots (int n) |
| template<typename T > | |
| std::list< std::complex< T > > | roots (const std::complex< T > &c, int n) |
| template<typename T , std::size_t N, std::size_t P> | |
| X< T, N > | operator* (const M< T, N, P > &m, const X< T, P > &x) |
| template<typename T , std::size_t N> | |
| X< T, N > | operator- (const X< T, N > &x) |
| template<typename T , std::size_t N> | |
| X< T, N > | operator+ (const X< T, N > &x1, const X< T, N > &x2) |
| template<typename T , std::size_t N> | |
| X< T, N > | operator* (const T &a, const X< T, N > &x) |
| template<typename T , std::size_t N, std::size_t P> | |
| M< T, N, P > | operator* (const T &a, const M< T, N, P > &m) |
| template<typename T , std::size_t N> | |
| double | norm (const X< T, N > &x) |
| template<typename T , std::size_t N> | |
| double | norm (const X< std::complex< T >, N > &x) |
| template<typename T , std::size_t N> | |
| X< T, N > | abs (const X< T, N > &x) |
| template<typename _M > | |
| M< typename _M::value_type::value_type, std::tuple_size< _M >::value, std::tuple_size< typename _M::value_type >::value+1 > | augment (const _M &m, const X< typename _M::value_type::value_type, std::tuple_size< _M >::value > &x) |
| template<typename T , std::size_t N> | |
| std::ostream & | operator<< (std::ostream &o, const X< T, N > &x) |
| template<typename T > | |
| VecX< T > | operator* (const VecM< T > &m, const VecX< T > &x) |
| template<typename T > | |
| VecX< T > | operator- (const VecX< T > &x) |
| template<typename T > | |
| VecX< T > | operator+ (const VecX< T > &x1, const VecX< T > &x2) |
| template<typename T > | |
| double | norm (const VecX< T > &x) |
| template<typename T > | |
| VecX< T > | abs (const VecX< T > &x) |
| template<typename T > | |
| VecM< T > | augment (const VecM< T > &m, const VecX< T > &x) |
| template<typename T > | |
| std::ostream & | operator<< (std::ostream &o, const VecX< T > &x) |
| template<typename T > | |
| double | norm (const T &x) |
| template<typename T > | |
| T | abs (const T &x) |
| template<typename T > | |
| T | identity (const T &x) |
Variables | |
| el::Logger * | core_logger |
| constexpr double | pi = 3.141592653589793238462643383279502884 |
| const double | NA |
Main Chemmisol namespace.
| using chemmisol::X = typedef std::array<T, N> |
Vector type hosted by a fixed size std::array.
| using chemmisol::M = typedef std::array<std::array<T, P>, N> |
Matrix type hosted by a fixed size std::array.
The matrix contains N rows and P columns.
| using chemmisol::VecX = typedef std::vector<T> |
Vector type hosted by a dynamic size std::vector.
| using chemmisol::VecM = typedef std::vector<std::vector<T> > |
Matrix type hosted by a dynamic size std::vector.
Implements the absolute Newton-Raphson method, where the absolute value of x_n+1 is taken as the result of each iteration.
This variant is particularly suitable for chemical equilibrium solving, since it guarantees that x_n+1, that represents activity of species, is always positive.
Moreover, the absolute Newton-Raphson method has proven to have a much larger basin of attraction than the classical Newton-Raphson method [1].
[1] K. Meintjes and A. P. Morgan, “A methodology for solving chemical equilibrium systems,” Applied Mathematics and Computation, vol. 22, no. 4, pp. 333–361, Jun. 1987, doi: 10.1016/0096-3003(87)90076-2.
| enum chemmisol::Phase |
Possible phases of a chemical species.
| enum chemmisol::Category |
Describes the category of each unit.
| std::ostream & chemmisol::operator<< | ( | std::ostream & | o, |
| const Phase & | phase | ||
| ) |
Phases stream output operator.
| el::Logger * chemmisol::init_logger | ( | const char * | logger_id | ) |
Initializes and configures a chemmisol logger with the specified ID.
The method is notably used to initialize the chemmisol::core_logger with the CHEM_CORE_LOGID, but can be used to define other loggers with the same configuration ad the chemmisol::core_logger.
| logger_id | ID of the logger, used in Easylogging++ CLOG() and CVLOG() macros. |
| void chemmisol::log_to_file | ( | el::Logger * | logger, |
| const std::string & | log_file, | ||
| bool | terminal_logging | ||
| ) |
Configures the specified logger to output to the specified log file. Logging to std::cout can also be disabled thanks to the terminal_logging argument.
Any Easylogging++ logger can be configured this way, including the chemmisol::core_logger or any logger initialized with init_logger().
| logger | Logger to output to a file. |
| log_file | Full path to the log file. |
| terminal_logging | Set to false to disable std::cout logging. |
| X< T, N > chemmisol::operator* | ( | const M< T, N, P > & | m, |
| const X< T, P > & | x | ||
| ) |
Computes m*x as a matrix multiplication.
| m | Matrix of size N*P. |
| x | Vector of size P. |
Computes -x = [-x_0, ..., -x_N-1].
| x | Vector of size N. |
| X< T, N > chemmisol::operator+ | ( | const X< T, N > & | x1, |
| const X< T, N > & | x2 | ||
| ) |
Computes x1+x2 = [x1_0+x2_0, ..., x1_N-1 + x2_N-1].
| x1 | Vector of size N. |
| x2 | Vector of size N. |
| double chemmisol::norm | ( | const X< T, N > & | x | ) |
Computes the euclidean norm of the vector.
Computes the absolute value the vector.
| M< typename _M::value_type::value_type, std::tuple_size< _M >::value, std::tuple_size< typename _M::value_type >::value+1 > chemmisol::augment | ( | const _M & | m, |
| const X< typename _M::value_type::value_type, std::tuple_size< _M >::value > & | x | ||
| ) |
Implements the augment operation used by the Gaussian elimination algortihm for fixed size matrices and vectors.
Returns a new matrix corresponding to the concatenation of m and x, where x represents the last column of the new matrix.
| m | Matrix of size N*P. |
| x | Vector of size N. |
| _M | Fixed size matrix type. |
| std::ostream & chemmisol::operator<< | ( | std::ostream & | o, |
| const X< T, N > & | x | ||
| ) |
Fixed size vector stream output operator.
The vector is serialized as "[x0, ..., xn]".
Computes m*x as a matrix multiplication.
| m | Matrix of size N*P. |
| x | Vector of size P. |
Computes -x = [-x_0, ..., -x_N-1].
| x | Vector of size N. |
Computes x1+x2 = [x1_0+x2_0, ..., x1_N-1 + x2_N-1].
The behavior is unspecified if x1 and x2 are not the same size.
| x1 | Vector of size N. |
| x2 | Vector of size N. |
| double chemmisol::norm | ( | const VecX< T > & | x | ) |
Computes the euclidean norm of the vector.
Computes the absolute value the vector.
Implements the augment operation used by the Gaussian elimination algortihm for dynamic size matrices and vectors.
Returns a new matrix corresponding to the concatenation of m and x, where x represents the last column of the new matrix.
The behavior is unspecified if the size of x is not equal to the count of rows in m.
| m | Matrix of size N*P. |
| x | Vector of size N. |
| std::ostream & chemmisol::operator<< | ( | std::ostream & | o, |
| const VecX< T > & | x | ||
| ) |
Dynamic size vector stream output operator.
The vector is serialized as "[x0, ..., xn]".
| double chemmisol::norm | ( | const T & | x | ) |
Returns the norm of the scalar value x, i.e. its absolute value.
| T chemmisol::abs | ( | const T & | x | ) |
Returns the absolute value of the scalar value x.
| T chemmisol::identity | ( | const T & | x | ) |
Identity method, that returns x itself.
|
extern |
Pointer to the Easylogging++ Logger used internally by the chemmisol library.
|
extern |
The Avogadro constant.