SYNOPSIS

freefoam [-b <baseDir>] [-P] [-V | -version] [-h | -help] [--] <application> [<args>]

DESCRIPTION

FreeFOAM is a cross-platform toolkit for computational fluid dynamics (CFD). It consists of a large collection of C++ libraries, allowing the user to write new solvers for partial differential equations using a notation very close to the mathematical one. FreeFOAM comes with a comprehensive set of solvers for a wide range of problems and accompanying pre-/and post-processing utilities.

FreeFOAM is based on the fantastic Open-Source OpenFOAM software. The goal of the FreeFOAM project is to remove the system-dependencies from OpenFOAM and make it generally more useable and easier to install.

The freefoam(1) command is used to invoke the actual FreeFOAM applications. It was mainly created to avoid putting a large number of binaries on the system PATH, cluttering the namespace unnecessarily. It also allows for the user to easily add her own applications to the search path, without having to extend the PATH variable or being root.

freefoam(1) uses the following mechanism to find the application <name>:

It searches in the directory <libexecDir> for an executable with the name freefoam-<name>. <libexecDir> defaults to /usr/local/libexec/FreeFOAM-0.1.0. This can be overridden using the -b option.

If the FREEFOAM_PATH variable is set, it is prepended to the above described search path. It is a colon-separated list of directories.

The -P option can be used to append the system PATH to the search path.

OPTIONS

-b <baseDir>

Specify a different directory to search for applications (default is /usr/local/libexec/FreeFOAM-0.1.0)

-P

Also search the system PATH variable first

--

Separates options for this program from the application and its arguments (useful if the application name should start with a -)

-V | -version

Display the version of FreeFOAM and exit

-h | -help

Display an option summary

<application>

The short name of the application to run (i.e. for the freefoam-ico application the short name would be ico)

<args>

Arguments and options to be passed to the application

environment variables: FREEFOAM_PATH specify an alternative path where to search for applications

FREEFOAM STANDARD APPLICATIONS

The following sections give a short description for all the available standard solvers and utilities. More information is available from the individual manual pages.

SOLVERS

DNS

freefoam-dns(1)

Direct numerical simulation solver for boxes of isotropic turbulence.

Basic Solvers

freefoam-laplacian(1)

Solves a simple Laplace equation, e.g. for thermal diffusion in a solid.

freefoam-scalarTransport(1)

Solves a transport equation for a passive scalar.

freefoam-potential-app(1)

Simple potential flow solver which can be used to generate starting fields for full Navier-Stokes codes.

Combustion Solvers

freefoam-PDR(1)

Solver for compressible premixed/partially-premixed combustion with turbulence modelling.

freefoam-PDRAutoRefine(1)

Solver for compressible premixed/partially-premixed combustion with turbulence modelling.

freefoam-Xi(1)

Solver for compressible premixed/partially-premixed combustion with turbulence modelling.

freefoam-coldEngine(1)

Solver for cold-flow in internal combustion engines.

freefoam-dieselEngine(1)

Solver for diesel engine spray and combustion.

freefoam-diesel(1)

Solver for diesel spray and combustion.

freefoam-engine-app(1)

Solver for internal combustion engines.

freefoam-reacting(1)

Solver for combustion with chemical reactions.

freefoam-rhoReacting(1)

Solver for combustion with chemical reactions using density based thermodynamics package.

freefoam-fire(1)

Transient Solver for Fires and turbulent diffusion flames.

Compressible Flow Solvers

freefoam-rhoCentralDyM(1)

Density-based compressible flow solver based on central-upwind schemes of Kurganov and Tadmor.

freefoam-rhoCentral(1)

Density-based compressible flow solver based on central-upwind schemes of Kurganov and Tadmor.

freefoam-rhoPimple(1)

Transient solver for laminar or turbulent flow of compressible fluids for HVAC and similar applications.

freefoam-rhoPorousMRFPimple(1)

Transient solver for laminar or turbulent flow of compressible fluids with support for porous media and MRF for HVAC and similar applications.

freefoam-rhoPorousSimple(1)

Steady-state solver for turbulent flow of compressible fluids with RANS turbulence modelling, and implicit or explicit porosity treatment.

freefoam-rhoSimple(1)

Steady-state SIMPLE solver for laminar or turbulent RANS flow of compressible fluids.

freefoam-rhoPiso(1)

Transient PISO solver for compressible, laminar or turbulent flow.

freefoam-sonic(1)

Transient solver for trans-sonic/supersonic, laminar or turbulent flow of a compressible gas.

freefoam-sonicLiquid(1)

