The function evaluate was returning true every outer loop, triggering
the re-calculation of ddt0 in every outer loop.
The evaluation of the term ddt0 should be performed once per time step.
The corrected function updates the timeIndex of ddt0 to avoid the
re-evaluation of this term in the outer loops.
- improves flexibility. Can tag a tmp as allowing non-const access to
the reference and skip additional const_cast in following code. For
example,
tmp<volScalarField> tfld(nullptr);
auto* ptr = getObjectPtr<volScalarField>("field");
if (ptr)
{
tfld.ref(*ptr);
}
else
{
tfld.reset(volScalarField::New(...));
}
auto& fld = tfld.ref();
ENH: renamed tmpNrc to refPtr
- the name 'refPtr' (reference|pointer) should be easier to remember
than tmpNrc (tmp, but non-ref-counted).
- provide tmpNrc typedef and header for code compatibility
NOTE
- in some places refPtr and tmp can be used instead of a
std::reference_wrapper for handling external references.
Unlike std::reference_wrapper, it can be default constructed
(holding nothing), whereas reference_wrapper may need a dummy
reference. However, the lifetime extension of references _may_ be
better with reference_wrapper.
- previously this was marked as '= delete' for consistency with
assignment from an empty pointer being a runtime error.
However, these can be considered semantically different and it makes
sense to permit this as equivalent to reset(nullptr).
This change does not break existing code since the operator was
previously unavailable (deleted).
STYLE: refactor tmp operator=(T*)
- delegate to reset() after initial checks
- Previously considered to be valid() if it was any reference
(null or non-null) or a non-null pointer.
This appears to be a holdover from old code (pre-2015) where
reinterpret_cast<..>(0) was used instead of the NullObject.
A reference via a null pointer isn't really possible anywhere. Even
for things like labelList::null(), they now use the NullObject,
which has a non-zero memory location.
- now simply check for a non-zero memory address. Regardless of
pointer or referenced object.
- combine reset() methods by adding a default parameter
- improve top-level visibility of empty/valid/get methods for symmetry
symmetry with autoPtr, future adjustment
- with '&&' conditions, often better to check for non-null autoPtr
first (it is cheap)
- check as bool instead of valid() method for cleaner code, especially
when the wrapped item itself has a valid/empty or good.
Also when handling multiple checks.
Now
if (ptr && ptr->valid())
if (ptr1 || ptr2)
instead
if (ptr.valid() && ptr->valid())
if (ptr1.valid() || ptr2.valid())
- This reflects the pre-existing coding situation where const_cast was
used throughout to effect the same.
STYLE: fix private/protected access
- CodedField, codedMixedFvPatchField
- libs() singleton method for global library handling
- explicit handling of empty filename for dlLibraryTable open/close.
Largely worked before, but now be more explicit about its behaviour.
- add (key, dict) constructor and open() methods.
More similarity to dimensionedType, Enum etc, and there is no
ambiguity with the templated open().
- construct or open from initializer_list of names
- optional verbosity when opening with auxiliary table,
avoid duplicate messages or spurious messages for these.
- basename and fullname methods (migrated from dynamicCode).
- centralise low-level load/unload hooks
- adjust close to also dlclose() aliased library names.
This is for a very specific use case where the faceZones are
imprinted after meshing the normal geometry. This sometimes
splits off badly connected bits of the mesh. One way to remove
these is to use e.g. subsetMesh. This embeds the
same functionality inside snappyHexMesh.
- replace `%namespace` directive with simpler `%static` directive.
We always encapsulate Lemon parser routines in an anonymous
namespace, so a simpler static linkage directive suffices.
This reduces the size of the Lemon patch (program and template).
- makes it easier to distinguish between pointers referring to pool
data versus pointers actually holding storage, avoids
manual demand-driven deletion and autoPtr.
ENH: simplify/improve Pstream profiling
- times now double (not scalar) for consistency with what cpuTime
delivers
- use bool to track suspend state
- When OpenFOAM is under git control and a 'debian/' directory exists,
this could mean two things:
1) Additional debian control has been added to OpenFOAM
2) OpenFOAM has been imported into a debian project
For the case that OpenFOAM has been imported into a debian project,
using the git information would be highly misleading. There will be no
OpenFOAM SHA1 correspondence.
However, if additional debian control has been added to OpenFOAM the
SHA1 will be valid.
The ad hoc solution is to use an additional "openfoam.debian"
directory to flag the addition of debian controls into openfoam.
When a "debian/" directory exists without a "openfoam.debian", assume
that the OpenFOAM has been imported into debian and do not use the SHA1.