Skip to content

Add rapid equilibrium reactions for CSTR #324

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/libcadet/Memory.hpp
Original file line number Diff line number Diff line change
@@ -353,6 +353,14 @@ namespace cadet

explicit operator T*() const { return _ptr; }

// method to copy elements from std::vector
void copyFromVector(const std::vector<T>& vec) {
if (vec.size() > _numElements) {
throw std::out_of_range("Vector size exceeds BufferedArray size");
}
std::copy(vec.begin(), vec.end(), _ptr);
}

private:
BufferedArray(T* ptr, unsigned int numElements) : _ptr(ptr), _numElements(numElements) { }

Original file line number Diff line number Diff line change
@@ -593,7 +593,6 @@ void LumpedRateModelWithPores<ConvDispOperator>::consistentInitialState(const Si
}

// Step 1b: Compute fluxes j_f

// Reset j_f to 0.0
double* const jf = vecStateY + idxr.offsetJf();
std::fill(jf, jf + _disc.nComp * _disc.nCol * _disc.nParType, 0.0);
Original file line number Diff line number Diff line change
@@ -133,6 +133,7 @@ int LumpedRateModelWithPores<ConvDispOperator>::linearSolve(double t, double alp
{
// Assemble and factorize discretized bulk Jacobian
const bool result = _convDispOp.assembleAndFactorizeDiscretizedJacobian(alpha);

if (cadet_unlikely(!result))
{
LOG(Error) << "Factorize() failed for bulk block";
2 changes: 2 additions & 0 deletions src/libcadet/model/LumpedRateModelWithPores.cpp
Original file line number Diff line number Diff line change
@@ -355,6 +355,7 @@ bool LumpedRateModelWithPores<ConvDispOperator>::configureModelDiscretization(IP

if (_dynReactionBulk->usesParamProviderInDiscretizationConfig())
paramProvider.popScope();

}

clearDynamicReactionModels();
@@ -563,6 +564,7 @@ bool LumpedRateModelWithPores<ConvDispOperator>::configure(IParameterProvider& p
{
paramProvider.pushScope("reaction_bulk");
dynReactionConfSuccess = _dynReactionBulk->configure(paramProvider, _unitOpIdx, ParTypeIndep);
_convDispOp.setDynamicReactionBulk(_dynReactionBulk);
paramProvider.popScope();
}

20 changes: 20 additions & 0 deletions src/libcadet/model/ReactionModel.hpp
Original file line number Diff line number Diff line change
@@ -315,6 +315,26 @@ class IDynamicReactionModel
*/
virtual unsigned int numReactionsCombined() const CADET_NOEXCEPT = 0;

// conserved moitie methods:
virtual auto numConservedMoities() const CADET_NOEXCEPT -> unsigned int { return 0; }

virtual auto configureConservedMoity() -> bool{ return false;}

virtual auto matrixMoietiesBulk() -> Eigen::Matrix<active, Eigen::Dynamic, Eigen::Dynamic> { return Eigen::Matrix<active, Eigen::Dynamic, Eigen::Dynamic>(0, 0); }

virtual auto quasiStationaryComponentMap() const -> std::vector<int> { return std::vector<int>{0}; }

virtual auto algIdx()const -> std::vector<int> { return std::vector<int>{0}; }

virtual auto consMoityIdx() -> std::vector<int> { return std::vector<int>{0}; }

virtual auto numReactionQuasiStationary() const -> unsigned int { return 0; }

virtual auto hasQuasiStationaryReactionsBulk() const CADET_NOEXCEPT -> bool { return false; }

virtual void timeDerivativeQuasiStationaryReaction(double t, unsigned int secIdx, const ColumnPosition& colPos, double const* y, double* dY, LinearBufferAllocator workSpace) const {}


protected:
};

Loading