Skip to content

Latest commit

 

History

History
1128 lines (1090 loc) · 58.2 KB

ReleaseNotes

File metadata and controls

1128 lines (1090 loc) · 58.2 KB

Version 0.6.4 - 2014-11-24

Requirements

The only requirement is a python-installation. The main testing and development has been done with 2.7 and 2.6. Python 2.5 should work but not for all utilities. Currently 2.6, 2.7 and 3.4 are used during development.

Certain functionalities need special Python-libraries. The main one is numpy for plotting. Other libraries that might be of interest are matplotlib, pandas and IPython. For pyFoamDisplayBlockmesh.py the libraries PyQt4 and vtk are needed. Other libraries are tested for and reported by pyFoamVersion.py but not required (only install if you’re sure that you need it)

Future changes

Redundant utilities pyFoamJoinCSV.py and pyFoamConvertToCSV.py unified

These two utilities are almost indistinguishable and will be unified into one

Major changes

Multi-line regular expressions in customRegexp

If in customRegexp an expr is found with \n then this expression is matched over multiple consecutive lines. Types like dynamic work as usual.

This makes it possible to match for instance the output of the forces-function objects

Enhancement of pyFoamPrepare.py

The utility which was introduced in the last version is becomong more usable and will be central to all things that set up the case (for instance a special ClusterJob)

Enhancements of the CSV-utilities

These utilities are now more flexible and allow writing and reading of Excel-files too

Environment variable PYFOAM_SITE_DIR and PYFOAM_DIR

Both variables are not necessary but PYFOAM_SITE_DIR allows consistent insertion of site-specific libraries and utilities.

PYFOAM_DIR is set by some Foam-distributions and tested for by pyFoamVersion.py. It is supposed to point to the currents PyFoam-installation.

PYFOAM_SITE_DIR points to a directory with site-specific scripts and configurations. The sub-directories supported (and thested py pyFoamVersion.py) are

bin
directory with scripts. It has to be added to the PATH outside of PyFoam (for instance in the .bashrc)
etc
Optional directory which is searched for configuration files. Priority is below the user settings and above the global settings
lib
Optional directory to allow mixing in site-specific library files. Imported as PyFoam.Site: For instance if a file Foo.py is present in lib it can be imported as PyFoam.Site.Foo. This directory does not have to be (in fact: it shouldn’t) added to PYTHONPATH

Purpose of PYFOAM_SITE_DIR is to allow administrators to provide site-wide scripts and settings for all users on a site

Incompatibilities

Option --silent removed from pyFoamPrepareCase.py

Option has been renamed to --no-complain

Keys in RunDatabase with column-names that contain upper-case letters change

SQLite does not support case-sensitive column-names (s_max and S_max are the same). To change this the upper case letters in the column names are replaced by an underscore and the letter (S_max becomes _s__max)

This means that old databases might not be read correctly

Change in unique variable names in pyFoamConvertToCSV.py

The algorithm to make variable names unique has changed (basically it uses the part of the filenames that differ) and scripts relying on these names might fail

PyFoam.IPython-module renamed to PyFoam.IPythonHelpers

The name of the module crashed in certain instances (especially unit-testing) with the regular IPython-library. To avoid these crashes it has been renamed to IPythonHelpers. This raises two potential problems:

  • scripts that import the module have to be adapted to the new name
  • IPython-notebooks created with pyFoamIPythonNotebook.py have two imports pointing to this module. These notebooks have to be adapted to be usable again

Bugfixes

Templates in pyFoamPrepareCase.py did not keep permissions

This was a problem for script-templates which were not executable any more. Fixed

pyFoamComparator.py failed due to circular dependency

This has been fixed by adding an import in BasicRunner.py

pyFoamDumpRunDatabaseToCSV.py fails if Pandas-data is requested

This is now fixed

sort for list broke code on Python 3

Some calls for sort still used the cmp-parameter which does not exist for Python3 anymore. These calls have been replaced with key and reverse

Changing the OF-version does not work in Python 3

Because the output of subprocess is now binary instead of a regular string. Fixed

addData in PyFoamDataFrame extrapolates for invalid values

This was due to incorrect use of the interpolate-method

--keep-last did not work for pyFoamClearCase.py and parallel cases

This was because there was a problem in the library code and the utility did not consider the parallel time-steps. Fixed

pyFoamDumpRunDatabaseToCSV.py does not add basic run information

Basic run information was not added to the file. Now it is with the prefix runInfo//

Restore of FileBasisBackup did not work

The logic for checking whether a file was “backupable” was wrong. This affected the proper restore of files with utilities for instance for --write-all

Remove circular dependency in DataStructures

According to the bug http://sourceforge.net/p/openfoam-extend/ticketspyfoam/219/ it was not possible to import DataStructures because of a circular dependency with FoamFileGenerator. Fixed by moving an import to the back of the file

New features/Utilities

pyFoamRunParameterVariation.py

This utility takes a template case and a file specifying the parameter variation and creates cases with the pyFoamPrepareCase.py-engine, runs a solver on these cases and collects the data into a database. The database can then be extracted with pyFoamDumpRunDatabaseToCSV.py

pyFoamBinarySize.py

Calculates the size of the binaries in an OpenFOAM-installation separated by compile-option

pyFoamBlockMeshRewrite.py

Assists the user in rewriting the blockMeshDict by doing simple, but error-prone transformations. Assumes “sensible” formatting: one block/vertex etc per line.

Sub-commands are:

