Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
a7addbf
Generator: removed the `model()` and `setModel()` APIs.
agarny Oct 16, 2024
9acc693
Merge branch 'issue1243' into issue1244
agarny Oct 17, 2024
9ebd686
Generator: specify tracked/untracked variables.
agarny Oct 17, 2024
cb7cb1f
API documentation: some minor cleaning up.
agarny Oct 17, 2024
5a69d69
AnalyserModel: added a way to retrieve an AnalyserVariable object fro…
agarny Oct 17, 2024
efd13dc
CMake: don't use hints to find llvm-cov and llvm-profdata.
agarny Oct 17, 2024
cfbf664
CMake: let the user know where the coverage report can be found.
agarny Oct 17, 2024
f8491c7
Generator: specify tracked/untracked variables.
agarny Oct 18, 2024
327e00e
Generator: specify tracked/untracked variables.
agarny Oct 18, 2024
5d83e85
Generator: specify tracked/untracked variables.
agarny Oct 18, 2024
d5ffe1a
Generator: specify tracked/untracked variables.
agarny Oct 18, 2024
7d6c8e2
Updated our Python and JavaScript bindings.
agarny Oct 21, 2024
3ac893b
Generator: test the code generation when tracking no variables at all.
agarny Oct 21, 2024
b9492a5
Merge branch 'python' into issue1260.
agarny Oct 21, 2024
e917ba4
Merge branch 'issue1257' into issue1260.
agarny Oct 21, 2024
f1fa3ed
Merge branch 'issue1251' into issue1260.
agarny Oct 21, 2024
8175278
Merge branch 'issue1243' into issue1260
agarny Oct 21, 2024
c0eef39
Some minor cleaning up.
agarny Oct 21, 2024
dba1002
Merge branch 'issue1243' into issue1260.
agarny Oct 21, 2024
9c70e41
Merge branch 'issue1243' into issue1260.
agarny Oct 21, 2024
aeea86c
Some minor cleaning up.
agarny Oct 21, 2024
c7a98fa
Merge branch 'issue1243' into issue1260.
agarny Oct 21, 2024
fe0fb28
Merge branch 'issue1243' into issue1260.
agarny Oct 21, 2024
228e25a
Merge branch 'issue1243' into issue1260.
agarny Oct 22, 2024
76ec2b9
Merge branch 'issue1260' into issue1244
agarny Oct 22, 2024
cabb263
Some minor cleaning up.
agarny Oct 23, 2024
32a5d53
Generator: doIsTrackedVariable() should always return true if a varia…
agarny Oct 23, 2024
804c2c4
Generator: take into account tracked/untracked variables when generat…
agarny Oct 23, 2024
7b20da1
Merge branch 'main' into issue1244
agarny Oct 23, 2024
712f8fb
Merge branch 'issue1244' of https://github.com/agarny/libcellml into …
agarny Oct 23, 2024
9a65414
GeneratorProfile: removed unneeded methods.
agarny Oct 26, 2024
ee3a7f1
AnalyserEquation: renamed a coupe of equation types.
agarny Oct 23, 2024
55b9664
Generator: a VOI and a state are always considered to be tracked.
agarny Oct 25, 2024
9c34561
GeneratorProfile: added a way to declare an untracked variable.
agarny Oct 26, 2024
ba471ff
Generator: take into account tracked/untracked variables when generat…
agarny Oct 23, 2024
723d025
Merge branch 'main' into issue1244
agarny Oct 26, 2024
b2748c5
Generator: take into account tracked/untracked variables when generat…
agarny Oct 27, 2024
4eb0eec
Merge branch 'main' into issue1244
agarny Oct 27, 2024
d259602
Generator: take into account tracked/untracked variables when generat…
agarny Oct 27, 2024
c29007f
Merge branch 'issue1243' into issue1244.
agarny Oct 28, 2024
b4b0e7a
Generator: take into account tracked/untracked variables when generat…
agarny Oct 28, 2024
006f0f0
Merge branch 'issue1243' into issue1244.
agarny Oct 28, 2024
3ae3636
Generator: external variables shouldn't be included when tracking/unt…
agarny Oct 29, 2024
dd35081
Generator: take into account tracked/untracked variables when generat…
agarny Oct 29, 2024
68ef9da
Merge branch 'issue1243' into issue1244.
agarny Oct 29, 2024
59df199
Some minor cleaning up.
agarny Oct 30, 2024
e2ea198
Tests: fixed tracking/untracking tests for our bindings.
agarny Oct 29, 2024
c94e122
Generator: let the user know if there were some issues when trying to…
agarny Oct 29, 2024
7f16c3a
Generator: removed some tracking/untracking features related to exter…
agarny Oct 29, 2024
4f1d106
Tests: tests the generated code for tracked/untracked variables using…
agarny Oct 29, 2024
2365d5e
AnalyserVariable: don't make a "true" constant's dummy equation acces…
agarny Oct 30, 2024
1fff51d
Generator: report an issue, if needed, when tracking/untracking a var…
agarny Oct 30, 2024
d4fdf65
Generator: various minor improvements.
agarny Oct 31, 2024
33bab8f
Generator: don't untrack a variable that is needed to compute an exte…
agarny Oct 31, 2024
b9eda39
Tests: some minor cleaning up.
agarny Oct 31, 2024
7be6561
Tests: improved some tests.
agarny Oct 31, 2024
5892bb9
Tests: renamed some files.
agarny Oct 31, 2024
46681b7
Generator: generate needed algebraic equations (for untracked variabl…
agarny Oct 31, 2024
206a683
Generator: added a control test for our DAE tracking tests.
agarny Oct 31, 2024
b4936d8
Tests: cleaned the expected tracking-related output.
agarny Oct 31, 2024
66ef714
Generator: generated some wrong indices when untracking some variables.
agarny Nov 4, 2024
856046f
Generator: various speed improvements.
agarny Nov 5, 2024
2c8538e
Merge branch 'issue1243' into issue1244.
agarny Nov 5, 2024
d723987
Merge branch 'issue1243' into issue1244.
agarny Nov 5, 2024
fea8420
Merge branch 'main' into issue1244
agarny Nov 9, 2024
dcc8024
Merge branch 'main' into issue1244
agarny Nov 10, 2024
c469f81
Merge branch 'main' into issue1244
agarny Nov 10, 2024
54dcca7
Merge branch 'issue1243' into issue1244.
agarny Nov 14, 2024
9ff4043
Tests: updated our generated code following the last merge.
agarny Nov 14, 2024
b9c8ca3
Merge branch 'issue1243' into issue1244.
agarny Nov 24, 2024
71a3ab4
Merge branch 'issue1243' into issue1244.
agarny Dec 5, 2024
7473d64
Reverted commit 6a48c0f.
agarny May 14, 2025
04d8d15
Some minor cleaning up.
agarny Jul 17, 2025
46135be
Merge branch 'main' into issue1244.
agarny Jul 22, 2025
982da79
Merge branch 'main' into issue1244.
agarny Jul 22, 2025
4b68173
Merge branch 'main' into issue1244.
agarny Jul 22, 2025
0216944
Code spelling.
agarny Aug 7, 2025
832f7cc
Generator: some minor reordering.
agarny Sep 11, 2025
528f0de
Generator: updated `computeComputedConstants()`'s signature.
agarny Sep 9, 2025
1bd66ae
Allow a constant, a computed constant, or a state variable (but not a…
agarny Sep 9, 2025
6d27883
Generator profile: have different signatures for the computeComputedC…
agarny Sep 16, 2025
db4865c
Merge branch 'issue1243' into issue1244
agarny Sep 25, 2025
ef4e07f
Merge branch 'issue1244' into issue1322.
agarny Sep 25, 2025
1515299
Merge branch 'issue1243' into issue1244.
agarny Oct 5, 2025
d7223ca
Merge branch 'issue1244' into issue1322.
agarny Oct 5, 2025
db90dc6
Merge branch 'issue1243' into issue1244.
agarny Oct 30, 2025
7c07108
Merge branch 'issue1244' into issue1322.
agarny Oct 30, 2025
9629866
Merge branch 'issue1243' into issue1244.
agarny Nov 1, 2025
878f7b6
Merge branch 'issue1244' into issue1322.
agarny Nov 1, 2025
1088791
Analyser: account for an underconstrained NLA system.
agarny Nov 5, 2025
5246a31
Merge branch 'main' into issue1244
agarny Nov 19, 2025
20a7ab5
A lot of cleaning up following the recent merge (see commit 5246a3179).
agarny Nov 19, 2025
452ebeb
Merge branch 'issue1244' into issue1322
agarny Nov 19, 2025
8b928f4
Some cleaning up following the recent merge (see commit 452ebebbc).
agarny Nov 19, 2025
14c60f9
Merge branch 'issue1322' into issue1337
agarny Nov 19, 2025
9df2aeb
Some minor cleaning up.
agarny Nov 19, 2025
5b6dc32
Analyser: clarify the situation with COMPUTED_CONSTANT variables/equa…
agarny Nov 19, 2025
c7aa88b
Analyser/AnalyserVariable: renamed the `model()` method to `analyserM…
agarny Nov 19, 2025
ab86f4b
Generator: renamed `un/trackAllAlgebraic()` to `un/trackAllAlgebraicV…
agarny Nov 19, 2025
e887093
AnalyserEquation: renamed dummy dependencies to staging dependencies.
agarny Nov 19, 2025
cd2772d
Generator: renamed some `doXxx()` methods to `xxx()`.
agarny Nov 19, 2025
8896756
Generator: some minor refactoring.
agarny Nov 19, 2025
5ec5f4b
Generator: some minor refactoring.
agarny Nov 19, 2025
649a1f9
Generator: some minor cleaning up.
agarny Nov 20, 2025
eb2e232
Generator: renamed `validModel()` to `validAnalyserModel()`.
agarny Nov 20, 2025
6600a96
JavaScript tests: oops, got carried away when working on commit c7aa8…
agarny Nov 20, 2025
c3f0cca
Merge branch 'issue1244' into issue1322
agarny Nov 20, 2025
122571e
Some minor cleaning up following the recent merge (see commit c3f0cca…
agarny Nov 20, 2025
371282f
Merge branch 'issue1322' into issue1337.
agarny Nov 20, 2025
56dd562
Some minor cleaning up following the recent merge (see commit 371282f…
agarny Nov 20, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
# OS X hidden system files
# macOS hidden system files
.DS_Store

# Ignore the build directory
build/

# Debugging files
*.profraw

# Eclipse project files
.project
.pydevproject
Expand Down
308 changes: 177 additions & 131 deletions src/analyser.cpp

Large diffs are not rendered by default.

15 changes: 8 additions & 7 deletions src/analyser_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ struct AnalyserInternalVariable
COMPUTED_VARIABLE_BASED_CONSTANT,
INITIALISED_ALGEBRAIC_VARIABLE,
ALGEBRAIC_VARIABLE,
UNDERCONSTRAINED,
OVERCONSTRAINED
};

Expand All @@ -77,8 +78,8 @@ struct AnalyserInternalEquation
enum struct Type
{
UNKNOWN,
TRUE_CONSTANT,
VARIABLE_BASED_CONSTANT,
CONSTANT,
COMPUTED_CONSTANT,
ODE,
NLA,
ALGEBRAIC
Expand Down Expand Up @@ -125,7 +126,7 @@ struct AnalyserInternalEquation
bool variableOnRhs(const AnalyserInternalVariablePtr &variable);
bool variableOnLhsOrRhs(const AnalyserInternalVariablePtr &variable);

bool check(const AnalyserModelPtr &model, bool checkNlaSystems);
bool check(const AnalyserModelPtr &analyserModel, bool checkNlaSystems);
};

/**
Expand All @@ -152,7 +153,7 @@ class Analyser::AnalyserImpl: public Logger::LoggerImpl

Analyser *mAnalyser = nullptr;

AnalyserModelPtr mModel = AnalyserModel::AnalyserModelImpl::create();
AnalyserModelPtr mAnalyserModel = AnalyserModel::AnalyserModelImpl::create();

AnalyserExternalVariablePtrs mExternalVariables;

Expand All @@ -178,8 +179,8 @@ class Analyser::AnalyserImpl: public Logger::LoggerImpl
void analyseComponent(const ComponentPtr &component);
void analyseComponentVariables(const ComponentPtr &component);

void doEquivalentVariables(const VariablePtr &variable,
VariablePtrs &equivalentVariables) const;
void equivalentVariables(const VariablePtr &variable,
VariablePtrs &equivalentVariables) const;
VariablePtrs equivalentVariables(const VariablePtr &variable) const;

void analyseEquationAst(const AnalyserEquationAstPtr &ast);
Expand Down Expand Up @@ -247,7 +248,7 @@ class Analyser::AnalyserImpl: public Logger::LoggerImpl

static bool isExternalVariable(const AnalyserInternalVariablePtr &variable);

bool isStateRateBased(const AnalyserEquationPtr &equation,
bool isStateRateBased(const AnalyserEquationPtr &analyserEquation,
AnalyserEquationPtrs &checkedEquations);

void addInvalidVariableIssue(const AnalyserInternalVariablePtr &variable,
Expand Down
28 changes: 17 additions & 11 deletions src/analyserequation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,26 @@ AnalyserEquationPtr AnalyserEquation::AnalyserEquationImpl::create()
return std::shared_ptr<AnalyserEquation> {new AnalyserEquation {}};
}

bool AnalyserEquation::AnalyserEquationImpl::isEmptyDependency(const AnalyserEquationWeakPtr &dependency)
bool AnalyserEquation::AnalyserEquationImpl::isStagingDependency(const AnalyserEquationWeakPtr &dependency)
{
auto analyserVariables = libcellml::analyserVariables(dependency.lock());
return libcellml::analyserVariables(dependency.lock()).empty();
}

void AnalyserEquation::AnalyserEquationImpl::removeStagingDependencies()
{
// Keep track of our constant dependencies, so that we can generate some code for them, should they be untracked.

if (std::any_of(analyserVariables.begin(), analyserVariables.end(), [](const auto &av) { return av != nullptr; })) {
return false;
for (const auto &dependency : mDependencies) {
auto constantDependency = dependency.lock()->mPimpl->mConstant;

if (isStagingDependency(dependency)) {
mConstantDependencies.push_back(constantDependency);
}
}

return true;
}
// Effectively remove our staging dependencies.

void AnalyserEquation::AnalyserEquationImpl::cleanUpDependencies()
{
mDependencies.erase(std::remove_if(mDependencies.begin(), mDependencies.end(), isEmptyDependency), mDependencies.end());
mDependencies.erase(std::remove_if(mDependencies.begin(), mDependencies.end(), isStagingDependency), mDependencies.end());
}

AnalyserEquation::AnalyserEquation()
Expand All @@ -61,8 +67,8 @@ AnalyserEquation::Type AnalyserEquation::type() const
}

static const std::map<AnalyserEquation::Type, std::string> typeToString = {
{AnalyserEquation::Type::TRUE_CONSTANT, "true_constant"},
{AnalyserEquation::Type::VARIABLE_BASED_CONSTANT, "variable_based_constant"},
{AnalyserEquation::Type::CONSTANT, "constant"},
{AnalyserEquation::Type::COMPUTED_CONSTANT, "computed_constant"},
{AnalyserEquation::Type::ODE, "ode"},
{AnalyserEquation::Type::NLA, "nla"},
{AnalyserEquation::Type::ALGEBRAIC, "algebraic"},
Expand Down
7 changes: 5 additions & 2 deletions src/analyserequation_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,22 @@ struct AnalyserEquation::AnalyserEquationImpl
size_t mNlaSystemIndex;
bool mIsStateRateBased = false;

AnalyserVariablePtr mConstant;

std::vector<AnalyserVariablePtr> mStates;
std::vector<AnalyserVariablePtr> mComputedConstants;
std::vector<AnalyserVariablePtr> mAlgebraicVariables;
std::vector<AnalyserVariablePtr> mExternalVariables;

std::vector<AnalyserVariablePtr> mConstantDependencies;
std::vector<AnalyserEquationWeakPtr> mDependencies;
std::vector<AnalyserEquationWeakPtr> mNlaSiblings;

static AnalyserEquationPtr create();

static bool isEmptyDependency(const AnalyserEquationWeakPtr &dependency);
static bool isStagingDependency(const AnalyserEquationWeakPtr &dependency);

void cleanUpDependencies();
void removeStagingDependencies();
};

} // namespace libcellml
31 changes: 24 additions & 7 deletions src/analysermodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ limitations under the License.

#include "libcellml/analysermodel.h"

#include "libcellml/analyservariable.h"

#include "analysermodel_p.h"
#include "utilities.h"

Expand Down Expand Up @@ -229,31 +231,46 @@ AnalyserVariablePtr AnalyserModel::externalVariable(size_t index) const
return mPimpl->mExternalVariables[index];
}

size_t AnalyserModel::equationCount() const
AnalyserVariablePtr AnalyserModel::analyserVariable(const VariablePtr &variable)
{
if (!isValid() || (variable == nullptr)) {
return {};
}

for (const auto &analyserVariable : analyserVariables(shared_from_this())) {
if (areEquivalentVariables(variable, analyserVariable->variable())) {
return analyserVariable;
}
}

return {};
}

size_t AnalyserModel::analyserEquationCount() const
{
if (!isValid()) {
return 0;
}

return mPimpl->mEquations.size();
return mPimpl->mAnalyserEquations.size();
}

std::vector<AnalyserEquationPtr> AnalyserModel::equations() const
std::vector<AnalyserEquationPtr> AnalyserModel::analyserEquations() const
{
if (!isValid()) {
return {};
}

return mPimpl->mEquations;
return mPimpl->mAnalyserEquations;
}

AnalyserEquationPtr AnalyserModel::equation(size_t index) const
AnalyserEquationPtr AnalyserModel::analyserEquation(size_t index) const
{
if (!isValid() || (index >= mPimpl->mEquations.size())) {
if (!isValid() || (index >= mPimpl->mAnalyserEquations.size())) {
return {};
}

return mPimpl->mEquations[index];
return mPimpl->mAnalyserEquations[index];
}

bool AnalyserModel::needEqFunction() const
Expand Down
2 changes: 1 addition & 1 deletion src/analysermodel_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ struct AnalyserModel::AnalyserModelImpl
std::vector<AnalyserVariablePtr> mAlgebraicVariables;
std::vector<AnalyserVariablePtr> mExternalVariables;

std::vector<AnalyserEquationPtr> mEquations;
std::vector<AnalyserEquationPtr> mAnalyserEquations;

bool mNeedEqFunction = false;
bool mNeedNeqFunction = false;
Expand Down
45 changes: 34 additions & 11 deletions src/analyservariable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,21 @@ void AnalyserVariable::AnalyserVariableImpl::populate(AnalyserVariable::Type typ
size_t index,
const VariablePtr &initialisingVariable,
const VariablePtr &variable,
const std::vector<AnalyserEquationPtr> &equations)
const AnalyserModelPtr &analyserModel,
const std::vector<AnalyserEquationPtr> &analyserEquations)
{
mType = type;
mIndex = index;
mInitialisingVariable = initialisingVariable;
mVariable = variable;
mComponent = owningComponent(mVariable);
mAnalyserModel = analyserModel;

std::copy(equations.begin(), equations.end(), back_inserter(mEquations));
std::copy(analyserEquations.begin(), analyserEquations.end(), back_inserter(mAnalyserEquations));
}

bool AnalyserVariable::AnalyserVariableImpl::constantWithDummyEquation() const
{
return (mType == Type::CONSTANT) && (mAnalyserEquations.front().lock() == nullptr);
}

AnalyserVariable::AnalyserVariable()
Expand Down Expand Up @@ -88,29 +94,46 @@ VariablePtr AnalyserVariable::variable() const
return mPimpl->mVariable;
}

size_t AnalyserVariable::equationCount() const
AnalyserModelPtr AnalyserVariable::analyserModel() const
{
return mPimpl->mAnalyserModel.lock();
}

// Note: our equation-related methods must account for the fact that a constant initialised using the `initial_value`
// attribute (rather than through an equation; e.g., x = 3) will have a dummy equation associated with it which
// we don't want to be accessible, hence the calls to constantWithDummyEquation() in the following methods.

size_t AnalyserVariable::analyserEquationCount() const
{
return mPimpl->mEquations.size();
if (mPimpl->constantWithDummyEquation()) {
return 0;
}

return mPimpl->mAnalyserEquations.size();
}

std::vector<AnalyserEquationPtr> AnalyserVariable::equations() const
std::vector<AnalyserEquationPtr> AnalyserVariable::analyserEquations() const
{
if (mPimpl->constantWithDummyEquation()) {
return {};
}

std::vector<AnalyserEquationPtr> res;

for (const auto &equation : mPimpl->mEquations) {
res.push_back(equation.lock());
for (const auto &analyserEquation : mPimpl->mAnalyserEquations) {
res.push_back(analyserEquation.lock());
}

return res;
}

AnalyserEquationPtr AnalyserVariable::equation(size_t index) const
AnalyserEquationPtr AnalyserVariable::analyserEquation(size_t index) const
{
if (index >= mPimpl->mEquations.size()) {
if (mPimpl->constantWithDummyEquation() || (index >= mPimpl->mAnalyserEquations.size())) {
return {};
}

return mPimpl->mEquations[index].lock();
return mPimpl->mAnalyserEquations[index].lock();
}

} // namespace libcellml
15 changes: 9 additions & 6 deletions src/analyservariable_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ limitations under the License.

namespace libcellml {

using AnalyserModelWeakPtr = std::weak_ptr<AnalyserModel>;

/**
* @brief The AnalyserVariable::AnalyserVariableImpl struct.
*
Expand All @@ -33,15 +35,16 @@ struct AnalyserVariable::AnalyserVariableImpl
size_t mIndex = 0;
VariablePtr mInitialisingVariable;
VariablePtr mVariable;
ComponentPtr mComponent;
std::vector<AnalyserEquationWeakPtr> mEquations;
AnalyserModelWeakPtr mAnalyserModel;
std::vector<AnalyserEquationWeakPtr> mAnalyserEquations;

static AnalyserVariablePtr create();

void populate(AnalyserVariable::Type type, size_t index,
const VariablePtr &initialisingVariable,
const VariablePtr &variable,
const std::vector<AnalyserEquationPtr> &equations);
void populate(AnalyserVariable::Type type, size_t index, const VariablePtr &initialisingVariable,
const VariablePtr &variable, const AnalyserModelPtr &analyserModel,
const std::vector<AnalyserEquationPtr> &analyserEquations);

bool constantWithDummyEquation() const;
};

} // namespace libcellml
2 changes: 1 addition & 1 deletion src/api/libcellml/analyser.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ class LIBCELLML_EXPORT Analyser: public Logger
*
* @return The analysed model for the @ref Model analysed by this @ref Analyser.
*/
AnalyserModelPtr model() const;
AnalyserModelPtr analyserModel() const;

private:
Analyser(); /**< Constructor, @private. */
Expand Down
18 changes: 9 additions & 9 deletions src/api/libcellml/analyserequation.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,23 +29,23 @@ namespace libcellml {
class LIBCELLML_EXPORT AnalyserEquation
{
friend class Analyser;
friend class Generator;

public:
/**
* @brief The type of an equation.
*
* The type of an equation, i.e. whether it is used to compute a true
* constant, a variable-based constant, a rate, an algebraic variable,
* or whether it is placeholder for an external variable.
* The type of an equation, i.e. whether it is used to compute a (true) constant, a computed constant, a rate, an
* algebraic variable, or whether it is a placeholder for an external variable.
*/
enum class Type
{
TRUE_CONSTANT, /**< An equation that defines a true constant, e.g. x = 3. */
VARIABLE_BASED_CONSTANT, /**< An equation that describes a variable-based constant, e.g. x = y+z where y and z are true constants. */
ODE, /**< An equation that describes an ordinary differential equation, e.g. d(y)/dt = f(t, x). */
NLA, /**< An equation that is used to compute one or several algebraic variables, e.g. x+y = f(z) where x and y are known, but not z. */
ALGEBRAIC, /**< An equation that is used to compute an algebraic variable, e.g. y = f(x). */
EXTERNAL /**< A placeholder equation to capture the dependency of the model on an external variable. */
CONSTANT, /**< An equation that computes a (true) constant (e.g., x = 3). */
COMPUTED_CONSTANT, /**< An equation that computes a computed constant (e.g., x = 3+5, x = 3+z, x = y+z where y and z are (true or computed) constants). */
ODE, /**< An equation that computes an ordinary differential equation (e.g., d(y)/dt = f(t, x)). */
NLA, /**< An equation that computes one or several algebraic variables (e.g., x+y = f(z) where x and y are known, but not z). */
ALGEBRAIC, /**< An equation that computes an algebraic variable (e.g., y = f(x)). */
EXTERNAL /**< A placeholder equation that captures the dependency of the model on an external variable. */
};

~AnalyserEquation(); /**< Destructor, @private. */
Expand Down
Loading
Loading