Commit Graph

729 Commits

Author SHA1 Message Date
61f9131389 functionObject: Improved handling of #includeFunc arguments
adding support for argument substitution into sub-dictionaries for
e.g. pressureDifferencePatch, white space before, in and after the argument list
and continuation lines, for example:

functions
{
    #includeFunc flowRatePatch(name=inlet)
    #includeFunc flowRatePatch ( name = outlet )

    #includeFunc pressureDifferencePatch \
    (                   \
        patch1 = inlet, \
        patch2 = outlet \
    )

    #includeFunc yPlus
    #includeFunc  residuals
}
2019-08-09 12:40:00 +01:00
f65f1d6883 regIOobjectRead: Corrected handling of dictionary files declared as type dictionary 2019-08-08 20:59:19 +01:00
33d6d49321 foamDictionary: Simplified the handling of the dictionary file type
Also added the header separator comment for serial operation.
2019-08-08 15:41:44 +01:00
ccb0f5b7b2 cut: Symmetric operation when levels are all zero 2019-07-31 14:17:08 +01:00
22bba48722 Field: Corrected handling of unrefinement self-mapping of field
Resolves bug-report https://bugs.openfoam.org/view.php?id=3316
2019-07-26 11:38:03 +01:00
824b243ee8 GeometricField: Removed unimplemented member function prototypes 2019-07-25 10:49:06 +01:00
eef560b883 objectRegistry: Added member function to query and add to the cached temporary objects list 2019-07-23 11:45:53 +01:00
fdf1216ef5 objectRegistry: Added support for optionally caching temporary objects
which provides a very convenient mechanism to process and write any temporary
fields created during a time-step, either within models the construction of
equations and matrices or any other intermediate processing step within an
OpenFOAM application.  The cached fields can relate to physical properties in
models, e.g. the generation term or other terms in the turbulence models, or
numerical, e.g. the limiters used on convection schemes.  This mechanism
provides a new very powerful non-intrusive way of analysing the internals of an
OpenFOAM application for diagnosis and general post-processing which cannot be
easily achieved by any other means without adding specific diagnostics code to
the models or interest and recompiling.

For example to cache the kEpsilon:G field in
tutorials/incompressible/simpleFoam/pitzDaily add the dictionary entry

cacheTemporaryObjects
(
    grad(k)
    kEpsilon:G
);

to system/controlDict and to write the field add a writeObjects entry to the
functions list:

functions
{
    writeCachedObjects
    {
        type        writeObjects;
        libs        ("libutilityFunctionObjects.so");

        writeControl writeTime;
        writeOption anyWrite;

        objects
        (
            grad(k)
            kEpsilon:G
        );
    }

    #includeFunc streamlines
}

If a name of a field which in never constructed is added to the
cacheTemporaryObjects list a waning message is generated which includes a useful
list of ALL the temporary fields constructed during the time step, e.g. for the
tutorials/incompressible/simpleFoam/pitzDaily case:

