Commit Graph

2325 Commits

Author SHA1 Message Date
89b4ad6ba7 Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev 2019-08-01 14:27:11 +01:00
b8fcd10cf7 singleStepCombustion: Refactored to include the singleStepReactingMixture functionality
allowing the removal of singleStepReactingMixture which is the first step in
refactoring the instantiation of the reaction scheme.
2019-08-01 14:24:13 +01:00
006c3a5099 thermoPhysicalModels/specie: Corrected documentation
Removed historic references to conversion from mass-based to mole-based
properties in some thermodynamic and transport models
2019-07-31 16:47:22 +01:00
a8020984f6 Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev 2019-07-31 15:45:58 +01:00
2d0f459ea5 chemistryModel, reactions, ODESolver: Added "li" argument to all functions which evaluate the reaction rate
In chemistryModel "li" is set to the current cell index but for other reacting
systems it should be set to the current index of the element for which the
reaction system is being evaluated.

In the ODESolver "li" is the current index of the element for which the ODE
system is being solved if there is a list of related systems being solved,
otherwise it can be set to 0.
2019-07-31 15:40:04 +01:00
ccb0f5b7b2 cut: Symmetric operation when levels are all zero 2019-07-31 14:17:08 +01:00
ba5cdbeb61 functionObject::fieldAverage: Corrected the name of mean and variance of phase fields
Now rather than the average of "U.air" being named "U.airMean" it is correctly
named for the air phase "UMean.air".
2019-07-30 12:22:10 +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
9ca4cb8b99 barotropicCompressibilityModel: Obtain rhovSat from pSat
Resolves feature request https://bugs.openfoam.org/view.php?id=3314
2019-07-24 14:12:26 +01:00
eecd590eb6 sixDoFRigidBodyMotionSolver: Derive from sixDoFRigidBodyMotion
Resolves patch request https://bugs.openfoam.org/view.php?id=3308
Patch contributed by SeongMo Yeon
2019-07-23 16:45:48 +01:00
4a810cbe9d SpalartAllmaras[I][D]DES: Named temporary fields and added optional caching for LESRegion
The various temporary fields used to create the nuTilda equation sources are now
internal fields to avoid unnecessary evaluation of boundary conditions, lowering
storage and reducing CPU time, particularly when running in parallel.  These
temporary fields are now named with respect to the model so that they can be
cached conveniently and written as required.

The LESRegion field can now be contructed on demand if it is requested as a
cached temporary field and written out for diagnostics if needed, for example in
the tutorials/incompressible/pisoFoam/LES/motorBike tutorial:

cacheTemporaryObjects
(
    SpalartAllmarasDDES:LESRegion
);

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

        writeControl writeTime;
        writeOption anyWrite;

        objects
        (
            SpalartAllmarasDDES:LESRegion
        );
    }

    #include "cuttingPlane"
    #include "streamLines"
    #include "forceCoeffs"
}
2019-07-23 11:48:14 +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
b5f471585a gradientEnergyFvPatchScalarField: Added writing of "value" field
Resolves feature request https://bugs.openfoam.org/view.php?id=3311
2019-07-22 12:01:44 +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
403bc05870 turbulenceModels: Explicitly name model specific fields using the modelName function 2019-07-22 10:22:46 +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
7e65281f60 ThermoCloud: Corrected calculation of sigmap
https://bugs.openfoam.org/view.php?id=3309
2019-07-19 11:39:44 +01:00
1769c87804 GeometricField: Added another New temporary field constructor 2019-07-18 11:37:10 +01:00
0c66eb9f94 finiteVolume: Use the GeometricField::New method to construct temporary fields
Avoids database registration of temporary fields, simplifies the code and
improves maintainability.
2019-07-18 09:32:12 +01:00
9bcbaea4a3 functionObjects::scalarTransport/phaseScalarTransport: Use int for the corrector loop
rather than label.
2019-07-15 22:29:10 +01:00
aab3a22708 KinematicParcel: Corrected sign of Eo for bubbles
Resolves bug report https://bugs.openfoam.org/view.php?id=3305
2019-07-15 09:00:43 +01:00
6c7d08b262 isoSurface: Selection of filtering level
The filtering level for an iso-surface can now be selected. The keyword
is "filtering", and the options are "full", "partial" or "none". The
default is "full". The other options are only retained for debugging and
to provide a fallback if robustness of the full filtering algorithm is
an issue. As of commit 2ee8b7ac, "full" filtering has no known
disadvantages and is recommended in all usage cases.

This setting replaces the "regularise" entry, which switched between
what are now the "full" and "none" settings. "partial" was not
previously an option.
2019-07-15 08:34:07 +01:00
916d0a0624 isoSurface: Additional fixes for isoSurface 'eroding' surfaces down to nothing
This is a slight rework of commit c81abfef. Instead of adapting tet
base points cell-by-cell, the dangling points are pre-computed and then
the adaptations to the base points are made face-by-face. This correctly
adapts faces which have different dangling points relative to the owner
and neighbour cells.
2019-07-15 08:34:06 +01:00
33c3521c7a Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev 2019-07-11 19:45:12 +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
4e902bf450 fixedValueFvPatchField: Removed value constructor
The corresponding constructor in the base class was removed as part of a
number of related changes to patch field construction in commit
70021b12.

