CFD,  Education,  OpenFOAM

P. 3. The structure of dictionaries (Ep. 2)

In the last post of this series the general structure of a dictionary was introduced. We will now see the basic structure of entries. The first point to make is that entries in OpenFOAM® dictionaries can be of several types but they all follow the key/value format, at least in a broad sense.

The generic format of an entry is:

key   value;

where key is an identifier and value can have different forms. Technically speaking a subdictionary is also an entry, but it was implemented differently in terms of formatting, so I will leave that out in this description.

One of the most common forms of entries are what I will call coefficients. Coefficients can be dimensioned or not, depending on how the implementation was carried out in the code. The simplest form is the following:

coeffName    numericalValue;

For example:

Cmu    0.9;

In case a coefficient has a dimension, then its format becomes:

nu    [0 2 -1 0 0 0 0] 0.01;

In older versions of OpenFOAM® the format used to be:

nu    nu [0 2 -1 0 0 0 0] 0.01;

In short, the dimensionSet and the numerical value constitute the actual value on the key/value pair of the dictionary. Note that the value is not necessarily a scalar. It can be a vector:

locationInMesh    (0 0 1);

or, in the dimensioned case:

U    [0 1 -1 0 0 0 0] (0 1 0);

Lists can be used as values in the key/value pair of dictionaries (common in fields initialized with non-uniform values):

internalField    nonuniform List<vector>
300  // Number of elements
(
    (0 1 1)   // Elements
    (0 1 2)

    ...

);

Note that lists may or may not require the number of elements before the list content start, depending on the corresponding type used in C++ code

Another type of entry is what in OpenFOAM® is identified as word (do not confuse this term with the word numerical type of programming languages: word in OpenFOAM® is essentially a single-word string!). Several examples of this type of entry were shown in the previous post

startFrom    startTime;

In an entry of this type, a single word is the value of the key/value pair.

More complex versions of this type of entry, where the value is a string rather than a single word are also possible. For example, when specifying numerical schemes, entries like the following are encountered:

div(phi,U)    Gauss limitedLinearV 1;

The format of these entries depends on the context where they are used, consequently it is pointless to try to extract general rules, since they would be ad-hoc to the specific context.

OpenFOAM implements the bool type calling it Switch, to allow for different input options from true/false. For example, yes/no, on/off are allowed. The syntax of the corresponding entry is however unaffected:

turbulence    on;

This is a brief summary of the most commonly encountered types of entries found in dictionaries.

Enjoy and stay tuned! 🙂

This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks. Alberto Passalacqua is not associated to OpenCFD Ltd.