Transient solver for trans-sonic/supersonic, laminar flow of a compressible liquid.

freefoam-sonicDyM(1)

Transient solver for trans-sonic/supersonic, laminar or turbulent flow of a compressible gas with mesh motion.

Electromagnetic Solvers

freefoam-electrostatic(1)

Solver for electrostatics.

freefoam-mhd(1)

Solver for magnetohydrodynamics (MHD): incompressible, laminar flow of a conducting fluid under the influence of a magnetic field.

Financial Solvers

freefoam-financial(1)

Solves the Black-Scholes equation to price commodities.

Heat Transfer Solvers

freefoam-buoyantBoussinesqPimple(1)

Transient solver for buoyant, turbulent flow of incompressible fluids.

freefoam-buoyantBoussinesqSimple(1)

Steady-state solver for buoyant, turbulent flow of incompressible fluids.

freefoam-buoyantPimple(1)

Transient solver for buoyant, turbulent flow of compressible fluids for ventilation and heat-transfer.

freefoam-buoyantSimple(1)

Steady-state solver for buoyant, turbulent flow of compressible fluids.

freefoam-buoyantSimpleRadiation(1)

Steady-state solver for buoyant, turbulent flow of compressible fluids, including radiation, for ventilation and heat-transfer.

freefoam-chtMultiRegion(1)

Combination of heatConductionFoam and buoyantFoam for conjugate heat transfer between a solid region and fluid region.

freefoam-chtMultiRegionSimple(1)

Steady-state version of chtMultiRegionFoam.

Incompressible Flow Solvers

freefoam-boundary(1)

Steady-state solver for 1D turbulent flow, typically to generate boundary layer conditions at an inlet, for use in a simulation.

freefoam-channel(1)

Incompressible LES solver for flow in a channel.

freefoam-ico(1)

Transient solver for incompressible, laminar flow of Newtonian fluids.

freefoam-nonNewtonianIco(1)

Transient solver for incompressible, laminar flow of non-Newtonian fluids.

freefoam-simple(1)

Steady-state solver for incompressible, turbulent flow.

freefoam-pimpleDyM(1)

Transient solver for incompressible, flow of Newtonian fluids on a moving mesh using the PIMPLE (merged PISO-SIMPLE) algorithm.

freefoam-pimple(1)

Large time-step transient solver for incompressible, flow using the PIMPLE (merged PISO-SIMPLE) algorithm.

freefoam-piso(1)

Transient solver for incompressible flow.

freefoam-shallowWater(1)

Transient solver for inviscid shallow-water equations with rotation.

freefoam-porousSimple(1)

Steady-state solver for incompressible, turbulent flow with implicit or explicit porosity treatment.

Discrete Methods Solvers

freefoam-md(1)

Molecular dynamics solver for fluid dynamics.

freefoam-mdEquilibration(1)

Equilibrates and/or preconditions molecular dynamics systems.

freefoam-dsmc-app(1)

Direct simulation Monte Carlo (DSMC) solver for 3D, transient, multi- species flows.

Lagrangian Solvers

freefoam-coalChemistry(1)

Transient solver for compressible, turbulent flow with coal and limestone parcel injections, and combustion.

freefoam-porousExplicitSourceReactingParcel(1)

Transient PISO solver for compressible, laminar or turbulent flow with reacting multiphase Lagrangian parcels for porous media, including explicit sources for mass, momentum and energy.

freefoam-reactingParcel(1)

Transient PISO solver for compressible, laminar or turbulent flow with reacting Lagrangian parcels.

freefoam-uncoupledKinematicParcel(1)

Transient solver for the passive transport of a single kinematic particle cloud.

Multiphase Solvers

freefoam-bubble(1)

Solver for a system of 2 incompressible fluid phases with one phase dispersed, e.g. gas bubbles in a liquid.

freefoam-compressibleInter(1)

Solver for 2 compressible, isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach.

freefoam-compressibleInterDyM(1)

Solver for 2 compressible, isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach, with optional mesh motion and mesh topology changes including adaptive re-meshing.

freefoam-inter(1)

Solver for 2 incompressible, isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach.

freefoam-interDyM(1)

Solver for 2 incompressible, isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach, with optional mesh motion and mesh topology changes including adaptive re-meshing.

freefoam-MRFInter(1)

Solver for 2 incompressible, isothermal immiscible fluids.

freefoam-porousInter(1)

Solver for 2 incompressible, isothermal immiscible fluids.

freefoam-interPhaseChange(1)