refine
refines mesh by multiplying cell numbers in the blocks
number
Adds comments with the vertex numbers. Should help the user when editing/modifying the mesh
stripNumber
Remove the comments added by number
mergeVertices
Adds vertices from other blockMeshes that are not present in the current blockMesh
renumberVertices
Take another blockMeshDict, copy over the vertices-section of that mesh and rewrite blocks and patches so that they conform to these vertices. The original vertices have to be a sub-set of the vertices in the other mesh
normalizePatches
Rotates patches so that the lowest number is in front

Enhancements to Utilities

pyFoamChangeBoundaryType.py allows setting additional values

The option --additional-values allows specifying a dictionary with additional values for the boundary (stuff that is needed by mappedWall etc)

pyFoamPrepareCase.py now has OF-version and fork as defined variables

This allows to write case-templates that can distinguish between different OF-versions

pyFoamPrepareCase.py now allows “overloading” another directory

Before doing anything else the contents of different directories are copied into the current case. This allows for instance to use tutorial cases as the basis for a case

pyFoamIPythonNotebook.py adds improvements to the notebook

Additional code added to the generated notebook:

  • Code to change the default size of the plots
  • Distribution-directories in subdirectories distributions (generated by some swak-function objects) added

pyFoamListCases.py more tolerant to faulty controlDict

If the controlDict is acceptable to OpenFOAM but syntactically incorrect for PyFoam (for instance because of a missing semicolon) the utility does not fail anymore (but no data is collected for that case).

pyFoamDumpConfiguration.py prints sections and keys alphabetically

This should make it easier to find items

pyFoamJoinCSV.py and pyFoamConvertToCSV.py read and write Excel-files

Both utilities now allow writing Excel-files

In addition to regular text files the first sheet from xls-files can be read

Flexible variable filtering in pyFoamJoinCSV.py and pyFoamConvertToCSV.py

Now it is possible to filter for regular expressions

The functionality of the two utilities now is very similar and it is possible that one of them will be discontinued

Columns in pyFoamJoinCSV.py and pyFoamConvertToCSV.py can be recalculated

The two utilities now can add columns or recalculate columns based on the existing column values

Testing for Numeric removed from pyFoamVersion.py

Testing for the library Numeric library removed as it is no longer supported as a fallback for numpy. Test also removed from setup.py

Enhancements to the Library

Subclass of ClusterJob that support PrepareCase

The class PrepareCaseJob supports cases that are set up with pyFoamPrepareCase.py. Additional parameters to the constructor are

  • the name of the parameter-file
  • a list with the parameters. The list is composed of name/value-pairs

Subclass of ClusterJob that support RunParameterVariation

The class VariationCaseJob supports cases that are set up with pyFoamRunParameterVariation.py. Additional parameters to the constructor are

  • the name of the parameter-file
  • the name of the variations-file

execute in PyFoam/Utilities fails if script is not executable

The function checks if the file exists and is not executable. The program fails in that case

foamVersion uses a separate wrapper class for tuple

This ensures that it is printed in a form that is valid in OF-dictionaries

Move calculation of disk usage to Utilities

This has until now only been used in ListCases but moved to a separate method/function diskUsage in the Utilities-module

Enhancement of --help

Added the possibility to have an epilog and usage examples with the epilog and examples-keyword arguments for applications.

These and descriptions now have the possibility for line-breaks: if two line-breaks are encountered in the text a new paragraph is created

which-routine in Utitlities uses native Python-routine

For Python-version where shutil has a which-function this is used instead of calling an external program

FileBasis now allows file handles instead of the filename

This currently only works for reading, Backups, zipping etc won’t work but it makes algorithms more flexible

BlockMesh doesn’t force writing to file anymore

Instead content is stored in memory. Old behaviour is the default to preserve compatibility with old scripts

Additional methods for BlockMesh-class

numberVertices
Adds comments with the vertex numbers to the vertices

LineReader allows keeping spaces on left

Previous behaviour was stripping all spaces from the lines. Now the left hand spaces can be ket. Old behaviour is still default for compatibility

TemplateFile now allows writing of assignment-results in file

This allows faster debugging of template-files. This can be enabled with a switch in the utilities using templates

SolverJob now allows passing of parameters to the solver

And additional parameter solverArgs will now be passed to the solver (if the solver accepts arguments)

SpreadsheetData now allows reading from an Excel file

During construction if an Excel-file is specified and the xlrd-library and pandas are installed then the first sheet in the file is read

SpreadsheetData allows recalculating columns

Columns can be recalculated using expressions. This includes other data items. Currently present column names are available as variables. There is also a variable data that can be subscripted for items that are not valid variable names. A variable this points to the item to be recalculated

Known bugs

Timelines not forgotten for multiple runner calls

This manifests with pyFoamRunParameterVariation.py. The custom timelines are still kept in memory. Not a problem. Just annoying

Version 0.6.3 - 2014-06-23

Requirements

The only requirement is a python-installation. The main testing and development has been done with 2.7 and 2.6. Python 2.5 should work but not for all utilities. Unit tests run on Python 3.4 but it is currently not used in a production environment (reports of success or failure most welcome)

Certain functionalities need special Python-libraries. The main one is numpy for plotting. Other libraries that might be of interest are matplotlib, pandas and IPython. For pyFoamDisplayBlockmesh.py the libraries PyQt4 and vtk are needed. Other libraries are tested for and reported by pyFoamVersion.py but not required (only install if you’re sure that you need it)

Major changes

Version changing supports forks of OpenFOAM

Now pyFoam supports different versions of OpenFOAM for switching. Out of the box openfoam and extend are supported. If only the version number is specified (for instance by --foamVersion=1.7.x) and such a version exists only for one fork it is correctly expanded with the correct fork( in the example with openfoam-1.7.x). If more than one fork has the same version then the fork name has to be specified as well

Note: additional forks can be easily specified with the configurations. In section OpenFOAM the parameter forks has to be extended. For each new fork a dirpatterns and installation-parameter has to be specified

