casefoam.mkCases

casefoam.mkCases(baseCase, caseStructure, caseData, hierarchy, writeDir=None)[source]

Make OpenFOAM cases.

Make OpenFOAM cases based on a base case. The structure and folder hierarchy can be choosen freely. The case structure is set with an list of items to be changed. For example:

[[parent1, parent2],
 [child1, child2, child3],
 [grandchild1, grandchild2]]

gives cases:

parent1/child1/grandchild1
...
parent2/child3/grandchild2
Parameters:
baseCase : str

Directory of the base case. This directory contains all cases and the baseCase directory. Do not use ‘baseCase’ baseCase directory since this is the baseCaseDir. For example:

>>> baseCase = '/compressible/rhoCentralFoam/forwardStep/'
caseStructure : list

List of parent, child and grandchild names.

caseData : dict

Dictionary of data to update. For each parent, child, grandchild … name, a set of data is given to update. The structure of the caseDir dictionary looks like the following:

>>> {'parent1': {'path/to/paramter': {content_to_change}},
     ...
     'grandchild2': {'path/to/paramter': {content_to_change}}}

To manipulate a text file that is not in the OpenFOAM dictionary format you can pass '#!stringManipulation' as {content_to_change}. This will replace a STRINGMARKER with a string in the given file.

>>> {'replace a string': {
        'path/to/textFile': {
            '#!stringManipulation': {'STRINGMARKER', 'string'}}}}

Further a bash command can be executed for a specific case, by replacing the 'path/to/parameter' with '#!bash' and passing the command as value. If the word '#!destination' occurs in the passed value, '#!destination' will be replaced by the respective case directory.

>>> # print a message to the console
>>> {'#!bash': 'echo "Here could be your command"'}
>>> # copy a mesh from a directory into the respective case
>>> {'#!bash': 'cp -rn meshes/coarse/constant #!destination'}
hierarchy : {‘flat’, ‘tree’}

Hierarchy in which the case directory will be created.

  • ‘flat’: Creates the structure parent_child_grandchild.
  • ‘tree’: Creates the structure parent/child/grandchild.
writeDir : str

Copy the base case to this directory and generate cases inside of it. Default is None.

Returns:
Generates a baseCase directory inside the base case and the OpenFOAM

cases in a desired directory hierarchy with updated parameter files. In addition a bash script rmCases is generated to bring the case folder back to it’s original structure and a Allrun and Allclean script is generated.

Examples

To get the correct structure of the dictionary for the input {content_to_change} in caseData you can use PyFoam.

>>> import PyFoam.RunDictionary.ParsedParameterFile as PPF
>>> U = PPF.ParsedParameterFile('forwardStep/0/U')
>>> U.content
{'boundaryField': {'bottom': {'type': 'symmetryPlane'},
  'defaultFaces': {'type': 'empty'},
  'inlet': {'type': 'fixedValue', 'value': 'uniform (3 0 0)'},
  'obstacle': {'type': 'slip'},
  'outlet': {'inletValue': 'uniform (3 0 0)',
   'type': 'inletOutlet',
   'value': 'uniform (3 0 0)'},
  'top': {'type': 'symmetryPlane'}},
 'dimensions': '[ 0 1 -1 0 0 0 0 ]',
 'internalField': 'uniform (3 0 0)'}