Commit Graph

59 Commits

Author SHA1 Message Date
be844f8340 MomentumTransferPhaseSystem: Name the interpolation of pPrime consistently between face and cell momentum forms
Simplifies the setting of the scheme for the phase pressure, e.g. choosing localMax

interpolationSchemes
{
    default     linear;
    pPrime      localMax;
}

improves stability and reduces chequerboarding in the solution at higher Courant
numbers.
2022-12-04 15:51:37 +00:00
e8078ca235 multiphaseEuler::MomentumTransferPhaseSystem:alphaDByAf: multiphase consistent replacement for DByAfs
In order that the phase-fractions sum to 1 it is necessary that the same
diffusivity is used for ALL phases in the implicitPhasePressure option.  This is
guaranteed by the new alphaDByAf function which returns a single
surfaceScalarField diffusivity to be used when forming the Laplacian term in the
implicit phase-fraction diffusion correction equation in phaseSystemSolve.

The phase-pressure and turbulent dispersion interface terms are summed over all
phases and interfaces in alphaDByAf to form a single diffusivity.
2022-12-01 21:12:04 +00:00
ed7e703040 Time::timeName(): no longer needed, calls replaced by name()
The timeName() function simply returns the dimensionedScalar::name() which holds
the user-time name of the current time and now that timeName() is no longer
virtual the dimensionedScalar::name() can be called directly.  The timeName()
function implementation is maintained for backward-compatibility.
2022-11-30 15:53:51 +00:00
3aea199ebe multiphaseEuler::IATEsources::IATEturbulentBreakUp: Corrected turbulent Weber number and source expression
Resolves bug-reports:
https://bugs.openfoam.org/view.php?id=3936
https://bugs.openfoam.org/view.php?id=3935
2022-11-28 08:44:56 +00:00
df22313066 Renamed surfaceFilmSubModels -> surfaceFilmModels 2022-11-23 15:28:51 +00:00
d693c17b3d singleLayerRegionModel: renamed regionMesh() -> mesh()
in the context of the region model the mesh is the region mesh and so there is
no need to name the access function with the prefix "region".
2022-11-23 14:52:33 +00:00
052a4803f0 regionModels: Refactored to remove the now redundant regionModel base class 2022-11-23 14:23:12 +00:00
619f015bcc alphatWallBoilingWallFunctionFvPatchScalarField: Corrected convergence check in parallel 2022-11-21 11:46:06 +00:00
57379321f8 coupledMultiphaseTemperatureFvPatchScalarField: Added support for kappaLayers 2022-11-21 11:42:57 +00:00
084097bab9 solvers/modules: Updated correctPhi logic so that it is not required following topology change
Now fluxes are updated from the mapped fields following mesh topology change
with or without implicit continuity correction enabled by the optional
correctPhi switch.
2022-11-20 20:22:59 +00:00
691866d782 solvers::isothermalFluid,fluid,multicomponentFluid: Improved the enthalpy pressure-work on moving meshes
also simplified the implementation to improve maintainability
2022-11-19 20:32:27 +00:00
091852f66c coupledMultiphaseTemperatureFvPatchScalarField: Updated for Clang 2022-11-18 16:37:22 +00:00
b718817164 multiphaseEuler: interfaceSaturationTemperatureModel: Remove left over debugging message
Resolves bug report https://bugs.openfoam.org/view.php?id=3933
2022-11-18 08:44:58 +00:00
b36d8fca44 solvers::isothermalFluid: Improved the consistency, accuracy and stability of the pressure-work term
for moving mesh cases, in both the internal energy and enthalpy equations
2022-11-17 18:08:59 +00:00
29b82422d7 applications/solvers/modules: Reorganised to match the structure of tutorials/modules
Given that the number of solid solver modules is currently 1 and unlikely to
exceed 3 it is not very useful to maintain solid and fluid sub-directories and
easier to see the correspondence between the solver modules and tutorial cases
without.
2022-11-16 23:28:59 +00:00
1df33f58c9 multiphaseEuler: Cavitation phaseTransfer model
This adds cavitation modelling to the multiphaseEuler solver module as a
phaseTransfer model. The underlying cavitation modelling is the same as
for the compressibleVoF module.