Incompatibilities

Change of command interface of pyFoamSTLUtility.py

The selection of what is to be done is now selected by subcommands instead of options. This will break scripts using this

If 0.org is present pyFoamCloneCase.py and pyFoamPackCase.py ignore 0

The reason is that the utilities assume that this directory is produced from 0.org

Bugfixes

PlotWatcher has long times between updates if pickling takes long

The reason was that it used the same throttling that made sense for the PlotRunner. Fixed

pyFoamPVSnapshot.py fails for newer paraview-versions

Reason is that the class vtkPythonStdStreamCaptureHelper does not support isatty

SamplePlot failed when valueNames are unspecified

Reported in https://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=208 and fixed

pyFoamTimelinePlot.py failed Numpy/Pandas output of vector fields

Vector fields only were added to the data fields if they were the first in the list. Fixed

alternateAxis ignored for slave

This is now fixed. The alternate values have to be specified in the master (specifying in the slave gives an error)

pyFoamCaseReport.py more stable for binary boundary-files

Usually these files are ascii (even if the header says binary). In some cases the parsing failed for these. Fixed by enforcing reading as ascii. Can be switched off

SpreadsheetData returns data which breaks certain Pandas-operations

The reason was that if there were duplicate times in the table the index was non-unique which certain Pandas-operations don’t appreciate. Solved by dropping duplicate times. Can be switched off

pyFoamCloneCase.py added duplicates to the archive

If things are specified twice they were added twice. Now it is checked whether the item already exists in the tar-file before adding them

nonuniform of length 3 not correctly printed

The reason was that this was interpreted as a vector and the numeric prefix was removed. Reported at http://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=218

Fixed by introducing an extra parameter to FoamFileGenerator

New features/Utilities

pyFoamPrepareCase.py for case preparation

This utility aims to reduce the need for boilerplate scripts to set up cases. The steps it executes are

  1. Clear old data from the case (including processor directories)
  2. if a folder 0.org is present remove the 0 folder too
  3. go through all folders and for every found file with the extension .template do template expansion using the pyratemp-engine
  4. create a mesh (either by using a script or if a blockMeshDict is present by running blockMesh. If none of these is present assume that there is a valid mesh present)
  5. copy every foo.org that is found to to foo (recursively if directory)
  6. do template replacement for every .postTemplate
  7. execute another preparation script

pyFoamIPythonNotebook.py for generating and manipulating IPython-notebooks

This utility creates and manipulates IPython-notebooks for analyzing OpenFOAM cases. It has a number of subcommands:

create
this is the main command. All other commands assume that the notebooks they work with were created with this.

The utility looks at the case specified and creates a notebook that has the capabilities to quickly build a report about the case:

  • reporting general properties of the case. This

basically is the capability of the pyFoamCaseReport.py-utility

  • It searches for data that can be visualized by pyFoamTimelinePlot.py or pyFoamSamplePlot.py and generates selectors that allow the user to select which data to import. The selectors import the data as Pandas-=DataFrames= and create the commands necessary to do this. It is recommended to erase the selector afterwards
  • Selectors for pickled case data and pickled plot generated by PyFoam
  • Capability to store read data in the notebook file. This feature is experimental and has performance issues for medium to large datasets

The created notebook can be executed but needs to be edited to be useful

clear
removes selected cells (but only cells created with create) or output from the notebook.
info
prints information about the notebook
copy
copies notebook to a different case and rewrites it so that data is read from that case

Recommended way of working with this utility is

  1. Create notebook with utility
  2. Edit it to contain standardized evaluations
  3. Copy it over to another, similar case

Additional sub-module PyFoam.IPython

The purpose of this submodule is to support pyFoamIPythonNotebook.py. It has the classes

Notebook
read a file and interpret it as an IPython-notebook. Do manipulations on this notebook
PermanentStorage
Implements permanent storage in an IPython-notebook. Only works inside a notebook and allows only one instance at once. Passing the data from the notebook (through JavaScript) to Python currently is a performance bottleneck
Case
Convenience object that exposes the functionality of some of the PyFoam-utilities through a simple interface

Additional sub-module PyFoam.Wrappers

Wraps popular Python-libraries to add functions that make it easier to work with OpenFOAM-data.

Currently only one Wrapper is implemented:

Pandas-wrappers

This provides PyFoamDataFrame as a wrapper for DataFrame. The functionality added is

addData
Conveniently add new data from different Series, DataFrames. It is assumed that the index is the same property (time or for samples the distance) but with a different resolution. The indexes are joined and missing data is interpolated
integrate, validLength, weightedAverage
uses the index as the $x$-axis and calculates these properties for a Series. validLength is the extent on which data is defined (weightedAverage is basically integrate divided by validLength). For integrate the trapezoid-rule is used
describe
adds the three above quantities to the regular describe-command

Enhancements to Utilities

pyFoamSampleplot has option to use index instead of time in filenames

The option -index-instead-of-filename switches this on. This makes it easier to generate movies from the files

pyFoamListCases.py Allows addition of custom data

The option --custom-data now allows the specification of custom data items. These are read from the pickledData-files and displayed in the table like regular data items

Switch compiler versions

Now all utilities allow switching the compiler version (for instance from Gcc47 to Gcc48). The relevant options are --force-system-compiler, --force-openfoam-compiler and --force-compiler

pyFoamVersion.py reports the installed versions better

Now the location of the installations is reported as well

Offscreen rendering can be switched off in pyFoamPVSnapshot.py

This is a workaround where the writer produces a segmentation fault

Write 3D-data in pyFoamPVSnapshot.py

In addition to writing out bitmaps allows writing out 3D-data (for importing into other applications). Sources can be selected by name

