This fixes a crash that occured when the field that the fvModel applies
to does not exist at the point of the fvModel's construction. This is
the case for function objects that solve equations, e.g., the
scalarTransport or age functions, as the relevant fields are constructed
on demand at the point of the functions' execution. Sources and
constraints now work correctly for these sorts of equations.
Changed the laminar methane combustion cases to use the Wilke mixing rule for
the transport properties obtained from the Sutherland model but with coefficient
mixing for thermodynamic properties for efficient evaluation of reaction
equilibria.
This provides significantly more accurate results for laminar combustion,
producing a thinner flame and a 10K reduction in peak temperature.
used to check the existence of and open an object file, read and check the
header without constructing the object.
'typeIOobject' operates in an equivalent and consistent manner to 'regIOobject'
but the type information is provided by the template argument rather than via
virtual functions for which the derived object would need to be constructed,
which is the case for 'regIOobject'.
'typeIOobject' replaces the previous separate functions 'typeHeaderOk' and
'typeFilePath' with a single consistent interface.
Robustness improvements have been made to the "behind" system which
prevents the tracking system from hanging. Addition protections have
also been added to prevent division by subnormal numbers and associated
floating point errors.
Warning messages for faces which cannot be tetrahedralised with purely
positive tetrahedra are now generated once per face at each timestep.
This means they do not fill the log if the same face is encountered
multiple times, and they are also are visible throughout a log.
now all path functions in 'IOobject' are either templated on the type or require a
'globalFile' argument to specify if the type is case global e.g. 'IOdictionary' or
decomposed in parallel, e.g. almost everything else.
The 'global()' and 'globalFile()' virtual functions are now in 'regIOobject'
abstract base-class and overridden as required by derived classes. The path
functions using 'global()' and 'globalFile()' to differentiate between global
and processor local objects are now also in 'regIOobject' rather than 'IOobject'
to ensure the path returned is absolutely consistent with the type.
Unfortunately there is still potential for unexpected IO behaviour inconsistent
with the global/local nature of the type due to the 'fileOperation' classes
searching the processor directory for case global objects before searching the
case directory. This approach appears to be a work-around for incomplete
integration with and rationalisation of 'IOobject' but with the changes above it
is no longer necessary. Unfortunately this "up" searching is baked-in at a low
level and mixed-up with various complex ways to pick the processor directory
name out of the object path and will take some unravelling but this work will
undertaken as time allows.
for local and global files so that the reading and writing of local files to
processor directories and global files to the case directory are consistent.
to the <case>/<time>/uniform or <case>/<processor>/<time>/uniform directory.
Adding a new form of IOdictionary for this purpose allows significant
simplification and rationalisation of regIOobject::writeObject, removing the
need for explicit treatment of different file types.
so that in parallel time-dependent global objects are written to the
processor?/<time>/uniform directory and constant global objects are written to
the case/constant directory.