An example specification in constant/phaseProperties is shown below:

    phaseTransfer
    {
        gas_liquid
        {
            type        cavitation;

            model       Kunz;

            liquid      water;

            pSat        80000;

            UInf        5.33;
            tInf        0.028142589;
            Cc          100;
            Cv          100;
        }
    }

Based on code contributed by Petteri Peltonen, VTT.
2022-11-16 21:36:13 +00:00
721bf7b41a compressible::cavitationModels: Use temperature dependent saturation pressure model
The cavitation models used by the compressibleVoF module can now have a
temperature-dependent saturation pressure model specified. For example,
in the constant/fvModels file of a compressibleVoF case:

    VoFCavitation
    {
        type    VoFCavitation;

        libs    ("libcompressibleVoFCavitation.so");

        model   SchnerrSauer;

        liquid  water;

        // Constant saturation pressure
        //pSat    2300;

        // Antoine equation for temperature-dependent saturation pressure
        pSat
        {
            type    Antoine;
            A       22;
            B      -3000;
            C      -500;
        }

        n       1.6e+13;
        dNuc    2.0e-06;
        Cc      1;
        Cv      1;
    }
2022-11-16 21:36:13 +00:00
9567bc0d4b cavitationModels: Made insensitive to phase order
The cavitation models used by the interFoam solver and the
compressibleVoF solver module can now be applied regardless of the
ordering of the liquid and vapour phases. A "liquid" keyword is now
required in the model specification in order to control which phase is
considered to be the condensed liquid state. Previously the liquid phase
was assumed to be the first of the two phases.
2022-11-16 21:36:13 +00:00
9b373b2950 multiphaseEuler: Use saturation models from the thermo library
The multiphaseEuler module now uses saturation models from the
centralised thermophysical properties library.

The control of these models is slightly different than for the previous
multiphaseEuler-specific saturation models. Where previously a
"saturationPressure" or "saturationTemperature" sub-dictionary was
employed, now "pSat" and "Tsat" entries are used which can be specified
flexibly in a similar manner to function1-s. See the previous commit for
details.
2022-11-16 21:36:13 +00:00
366e38d34a compressibleVoF: Consolidated library functionality 2022-11-16 20:54:40 +00:00
21983bbbb6 solvers::isothermalFluid: Added support fixedFluxExtrapolatedPressure with the transonic option
For high-speed flow cases benefiting from extrapolated pressure, e.g. IC engine
piston motion the fixedFluxExtrapolatedPressure pressure BC can now be used with
the transonic pressure solution option.
2022-11-16 18:22:09 +00:00
a7d40a4fe5 coupledMultiphaseTemperatureFvPatchScalarField: New BC for multiphase CHT cases
Class
    Foam::coupledMultiphaseTemperatureFvPatchScalarField

Description
    Mixed boundary condition for the phase temperature of a phase in an
    Euler-Euler multiphase simulation, to be used for heat-transfer with another
    region in a CHT case.  Optional thin wall material layer resistances can be
    specified through thicknessLayers and kappaLayers entries.

See also
    Foam::coupledTemperatureFvPatchScalarField

