README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18,...

44
README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ............................... 1 2.2 Technical ............................. 1 3 Contributors etc 2 3.1 Original Author .......................... 2 3.2 Current Maintainer ........................ 2 3.3 Contributors ........................... 2 3.4 Documentation .......................... 2 4 Installation/Compilation 2 4.1 Requirements ........................... 2 4.2 Building .............................. 3 4.2.1 Additional configuration ................. 3 4.3 Global installation ........................ 4 4.4 Packaging ............................. 4 4.4.1 Debian ........................... 4 5 Contents 5 5.1 Libraries .............................. 5 5.1.1 swak4FoamParsers .................... 5 5.1.2 simpleFunctionObjects ................. 5 5.1.3 groovyBC ......................... 5 5.1.4 swakFunctionObjects .................. 5 5.1.5 simpleSwakFunctionObjects .............. 6 5.1.6 swakSourceFields .................... 6 1

Transcript of README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18,...

Page 1: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

README for swak4Foam

Bernhard F.W. Gschaider

October 18, 2012

Contents

1 Description 1

2 About this document 12.1 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Technical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

3 Contributors etc 23.1 Original Author . . . . . . . . . . . . . . . . . . . . . . . . . . 23.2 Current Maintainer . . . . . . . . . . . . . . . . . . . . . . . . 23.3 Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.4 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 2

4 Installation/Compilation 24.1 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . 24.2 Building . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

4.2.1 Additional configuration . . . . . . . . . . . . . . . . . 34.3 Global installation . . . . . . . . . . . . . . . . . . . . . . . . 44.4 Packaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4.4.1 Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

5 Contents 55.1 Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

5.1.1 swak4FoamParsers . . . . . . . . . . . . . . . . . . . . 55.1.2 simpleFunctionObjects . . . . . . . . . . . . . . . . . 55.1.3 groovyBC . . . . . . . . . . . . . . . . . . . . . . . . . 55.1.4 swakFunctionObjects . . . . . . . . . . . . . . . . . . 55.1.5 simpleSwakFunctionObjects . . . . . . . . . . . . . . 65.1.6 swakSourceFields . . . . . . . . . . . . . . . . . . . . 6

1

Page 2: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

5.1.7 swakTopoSources . . . . . . . . . . . . . . . . . . . . . 65.1.8 swakFiniteArea . . . . . . . . . . . . . . . . . . . . . 75.1.9 groovyStandardBCs . . . . . . . . . . . . . . . . . . . 75.1.10 pythonIntegration . . . . . . . . . . . . . . . . . . . 75.1.11 fluFunctionObjectDriver . . . . . . . . . . . . . . . 75.1.12 functionPlugins . . . . . . . . . . . . . . . . . . . . . 7

5.2 Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85.2.1 funkySetFields . . . . . . . . . . . . . . . . . . . . . 85.2.2 funkySetAreaFields . . . . . . . . . . . . . . . . . . . 85.2.3 funkySetBoundaryField . . . . . . . . . . . . . . . . . 85.2.4 replayTransientBC . . . . . . . . . . . . . . . . . . . 85.2.5 funkyDoCalc . . . . . . . . . . . . . . . . . . . . . . . 9

5.3 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95.3.1 groovyBC . . . . . . . . . . . . . . . . . . . . . . . . . 95.3.2 FunkySetFields . . . . . . . . . . . . . . . . . . . . . . 105.3.3 FunkySetBoundaryFields . . . . . . . . . . . . . . . . 105.3.4 InterFoamWithSources . . . . . . . . . . . . . . . . . . 115.3.5 InterFoamWithFixed . . . . . . . . . . . . . . . . . . . 115.3.6 FiniteArea . . . . . . . . . . . . . . . . . . . . . . . . . 115.3.7 other . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.3.8 PythonIntegration . . . . . . . . . . . . . . . . . . . . 135.3.9 solvePDE . . . . . . . . . . . . . . . . . . . . . . . . . 135.3.10 BasicSourceSubclasses . . . . . . . . . . . . . . . . . . 145.3.11 Lagrangian . . . . . . . . . . . . . . . . . . . . . . . . 145.3.12 tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

5.4 maintainanceScripts . . . . . . . . . . . . . . . . . . . . . . 15

6 Bug reporting and Development 156.1 Bug reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

6.1.1 Things to do before reporting bug . . . . . . . . . . . 156.2 Development . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

6.2.1 Suggest reading . . . . . . . . . . . . . . . . . . . . . . 166.2.2 Special branches . . . . . . . . . . . . . . . . . . . . . 176.2.3 Distributed bug-tracking . . . . . . . . . . . . . . . . . 17

7 Copyright 17

8 Known bugs 178.1 Moving meshes and sampledSurfaces . . . . . . . . . . . . . 188.2 Missing support for interpolation and point-Fields . . . . . . 18

2

Page 3: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

8.3 Caching of loaded fields not working . . . . . . . . . . . . . . 188.4 Possible enhancements of the code . . . . . . . . . . . . . . . 18

8.4.1 Pointers in the driver code . . . . . . . . . . . . . . . . 188.5 Possible memory loss . . . . . . . . . . . . . . . . . . . . . . . 188.6 No point-vector construction for Subsets . . . . . . . . . . . . 18

9 History 199.1 2010-09-13 - version number : 0.1 . . . . . . . . . . . . . . . . 199.2 2010-12-18 - version number : 0.1.1 . . . . . . . . . . . . . . . 19

9.2.1 Parser for sampledSurfaces . . . . . . . . . . . . . . . 199.2.2 Multiline variables . . . . . . . . . . . . . . . . . . . 199.2.3 Two maintainance-scripts were added . . . . . . . . . . 199.2.4 Parsers using ‘external variables’ are now run-time se-

lectable . . . . . . . . . . . . . . . . . . . . . . . . . . 199.3 2011-01-30 - version number : 0.1.2 . . . . . . . . . . . . . . . 19

9.3.1 Support for Finite Area-stuff . . . . . . . . . . . . . . 199.3.2 Bugfix for compiling in single precision . . . . . . . . . 209.3.3 New function nearDist . . . . . . . . . . . . . . . . . 20

9.4 2011-04-20 - version number : 0.1.3 . . . . . . . . . . . . . . . 209.4.1 New utility funkySetAreaField . . . . . . . . . . . . 209.4.2 Refactoring of groovyBC and groovified boundary con-

ditions . . . . . . . . . . . . . . . . . . . . . . . . . . . 209.4.3 Easier deployment . . . . . . . . . . . . . . . . . . . . 209.4.4 Force equations . . . . . . . . . . . . . . . . . . . . . . 209.4.5 New utility funkyDoCalc . . . . . . . . . . . . . . . . 219.4.6 Debian packaging . . . . . . . . . . . . . . . . . . . . . 219.4.7 Lookup-tables . . . . . . . . . . . . . . . . . . . . . . . 219.4.8 Stored variables . . . . . . . . . . . . . . . . . . . . . . 219.4.9 Sampled sets . . . . . . . . . . . . . . . . . . . . . . . 21

9.5 2011-07-26 - version number : 0.1.4 . . . . . . . . . . . . . . . 219.5.1 New features: . . . . . . . . . . . . . . . . . . . . . . . 219.5.2 Bug-fixes . . . . . . . . . . . . . . . . . . . . . . . . . 229.5.3 Packaging . . . . . . . . . . . . . . . . . . . . . . . . . 22

9.6 2011-10-03 - version number : 0.1.5 . . . . . . . . . . . . . . . 229.6.1 New features . . . . . . . . . . . . . . . . . . . . . . . 229.6.2 Administrative and packaging . . . . . . . . . . . . . . 239.6.3 Bugfixes . . . . . . . . . . . . . . . . . . . . . . . . . . 24

