A number of bugs have been fixed relating to cases in which multiple NCC
patches are locally edge-connected, and/or are edge-connected across a
processor boundary.
Non-named unit conversions are now written in a single set of square
brackets, with colons used to separate the sets of exponents and
multipliers. So, for example, a named unit conversion of [rpm] gets
converted to a non-named [0 0 -1 0 0 0 0 : 0 1 : 0.10472] (i.e.,
[time^-1 : angle : 0.10472]).
Previously, multiple sets of square brackets were used to separate the
sections, so the above example would have been written as
[0 0 -1 0 0 0 0][0 1][0.10472]. The problem with this is that '][' is
not distinguished in the token parser from '] ['. Combined with the fact
that the later sections are optional, this makes reading pairs or lists
of these objects impossible. The new format is, by comparison,
unambiguously delimited in all contexts.
This change may break the restart of a case in which unit conversion
entries have been written out. It is unlikely to require modification to
an initial configuration as named unit conversion entries (such as [rpm]
and [MPa] and [l/min]) are unaffected.
This prevents inconsistent field data being cached.
Note that the stitcher still does not cause old-time fields to be
stored. Stitching is not considered an update (in time) to a field's
value. It is a pure mapping, and it applies similarly to both current
and old-time fields.
Resolves bug report https://bugs.openfoam.org/view.php?id=4155
Residuals are only available once some equations have been solved, so it
is not valid for this function to execute until the end of the first
timestep.
This also prevents a bug in which the residuals function trggers the
construction of a Residuals mesh object during the writing of the file
header. This only happens on the master process, and therefore leads to
the master having more objects in its database than the other processes.
If this results in the object table being resized then this can change
the iteration order, which can in turn break mapping procedures (in NCC,
topology change, mesh-to-mesh mapping, ...) which rely on fields being
accessed from the database in a consistent order.
The 'select' control can now take the value 'patches' in which case a
'patches' control will be used to specify a list of patches, rather than
just a single patch. The 'patches' and 'patch' controls now also both
support wildcards.
codeStream (#calc etc.) creates a local sub-dictionary in which to expand the
code so variable lookup needs to be checked with respect to the context
dictionary rather than with respect to the code sub-dictionary. With this
change the following test/dictionary/testCalc #calc example now works:
a 1.1;
d
{
b 4.8;
}
// Access to higher-level sub-entries using the "../" operators, e.g.
f
{
g #calc "$a / $../d/b";
}
These functions calculate the specie-flux and write it as a
surfaceScalarField called 'specie<Type>Flux(<specieName>)'. There are
three such functions; specieAdvectiveFlux and specieDiffusiveFlux return
the advective and diffusive parts of the flux, respectively, and
specieFlux returns the total combined flux.
Example of function object specification:
specieFlux
{
type specieFlux; // specieAdvectiveFlux, specieDiffusiveFlux
libs ("libfieldFunctionObjects.so");
field NH3;
}
Or, using the standard configuration:
#includeFunc specieFlux(NH3)
The option to specify rpm as the keyword is deprecated in favour of
specifying omega with a unit conversion from [rpm]. The documentation
for the omega input classes have been updated to reflect this.
Due to rounding to the nearest value it is possible for the updated time name to
predate the previous time name after a precision change, for example as a
consequence of a sudden reduction in time-step. This is not an error and should
not cause the run to stop but the user is warned about the temporary anomaly in
the printing of time.
The fvModels directory has been reorganised into separate libraries to make it
easier to add and maintain new complex models such as the propellerDisk.
Class
Foam::fv::propellerDisk
Description
Disk momentum source which approximates a propeller based on a given
propeller curve.
Reference:
\verbatim
Hough, G. R., & Ordway, D. E. (1964).
The generalized actuator disk.
Developments in theoretical and applied mechanics, 2, 317-336.
\endverbatim
Usage
Example usage:
\verbatim
diskSource
{
type propellerDisk;
selectionMode cellZone;
cellZone propeller;
diskNormal (1 0 0); // Normal direction of the disk
n 26.03; // Rotation speed [1/s]
dPropeller 0.203; // Propeller diameter
dHub 0.039179; // Hub diameter
propellerCurve
{
type table;
// J Kt Kq
values
(
(0.10 (0.3267 0.03748))
(0.15 (0.3112 0.03629))
(0.20 (0.2949 0.03500))
(0.25 (0.2777 0.03361))
(0.30 (0.2598 0.03210))
(0.35 (0.2410 0.03047))
(0.40 (0.2214 0.02871))
(0.45 (0.2010 0.02682))
(0.50 (0.1798 0.02479))
(0.55 (0.1577 0.02261))
(0.60 (0.1349 0.02027))
(0.65 (0.1112 0.01777))
(0.70 (0.0867 0.01509))
(0.75 (0.0614 0.01224))
(0.80 (0.0353 0.00921))
);
}
}
\endverbatim
This update allows Zoltan to be used by snappyHexMesh to redistribute the mesh
after refinement and sub-setting even if some processors loose all their cells
in the process.
Poly-mesh mesh objects are now in a subdirectory of the polyMesh
directory. The cpuLoad object has been made a polyMesh object, rather
than an fvMesh object, in order to remove the dependence on the finite
volume library. This has, in turn, removed the base lagrangian library's
dependence on finite volume.
Note that this fvModel provides the missing conservative redistribution term for
the viscous heating, the main part of the viscous heating effect is provided by
the inclusion of the kinetic energy equation in the internal energy equation to
form the total energy equation.
This enables the correct solution of FV-motion fields during mesh
updates when the mesh is in an unstitched state.
Resolves bug report https://bugs.openfoam.org/view.php?id=4101
ParMETIS cannot handle processors containing no cells, a fatal error is
generated, to work around this limitation a special communicator is created
containing only those processors which have cells and ParMETIS called only for
those processors.
This update allows ParMETIS to be used by snappyHexMesh to redistribute the mesh
after refinement and sub-setting even if some processors loose all their cells
in the process.