Commit Graph

6811 Commits

Author SHA1 Message Date
6928511a3d nutWallFunctionFvPatchScalarField::yPlusLam: Improved ypl calculation
to ensure nut is always positive
2023-05-15 14:19:18 +01:00
3479c6a37f Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev 2023-05-12 11:06:47 +01:00
c4f7b1dcbf tutorials/modules/incompressibleVoF/floatingObject/constant/dynamicMeshDict.sixDoF: Removed unused entry 2023-05-12 11:06:03 +01:00
7d2208b735 multiphaseEuler::MovingPhaseModel: Read alphaRhoPhi if present and auto write
Needed by the phaseScalarTransport functionObject and other phase
post-processing tools.
2023-05-12 11:05:14 +01:00
2085f63705 foamCloneCase: do not copy Uf files 2023-05-12 09:29:46 +01:00
0d2fd78864 lagrangian: InjectionModel: New uniformParcelSize control
Lagrangian injections now have a 'uniformParcelSize' control, which
specifies what size of the parcels is kept uniform during a given time
step. This control can be set to 'nParticles', 'surfaceArea' or
'volume'. The particle sizes, by contrast, are specified by the size
distribution.

For example, if 'uniformParcelSize nParticles;' is specified then all
parcels introduced at a given time will have the same number of
particles. Every particle in a parcel has the same properties, including
diameter. So, in this configuration, the larger diameter parcels contain
a much larger fraction of the total particulate volume than the smaller
diameter ones. This may be undesirable as the effect of a parcel on the
simulation might be more in proportion with its volume than with the
number of particles it represents. It might be preferable to create a
greater proportion of large diameter parcels so that their more
significant effect is represented by a finer Lagrangian discretisation.
This can be achieved by setting 'uniformParcelSize volume;'. A setting
of 'uniformParcelSize surfaceArea;' might be appropriate if the limiting
effect of a Lagrangian element scales with its surface area; interfacial
evaporation, for example.

Previously, this control was provided by 'parcelBasisType'. However,
this control also effectively specified the size exponent of the
supplied distribution. This interdependence was not documented and was
problematic in that it coupled physical and numerical controls.
'parcelBasisType' has been removed, and the size exponent of the
distribution is now specified independently of the new
'uniformParcelSize' control along with the rest of the distribution
coefficients or data. See the previous commit for details.

It is still possible to specify a fixed number of particles per parcel
using the 'nParticle' control. The presence of this control is used to
determine whether or not the number of particles per parcel is fixed, so
a 'fixed' basis type is no longer needed.

A number of bugs have been fixed with regards to lack of
interoperability between the various settings in the injection models.
'uniformParcelSize' can be changed freely and the number of parcels and
amount of mass that an injector introduces will not change (this was not
true of 'parcelBasisType'). Redundant settings are no longer read by the
injection models; e.g., mass is not read if the number of particles per
parcel is fixed, duration is not specified for steady tracking, etc...

The 'inflationInjection' model has been removed as there are no examples
of its usage, its purpose was not clearly documented, and it was not
obvious how it should be updated as a result of these changes.
2023-05-11 15:42:23 +01:00
cae41959dd distributions: Generalised statistical distributions
This new class hierarchy replaces the distributions previously provided
by the Lagrangian library.

All distributions (except fixedValue) now require a "size exponent", Q,
to be specified along with their other coefficients. If a distribution's
CDF(x) (cumulative distribution function) represents what proportion of
the distribution takes a value below x, then Q determines what is meant
by "proportion":

- If Q=0, then "proportion" means the number of sampled values expected
  to be below x divided by the total number of sampled values.

- If Q=3, then "proportion" means the expected sum of sampled values
  cubed for values below x divided by the total sum of values cubed. If
  x is a length, then this can be interpreted as a proportion of the
  total volume of sampled objects.

- If Q=2, and x is a length, then the distribution might represent the
  proportion of surface area, and so on...

In addition to the user-specification of Q defining what size the given
distribution relates to, an implementation that uses a distribution can
also programmatically define a samplingQ to determine what sort of
sample is being constructed; whether the samples should have an equal
number (sampleQ=0), volume (sampleQ=3), area (sampleQ=2), etc...

A number of fixes to the distributions have been made, including fixing
some fundamental bugs in the returned distribution of samples, incorrect
calculation of the distribution means, renaming misleadingly named
parameters, and correcting some inconsistencies in the way in which
tabulated PDF and CDF data was processed. Distributions no longer
require their parameters to be defined in a sub-dictionary, but a
sub-dictionary is still supported for backwards compatibility.

