Contrib/equationReader

From OpenFOAMWiki
< Contrib
Revision as of 22:48, 14 September 2011 by Marupio (Talk | contribs)

Known to work with:
Valid versions: OF Version 16ext.png OF Version 170.png OF Version 171.png OF Version 17x.png
May also work with the latest version. Be the first to find out, and let me know. Doesn't yet work with OpenFOAM 2.0.0. (thanks for the info, Bernhard!) A patch will come out soon...
Subpage contents (alphabetical)
> Functions
> Installation
> Programming
> Uninstallation
> Using equationReader

1 What is it?

equationReader is an extension to OpenFOAM that allows you to work with user-entered equations. For example:

U.x        "sin(pi_ * t / 4)";
U.y        "rho * nut / L";
U.z        0;
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

  • Works with most fields - Now works with single elements, fields, and GeometricFields;
  • Works with most Types - Now works with scalars, vectors, and all kinds of tensors;
  • Flexible data sources - In addition to these types, equations can also lookup values from dictionaries, and you can create an activeVariable that derives its value on-the-fly.
  • Order of operations - it is fully compliant with the conventional order of operations to an arbitrary parenthesis depth;
  • 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
  • Dimension-checking - fully utilizes OpenFOAM's built-in dimension-checking, or you can force the outcome to a specific dimension-set to quickly disable it (if you are lazy).

Limitations: Although equationReader works with all Types, at its core, it is just a scalar calculator with dimensions. Therefore, you can't use vector operators, let alone tensor operators. Each equation must be expressed in scalar components.

3 Why would you need this?

Let the user define their own equations - this makes your application more user-friendly, and more flexible. But don't reinvent the wheel - if you are only working with boundary conditions or initial conditions, Bernhard's swak4Foam would probably be more suitable.

4 Learn more

5 Update info

  • 2010-07-21: Initial release
  • 2010-08-05: Bug-fix - differentiated versions for OpenFOAM-1.5.x/1.5-dev and OpenFOAM-1.6.x+
  • 2010-08-12: Major upgrade
    • Introducing IOEquationReader - EquationReader is now an IOobject<tt>. This enables automatic output
    • Added support for <tt>scalarList data sources - including scalarField<tt>, <tt>volScalarField, etc.
    • Removed the need for pointers for data sources
    • Cleaned up available functions
  • 2010-10-16: Bug fixes and added full support for fields
  • 2011-04-06: Major upgrade
    • Efficiency improvement - pointer functions have been implemented to increase computation speed by an order of magnitude (at least).
    • Improved dimension-checking on all functions.
    • Added a fieldEvaluate function for active equations whose output is to a scalar field.
    • Bug fix to get it working with 1.6-ext and higher.
  • 2011-09-13: Major upgrade
    • 'Now a stand-alone library'.
    • Now works with 'vectors and tensors':
      • scalar;
      • vector;
      • tensor;
      • diagTensor;
      • symmTensor; and
      • sphericalTensor.
    • 'Now works with GeometricFields
    • Dimension checking is now performed separately, improving efficiency of field and GeometricField calculations.
  • Interface changes:
    • Add data functions reorganized / changed.
    • Evaluate functions reorganized / changed.
    • Update functions removed.

--Marupio 22:15, 14 September 2011 (CEST)