Solver for 2 incompressible, isothermal immiscible fluids with phase-change (e.g. cavitation).

freefoam-cavitating(1)

Transient cavitation code based on the homogeneous equilibrium model from which the compressibility of the liquid/vapour "mixture" is obtained.

freefoam-MRFMultiphaseInter(1)

Solver for n incompressible fluids which captures the interfaces and includes surface-tension and contact-angle effects for each phase.

freefoam-multiphaseInter(1)

Solver for n incompressible fluids which captures the interfaces and includes surface-tension and contact-angle effects for each phase.

freefoam-settling(1)

Solver for 2 incompressible fluids for simulating the settling of the dispersed phase.

freefoam-twoLiquidMixing(1)

Solver for mixing 2 incompressible fluids.

freefoam-twoPhaseEuler(1)

Solver for a system of 2 incompressible fluid phases with one phase dispersed, e.g. gas bubbles in a liquid.

freefoam-interMixing(1)

Solver for 3 incompressible fluids, two of which are miscible, using a VOF method to capture the interface.

Stress-Analysis

freefoam-solidDisplacement(1)

Transient segregated finite-volume solver of linear-elastic, small-strain deformation of a solid body, with optional thermal diffusion and thermal stresses.

freefoam-solidEquilibriumDisplacement(1)

Steady-state segregated finite-volume solver of linear-elastic, small-strain deformation of a solid body, with optional thermal diffusion and thermal stresses.

UTILITIES

Advanced Mesh Manipulation

freefoam-autoRefineMesh(1)

Utility to refine cells near to a surface.

freefoam-collapseEdges(1)

Collapse short edges and combines edges that are in line.

freefoam-combinePatchFaces(1)

Checks for multiple patch faces on same cell and combines them.

freefoam-modifyMesh(1)

Manipulates mesh elements.

freefoam-refineHexMesh(1)

Refines a hex mesh by 2x2x2 cell splitting.

freefoam-refineWallLayer(1)

Utility to refine cells next to patches.

freefoam-refinementLevel(1)

Tries to figure out what the refinement level is on refined cartesian meshes. Run BEFORE snapping.

freefoam-removeFaces(1)

Utility to remove faces (combines cells on both sides).

freefoam-selectCells(1)

Select cells in relation to surface.

freefoam-splitCells(1)

Utility to split cells with flat faces.

Mesh Conversion

freefoam-ansysToFoam(1)

Converts an ANSYS input mesh file, exported from I-DEAS, to FOAM format.

freefoam-cfx4ToFoam(1)

Converts a CFX 4 mesh to FOAM format.

freefoam-fluent3DMeshToFoam(1)

Converts a Fluent mesh to OpenFOAM format.

freefoam-fluentMeshToFoam(1)

Converts a Fluent mesh to FOAM format including multiple region and region boundary handling.

freefoam-foamMeshToFluent(1)

Writes out the FOAM mesh in Fluent mesh format.

freefoam-foamToStarMesh(1)

Reads an OpenFOAM mesh and writes a pro-STAR (v4) bnd/cel/vrt format.

freefoam-gambitToFoam(1)

Converts a GAMBIT mesh to FOAM format.

freefoam-gmshToFoam(1)

Reads .msh file as written by Gmsh.

freefoam-ideasUnvToFoam(1)

I-Deas unv format mesh conversion.

freefoam-kivaToFoam(1)

Converts a KIVA3v grid to FOAM format.

freefoam-mshToFoam(1)

Converts .msh file generated by the Adventure system.

freefoam-netgenNeutralToFoam(1)

Converts neutral file format as written by Netgen v4.4.

freefoam-plot3dToFoam(1)

Plot3d mesh (ascii/formatted format) converter.

freefoam-polyDualMesh(1)

Calculate the dual of a polyMesh. Adheres to all the feature and patch edges.

freefoam-sammToFoam(1)

Converts a STAR-CD SAMM mesh to FOAM format.

freefoam-star4ToFoam(1)

Converts a Star-CD (v4) pro-STAR mesh into OpenFOAM format.

freefoam-starToFoam(1)

Converts a STAR-CD PROSTAR mesh into FOAM format.

freefoam-tetgenToFoam(1)

Converts .ele and .node and .face files, written by tetgen.

freefoam-writeMeshObj(1)

For mesh debugging: writes mesh as three separate OBJ files which can be viewed with e.g. javaview.

Mesh Generation

freefoam-extrudeMesh(1)

Extrude mesh from existing patch or from patch read from file.

freefoam-blockMesh(1)

A multi-block mesh generator.

freefoam-snappyHexMesh(1)