--> FOAM Warning : Could not find temporary object dummy in registry region0
Available temporary objects
81
(
(((0.666667*C1)-C3)*div(phi))
div(phi)
(interpolate(nuEff)*magSf)
surfaceIntegrate(phi)
(interpolate(DepsilonEff)*magSf)
((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)
grad(p)
((interpolate(nuEff)*magSf)*snGradCorr(U))
(interpolate((1|((1|(1|A(U)))-H(1))))*magSf)
((1|((1|(1|A(U)))-H(1)))-(1|A(U)))
((Cmu*sqr(k))|epsilon)
interpolate(HbyA)
interpolate(DkEff)
interpolate(U)
phiHbyA
weights
div(((interpolate((1|((1|(1|A(U)))-H(1))))*magSf)*snGradCorr(p)))
(phiHbyA-flux(p))
MRFZoneList:acceleration
average(interpolate(max(epsilon,epsilonMin)))
div(((interpolate(DepsilonEff)*magSf)*snGradCorr(epsilon)))
nuEff
kEpsilon:G
grad(k)
interpolate((1|((1|(1|A(U)))-H(1))))
(nuEff*dev2(T(grad(U))))
grad(U)
interpolate(epsilon)
(phi*linearUpwind::correction(U))
((interpolate(DepsilonEff)*magSf)*snGradCorr(epsilon))
grad(k)Cached
(HbyA-((1|((1|(1|A(U)))-H(1)))*grad(p)))
pos0(phi)
-div((nuEff*dev2(T(grad(U)))))
H(1)
interpolate(k)
((nut|sigmak)+nu)
snGrad(p)
(0.666667*div(phi))
surfaceIntegrate(((interpolate((1|((1|(1|A(U)))-H(1))))*magSf)*snGradCorr(p)))
DepsilonEff
(1|A(U))
surfaceIntegrate(((interpolate(DepsilonEff)*magSf)*snGradCorr(epsilon)))
limitedLinearLimiter(epsilon)
surfaceIntegrate(((interpolate(DkEff)*magSf)*snGradCorr(k)))
grad(epsilon)
(interpolate(DkEff)*magSf)
div(((interpolate(DkEff)*magSf)*snGradCorr(k)))
surfaceSum(magSf)
((1|A(U))-(1|((1|(1|A(U)))-H(1))))
(1|((1|(1|A(U)))-H(1)))
((interpolate((1|((1|(1|A(U)))-H(1))))*magSf)*snGradCorr(p))
mag(div(phi))
surfaceSum((magSf*interpolate(max(epsilon,epsilonMin))))
interpolate(DepsilonEff)
-grad(p)
snGradCorr(p)
interpolate(p)
interpolate(max(epsilon,epsilonMin))
dev(twoSymm(grad(U)))
surfaceIntegrate((phi*linearUpwind::correction(U)))
(magSf*interpolate(max(epsilon,epsilonMin)))
limitedLinearLimiter(k)
(nut+nu)
HbyA
max(epsilon,epsilonMin)
surfaceIntegrate(((interpolate(nuEff)*magSf)*snGradCorr(U)))
surfaceIntegrate(phiHbyA)
DkEff
(((C1*kEpsilon:G)*epsilon)|k)
(mag(S)+2.22507e-308)
(((1|A(U))-(1|((1|(1|A(U)))-H(1))))*grad(p))
((nut|sigmaEps)+nu)
((interpolate(DkEff)*magSf)*snGradCorr(k))
(nut*(dev(twoSymm(grad(U)))&&grad(U)))
interpolate(nuEff)
((C2*epsilon)|k)
interpolate((nuEff*dev2(T(grad(U)))))
(epsilon|k)
div(phiHbyA)
div(((interpolate(nuEff)*magSf)*snGradCorr(U)))
)

Multiple regions are also supported by specifying individual region names in a
cacheTemporaryObjects dictionary, e.g. in the
tutorials/heatTransfer/chtMultiRegionFoam/heatExchanger case

cacheTemporaryObjects
{
    air
    (
        kEpsilon:G
    );

    porous
    (
        porosityBlockage:UNbr
    );
}

functions
{
    writeAirObjects
    {
        type        writeObjects;
        libs        ("libutilityFunctionObjects.so");

        region      air;
        writeControl writeTime;
        writeOption anyWrite;

        objects     (kEpsilon:G);
    }

    writePorousObjects
    {
        type        writeObjects;
        libs        ("libutilityFunctionObjects.so");

        region      porous;
        writeControl writeTime;
        writeOption anyWrite;

        objects     (porosityBlockage:UNbr);
    }
}
2019-07-22 10:31:36 +01:00
01da12c1f6 IOobject: Added modelName member function
which constructs the name for a field property associated with the model by
pre-pending the given field name with <modelType>: e.g. the generation term in
the kEpsilon model is named kEpsilon:G
2019-07-22 10:19:13 +01:00
1769c87804 GeometricField: Added another New temporary field constructor 2019-07-18 11:37:10 +01:00
163324d837 foamDictionary: Added support for the new dictionary "slash" syntax
Maintains backward compatibility with the current "dot" syntax.
2019-07-11 19:43:40 +01:00
b7c0cdefce dictionary: Added support for absolute paths when reading dictionaries referred to within keywords
For example in the combustion/coldEngineFoam/freePiston/0/p field the
internalField entry may be obtained from the include/caseSettings dictionary
using either a relative path:

    internalField   uniform $include/caseSettings!internalField/p;

or an absolute path:

    internalField   uniform ${$FOAM_CASE/0/include/caseSettings!internalField/p};

in which recursive substitution using ${...} is applied to expand the $FOAM_CASE
environment variable.
2019-07-11 09:46:42 +01:00
c4a61bb8ac dictionary: Read dictionaries referred to within keywords relative to the directory of the current dictionary
Special handling for absolute paths will be added.
2019-07-11 00:22:17 +01:00
cd910ed6b8 dictionary::inputSyntaxEntry: Completed support for specifying the default syntax in etc/controlDict 2019-07-11 00:16:30 +01:00
b3d61748a6 dictionary: Added support for directly reading entries from other dictionary files
In order to avoid conflict with the use of ':' in model-specific fields,
e.g. "thermo:rho", in the "slash" syntax the '!' character is now used to refer
to the top-level dictionary.

If there is a part of the keyword before the '!' then this is taken to be the
file name of the dictionary from which the entry will be looked-up using the
part of the keyword after the '!'.

For example, given a dictionary file named testSlashDict2:

internalField 5.6;

active
{
    type            fixedValue;
    value.air       $internalField;
}

it is now possible to read entries from it directly in the dictionary file testSlashDict:

external
{
    value $testSlashDict2!active/value.air;
}

active2
{
    $testSlashDict2!active;
}

which expands to

external
{
    value           5.6;
}

active2
{
    type            fixedValue;
    value.air       5.6;
}
2019-07-10 15:13:56 +01:00
a7b8425690 dictionary: Added experimental "slash" syntax
A new optional "slash" scoping syntax is now provided which is more intuitive
than the current "dot" syntax as it corresponds to the common directory/file
access syntax used in UNIX, and avoids limitations of the "dot" (see below)
e.g.

internalField 3.4;

active
{
    type            fixedValue;
    value.air       $internalField;
}

inactive
{
    type            anotherFixedValue;

    value           $../active/value.air;
    anotherValue    $:active/value.air;

    sub
    {
        value           $../../active/value.air;
        anotherValue    $:active/value.air;
    }
}

"U.*"
{
    solver GAMG;
}

e.air
{
    // This does expand
    $U.air;
}

"#inputSyntax slash;" selects the new "slash" syntax.
"../" refers to the parent directory.
":" refers to the top-level directory.

The corresponding dictionary using the current "dot" syntax is

internalField 3.4;

active
{
    type            fixedValue;
    value.air       $internalField;
}

inactive
{
    type            anotherFixedValue;

    value           $..active.value.air;
    anotherValue    $:active.value.air;

    sub
    {
        value           $...active.value.air;
        anotherValue    $:active.value.air;
    }
}

"U.*"
{
    solver GAMG;
}

e.air
{
    // This doesn't expand
    $U.air;
}

Note that the "$U.air" expansion does not work in this case due to the
interference between the use of '.' for scoping and phase-name.
This is a fundamental problem which prompted the development of the new more
intuitive and flexible "slash" syntax.

The new syntax also allows a for planned future development to access entries
in directories in other files, e.g.

active
{
    type            fixedValue;
    value.air       $FOAM_CASE/internalFieldValues/value.air;
}

or

active
{
    type            fixedValue;
    value.air       :../internalFieldValues/value.air;
}
2019-07-09 16:45:07 +01:00
481f643aec bool, int32, int64: Added writeEntry function to avoid ambiguity compiling with 64bit labels 2019-07-09 11:29:43 +01:00
96b69f6f88 Standardised and rationalised the way in which units are written in function documentation 2019-06-20 10:54:14 +01:00
213319ae30 Standardised the class declaration section comments to correspond to the foamNewSource template 2019-06-19 15:01:35 +01:00
8e9f692aa4 Standardised the class declaration section comments to correspond to the foamNewSource template 2019-06-13 21:26:33 +01:00
47d19548c1 cut: Templated point type
This allows for different information to be passed around the cut
routines; in particular, classes representing the topology of the cuts.
2019-06-13 08:58:31 +01:00
00ae415b71 Added copy constructors to classes with copy assignment operator defined
and copy assignment operator for classes with a copy constructor

This is often described as the rule of 3 (or rule of 5 in C++11 if move
constructors and assignment operators are also defined) and makes good sense in
ensuring consistency.  For classes in which the default bitwise copy constructor
or assignment operator are appropriate these are now specified explicitly using
the "= default" keyword if the other is explicitly defined fulfilling the rule
of 3 without the need to define the body of the function.
2019-06-05 23:32:22 +01:00
77f441344e Scalar: Changed the return type of sign, pos, pos0, neg and neg0 to int 2019-06-04 15:55:45 +01:00
fc4d7b92c3 Corrected documentation comment for disabled copy constructors 2019-05-29 15:58:42 +01:00
f7ea836c65 src/OpenFOAM: Moved the deleted bitwise copy and assignment declarations into public section of the class 2019-05-29 15:48:49 +01:00
9140984cf4 Added "= delete" to disabled bitwise copy constructors and assignment operators
Currently these deleted function declarations are still in the private section
of the class declarations but will be moved by hand to the public section over
time as this is too complex to automate reliably.
2019-05-28 15:26:45 +01:00
3ecef91e72 Standardised copy constructor documentation comment 2019-05-27 22:34:32 +01:00
30bea84fac C++11 conformance and consistency: Added "move" constructors and assignment operators to OpenFOAM containers
Replaced all uses of complex Xfer class with C++11 "move" constructors and
assignment operators.  Removed the now redundant Xfer class.

This substantial changes improves consistency between OpenFOAM and the C++11 STL
containers and algorithms, reduces memory allocation and copy overhead when
returning containers from functions and simplifies maintenance of the core
libraries significantly.
2019-05-25 17:40:39 +01:00
4f7f488f22 directFieldMapper, setSizeFieldMapper: new specialised field mappers for decomposition and reconstruction
Using the new field mapper framework it is now possible to create specialised
mappers rather than creating a fatter and fatter interface in the base mapper.
This approach is far more extensible, comprehensible and maintainable.
2019-05-09 22:12:44 +01:00
69eccc7742 fieldMapper: Moved distributed functionality to distributedWeightedFvPatchFieldMapper 2019-05-07 15:58:23 +01:00
5203a84a0f PatchFields: Improved documentation of the autoMap and rmap functions 2019-05-03 21:53:13 +01:00
4b57ee554e Renamed FieldMapper -> fieldMapper: it is an abstract base class for field mapping, not templated 2019-05-03 08:58:13 +01:00
76a8f398aa Field: Replaced autoMap with support in the map functions for mapping to self
Avoids clutter in the interface and code duplication.
2019-05-02 19:05:42 +01:00
687d56fbf1 Field: Moved FieldMapper mapping functions to FieldMapper and made virtual
This allows easier extension and specialisation of field mapping.
2019-05-02 15:43:32 +01:00
6afe1b4632 Field: Remove "applyFlip" from the low-level field mapping
This functionality should be implemented and applied at a higher level so that
it can be controlled more easily and applied only to flux fields.
2019-04-29 19:27:47 +01:00
af45bd636d regIOobject: changed the "valid" argument name to "read" for read function and "write" for write functions
This clarifies the purpose which is to indicate that the object should be read
or written on this particular processor rather than it is or is not valid.
2019-04-27 10:46:57 +01:00
6588424db5 fileOperations: Use InfoHeader to write the header information 2019-04-23 10:01:24 +01:00
520fb8679c Function1::CSV: Corrected componentColumns writeEntry
Resolves bug-report https://bugs.openfoam.org/view.php?id=3223
2019-04-17 16:22:06 +01:00
6a6ef95e84 masterUncollatedFileOperation: Trigger caching of times to ensure consistency across processors
Allows global status of unwatchedIOdictionary to be reinstated.

Patch contributed by Mattijs Janssens
2019-04-12 22:16:11 +01:00
3cbb932be8 Added support for patch manipulation of pointFields
e.g. during createBaffles

Added a test application and test case for meshTools: test/fvMeshTools

Patch contributed by Mattijs Janssens
2019-04-12 18:44:32 +01:00
181f110a2f IOobject: Transfer all "global" handling to regIOobject
Remove regIOobject::masterOnlyReading
2019-04-09 14:37:03 +01:00
e7492a8624 IOobject,regIOobject: Rationalised global() and globalObject() 2019-04-08 20:37:15 +01:00
ba7e19c885 Pstreams/exchange: Removed duplicate line
Resolves bug-report https://bugs.openfoam.org/view.php?id=3217
2019-04-08 20:36:12 +01:00
2f3d47ad7e Residuals: New MeshObject class to store solver performance residuals
This is more efficient and modular than the previous approach of storing the
residuals in the mesh data dictionary.
2019-04-04 19:08:08 +01:00
44742d235e reconstructPar: Add support for reconstructing surfaceVectorFields
Resolves bug-report https://bugs.openfoam.org/view.php?id=2832
2019-04-01 22:56:27 +01:00
51247eec60 mesh::data: Use a DynamicList for the performance data for efficiency 2019-04-01 18:13:15 +01:00
becf7d2905 Function1: Improved error messages when evaluation or integration are undefined 2019-03-15 14:09:51 +00:00
d41166187a writeEntry: Rationalised for consistency, ease of use and maintainability
The writeEntry form is now defined and used consistently throughout OpenFOAM
making it easier to use and extend, particularly to support binary IO of complex
dictionary entries.
2019-03-14 20:54:10 +00:00
d6f6747d63 PrimitivePatch: Added Istream constructor and iNew 2019-03-12 17:28:03 +00:00
23d7371592 CompactIOList: Derived from ListCompactIO to reuse the steam IO 2019-03-12 17:26:19 +00:00