9.7 2012-01-04 - version number : 0.1.6 . . . . . . . . . . . . . . . 249.7.1 Cases changed . . . . . . . . . . . . . . . . . . . . . . 249.7.2 Infrastructure . . . . . . . . . . . . . . . . . . . . . . . 24

3

Page 4: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

9.7.3 Technical . . . . . . . . . . . . . . . . . . . . . . . . . 249.7.4 New features . . . . . . . . . . . . . . . . . . . . . . . 259.7.5 Bug fixes . . . . . . . . . . . . . . . . . . . . . . . . . 27

9.8 2012-04-13 - version number : 0.2.0 Friday the 13th . . . . . . 289.8.1 New features . . . . . . . . . . . . . . . . . . . . . . . 289.8.2 Infrastructure . . . . . . . . . . . . . . . . . . . . . . . 309.8.3 Packaging . . . . . . . . . . . . . . . . . . . . . . . . . 319.8.4 Changes in the behavior . . . . . . . . . . . . . . . . . 319.8.5 Bug fixes . . . . . . . . . . . . . . . . . . . . . . . . . 31

9.9 2012-10-18 - version number : 0.2.1 . . . . . . . . . . . . . . . 339.9.1 Requirements . . . . . . . . . . . . . . . . . . . . . . . 339.9.2 Bug fixes . . . . . . . . . . . . . . . . . . . . . . . . . 339.9.3 Enhancements . . . . . . . . . . . . . . . . . . . . . . 379.9.4 New features . . . . . . . . . . . . . . . . . . . . . . . 389.9.5 Infrastructure . . . . . . . . . . . . . . . . . . . . . . . 41

1 Description

A collection of libraries and tools that let the user handle OpenFOAM-databased on expressions

2 About this document

2.1 Scope

This file gives an overview of swak4Foam and a history of the features. It isnot a canonical documentation.

2.2 Technical