Automatic split hex mesher. Refines and snaps to surface.

freefoam-extrude2DMesh(1)

Takes 2D mesh (all faces 2 points only, no front and back faces) and creates a 3D mesh by extruding with specified thickness.

Mesh Manipulation

freefoam-attachMesh(1)

Attach topologically detached mesh using prescribed mesh modifiers.

freefoam-autoPatch(1)

Divides external faces into patches based on (user supplied) feature angle.

freefoam-cellSet(1)

Selects a cell set through a dictionary.

freefoam-checkMesh(1)

Checks validity of a mesh.

freefoam-createBaffles(1)

Makes internal faces into boundary faces.

freefoam-createPatch(1)

Utility to create patches out of selected boundary faces.

freefoam-deformedGeom(1)

Deforms a polyMesh using a displacement field U and a scaling factor supplied as an argument.

freefoam-faceSet(1)

Selects a face set through a dictionary.

freefoam-flattenMesh(1)

Flattens the front and back planes of a 2D cartesian mesh.

freefoam-insideCells(1)

Picks up cells with cell centre inside of surface.

freefoam-mergeMeshes(1)

Merge two meshes.

freefoam-mergeOrSplitBaffles(1)

Detects faces that share points (baffles). Either merge them or duplicate the points.

freefoam-mirrorMesh(1)

Mirrors a mesh around a given plane.

freefoam-moveDynamicMesh(1)

Mesh motion and topological mesh changes utility.

freefoam-moveEngineMesh(1)

Solver for moving meshes for engine calculations.

freefoam-moveMesh(1)

Solver for moving meshes.

freefoam-objToVTK(1)

Read obj line (not surface!) file and convert into vtk.

freefoam-pointSet(1)

Selects a point set through a dictionary.

freefoam-refineMesh(1)

Utility to refine cells in multiple directions.

freefoam-renumberMesh(1)

Renumbers the cell list in order to reduce the bandwidth, reading and renumbering all fields from all the time directories.

freefoam-rotateMesh(1)

Rotates the mesh and fields from the direcion n1 to the direction n2.

freefoam-setSet(1)

Manipulate a cell/face/point/ set or zone interactively.

freefoam-setsToZones(1)

Add pointZones/faceZones/cellZones to the mesh from similar named pointSets/faceSets/cellSets.

freefoam-splitMesh(1)

Splits mesh by making internal faces external.

freefoam-splitMeshRegions(1)

Splits mesh into multiple regions.

freefoam-stitchMesh(1)

Stitches a mesh.

freefoam-subsetMesh(1)

Selects a section of mesh based on a cellSet.

freefoam-transformPoints(1)

Transforms the mesh points in the polyMesh directory according to the translate, rotate and scale options.

freefoam-zipUpMesh(1)

Reads in a mesh with hanging vertices and zips up the cells to guarantee that all polyhedral cells of valid shape are closed.

Error Estimation

freefoam-momentScalarError(1)

Estimates the error in the solution for a scalar transport equation in the standard form.

freefoam-icoErrorEstimate(1)

Estimates error for the incompressible laminar CFD application icoFoam.

freefoam-estimateScalarError(1)

Estimates the error in the solution for a scalar transport equation in the standard form.

freefoam-icoMomentError(1)

Estimates error for the incompressible laminar CFD application icoFoam.

Miscellaneous Utilities

freefoam-expandDictionary(1)

Read the dictionary provided as an argument, expand the macros etc. and write the resulting dictionary to standard output.

freefoam-debugSwitches(1)

Write out all library debug switches.

freefoam-formatConvert(1)

Converts all IOobjects associated with a case into the format specified in the controlDict.

freefoam-infoExec(1)

Interrogates a case and prints information to screen.

freefoam-patchSummary(1)

Writes fields and boundary condition info for each patch at each requested time instance.

Parallel Processing

freefoam-redistributeMeshPar(1)

Redistributes existing decomposed mesh and fields according to the current settings in the decomposeParDict file.

freefoam-reconstructParMesh(1)

Reconstructs a mesh using geometric information only.

freefoam-decomposePar(1)

Automatically decomposes a mesh and fields of a case for parallel execution of OpenFOAM.

freefoam-reconstructPar(1)

Reconstructs a mesh and fields of a case that is decomposed for parallel execution of OpenFOAM.

Post-Processing

freefoam-calc(1)

Generic wrapper for calculating a quantity at each time.

freefoam-dsmcFieldsCalc(1)

Calculate intensive fields (U and T) from averaged extensive fields from a DSMC calculation.