The distributions can now generate their PDF-s as well as samples, and a
test application has been added (replacing two previous applications),
which thoroughly checks consistency between the PDF and the samples for
a variety of combinations of values of Q and sampleQ.

Backwards incompatible changes are as follows:

- The standard deviation keyword for the normal (and multi-normal)
  distribution is now called 'sigma'. Previously this was 'variance',
  which was misleading, as the value is a standard deviation.

- The 'massRosinRammler' distribution has been removed. This
  functionality is now provided by the standard 'RosinRammler'
  distributon with a Q equal to 0, and a sampleQ of 3.

- The 'general' distribution has been split into separate distributions
  based on whether PDF or CDF data is provided. These distributions are
  called 'tabulatedDensity' and 'tabulatedCumulative', respectively.
2023-05-11 15:42:17 +01:00
db83ae3e8a TimeFunctions1: Added construct from time and Function1 2023-05-11 14:31:32 +01:00
bd7d1a438a scalar: Added optimised integer powers and roots 2023-05-11 10:05:30 +01:00
b5783e22aa lagrangian/parcel: Added sizeDistribution cloud function
This function outputs a graph of a cloud's particle and parcel size
distributions. It can be enabled by putting the following settings in
the 'cloudFunctions' section of the cloud's properties file:

    sizeDistribution1
    {
        type        sizeDistribution;
        nPoints     40;
        setFormat   raw;
    }
2023-05-11 10:02:23 +01:00
c077ceda1a sampledSet: Added setWriter::clone, and some minor formatting 2023-05-11 09:33:09 +01:00
0b621c2908 tutorials: circuitBoardCooling: Fix unconfirmed completion in testLoopReport 2023-05-09 15:28:02 +01:00
b5142dca74 modules/solid: Improved diffusion number calculation
The calculation of the diffusion number has been put into a form
consistent with finite-volume, rather than the finite-difference form
that was used previously.