The new tutorial case tutorials/modules/CHT/multiphaseCoolingCylinder2D is a
variant of the coolingCylinder2D case in which a 10% oil droplets in water
mixture flows over and cools a hot cylinder.  The case in run with the
foamMultiRun multi-solver executor.
2022-11-15 16:56:56 +00:00
12422f2944 solvers::multiphaseEuler: Updated fixedMultiPhaseHeatFlux -> fixedMultiphaseHeatFlux 2022-11-11 16:15:16 +00:00
f3e4ba553a solvers::multiphaseEuler::multiphaseThermophysicalTransportModels: new library for thermophysical transport models and BCs
The thermophysical boundary conditions have be moved from the
multiphaseCompressibleMomentumTransportModels library into the new
multiphaseThermophysicalTransportModels library.
2022-11-11 14:25:09 +00:00
01b4bf55ef multiphaseEuler: Improved mass transfer linearisation w.r.t pressure
Mass transfer rates are now updated following a change in the pressure
if the mass transfer modelling provides a pressure coefficient. This
means that pimple correctors can be used to improve the behaviour of
mass transfer processes that coupled closely to the pressure field.
2022-11-11 09:24:06 +00:00
e1c0207695 solvers::compressibleVoF,compressibleVoF::correctCoNum(): Removed unnecessary nInternalFaces() test
Resolves bug-report https://bugs.openfoam.org/view.php?id=3929
2022-11-10 14:30:21 +00:00
aa21d36278 alphatWallBoilingWallFunction: Usability improvements
Bubble waiting time ratio has been made a user adjustable parameter, and
the names of the fields reported by the wallBoilingProperties function
have been rationalised.
2022-11-08 10:32:31 +00:00
4bdfeea66d solvers::multiphaseEuler: Updated for clang 2022-11-06 22:00:45 +00:00
731b741b51 solvers::isothermalFluid: Added support for backward time scheme with topology change
Now cases with mesh refinement/unrefinement can be run with the 2nd-order
backward time scheme.  However this is for static meshes only, 2nd-order in time
with topology change AND mesh-motion is not currently supported.
2022-11-06 19:04:06 +00:00
3d7b110a15 solvers::multiphaseEuler: Updated and tested LTS support 2022-11-04 16:08:24 +00:00
ef84772312 applications/solvers/modules/fluid/multiphaseEuler/Make: Redundant, deleted 2022-11-04 10:46:37 +00:00
2180ed5c6c multiphaseEuler/functionObjects/Make/options: Removed duplicate entry
Resolves bug-report https://bugs.openfoam.org/view.php?id=3926
2022-11-04 10:12:51 +00:00
c5a2f486b5 Merge branch 'master' of github.com-OpenFOAM:OpenFOAM/OpenFOAM-dev 2022-11-03 21:00:29 +00:00
b1dea63437 setDeltaT: Rationalised and standardised for both modular and standard solvers 2022-11-03 20:59:43 +00:00
0da49126b4 multiphaseEuler: Function to extract wall boiling model properties
This function looks up wall boiling wall functions and collects and
writes out the following data:

  - Bubble departure diameter
  - Bubble departure frequency
  - Nucleation site density
  - Effective liquid fraction at the wall
  - Quenching heat flux
  - Evaporative heat flux

Example of function object specification:

    \verbatim
    writeWallBoilingProperties
    {
        type            wallBoilingProperties;
        functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
        writeControl    writeTime;
        phase           liquid;
    }
    \endverbatim

Patch contributed by Juho Peltola, VTT.
2022-11-03 19:27:01 +00:00
488ffd9fd1 Deleted multiphaseEulerFoam: Replaced by the multiphaseEuler solver module 2022-11-03 15:01:38 +00:00
cec0359871 solvers::multiphaseEuler: New solver module for Euler-Euler multiphase simulations
executed with foamRun for single region simulations of foamMultiRun for
multi-region simulations.  Replaces multiphaseEulerFoam and all the
corresponding tutorials have been updated and moved to
tutorials/modules/multiphaseEuler.

Class
    Foam::solvers::multiphaseEuler

Description
    Solver module for a system of any number of compressible fluid phases with a
    common pressure, but otherwise separate properties. The type of phase model
    is run time selectable and can optionally represent multiple species and
    in-phase reactions. The phase system is also run time selectable and can
    optionally represent different types of momentum, heat and mass transfer.

    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
    multiphaseEuler.C

See also
    Foam::solvers::compressibleVoF
    Foam::solvers::fluidSolver
    Foam::solvers::incompressibleFluid
2022-11-03 14:49:56 +00:00
4bd90bc969 rhoThermo: Renamed thermo:rho -> rho
The thermodynamic density field is now named "rho" by default and only renamed
"thermo:rho" by solvers that create and maintain a separate continuity density
field which is named "rho".  This change significantly simplifies and
standardises the specification of schemes and boundary conditions requiring
density as it is now always named "rho" or "rho.<phase>" unless under some very
unusual circumstances the thermodynamic rather than continuity density is
required for a solver maintaining both.

The advantage of this change is particularly noticeable for multiphase
simulations in which each phase has its own density now named "rho.<phase>"
rather than "thermo:rho.<phase>" as separate phase continuity density fields are
not required so for multiphaseEulerFoam the scheme specification:

    "div\(alphaRhoPhi.*,\(p\|thermo:rho.*\)\)" Gauss limitedLinear 1;