freefoam-particleTracks(1)

Generates a VTK file of particle tracks for cases that were computed using a tracked-parcel-type cloud.

Data Conversion

freefoam-foamDataToFluent(1)

Translates FOAM data to Fluent format.

freefoam-foamToEnsight(1)

Translates FOAM data to EnSight format.

freefoam-foamToEnsightParts(1)

Translates OpenFOAM data to Ensight format. An Ensight part is created for each cellZone and patch.

freefoam-foamToFieldview9(1)

Write out the OpenFOAM mesh in Version 3.0 Fieldview-UNS format (binary).

freefoam-foamToGMV(1)

Translates foam output to GMV readable files.

freefoam-foamToVTK(1)

Legacy VTK file format writer.

freefoam-smapToFoam(1)

Translates a STAR-CD SMAP data file into FOAM field format.

Miscellaneous

freefoam-engineCompRatio(1)

Calculate the geometric compression ratio. Note that if you have valves and/or extra volumes it will not work, since it calculates the volume at BDC and TCD.

freefoam-execFlowFunctionObjects(1)

Execute the set of functionObjects specified in the selected dictionary (which defaults to system/controlDict) for the selected set of times.

freefoam-pdfPlot(1)

Generates an .obj file to plot a probability distribution function.

freefoam-postChannel(1)

Post-processes data from channel flow calculations.

freefoam-ptot(1)

For each time: calculate the total pressure.

freefoam-wdot(1)

Calculates and writes wdot for each time.

freefoam-writeCellCentres(1)

Write the three components of the cell centres as volScalarFields so they can be used in postprocessing in thresholding.

Data Sampling, Averaging and Integration

freefoam-patchIntegrate(1)

Calculates the integral of the specified field over the specified patch.

freefoam-patchAverage(1)

Calculates the average of the specified field over the specified patch.

freefoam-sample(1)

Sample field data with a choice of interpolation schemes, sampling options and write formats.

freefoam-probeLocations(1)

Probe locations.

freefoam-pPrime2(1)

Calculates and writes the scalar field of pPrime2 (sqr(p - pMean)) at each time.

Stress Analysis

freefoam-stressComponents(1)

Calculates and writes the scalar fields of the six components of the stress tensor sigma for each time.

Turbulence Quantities

freefoam-createTurbulenceFields(1)

Creates a full set of turbulence fields.

freefoam-R(1)

Calculates and writes the Reynolds stress R for the current time step.

Flow Field Quantities

freefoam-Co(1)

Calculates and writes the Co number as a surfaceScalarField obtained from field phi.

freefoam-Lambda2(1)

Calculates and writes the second largest eigenvalue of the sum of the square of the symmetrical and anti-symmetrical parts of the velocity gradient tensor.

freefoam-Mach(1)

Calculates and optionally writes the local Mach number from the velocity field U at each time.

freefoam-Pe(1)

Calculates and writes the Pe number as a surfaceScalarField obtained from field phi.

freefoam-Q(1)

Calculates and writes the second invariant of the velocity gradient tensor.

freefoam-enstrophy(1)

Calculates and writes the enstrophy of the velocity field U.

freefoam-flowType(1)

Calculates and writes the flowType of velocity field U.

freefoam-streamFunction(1)

Calculates and writes the stream function of velocity field U at each time.

freefoam-uprime(1)

Calculates and writes the scalar field of uprime (sqrt(2/3 k)).

freefoam-vorticity(1)

Calculates and writes the vorticity of velocity field U.

Wall Quantities

freefoam-wallGradU(1)

Calculates and writes the gradient of U at the wall.

freefoam-wallHeatFlux(1)

Calculates and writes the heat flux for all patches as the boundary field of a volScalarField and also prints the integrated flux for all wall patches.

freefoam-wallShearStress(1)

Calculates and writes the wall shear stress, for the specified times.

freefoam-yPlusLES(1)

Calculates and reports yPlus for all wall patches, for the specified times.

freefoam-yPlusRAS(1)

Calculates and reports yPlus for all wall patches, for the specified times when using RAS turbulence models.

Pre-Processing

freefoam-applyBoundaryLayer(1)

Apply a simplified boundary-layer model to the velocity and turbulence fields based on the 1/7th power-law.

freefoam-applyWallFunctionBoundaryConditions(1)

Updates OpenFOAM RAS cases to use the new (v1.6) wall function framework.

freefoam-boxTurb(1)

Makes a box of turbulence which conforms to a given energy spectrum and is divergence free.

freefoam-changeDictionary(1)

Utility to change dictionary entries.