This difference in formulations is analogus to that of the Courant
number in the fluid solvers. Whilst a textbook will typically define the
courant number as equal to 'U*deltaT/deltaX', in a finite-volume context
it is more appropriate to define it as 'Sum(phi)/V*deltaT' (where 'Sum'
is a sum over the cell's faces). Similarly, the finite-difference
Fourier number, 'kappa/rho/Cp*deltaT/deltaX^2', is more consistently
expressed for finite-volume as 'Sum(Sf*kappa*deltaX)/(V*rho*Cp)*deltaT'.

This makes the calculation of the diffusion number less sensitive to the
presence of small, poor quality faces, and therefore makes time-step
adjustment more robust on arbitrary polyhedral meshes.
2023-05-09 15:11:55 +01:00
472451a0ca mappedWall: Permit transformation
This change relaxes the previous restriction that mappedWall patches
cannot have transformation. It permits cyclic multi-region simulations
in which the cyclic plane lies on the interface between regions.

The mappedWall still differs from the mapped patch in that it is assumed
to be untransformed unless a transformation is explicitly specified. The
mapped patch, by contrast, will attempt to automatically calculate a
transformation from the geometry of the patches in the same way as is
done for cyclics.
2023-05-09 14:29:19 +01:00
cb610cf060 layerInfo: Corrected function inlining and contiguous trait 2023-05-09 11:40:11 +01:00
d7743bbf01 tutorials: circuitBoardCooling: Make the test loop run both extrusion strategies 2023-05-09 11:07:50 +01:00
74a63a08e4 mappedExtrudedPatchBase: Support patchToPatch coupling
This completes commit 381e0921 and permits patches on the "top" of
extruded regions to determine the point locations opposite as well as
the face centres and areas. This means that patches with dissimilar
meshes can now be coupled via the patchToPatch interpolation engine.

A few fixes have also been applied to extrudeToRegionMesh to make the
intrude option compatibile with extrusion into internal faces and
between opposing zones/sets/patches. The 'shadow' entries used for
extrusion inbetween opposing zones/sets/patches have also been renamed
to 'opposite' for consistency with the patch names and patch types
entries; e.g.,

    faceZones           (fz1 fz3);
    oppositeFaceZones   (fz2 fz4); // <-- was 'faceZonesShadow'

    faceSets            (fs1 fs3);
    oppositeFaceSets    (fs2 fs4); // <-- was 'faceSetsShadow'

    patches             (p1 p3);
    oppositePatches     (p2 p4); // <-- was 'patchesShadow'
2023-05-09 11:06:40 +01:00
e5aa8ab63c tutorials: circuitBoardCooling: Corrected location of baffle STL 2023-05-06 20:09:08 +01:00
efe8310371 filmSurfaceVelocityFvPatchVectorField: Added neighbour density mapping 2023-05-05 22:14:13 +01:00
474e9c0c55 tutorials/modules/multiRegion/film/splashPanel/system/film/fvSolution: Corrected nCorr -> nCorrectors 2023-05-05 21:55:38 +01:00
6e9673e1e2 filmSurfaceVelocityFvPatchVectorField: Corrected to use the dynamic rather than kinematic viscosity 2023-05-05 21:55:03 +01:00
ab71ac6c1f tutorials/modules/multiRegion/film: Corrected location entries 2023-05-05 12:15:21 +01:00
26f93274fb multiphaseEuler: Remove duplicate writing of partitioningModel for liquidPhase in boiling BC
Patch contributed by Timo Niemi, VTT.
2023-05-04 16:25:19 +01:00
1fe47ea346 tutorials: wallBoiling: Corrected blockMeshDict 2023-05-04 13:17:16 +01:00
4b91dc790f foamToC: Added -listAllLibs option
Now the -allLibs option loads all the libraries without listing them to reduce
the amount of output when it is not needed and the new -listAllLibs option loads
all the libraries and lists them as they are loaded which may be useful to find
libraries which do not load due to duplicate entries for example.
2023-05-04 10:54:12 +01:00
ef42ba6db3 etc/caseDicts/annotated/extrudeToRegionMeshDict: Added documentation for 'intrude' 2023-05-02 20:35:59 +01:00
f6cd566b91 tutorials: Removed old surfaceFilm tutorial cases
Replaced by new versions updated for the new film solver module located in the
tutorials/modules/multiRegion/film directory.
2023-05-02 18:43:38 +01:00
f850266cdf extrudeToRegionMesh: Added 'intrude' option
With the new film implementation the single cell layer film region is extruded
into (overlapping with) the primary/fluid region which can now be generated with
extrudeToRegionMesh using the new 'intrude' option, e.g. for the
tutorials/modules/multiRegion/film/splashPanel case the extrudeToRegionMeshDict
contains:

region          film;

patches         (film);

extrudeModel    linearNormal;

intrude         yes;

adaptMesh       no;

patchTypes      (mappedExtrudedWall);
patchNames      (film);

regionPatchTypes   (filmWall);
regionPatchNames   (wall);

regionOppositePatchTypes    (mappedFilmSurface);
regionOppositePatchNames    (surface);

nLayers         1;

expansionRatio  1;

linearNormalCoeffs
{
    thickness       0.002;
}
2023-05-02 17:22:03 +01:00
f0421f0823 tutorials/modules/multiRegion/film/splashPanel: Updated tutorial
based on tutorials/modules/multicomponentFluid/splashPanel to demonstrate
droplet->flim splashing using the Bai model.
2023-05-02 10:38:11 +01:00
fd4f862cc0 parcelSurfaceFilmModels: By default read the surfaceFilmProperties dictionary 2023-04-30 20:25:20 +01:00
28305bbb2b tutorials/modules/multiRegion/film/cylinder: New Lagrangian->film tutorial case
equivalent to the tutorials/modules/multicomponentFluid/cylinder except that a
70deg contact-angle is applied to the film on the wall.
2023-04-30 18:49:00 +01:00
e3ca69060c tutorials/modules/multiRegion/film/cylinderVoF: Minor updates 2023-04-30 17:16:51 +01:00
3aa0f9e6bd film::thermophysicalPredictor: Removed temporary diagnostic messages 2023-04-30 17:16:23 +01:00
7b95a0d31c tutorials/modules/multiRegion/film/cylinderVoF/Allrun: Added runApplication 2023-04-30 17:03:01 +01:00
a2ad716761 isothermalFilm/fvModels/filmCloudTransfer: New models to transfer Lagrangian parcels to film
The parcel transfer occurs from the cloudFilmTransfer surfaceFilmModel specified
in the <fluid> region constant/<fluid>/cloudProperties dictionary:

.
.
.
libs        ("libfilmCloudTransfer.so");
.
.
.
    surfaceFilmModel cloudFilmTransfer;

and the film filmCloudTransfer specified in the <film> region
constant/<film>/fvModels dictionary:

.
.
.
    filmCloudTransfer
    {
        type    filmCloudTransfer;

        libs    ("libfilmCloudTransfer.so");
    }

For an example of cloud->film->VoF transfer see the
tutorials/modules/multiRegion/film/cylinder tutorial case.

Note that parcel transfer from film to Lagrangian cloud is not yet supported,
this will be added soon.
2023-04-30 10:19:25 +01:00
4c68b4bf5b multiphaseEuler/interfacialModels/dragModels/Ergun: Reverted handling of the continuous phase-fraction
back to the form in the original multiphaseEulerFoam, i.e. using the dispersed
phase-fraction directly rather than 1 - continuous phase fraction.
2023-04-29 21:42:34 +01:00
8f3d044b6a filmToVoFTransfer: Updated to lookup VoFtoFilmTransfer from any position in the fvModels 2023-04-26 21:01:30 +01:00
25b99e15c1 tutorials/modules/multiRegion/film: Removed unnecessary Allclean scripts 2023-04-26 21:00:44 +01:00
67ff5da438 ThermoSurfaceFilm: Rationalised names 2023-04-26 14:22:37 +01:00
6666400d17 tutorials/modules/compressibleVoF/plateFilm: Superseded by tutorials/modules/multiRegion/film/VoFToFilm 2023-04-26 12:48:34 +01:00
9733e8e36c parcelSurfaceFilmModels: Relocated ThermoSurfaceFilm from lagrangian 2023-04-26 11:51:44 +01:00
f676f14e1d lagrangian: Refactored to remove direct dependency on surfaceFilm
The lagrangian<->surfaceFilm interface is now in the new
src/parcelSurfaceFilmModels library.
2023-04-26 11:36:45 +01:00
c35eca32ca test/multiphase/multiphaseEuler/populationBalance: Simplified specification of fvSchemes
Patch contributed by Institute of Fluid Dynamics,
Helmholtz-Zentrum Dresden - Rossendorf (HZDR)
2023-04-25 11:24:53 +01:00
f38fd3e314 solvers::twoPhaseSolver: new base-class for twoPhaseVoFSolver and incompressibleDriftFlux
to separate the interface treatment between VoF and drift-flux and avoid code
duplication.
2023-04-24 21:13:04 +01:00
d558e49336 incompressibleDriftFlux: Override the surfaceTensionForce functions
so that the surface tension force is not evaluated or applied as it is
inappropriate for drift-flux modelling of suspensions.
2023-04-23 15:56:53 +01:00
b22cbbcf21 alphaContactAngleFvPatchScalarField -> contactAngleFvPatchScalarField: to avoid duplicate name
The two-phase VoF alphaContactAngleFvPatchScalarField class has been renamed
contactAngleFvPatchScalarField to avoid a name clash with the multiphaseEuler
version of alphaContactAngleFvPatchScalarField so that both VoF and
multiphaseEuler solver modules may be used in different regions of a
foamMultiRun simulation.
2023-04-22 12:12:16 +01:00
91bf882b43 applications/solvers/modules/Allwmake: Updated for incompressibleDriftFlux 2023-04-22 10:54:17 +01:00
3a3a844173 solvers: Removed the deprecated -list.* options, superseded by the more general foamToC
foamToC: New run-time selection table of contents printing and interrogation utility

The new solver modules cannot provide the equivalent functionality of the -list
options available in the solver applications so foamToC has been developed as a
better, more general and flexible alternative, providing a means to print any or
all run-time selection tables in any or all libraries and search the tables for
any particular entries and print which library files the corresponding tables
are in, e.g.

foamToC -solver fluid -table fvPatchScalarField

Contents of table fvPatchScalarField, base type fvPatchField:
    advective                               libfiniteVolume.so
    calculated                              libfiniteVolume.so
    codedFixedValue                         libfiniteVolume.so
    codedMixed                              libfiniteVolume.so
    compressible::alphatJayatillekeWallFunctionlibthermophysicalTransportModels.so
    compressible::alphatWallFunction        libthermophysicalTransportModels.so
    compressible::thermalBaffle1D<eConstSolidThermoPhysics>libthermophysicalTransportModels.so
    compressible::thermalBaffle1D<ePowerSolidThermoPhysics>libthermophysicalTransportModels.so
    compressible::turbulentTemperatureCoupledBaffleMixedlibthermophysicalTransportModels.so
    compressible::turbulentTemperatureRadCoupledMixedlibthermophysicalTransportModels.so
    .
    .
    .

foamToC -solver fluid -search compressible::alphatWallFunction
compressible::alphatWallFunction is in tables
    fvPatchField
        fvPatchScalarField                      libthermophysicalTransportModels.so

and the very useful -allLibs option allows ALL libraries to be searched to find
in which table and which library file a particular model in in for example:

foamToC -allLibs -search phaseTurbulenceStabilisation
Loading libraries:
    libtwoPhaseSurfaceTension.so
    libcv2DMesh.so
    libODE.so
    .
    .
    .
phaseTurbulenceStabilisation is in tables
    fvModel                                 libmultiphaseEulerFoamFvModels.so

Application
    foamToC

Description
    Run-time selection table of contents printing and interrogation.

    The run-time selection tables are populated by the optionally specified
    solver class and any additional libraries listed in the \c -libs option or
    all libraries using the \c -allLibs option.  Once populated the tables can
    be searched and printed by a range of options listed below.  Table entries
    are printed with the corresponding library they are in to aid selection
    and the addition of \c libs entries to ensure availability to the solver.

Usage
    \b foamToC [OPTION]
      - \par -solver \<name\>
        Specify the solver class

      - \par -libs '(\"lib1.so\" ... \"libN.so\")'
        Specify the additional libraries to load

      - \par -allLibs
        Load all libraries

      - \par switches,
        List all available debug, info and optimisation switches

      - \par all,
        List the contents of all the run-time selection tables

      - \par tables
        List the run-time selection table names (this is the default action)

      - \par table \<name\>
        List the contents of the specified table or the list sub-tables

      - \par search \<name\>
        Search for and list the tables containing the given entry

      - \par scalarBCs,
        List scalar field boundary conditions (fvPatchField<scalar>)

      - \par vectorBCs,
        List vector field boundary conditions (fvPatchField<vector>)

      - \par functionObjects,
        List functionObjects

      - \par fvModels,
        List fvModels

      - \par fvConstraints,
        List fvConstraints

    Example usage:
      - Print the list of scalar boundary conditions (fvPatchField<scalar>)
        provided by the \c fluid solver without additional libraries:
        \verbatim
            foamToC -solver fluid -scalarBCs
        \endverbatim

      - Print the list of RAS momentum transport models provided by the
        \c fluid solver:
        \verbatim
            foamToC -solver fluid -table RAScompressibleMomentumTransportModel
        \endverbatim

      - Print the list of functionObjects provided by the
        \c multicomponentFluid solver with the libfieldFunctionObjects.so
        library:
        \verbatim
            foamToC -solver multicomponentFluid \
                -libs '("libfieldFunctionObjects.so")' -functionObjects
        \endverbatim

      - Print a complete list of all run-time selection tables:
        \verbatim
            foamToC -allLibs -tables
            or
            foamToC -allLibs
        \endverbatim

      - Print a complete list of all entries in all run-time selection tables:
        \verbatim
            foamToC -allLibs -all
        \endverbatim
2023-04-22 09:39:14 +01:00
b949c295ba solvers::incompressibleDriftFlux: New solver module for two-phase flow with drift-flux
executed with foamRun for single region simulations of foamMultiRun for
multi-region simulations.  Replaces driftFluxFoam and all the corresponding
tutorials have been updated and moved to
tutorials/modules/incompressibleDriftFlux.

Class
    Foam::solvers::incompressibleDriftFlux

Description
    Solver module for 2 incompressible fluids using the mixture approach with
    the drift-flux approximation for relative motion of the phases, with
    optional mesh motion and mesh topology changes including adaptive
    re-meshing.

    The momentum and other fluid properties are of the "mixture" and a single
    momentum equation is solved with mixture transport modelling in which a
    single laminar, RAS or LES model is selected to model the momentum stress.

    Uses the flexible PIMPLE (PISO-SIMPLE) solution for time-resolved and
    pseudo-transient and steady simulations.

    Optional fvModels and fvConstraints are provided to enhance the simulation
    in many ways including adding various sources, Lagrangian
    particles, surface film etc. and constraining or limiting the solution.

SourceFiles
    incompressibleDriftFlux.C

See also
    Foam::solvers::VoFSolver
    Foam::solvers::twoPhaseVoFSolver
    Foam::solvers::compressibleVoF
2023-04-22 09:00:41 +01:00
4ec52a5d41 Updates for Clang 2023-04-21 17:40:48 +01:00