Resolves bug report https://bugs.openfoam.org/view.php?id=3304
2019-07-11 10:46:00 +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
16333b47c5 Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev 2019-07-10 15:26:32 +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
73d253c34b blockMesh: Angle-and-axis specification for arc edges
Arc-edges can now be specified with a sector angle (in degrees) and an
axis of the circle of which the arc forms a part. The new syntax is as
follows:

   edges
   (
       arc <vertex-0> <vertex-1> <angle> (<axis-x> <axis-y> <axis-z>)
   );

This is often more convenient than the alternative specification where a
third third point somewhere in the arc is given; it usually does not
require any additional calculation on the part of the user, and multiple
entries are very likely to be identical.

Which specification is used depends on the form of the entry that comes
after the two vertices. If the entry is a vector then it is assumed to
be a point in the arc; if it is scalar then is is taken to be the angle
and the axis is assumed to follow.

For example, to put a 90 degree arc between the vertices 12 and 13, at
(1 0 0) and (0 1 0) respectively, the following specification can now be
used:

   edges
   (
       arc 12 13 90.0 (0 0 1)
   );

This is equivalent to the existing point-in-arc speficiation below:

   edges
   (
       arc 12 13 (0.707107 0.707107 0)
   );

An edge's points are ordered on the perimeter of the circle according to
a right-hand screw rule on the given axis. Changing the the side of the
edge on which the arc is defined can therefore be achieved by reversing
either the edge or the direction of the axis.

If the given axis is not perpendicular to the line between the vertices,
then the arc gains some axial length and becomes a helix.
2019-07-10 11:05:10 +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
3431c1d21e Updated unit expressions in documentation to new standardised form 2019-07-08 16:05:33 +01:00
95844db860 zoltanRenumber: include required PstreamGlobals.H 2019-07-08 10:49:59 +01:00
1cd4b292eb fvOptions::damping: Corrected handling of multiple damping regions
Resolves bug-report https://bugs.openfoam.org/view.php?id=3302
2019-07-04 14:25:21 +01:00
5c188ddce7 Completed standardisation of the class declaration section comments to correspond to the foamNewSource template 2019-06-21 22:45:47 +01:00
96b69f6f88 Standardised and rationalised the way in which units are written in function documentation 2019-06-20 10:54:14 +01:00
0101722b0f Standardised the class declaration section comments to correspond to the foamNewSource template 2019-06-19 16:45:21 +01:00
213319ae30 Standardised the class declaration section comments to correspond to the foamNewSource template 2019-06-19 15:01:35 +01:00
4d297126d9 Standardised the class declaration section comments to correspond to the foamNewSource template 2019-06-19 11:54:55 +01:00
251f91cfa5 fvOptions::isotropicDamping: New wave damping fvOption
This implicit isotropic damping function relaxes the velocity field towards a
specified uniform value which can be set to (0 0 0) if no flow is required.
This is particularly appropriate to damp the waves in a closed wave tank with no
mean flow.

Testing on the interFoam wave has shown that for this simple case with uniform
mean flow the new isotropicDamping fvOption provides more rapid and complete
damping than the original verticalDamping.
2019-06-18 22:06:17 +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
ac5b46bafe mixtureKEpsilon: Added documentation for the bubble generated turbulence coefficient 2019-06-11 15:36:40 +01:00
6f6d5380d6 nutURoughWallFunction: Updated handling of the low y+ region, consistent with nutkRoughWallFunction
Results for nutkRoughWallFunction and nutURoughWallFunction are now reasonably
consistent and both are now more robust and handle small near-wall cells more
reliably.  However if the wall roughness height is large, ~domain width, the
nutURoughWallFunction produces a lot less realistic results than the
nutkRoughWallFunction which appears to behave surprisingly well.
2019-06-11 13:00:38 +01:00
6eb05f8b3d snappyHexMesh::meshRefinement: clear the mesh before mapping to avoid issues with mapping the mesh flux field 2019-06-08 14:37:43 +01:00
926b6a25db nutURoughWallFunction: Updated for input consistency with nutkRoughWallFunction
Now both the nutkRoughWallFunction and nutURoughWallFunction us the same field
based Ks and Cs input to support non-uniform surface roughness.

Note that nutURoughWallFunction is not exactly consistent with the
nutUWallFunction in the limit of roughness height = 0 and also not consistent
with nutkRoughWallFunction, particularly if the near-wall cell is in the laminar
sub-layer for which nutURoughWallFunction is currently incorrect.

Significant further work on the nutURoughWallFunction is needed to make it
consistent with both the nutUWallFunction and nutkRoughWallFunction BCs.
2019-06-08 14:31:17 +01:00