freefoam-dsmcInitialise(1)

Initialise a case for dsmcFoam by reading the initialisation dictionary system/dsmcInitialise.

freefoam-engineSwirl(1)

Generates a swirling flow for engine calulations.

freefoam-upgradeFvSolution(1)

Simple tool to upgrade the syntax of system/fvSolution::solvers.

freefoam-mapFields(1)

Maps volume fields from one mesh to another.

freefoam-mdInitialise(1)

Initialises fields for a molecular dynamics (MD) simulation.

freefoam-setFields(1)

Selects a cell set through a dictionary.

Surface File Manipulation

freefoam-surfaceAdd(1)

Add two surfaces. Does geometric merge on points. Does not check for overlapping/intersecting triangles.

freefoam-surfaceAutoPatch(1)

Patches surface according to feature angle. Like autoPatch.

freefoam-surfaceCheck(1)

Performs various checks on surface.

freefoam-surfaceClean(1)

Collapses small edges, removing triangles and converts sliver triangles into split edges by projecting point onto base of triangle.

freefoam-surfaceCoarsen(1)

Surface coarsening using bunnylod.

freefoam-surfaceConvert(1)

Converts from one surface mesh format to another.

freefoam-surfaceFeatureConvert(1)

Extracts and writes surface features to file.

freefoam-surfaceFeatureExtract(1)

Extracts and writes surface features to file.

freefoam-surfaceFind(1)

Finds nearest triangle and vertex.

freefoam-surfaceMeshConvert(1)

Convert between surface formats with optional scaling or transformations (rotate/translate) on a coordinateSystem.

freefoam-surfaceMeshConvertTesting(1)

Converts from one surface mesh format to another, but primarily used for testing functionality.

freefoam-surfaceMeshExport(1)

Export from surfMesh to various third-party surface formats with optional scaling or transformations (rotate/translate) on a coordinateSystem.

freefoam-surfaceMeshImport(1)

Import from various third-party surface formats into surfMesh with optional scaling or transformations (rotate/translate) on a coordinateSystem.

freefoam-surfaceMeshTriangulate(1)

Extracts triSurface from a polyMesh.

freefoam-surfaceOrient(1)

Set normal consistent with respect to a user provided outside point.

freefoam-surfacePointMerge(1)

Merges points on surface if they are within absolute distance.

freefoam-surfaceRedistributePar(1)

(Re)distribution of triSurface. Either takes an undecomposed surface or an already decomposed surface and redistribute it so each processor has all triangles that overlap its mesh.

freefoam-surfaceRefineRedGreen(1)