Added capabilities to pyFoamSTLUtility

The utility can now also:

  • erase selected patches
  • merge selected patches into one

pyFoamDecomposer.py switches off function objects

This now automatically happens for OF-versions that support it (2.0 and greater). They can be switched on again

pyFoamCloneCase.py clones more stuff

Files that are assumed to be used by pyFoamPrepareCase.py are automatically added to the clone. This includes all files (and directories) with the extensions .sh, .template and .org. Also IPython notebooks (extension .ipynb are added)

Enhancements to the Library

BasicRunner now can print the command line that is actually used

This should help with diagnosing problems with MPI etc.

Can be switched on in some utilities with --echo-command-prefix

ClusterJob now can live without a machinefile

Using the machine-file now can be switched off for job-schedulers with a tight integration

Enhanced treatment of symlinks during cloning

If a item in the case itself is a symlink then it used to be a copy of the file the symlink is pointing to. Now it is created as a symlink to the target the original symlink. If the --follow-symlink-option is used the old behaviour is used (copying). In this case the option noForceSymlink in the Cloning-section of the configuration can be used to change this behaviour for selected files

AnalyzedCommon clears the analyzed-directory

The directory is cleared if it exits from a previous run.

TimelineDirectory is more tolerant

Used to fail if incompatible data types were used. Now ignores them

Possibility of a subcommand-interface for utilities

The subclass SubclassFoamOptionParser now allows the parsing of subclasses. The base class for utilities PyFoamApplication now supports this as an option. As an example this is implemented in pyFoamSTLUtilities.py

STLUtility accepts file-handles

The class checks whether arguments are filehandles and in this case doesn’t try to open a file for reading or writing but uses the handle

addClone in SolutionDirectory accepts glob patterns

If no file matching the name is found it is assumed that this is a glob-pattern and all matching files are added. This affects all utilities that use that method (especially pyFoamCloneCase.py)

execute in Utilities allows specification of working directory and echoing of output

This method now allows the specification of a working directory. Before executing the command the method changes to the working directory. Afterwards it changes back to the regular working directory.

There is also an option echo that immediately prints the output to the screen

rmtree and copytree more tolerant

rmtree now also works if the “tree” is a file.

copytree now has a parameter force that allows removing the destination directory if it exists

Enhanced support for booleans in the parser

Strings that are usually interpreted as boolean in OF-dictionaries (for instance on, yes, …) are now stored as a special type that allows treating them like ‘real’ booleans.

For instance an expression test no; in a dictionary now allows things like if d['test']: in the script

Application classes now allow specifying options as keyword parameters

Until now the options to be used had to be specified as a list of string modeled on the way the command line looked like. This is still possible. In addition it is now possible to specify these things as keyword parameters on the command line. Rudimentary type checking is done. The names of the parameters are generated from the command line options: the - are removed and the words are converted to CamelCase. So for instance --list-custom-Regexp = becomes =listCustomRegexp. Also for switches like these a boolean value has to be passed. So the correct usage in a call would be listCustomRegexp=True.

SolutionDirector now can classify directories in the postProcessing-directory

A number of properties has been added that list data generated by function objects:

timelines
timeline data (like propes) that can be visualized by pyFoamTimelinePlot.py
samples
data from set (assuming it is in raw-format) that can be processed by pyFoamSamplePlot.py
surfaces
data from surface (assumes VTK-format) that can be used by pyFoamSurfacePlot.py
distributions
special cases of sample with distribution data

These properties only list the subdirectories of the case with that data

Additional properties are

pickledData
a list of pickled data files that are found
pickledPlots
list of found pickled plots

These lists are sorted in descending temporal order (newest first)

pyFoamSamplePlot.py now more flexible for distributions

Tries to determine the names of the values from the first line in the files

DictProxy now has a dict-like update-method

This also allows enforcing string values

FoamFileGenerator automatically quotes strings

If strings are unquoted but contain characters that make it illegal as a word then the string is quoted before output

Children of FileBasis now can be used with the with-statement

This mainly concerns ParsedParameterFile

Version 0.6.2 - 2013-11-03

Major changes

Use of pandas-library

Starting with this version the pandas-library is used for data-analysis. When possible and appropriate classes return pandas-objects. Currently these are:

  • CSVCollection. With a call-operator this class returns the collected data as a DataFrame of the collected data
  • SpreadsheetData now has methods to return Series and DataFrame objects

It is not necessary to install pandas if these classes are not used (and even then most of their functionality works)

Incompatibilities

Different separator for databases in CSV-files

The class RunDatabase (and therefor also the utility pyFoamDumpRunDatabaseToCSV.py) now write as a separator for data from sub-tables a // instead of the space. This especially means that scripts that rely on a data-item foo in analyzed might break because this is now called analyzed//foo instead of analyzed foo. On the other hand this makes the names more consistent and easier to parse as // is the saperator for other levels of dictionaries

Change of independent variable name in sample data

Instead of col0 this is now coord. This could cause problems with scripts that use that column name in the resulting SpreadsheetData-object

Bugfixes

pyFoamPackCase.py does not handle symbolic links correctly

Symbolic links were copied as is and did not work correctly afterwards. This is fixed. If the symbolic link is an absolute path or points outside the case directory it is replaced with the file it points to. Otherwise it is preserved as a symbolic link

pyFoamPotentialRunner.py not working with OpenFOAM 2.0 or newer

These versions require an entry potentialFlow in the fvSolution-file instead of the old SIMPLE

pyFoamListCase.py fails with controlDict that use preprocessing

Fixed by first trying to read that with preprocessing. Without if that fails

Cloning fails in symlink-mode if files are specified twice

