Skip to content
David Gaden edited this page Sep 5, 2013 · 3 revisions

Latest version 0.6.0, released August 29, 2013

Known to work with:

  • OpenFOAM 1.6-ext
  • OpenFOAM 1.7.x
  • OpenFOAM 2.0.x
  • OpenFOAM 2.1.x
  • OpenFOAM 2.2.x

Table of Contents

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;

What it isn't

Installing equationReader will not give any existing solvers the capability to read equations from dictionaries. It will only work on custom solvers that specifically include the equationReader in their inner-workings.

In the future, I plan to create a branch of OpenFOAM® that integrates equationReader directly into its core libraries, thus giving every existing solver equation-reading capabilities.

Features

  • Works with most fields - Now works with single elements, fields, DimensionedFields 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.

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.

Learn more

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`. This enables automatic output
    • Added support for `scalarList` data sources - including `scalarField`, `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.
  • 2011-09-25: Version 0.5.0
    • Improved treatment of fields - now approximately 10x faster.
    • Introduced version numbers to keep track of changes.
  • 2012-10-25: Version 0.5.1
    • Moved to git
    • Bug fixes:
      • Circular reference detection now working
  • 2013-08-29: Version 0.6.0
    • Uploaded to github and OpenFOAM-extend
    • Restructured applications and tutorials directories for consistency
    • Made opening splash optional