/usr/include/ASL/num/aslFDElChemKinetics.h is in libasl-dev 0.1.7-2build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | /*
* Advanced Simulation Library <http://asl.org.il>
*
* Copyright 2015 Avtech Scientific <http://avtechscientific.com>
*
*
* This file is part of Advanced Simulation Library (ASL).
*
* ASL is free software: you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, version 3 of the License.
*
* ASL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with ASL. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef ASLFDELCHEMKINETICS_H
#define ASLFDELCHEMKINETICS_H
#include "aslSingleKernelNM.h"
#include "acl/aclMath/aclVectorOfElementsDef.h"
namespace acl
{
class VectorOfElementsData;
class VectorOfElements;
}
namespace asl
{
class VectorTemplate;
template <typename V> class DataWithGhostNodes;
typedef DataWithGhostNodes<acl::VectorOfElementsData> DataWithGhostNodesACLData;
typedef std::shared_ptr<DataWithGhostNodesACLData> SPDataWithGhostNodesACLData;
/// Numerical method which computes electrode reactions
/**
!!!!!!!!!!!!need corrections
\ingroup ChemicalReactions
\ingroup NumMethods
Description of an electrochemical kinetic reaction on an electrode:
\f[ \ce{A <-> A^{n+} + n e-} \f]
The reaction kinetics is described by the Butler-Volmer equation:
\f[ j = j_0 c_A \cdot \left( e^{\frac { \alpha_a nF \eta} {RT}} - e^{ - { \frac { \alpha_c nF \eta} {RT}} } \right), \f]
where
- \f$ j_0 \f$ is an exchange current density, \f$ A/m^2 \f$, note the algorithm assumes \f$ mol/m^2/s \f$
- \f$ T \f$ is absolute temperature, \f$K\f$
- \f$ n \f$ is number of electrons involved in the electrode reaction
- \f$ F \f$ is the Faraday constant, \f$ 9.64853399 \cdot 10^4 C mol^{-1} \f$
- \f$ R \f$ is universal gas constant, \f$ 8.3144621 J K^{-1} mol^{-1} \f$
- \f$\alpha_c\f$ is so-called cathodic charge transfer coefficient
- \f$\alpha_a\f$ is so-called anodic charge transfer coefficient, dimensionless
- \f$\eta\f$ is activation overpotential defined as: \f$\eta = \phi - \phi_{eq}\f$
- \f$E\f$ is electrode potential, \f$ V \f$
- \f$E_{eq}\f$ equilibrium potential, \f$ V \f$
- \f$c_A\f$ concentration of the component \f$\ce{A}\f$
The equation describes chemical reaction namely it can be used together
with an appropriate transport equations and equation for the elecrostatic potential:
\f[ c_A^R = c_A - j \f]
\f[ c_{A^{n+}}^R = c_{A^{n+}} + j \f]
\f[ \vec\nabla \kappa \vec\nabla\phi + S_\phi = 0 \f]
class parameters are related to the quation ones as follows
\param a0 molar concentration of the component before reaction
\param aI molar concentration of the ionized component
\param efSPhi source term in the equation for electrostatic potential
\param phi electrostatic potential, \f$ \phi \f$
\param j0 corresponds to \f$ j_0 \f$, note it should have the same units as concentrations
\param phi0 corresponds to \f$ \phi_{eq} \f$
\param alphaA corresponds to \f$ \frac { \alpha_a F} {RT} \f$
\param alphaC corresponds to \f$ \frac { \alpha_c F} {RT} \f$
\param n corresponds to \f$ n \f$
*/
class FDBVKinetics: public SingleKernelMapNM
{
public:
typedef SPDataWithGhostNodesACLData Data;
typedef SPAbstractDataWithGhostNodes Field;
typedef acl::VectorOfElements Param;
private:
acl::SPKernel kernelJ;
std::vector<Data> aI;
Data efSPhi;
Field phi;
vector<double> nI;
Param j0;
Param beta;
double n;
virtual void init0();
public:
FDBVKinetics(Data a0,
double n0,
Data aI,
double nI,
Data phiS,
Field phi,
const Param & j0,
const Param & beta,
double n);
void setElectricFieldSource(Field phi);
Field getElectricFieldSource() const;
inline Data & getAI(unsigned int i=0);
void addAI(Data ai, double ni);
void executeJ();
};
typedef std::shared_ptr<FDBVKinetics> SPFDBVKinetics;
SPFDBVKinetics generateFDBVKinetics(SPDataWithGhostNodesACLData a0,
double n0,
SPDataWithGhostNodesACLData aI,
double nI,
SPDataWithGhostNodesACLData phiS,
SPAbstractDataWithGhostNodes phi,
double j0,
double beta,
double n);
// ------------------------- Implementation ------------------------
inline FDBVKinetics::Data & FDBVKinetics::getAI(unsigned int i)
{
return aI[i];
}
} // asl
#endif // ASLFDADVECTIONDIFFUSION_H
|