Skip to content

Commit

Permalink
Exposing getDeltaEnthalpies to Matlab interface.
Browse files Browse the repository at this point in the history
The general intent here was to enable calculating reaction enthalpies in the
Matlab toolbox, as part of the li-ion battery simulations in PR Cantera#563.

This required several changes:

- Create getDeltaEnthalpies.m in Matlab toolbox/@kinetics, as well as similar
methods for Gibbs free energy and entropy of reaction
- Add kin_getDelta to kineticsmethods.cpp.
- Add getPartialMolarEnthalpies to metalPhase class (it returns all zeros).

Note that similar methods are not enabled for the corresponding
'Standard State' methods, for the time being.  Mainly because it is
difficult for me to envision a significant use case, but also because of
some lingering confusion between 'standard' and 'reference' states in
Cantera's codebase.
  • Loading branch information
decaluwe authored and srikanthallu committed Sep 17, 2020
1 parent ccaf7ab commit 75421d7
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 0 deletions.
5 changes: 5 additions & 0 deletions include/cantera/thermo/MetalPhase.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,11 @@ class MetalPhase : public ThermoPhase
c[n] = 1.0;
}
}
virtual void getPartialMolarEnthalpies(doublereal *h) const {
for (size_t n = 0; n < nSpecies(); n++) {
h[n] = 0.0;
}
}

virtual Units standardConcentrationUnits() const {
return Units(1.0);
Expand Down
14 changes: 14 additions & 0 deletions interfaces/matlab/toolbox/@Kinetics/getDeltaEnthalpies.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function dH = getDeltaEnthalpies(a)
% GETDELTAENTHALPIES Get the enthalpy of reaction for each reaction.
% dH = getDeltaEnthalpies(a)
%
% :param a:
% Instance of class :mat:func:`Kinetics` (or another
% object deriving from Kinetics) for which the enthalpies of
% reaction are desired.
% :return:
% Returns a vector of the enthalpy of reaction for each
% reaction. Units: J/kmol
%

dH = kinetics_get(a.id, 17, 0);
14 changes: 14 additions & 0 deletions interfaces/matlab/toolbox/@Kinetics/getDeltaEntropies.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function dS = getDeltaEntropies(a)
% GETDELTAENTROPIES Get the entropy of reaction for each reaction.
% dS = getDeltaEntropies(a)
%
% :param a:
% Instance of class :mat:func:`Kinetics` (or another
% object deriving from Kinetics) for which the entropies of
% reaction are desired.
% :return:
% Returns a vector of the entropy of reaction for each
% reaction. Units: J/kmol-K
%

dS = kinetics_get(a.id, 17, 2);
14 changes: 14 additions & 0 deletions interfaces/matlab/toolbox/@Kinetics/getDeltaGibbs.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
function dG = getDeltaGibbs(a)
% GETDELTAGIBBS Get the Gibbs free energy of reaction for each reaction.
% dG = getDeltaGibbs(a)
%
% :param a:
% Instance of class :mat:func:`Kinetics` (or another
% object deriving from Kinetics) for which the Gibbs free
% energies of reaction are desired.
% :return:
% Returns a vector of the Gibbs free energy of reaction
% for each reaction. Units: J/kmol
%

dG = kinetics_get(a.id, 17, 1);
3 changes: 3 additions & 0 deletions src/matlab/kineticsmethods.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ void kineticsmethods(int nlhs, mxArray* plhs[],
case 16:
ok = kin_getRevRateConstants(kin,1,nr,h);
break;
case 17:
ok = kin_getDelta(kin,getInt(prhs[3]),nr,h);
break;
default:
;
}
Expand Down

0 comments on commit 75421d7

Please sign in to comment.