Now using a set instead of a list makes sure that no file is cloned twice

Utilities

pyFoamPotentialRunner.py now allows removing of functions and libs

The utility now allows removing these entries in case that they don’t work with potentialFoam

The Runner-utilities now have more options for clearing

Some of the options of pyFoamClearCase.py for clearing cases (for instance specifying additional files) have been ported to the Runner-utilities. Also is the postProcessing-directory removed by default

Library

SolutionDirectory and TimeDirectory are more tolerant

If there are field files and their zipped counterpart than instead of an error a warning can be given

ClusterJob now handles template files

A new method templateFile gets the name of a file which is constructed from a template of the same name plus the extension .template

Additional parameters in ClusterJob

The method additionalParameters can return a dictionary with additional parameters

Custom data in directory easier accessible

In the written data in the sub-dictionary analyzed there is now a subdictionary Custom with the values of the custom expressions with the prefix CustomXX_ removed. This means that values that were available as

data['Custom02_velCheck']['min']

are now available as

data['Custom']['velCheck']['min']

The advantage is that the number part which was dependent on the order the expressions were specified is now no longer necessary (this should make scripts more stable)

The old notation is still available but deprecated

SolverJob now allows compression of output

The parameter solverLogCompress compresses the log-file while writing it to disc. Attention: This may lead to corrupted log-files if the run crashes

PyFoamApplication-class now allows quick access to data

The dictionary returned by getData() now allows access to all the elements as attributes.

New features/Utilities

Post-run hook that sends mail at the end of run

The hook-module MailToAddress sends a mail at the end of a run. Prerequisite is an SMTP-Server that doesn’t need authentication

New utility pyFoamCompressCases.py

This utility goes through cases and compresses single files. The cases can be searched recursively to.

Purpose of this utility is to shrink cases where writeCompression was not turned on during the run

Paraview-module to read additional data

A new module PyFoam.Paraview.Data reads additional data usually written by OpenFOAM. These are converted to vtkArray using the following functions and can be used in Programmable filters:

setSampleData
reads the data from sampled sets
setTimelineData
reads data from a timeline directory
setPlotData
reads pickled plot data using RedoPlot

Enhancements

pyFoamRedoPlot.py can plot in XKCD-mode

When used with the option --implementation=xkcd and version of matplotlib that supports it is installed then plots are done in the style of the webcomics http://xkcd.com

pyFoamListCases.py now displays disk usage in human readable form

If the disk usage of the cases is calculated then it is displayed in human readable form (as KB, MB, GB or TB) for sizes larger than one Kilobyte

pyFoamClearCase.py more flexible in selection of data to be removed

Options to be more flexible in removing data are added:

keep-interval
keep timesteps at a specified interval. For instance --keep-interval=0.1 will keep times like $1$, $1.1$ etc but remove $1.05$
keep-parallel
this will not remove any times in the processor-directories. Also are things like keep-last now honored for processor directories
remove-analyzed
Remove the directories with the analyzed data too. Old behavior was to remove them. Now they are kept by default

pyFoamFromTemplate.py automatically chooses template and default values

If an output file foo is specified and no template then the utility looks for a file foo.template as a template.

If a file foo.defaults is present then this file is read and used as default parameter values. Other specifications override these defaults

pyFoamDumpRunDatabaseToCSV.py can disable standard-fields

Additional option --disable-run-data

pyFoamDumpRunDatabaseToCSV.py prints pandas-object

With the -pandas-print-option a DataFrame is generated and printed

Better debugging with ipdb

If the ipdb-package (basically pdb with IPython-additions) is installed then it is used. This gives additions like tab-completion

Interactive shell after execution for utilities

The option --interactive-after-execution drops the user to an interactive shell where the namespace can be inspected. If present IPython will be used, otherwise the regular shell is used

Utilities that read quantitative data convert to pandas-data and/or numpy

This is mainly to be used on the interactive shell to do further analysis or write this data out. The utilities are:

pyDumpRunDatabaseToCSV.py
add an item dump with the whole data as a DataFrame
pyFoamTimelinePlot.py
add element series with all the data as Series and dataFrame with the same data as a DataFrame
pyFoamSamplePlot.py
Like pyFoamTimelinePlot.py
pyFoamRedoPlot.py
Now can get series and the whole plot data as pandas-objects

Utilities that read quantitative data write Excel files

The utilities pyDumpRunDatabaseToCSV.py, pyFoamTimelinePlot.py, pyFoamSamplePlot.py and pyFoamRedoPlot.py now have options to write Excel-files

Specify additional settings for GnuPlot in customRegexp

If an item in customRegexp has an item gnuplotCommands then it is assumed that this is a list of strings which are executed before the first plotting. For instance

          gnuplotCommands (
             "set format y '%.2e'"
           );

changes the number format on the y-axis

More flexible data specification for pyFoamSamplePlot.py

Instead of determining the names of the fields and lines form the filenames it is now also possible to specify them through options.

The option --is-distribution is a shorthand that sets these options for distribution files

pyFoamSamplePlot.py now allows specification of x-range

The range of the x-axis of the plots can either be set by automatically scaling to the domains of all the data sets with --scale-domain or by specifying them with --domain-minimum or --domain-maximum.

These domains are set for all plots

Version 0.6.1 - 2013-05-24

Major changes

Bugfixes

Restoring of controlDict after write

When activating an on-demand write the constrolDict was not restored because the output-line about the file being read was not recognized (due to a change in the output in recent OF-versions). Now a number of different formats is recognized

Custom-plot type slave not working if no master defined

That plot-type needs a master. Fixed to fail if none is defined

-list-only did not correctly parse lists with a numeric prefix

This did affect all utilities that use that option and also calls with listOnly to the library class

Utilities

