Files
OpenFOAM-12/applications/modules/multiphaseEuler/phaseSystems/phaseInterface/phaseInterface/phaseInterface.H
Henry Weller e744fdb5f1 Modular solvers: Reorganised directory structure of applications and tutorials
The new flexible and extensible modular solvers structure already provides most
of the simulation functionality needed for single phase, multiphase,
multicomponent etc. fluid flow problems as well as a very effective method of
combining these with solid heat transfer, solid stress, surface film to solve
complex multi-region, multi-physics problems and are now the primary mechanism
for the further development of OpenFOAM simulation capability in future.  To
emphasis this for both users and developers the applications/solvers directory
has been separated into applications/modules containing all the solver modules:

├── modules
│   ├── compressibleMultiphaseVoF
│   ├── compressibleVoF
│   ├── film
│   ├── fluid
│   ├── fluidSolver
│   ├── functions
│   ├── incompressibleDenseParticleFluid
│   ├── incompressibleDriftFlux
│   ├── incompressibleFluid
│   ├── incompressibleMultiphaseVoF
│   ├── incompressibleVoF
│   ├── isothermalFilm
│   ├── isothermalFluid
│   ├── movingMesh
│   ├── multicomponentFluid
│   ├── multiphaseEuler
│   ├── multiphaseVoFSolver
│   ├── shockFluid
│   ├── solid
│   ├── solidDisplacement
│   ├── twoPhaseSolver
│   ├── twoPhaseVoFSolver
│   ├── VoFSolver
│   └── XiFluid

applications/solvers containing the foamRun and foamMultiRun solver applications
which instantiate and execute the chosen solver modules and also standalone
solver applications for special initialisation and test activities:

├── solvers
│   ├── boundaryFoam
│   ├── chemFoam
│   ├── foamMultiRun
│   ├── foamRun
│   └── potentialFoam

and applications/legacy containing legacy solver applications which are not
currently being actively developed but the functionality of which will be merged
into the solver modules or form the basis of new solver modules as the need
arises:

├── legacy
│   ├── basic
│   │   ├── financialFoam
│   │   └── laplacianFoam
│   ├── combustion
│   │   └── PDRFoam
│   ├── compressible
│   │   └── rhoPorousSimpleFoam
│   ├── electromagnetics
│   │   ├── electrostaticFoam
│   │   ├── magneticFoam
│   │   └── mhdFoam
│   ├── incompressible
│   │   ├── adjointShapeOptimisationFoam
│   │   ├── dnsFoam
│   │   ├── icoFoam
│   │   ├── porousSimpleFoam
│   │   └── shallowWaterFoam
│   └── lagrangian
│       ├── dsmcFoam
│       ├── mdEquilibrationFoam
│       └── mdFoam

Correspondingly the tutorials directory structure has been reorganised with the
modular solver directories at the top level with names that make it easier for
users to find example cases relating to their particular requirements and a
legacy sub-directory containing cases corresponding to the legacy solver
applications listed above:

├── compressibleMultiphaseVoF
│   └── damBreak4phaseLaminar
├── compressibleVoF
│   ├── ballValve
│   ├── climbingRod
│   ├── damBreak
│   ├── depthCharge2D
│   ├── depthCharge3D
│   ├── sloshingTank2D
│   └── throttle
├── film
│   └── rivuletPanel
├── fluid
│   ├── aerofoilNACA0012
│   ├── aerofoilNACA0012Steady
│   ├── angledDuct
│   ├── angledDuctExplicitFixedCoeff
│   ├── angledDuctLTS
│   ├── annularThermalMixer
│   ├── BernardCells
│   ├── blockedChannel
│   ├── buoyantCavity
│   ├── cavity
│   ├── decompressionTank
│   ├── externalCoupledCavity
│   ├── forwardStep
│   ├── helmholtzResonance
│   ├── hotRadiationRoom
│   ├── hotRadiationRoomFvDOM
│   ├── hotRoom
│   ├── hotRoomBoussinesq
│   ├── hotRoomBoussinesqSteady
│   ├── hotRoomComfort
│   ├── iglooWithFridges
│   ├── mixerVessel2DMRF
│   ├── nacaAirfoil
│   ├── pitzDaily
│   ├── prism
│   ├── shockTube
│   ├── squareBend
│   ├── squareBendLiq
│   └── squareBendLiqSteady
├── incompressibleDenseParticleFluid
│   ├── column
│   ├── cyclone
│   ├── Goldschmidt
│   ├── GoldschmidtMPPIC
│   └── injectionChannel
├── incompressibleDriftFlux
│   ├── dahl
│   ├── mixerVessel2DMRF
│   └── tank3D
├── incompressibleFluid
│   ├── airFoil2D
│   ├── ballValve
│   ├── blockedChannel
│   ├── cavity
│   ├── cavityCoupledU
│   ├── channel395
│   ├── drivaerFastback
│   ├── ductSecondaryFlow
│   ├── elipsekkLOmega
│   ├── flowWithOpenBoundary
│   ├── hopperParticles
│   ├── impeller
│   ├── mixerSRF
│   ├── mixerVessel2D
│   ├── mixerVessel2DMRF
│   ├── mixerVesselHorizontal2DParticles
│   ├── motorBike
│   ├── motorBikeSteady
│   ├── movingCone
│   ├── offsetCylinder
│   ├── oscillatingInlet
│   ├── pipeCyclic
│   ├── pitzDaily
│   ├── pitzDailyLES
│   ├── pitzDailyLESDevelopedInlet
│   ├── pitzDailyLTS
│   ├── pitzDailyPulse
│   ├── pitzDailyScalarTransport
│   ├── pitzDailySteady
│   ├── pitzDailySteadyExperimentalInlet
│   ├── pitzDailySteadyMappedToPart
│   ├── pitzDailySteadyMappedToRefined
│   ├── planarContraction
│   ├── planarCouette
│   ├── planarPoiseuille
│   ├── porousBlockage
│   ├── propeller
│   ├── roomResidenceTime
│   ├── rotor2DRotating
│   ├── rotor2DSRF
│   ├── rotorDisk
│   ├── T3A
│   ├── TJunction
│   ├── TJunctionFan
│   ├── turbineSiting
│   ├── waveSubSurface
│   ├── windAroundBuildings
│   └── wingMotion
├── incompressibleMultiphaseVoF
│   ├── damBreak4phase
│   ├── damBreak4phaseFineLaminar
│   ├── damBreak4phaseLaminar
│   └── mixerVessel2DMRF
├── incompressibleVoF
│   ├── angledDuct
│   ├── capillaryRise
│   ├── cavitatingBullet
│   ├── climbingRod
│   ├── containerDischarge2D
│   ├── damBreak
│   ├── damBreakLaminar
│   ├── damBreakPorousBaffle
│   ├── damBreakWithObstacle
│   ├── DTCHull
│   ├── DTCHullMoving
│   ├── DTCHullWave
│   ├── floatingObject
│   ├── floatingObjectWaves
│   ├── forcedUpstreamWave
│   ├── mixerVessel
│   ├── mixerVessel2DMRF
│   ├── mixerVesselHorizontal2D
│   ├── nozzleFlow2D
│   ├── planingHullW3
│   ├── propeller
│   ├── sloshingCylinder
│   ├── sloshingTank2D
│   ├── sloshingTank2D3DoF
│   ├── sloshingTank3D
│   ├── sloshingTank3D3DoF
│   ├── sloshingTank3D6DoF
│   ├── testTubeMixer
│   ├── waterChannel
│   ├── wave
│   ├── wave3D
│   └── weirOverflow
├── isothermalFilm
│   └── rivuletPanel
├── isothermalFluid
│   ├── potentialFreeSurfaceMovingOscillatingBox
│   └── potentialFreeSurfaceOscillatingBox
├── legacy
│   ├── basic
│   │   ├── financialFoam
│   │   │   └── europeanCall
│   │   └── laplacianFoam
│   │       └── flange
│   ├── combustion
│   │   └── PDRFoam
│   │       └── flamePropagationWithObstacles
│   ├── compressible
│   │   └── rhoPorousSimpleFoam
│   │       ├── angledDuctExplicit
│   │       └── angledDuctImplicit
│   ├── electromagnetics
│   │   ├── electrostaticFoam
│   │   │   └── chargedWire
│   │   └── mhdFoam
│   │       └── hartmann
│   ├── incompressible
│   │   ├── adjointShapeOptimisationFoam
│   │   │   └── pitzDaily
│   │   ├── dnsFoam
│   │   │   └── boxTurb16
│   │   ├── icoFoam
│   │   │   ├── cavity
│   │   │   └── elbow
│   │   ├── porousSimpleFoam
│   │   │   ├── angledDuctExplicit
│   │   │   └── angledDuctImplicit
│   │   └── shallowWaterFoam
│   │       └── squareBump
│   ├── lagrangian
│   │   ├── dsmcFoam
│   │   │   ├── freeSpacePeriodic
│   │   │   ├── freeSpaceStream
│   │   │   ├── supersonicCorner
│   │   │   └── wedge15Ma5
│   │   ├── mdEquilibrationFoam
│   │   │   ├── periodicCubeArgon
│   │   │   └── periodicCubeWater
│   │   └── mdFoam
│   │       └── nanoNozzle
├── mesh
│   ├── blockMesh
│   │   ├── pipe
│   │   ├── sphere
│   │   ├── sphere7
│   │   └── sphere7ProjectedEdges
│   ├── refineMesh
│   │   └── refineFieldDirs
│   └── snappyHexMesh
│       ├── flange
│       └── pipe
├── movingMesh
│   └── SnakeRiverCanyon
├── multicomponentFluid
│   ├── aachenBomb
│   ├── counterFlowFlame2D
│   ├── counterFlowFlame2D_GRI
│   ├── counterFlowFlame2D_GRI_TDAC
│   ├── counterFlowFlame2DLTS
│   ├── counterFlowFlame2DLTS_GRI_TDAC
│   ├── DLR_A_LTS
│   ├── filter
│   ├── lockExchange
│   ├── membrane
│   ├── nc7h16
│   ├── parcelInBox
│   ├── SandiaD_LTS
│   ├── simplifiedSiwek
│   ├── smallPoolFire2D
│   ├── smallPoolFire3D
│   ├── verticalChannel
│   ├── verticalChannelLTS
│   └── verticalChannelSteady
├── multiphaseEuler
│   ├── bed
│   ├── bubbleColumn
│   ├── bubbleColumnEvaporating
│   ├── bubbleColumnEvaporatingDissolving
│   ├── bubbleColumnEvaporatingReacting
│   ├── bubbleColumnIATE
│   ├── bubbleColumnLaminar
│   ├── bubbleColumnLES
│   ├── bubblePipe
│   ├── damBreak4phase
│   ├── fluidisedBed
│   ├── fluidisedBedLaminar
│   ├── Grossetete
│   ├── hydrofoil
│   ├── injection
│   ├── LBend
│   ├── mixerVessel2D
│   ├── mixerVessel2DMRF
│   ├── pipeBend
│   ├── steamInjection
│   ├── titaniaSynthesis
│   ├── titaniaSynthesisSurface
│   ├── wallBoilingIATE
│   ├── wallBoilingPolydisperse
│   └── wallBoilingPolydisperseTwoGroups
├── multiRegion
│   ├── CHT
│   │   ├── circuitBoardCooling
│   │   ├── coolingCylinder2D
│   │   ├── coolingSphere
│   │   ├── heatedDuct
│   │   ├── heatExchanger
│   │   ├── multiphaseCoolingCylinder2D
│   │   ├── reverseBurner
│   │   ├── shellAndTubeHeatExchanger
│   │   ├── VoFcoolingCylinder2D
│   │   └── wallBoiling
│   └── film
│       ├── cylinder
│       ├── cylinderDripping
│       ├── cylinderVoF
│       ├── hotBoxes
│       ├── rivuletBox
│       ├── rivuletPanel
│       ├── splashPanel
│       └── VoFToFilm
├── potentialFoam
│   ├── cylinder
│   └── pitzDaily
├── resources
│   ├── blockMesh
│   ├── geometry
│   └── thermoData
├── shockFluid
│   ├── biconic25-55Run35
│   ├── forwardStep
│   ├── LadenburgJet60psi
│   ├── movingCone
│   ├── obliqueShock
│   ├── shockTube
│   └── wedge15Ma5
├── solidDisplacement
│   ├── beamEndLoad
│   └── plateHole
└── XiFluid
    ├── kivaTest
    └── moriyoshiHomogeneous