is now written:

    "div\(alphaRhoPhi.*,\(p\|rho.*\)\)" Gauss limitedLinear 1;
2022-10-28 02:19:13 +01:00
3152df4299 Resolved problems with Clang compilation 2022-10-26 17:36:24 +01:00
5af5413542 thermophysicalTransportModel: New abstract base-class for all thermophysical transport
the new fluidThermophysicalTransportModel and solidThermophysicalTransportModel
are derived from thermophysicalTransportModel providing a consistent and unified
interface for heat transport within and between regions.  Coupled and external
heat-transfer boundary conditions can now be written independent of the
thermophysical properties or transport modelling of the regions providing
greater flexibility, simpler code and reduces the maintenance overhead.
2022-10-23 04:13:52 +01:00
3521ab03a2 ThermophysicalTransportModels: Reorganisation to support a new abstract base-class fluidThermophysicalTransportModel
The previous fluidThermophysicalTransportModel typedef has been renamed
fluidThermoThermophysicalTransportModel as it is instantiated on fluidThermo,
freeing the name fluidThermophysicalTransportModel for the new base-class.
2022-10-21 19:45:26 +01:00
b1de509a77 fvModels: surfaceFilms: Support for multiple films
The surfaceFilm fvModel has been renamed surfaceFilms, and can now have
a number of independent film models specified.

For example, the hotBoxes tutorial could be modified to have separate
film regions for the boxes and for the floor. In which case, the names
of the separate films would need specifying as shown below.

    surfaceFilms
    {
        type    surfaceFilms;
        surfaceFilms (boxesFilm floorFilm); // <-- new entry
        libs    ("libsurfaceFilmModels.so");
    }

The old fvModel name, surfaceFilm, has been maintained for backwards
compatibility.

The Lagrangian surface film model now also requires the coupled
surfaceFilms to be specified when there is not just a single
default-named film. For example, in constant/cloudProperties:

    subModels
    {
        surfaceFilmModel thermoSurfaceFilm;

        thermoSurfaceFilmCoeffs
        {
            surfaceFilms    (boxesFilm floorFilm); // <-- new entry
            interactionType splashBai;
            deltaWet        0.0005;
            Adry            2630;
            Awet            1320;
            Cf              0.6;
        }

        ...
    }
2022-10-20 19:26:48 +01:00
fd2e8f1f4d solvers/modules/fluid/isothermalFluid/correctPressure: Corrected transonic option for moving meshes
This change resolves a mass-conservation issue caused by the handling of
absolute and relative fluxes in the construction of the transonic pressure
equation.
2022-10-20 13:14:56 +01:00
cdaaa61987 solidThermophysicalTransportModel: new thermophysical transport model for solids
to handle isotropic and anisotropic is a consistent, general and extensible
manner, replacing the horrible hacks which were in solidThermo.

This is entirely consistent with thermophysicalTransportModel for fluids and
provides the q() and divq() for the solid energy conservation equations.  The
transport model and properties are specified in the optional
thermophysicalTransport dictionary, the default model being isotropic if this
dictionary file is not present, thus providing complete backward-compatibility
for the common isotropic cases.

Anisotropic thermal conductivity is now handled in a much more general manner by
the anisotropic model:

Class
    Foam::solidThermophysicalTransportModels::anisotropic

Description
    Solid thermophysical transport model for anisotropic thermal conductivity

    The anisotropic thermal conductivity field is evaluated from the solid
    material anisotropic kappa specified in the physicalProperties dictionary
    transformed into the global coordinate system using default
    coordinate system and optionally additional coordinate systems specified
    per-zone in the thermophysicalProperties dictionary.

Usage
    Example of the anisotropic thermal conductivity specification in
    thermophysicalProperties with two zone-based coordinate systems in
    addition to the default:

    \verbatim
    model anisotropic;

    // Default coordinate system
    coordinateSystem
    {
        type        cartesian;
        origin      (0 0 0);
        coordinateRotation
        {
            type        cylindrical;
            e3          (1 0 0);
        }
    }

    // Optional zone coordinate systems
    zones
    {
        coil1
        {
            type        cartesian;
            origin      (0.1 0.2 0.7);
            coordinateRotation
            {
                type        cylindrical;
                e3          (0.5 0.866 0);
            }
        }

        coil2
        {
            type        cartesian;
            origin      (0.4 0.5 1);
            coordinateRotation
            {
                type        cylindrical;
                e3          (0.866 0.5 0);
            }
        }
    }
    \endverbatim