Refine by splitting all three edges of triangle (red refinement). Neighbouring triangles (which are not marked for refinement get split in half (green) refinement.

freefoam-surfaceSmooth(1)

Example of simple laplacian smoother.

freefoam-surfaceSplitByPatch(1)

Writes regions of triSurface to separate files.

freefoam-surfaceSplitNonManifolds(1)

Takes multiply connected surface and tries to split surface at multiply connected edges by duplicating points.

freefoam-surfaceSubset(1)

A surface analysis tool which sub-sets the triSurface to choose only a part of interest.

freefoam-surfaceToPatch(1)

Reads surface and applies surface regioning to a mesh.

freefoam-surfaceTransformPoints(1)

Transform (scale/rotate) a surface.

Thermophysical Utilities

freefoam-adiabaticFlameT(1)

Calculates the adiabatic flame temperature for a given fuel over a range of unburnt temperatures and equivalence ratios.

freefoam-chemkinToFoam(1)

Converts CHEMKINIII thermodynamics and reaction data files into FOAM format.

freefoam-equilibriumCO(1)

Calculates the equilibrium level of carbon monoxide.

freefoam-equilibriumFlameT(1)

Calculates the equilibrium flame temperature.

freefoam-mixtureAdiabaticFlameT(1)

Calculates the adiabatic flame temperature for a given mixture at a given temperature.

freefoam-IFCLookUpTableGen(1)

Calculate the the infinitely-fast chemistry relationships in function of ft. for a given fuel.

FreeFOAM Helper Scripts

Below you find an overview of the small helper scripts provided by FreeFOAM.

freefoam-clearPolyMesh(1)

Remove the contents of the constant/polyMesh directory.

freefoam-copySettings(1)

Copy settings from one case directory to another, without copying the mesh or results.

freefoam-graphExecTime(1)

Computes the time used per iteration.

freefoam-graphResKE(1)

Extract the residuals of k and epsilon at each time step.

freefoam-graphResUVWP(1)

Extract the residuals of U, V, W and p at each time step.

freefoam-job(1)

Runs a FreeFOAM job in the background.

freefoam-log(1)

Extracts xy files from Foam logs.

freefoam-para(1)

Start ParaView3 to visualize a case.

freefoam-solverSweeps(1)

Extract solver statistics from a log file.

CONFIGURATION MECHANISM

FreeFOAM offers a number of global configuration options. These include

location of the API documentation and the method to display it

debug, info and optimisation switches

physical constants

plugin search paths

parallel communications method

starting of a parallel job

Global Configuration Files

Unfortunately the OpenFOAM library (on which FreeFOAM builds) and some applications require the following files to be present for start-up:

cellModels

controlDict

thermoData/BurcatCpData

thermoData/therm.dat

It finds them in the following places (in the specified order, picking the first hit):

Under the directory specified in the $FREEFOAM_CONFIG_DIR environment variable

In $HOME/.FreeFOAM/0.1

In $HOME/.FreeFOAM

In the installation directory of the configuration files, /usr/local/etc/FreeFOAM/0.1.0

where the versions in above directory names depend on the version of the FreeFOAM application to be run.

Locating the API documentation

All FreeFOAM applications accept the options -doc and -srcDoc. The former locates and displays the API documentation of the application, the latter the source code. This, however, requires that FreeFOAM is able to locate the API documentation and knows which program to use for display.

By default FreeFOAM uses the API documentation provided on http://freefoam.sf.net/doc/API because most users will not want to install the sizeable documentation package. The method FreeFOAM uses to locate the documentation files is via index files which are conventional FreeFOAM dictionaries. Each of them contains an entry docDir specifying the documentation root location (such as http://freefoam.sf.net/doc/API) and a dictionary called docFiles mapping the application name to the names of the corresponding HTML documentation and source page.

These documentation indices are found by querying the list Documentation::doxyDocIndices in the global controlDict file. If multiple documentation indices are specified, the first index that provides documentation for the given application is picked.

Displaying the API documentation

FreeFOAM can automatically open a browser window displaying the HTML documentation for you. The entry Documentation::docBrowser in the global controlDict can be used to change which program is used for this. In this string the token %f gets replaced by the filename to open.

Debug, Info and Optimisation Switches

The lists DebugSwitches, InfoSwitches and OptimisationSwitches in the global controlDict file determine some global run-time behaviour of FreeFOAM. The entries in DebugSwitches can be set to 1 for more verbose output in the specified class.

The InfoSwitches::writePrecision setting determines the write precision in the output to the terminal (i.e. not the output written to files). Whether a job-info file should be created can be specified by enabling InfoSwitches::writeJobeInfo.

For files that are modifieable during run-time (e.g. to change the interval at which the output is created), FreeFOAM compares the modification times of these files in order to determine whether they have to be re-read. The setting OptimisationSwitches::fileModificationSkew determines the minimum modification-time difference in seconds for a file to be considered changed.

The setting OptimisationSwitches::commsType determines whether inter-process communications are either blocking, scheduled or nonBlocking.

OptimisationSwitches::floatTransfer causes to convert double values to float before transferring them through the communications library. This saves some bandwidth at the loss of accuracy.

The sum operation across processors can be executed either in a linear or a tree fashion. Especially for a large number of processors, tree-summation is significantly faster. The threshold at which to switch from linear to tree-summation is determined by OptimisationSwitches::nProcsSimpleSum.

Physical Constants

DimensionedConstants::R

Universal gas constant

DimensionedConstants::Pstd

Standard pressure

DimensionedConstants::Tstd

Standard temperature

DimensionedConstants::sigmaSB

Stefan-Boltzmann constant

Plugin Search Path

FreeFOAM very often relies on dynamically loading libraries (a.k.a plugins). If the library name is given as an absolute path, FreeFOAM tries to load it directly. To locate libraries specified just by their name or with a relative path, FreeFOAM first tries to find the library in one of the directories specified in the list LibrarySearchPaths in the global controlDict and, if the library was not found, falls back to the mechanism provided by your operating system (i.e. for Linux systems this would be the LD_LIBRARY_PATH and the default search path).

Selecting the Parallel Communications Library

Both, FreeFOAM and OpenFOAM abstract the parallel operations into the Pstream library, making it rather simple to firstly switch between parallel implementations and secondly port the software to a new communications library. However, FreeFOAM uses a much more flexible mechanism of determining which Pstream implementation library to use than OpenFOAM. The latter does this by adjusting the LD_LIBRARY_PATH environment variable. As FreeFOAM wants to be a well behaved Linux citizen, this is not an option. Instead, FreeFOAM dynamically loads the desired Pstream library at startup (i.e. as a plug-in). The following list details how FreeFOAM determines what library to load (if at all):

If the environment variable FREEFOAM_PSTREAM_LIBRARY is set, FreeFOAM will try to load the library specified by it.

If the sub-dictionary PstreamImplementation exists in the global controlDict file (see above), it reads the value of the entry PstreamImplementation::configName therein. This entry can be overridden by setting the FREEFOAM_PSTREAM_CONFIG environment variable. It then expects that a sub-dictionary of PstreamImplementation with the name specified in FREEFOAM_PSTREAM_CONFIG or PstreamImplementation::configName exists. If that sub-dictionary contains the entry PstreamImplementation::library, it will try to load a library specified by the value of that entry.

Please note that this library is also considered to be a plugin, and thus is located in the same way as described above.

After FreeFOAM (possibly) loaded the library, it will try to instantiate concrete implementations of the abstract base classes PstreamImpl, IPstreamImpl and OPstreamImpl. Which classes are to be instantiated is determined as follows:

FreeFOAM queries the environment variables FREEFOAM_PSTREAM_CLASS, FREEFOAM_IPSTREAM_CLASS and FREEFOAM_OPSTREAM_CLASS for the class names to be instantiated.

For any of the variables not set, it requires the sub-dictionary PstreamImplementation to be present in the global controlDict, reads the value of FREEFOAM_PSTREAM_CONFIG or the entry PstreamImplementation::configName and similarly to the library loading, loads the sub-dictionary specified by that value. It then expects to find the entries PstreamImplementation::Pstream, PstreamImplementation::IPstream and PstreamImplementation::OPstream which specify the names of the classes to load.

This means that one can create a global controlDict file containing (among other things) something like the following:

PstreamImplementation
{
    //configName dummy;
    configName mpi;

    dummy
    {
        library libdummyPstream.so;
        Pstream dummyPstreamImpl;
        OPstream dummyOPstreamImpl;
        IPstream dummyIPstreamImpl;
    }

    mpi
    {
        library libmpiPstream.so;
        Pstream mpiPstreamImpl;
        OPstream mpiOPstreamImpl;
        IPstream mpiIPstreamImpl;
    }
}

This way the administrator can provide a global controlDict in the FreeFOAM installation. Every user can then override that controlDict by supplying her own file in her home directory as detailed above. In order to select a particular Pstream implementation for a specific communications library, the user can then either adjust the PstreamImplementation::configName entry in the global controlDict file, set the FREEFOAM_PSTREAM_CONFIG variable or, for full control, set the variables FREEFOAM_PSTREAM_LIBRARY, FREEFOAM_PSTREAM_CLASS, FREEFOAM_IPSTREAM_CLASS and FREEFOAM_OPSTREAM_CLASS.

Starting of a Parallel Job

Some of the tutorial scripts need to run FreeFOAM applications in parallel. However, how to do so differs strongly from system to system and between parallel communication libraries. This is why the command line to start an application in parallel is configureable in the parRunTemplate setting. ${NPROCS}, ${PAROPTS}, ${APPLICATION} and ${ARGS} are placeholders for the number of processors to use, options for the parallel communications system, the application to run and its arguments, respectively. Note that the -parallel option is NOT included in ${ARGS}.

ENVIRONMENT VARIABLES

FREEFOAM_CONFIG_DIR

Directory containing the global configuration files

FREEFOAM_PATH

Additional, colon separated paths in which to first search for FreeFOAM executables

FREEFOAM_PSTREAM_CONFIG

Name of the Pstream configuration in the global controlDict file to use

FREEFOAM_PSTREAM_LIBRARY

The Pstream library to load

FREEFOAM_PSTREAM_CLASS

Name of the concrete PstreamImpl class to instantiate

FREEFOAM_IPSTREAM_CLASS

Name of the concrete IPstreamImpl class to instantiate

FREEFOAM_OPSTREAM_CLASS

Name of the concrete OPstreamImpl class to instantiate

RELATED TO freefoam…

The user guide is available from http://freefoam.sourceforge.net/doc/UserGuide and the Doxygen-generated API documentation can be accessed at http://freefoam.sourceforge.net/doc/API.

AUTHOR

Michael Wild <[email protected]>

FREEFOAM

Part of the freefoam(1) suite

COPYRIGHT

Copyright © 1991-2010 OpenCFD Ltd.

Copyright © 2008-2012 Michael Wild.