pyFoamBuildHelper.py now allow more than one action

If multiple actions like --update and --build are specified they are executed in a sensible order (update before build etc)

Utilities warn if OpenFOAM-version is unset

If the environment variable that determines the OpenFOAM-version is unset a warning is issued by the utilities

pyFoamUpgradeDictionariesTo20.py allows single files

If single file is specified then the action to transform it has can be specified

pyFoamUpgradeDictionariesTo20.py transforms reaction-schemes

Now knows how to transform “old” reaction files (where the reactions-entry was a list) to the new format (where it is a dictionary). Only a limited number of reaction types is supported.

pyFoamUpgradeDictionariesTo20.py transforms thermophysical data

Now the old form of thermophysical data (lists) is transformed into the new dictionary-form

pyFoamCloneCase now allows creating directory that symlinks to the original

Now with the option --symlink-mode instead of copying the directories from the original new directories art created and populated with symlinks to the files in the original. The depth until which no symlinks to directories are created can be specified. This allows the clone to share the configuration files with the original

pyFoamClearCase.py now removes postProcessing and allows removal of additional files

The directory postProcessing is now automatically removed (can be switched off with --keep-postprocessing). Also with the --additional-option patterns with additional files to remove can be specified.

Improvements to pyFoamVersion.py

  • Now reports the location of the python-executable
  • Reports locations of used libraries

Additional files automatically cloned

The files Allrun, Allclean and 0.org are automatically added during cloning as these are often used by the standard-utilities

pyFoamDisplayBlockMesh.py uses the same options for template format as pyFoamFromTemplate.py

This makes sure that templates are handled consistently and also allows different delimiters in the blockMeshDict.template

Library

Improvements in syntax of ParsedParameterFile

  • Now the new relative scoping that was introduced in OF 2.2 is supported

Utilities-class now function to find files matching a pattern

Added a function find that approxiamtes the find-command

VCS ignores more files

Some more patterns have been added that will be ignored in a VSC-controlled case. All of them concerning files that PyFoam creates during operation

New features/Utilities

New Utility pyFoamSymlinkToFile.py

This utility replaces a symlink with a copy of the file/directories it points to. To be used after a pyFoamCloneCase.py in --symlink-mode

Version 0.6.0 - 2013-03-14

Major changes

Adaption to work with Python3

Sources are adapted so that PyFoam works with Python3 too. This breaks support for Python 2.4 and earlier (possibly also Python 2.5)

Some of the Libraries in PyFoam.ThirdParty had to be adapted to work with Python3:

