Contrib/equationReader

From OpenFOAMWiki
< Contrib
Revision as of 22:54, 19 July 2010 by Marupio (Talk | contribs)

1 What is it?

equationReader is an extension to OpenFOAM that allows you to read equations from a dictionary file, and have them evaluated at every timestep. It works for scalars and dimensionedScalars. For example:

nu          nu [0 2 -1 0 0 0 0] "1.2 + 3 * alpha^sin(pi_/6)";
aScalar     "nu / max(5, alpha)";
alpha       1.3;

2 Features

  • Order of operations - it is fully compliant with the conventional order of operations to an arbitrary parenthesis depth;
  • Flexible data sources - equations can use data from any dictionary, scalar, or </tt>dimensionedScalar</tt>.
  • Equation dependency tracking - equations can depend on one another to an arbitrary hierarchy depth;
  • Circular-reference detection - it will halt computations when a circular reference is detected;
  • On-the-fly equation mapping - it will automatically perform substitution on other equations when they are needed, even if they aren't specifically called for in the solver; and
  • stand-alone, passive and active modes of operation - you can choose from three different modes of operation to suit your needs.

3 How do you use it?

3.1 Equation syntax

equationReader uses conventional order of operations BEDMAS:

  • Brackets (and functions);
  • Exponents;
  • DM - division and multiplication; and
  • AS - addition and subtraction.

Basically, if you can enter equations into Excel[1], you already know how to do this.

  • you can use any amount of whitespace you want;
  • exponents are ^, for example 2^3 is 8;
  • multiplication is *, for example 2*3 is 6;
  • there is no implied multiplication - you must explicitly use *. For example:
2 sin(theta) INCORRECT
2 * sin(theta) CORRECT
2(3 + 4) INCORRECT
2 * (3 + 4) CORRECT

equationReader has three modes of operation:

  1. stand-alone - this one works "out of the box" with all OpenFOAM applications. You can only use literal constants in your equations;
  2. passive mode - if you create an equationReader object, you can give it data sources. This allows you to use variables, and equation substitution; and
  3. active mode - if you also give equationReader pointers to your output variables, it can automatically update the values at every timestep.

3.2 Stand-alone mode

4 Notes

  1. Copyright Microsoft