Contrib/equationReader
From OpenFOAMWiki
Contents
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:
- stand-alone - this one works "out of the box" with all OpenFOAM applications. You can only use literal constants in your equations;
- passive mode - if you create an equationReader object, you can give it data sources. This allows you to use variables, and equation substitution; and
- 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
- ↑ Copyright Microsoft