This file is written in the mighty org-mode (see http://orgmode.org/) amarkup/outline-mode for (X)Emacs. Using this mode it can be easily (using3 keystrokes . . . it’s Emacs) to PDF or HTML to make it more readable(and add a table of contents).

Please don’t try to “beautify” it with any other text editor as this willsurly mess up the markup (and keeping the file org-compatible outside of theorg-mode is a pain in the neck.

4

Page 5: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

3 Contributors etc

3.1 Original Author

Bernhard Gschaider ([email protected])

3.2 Current Maintainer

Bernhard Gschaider ([email protected])

3.3 Contributors

In alphabetical order of the surname

Peter Keller sprinklerInlet-case

Andreas Otto fixed the circulatingSplash-case

Alexey Petrov pythonFlu-integration

Bruno Santos • Compilation with Intel compiler and Mingw

• Rewrite of mybison and myflex to allow parallel compilation withWM_COMPPROCS

Martin Becker The potentialPitzDaily-case (demonstrating a problemwith groovyBC)

If anyone is forgotten: let me knowContributors to simpleFunctionObjects are listed separately in the

README of that library

3.4 Documentation

See: http://openfoamwiki.net/index.php/contrib/swak4Foam

4 Installation/Compilation

4.1 Requirements

• Version 1.7 or 1.6-ext of OpenFOAM (1.6 should work, too)

– The finiteArea-stuff will only work with version 1.6-ext

• the compiler generators bison and flex

5

Page 6: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

bison swak4Foam is known to work with bison version 2.4 and higher.Version 2.3 compiles but the plugin-functionality does not workcorrectly

flex since the introduction of the plugin functions at least a flex versionof 2.5.33 is required (2.5.35 is the lowest confirmed version)

Both of these are mainstream packages (they are for instance needed tocompile gcc) and should exist on every Linux distribution. Use the packagemanager of your distribution to install them and only if the compilationprocess of swak4Foam complains about too low versions try to install themfrom other sources.

swak4Foam tries to keep the requirements on these as low as possibleand sometimes lower versions than the ones reported may work. If they doplease report so.

The version of bison can be checked with

bison -V

The version of flex with

flex -V

4.2 Building

wmake all

at the base directory should build all the libraries and tools.Rerun the command to make sure that there was no problem with the

compilation (this should be quite fast and only report libraries being createdand some administrative stuff)

4.2.1 Additional configuration

Some features (currently only the Python-integration may need thirdparty software. The paths to these packages can be configured in a fileswakConfiguration (an example file swakConfiguration.example is pro-vided). If that file is not present these unconfigured features will not becompiled.

Environment variables that can be set in this file are:

SWAKPYTHONINCLUDE Path to the Python.h file of the used python-installation

6

Page 7: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

SWAKPYTHONLINK Options to link the python-library to the library forthe python-integration

SWAKUSERPLUGINS A list of paths separated by semicolons. These are thedirectories of libraries with function-plugins. They are compiled in thecourse of the normal swak-compilation. This makes sure that they areconsistent with the swak-release in the case of an update

4.3 Global installation

If the libraries and utilities are considered stable and the should be availableto everyone (without having to recompile them) the script copySwakFilesToSite.shin the directory maintainanceScripts can be used to copy them to theglobal site-specific directories.

The script removeSwakFilesFromSite.sh in the directory maintainanceScripts

removes all these files from the global directories. The removeSwakFilesFromLocal.shdoes the same for the user directories (this makes sure that no self-compiledversion shadows the global version (which would lead to strange results)

There is a Makefile attached. make globalinstall compiles swak4Foamand installs it into the global directories

Note: Due to the order in which library direcories are searched for with-L a global installation might break the compilation. If you don’t knowwhat this means: don’t attempt a global installation

4.4 Packaging

4.4.1 Debian

The command build dpkg builds a Debian/Ubuntu package for the cur-rently enabled OpenFOAM-package. Note:

• it is assumed that the currently used OF-version was also installed bythe package manager

• the dev package is built but poorly maintained

Changes in the packaging should be done in the branch debianPackaging

of the Mercurial-repository and later be merged to the default-branch.Packaging for OpenFOAM 2.x should be done in the branch debianPackaging_2.x

Note: Due to the problem described with the global installation it mightbe necessary to deinstall a previously installed package to successfully builda new package

7

Page 8: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

5 Contents

5.1 Libraries

Collection of Libraries

5.1.1 swak4FoamParsers

The basis of swak4Foam: the expression parsers with the logic to access theOpenFOAM data-structures.

None of the other software pieces compile without it

5.1.2 simpleFunctionObjects

A collection of function objects that was previously separately available athttp://openfoamwiki.net/index.php/Contrib_simpleFunctionObjects.

Provides consistent output of values (on patches and fields) and more.

5.1.3 groovyBC

Implements the infamous groovyBC. A boundary condition that allows arbi-trary expressions in the field-file

5.1.4 swakFunctionObjects

Function objects that have no additional requirements. Mainly used formanipulating and creating fields with expressions

addGlobalVariable Adds a variable to a global swak-namespace. Mainlyused for debugging and resolving issues where a variable is needed ina BC before it is defined.

expressionField Create a new field from an expression

clearExpressionField Erase a field created with expressionField

manipulateField Modify a field in memory

createSampledSet Create a sampled set that can be used by other swak-entities (mainly boundary conditions)

createSampledSurface Create a sampled surface that can be used byother swak-entities (mainly boundary conditions)

8

Page 9: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

solveLaplacianPDE Solve the Poisson equation

∂ρT

∂t−∇λ∇T = Sexpl + SimplT (1)

for T where ρ, λ and S can be specified

solveTransportPDE Solve the transport equation

∂ρT

∂t+÷(ϕ, T )−∇λ∇T = Sexpl + SimplT (2)

for T where ρ, λ and S can be specified. Plus the name of the field ϕ

5.1.5 simpleSwakFunctionObjects

Function objects based on the simpleFunctionObjects-library (which is aprerequisite for compiling it).

Evaluate expressions and output the results

5.1.6 swakSourceFields

These classes allow to manipulate the solution. To use these the solver hasto be modified.

expressionSource Field that is calculated from an expression. To be usedas source-term or coefficient in some solver

forceEquation force an equation to fixed values in selected locations. Hasto be used after constructing the equation and before solving

These sources are based on basicSource and can be used without a modi-fication of the solver (they are only available in the 2.x version):

SwakSetValue sets values according to a mask or the mechanism providedby basicSource

SwakExplicitSource Uses the calculated source term on the right handside of the equation

SwakImplicitSource Uses a calculated scalar-field to add an implicitsource term (source is without the actual field)

5.1.7 swakTopoSources

topoSources for cellSet and faceSet. Can be used with the cellSet andfaceSet-utilities

9

Page 10: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

5.1.8 swakFiniteArea

Implements parsers for the finiteArea-stuff in 1.6-ext. Also implementsgroovyBC for areaField and expressionField and other function objects

5.1.9 groovyStandardBCs

Collection of boundary conditions that give standard boundary conditionsthe possibility to use expression for the coefficients

Contributions to this library are explicitly encouraged. Please use theMercurial-branch groovyStandardBCs to groovyify standard boundary con-ditions.

5.1.10 pythonIntegration

Embeds a Python-interpreter.

pythonIntegrationFunctionObject Executes Python-code at the usual ex-ecution times of functionObjects. The interpreter keeps its state

This library is only compiled if the paths to the Python-Headers areconfigured in the swakConfiguration-file (see above)

5.1.11 fluFunctionObjectDriver

Driver for functionObjects that implemented entirely in Python using thepythonFlu-library

5.1.12 functionPlugins

Directory with a number of libraries with function-plugins:

swakFacSchemesFunctionPlugin functions with selectable discretiza-tion schemes for FAM (only used in 1.6-ext)

swakFvcSchemesFunctionPlugin functions with selectable schemes forFVM

swakLocalCalculationsFunctionPlugin calculations that are local to acell (Minimum of the face values or so)

swakMeshQualityFunctionPlugin calculate mesh quality criteria like or-thogonality, skewness and ascpect ratio

10

Page 11: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

swakRandomFunctionPlugin different random number distributions. Cur-rently only exponential

swakSurfacesAndSetsFunctionPlugin calculates distances from sampledSurfaces

and sampledSets and projects calculated values from these onto a vol-ume field

swakThermoTurbFunctionPlugin Access functions from the thermo-physical model and the turbulence model in the current region. Loadsthe model only if necessary

swakTransportTurbFunctionPlugin Same as above but for incompress-ible models

swakLagrangianCloudSourcesFunctionPlugin Functions that get in-formations like source terms from clouds of particles (due to technicalreasons this works only for the regular intermediate clouds)

swakVelocityFunctionPlugin Functions that work on the flow field (cur-rently only the local Courant-number)

5.2 Utilities

5.2.1 funkySetFields

Utility that allows creation and manipulation of files with expressions

5.2.2 funkySetAreaFields

Utility like funkySetFields for areaFields (only works with 1.6-ext)

5.2.3 funkySetBoundaryField

Sets any field on a boundary to a non-uniform value based on an expression.Acts without deeper understanding of the underlying boundary condition

5.2.4 replayTransientBC

Utility to quickly test whether a groovyBC gives the expected results. Writesthe specified fields with the applied boundary condition but doesn’t do any-thing else.

Can be used for other BCs as well

11

Page 12: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

5.2.5 funkyDoCalc

Evaluates expressions that are listed in a dictionary using data that is foundon the disc and prints summarized data (min, max, average, sum) to thescreen

5.3 Examples

If not otherwise noted cases are prepared by a simple blockMesh-call.Note: All the cases here are strictly for demonstration purposes and

resemble nothing from the ‘real world’

5.3.1 groovyBC

The old groovyBC-Demos

• pulsedPitzDaily

Solver pisoFoam

Also demonstrates manipulateField, expressionField and clearField

from the swakFunctionObjects. patchExpression from simpleSwakFunctionObjects.solveLaplacianPDE and solveTransportPDE for solving equa-tions

• wobbler

Solver solidDisplacementFoam

• circulatingSplash

Solver interDyMFoam

• movingConeDistorted

Solver pimpleDyMFoam

Also demonstrates swakExpression with surface. Due to a prob-lem described below this currently doesn’t work

• average-t-junction

Solver pimpleFoam

• delayed-t-junction

Solver pimpleFoam

12

Page 13: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

Demonstrates Delayed variables to simulate an inflow that dependson the value of the outflow

• multiRegionHeaterFeedback

Solver chtMultiRegionFoam

Mesh preparation Execute the script prepare.sh in that directory

Also demonstrated patchExpression and swakExpression fromsimpleSwakFunctionObjects.

• fillingTheDam

Solver interFoam

Also demonstrates Usage of a sampledSet defined in the controlDictdo determine the average filling height. Also stored variables fornot switching back once the criterion is reached. Global variablesdefined by a function object

• sprinklingInlet

Solver interFoam

Description Winner of the swak4Foam-competition at the 6th OpenFOAM-Workshop (2011). By Peter Keller

• potentialPitzDaily

Solver potentialFoam

Description Demonstrates the use of groovyB with potentialFoam

(also a problem connected with that). Provided by Martin Backer

5.3.2 FunkySetFields

Example dictionary for funkySetFields

5.3.3 FunkySetBoundaryFields

Example dictionary for funkySetBoundaryFields. Sets nonsense boundaryconditions for the world famous damBreak-case

13

Page 14: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

5.3.4 InterFoamWithSources

Demonstrates usage of expressionSourceDue to differences in the original interFoam-solver this doesn’t work on

certain OpenFOAM-versions (most specifically 1.6-ext).The only modifications to the original solver are found at the end of

createFields.H and in UEqn.H (the added source terms).

5.3.5 InterFoamWithFixed

Demonstrates usage of forceEquationDue to differences in the original interFoam-solver this doesn’t work on

certain OpenFOAM-versions (most specifically 1.6-ext).The only modifications to the original solver are found at the end of

createFields.H and in UEqn.H (the fixing of the velocities).

• interFoamWithSources

Slightly modified version of interFoam. Adds a source term to themomentum equation. The source term is an expression that is definedat run-time

• mixingThing

Demonstration case for it.

Preparation Run the script prepare.sh to prepare the case

5.3.6 FiniteArea

Demonstration of the finiteArea-stuff that works with 1.6-ext

• swakSurfactantFoam

Variation of surfactantFoam that adds an expressionSource

• planeTransport

Demonstration case

Preparation Use blockMesh and makeFaMesh

Solver surfactantFoam (without source term) or swakSurfactantFoam

Demonstrates FAM-specific swakExpressions and groovyBC (aswell as the expressionSource)

14

Page 15: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

5.3.7 other

Cases that don’t have a groovyBC

• angledDuctImplicit

Solver rhoPorousSimpleFoam

Mesh preparation Execute the makeMesh.sh-script in that direc-tory. If you want to run in parallel call the decomposeMesh.sh-script with the number of processors as an argument

Demonstrates Usage of the swakTopoSources. Compares differentapproaches to evaluating with the swakExpression-functionObject.Also an example dictionary that demonstrates the use of funkyDoCalc

• angledDuctImplicitTransient

Solver rhoPorousMRFPimpleFoam

Mesh preparation Execute the makeMesh.sh-script in that direc-tory. If you want to run in parallel call the decomposeMesh.sh-script with the number of processors as an argument

Demonstrates The same as angledDuctImplicit but also the out-put of temporal changes

• capillaryRise

Solver interFoam

Case preparation run the supplied script prepareCase.sh

Demonstrates Usage of a sampled surface to track the interface in aVOF-simulation

• mixingGam

Solver interFoam

Case preparation run the supplied script prepareCase.sh

Demonstrates Emulate a “moving gravitation” by using the manipulateField-functionObject to recalculate gh and ghf

15

Page 16: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

5.3.8 PythonIntegration

Demonstrate the integration of Python. Mostly using PyFoam but also withpythonFlu

• manipulatedPitzDaily

Solver simpleFoam

Demonstrates Usage of PyFoam to manipulate the fvSolution-fileduring the run (possible application: unphysical initial conditionscause the run to fail during startup with “normal” relaxation val-ues)

• findPointPitzDaily

Solver simpleFoam

Demonstrates Usage of the pythonFlu-integration to find the pointwhere the recirculation behind the step ends. Also tries to plotthe result using the matplotlib-library

• bed2OfPisa

Solver twoPhaseEulerFoam

Demonstrates Usage of PyFoam to read the direction of gravity andfeeding it into a goovyBC via global variables

Case preparation Just call funkySetFields -time 0

• multiRegionHeaterBuildFunctionObjects

Solver chtMultiRegionFoam

Demonstrates Building the specification of function objects at run-time via a Python-script

5.3.9 solvePDE

Examples for the functionObjects that can solve Partial Differential equa-tions

• flangeWithPDE

Solver laplacianFoam

16

Page 17: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

Demonstrates The usage of the functionObject that solves thelaplacian (Poisson) equation and (hopefully) that it gets the sameresult as the native solver

Case preparation Allrun-script is provided

• pitzDailyWithPDE

Solver scalarTransportFoamDemonstrates Solving additional transport equations

5.3.10 BasicSourceSubclasses

These examples test the source terms based on basicSource. They onlywork with OpenFOAM 2.x and all use the simpleFoam-solver

• pitzDailyWithSwirl

Demonstrates Fixing the values of the velocity in a region withSwakSetValues

• pitzDailyWithExplicitPoroPlug

Demonstrates Implementing a simple porous plug by adding theDarcy-term as a source term with SwakExplicitSource

• pitzDailyWithImplicitPoroPlug

Demonstrates Same as pitzDailyWithExplicitPoroPlug but withan implicit source term with SwakImplicitSource

5.3.11 Lagrangian

Tests for the functionObjects that create and evolve a cloud of particles

• hotStream

Solver replayTransientBCMesh preparation prepareCase.sh-scriptDemonstrates 3 clouds (kinematic, reacting, solidParticle). Loading

of a thermophysical model with a functionObject. Plugin func-tions for information about the clouds

• angledDuctWithBalls

Solver rhoPimpleFoamDemonstrates Thermo-cloud. Functions for lagrangian particles

17

Page 18: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

5.3.12 tests

Simple test cases for specific features

• randomCavity

Testing of different seeds for the rand-function. Also tests therandFixed-function

5.4 maintainanceScripts

Undocumented scripts used for maintaining swak4Foam. If you don’t un-derstand them, don’t use them

6 Bug reporting and Development

6.1 Bug reports

The preferred place for bug reports is http://sourceforge.net/apps/mantisbt/openfoam-extend/search.php?project_id=10&sticky_issues=on&sortby=last_updated&dir=DESC&hide_status_id=90

A sourceforge-account is required for reporting

6.1.1 Things to do before reporting bug

If you’re reporting a bug about the compilation please run Allwmake twiceand only report the messages from the second run. This makes analyzingthe log easier as only the unsuccessful commands will be reported.

If the problem seems to be a missing library rerun the compilation tomake sure that there wasn’t a problem with that.

6.2 Development

Contributions to to swak4Foam are most welcome. If you want to contributeclone the Mercurial archive of the sources

hg clone http://openfoam-extend.hg.sourceforge.net:8000/hgroot/openfoam-extend/swak4Foam

Change to the branch that you want to improve (usually default) and createa new branch

hg branch <branchName>

18

Page 19: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

where <branchname> is an easily identifiable name that makes the pur-pose of the branch clear (for instance bugfixWrongRandomFunction orfeatureHyperbolicFunctions). Don’t work on the default branch or anyother branches that are not “yours”. Such contributions will not be merged

Once development on the branch is finished export the relevant change-sets with

hg export <nodeID>

(nodeID being the ids of “your” changesets) and send them to the maintainer(or attach them to a bug report on Manits). The changes will be reviewedand merged into the default branch (do not attempt to do this yourself).Patches generated with hg export make sure that all changes are attributedto the original developer (you).

An alternative would be the bundle command. Just do

hg bundle <bundlefile>

and then send the bundlefile. This will include all commits that are notin the upstream repository and will allow similar inclusion in the upstreamas export.

Once you have proven by successfully submitting changesets via hg

export you can ask for write access to the mercurial repository.

6.2.1 Suggest reading

These topics may be “new” for the average OF-developer:

Mercurial A short tutorial on this can be found at http://mercurial.selenic.com/guide/.If you already know git the http://mercurial.selenic.com/wiki/GitConceptsmay be enough for you

bison/flex This pair of compiler generator tools generate the parsers forthe expressions. Google for a tutorial that looks promising to you.

For a short example that shows how a new function was added to twoparsers have a look at this changeset that added the cpu()-function tothe field and the the patch-parser (usually you’ll have to write a newmethod for the driver too):

hg diff -c 8604e865cce6

19

Page 20: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

6.2.2 Special branches

Currently the main branches are:

default The main branch. This is the brancht that the general public willreceive. It compiles under 1.7 and 1.6-ext

port_2.0.x The branch that compiles under OpenFOAM 2.0. This willeventually become the default-branch

debianPackaging Branch for generating new Debian-packages of swak4Foam.If somebody wants to “inherit” this: contact the maintainer

finiteArea In this branch the things for the finiteArea-discretization (onlypresent in 1.6-ext) is developed. Usually gets merged back into thedefault-branch once a feature is completed

6.2.3 Distributed bug-tracking

As an experimental feature distributed bug-tracking was introduced usingthe Artemis-extension for Mercurial (see http://hg.mrzv.org/Artemis/).An up-to-date version can be installed by

hg clone http://hg.mrzv.org/Artemis/

somewhere and installing the plugin by editing .hgrc.This is not the official bug-tracker for swak4Foam. It is used for keeping

track of new features that are to be introduced to swak4Foam and may bediscontinued if the experiment proves to be unsuccessful.

7 Copyright

swak4Foam is free software; you can redistribute it and/or modify it under theterms of the GNU General Public License as published by the Free SoftwareFoundation; either version 2 of the License, or (at your option) any laterversion. See the file COPYING in this directory, for a description of theGNU General Public License terms under which you can copy the files.

8 Known bugs

The following list is not complete. If the Artemis extension (see above) isinstalled then

20

Page 21: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

hg ilist

gives a more up-to-date list

8.1 Moving meshes and sampledSurfaces

It seems that with moving meshes sampledSurfaces don’t get updated.This seems to be a problem with OpenFOAM itself (the regular surfaces-functionObject doesn’t get updated. This is currently investigated

8.2 Missing support for interpolation and point-Fields

Apart from patches and internal fields the support for interpolation fromcells to faces (and vice versa) is incomplete as well as point fields (althoughthey are supported in the grammar)

8.3 Caching of loaded fields not working

This is especially evident for the funkyDoCalc-example

8.4 Possible enhancements of the code

Not really bugs, but stuff that bugs me

8.4.1 Pointers in the driver code

This is necessary because of bison. Investigate possibilities to replace theseby tmp and autoPtr

8.5 Possible memory loss

valgrind reports some lost memory for stuff that is not directly allocatedby swak4Foam (in OpenFOAM-sources)

Will investigate. Relevant places are marked by comments in the code.Also the construction of sampledSet seems to loose memory

8.6 No point-vector construction for Subsets

The same problem that was mentioned in https://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=130 is also true for subsets. But as the interpolation isnot implemented for most subsets this will be postponed

21

Page 22: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

9 History

9.1 2010-09-13 - version number : 0.1

First Release

9.2 2010-12-18 - version number : 0.1.1

New release Most important changes

9.2.1 Parser for sampledSurfaces

Now expressions for the field on a sampled surface can be evaluated. AllsampledSurfaces offered by OpenFOAM now can be used

9.2.2 Multiline variables

The variables entry (most notably used in groovyBC and swakExpression)now can be a list of strings. This allows some kind of “formatting” (oneexpression per line) and should improve readability

9.2.3 Two maintainance-scripts were added

These can copy the libraries and utilities to the global installation (for thosewho think that the swak4Foam-stuff is stable enough and want to ‘bless’ allusers at their site with it). Note that any local installation still takes prece-dence (because $FOAM_USER_APPBIN is before $FOAM_APPBIN in the $PATH

9.2.4 Parsers using ‘external variables’ are now run-time se-lectable

This allows the inclusion of other parsers with the regular swak4Foam parsersand include them seamlessly with the variables-mechanism for ‘externals’(in other words: you can add your own parser in a separate library withouthaving to change anything about the overall swak4Foam, but it behaves as ifit was part of it)

9.3 2011-01-30 - version number : 0.1.2

9.3.1 Support for Finite Area-stuff

Now there is support for the finiteArea-library found in 1.6-dev. Thesupport is found in a separate library swakFiniteArea. It has

22

Page 23: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• a parser faField for areaFields

• a parser faPatch for patches of areaFields

• a variant of groovyBC for these patches

• a computed source faExpressionSource

• Function-object-variants for areaFields: clearExpression, expressionFieldand manipulateField. These work the same as their volField-counterparts

9.3.2 Bugfix for compiling in single precision

See https://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=49

9.3.3 New function nearDist

See https://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=44

9.4 2011-04-20 - version number : 0.1.3

New features and changes are (this list is not complete):

9.4.1 New utility funkySetAreaField

Like funkySetFields for finiteArea. Also writes out a volume field for easierpost-processing

9.4.2 Refactoring of groovyBC and groovified boundary conditions

Makes it easier to use the groovyBC-machinery for other boundary condi-tions. Two standard boundary conditions were groovified. Others may follow

9.4.3 Easier deployment

If no simpleFunctionObjects are present they can be downloaded by ascript. Also scripts to handle global installations of swak4Foam

9.4.4 Force equations

A class to force equations to certain values according to expressions

23

Page 24: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

9.4.5 New utility funkyDoCalc

Utility does calculations on saved results and outputs single numbers (min,max, sum, average) to the terminal. Can be used for reporting or validitychecks

9.4.6 Debian packaging

Crude packaging for Debian

9.4.7 Lookup-tables

A single-argument function can be specified as a piecewise linear function.Basically works like timelines but the argument can be something else (notonly the time)

9.4.8 Stored variables

Variables that store their values between time-steps. Applications are statis-tics or switches

9.4.9 Sampled sets

Sampled sets can now also be used as en entity on which calculation ispossible.

9.5 2011-07-26 - version number : 0.1.4

9.5.1 New features:

• Rewrite of rand and randNormal

– These two functions now can receive an integer seed that deter-mines the pseudo-randooom sequence generated by these func-tions

– Two functions randFixed and randNormalFixed were added.While the usual rand functions generate a different result at ev-ery time-steps for these functions the pseudo-random sequence isdetermined only by the seed (not by the timestep)

• Binary min and max

Take the bigger/smaller of two fields. Helps avoid ?:-operations

24

Page 25: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Allow writing of only volume-fields in funkySetAreaFields

Application: If the results of the calculation are only needed in Par-aView

• Internal changes

– Use autoPtr for sets

– Update sets that change in memory or on disc

9.5.2 Bug-fixes

• funkySetAreaFields did not check for the correct fieldsFixed by Petr Vita

• surfaceProxy uses the wrong geometric data

• Avoid floating point exceptions with division of fieldsCalculated boundaries were 0 and caused a division by zero

9.5.3 Packaging

• Update Debian packaging

– Packaging information for the currently used OF-version is gen-erated (allows a separate swak-package for every OF-version

– Submission to launchpad added

• Deployment scriptsNow install to FOAM_SITE_APPBIN/LIBBIN

9.6 2011-10-03 - version number : 0.1.5

9.6.1 New features

• replayTransientBC now supports multiple regionsUses the usual -region-option. Looks for a separate dictionary in thesystem-directory of that region

• replayTransientBC allows execution of functionObjectsThis can be switched on using the allowFunctionObjects-option

25

Page 26: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Python-embeddingAllows the execution of Python-Code in a functionObject

This feature is still experimental and the organization of the librariesis subject to change

• Global variablesIt is now possible to define variables that are ‘global’: They can beread in any entity.

Currently these variables can only be uniform.

To access global variables the specification-dictionary has to have awordList named globalScopes. The scopes are searched in that orderfor the names of global variables. Having scopes allows some kind ofseparation of the variables

• Simplified boundary condition groovyBCFixedValue

Added a boundary condition than allows to only fix the values. Thisshould help to avoid problems with cases that don’t like mixed (onwhich the regular groovyBC is based)

• Function objects to solve PDEsTwo function objects that solve Partial Differential Equations duringa run have been added:

– one that solves a laplacian (Poisson) equation

– one that solves the transport equation for a scalar

The relevant coefficients (including explicit and implicit source terms)can be specified using expressions

9.6.2 Administrative and packaging

• Inject swak4Foam into a distroAdded a script that takes the current sources, copies them into the ap-propriate places of a OpenFOAM-installation and slightly rewrites themto compile in this place. What happens then (committing them intothe repository or just plain compilation) is up to the maintainer

• Absorb simpleFunctionObjects

As many parts of swak4Foam depend on it the simpleFunctionObjectshave now been absorbed into swak4Foam. They can still be compiledon their own

26

Page 27: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

9.6.3 Bugfixes

• Variables not working for parallel computationsIf a variable is defined and the patch which it is defined on doesn’t haveany faces the variable is reported on that processor as not existing andthe whole run fails

9.7 2012-01-04 - version number : 0.1.6

9.7.1 Cases changed

• circulatingSplash

Fixed according to a suggestion by Andreas Otto. Now runs again(used to crash some time-steps into the beginning)

9.7.2 Infrastructure

• Check for correct bison-versionThe Allwmake-script now checks for the correct bison-version (and theexistence of bison) and fails if it doesn’t seem to be the right one

• Supply a header with preprocessor-symbols about the used OF-versionTo allow distinguishing different OF-versions as discussed in the bug re-port http://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=114the Allwmake-script now generates a header file foamVersion4swak.H

that defines the symbols FOAM_VERSION4SWAK_MAJOR, FOAM_VERSION4SWAK_MINORand FOAM_VERSION4SWAK_PATCH

9.7.3 Technical

• Refactoring of the FieldDriver

– now can also produce surfaceFields– full support of tensor, symmTensor and sphericalTensor

• Refactoring of the FaFieldDriver

– now can also produce edgeFields

No support for tensors yet

• Writing of storedVariablesIf necessary (for instance swakExpression-functionObject) the storedVariablesare written to disc (into a subdirectory swak4Foam of the timestep) and

27

Page 28: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

are reread at the start. This allows consistent restarts (for instance ifa flow was summed using the variable) if the expressions stay thesame.

• simpleFunctionObjects now write vectors and tensors without brack-etsData files can now be written without brackets but each componenton its own. The number of entries in the header is not adjusted

9.7.4 New features

• General phi in solveTransportPDE

Due to the refactoring of the FieldDriver now phi can be specifiedby a general expression (instead of ‘only’ a field-name)

• funkySetFields now also writes surfaceFieldsCan write surfaceVector and surfaceScalar-Fields. Condition hasto be consistent

• Function objects now surfaceField-awareexpressionField and manipulateField now can create or modifysurfaceFields

• funkySetFields and function objects support tensorsfunkySetFields and the function objects expressionField and manipulateField

now also work with the three tensor-types

• Extension of the expressionToFace topoSet

If the expression evaluates to a surfaceField then this is used as a flagwhether or not the face is in the faceSet. If the expression evaluatesto a volScalarField then the old semantic applies (faces are in theset if one cell is true and the other is false).

This only works for internal faces

• addGlobalVariable allows setting more than one valueIf there is an entry globalVariables then this dictionary is used toset the variables

• Function object calculateGlobalVariablesCalculates variables and then pushes them to a global namespace

28

Page 29: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Generate a dummy phi in replayTransientBC

New option added that generates a phi field with value 0 to keepboundary conditions like inletOutlet happy

• Function object to dump expression resultsThe functionObject dumpSwakExpression dumps the complete resultsof a swakExpression to file at each timestep. This produces huge filesand is therefor not endorsed

• Additional options for funkySetFieldsAdd the options allowFunctionObjects and addDummyPhi to executefunctionObjects and add a phi-field (for fields that require these)

• simpleFunctionObjects write CSV-filesSetting the option outputFileMode to csv writes CSV-files. Theoption-value foam is the default (old style). The option-value raw

writes the values delimited by spaces (no brackets for vectors and ten-sors)

• Submeshes automatically read if searchOnDisc specifiedIf a submesh is not yet in memory and the option searchOnDisc is set,the mesh is automatically read into memory and kept there

• Conditional functionObjectsThe simpleFunctionObjects-library now has a number of functionOb-jects that allow the conditional execution of a list of function objects.

These are

executeIfExecutableFits if the name of the executable fits a regularexpression the function objects are executed

executeIfObjectExists if a named object exists (or alternatively:doesn’t exist) in the registry execute the function objects. Typechecking also implemented

executeIfEnvironmentVariable execute if an environment variablesatisfies a certain condition (exists, doesn’t exist, fits a regularexpression)

executeIfFunctionObjectPresent execute if a specific functionOb-ject is present. This can help prevent failures if a functionObjectis missing for technical reasons

In addition the simpleSwakFunctionObjects-library has

29

Page 30: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

executeIfSwakObject Evaluates a logical swak-expression. The re-sults are either accumulated using logical or (if one value is truethe result will be true) or logical and (all values have to be true)

The pythonIntegration-library has

executeIfPython Evaluates a Python-code-snipplet that returns avalue. If this value is “true” in Pythons standards then the func-tionObjects are executed

• functionObject that reads gravitationsimpleFunctionObjects has an additional function object that readsthe direction of gravitation. The purpose is to assist boundary condi-tions like buoyantPressure that rely on it to work. Best used togetherwith conditional function objects (“If g is missing . . . .”)

• PDE-functionObjects for finiteAreaSolve transport and laplacian equation

• funkySetAreaField now also writes edgeFieldsSimilar to the surfaceFields in funkySetFields

9.7.5 Bug fixes

• Compilation with Intel-Compiler possibleThe Utilities failed with the Intel-compiler. Compilation now fallsback to good old g++

• Access to tensor-components not workingBecause the tokens were not defined in the flex-files getting tensorcomponents with tensor.xx did not work. Fixed

• Constants for surfaceFields not workingBecause surfaceFields know no zeroGradient the template makeConstantdid not work

• snGrad does not work for patches if the file is on discChange so that the field gets temporarily loaded to calculate the gra-dient on the patch. Same for internalField and neighbourField

• potentialFoam does not correctly use a groovyBC

The reason is that groovyBC usually doesn’t get evaluated during con-struction. The reason is that it is hard to tell whether all required

30

Page 31: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

fields are already in memory. The current fix is a workaround: settingevaluateDuringConstruction to true forces the BC to be evaluatedduring construction

• Extra evaluation of boundary conditions causes failureExtra evaluation of boundary condition that should fix the problemwith calculated patches causes funkySetFields to fail with stockboundary conditions if not all fields are present in memory

9.8 2012-04-13 - version number : 0.2.0 Friday the 13th

9.8.1 New features

• Region name in simpleFunctionObject.outputsTo distinguish the output of various instances of functionObjects

from the simpleFunctionObjects-library in multi-region cases thescreen-output is prefixed with the region name. For the default re-gion nothing changes. Directory names stay the same as they areunambiguous anyway (they contain the name of the functionObject)

• Temporal operators ddt and oldTime

For fields (not expressions!) the value at a previous timestep canbe gotten via oldTime(field) if that information exists (also forfunkySetFields if the corresponding file field_0 exists.

For fields that support it (basically volume-fields) there is also a ddt-operator that calculates the explicit time-derivative (if informationabout the last timestep exists)

Currently implemented for

internalFields oldTime and ddt

patch only oldTime

cellSet,cellZone only oldTime

sampledSurface,sampledSet only oldTime

faceSet,faceZone oldTime

internalFaFields oldTime and ddt

faPatch only oldTime

If there is no old time value stored and in the parser dictionary theparameter prevIterIsOldTime is set, then the previous iteration valueis used as the old time.

31

Page 32: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Boundary condition groovcBCDirection

Based on the directionMixed boundary condition this allows to set aboundary condition as a Dirichlet-condition only in certain directionswhile in the other directions it is a gradient-condition

Note: this should have been in the last release but was forgotten tomerge into the default branch

• Boundary condition groovyBCJump

Boundary condition that imposes a jump in the value on a cyclicboundary condition pair (based on jumpCyclic). Only works for scalarvalues

Note: this should have been in the last release but was forgotten tomerge into the default branch

• Function to return the position of minimum and maximumThe functions minPosition and maxPosition return the position ofthe minimum or the maximum of a scalar field

This is implemented for all field types

• Support for pointFields in the field-parsersNow can read and generate pointFields.

Detailed features (apart from the standard symbols) are:

– Function point generates a constant pointScalarField

– Function pts() returns a pointVectorField with the point po-sitions

– Functions pzone and pset generate logical fields according to ex-isting pointZones or pointSets

– Functions interpolateToCell and interpolateToPoint inter-polate from pointFields to volFields and from volFields to point-Fields

Utilities and functionObjects affected by this are

– funkySetFields

– new topoSource expressionToPoint

– expressionField and manipulateField now can deal with point-Fields

32

Page 33: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Support for tensors in the finiteArea-field parserThe faField-parser now supports tensors, symmetric tensors andspherical tensors.

Not all operators are supported because the are not instantiated in1.6-ext

• New convenience-variables for the Python-IntegrationThese variables are added in the namespace to ease the writing ofPython-code whose output is consistent with OF

timeName Name of the current time as a string. Allows the con-struction of directory names

outputTime Boolean that indicates whether this is a timestep whereOpenFOAM will write output

• Additional operators from the fvc-namespaceThe missing operators from the fvc-namespace have been added to theField-parser. These are

d2dt2 for all volumeFieldsflux for all volumFields. Needs a surfaceField as a first argumentmeshPhi for volume-vector-fields. Optional with a scalar-field that acts

as the density as the first argument. Only works in the contextof a solver with a dynamic mesh and hasn’t been tested yet

The only missing operators from the fvc-namespace are volumeIntegrate=/=domainIntegrate.These have been omitted as they are trivial to implement using otherfunctions

9.8.2 Infrastructure

• Full parallel compilationThanks to patches supplied by Bruno Santos (see http://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=105) compilation of the libraries is now possiblein parallel

• Version numbers and version number reportingReleases up to now got a version number. Utilities now report the ver-sion number. This should make it easier to find out whether problemsare due to an old version

Still looking for a way to do that for the libraries (so that they willreport it if dynamically loaded)

33

Page 34: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

9.8.3 Packaging

• Update of the Debian-Packagingmake dpkg now genrates also a valid package if the current OpenFOAM-installation is not installed using the dpkg.

9.8.4 Changes in the behavior

• Directory variables in Python-integrationFor parallel runs the content of the caseDir-variable changed and afew variables have been added

caseDir in parallel runs now points to the FOAM_CASE instead of theprocessor subdirectory

systemDir points to the global system-directory

constantDir points to the global constant-directory

procDir in parallel runs points to the processor-subdirectory of thecurrent CPU

meshDir The mesh data (of the current processor in parallel runs)

timeDir Directory where data would be written to at the current time(processor dependent)

• User must acknowledge parallelization in Python-integrationIn parallel runs the user must set the isParallelized to true if theparallelMasterOnly is set to false.

With that he indicates that in his opinion the Python-code has no badside-effects in parallel runs and that he doesn’t blame swak4Foam ifanyting bad happens

9.8.5 Bug fixes

• Field itself can not be used in funkySetBoundaryField

Bug reported: http://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=124

An expression like 2*U did not work for the field U. Reason was that theregistry already held an object called U (the dictionary representationof the field) and therefor refused to load/register another U.

Has been fixed by de-registering the dictionary U immediately afterloading.

34

Page 35: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• No gradient for vectors in FieldParserThe gradient for a vector field (result: a tensor field) was not calculated.It is now part of the grammar

• Some operators for tensors not working in 1.6-exttr, inv and det were not working for some tensort types in 1.6-ext.The parser now fails if such a combination is used. Works OK for otherOF-versions

Also introduced a workaround for certain operators not being properlydefined for pointFields (by using the internal fields)

• x, y, z and xy etc not available as field namesThese symbols could not be used as field names because they were usedfor the components of vectors and tensors

Now these names are only used if the .-operator asks for a component.This is implemented for these parsers

– FieldValues

– PatchValues

– SubsetValues (all Zones, sets and samples)

– finiteArea-Parsers: faPatch and faField

• Missing tensor components for point-Fields in some parsersAll parsers except the field-parser were missing the access to tensorcomponents in the grammar

• No vector construction possible for point-vectors (and tensors) inPatchFieldAs mentioned in https://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=130 it was not possible to construct a point-vector field using vector(toPoint(1),toPoint(1),toPoint(1)). Samefor tensors

• Incomprehensible error message in funkySetFields if the field is miss-ingThe error message in funkySetFields that was issued when a field issupposed to be created was not very helpful (something about the fieldcurrently being an IOobject)

• Missing magSqr in parsersThis function was reported missing on the message board

35

Page 36: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Wrong size when composing vectors and tensors for point-fieldsThe composed objects got their size from the current parser, not thecomponents. This resulted in a segmentation-fault for pointFields

• icc does not compile executeIfExecutableFitsFunctionObject onLinuxPreprocessor symbol linux unknown. Replaced with __linux__

• Enhancement to the trackDictionary-functionObjectNow handles bad or non-existent filenames for dictionaries to track

Fix provided by Martin Beaudoin

9.9 2012-10-18 - version number : 0.2.1

9.9.1 Requirements

• flex 2.5.35

This version is needed for the reentrant parsers. 2.5.33 may workbut is untested. Version 2.5.4 which is on some old systems definitelydoes not work

• bison 2.4

Version 2.3 compiles but there is an offset-problem with the locationsthat breaks the Plugin-functionality

Mac-users will have to install bison from another source (for instanceMacPorts)

9.9.2 Bug fixes

• Make sure that Allwmake always uses the bash

On Ubuntu /bin/sh is something else and the scripts fail. Hardcodeto /bin/bash

• downloadSimpleFunctionObjects.sh still in MakefileThis script (which was removed long ago) was still referenced in theMakefile.

• grad in fields added dimensionsgrad and other operators from fvc added dimensions to values thatwere supposed to be dimensionless. This has been fixed

36

Page 37: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Default condition for surface fields wrong size in funkySetFields

Due to a typo the constructed condition field was too short for surface-fields (too long for volume-fields, but that didn’t matter)

• flip() for faceSet not correctly calculatedA SortableList was used which meant that the vector with the flipvalues was not in the correct order

• fset() crashes when faceSet has boundary facesThis problem was due to a non-special treatment of faces on the bound-ary. Fixed (for faceZone as well).

Also boundary faces are now honored in expressionToFace if the ex-pression is a surface-field (for the volume-field logic boundary faces willnever work)

• groovyBC produced incorrect results with wallHeatFlux etcThe reason was that during construction refGradient, refValue etcwere not read correctly (if present).

This is now fixed in groovyBC and the other BCs (groovyBC for point-Fields and groovyBCDirection)

• Global variables not found in faField

The Lexer correctly identified the variable but the getField methoddid not know how to get it.

Fixed

• Wrong type of condition field in funkySetAreaFields

If no condition was evaluated the utility generated a pseudo-field ofthe wrong length

• calculated-patches 0 for some operationsFor some operations in the Field-driver the calculated-patches hadthe value 0 instead of the number of the next cell. This caused certaincalculations to fail (give 0)

The FaField-driver did no fixing of the calculated-patches at all.

This is fixed

• sqr of a vector should produce a symmTensor

Reported in http://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=150

Added the sqr at the right place to the grammars. Also some othermissing tensor operations (dev and symm).

37

Page 38: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• funkySetFields produced wrong values on processor patchesPatch fields were not copied any no correctBoundaryField was calledfor technical reasons.

Fix: values copied by hand

• sortedToc does not exist for 1.6-extIntroduced a preprocessor symbol that allows using sortedToc on newerversions

• Wrong size() and pointSize() reported for FaField-driverThis was due to a strange () (still don’t know what happened there)

• Memory leak in the field driversThe strings of parsed IDs were not properly deleted. Funnily this wasdone correctly in the Patch and the Subset-driver. Also for timelines-

Also fixed a leak with the labels of plugin-functions that was presentwith all drivers

• Maintenance scripts not working with non-=bash= /bin/sh

Reported by Oliver Krueger that on systems where /bin/sh is not abash anymore (newer Ubuntu and SuSE) the sourcing of theFiles.shdoesn’t work anymore.

Fixed and moved all the files to the maintainanceScripts-folder

• cof and diag undefinedAdded. Diag had to be reprogrammed as it is not implemented forfields (probably for performance reasons).

Also some tensor operators were missing (probably lost during copy/-paste)

• No new file created if number of patches for patchAverage changesReported in https://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=153

Fixed by removing all file pointers if the number of patches changes

• variables intolerant on spacesSpaces in the list of variables made the reading fail because words can’tcontain spaces. For instance

"var =T*2;"

38

Page 39: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

Now all the spaces are removed before assigning to variables. This willalso remove spaces on the “inside” thus making

"v ar =T*2;"

the same as the above expression. But it is unlikely that the call willbe used in this way

• Missing div-operationsThese valid div-operations were missing from the grammar:

– Divergence of a volume-tensor (all three kinds) producing a vector

– Divergence of a surface-tensor (all three kinds) producing avolume-tensor

• Fields created by expressionField written too lateFields created by that function object were written with the valuefrom the timestep before because the regular write occurs before theexecution of the function objects.

Fixed

• storedVariables did not require a initialValue

Now an initial value is required (instead of the default empty stringwhich caused parser failure)

• Dimension checking makes expressionField failReason is that during the calculation of the variables dimensions arechecked.

Now the functionObject switches the checking off. But a more generalsolution is desirable

• expressionField at last timestep not writtenThe functionObject does not write (and calculate) the field at the lasttimestep.

Fixed with an one-liner

• groovyBC makes interFoam-runs fail unpredictablyReason was an uninitialized falueFraction which sometimes has val-ues that cause a floating point exception. Fixed

39

Page 40: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Global variables of different sizes break parallel runsBecause size() was equal to the expected size on some processors. Noton all. Now the branch is taken if the size is equal on all processors

• Fields treated with readAndUpdateFields were written one timesteptoo lateFields were not written after the boundary condition was updated.Now they are

9.9.3 Enhancements

• Topology-operators now support variables etcThe topology operators expressionToCell, expressionToFace andexpressionToPoint now support variables and the other supportingkeywords if being constructed with a dictionary (for instance from thetopoSet-utility)

• Fields touched by manipulateField being writtenUsually the manipulated version of the fields is not written as themanipulation happens after writing. The option writeManipulated

enforces writing.

Writing is not the default behavior to avoid side-effects

• Indicator functions onPatch and internalFace added to field-expressionsThe function onPatch(name) returns a surface-field that is 1 on all facesthat belong to patch name.

The function internalFace() is 1 on all internal faces and 0 on allpatches

• Non-uniform second argument for powNow the second argument to the pow-function can be a non-constant

• Added transpose to the tensorsThe expression A.T() transposes the tensor A (for symmetrical andspherical tensors it leaves them untouched)

• Added unit tensor I to parsersIf no field I is defined then this is used as the unit-tensor

• Added the Hodge dual operatorThe unary operator * calculates for tensors and symmetrical tensorsthe hodge dual

40

Page 41: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• replayTransientBC can now switch on function-objects via dictionaryThe optional entry useFunctionObjects switches on the execution offunction objects during the calculation

• replayTransientBC can now create a phi-field via dictionaryThe optional entry addDummyPhi creates a phi-field

• expressionField now allows the specification of a dimensionThe dimensions-entry is now read at the same time the variables areread (this should work for all programs/functionObjects where theparser is not constructed using a dictionary but the dictionary is latersearched for the variables-entry)

9.9.4 New features

• Allow dynamically loaded plugins that add new functions to parsersThis allows easy extension of the functionality of swak4Foam withoutmodifying the grammar files.

The way it works is that new functions are added to a runtime-selectiontable. If the grammar can not resolve a symbol as a built-in function ora field (but only then) it looks up the name in this table and evaluatesthe function. Parameters are parsed separately and can be:

primitive data types integer, float, string and word

swak-expression an expression parsed by one of the swak-parsers.The type of this expression does not necessarily have to be thesame as the one of the ‘main’ expression.

The first time a plugin function is searched swak4Foam prints a listof all the available functions of this type. Information included is thereturn type and the types of the parameters (these include the parserused, the expected type and a parameter name).

Libraries with plugin-functions are added via the libs-entry in thesystem/controlDict

A number of plugin-libraries are already included covering these topics:

– Evaluation of functions of the turbulence, transport or thermomodel

– Different random number distributions

41

Page 42: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

– Functions to “project” sampledSets and sampledSurfaces ontoa volume-field

– Execute explicit discretization functions (like grad) but selectthe used scheme in the function instead of using the value fromfvSchemes

– Calculations of the mesh quality (same way checkMesh does) andreturn as fields

– Do calculations locally on a cell (like the maximum on its faces)– Get the source fields and other properties from lagrangian

clouds based on the basic intermediate cloud classes (Kinematic,Thermo, Reacting, ReactingMultiphase)

It has been tried to make the names unique instead of short. Usuallyfunction names from one library are prefixed with the same short string.

• Dynamically generated lists of functionObjectsThe new dynamicFunctionObjectListProxy in the simpleFunctionObjectscan generate a functionObjectList from a string and execute themduring the run like regular function-objects.

The string is provided by a special class (the so called dictionaryProvider).Current implementations for the provider are:

fromFileDictionaryProvider reads the text from a dictionary filestdoutFromCommandProvider executes a program and takes the

standard output as the dictionary textstdoutFromPythonScriptProvider executes a python-script and

takes the stdout as the dictionary text

The string must be in the format o a regular OpenFOAM-dictionarywith an entry functions from which the functionObjects are generated

• Function object readAndUpdateFieldsThis FO in the simpleFunctionObjects reads a number of fields andupdates their boundary conditions at every timestep.

Main purpose is to let groovyBC do calculations and use the results forpost-processing purposes

Does not support surface-fields as these don’t have a correctBoundaryConditions-method.

Example of the usage in the angledDuctImplicit-case (the results areof limited value because of the temperature boundary condition)

42

Page 43: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Source terms based on basicSource

Three source terms were added. These source terms are in theswakSourceFields-library and can be used with solvers that use thesourcesProperties-dictionary. The sources are

SwakSetValue sets values according to a mask or the mechanismprovided by basicSource

SwakExplicitSource Uses the calculated source term on the righthand side of the equation

SwakImplicitSource Uses a calculated scalar-field to add an implicitsource term (source is without the actual field)

These fields are only implemented in the 2.x-version of swak becausethe interface of basicSource is very different in 1.7 and a backportwas unnecessary

• Function objects that stop a run gracefullysimpleFunctionObjects now has a function object writeAndEndFieldRangethat stops a run (and writes the last time) if a field is outside a specifiedrange.

A similar function object writeAndEndSwakExpression is in thesimpleSwakFunctionObjects that stops if a swak-expression evaluatesto true. writeAndEndPython does the same in pythonIntegration.

Note: after the run is written one more timestep is calculated (thisseems to be due to the fact that FOs are calculated at the start ofa timestep). Also there are issues if the next timestep is a scheduledwrite-time

• Function-objects to load thermophysical and turbulence modelsNew function objects in the simpleFunctionObjects allow the loadingof such models for solvers/utilities that don’t have such models butwhere some functionObject (for instance) needs such a model to be inmemory

• Function-objects that create and evolve clouds of lagrangian particlesAdded as part of the simpleFunctionObjects some functionObjectsthat create a cloud of particles and evolve them at every timestep.

The appropriate fields needed by every cloud have to be present (eithersupplied by the solver or via a functionObject)

43

Page 44: README for swak4Foam - OpenFOAMWiki · README for swak4Foam Bernhard F.W. Gschaider October 18, 2012 Contents 1 Description 1 2 About this document 1 2.1 Scope ...

• Function-object manipulatePatchField to manipulate the field onpatchesThis function objects allows the manipulation of patch fields likemanipulateField allows the manipulation of the internal field. Onlyuse if desperate

• Delayed variables to simulate responsesIf a variable is declared in the delayedVariables-list then its behaviorchanges: when a value is assigned to that variable then the value isnot immediately used but after the time specified in delay. Valuesare stored at intervals storeInterval and interpolated linearly. If nostored data is available then the value of the expression startupValue

is used.

This feature allows the modeling of boundary conditions that reactwith a delay to flow conditions

• Allow preloading of fields in funkySetFields

To satisfy the requirements of certain boundary conditions funkySetFieldsnow allows the preloading of fields. This is only available in dic-tionary mode with the preloadFields-entry (for each entry in theexpressions-list separately)

9.9.5 Infrastructure

• Allwmake creates symbolic links in swakFiniteArea

The links to mybison and myflex are missing when the sources aredownloaded as a tarball. The Allwmake-script now creates these linksif they are missing

• Reformatting of the parser sourcesSources of the parsers have been completely reformatted to make themmore readable and maintainable

• Move non-parser sources in swak4FoamParsers into sub-directoriesMake the directory a little bit cleaner

44