diff --git a/applications/solvers/lagrangian/DPMFoam/DPMFoam.C b/applications/solvers/lagrangian/DPMFoam/DPMFoam.C index 9c97968c1c..513c123ddf 100644 --- a/applications/solvers/lagrangian/DPMFoam/DPMFoam.C +++ b/applications/solvers/lagrangian/DPMFoam/DPMFoam.C @@ -106,7 +106,7 @@ int main(int argc, char *argv[]) zeroGradientFvPatchVectorField::typeName ); - cloudVolSUSu.internalField() = - cloudSU.source()/mesh.V(); + cloudVolSUSu.internalField() = -cloudSU.source()/mesh.V(); cloudVolSUSu.correctBoundaryConditions(); cloudSU.source() = vector::zero; diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/Make/files b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/Make/files index 43c0f9b2a9..e754fa07b8 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/Make/files +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/Make/files @@ -12,4 +12,8 @@ heatTransferModels/heatTransferModel/heatTransferModel.C heatTransferModels/heatTransferModel/newHeatTransferModel.C heatTransferModels/RanzMarshall/RanzMarshall.C +liftModels/liftModel/liftModel.C +liftModels/liftModel/newLiftModel.C +liftModels/constantCoefficient/constantCoefficient.C + LIB = $(FOAM_LIBBIN)/libcompressibleEulerianInterfacialModels diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/constantCoefficient/constantCoefficient.C b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/constantCoefficient/constantCoefficient.C new file mode 100644 index 0000000000..069a983884 --- /dev/null +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/constantCoefficient/constantCoefficient.C @@ -0,0 +1,86 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2014 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 . + +\*---------------------------------------------------------------------------*/ + +#include "constantCoefficient.H" +#include "addToRunTimeSelectionTable.H" +#include "fvc.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace liftModels +{ + defineTypeNameAndDebug(constantCoefficient, 0); + + addToRunTimeSelectionTable + ( + liftModel, + constantCoefficient, + dictionary + ); +} +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::liftModels::constantCoefficient::constantCoefficient +( + const dictionary& dict, + const volScalarField& alpha1, + const phaseModel& phase1, + const phaseModel& phase2 +) +: + liftModel(dict, alpha1, phase1, phase2), + Cl_("Cl", dimless, dict.lookup("Cl")) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::liftModels::constantCoefficient::~constantCoefficient() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::tmp Foam::liftModels::constantCoefficient::F +( + const volVectorField& U +) const +{ + return + Cl_ + *(phase1_*phase1_.rho() + phase2_*phase2_.rho()) + *( + (phase1_.U() - phase2_.U()) + ^ fvc::curl(U) + ); +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/constantCoefficient/constantCoefficient.H b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/constantCoefficient/constantCoefficient.H new file mode 100644 index 0000000000..054dc858be --- /dev/null +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/constantCoefficient/constantCoefficient.H @@ -0,0 +1,98 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2014 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 . + +Class + Foam::liftModels::constantCoefficient + +Description + +SourceFiles + constantCoefficient.C + +\*---------------------------------------------------------------------------*/ + +#ifndef constantCoefficient_H +#define constantCoefficient_H + +#include "liftModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace liftModels +{ + +/*---------------------------------------------------------------------------*\ + Class constantCoefficient Declaration +\*---------------------------------------------------------------------------*/ + +class constantCoefficient +: + public liftModel +{ + // Private data + + //- Constant lift coefficient + dimensionedScalar Cl_; + + +public: + + //- Runtime type information + TypeName("constantCoefficient"); + + + // Constructors + + //- Construct from components + constantCoefficient + ( + const dictionary& dict, + const volScalarField& alpha1, + const phaseModel& phase1, + const phaseModel& phase2 + ); + + + //- Destructor + virtual ~constantCoefficient(); + + + // Member Functions + + //- Lift force + tmp F(const volVectorField& U) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace liftModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/liftModel/liftModel.C b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/liftModel/liftModel.C new file mode 100644 index 0000000000..36dbde08ee --- /dev/null +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/liftModel/liftModel.C @@ -0,0 +1,60 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2014 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 . + +\*---------------------------------------------------------------------------*/ + +#include "liftModel.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(liftModel, 0); + defineRunTimeSelectionTable(liftModel, dictionary); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::liftModel::liftModel +( + const dictionary& dict, + const volScalarField& alpha1, + const phaseModel& phase1, + const phaseModel& phase2 +) +: + dict_(dict), + alpha1_(alpha1), + phase1_(phase1), + phase2_(phase2) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::liftModel::~liftModel() +{} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/liftModel/liftModel.H b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/liftModel/liftModel.H new file mode 100644 index 0000000000..ef16d16605 --- /dev/null +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/liftModel/liftModel.H @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2014 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 . + +Class + Foam::liftModel + +Description + +SourceFiles + liftModel.C + newLiftModel.C + +\*---------------------------------------------------------------------------*/ + +#ifndef liftModel_H +#define liftModel_H + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#include "dictionary.H" +#include "phaseModel.H" +#include "runTimeSelectionTables.H" + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class liftModel Declaration +\*---------------------------------------------------------------------------*/ + +class liftModel +{ +protected: + + // Protected data + + const dictionary& dict_; + const volScalarField& alpha1_; + const phaseModel& phase1_; + const phaseModel& phase2_; + + +public: + + //- Runtime type information + TypeName("liftModel"); + + + // Declare runtime construction + + declareRunTimeSelectionTable + ( + autoPtr, + liftModel, + dictionary, + ( + const dictionary& dict, + const volScalarField& alpha1, + const phaseModel& phase1, + const phaseModel& phase2 + ), + (dict, alpha1, phase1, phase2) + ); + + + // Constructors + + liftModel + ( + const dictionary& dict, + const volScalarField& alpha1, + const phaseModel& phase1, + const phaseModel& phase2 + ); + + + //- Destructor + virtual ~liftModel(); + + + // Selectors + + static autoPtr New + ( + const dictionary& dict, + const volScalarField& alpha1, + const phaseModel& phase1, + const phaseModel& phase2 + ); + + + // Member Functions + + //- Lift force + virtual tmp F(const volVectorField& U) const = 0; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/liftModel/newLiftModel.C b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/liftModel/newLiftModel.C new file mode 100644 index 0000000000..21aad9034e --- /dev/null +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/interfacialModels/liftModels/liftModel/newLiftModel.C @@ -0,0 +1,72 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2014 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 . + +\*---------------------------------------------------------------------------*/ + +#include "liftModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +Foam::autoPtr Foam::liftModel::New +( + const dictionary& dict, + const volScalarField& alpha1, + const phaseModel& phase1, + const phaseModel& phase2 +) +{ + word liftModelType + ( + dict.subDict(phase1.name()).lookup("type") + ); + + Info << "Selecting liftModel for phase " + << phase1.name() + << ": " + << liftModelType << endl; + + dictionaryConstructorTable::iterator cstrIter = + dictionaryConstructorTablePtr_->find(liftModelType); + + if (cstrIter == dictionaryConstructorTablePtr_->end()) + { + FatalErrorIn("liftModel::New") + << "Unknown liftModelType type " + << liftModelType << endl << endl + << "Valid liftModel types are : " << endl + << dictionaryConstructorTablePtr_->sortedToc() + << exit(FatalError); + } + + return + cstrIter() + ( + dict.subDict(phase1.name()).subDict(liftModelType + "Coeffs"), + alpha1, + phase1, + phase2 + ); +} + + +// ************************************************************************* // diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C b/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C index bb2658a3ef..1fc59d91fb 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.C @@ -55,8 +55,6 @@ Foam::RASModels::kineticTheoryModel::kineticTheoryModel phase_(phase), - draga_(phase.fluid().drag1()), - viscosityModel_ ( kineticTheoryModels::viscosityModel::New @@ -401,7 +399,11 @@ void Foam::RASModels::kineticTheoryModel::correct() ( alpha*(1.0 - alpha), phase_.fluid().residualPhaseFraction() - )*draga_.K(magUr + phase_.fluid().residualSlip())/rho + ) + *phase_.fluid().drag(phase_).K + ( + magUr + phase_.fluid().residualSlip() + )/rho ); // Eq. 3.25, p. 50 Js = J1 - J2 diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H b/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H index 776b523f56..ecf03b105e 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/phaseIncompressibleTurbulenceModels/kineticTheoryModels/kineticTheoryModel/kineticTheoryModel.H @@ -82,8 +82,8 @@ class kineticTheoryModel const phaseModel& phase_; - //- Drag model - const dragModel& draga_; + ////- Drag model + //const dragModel& draga_; // Sub-models diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C index 8ba3382b86..e1f9b221a3 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -111,13 +111,6 @@ Foam::twoPhaseSystem::twoPhaseSystem lookup("Cvm") ), - Cl_ - ( - "Cl", - dimless, - lookup("Cl") - ), - drag1_ ( dragModel::New @@ -162,6 +155,28 @@ Foam::twoPhaseSystem::twoPhaseSystem ) ), + lift1_ + ( + liftModel::New + ( + subDict("lift"), + phase1_, + phase1_, + phase2_ + ) + ), + + lift2_ + ( + liftModel::New + ( + subDict("lift"), + phase2_, + phase2_, + phase1_ + ) + ), + dispersedPhase_(lookup("dispersedPhase")), residualPhaseFraction_ @@ -311,11 +326,28 @@ Foam::tmp Foam::twoPhaseSystem::liftForce ); volVectorField& liftForce = tliftForce(); - volVectorField Ur(phase1_.U() - phase2_.U()); - - liftForce = - Cl_*(phase1_*phase1_.rho() + phase2_*phase2_.rho()) - *(Ur ^ fvc::curl(U)); + if (dispersedPhase_ == phase1_.name()) + { + liftForce = lift1().F(U); + } + else if (dispersedPhase_ == phase2_.name()) + { + liftForce = lift2().F(U); + } + else if (dispersedPhase_ == "both") + { + liftForce = + ( + phase2_*lift1().F(U) + + phase1_*lift2().F(U) + ); + } + else + { + FatalErrorIn("twoPhaseSystem::liftForce()") + << "dispersedPhase: " << dispersedPhase_ << " is incorrect" + << exit(FatalError); + } // Remove lift at fixed-flux boundaries forAll(phase1_.phi().boundaryField(), patchi) @@ -631,7 +663,6 @@ bool Foam::twoPhaseSystem::read() lookup("sigma") >> sigma_; lookup("Cvm") >> Cvm_; - lookup("Cl") >> Cl_; // drag1_->read(*this); // drag2_->read(*this); diff --git a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.H b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.H index 0b501152c1..cc781bcbc1 100644 --- a/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.H +++ b/applications/solvers/multiphase/twoPhaseEulerFoam/twoPhaseSystem/twoPhaseSystem.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,6 +45,7 @@ SourceFiles #include "IOdictionary.H" #include "phaseModel.H" #include "dragModel.H" +#include "liftModel.H" #include "heatTransferModel.H" #include "volFields.H" #include "surfaceFields.H" @@ -57,7 +58,7 @@ namespace Foam // Forward declarations class dragModel; class heatTransferModel; - +class liftModel; /*---------------------------------------------------------------------------*\ Class twoPhaseSystem Declaration @@ -69,31 +70,57 @@ class twoPhaseSystem { // Private data + //- Reference to the mesh const fvMesh& mesh_; + //- Phase model 1 phaseModel phase1_; + + //- Phase model 2 phaseModel phase2_; + //- Total volumetric flux surfaceScalarField phi_; + //- Dilatation term volScalarField dgdt_; + //- Surface tension coefficient dimensionedScalar sigma_; + //- Virtual mass coefficient dimensionedScalar Cvm_; - dimensionedScalar Cl_; + //- Drag model for phase 1 autoPtr drag1_; + + //- Drag model for phase 2 autoPtr drag2_; + //- Heat transfer model for phase 1 autoPtr heatTransfer1_; + + //- Heat transfer model for phase 2 autoPtr heatTransfer2_; + //- Lift model for phase 1 + autoPtr lift1_; + + //- Lift model for phase 2 + autoPtr lift2_; + + //- Name of the dispersed phase, or "both" word dispersedPhase_; + + //- Residual phase fraction scalar residualPhaseFraction_; + + //- Redisual slip dimensionedScalar residualSlip_; + // Private member functions + //- Return the mixture flux tmp calcPhi() const; @@ -113,136 +140,21 @@ public: // Member Functions - const fvMesh& mesh() const - { - return mesh_; - } - - const phaseModel& phase1() const - { - return phase1_; - } - - const phaseModel& phase2() const - { - return phase2_; - } - - const phaseModel& otherPhase(const phaseModel& phase) const - { - if (&phase == &phase1_) - { - return phase2_; - } - else - { - return phase1_; - } - } - - phaseModel& phase1() - { - return phase1_; - } - - phaseModel& phase2() - { - return phase2_; - } - - //- Return the mixture flux - const surfaceScalarField& phi() const - { - return phi_; - } - - //- Return the mixture flux - surfaceScalarField& phi() - { - return phi_; - } - - const volScalarField& dgdt() const - { - return dgdt_; - } - - volScalarField& dgdt() - { - return dgdt_; - } - - const dragModel& drag1() const - { - return drag1_(); - } - - const dragModel& drag2() const - { - return drag2_(); - } - - const dragModel& drag(const phaseModel& phase) const - { - if (&phase == &phase1_) - { - return drag1_(); - } - else - { - return drag2_(); - } - } - - scalar residualPhaseFraction() const - { - return residualPhaseFraction_; - } - - const dimensionedScalar& residualSlip() const - { - return residualSlip_; - } - + //- Return the drag coefficient tmp dragCoeff() const; - tmp liftForce(const volVectorField& U) const; - - const heatTransferModel& heatTransfer1() const - { - return heatTransfer1_(); - } - - const heatTransferModel& heatTransfer2() const - { - return heatTransfer2_(); - } + //- Return the heat transfer coefficient tmp heatTransferCoeff() const; + //- Return the lift force + tmp liftForce(const volVectorField& U) const; + //- Return the mixture density tmp rho() const; //- Return the mixture velocity tmp U() const; - //- Return the surface tension coefficient - dimensionedScalar sigma() const - { - return sigma_; - } - - //- Return the virtual-mass coefficient - dimensionedScalar Cvm() const - { - return Cvm_; - } - - //- Return the lift coefficient - dimensionedScalar Cl() const - { - return Cl_; - } - //- Solve for the two-phase-fractions void solve(); @@ -254,6 +166,148 @@ public: //- Read base phaseProperties dictionary bool read(); + + // Access + + //- Return the mesh + const fvMesh& mesh() const + { + return mesh_; + } + + //- Return phase model 1 + const phaseModel& phase1() const + { + return phase1_; + } + + //- Return non-const access to phase model 1 + phaseModel& phase1() + { + return phase1_; + } + + //- Return phase model 2 + const phaseModel& phase2() const + { + return phase2_; + } + + //- Return non-const access to phase model 2 + phaseModel& phase2() + { + return phase2_; + } + + //- Return the phase not given as an argument + const phaseModel& otherPhase(const phaseModel& phase) const + { + if (&phase == &phase1_) + { + return phase2_; + } + else + { + return phase1_; + } + } + + //- Return the mixture flux + const surfaceScalarField& phi() const + { + return phi_; + } + + //- Return non-const access to the the mixture flux + surfaceScalarField& phi() + { + return phi_; + } + + //- Return the dilatation term + const volScalarField& dgdt() const + { + return dgdt_; + } + + //- Return non-const access to the + volScalarField& dgdt() + { + return dgdt_; + } + + //- Return the drag model for phase 1 + const dragModel& drag1() const + { + return drag1_(); + } + + //- Return the drag model for phase 2 + const dragModel& drag2() const + { + return drag2_(); + } + + //- Return the drag model for the supplied phase + const dragModel& drag(const phaseModel& phase) const + { + if (&phase == &phase1_) + { + return drag1_(); + } + else + { + return drag2_(); + } + } + + //- Return non-const access to the residual phase fraction + scalar residualPhaseFraction() const + { + return residualPhaseFraction_; + } + + //- Return the residual slip + const dimensionedScalar& residualSlip() const + { + return residualSlip_; + } + + //- Return the heat transfer model for phase 1 + const heatTransferModel& heatTransfer1() const + { + return heatTransfer1_(); + } + + //- Return the heat transfer model for phase 2 + const heatTransferModel& heatTransfer2() const + { + return heatTransfer2_(); + } + + //- Return the lift model for phase 1 + const liftModel& lift1() const + { + return lift1_(); + } + + //- Return the lift model for phase 2 + const liftModel& lift2() const + { + return lift2_(); + } + + //- Return the surface tension coefficient + dimensionedScalar sigma() const + { + return sigma_; + } + + //- Return the virtual-mass coefficient + dimensionedScalar Cvm() const + { + return Cvm_; + } }; diff --git a/applications/test/hexRef8/Test-hexRef8.C b/applications/test/hexRef8/Test-hexRef8.C index 67477aae44..0e913ff011 100644 --- a/applications/test/hexRef8/Test-hexRef8.C +++ b/applications/test/hexRef8/Test-hexRef8.C @@ -34,11 +34,14 @@ Description #include "Time.H" #include "volFields.H" #include "surfaceFields.H" +#include "pointFields.H" #include "hexRef8.H" #include "mapPolyMesh.H" #include "polyTopoChange.H" #include "Random.H" #include "zeroGradientFvPatchFields.H" +#include "calculatedPointPatchFields.H" +#include "pointConstraints.H" #include "fvcDiv.H" using namespace Foam; @@ -61,6 +64,8 @@ int main(int argc, char *argv[]) # include "createMesh.H" + const pointConstraints& pc = pointConstraints::New(pointMesh::New(mesh)); + const Switch inflate(args.args()[1]); if (inflate) @@ -144,6 +149,29 @@ int main(int argc, char *argv[]) surfaceOne.write(); + // Uniform point field + pointScalarField pointX + ( + IOobject + ( + "pointX", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + pointMesh::New(mesh), + dimensionedScalar("one", dimless, 1.0), + calculatedPointPatchScalarField::typeName + ); + pointX.internalField() = mesh.points().component(0); + pointX.correctBoundaryConditions(); + Info<< "Writing x-component field " + << pointX.name() << " in " << runTime.timeName() << endl; + pointX.write(); + + + // Force allocation of V. Important for any mesh changes since otherwise // old time volumes are not stored const scalar totalVol = gSum(mesh.V()); @@ -163,89 +191,107 @@ int main(int argc, char *argv[]) } + mesh.moving(false); + mesh.topoChanging(false); - // Mesh changing engine. - polyTopoChange meshMod(mesh); - if (rndGen.bit()) + label action = rndGen.integer(0, 5); + + + if (action == 0) { - // Refine - label nRefine = mesh.nCells()/20; - DynamicList