2023-05-25 18:14:41 +01:00

427 lines
12 KiB
C++

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2021-2023 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::phaseInterface
Description
Class to represent an interface between phases. Derivations can further
specify the configuration of that interface; e.g., representing dispersal,
displacement or sidedness.
SourceFiles
phaseInterface.C
phaseInterfaceI.H
\*---------------------------------------------------------------------------*/
#ifndef phaseInterface_H
#define phaseInterface_H
#include "phaseModel.H"
#include "compressibleTwoPhases.H"
#include "uniformDimensionedFields.H"
#include "runTimeSelectionTables.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class phaseInterfaceKey;
/*---------------------------------------------------------------------------*\
Class phaseInterface Declaration
\*---------------------------------------------------------------------------*/
class phaseInterface
:
public compressibleTwoPhases
{
private:
// Private Static Data
//- List of head separators. This is the first separator in an
// interface name, and it delimits the names of phases on either side
// of the interface. Other separators are modifiers (e.g.,
// displacedBy, inThe, ...).
static wordList headSeparators_;
//- Map from old-format separators to separators
static HashTable<word> oldSeparatorToSeparator_;
public:
// Public Static Functions
//- Get a reference to phase1 after sorting the phases by index
static const phaseModel& getPhase1
(
const phaseModel& phase1,
const phaseModel& phase2
);
//- Get a reference to phase2 after sorting the phases by index
static const phaseModel& getPhase2
(
const phaseModel& phase1,
const phaseModel& phase2
);
//- Add a head separator to the list
static bool addHeadSeparator(const word& separator);
//- Add a old separator to separator to the table
static bool addOldSeparatorToSeparator
(
const word& oldSeparator,
const word& separator
);
//- Split an interface name and return all its parts
static wordList nameToNameParts
(
const phaseSystem& fluid,
const word& name
);
//- Split an interface name and return its separators
static wordList nameToSeparators
(
const phaseSystem& fluid,
const word& name
);
//- Convert a list of separators into a type name
static word separatorsToTypeName
(
const wordList& separators
);
//- Convert an interface name into a type name. Essentially just
// replaces valid phase names with a "<phase>" placeholder.
static word nameToTypeName
(
const phaseSystem& fluid,
const word& name
);
//- Convert interface name parts to an interface name
static word namePartsToName
(
const phaseSystem& fluid,
const wordList& nameParts
);
//- Convert old-format interface name parts to an interface name. Used
// in phaseSystem to provide backwards compatible input.
static word oldNamePartsToName
(
const phaseSystem& fluid,
const wordList& oldNameParts
);
//- Return references to the phases associated with a given name, and a
// list of valid separators
static Tuple2<const phaseModel&, const phaseModel&> identifyPhases
(
const phaseSystem& fluid,
const word& name,
const wordList& separators
);
private:
// Private Data
//- Phase 1
const phaseModel& phase1_;
//- Phase 2
const phaseModel& phase2_;
//- Gravitational acceleration
const uniformDimensionedVectorField& g_;
public:
//- Runtime type information
TypeName("phaseInterface");
// Declare runtime construction
declareRunTimeSelectionTable
(
autoPtr,
phaseInterface,
word,
(
const phaseSystem& fluid,
const word& name
),
(fluid, name)
);
// Constructors
//- Construct from phases
phaseInterface
(
const phaseModel& phase1,
const phaseModel& phase2
);
//- Construct from phases
phaseInterface
(
const Tuple2<const phaseModel&, const phaseModel&>& phases
);
//- Construct from fluid and name
phaseInterface
(
const phaseSystem& fluid,
const word& name
);
//- Construct from fluid and key
phaseInterface
(
const phaseSystem& fluid,
const phaseInterfaceKey& name
);
//- Clone function
virtual autoPtr<phaseInterface> clone() const;
//- Destructor
virtual ~phaseInterface();
// Selectors
//- Select given fluid and name
static autoPtr<phaseInterface> New
(
const phaseSystem& fluid,
const word& name
);
//- Select by combining two interfaces
static autoPtr<phaseInterface> New
(
const phaseInterface& interface1,
const phaseInterface& interface2
);
//- Class used for construction of PtrLists of phaseInterfaces
class iNew
{
const phaseSystem& fluid_;
public:
iNew(const phaseSystem& fluid)
:
fluid_(fluid)
{}
autoPtr<phaseInterface> operator()(Istream& is) const
{
return phaseInterface::New(fluid_, word(is));
}
};
// Static Member Functions
//- Return the separator that delimits this interface's name
static word separator()
{
return word::null;
}
// Member Functions
//- Name
virtual word name() const;
//- Cast to derived type for use in a model
template<class ModelType, class Derived>
const Derived& modelCast() const
{
if (!isA<Derived>(*this))
{
FatalErrorInFunction
<< "Constructing " << ModelType::typeName
<< " for interface " << name()
<< " which is not of the required type "
<< Derived::typeName << exit(FatalError);
}
return refCast<const Derived>(*this);
}
// Access
//- Return the volume fraction of phase 1
virtual inline const volScalarField& alpha1() const;
//- Return the volume fraction of phase 2
virtual inline const volScalarField& alpha2() const;
//- Return the thermo for phase 1
virtual inline const rhoThermo& thermo1() const;
//- Return the thermo for phase 2
virtual inline const rhoThermo& thermo2() const;
//- Return the density of phase 1
virtual inline const volScalarField& rho1() const;
//- Return the density of phase 2
virtual inline const volScalarField& rho2() const;
//- Return phase 1
inline const phaseModel& phase1() const;
//- Return phase 2
inline const phaseModel& phase2() const;
//- Return true if this phaseInterface contains the given phase
inline bool contains(const phaseModel& phase) const;
//- Return the other phase relative to the given phase
// Generates a FatalError if this phaseInterface does not contain
// the given phase
inline const phaseModel& otherPhase(const phaseModel& phase) const;
//- Return the index of the given phase. Generates a FatalError if
// this phaseInterface does not contain the given phase
inline label index(const phaseModel& phase) const;
//- Return the phase system
inline const phaseSystem& fluid() const;
//- Return the mesh
inline const fvMesh& mesh() const;
//- Return gravitational acceleration
inline const uniformDimensionedVectorField& g() const;
// Properties
//- Average density
tmp<volScalarField> rho() const;
//- Relative velocity magnitude
tmp<volScalarField> magUr() const;
//- Surface tension coefficient
tmp<volScalarField> sigma() const;
//- STL const_iterator
class const_iterator
{
// Private Data
//- Reference to the pair for which this is an iterator
const phaseInterface& pair_;
//- Current index
label index_;
//- Construct an iterator with the given index
inline const_iterator(const phaseInterface&, const label index);
public:
friend class phaseInterface;
// Constructors
//- Construct from pair, moving to its 'begin' position
inline explicit const_iterator(const phaseInterface&);
// Access
//- Return the current index
inline label index() const;
// Member Operators
inline bool operator==(const const_iterator&) const;
inline bool operator!=(const const_iterator&) const;
inline const phaseModel& operator*() const;
inline const phaseModel& operator()() const;
inline const phaseModel& otherPhase() const;
inline const_iterator& operator++();
inline const_iterator operator++(int);
};
//- const_iterator set to the beginning of the pair
inline const_iterator cbegin() const;
//- const_iterator set to beyond the end of the pair
inline const_iterator cend() const;
//- const_iterator set to the beginning of the pair
inline const_iterator begin() const;
//- const_iterator set to beyond the end of the pair
inline const_iterator end() const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "phaseInterfaceI.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //