Expression
При анализе текста схемы процесса (см. Schema) выявляются её параметры, прежде всего константы скоростей элементрарных реакций. В кинетических расчётах они не такие уж и константы: как минимум, они зависят от температуры, а температура среды может изменяться (см. раздел Thermochemistry).
Итак, значением переметра может быть выражение, Expression. В ABCKinetics в качестве выражения допустимы математические выражения, включающие арифметические операции (+ - * / ^), стандартные функции (показательная, логарифм, тригонометрические и т.д.), а также ссылки на значения других параметров и на значения концентраций реагентов процесса. Более того, пользователь для своего удобства может объявлять собственные функции.
Подчеркну ещё раз: выражения – это возможные значения параметров, не сами параметры1).
class Expression
{
public:
Expression(const Expression&) = delete;
Expression operator=(const Expression&) = delete;
Expression();
Expression(double);
Expression(const String&);
~Expression();
double evaluate(const CalcContext*) const;
// for readers' info:
private:
const ParsedExpression* pexpr;
};
Для оптимизации вычислений, выражения предварительно компилируются. Если это константное выражение (напр., π/2 или sqrt(2)), то результатом компиляции будет обыкновенное число. Этот результат хранится в приватной части объектов Expression, в члене класса с типом ParsedExpression, с помощью которого и отрабатывает публичный метод evaluate.
В общем случае выражения содержат ссылки на значения параметров и на текущие концентрации реагентов. Поэтому для вычисления выражения методу evaluate нужно сообщить контекст (для какого варианта/инстанса схемы проводить расчёт, то есть где взять конкретные значения параметров и концентраций). Это объект типа CalcContext.