Gnuplot.py
The original version 1.8 is quite old. It was adapted with the help of the six-library (see below) to work with Python2 and Python3 (inspired by [https://github.com/oblalex/gnuplot.py-py3k/commits/master] which is a pure port to Python3 without backwards compatibility)

New ThirdParty-Libraries

six
Library that helps supporting Python 2 and Python 3 in the same source code. Currently version 1.2 from [https://bitbucket.org/gutworth/six] is used
pyratemp
Templating library to support the new templating format. Version 0.2.0 from [http://www.simple-is-better.org/template/pyratemp.html] is used

Porting to Windows

Port to allow running PyFoam on Windows was done by Bruno Santos of blueCAPE ([email protected])

Patch was originally posted at http://sourceforge.net/apps/mantisbt/openfoam-extend/view.php?id=166

Note: many of PyFoam’s features are not yet fully functional on Windows.

Experimental port to pypy

Sources are executed in pypy but it seems there are problems with numpy and also with code like for l in open(f).readlines()

Third-Party

Upgraded ply to 3.4

This brings virtually no changes. README with copyright information has been added

Infrastructure

Parameters can’t be modified in CTestRun after initialization

This should help to avoid side-effects

Treat timeouts in the MetaServer right

Due to a previous workaround timeouts when collecting information about new machines was not treated correctly

Add execute-method to ClusterJob

This allows the execution of a shell-script in the directory of the case

Add possibility to run specific modules before or after the solver

These modules are found in PyFoam.Infrastructure.RunHooks. Two concrete implementations:

PrintMessageHook
to print a text to the terminal
SendToWebservice
encode an URL and send it to a webservice (example for pushover.net added)

Hooks are automatically instantiated from the configuration data (examples are hardcoded))

Parameters added to the info about the run

The Runner-classes now have a parameter parameters. This data (usually it would be a dictionary) is added verbatim to the run info.

Most runner applications now have the possibility to add this info.

Purpose of this facility is to identify different runs in the database better.

Parameter handling in ClusterJob extended

Parameter values are now handed to the actual job. Also a dictionary with parameters can be handed to the constructor and will be used in the relevant callbacks

Run data written alongside PickledPlots

During the run whenever the PickledPlots-file is written a file pickledUnfinishedData gets written. This has the current solver data and is similar to pickledData.

Also a file pickledStartData gets written that has the data that is available at the start of the run.

BasicRunner collects error and warning texts

The runner collects

  • at every warning the next 20 lines of the output until a total of 500 lines is reached (this avoids filling disk and memory if the solver produces too many warnings)
  • All output from an error message until the end

And stores them in the application data

Library

TemplateFile now uses pyratemp

The class TempalteFile now uses an enhanced templating engine. The old implementation is in the class TemplateFileOldFormat

Clearer error message in Application-classes

If used as classes (not as utilities) these classes print the class name instead of the calling utilities name

Output is only colored if it goes to the terminal

Error and warning messages don’t decorate the output if it goes to files or other non-terminal streams

error-method of application classes now raises an exception

An exception is now raised by self.error(). This makes it easier to handle such errors if the application class is used. The exception is passed up until there is a “real” application

ParsedParameterFile now knows how to handle binary files

When the format of a file is binary lists with a length prefix are being read as binary blobs.

For reading the blobs a simple heuristics is used: a multiple of the length in bytes is read. If the next character is a ) and the characters after that are a certain combination of characters (newlines and ;) then it is assumed that the blob has ended. This may fail on certain occasions:

  • if the combination of characters appears at these places
  • if the objects inside the binary data are of different sizes

It would be hard to work around these restrictions without reprogramming the full functionality of OpenFOAM

LabledReSTTable for more flexible table generation

New class in the RestructuredTextHelper allows more flexible generation of tables. Items are added with column and row and if these don’t exist in the first row/column the table is extended appropriately

Plotting classes now allow setting of xlabel

This is implemented for Gnuplot and Matplotlib. Default for the label on the x-Axis is now “Time [s]”

Utilities

pyFoamFromTemplate.py with new templating engine

The utility can now use the pyratemp-templating engine which allows templates with loops, conditions and other fancy stuff

pyFoamSamplePlot.py allows using the reference data as basis for comparison

Instead of using the x-values from the original data the y-values of the reference data can be used for comparing (with the --use-reference-option)

Same for pyFoamTimelimePlot.py

Scaling and offsets are now used in plots of pyFoamSamplePlot.py

If scales not equal to $1$ and offsets not equal to $0$ are specified they are used in the gnuplot-output

pyFoamPrintData2DStatistics.py prints relative average error

With the --relative-average-error-option

Enhancements to pyFoamVersion.py

  • More tolerant if no library was found
  • Reports the location of the PyFoam-Library
  • Checks whether utility version is consistent the library found

pyFoamRunner.py allows hooks

Hooks can be added at the start and the end of a run

pyFoamRedoPlots.py supports range for plots

Added -end and -start-option to select a range that should be plotted.

Currently not working with the Matplotlib-implementation (only gnuplot)

pyFoamDisplayBlockMesh.py no supports templates

If a file with values is specified then the utility assumes you’re editing a template file and will evaluate it before displaying it

pyFoamCaseReport.py is tolerant towards binary files

New switch that makes the parser treat files that are declared binary in the header as if they were ascii

pyFoamSamplePlot.py and pyFoamTimelinePlot.py raise error if no plots are generated

This makes it easier to catch faulty specifications (or empty timeline-files)

pyFoamSurfacePlot.py can wait for a key

An option --wait has been added that makes the utility wait before displaying the next picture

pyFoamEchoDictionary.py is more flexible with binary files

Switch allows forcing it to read a binary File as an ASCII

All utilities now have a switch that starts the debugger even with syntax-errors

Previously the option --interactive-debug only started the debugger if the error was no syntax error. This is still the default behavior, but can be overruled

Utilities now can be killed with USR1 and will give a traceback

The option --catch-USR1-signal now installs a signal-handler that prints a traceback and finishes the run. If the interactive debugger is enabled then it goes to the debugger-shell.

Option --keyboard-interrupt-trace triggers the same behaviour for keyboard interrupts with <Ctrl>-C

Switch to switch on all debug options

For the purpose of developing a switch --i-am-a-developer has been added.

Plotting utilities now allow specification of x-Axis label

With the option xlabel in the customRegexp-file the label on the x-axis of the plot can be changed. Setting ylabel and y2label (for the secondary axis) was already possible

Metrics and compare for pyFoamTimelinePlot.py and pyFoamSamplePlot.py support time ranges

Now the options --min-time and --max-time are supported by --metrics and --compare

pyFoamDisplayBlockMesh.py allows graphical selection of blocks and patches

New addition by Marc Immer allows the graphical selection of blocks and patches and adds them to the blockMeshDict

pyFoamCloneCase.py and pyFoamPackCase.py accept additional parameters

The file LocalConfigPyFoam is read by these utilities and if there is a parameter addItem in the section Cloning defined then these files are cloned/packed automatically (no user specification required)

pyFoamListCases.py now calculates estimated end-times

Additional option to print the estimated end times. These can be wrong if the case did not start from the startTime in the controlDict.

Also now allows printing the end and the start-time according to the controlDict

New features

Different “phases” for multi-region solvers

Plots of type phase in customRegexp don’t actually plot anything. The set a phase-name that is used for subsequent values (for instance to distinguish the different residuals)

pyFoamChangeBoundaryType.py allows selection of region and time

Options --region and --time-directory added that allow selecting different boundary-files

New class for storing case data in a sqlite-database and associated utilities

The class RunDatabase stores the data from runs. Utility pyFoamAddCaseDataToDatabase.py is one way to populate the database. pyFoamDumpRunDatabaseToCSV.py allows dumping that data to a file for further processing (in a spreadsheet for instance)

Database can also be populated using a special post-run hook

Bugfixes

Only binary packages of 1.x were found

Pattern had to start with 1 (now every digit is possible))

Option group Regular expressions was listed twice

No harm done. But fixed

--clear-option for pyFoamDecompose.py not working

Reason was that rmtree does not allow wildcards. Fixed

pyFoamDisplayBlockmesh.py not working with variable substitution

The DictRedirect would not convert to float. Fixed. Although it might happen again for other data types

Option --function-object-data of pyFoamClearCase.py not working with directories

The option was only implemented for the list-form of the functions entry in controlDict

Now fixed to also work with the dictionary-form

nonuniform of length 0 not correctly printed

Seems like the length was interpreted as the name of the list. Fixed

Building of pseudocases with pyFoamRunner.py broken

Only worked if no region was specified (= not at all). Fixed

pyFoamRedoPlot.py did not correctly honor --end and --start

Plots were over the whole data range. This is now fix (also the issue that --end alone did not work)

WriteParameterFile does not preserve the order of additions

Contents was “only” set as a dictionary which does not preserve the order in which entries are added. Replaced with a DictProxy

Wrong number of arguments when using TimelinePlot in positions-mode

Problem that was introduced by changes in the fields-mode

ClusterJob uses only metis for decomposition

For OpenFOAM-versions 1.6 and higher the automatic decomposition used is now scotch

pyFoamSamplePlot.py and pyFoamTimelinePlot.py produced no pictures for regions

As regions have their own subdirectories the / from the directory name was inserted into the filename and if the subdirectory did not exist gnuplot did not create the picture

Barplots in pyFoamTimelinePlot.py not working if value is a vector

The base class didn’t correctly handle the ( and ). Fixed

Mysterious deadlocks while plotting long logfiles

The problem was that during splitting the timeline data an exception was raised. This exception was caught by another part of PyFoam. This left a lock on the data structure locked and the next access to the structure was held indefinitely. Fixed

Scanning linear expressions form the block coupled solver failed

As there is a tuple of residuals the scanner did not analyze the output of the output of the block-coupled solver from 1.6-ext correctly. This is now treated as a special case and each residual is plotted separately (distinguished by a [x] with x being the number of the component)

#include not correctly working with macros in the included file

Macros $var were not correctly expanded. Fixed

Macros not correctly expanded to strings

When being expanded to string form macros were not correctly expanded

pyFoamPackCase.py in the working directory produces ‘invisible’ tar

If the utility was used in the form

pyFoamPackCase.py .

then an ‘invisible’ tar ..tgz was produced. Fixed

String at the end of a linear solver output makes parsing fail

Reported in [http://www.cfd-online.com/Forums/openfoam-solving/112278-pyfoam-struggles-adopted-solver-post403990.html] the string is assumed to be part of the iteration number. Fixed

Paraview utilities not working with higher Paraview versions

At least for PV 3.14 and 3.98 the way the version number is determined has changed and the PV-utilities failed. This has been fixed but is untested with old versions

Camera settings not honored with pyFoamPVSnapshot.py

For the first rendered view Paraview automatically resets the camera. This has now been switched off (so the snapshot is rendered correctly)

Version 0.5.7 - 2012-04-13

Parser improvements

  • Problem with nested comments
  • Parse code streams
  • Preserving of comments can be switched off
  • Ignore extra semicolons
  • Allows parsing lists of length 3 and 9 as lists and not as vectors and tensors
  • “lookup redirection” in OF-dictionaries now works

Utility improvements

  • pyFoamSamplePlot.py stops if the same directory is compared
  • pyFoamSamplePlot.py shows the location of the biggest difference
  • pyFoamSamplePlot.py allows only same ranges for comparisons
  • Generation of pickled-files can be switched of for runner-utilities
  • Frequency with which the pickled file is written is adapted (so that it doesn’t use ALL the CPU-time)
  • pyFoamVersion.py improved (Version of Python is checked etc)
  • pyFoamRedoPlot.py: fixed parameter checking
  • pyFoamPotentialRunner.py: temporarily disable libs and functions
  • Only write last N loglines from Runner-utility
  • pyFoamClearCase.py: allow local specification of additional files that should be cleared
  • Runner utilities can report data about the run
  • pyFoamConvertToCSV.py now allows selection of columns
  • Utilities for quantative analysis now can return data
  • Utilities for quantative now correctly return data for multiple places
  • pyFoamSamplePlot.py now allows specification of valid variable pre and postfixes to allow correct parsing of variable names with a _
  • endTime can be specified by the runner-utilities
  • Utilities now allow piping (using pickled data)
  • pyFoamSamplePlot.py now allows the specification of a reference time
  • Nomenclature of pyFoamSamplePlot.py and pyFoamTimelinePlots.py now similar (both call it fields)
  • pyFoamDecompose.py now can use the -region-option ifthe OF-version is right
  • Forcing debug-mode fixed for older OF-versions
  • pyFoamDecomposer.py now accepts globalFaceZones in Python or OpenFOAM-syntax
  • Plot-utilities now don’t interpret _ in names not as LaTeX

New Utilities

  • pyFoamEchoPickledApplicationData to output pickled data
  • pyFoamPrintData2DStatistics.py to output data from comparisons
  • pyFoamBuildHelper.py to build project and its prerequisites (work in progress)
  • pyFoamCreateModuleFile.py to create files for http://modules.sourceforge.net/ (by Martin Beaudoin)
  • pyFoamSTLUtility.py to join STL-files

Library improvements

  • stabler comparisons
  • Paraview-Utilities work with 1.x and 2.x
  • Runner classes return a dictionary with data
  • TimelineDirectory ignores dot-files
  • Application-objects can now be used like dictionaries to access data
  • New class TableData for simple data tables
  • New class Data2DStatistics for statistics about tables
  • new class CTestRun as basis for automated testing
  • FoamOptionParser now resets environment variables so that application-classes can call other application classes
  • Improvements to HgInterface
  • Additional VCS-subclasses for git, svn and svk (implementation only as needed)
  • SolutionDir now uses 0.org as initial directory if no valid initial directory is present (this affects clearing and cloning)
  • FoamFileGenerator now more flexible for long lists
  • ParsedBlockMeshDict now doesn’t introduce prefixes for ‘long’ lists

Removed utilities

  • pyFoamAPoMaFoX.py
  • pyFoamPlotResiduals.py

Thirdparty

  • Got rid of Numeric-support in Gnuplot-library

Other

  • script to generate man-pages for the utilities
  • Paraview3-example probeDisplay.py now renamed to probeAndSetDisplay.py and reads sampledSets from controlDict and sampleDict

Older Versions

The changes for older versions can be found on the Wiki-page