Commit Graph

332 Commits

Author SHA1 Message Date
655fc78748 rhoSimpleFoam: added support for compressible liquid flows
rhoSimpleFoam now instantiates the lower-level fluidThermo which instantiates
either a psiThermo or rhoThermo according to the 'type' specification in
thermophysicalProperties, e.g.

thermoType
{
    type            hePsiThermo;
    mixture         pureMixture;
    transport       sutherland;
    thermo          janaf;
    equationOfState perfectGas;
    specie          specie;
    energy          sensibleInternalEnergy;
}

instantiates a psiThermo for a perfect gas with JANAF thermodynamics, whereas

thermoType
{
    type            heRhoThermo;
    mixture         pureMixture;
    properties      liquid;
    energy          sensibleInternalEnergy;
}

mixture
{
    H2O;
}

instantiates a rhoThermo for water, see new tutorial
compressible/rhoSimpleFoam/squareBendLiq.

In order to support complex equations of state the pressure can no longer be
unlimited and rhoSimpleFoam now limits the pressure rather than the density to
handle start-up more robustly.

For backward compatibility 'rhoMin' and 'rhoMax' can still be used in the SIMPLE
sub-dictionary of fvSolution which are converted into 'pMax' and 'pMin' but it
is better to set either 'pMax' and 'pMin' directly or use the more convenient
'pMinFactor' and 'pMinFactor' from which 'pMax' and 'pMin' are calculated using
the fixed boundary pressure or reference pressure e.g.

SIMPLE
{
    nNonOrthogonalCorrectors 0;

    pMinFactor      0.1;
    pMaxFactor      1.5;

    transonic       yes;
    consistent      yes;

    residualControl
    {
        p               1e-3;
        U               1e-4;
        e               1e-3;
        "(k|epsilon|omega)" 1e-3;
    }
}
2017-02-24 11:18:01 +00:00
cdec9b23b9 liquidThermo: rhoThermo instantiated on liquidProperties
This allows single, multi-phase and VoF compressible simulations to be performed
with the accurate thermophysical property functions for liquids provided by the
liquidProperty classes.  e.g. in the
multiphase/compressibleInterFoam/laminar/depthCharge2D tutorial water can now be
specified by

thermoType
{
    type            heRhoThermo;
    mixture         pureMixture;
    properties      liquid;
    energy          sensibleInternalEnergy;
}

mixture
{
    H2O;
}

as an alternative to the previous less accurate representation defined by

thermoType
{
    type            heRhoThermo;
    mixture         pureMixture;
    transport       const;
    thermo          hConst;
    equationOfState perfectFluid;
    specie          specie;
    energy          sensibleInternalEnergy;
}

mixture
{
    specie
    {
        molWeight   18.0;
    }
    equationOfState
    {
        R           3000;
        rho0        1027;
    }
    thermodynamics
    {
        Cp          4195;
        Hf          0;
    }
    transport
    {
        mu          3.645e-4;
        Pr          2.289;
    }
}

However the increase in accuracy of the new simpler and more convenient
specification and representation comes at a cost: the NSRDS functions used by
the liquidProperties classes are relatively expensive to evaluate and the
depthCharge2D case takes ~14% longer to run.
2017-02-19 16:44:00 +00:00
95574a6c6b liquidProperties, solidProperties: Simplified input
The entries for liquid and solid species can now be simply be the name unless
property coefficients are overridden in which are specified in a dictionary as
before e.g. in the tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek case
the water is simply specified

liquids
{
    H2O;
}

and solid ash uses standard coefficients but the coefficients for carbon are
overridden thus

solids
{
    C
    {
        rho             2010;
        Cp              710;
        kappa           0.04;
        Hf              0;
        emissivity      1.0;
    }

    ash;
}
2017-02-18 12:43:10 +00:00
081f1784f9 liquidProperties: Simplified dictionary format
The defaultCoeffs entry is now redundant and supported only for backward
compatibility.  To specify a liquid with default coefficients simply leave the
coefficients dictionary empty:

    liquids
    {
        H2O {}
    }

