From 222d3e41f6327c3942ea6494bb857d065248c112 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Mon, 13 Jul 2009 09:27:38 +0200 Subject: [PATCH 1/4] porousZone - output 'note' entry (if it exists) too --- src/finiteVolume/cfdTools/general/porousMedia/porousZone.C | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C index f13e344375..34e85c2e27 100644 --- a/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C +++ b/src/finiteVolume/cfdTools/general/porousMedia/porousZone.C @@ -370,6 +370,12 @@ void Foam::porousZone::writeDict(Ostream& os, bool subDict) const << indent << token::BEGIN_BLOCK << incrIndent << nl; } + if (dict_.found("note")) + { + os.writeKeyword("note") << string(dict_.lookup("note")) + << token::END_STATEMENT << nl; + } + coordSys_.writeDict(os, true); if (dict_.found("porosity")) From 0fa8ffcf7af9c7d30a33555bf5d8c4a751aca615 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Thu, 9 Jul 2009 08:57:59 +0200 Subject: [PATCH 2/4] fixed inverted directory-test logic in IOobject.C --- src/OpenFOAM/db/IOobject/IOobject.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenFOAM/db/IOobject/IOobject.C b/src/OpenFOAM/db/IOobject/IOobject.C index 0368b02e2e..1de0811573 100644 --- a/src/OpenFOAM/db/IOobject/IOobject.C +++ b/src/OpenFOAM/db/IOobject/IOobject.C @@ -36,7 +36,7 @@ defineTypeNameAndDebug(Foam::IOobject, 0); // Return components following the IOobject requirements // -// behaviour +// behaviour // input IOobject(instance, local, name) // ----- ------ // "foo" ("", "", "foo") @@ -58,7 +58,7 @@ bool Foam::IOobject::IOobject::fileNameComponents name.clear(); // called with directory - if (!isDir(path)) + if (isDir(path)) { WarningIn("IOobject::fileNameComponents(const fileName&, ...)") << " called with directory: " << path << "\n"; From 8bc719e554357a7b255b79905f5c2c4a3ade1ad8 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Wed, 15 Jul 2009 09:35:45 +0200 Subject: [PATCH 3/4] merge in Mark's text into ReleaseNotes --- ReleaseNotes-1.6 | 439 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 331 insertions(+), 108 deletions(-) diff --git a/ReleaseNotes-1.6 b/ReleaseNotes-1.6 index 0fe2691f91..b9330fac0a 100644 --- a/ReleaseNotes-1.6 +++ b/ReleaseNotes-1.6 @@ -1,143 +1,307 @@ # -*- mode: org; -*- # -#+TITLE: *OpenFOAM release notes for version 1.6* +#+TITLE: OpenFOAM release notes for version 1.6 #+AUTHOR: OpenCFD Ltd. #+DATE: July 2009 #+LINK: http://www.opencfd.co.uk #+OPTIONS: author:nil ^:{} * Overview - OpenFOAM-1.6 is is a significant upgrade to version 1.5 in ways which are - outlined below. This release passes all our standard tests and the tutorials - have been broadly checked. If there are any bugs, please report them using - the instructions set out in: http://www.OpenFOAM.org/bugs.html. + OpenFOAM-1.6 is a significant upgrade to version 1.5 in ways that are + outlined below. This release passes all our standard tests and the + tutorials have been broadly checked. If there are any bugs, please report + them using the instructions set out here: + http://www.OpenFOAM.org/bugs.html * GNU/Linux version - The 32bit and 64bit binary packs of the OpenFOAM release were compiled on a - machine running SuSE GNU/Linux version 11.1 and also tested on Ubuntu 9. We - recommend that users run OpenFOAM on one of these or a similar recent version - of GNU/Linux. This release has also been successfully compiled and tested on - older GNU/Linux releases but this requires the installation of Qt 4.3.? (the - sources for which are supplied with OpenFOAM-1.6, see README) for ParaView-3 - to run. + The 32bit and 64bit binary packs of the OpenFOAM release were compiled on + a machine running openSUSE GNU/Linux version 11.1 and also tested on + Ubuntu 9. We recommend that users run OpenFOAM on one of these, or on a + similarly recent version of GNU/Linux. This release has also been + successfully compiled and tested on older GNU/Linux releases, but this + requires the installation of Qt 4.3.? (the sources for which are supplied + with OpenFOAM-1.6, see README) for ParaView-3 to run. * C++ Compiler version + Release compiled with GCC 4.3.3. - + Built in support for the Intel C++ 10.? compiler (untested). + + Built-in support for the Intel C++ 10.? compiler (untested). + The choice of the compiler is controlled by the setting of the ~$WM_COMPILER~ and ~$WM_COMPILER_ARCH~ environment variables in the /OpenFOAM-1.6/etc/bashrc/ (or /cshrc/) file. - + The location of the installation of the compiler is controlled by the + + The location of the compiler installation is controlled by the ~$compilerInstall~ environment variable in the /OpenFOAM-1.6/etc/settings.sh/ (or /settings.csh/) file. * Library developments -*** Turbulence modelling - + Major development of turbulence model libraries to give extra flexibility - at the solver level. For solvers that can support either RAS/LES - computations, the selection is made in the - /constant/turbulenceProperties/, - by setting the =simulationType= keyword to: - - =laminar= - - =RASModel= - - =LESModel= - + Depending on the selection, the model is the instantiated from /constant// - - /RASProperties/ - - /LESProperties/ +** Core library -***** RAS wall functions - Wall functions are now run-time selectable per patch for RAS. +*** Regular Expressions + The addition of regular expressions marks a major improvement in usability. -******* Velocity: - + Apply to turbulent viscosities =nut= or =mut= - + Apply to =k=, =Q=, =R= - + Apply to =epsilon=, =omega= + + *New* =regExp= class provides support for accessing POSIX extended regular + expresssions from within OpenFOAM. + See the manpages on your system (/man 7 regex/) for more information + about the extended regular expresssion syntax. Since entire strings are + matched, the =^= and =$= anchors are not required. -******* Temperature: - + Apply to turbulent thermal diffusivity, =alphat= (compressible only) + + *New* =wordRe= class can contain a =word= or a =regExp= . + The match() method matches appropriately (as a =word= or as a =regExp=). -******* To apply wall functions: - + To recapture the functionality of previous OpenFOAM versions (v1.5 and - earlier) assign: - - for velocity: - - =nut=: =nutWallFunction= - - =mut=: =muWallFunction= - - =epsilon=: =epsilonWallFunction= - - =omega=: =omegaWallFunction= - - =k=, =Q=, =R=: =kQRWallFunction= - - for temperature: - - =alphat=: =alphatWallFunction= - + New =alphaSgsJayatillekeWallFunction= thermal wall function for - compressible LES + + *New* =stringListOps= to search string lists based on regular expressions, + =wordRe= or =wordReList= . -***** *New* LES turbulence models - + Spalart-Allmaras DDES - + Spalart-Allmaras IDDES + + =Istream= and =Ostream= now retain backslashes when reading/writing strings. + The backslash continues to be used as an escape character for double-quote + and newline, but otherwise get passed through "as-is" without any other + special meaning (ie, they are /not/ C-style strings). This especially + helps with input/output of regular expressions. -***** Upgrading: - + *New* utility - =applyWallFunctionBoundaryConditions= - + Solvers will automatically update existing cases - - New fields created based on the presence of the =nut/mut= field - - Boundary conditions include scoping, i.e compressibility:: for - compressible solvers - - Modified fields will be backed-up to /.old/ - + NOTE: - - Fields are only updated for those fields associated with the current - turbulence model selection, i.e. if fields exist for use with other - models, they will not be updated - - New specification is not backwards compatible -*** Thermo-physical Models - + Old compressibility based thermo package renamed - =basicThermo= \rightarrow =basicPsiThermo= - + *New* =basicRhoThermo= thermo package - - Additional density field stored - - General form - can be used for other types of media, e.g. liquids - - Additional polynomial-based thermodynamics - - Equation of state: =icoPolynomial= - - Transport: =polynomialTransport= - - Thermo: =hPolynomialThermo= - + Removed earlier hard-coding of gas thermophysics for chemistry modelling: - - =reactingMixture= now templated on thermo package - - =chemistryModel= now templated on thermo package - - =chemistrySolver= now templated on thermo package - + *New* =fvDOM= radition model - - finite volume, discrete ordinates method - + *New* (reinstated) =eThermo= thermodynamics package - - internal energy based thermodynamics +*** Dictionary improvements/changes + + Dictionaries can use words (unquoted) or regular expressions (quoted) + for their keywords. When searching, an exact match has priority + over a regular expression match. -*** Lagrangian + + The default =#inputMode= is now '=merge=', which corresponds to the most + general usage. The =#inputMode warn= corresponds to the previous + default behaviour. -***** Intermediate - - Overhaul of the underlying framework - - Reacting now split into reacting and reacting multiphase - - New structure for variable composition - - Many new sub-models, including: - - Injection - - =PatchInjection= - injection local to patch face cells - - =FieldActivatedInjection= - injection based on satisfying external - criterion - - LookupTableInjection - explicity define injection locations and all - parcel properties - - Post-processing - - patch post-processing - collect data for parcels impacting user - defined patches - - Patch interaction - - generalised behaviour for parcel interaction with patch - - Phase change - - liquid evaporation + + The *new* =#inputMode protect= can be used to conditionally merge default + values into existing dictionaries. -***** Coal combustion - - *New* library - extension of reacting-multiphase functionality - - Surface reaction/combustion models + + *New* =digest()= method to calculate and return the SHA1 message digest -*** Discrete methods + +*** Improved list containers + + It is now possible to append a =UList= to an existing =List= or + =DynamicList= . + + + =DynamicList= is now much more flexible. It can be used with the + =append()= method, or with the =setSize()= method and =operator[]=, as + per =List= . =DynamicList= also has more methods for adjusting the + space allocated. + + + =SortableList= now uses stable sort and allows =reverseSort()= as well. + =SortableList= is also more versatile - the indices mostly remain + unallocated until they are required in the =sort()= method. + The sort indices can be deallocated with the =shrink()= method. + Works as expected with =transfer()= and assignment from other lists. + + + Specialization for =UList::operator[](..) const= to return =false= + for out-of-range elements. This allows lazy evaluation with no noticeable + change in performance. + + + =PackedList= has much better performance, *new* lazy evaluation and + *new* auto-vivify of elements on assignment. Any auto-vivified + elements will also flood-fill the gaps with zero. The =append()= method + can be used like in =DynamicList= to append a single element. The =set()= + method can be used like in =labelHashSet= . + A =PackedBoolList= can thus replace =labelHashSet= in many places. + + + *New* =UIndirectList= for an indirect list without storing the addressing. + + +*** New hashing algorithms + + Bob Jenkins' hash routine for performance improvement (5-10% faster for + string hashing than the previous algorithm) and fewer collisions. + + + SHA1 hashing and SHA1 message digests (NIST specification FIPS-180-1) + added. The SHA1 digest provides a compact (20 bytes) means of + determining if the contents of an object have changed. The *new* + =OSHA1stream= class can be used to calculate SHA1 digests for anything + that can write to an output stream. + + +*** HashTable/HashSet improvements + + Performance improvements for querying on empty tables + + + The =erase()= method can take a list of keys or the keys from any + another =HashTable=/=HashSet= . + + + =HashSet= has an =operator[]() const= that allows the same syntax + to be used for =boolList=, =PackedBoolList= and =labelHashSet= . + + + =HashSet has additional operators '+=', '-=', '&=' to add, remove or + intersect keys, respectively. + + +*** Improved bool/Switch + + The =Switch= class has reduced the storage to be on par with =bool= . + It is now more flexible and behaves much more like a =bool= . + + + The IO for =bool= uses =Switch= internally for reading, so the end-user + doesn't need to know if a particular class used =bool= or =Switch= . + + +*** Miscellaneous container class improvments + + *New* Boost-style =StaticAssert= added. + Which is useful to catch invalid template sizes, for example. + + + Various containers now have C++0x-style =cbegin()=, =cend()= iterator methods. + + + Various containers now have STL-style =empty()= method, which may be more + readable and universal than =!size()= or =!valid()= conditions. + + + various containers now have an =xfer()= method for yielding their contents + to a corresponding =Xfer= class. + + +*** *New* Xfer class + Provides finer grained control over copying or transferring objects with + very little overhead. It can be used for any object that has a =transfer()= + method and a =operator=()= copy method. + Since it is decided upon construction of the =Xfer= object whether the + parameter is to be copied or transferred, the contents of the resulting + Xfer object can be transferred unconditionally. This greatly simplifies + defining constructors or methods in other classes with mixed + transfer/copy semantics without requiring 2^N different versions. + + + =xferCopy()=, =xferMove()= and =xferCopyTo()=, =xferMoveTo()= functions + to ease the use of the =Xfer= class. + +*** Convenience changes + + =IOobject= has a *new* constructor for creating an =IOobject= from a + single-path specification (eg, see =blockMesh -dict= option). + + + =argList= has *new* convenience methods for accessing options more directly: + =option()=, =optionFound()=, =optionLookup()=, =optionRead()=, + =optionReadIfPresent()= . + + + The *new* =readList(Istream&)= can read a bracket-delimited list or + handle a single value as a list of size 1. This can be a useful + convenience when processing command-line options. + + +*** Misc. improvements + + Improved consistency and interoperability between =face= and =triFace= classes. + + + =face::triangles()= can split and append to a =DynamicList= + + + =coordinateSystems= can access global systems (similar to =MeshObject=) + + + +** Turbulence modelling + + Major development of turbulence model libraries to give extra flexibility + at the solver level. For solvers that can support either RAS/LES + computations, the selection is made in the + /constant/turbulenceProperties/, + by setting the =simulationType= keyword to: + - =laminar= + - =RASModel= + - =LESModel= + + Depending on the selection, the model is the instantiated from /constant// + - /RASProperties/ + - /LESProperties/ + +**** RAS wall functions + Wall functions are now run-time selectable per patch for RAS. + +****** Velocity: + + Apply to turbulent viscosities =nut= or =mut= + + Apply to =k=, =Q=, =R= + + Apply to =epsilon=, =omega= + +****** Temperature: + + Apply to turbulent thermal diffusivity, =alphat= (compressible only) + +****** To apply wall functions: + + To recapture the functionality of previous OpenFOAM versions (v1.5 and + earlier) assign: + - for velocity: + - =nut=: =nutWallFunction= + - =mut=: =muWallFunction= + - =epsilon=: =epsilonWallFunction= + - =omega=: =omegaWallFunction= + - =k=, =Q=, =R=: =kQRWallFunction= + - for temperature: + - =alphat=: =alphatWallFunction= + + New =alphaSgsJayatillekeWallFunction= thermal wall function for + compressible LES + +**** *New* LES turbulence models + + Spalart-Allmaras DDES + + Spalart-Allmaras IDDES + +**** Upgrading: + + *New* utility - =applyWallFunctionBoundaryConditions= + + Solvers will automatically update existing cases + - New fields created based on the presence of the =nut/mut= field + - Boundary conditions include scoping, i.e compressibility:: for + compressible solvers + - Modified fields will be backed-up to /.old/ + + NOTE: + - Fields are only updated for those fields associated with the current + turbulence model selection, i.e. if fields exist for use with other + models, they will not be updated + - The new specification is not backwards compatible + +** Thermo-physical Models + + Old compressibility-based thermo package renamed + =basicThermo= \rightarrow =basicPsiThermo= + + *New* =basicRhoThermo= thermo package + - Additional density field stored + - General form - can be used for other types of media, e.g. liquids + - Additional polynomial-based thermodynamics + - Equation of state: =icoPolynomial= + - Transport: =polynomialTransport= + - Thermo: =hPolynomialThermo= + + Removed earlier hard-coding of gas thermophysics for chemistry modelling: + - =reactingMixture= now templated on thermo package + - =chemistryModel= now templated on thermo package + - =chemistrySolver= now templated on thermo package + + *New* =fvDOM= radition model + - finite volume, discrete ordinates method + + *New* (reinstated) =eThermo= thermodynamics package + - internal energy-based thermodynamics + +** Lagrangian + +**** Intermediate + - Overhaul of the underlying framework + - Reacting now split into reacting and reacting multiphase + - New structure for variable composition + - Many new sub-models, including: + - Injection + - =PatchInjection= - injection local to patch face cells + - =FieldActivatedInjection= - injection based on satisfying external + criterion + - LookupTableInjection - explicity define injection locations and all + parcel properties + - Post-processing + - patch post-processing - collect data for parcels impacting user + defined patches + - Patch interaction + - generalised behaviour for parcel interaction with patch + - Phase change + - liquid evaporation + +**** Coal combustion + - *New* library - extension of reacting-multiphase functionality + - Surface reaction/combustion models + +** Discrete methods - *New* library offering DSMC simulation functionality - see =dsmcFoam= below - *New* libraries offering molecular dynamics simulation functionality - see =mdFoam= and =mdEquilibrationFoam=: below. + +** *New* surfMesh library + Provides a more efficient storage mechanism than possible with =triSurface= + without restrictions on the shape of the face (templated parameter). + It will however take quite some time before it can fully replace + =triSurface= . + + + =MeshedSurface= class - with zero or more contiguous =surfZones= . + + + =UnsortedMeshedSurface= class - unordered surface zones + (as per =triSurface=) + + + =surfMesh= class - for reading/writing in native OpenFOAM format + + * Solver restructuring The upgrade to the turbulence models means that the simulation type, i.e. laminar, RAS or LES can be selected at run time. This has allowed a reduction @@ -148,7 +312,7 @@ - =rhoTurbFoam=, =coodles= \rightarrow =rhoPisoFoam= - =xoodles= \rightarrow absorbed into =XiFoam= - =buoyantFoam=, =lesBuoyantFoam= \rightarrow =buoyantPisoFoam= - - =interFoam=, rasInterFoam, =lesInterFoam= \rightarrow =interFoam= + - =interFoam=, =rasInterFoam=, =lesInterFoam= \rightarrow =interFoam= - =lesCavitatingFoam=, =rasCavitatingFoam= \rightarrow =cavitatingFoam= + Solvers which support LES only: - =channelOodles= \rightarrow =channelFoam= (LES) @@ -157,11 +321,22 @@ - pd to p ------------------------------------------------------------ [HENRY] - gravity ------------------------------------------------------------ [HENRY] +** Solver control improvments + Use dictionary entries instead of an =Istream= for the solver controls. + + This Allows dictionary substitutions and regular expressions in + /system/fvSolution/ + + + The old solver control syntax is still supported (warning emitted), but + the *new* =foamUpgradeFvSolution= utility can be used to convert + /system/fvSolution/ to the new format. + + * Tutorial restructuring to reflect solver application structure * Post-processing ---------------------------------------------------- [MATTIJS] - SAMPLING - improved plane, iso-surface handling + - Output to any surface geometry format supported by the =surfMesh= library. * *New* Solvers + =buoyantBoussinesqSimpleFoam= @@ -187,7 +362,7 @@ + =dsmcFoam= DSMC (Direct Simulation Monte-Carlo) solver for rarefied gas dynamics - simultions, able to simulate mixtures of an arbitrary number of gas species. + simulations, able to simulate mixtures of an arbitrary number of gas species. The variable hard sphere collision model with Larsen-Borgnakke internal energy redistribution (see "Molecular Gas Dynamics and the Direct Simulation of Gas Flows" G.A. Bird, 1994) is available; other run-time selectable @@ -210,21 +385,51 @@ * Function objects -*** *New* function objects: +** Improvements for function objects and time-looping + + The =functionObjectList= retains the order of the =functionObject= order, + which allows a chaining of operations. It is thus internally more + efficient when /system/controlDict/ uses =functions {..}= instead of + =functions (..)=, but both forms are supported. + + + The =functionObject= now has an additional =end()= method that is called + when =Time::loop()= or =Time::run()= determine that the time-loop exits. + Accordingly, one of these two idioms should be used in solver code: + 1. =while (runTime.loop() { ... }= + 2. =while (runTime.run()) { runTime++; ... }= + + + *New* - =functionObjectList= now tracks the SHA1 message digest of the + sub-directories. This avoids reloading a =functionObject= when + something unrelated in /system/controlDict/ changed. + +** *New* function objects: - =systemCall= - executes a list of system instructions - =fieldMinMax= - computes the min/max of a - =staticPressure= - converts kinematic pressure to static pressure - =dsmcFields= - calculates intensive fields (velocity and temperature) from averaged extensive fields (i.e. momentum and energy) -*** Usage +** Usage - Improved output control: =timeStep= or =outputTime= * Boundary conditions - Improved set of direct mapped boundary conditions - Buoyancy boundary condition ---------------------------------------- [HENRY] -* *New* utilities +* Utilities + +** Improvements + + =blockMesh= has a *new* =-dict= option for specifying an alternative + dictionary for the block mesh description. The '=convertToMeters=' entry + is now optional, and the alternative '=scale=' entry can be used for + less typing. + + + =foamToEnsight= has a *new* =-noPatches= option to suppress generation + of patches. + + + =foamToEnsightParts= has *new* =-noMesh= and =-index= options that can + be useful when post-processing results incrementally. + +** *New* utilities - =particleTracks= - generate particle tracks for lagrangian calculations - =dsmcInitialise= - preprocessing utility to create initial configurations of DSMC particles in a geometry @@ -233,3 +438,21 @@ - =interpolate= - performs fvc::interpolate() - =randomise= - randomises a by a given perturbation - =addSubtract= - simple add/subtract field functionality + +** Usage + + =timeSelector= can now combine =-time ranges= and =-latestTime= options. + More reliable behaviour for cases missing /constant// or /0// + directories. When the =-noZero= option is enabled, =-latestTime= will not + select the =0/= directory unless the =-zeroTime= option is given. + This helps avoid ill effects caused by accidentally using the + /0// directory in certain utilities (eg, =reconstructPar=). + +** Improvements to Paraview reader module + + =PV3FoamReader= added mesh region handling. The region name is parsed + from the filename. Eg, /case{region}.OpenFOAM/ + + + =paraFoam= with a *new* =-region= option for specifying an alternative + region. A *new* =-touch= option to generate the /.OpenFOAM/ file only. + Only creates (and removes) /.OpenFOAM/ files if they didn't already + exist, which is useful in connection with the =-touch= option. + From 8b9e7c2d3d504a0d8896aff710a9c80be37a3097 Mon Sep 17 00:00:00 2001 From: henry Date: Wed, 15 Jul 2009 11:23:37 +0100 Subject: [PATCH 4/4] Make formatting consistent. --- ReleaseNotes-1.6 | 241 ++++++++++++++++++----------------------------- 1 file changed, 93 insertions(+), 148 deletions(-) diff --git a/ReleaseNotes-1.6 b/ReleaseNotes-1.6 index b9330fac0a..6336192857 100644 --- a/ReleaseNotes-1.6 +++ b/ReleaseNotes-1.6 @@ -38,155 +38,120 @@ *** Regular Expressions The addition of regular expressions marks a major improvement in usability. - + *New* =regExp= class provides support for accessing POSIX extended regular - expresssions from within OpenFOAM. - See the manpages on your system (/man 7 regex/) for more information - about the extended regular expresssion syntax. Since entire strings are - matched, the =^= and =$= anchors are not required. - - + *New* =wordRe= class can contain a =word= or a =regExp= . - The match() method matches appropriately (as a =word= or as a =regExp=). - + expresssions from within OpenFOAM. See the manpages on your system (/man + 7 regex/) for more information about the extended regular expression + syntax. Since entire strings are matched, the =^= and =$= anchors are not + required. + + *New* =wordRe= class can contain a =word= or a =regExp= . The match() + method matches appropriately (as a =word= or as a =regExp=). + *New* =stringListOps= to search string lists based on regular expressions, =wordRe= or =wordReList= . - - + =Istream= and =Ostream= now retain backslashes when reading/writing strings. - The backslash continues to be used as an escape character for double-quote - and newline, but otherwise get passed through "as-is" without any other - special meaning (ie, they are /not/ C-style strings). This especially - helps with input/output of regular expressions. - + + =Istream= and =Ostream= now retain backslashes when reading/writing + strings. The backslash continues to be used as an escape character for + double-quote and newline, but otherwise get passed through "as-is" without + any other special meaning (ie, they are /not/ C-style strings). This + especially helps with input/output of regular expressions. *** Dictionary improvements/changes - + Dictionaries can use words (unquoted) or regular expressions (quoted) - for their keywords. When searching, an exact match has priority - over a regular expression match. - + + Dictionaries can use words (unquoted) or regular expressions (quoted) for + their keywords. When searching, an exact match has priority over a regular + expression match. + The default =#inputMode= is now '=merge=', which corresponds to the most - general usage. The =#inputMode warn= corresponds to the previous - default behaviour. - - + The *new* =#inputMode protect= can be used to conditionally merge default + general usage. The =#inputMode warn= corresponds to the previous default + behaviour. + + The *new* =#inputMode protect= can be used to conditionally merge default values into existing dictionaries. - + *New* =digest()= method to calculate and return the SHA1 message digest - *** Improved list containers + It is now possible to append a =UList= to an existing =List= or =DynamicList= . - + =DynamicList= is now much more flexible. It can be used with the - =append()= method, or with the =setSize()= method and =operator[]=, as - per =List= . =DynamicList= also has more methods for adjusting the - space allocated. - + =append()= method, or with the =setSize()= method and =operator[]=, as per + =List= . =DynamicList= also has more methods for adjusting the space + allocated. + =SortableList= now uses stable sort and allows =reverseSort()= as well. =SortableList= is also more versatile - the indices mostly remain - unallocated until they are required in the =sort()= method. - The sort indices can be deallocated with the =shrink()= method. - Works as expected with =transfer()= and assignment from other lists. - + unallocated until they are required in the =sort()= method. The sort + indices can be deallocated with the =shrink()= method. Works as expected + with =transfer()= and assignment from other lists. + Specialization for =UList::operator[](..) const= to return =false= for out-of-range elements. This allows lazy evaluation with no noticeable change in performance. - - + =PackedList= has much better performance, *new* lazy evaluation and - *new* auto-vivify of elements on assignment. Any auto-vivified - elements will also flood-fill the gaps with zero. The =append()= method - can be used like in =DynamicList= to append a single element. The =set()= - method can be used like in =labelHashSet= . - A =PackedBoolList= can thus replace =labelHashSet= in many places. - + + =PackedList= has much better performance, *new* lazy evaluation and *new* + auto-vivify of elements on assignment. Any auto-vivified elements will + also flood-fill the gaps with zero. The =append()= method can be used + like in =DynamicList= to append a single element. The =set()= method can + be used like in =labelHashSet= . A =PackedBoolList= can thus replace + =labelHashSet= in many places. + *New* =UIndirectList= for an indirect list without storing the addressing. - *** New hashing algorithms + Bob Jenkins' hash routine for performance improvement (5-10% faster for string hashing than the previous algorithm) and fewer collisions. - + SHA1 hashing and SHA1 message digests (NIST specification FIPS-180-1) - added. The SHA1 digest provides a compact (20 bytes) means of - determining if the contents of an object have changed. The *new* - =OSHA1stream= class can be used to calculate SHA1 digests for anything - that can write to an output stream. - + added. The SHA1 digest provides a compact (20 bytes) means of determining + if the contents of an object have changed. The *new* =OSHA1stream= class + can be used to calculate SHA1 digests for anything that can write to an + output stream. *** HashTable/HashSet improvements + Performance improvements for querying on empty tables - - + The =erase()= method can take a list of keys or the keys from any - another =HashTable=/=HashSet= . - - + =HashSet= has an =operator[]() const= that allows the same syntax - to be used for =boolList=, =PackedBoolList= and =labelHashSet= . - + + The =erase()= method can take a list of keys or the keys from any another + =HashTable=/=HashSet= . + + =HashSet= has an =operator[]() const= that allows the same syntax to be + used for =boolList=, =PackedBoolList= and =labelHashSet= . + =HashSet has additional operators '+=', '-=', '&=' to add, remove or intersect keys, respectively. - *** Improved bool/Switch - + The =Switch= class has reduced the storage to be on par with =bool= . - It is now more flexible and behaves much more like a =bool= . - + + The =Switch= class has reduced the storage to be on par with =bool= . It + is now more flexible and behaves much more like a =bool= . + The IO for =bool= uses =Switch= internally for reading, so the end-user doesn't need to know if a particular class used =bool= or =Switch= . - *** Miscellaneous container class improvments - + *New* Boost-style =StaticAssert= added. - Which is useful to catch invalid template sizes, for example. - - + Various containers now have C++0x-style =cbegin()=, =cend()= iterator methods. - + + *New* Boost-style =StaticAssert= added. Which is useful to catch invalid + template sizes, for example. + + Various containers now have C++0x-style =cbegin()=, =cend()= iterator + methods. + Various containers now have STL-style =empty()= method, which may be more readable and universal than =!size()= or =!valid()= conditions. - + various containers now have an =xfer()= method for yielding their contents to a corresponding =Xfer= class. - *** *New* Xfer class Provides finer grained control over copying or transferring objects with very little overhead. It can be used for any object that has a =transfer()= - method and a =operator=()= copy method. - Since it is decided upon construction of the =Xfer= object whether the - parameter is to be copied or transferred, the contents of the resulting - Xfer object can be transferred unconditionally. This greatly simplifies - defining constructors or methods in other classes with mixed - transfer/copy semantics without requiring 2^N different versions. - - + =xferCopy()=, =xferMove()= and =xferCopyTo()=, =xferMoveTo()= functions - to ease the use of the =Xfer= class. + method and a =operator=()= copy method. Since it is decided upon + construction of the =Xfer= object whether the parameter is to be copied or + transferred, the contents of the resulting Xfer object can be transferred + unconditionally. This greatly simplifies defining constructors or methods in + other classes with mixed transfer/copy semantics without requiring 2^N + different versions. + + =xferCopy()=, =xferMove()= and =xferCopyTo()=, =xferMoveTo()= functions to + ease the use of the =Xfer= class. *** Convenience changes + =IOobject= has a *new* constructor for creating an =IOobject= from a single-path specification (eg, see =blockMesh -dict= option). - - + =argList= has *new* convenience methods for accessing options more directly: - =option()=, =optionFound()=, =optionLookup()=, =optionRead()=, + + =argList= has *new* convenience methods for accessing options more + directly: =option()=, =optionFound()=, =optionLookup()=, =optionRead()=, =optionReadIfPresent()= . - - + The *new* =readList(Istream&)= can read a bracket-delimited list or - handle a single value as a list of size 1. This can be a useful - convenience when processing command-line options. - + + The *new* =readList(Istream&)= can read a bracket-delimited list or handle + a single value as a list of size 1. This can be a useful convenience when + processing command-line options. *** Misc. improvements + Improved consistency and interoperability between =face= and =triFace= classes. - + =face::triangles()= can split and append to a =DynamicList= - + =coordinateSystems= can access global systems (similar to =MeshObject=) - - ** Turbulence modelling + Major development of turbulence model libraries to give extra flexibility at the solver level. For solvers that can support either RAS/LES - computations, the selection is made in the - /constant/turbulenceProperties/, + computations, the selection is made in the /constant/turbulenceProperties/, by setting the =simulationType= keyword to: - =laminar= - =RASModel= @@ -197,17 +162,15 @@ **** RAS wall functions Wall functions are now run-time selectable per patch for RAS. + + Velocity: + - Apply to turbulent viscosities =nut= or =mut= + - Apply to =k=, =Q=, =R= + - Apply to =epsilon=, =omega= + + Temperature: + - Apply to turbulent thermal diffusivity, =alphat= (compressible only) -****** Velocity: - + Apply to turbulent viscosities =nut= or =mut= - + Apply to =k=, =Q=, =R= - + Apply to =epsilon=, =omega= - -****** Temperature: - + Apply to turbulent thermal diffusivity, =alphat= (compressible only) - -****** To apply wall functions: - + To recapture the functionality of previous OpenFOAM versions (v1.5 and + + To apply wall functions: + - To recapture the functionality of previous OpenFOAM versions (v1.5 and earlier) assign: - for velocity: - =nut=: =nutWallFunction= @@ -217,7 +180,7 @@ - =k=, =Q=, =R=: =kQRWallFunction= - for temperature: - =alphat=: =alphatWallFunction= - + New =alphaSgsJayatillekeWallFunction= thermal wall function for + - New =alphaSgsJayatillekeWallFunction= thermal wall function for compressible LES **** *New* LES turbulence models @@ -259,10 +222,10 @@ ** Lagrangian **** Intermediate - - Overhaul of the underlying framework - - Reacting now split into reacting and reacting multiphase - - New structure for variable composition - - Many new sub-models, including: + + Overhaul of the underlying framework + + Reacting now split into reacting and reacting multiphase + + New structure for variable composition + + Many new sub-models, including: - Injection - =PatchInjection= - injection local to patch face cells - =FieldActivatedInjection= - injection based on satisfying external @@ -278,30 +241,24 @@ - liquid evaporation **** Coal combustion - - *New* library - extension of reacting-multiphase functionality + + *New* library - extension of reacting-multiphase functionality - Surface reaction/combustion models ** Discrete methods - - *New* library offering DSMC simulation functionality - see =dsmcFoam= + + *New* library offering DSMC simulation functionality - see =dsmcFoam= below - - *New* libraries offering molecular dynamics simulation functionality - see + + *New* libraries offering molecular dynamics simulation functionality - see =mdFoam= and =mdEquilibrationFoam=: below. - ** *New* surfMesh library Provides a more efficient storage mechanism than possible with =triSurface= - without restrictions on the shape of the face (templated parameter). - It will however take quite some time before it can fully replace - =triSurface= . - + without restrictions on the shape of the face (templated parameter). It will + however take quite some time before it can fully replace =triSurface= . + =MeshedSurface= class - with zero or more contiguous =surfZones= . - - + =UnsortedMeshedSurface= class - unordered surface zones - (as per =triSurface=) - + + =UnsortedMeshedSurface= class - unordered surface zones (as per + =triSurface=) + =surfMesh= class - for reading/writing in native OpenFOAM format - * Solver restructuring The upgrade to the turbulence models means that the simulation type, i.e. laminar, RAS or LES can be selected at run time. This has allowed a reduction @@ -318,48 +275,41 @@ - =channelOodles= \rightarrow =channelFoam= (LES) * General changes - - pd to p ------------------------------------------------------------ [HENRY] - - gravity ------------------------------------------------------------ [HENRY] + + pd to p ------------------------------------------------------------ [HENRY] + + gravity ------------------------------------------------------------ [HENRY] ** Solver control improvments Use dictionary entries instead of an =Istream= for the solver controls. + This Allows dictionary substitutions and regular expressions in /system/fvSolution/ - + The old solver control syntax is still supported (warning emitted), but the *new* =foamUpgradeFvSolution= utility can be used to convert /system/fvSolution/ to the new format. - * Tutorial restructuring to reflect solver application structure * Post-processing ---------------------------------------------------- [MATTIJS] - - SAMPLING - improved plane, iso-surface handling - - Output to any surface geometry format supported by the =surfMesh= library. + + SAMPLING - improved plane, iso-surface handling + + Output to any surface geometry format supported by the =surfMesh= library. * *New* Solvers + =buoyantBoussinesqSimpleFoam= Steady state heat transfer solver using a Boussinesq approximation for buoyancy, with laminar, RAS or LES turbulence modelling - + =buoyantBoussinesqPisoFoam= Transient heat transfer solver using a Boussinesq approximation for buoyancy, with laminar, RAS or LES turbulence modelling - + =coalChemistryFoam= Transient, reacting lagrangian solver, employing a coal cloud and a thermo cloud, with chemistry, and laminar, RAS or LES turbulence modelling - + =porousExplicitSourceReactingParcelFoam= Transient, reacting lagrangian solver, employing a single phase reacting cloud, with porous media, explicit mass sources, and laminar, RAS or LES turbulence modelling - + =rhoReactingFoam= Density-based thermodynamics variant of the reactingFoam solver, i.e. now applicable to liquid systems - + =dsmcFoam= DSMC (Direct Simulation Monte-Carlo) solver for rarefied gas dynamics simulations, able to simulate mixtures of an arbitrary number of gas species. @@ -377,7 +327,6 @@ molecules interact with short-range dispersion forces and pairwise electrostatic interactions using methods described in: Fennell and Gezelter, J. Chem. Phys. 124, 234104 (2006) - + =mdEquilibrationFoam= Similar to mdFoam, but employs velocity scaling to adjust the simulation temperature to a target value. Useful to equilibrate a case before @@ -390,30 +339,28 @@ which allows a chaining of operations. It is thus internally more efficient when /system/controlDict/ uses =functions {..}= instead of =functions (..)=, but both forms are supported. - + The =functionObject= now has an additional =end()= method that is called when =Time::loop()= or =Time::run()= determine that the time-loop exits. Accordingly, one of these two idioms should be used in solver code: 1. =while (runTime.loop() { ... }= 2. =while (runTime.run()) { runTime++; ... }= - + *New* - =functionObjectList= now tracks the SHA1 message digest of the sub-directories. This avoids reloading a =functionObject= when something unrelated in /system/controlDict/ changed. ** *New* function objects: - - =systemCall= - executes a list of system instructions - - =fieldMinMax= - computes the min/max of a - - =staticPressure= - converts kinematic pressure to static pressure - - =dsmcFields= - calculates intensive fields (velocity and temperature) from + + =systemCall= - executes a list of system instructions + + =fieldMinMax= - computes the min/max of a + + =staticPressure= - converts kinematic pressure to static pressure + + =dsmcFields= - calculates intensive fields (velocity and temperature) from averaged extensive fields (i.e. momentum and energy) ** Usage - - Improved output control: =timeStep= or =outputTime= + + Improved output control: =timeStep= or =outputTime= * Boundary conditions - - Improved set of direct mapped boundary conditions - - Buoyancy boundary condition ---------------------------------------- [HENRY] + + Improved set of direct mapped boundary conditions + + Buoyancy boundary condition ---------------------------------------- [HENRY] * Utilities @@ -430,14 +377,14 @@ be useful when post-processing results incrementally. ** *New* utilities - - =particleTracks= - generate particle tracks for lagrangian calculations - - =dsmcInitialise= - preprocessing utility to create initial configurations of + + =particleTracks= - generate particle tracks for lagrangian calculations + + =dsmcInitialise= - preprocessing utility to create initial configurations of DSMC particles in a geometry *** *New* foamCalc functions - - =interpolate= - performs fvc::interpolate() - - =randomise= - randomises a by a given perturbation - - =addSubtract= - simple add/subtract field functionality + + =interpolate= - performs fvc::interpolate() + + =randomise= - randomises a by a given perturbation + + =addSubtract= - simple add/subtract field functionality ** Usage + =timeSelector= can now combine =-time ranges= and =-latestTime= options. @@ -450,9 +397,7 @@ ** Improvements to Paraview reader module + =PV3FoamReader= added mesh region handling. The region name is parsed from the filename. Eg, /case{region}.OpenFOAM/ - + =paraFoam= with a *new* =-region= option for specifying an alternative region. A *new* =-touch= option to generate the /.OpenFOAM/ file only. Only creates (and removes) /.OpenFOAM/ files if they didn't already exist, which is useful in connection with the =-touch= option. -