Черновики

Выражения

см. class Expression

Параметры следующих типов:

  1. константы скоростей элементарных реакций
  2. другие параметры процесса (температура, энергии активации реакций и т.п.)
  3. начальные концентрации реагентов (набор стартовых значений переменных в системе дифф.уравнений)

Процесс описывается кинетической схемой (см. class Schema). На этом этапе декларируются имена реагентов, констант скорости элементарных реакций и вспомогательных параметров.

Конкретные реализации процесса (для краткости, варианты), отличающиеся набором начальных значений концентраций и других констант (class SchemaInstance) имеют возможность установить значения всех параметров. Однако есть возможность в варианте не устанавливать значение параметра; тогда оно будет браться из объявлений в общей схеме (как бы вариант глобальных параметров, или значений по умолчанию).

Выражения, которые присваиваются параметрам в качестве их значений, в простейшем случае просто числовые значения. Однако возможно использовать полноценные математические выражения с использованием имён параметров/реагентов.

:!: При расчёте кинетики выражения не интерпретируются, а используются соответствующие им объекты предварительной компиляции (class ParsedExpression), создаваемые при присваивании параметру значения.

:!: Если в выражении встречается имя реагента, то при расчёте кинетики процесса (решении СДУ) в вычислениях используются не начальные, а текущие концентрации (меняющиеся во времени).

double SchemaInstance::evaluateParameterValue(const String& name, const ExprEvalContext*);
double Expression::evaluate(const ExprEvalContext*);
double ParsedExpression::evaluate(const ExprEvalContext*);

При оценке значения выражения используется вычислительный контекст (struct ExprEvalContext):

struct ExprEvalContext {
 double time;
 const double* concentrations;
 const SchemaInstance* schemaInstance;
};

Числовые выражения не требуют контекста для вычислений, для них может быть использовано Expression::evaluate(nullptr).

Выражения вычисляются в контексте SchemaInstance, в контексте Schema никогда (возможно только использование значений по-умолчанию из Schema1)).

1)
и SchemaInstance имеет ссылку на свою родительскую Schema