Any or all of the coefficients may be overridden by specifying the properties in
the coefficients dictionary, e.g.

    liquids
    {
        H2O
        {
            rho
            {
                a 1000;
                b 0;
                c 0;
                d 0;
            }
        }
    }
2017-02-17 22:08:42 +00:00
abc50e214c thermophysicalModels: Changed specie thermodynamics from mole to mass basis
The fundamental properties provided by the specie class hierarchy were
mole-based, i.e. provide the properties per mole whereas the fundamental
properties provided by the liquidProperties and solidProperties classes are
mass-based, i.e. per unit mass.  This inconsistency made it impossible to
instantiate the thermodynamics packages (rhoThermo, psiThermo) used by the FV
transport solvers on liquidProperties.  In order to combine VoF with film and/or
Lagrangian models it is essential that the physical propertied of the three
representations of the liquid are consistent which means that it is necessary to
instantiate the thermodynamics packages on liquidProperties.  This requires
either liquidProperties to be rewritten mole-based or the specie classes to be
rewritten mass-based.  Given that most of OpenFOAM solvers operate
mass-based (solve for mass-fractions and provide mass-fractions to sub-models it
is more consistent and efficient if the low-level thermodynamics is also
mass-based.

This commit includes all of the changes necessary for all of the thermodynamics
in OpenFOAM to operate mass-based and supports the instantiation of
thermodynamics packages on liquidProperties.

Note that most users, developers and contributors to OpenFOAM will not notice
any difference in the operation of the code except that the confusing

    nMoles     1;

entries in the thermophysicalProperties files are no longer needed or used and
have been removed in this commet.  The only substantial change to the internals
is that species thermodynamics are now "mixed" with mass rather than mole
fractions.  This is more convenient except for defining reaction equilibrium
thermodynamics for which the molar rather than mass composition is usually know.
The consequence of this can be seen in the adiabaticFlameT, equilibriumCO and
equilibriumFlameT utilities in which the species thermodynamics are
pre-multiplied by their molecular mass to effectively convert them to mole-basis
to simplify the definition of the reaction equilibrium thermodynamics, e.g. in
equilibriumCO

    // Reactants (mole-based)
    thermo FUEL(thermoData.subDict(fuelName)); FUEL *= FUEL.W();

    // Oxidant (mole-based)
    thermo O2(thermoData.subDict("O2")); O2 *= O2.W();
    thermo N2(thermoData.subDict("N2")); N2 *= N2.W();

    // Intermediates (mole-based)
    thermo H2(thermoData.subDict("H2")); H2 *= H2.W();

    // Products (mole-based)
    thermo CO2(thermoData.subDict("CO2")); CO2 *= CO2.W();
    thermo H2O(thermoData.subDict("H2O")); H2O *= H2O.W();
    thermo CO(thermoData.subDict("CO")); CO *= CO.W();

    // Product dissociation reactions

    thermo CO2BreakUp
    (
        CO2 == CO + 0.5*O2
    );

    thermo H2OBreakUp
    (
        H2O == H2 + 0.5*O2
    );

Please report any problems with this substantial but necessary rewrite of the
thermodynamic at https://bugs.openfoam.org

Henry G. Weller
CFD Direct Ltd.
2017-02-17 11:22:14 +00:00
1c8a0bdcb3 compressibleInterFoam: Completed LTS and semi-implicit MULES support
Now the interFoam and compressibleInterFoam families of solvers use the same
alphaEqn formulation and supporting all of the MULES options without
code-duplication.

The semi-implicit MULES support allows running with significantly larger
time-steps but this does reduce the interface sharpness.
2017-02-09 17:31:57 +00:00
f3a347fd5b interDyMFoam: Reinstate alphaPhiCorr0 for moving meshes without topology change 2017-02-07 09:59:19 +00:00
eaebd650ce snappyHexMesh: Added "noRefinement" writeFlag to control the writing of cellLevel, pointLevel etc. files
By default snappyHexMesh writes files relating to the hex-splitting process into
the polyMesh directory: cellLevel level0Edge pointLevel surfaceIndex

but by setting the noRefinement flag:

writeFlags
(
    noRefinement
    .
    .
    .
);

these optional files which are generally not needed are not written.

If you run the three stages of snappyHexMesh separately or run a dynamic mesh
solver supporting refinement and unrefinement these files are needed
and "noRefinement" should not be set.
2017-01-24 22:28:36 +00:00
6f338ed716 PaSR: Removed deprecated "turbulentReaction" switch
To run with laminar reaction rates choose the "laminar" combustion model rather
than setting "turbulentReaction no;" in the "PaSR" model.
2017-01-20 17:17:14 +00:00
ad92287afc Multi-phase solvers: Improved handling of inflow/outflow BCs in MULES
Avoids slight phase-fraction unboundedness at entertainment BCs and improved
robustness.

Additionally the phase-fractions in the multi-phase (rather than two-phase)
solvers are adjusted to avoid the slow growth of inconsistency ("drift") caused
by solving for all of the phase-fractions rather than deriving one from the
others.
2017-01-17 22:43:47 +00:00
8b930836d3 tutorials/combustion/reactingFoam/laminar/counterFlowFlame2D_GRI_TDAC: Added deltaT to TDAC controls 2017-01-17 22:41:30 +00:00
7c02f6841f TDACChemistryModel: simplified, rationalized and automated the handling of variableTimeStep 2017-01-09 21:40:39 +00:00
923350fa6e TDACChemistryModel: Added support for variable time-step and LTS in ISAT
New reactingFoam tutorial counterFlowFlame2DLTS_GRI_TDAC demonstrates this new
functionality.

Additionally the ISAT table growth algorithm has been further optimized
providing an overall speedup of between 15% and 38% for the tests run so far.

Updates to TDAC and ISAT provided by Francesco Contino.

Implementation updated and integrated into OpenFOAM-dev by
Henry G. Weller, CFD Direct Ltd with the help of Francesco Contino.

Original code providing all algorithms for chemistry reduction and
tabulation contributed by Francesco Contino, Tommaso Lucchini, Gianluca
D’Errico, Hervé Jeanmart, Nicolas Bourgeois and Stéphane Backaert.
2017-01-07 16:29:15 +00:00
78a396430b Rationalized the keyword to specify a file name in a dictionary to 'file'
e.g. in tutorials/heatTransfer/buoyantSimpleFoam/externalCoupledCavity/0/T

    hot
    {
        type            externalCoupledTemperature;
        commsDir        "${FOAM_CASE}/comms";
        file            "data";
        initByExternal  yes;
        log             true;
        value           uniform 307.75; // 34.6 degC
    }

Previously both 'file' and 'fileName' were used inconsistently in different
classes and given that there is no confusion or ambiguity introduced by using
the simpler 'file' rather than 'fileName' this change simplifies the use and
maintenance of OpenFOAM.
2017-01-07 09:38:54 +00:00
fcde201a40 Updated tutorial scripts 'createGraphs' and 'patchifyObstacles' for clearer messages
Patch contributed by Bruno Santos
Resolves patch request https://bugs.openfoam.org/view.php?id=2411
2016-12-27 15:44:30 +00:00
3140cfa906 tutorials/compressible/rhoSimpleFoam/squareBend: Stabilize by further relaxing e
Patch contributed by Mattijs Janssens
http://bugs.openfoam.org/view.php?id=2382
2016-12-09 16:53:35 +00:00
c007fcdbfe Renamed searchableCurve -> searchableExtrudedCircle
to clarify purpose.

Patch contributed by Mattijs Janssens
2016-12-09 16:30:46 +00:00
8dafde6048 tutorials/incompressible/pisoFoam/les/motorBike/motorBike/Allrun: Removed spurious '-parallel' option
Resolves bug-report http://bugs.openfoam.org/view.php?id=2378
2016-12-07 15:39:40 +00:00
a5f3c25c06 tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoiling.*: Correct q entry
Patch contributed by Mattijs Janssens
2016-12-02 12:22:30 +00:00
23e6eee712 mixerVesselAMI2D/constant/dynamicMeshDict: Removed unused motionSolverLibs entry 2016-12-01 16:13:18 +00:00
2eac40eac6 dynamicMotionSolverListFvMesh: New mesh-motion solver supporting multiple moving regions
e.g. the motion of two counter-rotating AMI regions could be defined:

dynamicFvMesh   dynamicMotionSolverListFvMesh;

solvers
(
    rotor1
    {
        solver solidBody;

        cellZone        rotor1;

        solidBodyMotionFunction  rotatingMotion;
        rotatingMotionCoeffs
        {
            origin        (0 0 0);
            axis          (0 0 1);
            omega         6.2832; // rad/s
        }
    }

    rotor2
    {
        solver solidBody;

        cellZone        rotor2;

        solidBodyMotionFunction  rotatingMotion;
        rotatingMotionCoeffs
        {
            origin        (0 0 0);
            axis          (0 0 1);
            omega         -6.2832; // rad/s
        }
    }
);

Any combination of motion solvers may be selected but there is no special
handling of motion interaction; the motions are applied sequentially and
potentially cumulatively.

To support this new general framework the solidBodyMotionFvMesh and
multiSolidBodyMotionFvMesh dynamicFvMeshes have been converted into the
corresponding motionSolvers solidBody and multiSolidBody and the tutorials
updated to reflect this change e.g. the motion in the mixerVesselAMI2D tutorial
is now defined thus:

dynamicFvMesh   dynamicMotionSolverFvMesh;

solver solidBody;

solidBodyCoeffs
{
    cellZone        rotor;

    solidBodyMotionFunction  rotatingMotion;
    rotatingMotionCoeffs
    {
        origin        (0 0 0);
        axis          (0 0 1);
        omega         6.2832; // rad/s
    }
}
2016-12-01 15:57:15 +00:00
48e3fb7805 Allwmake: Remove 'set -x' which generates a lot of noise
'set -x' should be used for debugging.

Added command printing into wmake and Allwmake as a replacement for
'set -x' to log current target.
2016-11-13 18:08:22 +00:00
2dc141d571 paraFoam -block: Added support for vertex and block names
Patch contributed by Mattijs Janssens
2016-11-04 17:29:02 +00:00
2d3ddd4204 buoyantBoussinesqSimpleFoam: Correct laminar and turbulent Prandtl numberl
Resolves bug-report http://bugs.openfoam.org/view.php?id=2314
2016-11-01 16:07:52 +00:00
24b2335f19 blockMesh: Added edge projection
New functionality contributed by Mattijs Janssens:
  - new edge projection: projectCurve for use with new geometry
    'searchableCurve'
  - new tutorial 'pipe'
  - naming of vertices and blocks (see pipe tutorial). Including back
    substitution for error messages.
2016-10-31 18:00:15 +00:00
adb4fdd613 blockMesh: Added projected vertices and edges
Patch contributed by Mattijs Janssens

    - Added projected vertices
    - Added projected edges
    - Change of blockEdges API (operate on list lambdas)
    - Change of blockFaces API (pass in blockDescriptor and blockFacei)
    - Added sphere7ProjectedEdges tutorial to demonstrate vertex and edge projection
2016-10-18 14:06:23 +01:00
6037ff8980 tutorials/mesh/blockMesh/sphere7: New 7-block sphere mesh example
Contributed by Georg Skillas
2016-10-16 15:14:26 +01:00
f5be4b05a5 blockMesh: New experimental support for projecting block face point to geometric surfaces
For example, to mesh a sphere with a single block the geometry is defined in the
blockMeshDict as a searchableSurface:

    geometry
    {
        sphere
        {
            type searchableSphere;
            centre (0 0 0);
            radius 1;
        }
    }

The vertices, block topology and curved edges are defined in the usual
way, for example

    v 0.5773502;
    mv -0.5773502;

    a 0.7071067;
    ma -0.7071067;

    vertices
    (
        ($mv $mv $mv)
        ( $v $mv $mv)
        ( $v  $v $mv)
        ($mv  $v $mv)
        ($mv $mv  $v)
        ( $v $mv  $v)
        ( $v  $v  $v)
        ($mv  $v  $v)
    );

    blocks
    (
        hex (0 1 2 3 4 5 6 7) (10 10 10) simpleGrading (1 1 1)
    );

    edges
    (
        arc 0 1 (0 $ma $ma)
        arc 2 3 (0 $a $ma)
        arc 6 7 (0 $a $a)
        arc 4 5 (0 $ma $a)

        arc 0 3 ($ma 0 $ma)
        arc 1 2 ($a 0 $ma)
        arc 5 6 ($a 0 $a)
        arc 4 7 ($ma 0 $a)

        arc 0 4 ($ma $ma 0)
        arc 1 5 ($a $ma 0)
        arc 2 6 ($a $a 0)
        arc 3 7 ($ma $a 0)
    );

which will produce a mesh in which the block edges conform to the sphere
but the faces of the block lie somewhere between the original cube and
the spherical surface which is a consequence of the edge-based
transfinite interpolation.

Now the projection of the block faces to the geometry specified above
can also be specified:

    faces
    (
        project (0 4 7 3) sphere
        project (2 6 5 1) sphere
        project (1 5 4 0) sphere
        project (3 7 6 2) sphere
        project (0 3 2 1) sphere
        project (4 5 6 7) sphere
    );

which produces a mesh that actually conforms to the sphere.

See OpenFOAM-dev/tutorials/mesh/blockMesh/sphere

This functionality is experimental and will undergo further development
and generalization in the future to support more complex surfaces,
feature edge specification and extraction etc.  Please get involved if
you would like to see blockMesh become a more flexible block-structured
mesher.

Henry G. Weller, CFD Direct.
2016-10-13 15:05:24 +01:00
fead57c2ab foamCleanTutorials: Simplified cleaning the mesh by removing the constant/polyMesh directory 2016-10-13 15:02:32 +01:00
8726fa4f57 reactingTwoPhaseEulerFoam wallBoiling.* tutorials: only run start-up in test-mode 2016-10-11 08:44:36 +01:00
dd3cd529ba reactingTwoPhaseEulerFoam::IATE: Added phaseChange source
to handle the effect of condensation and evaporation on bubble size
2016-10-07 09:34:35 +01:00
164540eb3d reactingTwoPhaseEulerFoam::IATE: Added wallBoiling sub-model
to handle the size of bubbles created by boiling.  To be used in
conjunction with the alphatWallBoilingWallFunction boundary condition.

The IATE variant of the wallBoiling tutorial case is provided to
demonstrate the functionality:

tutorials/multiphase/reactingTwoPhaseEulerFoam/RAS/wallBoilingIATE
2016-10-06 12:40:58 +01:00
38b784244b tutorials/multiphase/reactingTwoPhaseEulerFoam: Initialize by first running without boiling
then restart with boiling.

Contributed by Juho Peltola, VTT
2016-10-04 16:39:49 +01:00
213e131d0f reactingTwoPhaseEulerFoam: Enhanced support for wall boiling
Contributed by Juho Peltola, VTT

Notable changes:

    1. The same wall function is now used for both phases, but user must
       specify phaseType ‘liquid’ or ‘vapor’

    2. Runtime selectable submodels for:
       - wall heat flux partitioning between the phases
       - nucleation site density
       - bubble departure frequency
       - bubble departure diameter

    3. An additional iteration loop for the wall boiling model in case
       the initial guess for the wall temperature proves to be poor.

The wallBoiling tutorial has been updated to demonstrate this new functionality.
2016-10-04 09:53:09 +01:00
c6b3632c85 tutorials/incompressible/shallowWaterFoam/squareBump/.gmtcommands4: deleted
Resolves bug-report http://bugs.openfoam.org/view.php?id=2268
2016-09-25 16:53:37 +01:00
10fb32db8d tutorials: Renamed sub-directories ras -> RAS and les -> LES 2016-09-20 19:03:40 +01:00
3264ba7ad5 Maxwell model for viscoelasticity using the upper-convected time
derivative of the stress tensor.  See
http://en.wikipedia.org/wiki/Upper-convected_Maxwell_model

The model includes an additional viscosity (nu) from the transport
model from which it is instantiated, which makes it equivalent to the
Oldroyd-B model for the case of an incompressible transport model.
See https://en.wikipedia.org/wiki/Oldroyd-B_model
2016-09-20 18:38:15 +01:00
f6fa3d5cc6 Organisation of pimpleFoam tutorials into categories of turbulence modelling 2016-09-20 18:24:09 +01:00
017281a116 combustionModels/FSD: Corrected
Renamed 'omega' to 'FSDomega' to avoid a clash with the k-omega
turbulence models.

Resolves bug-report http://bugs.openfoam.org/view.php?id=2237
2016-09-09 16:23:28 +01:00
7b971a9ebf tutorials/multiphase/interFoam/ras/weirOverflow: Updated to improve robustness
Resolves bug-report http://bugs.openfoam.org/view.php?id=2236
2016-09-07 14:05:37 +01:00
c339d3018c PBiCGStab: New preconditioned bi-conjugate gradient stabilized solver for asymmetric lduMatrices
using a run-time selectable preconditioner

References:
    Van der Vorst, H. A. (1992).
    Bi-CGSTAB: A fast and smoothly converging variant of Bi-CG
    for the solution of nonsymmetric linear systems.
    SIAM Journal on scientific and Statistical Computing, 13(2), 631-644.

    Barrett, R., Berry, M. W., Chan, T. F., Demmel, J., Donato, J.,
    Dongarra, J., Eijkhout, V., Pozo, R., Romine, C. & Van der Vorst, H.
    (1994).
    Templates for the solution of linear systems:
    building blocks for iterative methods
    (Vol. 43). Siam.

See also: https://en.wikipedia.org/wiki/Biconjugate_gradient_stabilized_method

Tests have shown that PBiCGStab with the DILU preconditioner is more
robust, reliable and shows faster convergence (~2x) than PBiCG with
DILU, in particular in parallel where PBiCG occasionally diverges.

This remarkable improvement over PBiCG prompted the update of all
tutorial cases currently using PBiCG to use PBiCGStab instead.  If any
issues arise with this update please report on Mantis: http://bugs.openfoam.org
2016-09-05 11:46:42 +01:00
a7df748094 tutorials/multiphase/interDyMFoam/ras/DTCHull: Corrected specification of restraints
Resolves bug-report http://bugs.openfoam.org/view.php?id=2224
2016-09-03 21:14:17 +01:00
aef116bd60 Updated headers 2016-08-24 08:57:44 +01:00
15621678fa fvDOM radiation model: Removed unreliable 'cacheDiv' option
Resolves bug-report http://bugs.openfoam.org/view.php?id=2182
2016-08-17 17:12:20 +01:00
0f6fb1c07a functionObjects::surfaceFieldValue: New rational name for the surfaceRegion functionObject
surfaceRegion will be the name of a class to provide support for surface
region selection.
2016-08-12 10:04:11 +01:00
e301f74c93 tutorials: corrected scripts ']; then' -> ' ]; then'
Patch contributed by Bruno Santos
Resolves bug-report http://bugs.openfoam.org/view.php?id=2175
2016-08-02 19:15:40 +01:00
47bb19c525 tutorials Allrun scripts: Update running of postProcess application
Patch contributed by Bruno Santos
Resolves bug-report http://bugs.openfoam.org/view.php?id=2173
2016-08-02 16:24:28 +01:00
2519a47b74 tutorials/incompressible/boundaryFoam/boundaryWallFunctionsProfile: Corrected typo
Resolves bug-report http://bugs.openfoam.org/view.php?id=2170
2016-08-01 20:10:19 +01:00
089b50696c tutorials/multiphase/reactingTwoPhaseEulerFoam: Corrected regular expressions
Resolves bug-report http://bugs.openfoam.org/view.php?id=2167
2016-08-01 17:11:44 +01:00
4ac9c54b46 tutorials/multiphase/interDyMFoam/ras/floatingObject/constant/dynamicMeshDict.sixDoF: Renamed 'rho' -> 'rhoSolid'
to avoid name clash
2016-07-29 17:47:20 +01:00