This development required substantial rationalisation of solidThermo,
coordinateSystems and updates to the solid solver module, solidDisplacementFoam,
the wallHeatFlux functionObject, thermalBaffle and all coupled thermal boundary
conditions.
2022-10-19 16:45:00 +01:00
8976585b76 waveSurfacePressureFvPatchScalarField: Updated to operate with p_rgh
so that it can now be used with either the isothermalFluid or fluid solver
modules, thus supporting non-uniform fluid properties, compressibility and
thermal effect.  This development makes the special potentialFreeSurfaceFoam
solver redundant as both the isothermalFluid and fluid solver modules are more
general and has been removed and replaced with a user redirection script.

The tutorials/multiphase/potentialFreeSurfaceFoam cases have been updated to run
with the isothermalFluid solver module:

    tutorials/multiphase/potentialFreeSurfaceFoam/oscillatingBox
    tutorials/multiphase/potentialFreeSurfaceFoam/movingOscillatingBox

which demonstrate how to upgrade potentialFreeSurfaceFoam cases to
isothermalFluid.
2022-10-11 21:58:36 +01:00
9dc91eb479 compressibleVoF: Replaced twoPhaseChangeModel with the VoFCavitation fvModel
Replacing the specific twoPhaseChangeModel with a consistent and general fvModel
interface will support not just cavitation using the new compressible
VoFCavitation fvModel but also other phase-change and interface manipulation
models in the future and is easier to use for case-specific and other user
customisation.

Class
    Foam::fv::compressible::VoFCavitation

Description
    Cavitation fvModel

Usage
    Example usage:
    \verbatim
    VoFCavitation
    {
        type    VoFCavitation;

        libs    ("libcompressibleVoFCavitation.so");

        model   SchnerrSauer;

        KunzCoeffs
        {
            pSat    2300;   // Saturation pressure

            UInf    20.0;
            tInf    0.005; // L = 0.1 m
            Cc      1000;
            Cv      1000;
        }

        MerkleCoeffs
        {
            pSat    2300;   // Saturation pressure

            UInf    20.0;
            tInf    0.005;  // L = 0.1 m
            Cc      80;
            Cv      1e-03;
        }

        SchnerrSauerCoeffs
        {
            pSat    2300;   // Saturation pressure

            n       1.6e+13;
            dNuc    2.0e-06;
            Cc      1;
            Cv      1;
        }
    }
    \endverbatim

The cavitating ballValve tutorial has been updated to use the new VoFCavitation
fvModel.
2022-09-28 13:02:47 +01:00
d3df91a5eb interFoam: Replaced twoPhaseChangeModel with the VoFCavitation fvModel
Replacing the specific twoPhaseChangeModel with a consistent and general fvModel
interface will support not just cavitation using the new VoFCavitation fvModel
but also other phase-change and interface manipulation models in the future and
is easier to use for case-specific and other user customisation.
2022-09-27 19:28:11 +01:00
c22a5a7aa6 isothermalFluid::correctBuoyantPressure: Relax the net force momentum equation source
rather than p_rgh which introduces an imbalance between the pressure and
buoyancy forces.  The relaxation factor for p_rgh specified in fvSolution is
used to relax the net force as the intent is to relax the pressure and this
provides convenient usage and backwards-compatibility.

Optional relaxation for the thermodynamic pressure p is also available for case
this provides convergence benefit for steady cases by relaxing the pressure work
term is the energy equation.

Note these changes only relate to the operation of the isothermalFluid solver
module for buoyant cases.
2022-09-22 15:05:33 +01:00
3719f7d9de VoFClouds: Forward mesh changes to the parcelClouds 2022-09-21 14:36:22 +01:00
c0a2c5f4f9 isothermalFluid: Reverted the handling of the compressibility flux
to regain the behaviour of rhoPimpleFoam in OpenFOAM-9 which is more robust than
the potentially more consistent and accurate flux correction approach in
OpenFOAM-10.
2022-09-21 13:03:39 +01:00