mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'feature-interIsoFoam-update' into 'develop'
Update of interIsoFoam and isoAdvection extending to work with porous media See merge request Development/openfoam!511
This commit is contained in:
35
applications/solvers/multiphase/interIsoFoam/UEqn.H
Normal file
35
applications/solvers/multiphase/interIsoFoam/UEqn.H
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
MRF.correctBoundaryVelocity(U);
|
||||||
|
|
||||||
|
fvVectorMatrix UEqn
|
||||||
|
(
|
||||||
|
fvm::ddt(rho, U) + fvm::div(rhoPhi, U)
|
||||||
|
+ MRF.DDt(rho, U)
|
||||||
|
+ turbulence->divDevRhoReff(rho, U)
|
||||||
|
==
|
||||||
|
fvOptions(rho, U)
|
||||||
|
);
|
||||||
|
|
||||||
|
#include "UEqnAddPorosity.H"
|
||||||
|
|
||||||
|
UEqn.relax();
|
||||||
|
|
||||||
|
fvOptions.constrain(UEqn);
|
||||||
|
|
||||||
|
if (pimple.momentumPredictor())
|
||||||
|
{
|
||||||
|
solve
|
||||||
|
(
|
||||||
|
UEqn
|
||||||
|
==
|
||||||
|
fvc::reconstruct
|
||||||
|
(
|
||||||
|
(
|
||||||
|
mixture.surfaceTensionForce()
|
||||||
|
- ghf*fvc::snGrad(rho)
|
||||||
|
- fvc::snGrad(p_rgh)
|
||||||
|
) * mesh.magSf()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
fvOptions.correct(U);
|
||||||
|
}
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
// Including porosity effects in UEqn following:
|
||||||
|
// Jensen, B., Jacobsen, N. G., & Christensen, E. D. (2014).
|
||||||
|
// Investigations on the porous media equations and resistance
|
||||||
|
// coefficients for coastal structures. Coastal Engineering, 84, 56-72.
|
||||||
|
|
||||||
|
if (porosityEnabled)
|
||||||
|
{
|
||||||
|
const volScalarField& porosity = tporosity.cref();
|
||||||
|
|
||||||
|
const word porosityModel("JensenEtAl2014");
|
||||||
|
const dictionary& dict =
|
||||||
|
porosityProperties.subDict(porosityModel + "Coeffs");
|
||||||
|
const dimensionedScalar alpha(dimless/dimArea, dict.get<scalar>("alpha"));
|
||||||
|
const dimensionedScalar beta(dimless/dimLength, dict.get<scalar>("beta"));
|
||||||
|
const dimensionedScalar d50(dimless, dict.get<scalar>("d50"));
|
||||||
|
const dimensionedScalar KC(dimless, dict.get<scalar>("KC"));
|
||||||
|
|
||||||
|
// Generating Darcy-Forchheimer coefficient: F = rho*U*(a + b*|U|)
|
||||||
|
// Shoud it be mu or muEff in the equation below?
|
||||||
|
{
|
||||||
|
// Darcy term
|
||||||
|
volScalarField DarcyForchheimerCoeff
|
||||||
|
(
|
||||||
|
alpha*sqr(1 - porosity)*mixture.mu()/sqr(porosity)/sqr(d50)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Adding Forchheimer term
|
||||||
|
DarcyForchheimerCoeff += rho*mag(U)
|
||||||
|
*beta*(1 + pos(KC)*7.5/KC)*(1 - porosity)/sqr(porosity)/d50;
|
||||||
|
|
||||||
|
// Adding Darcy-Forchheimer term as implicit source term
|
||||||
|
UEqn += fvm::Sp(DarcyForchheimerCoeff, U);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Generating added mass force coefficient
|
||||||
|
const dimensionedScalar gamma_p(dimless, dict.get<scalar>("gamma_p"));
|
||||||
|
const volScalarField Cm(gamma_p*(1 - porosity));
|
||||||
|
|
||||||
|
UEqn += Cm*fvm::ddt(rho, U);
|
||||||
|
UEqn += Cm*MRF.DDt(rho, U);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dividing both matrix entries and source term by porosity to compensate
|
||||||
|
// for the fact that the FVM cell volume averages use division by cell
|
||||||
|
// volume V whereas only the cell pore volume, porosity*V, is accessible.
|
||||||
|
UEqn *= scalar(1)/porosity;
|
||||||
|
}
|
||||||
@ -22,8 +22,20 @@
|
|||||||
mixture.correct();
|
mixture.correct();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scalar domainFraction = 0;
|
||||||
|
if (porosityEnabled)
|
||||||
|
{
|
||||||
|
const volScalarField& porosity = tporosity.cref();
|
||||||
|
rhoPhi *= scalar(1)/fvc::interpolate(porosity);
|
||||||
|
domainFraction = alpha1.weightedAverage(mesh.Vsc()*porosity).value();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
domainFraction = alpha1.weightedAverage(mesh.Vsc()).value();
|
||||||
|
}
|
||||||
|
|
||||||
Info<< "Phase-1 volume fraction = "
|
Info<< "Phase-1 volume fraction = "
|
||||||
<< alpha1.weightedAverage(mesh.Vsc()).value()
|
<< domainFraction
|
||||||
<< " Min(" << alpha1.name() << ") = " << min(alpha1).value()
|
<< " Min(" << alpha1.name() << ") = " << min(alpha1).value()
|
||||||
<< " Max(" << alpha1.name() << ") = " << max(alpha1).value()
|
<< " Max(" << alpha1.name() << ") = " << max(alpha1).value()
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|||||||
@ -130,5 +130,6 @@ mesh.setFluxRequired(alpha1.name());
|
|||||||
|
|
||||||
#include "createMRF.H"
|
#include "createMRF.H"
|
||||||
#include "createFvOptions.H"
|
#include "createFvOptions.H"
|
||||||
|
#include "createPorosity.H"
|
||||||
|
|
||||||
isoAdvection advector(alpha1, phi, U);
|
isoAdvection advector(alpha1, phi, U);
|
||||||
|
|||||||
@ -0,0 +1,34 @@
|
|||||||
|
// Reading porosity properties from constant directory
|
||||||
|
IOdictionary porosityProperties
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"porosityProperties",
|
||||||
|
runTime.constant(),
|
||||||
|
runTime,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
const bool porosityEnabled
|
||||||
|
(
|
||||||
|
porosityProperties.getOrDefault<bool>("porosityEnabled", false)
|
||||||
|
);
|
||||||
|
|
||||||
|
tmp<volScalarField> tporosity;
|
||||||
|
if (porosityEnabled)
|
||||||
|
{
|
||||||
|
tporosity = tmp<volScalarField>::New
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"porosity",
|
||||||
|
runTime.timeName(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::AUTO_WRITE
|
||||||
|
),
|
||||||
|
mesh
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -92,7 +92,7 @@ int main(int argc, char *argv[])
|
|||||||
#include "initCorrectPhi.H"
|
#include "initCorrectPhi.H"
|
||||||
#include "createUfIfPresent.H"
|
#include "createUfIfPresent.H"
|
||||||
|
|
||||||
#include "CourantNo.H"
|
#include "porousCourantNo.H"
|
||||||
#include "setInitialDeltaT.H"
|
#include "setInitialDeltaT.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -101,8 +101,8 @@ int main(int argc, char *argv[])
|
|||||||
while (runTime.run())
|
while (runTime.run())
|
||||||
{
|
{
|
||||||
#include "readDyMControls.H"
|
#include "readDyMControls.H"
|
||||||
#include "CourantNo.H"
|
#include "porousCourantNo.H"
|
||||||
#include "alphaCourantNo.H"
|
#include "porousAlphaCourantNo.H"
|
||||||
#include "setDeltaT.H"
|
#include "setDeltaT.H"
|
||||||
|
|
||||||
++runTime;
|
++runTime;
|
||||||
|
|||||||
@ -0,0 +1,69 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | www.openfoam.com
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Copyright (C) 2021 Johan Roenby
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
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/>.
|
||||||
|
|
||||||
|
Global
|
||||||
|
porousAlphaCourantNo
|
||||||
|
|
||||||
|
Description
|
||||||
|
Calculates and outputs the mean and maximum Courant Numbers.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
scalar maxAlphaCo = runTime.controlDict().get<scalar>("maxAlphaCo");
|
||||||
|
scalar alphaCoNum = 0;
|
||||||
|
scalar meanAlphaCoNum = 0;
|
||||||
|
|
||||||
|
if (mesh.nInternalFaces())
|
||||||
|
{
|
||||||
|
scalarField sumPhi
|
||||||
|
(
|
||||||
|
mixture.nearInterface()().primitiveField()
|
||||||
|
*fvc::surfaceSum(mag(phi))().primitiveField()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (porosityEnabled)
|
||||||
|
{
|
||||||
|
const volScalarField& porosity = tporosity.cref();
|
||||||
|
|
||||||
|
alphaCoNum =
|
||||||
|
0.5*gMax(sumPhi/mesh.V().field()/porosity)*runTime.deltaTValue();
|
||||||
|
|
||||||
|
meanAlphaCoNum =
|
||||||
|
0.5*(gSum(sumPhi)/gSum(mesh.V().field()*porosity))
|
||||||
|
*runTime.deltaTValue();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alphaCoNum = 0.5*gMax(sumPhi/mesh.V().field())*runTime.deltaTValue();
|
||||||
|
|
||||||
|
meanAlphaCoNum =
|
||||||
|
0.5*(gSum(sumPhi)/gSum(mesh.V().field()))*runTime.deltaTValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "Interface Courant Number mean: " << meanAlphaCoNum
|
||||||
|
<< " max: " << alphaCoNum << endl;
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,67 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | www.openfoam.com
|
||||||
|
\\/ M anipulation |
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Copyright (C) 2021 Johan Roenby
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
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/>.
|
||||||
|
|
||||||
|
Global
|
||||||
|
porousCourantNo
|
||||||
|
|
||||||
|
Description
|
||||||
|
Calculates and outputs the mean and maximum Courant Numbers.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
scalar CoNum = 0;
|
||||||
|
scalar meanCoNum = 0;
|
||||||
|
|
||||||
|
{
|
||||||
|
scalarField sumPhi
|
||||||
|
(
|
||||||
|
fvc::surfaceSum(mag(phi))().primitiveField()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (porosityEnabled)
|
||||||
|
{
|
||||||
|
const volScalarField& porosity = tporosity.cref();
|
||||||
|
|
||||||
|
CoNum =
|
||||||
|
0.5*gMax(sumPhi/mesh.V().field()/porosity)
|
||||||
|
*runTime.deltaTValue();
|
||||||
|
|
||||||
|
meanCoNum =
|
||||||
|
0.5*(gSum(sumPhi)/gSum(mesh.V().field()*porosity))
|
||||||
|
*runTime.deltaTValue();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CoNum = 0.5*gMax(sumPhi/mesh.V().field())*runTime.deltaTValue();
|
||||||
|
|
||||||
|
meanCoNum =
|
||||||
|
0.5*(gSum(sumPhi)/gSum(mesh.V().field()))*runTime.deltaTValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "Courant Number mean: " << meanCoNum
|
||||||
|
<< " max: " << CoNum << endl;
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -7,8 +7,8 @@
|
|||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 DHI
|
Copyright (C) 2016-2017 DHI
|
||||||
Modified code Copyright (C) 2016-2017 OpenCFD Ltd.
|
Modified code Copyright (C) 2016-2017 OpenCFD Ltd.
|
||||||
Modified code Copyright (C) 2019 Johan Roenby
|
|
||||||
Modified code Copyright (C) 2019-2020 DLR
|
Modified code Copyright (C) 2019-2020 DLR
|
||||||
|
Modified code Copyright (C) 2018, 2021 Johan Roenby
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -39,6 +39,7 @@ License
|
|||||||
#include "meshTools.H"
|
#include "meshTools.H"
|
||||||
#include "OBJstream.H"
|
#include "OBJstream.H"
|
||||||
#include "syncTools.H"
|
#include "syncTools.H"
|
||||||
|
#include "profiling.H"
|
||||||
|
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
@ -108,6 +109,10 @@ Foam::isoAdvection::isoAdvection
|
|||||||
bsn0_(bsFaces_.size()),
|
bsn0_(bsFaces_.size()),
|
||||||
bsUn0_(bsFaces_.size()),
|
bsUn0_(bsFaces_.size()),
|
||||||
|
|
||||||
|
// Porosity
|
||||||
|
porosityEnabled_(dict_.getOrDefault<bool>("porosityEnabled", false)),
|
||||||
|
porosityPtr_(nullptr),
|
||||||
|
|
||||||
// Parallel run data
|
// Parallel run data
|
||||||
procPatchLabels_(mesh_.boundary().size()),
|
procPatchLabels_(mesh_.boundary().size()),
|
||||||
surfaceCellFacesOnProcPatches_(0)
|
surfaceCellFacesOnProcPatches_(0)
|
||||||
@ -132,6 +137,48 @@ Foam::isoAdvection::isoAdvection
|
|||||||
// Get boundary mesh and resize the list for parallel comms
|
// Get boundary mesh and resize the list for parallel comms
|
||||||
setProcessorPatches();
|
setProcessorPatches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reading porosity properties from constant directory
|
||||||
|
IOdictionary porosityProperties
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"porosityProperties",
|
||||||
|
mesh_.time().constant(),
|
||||||
|
mesh_,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
porosityEnabled_ =
|
||||||
|
porosityProperties.getOrDefault<bool>("porosityEnabled", false);
|
||||||
|
|
||||||
|
if (porosityEnabled_)
|
||||||
|
{
|
||||||
|
if (mesh_.foundObject<volScalarField>("porosity"))
|
||||||
|
{
|
||||||
|
porosityPtr_ = mesh_.getObjectPtr<volScalarField>("porosity");
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
gMin(porosityPtr_->primitiveField()) <= 0
|
||||||
|
|| gMax(porosityPtr_->primitiveField()) > 1 + SMALL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Porosity field has values <= 0 or > 1"
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Porosity enabled in constant/porosityProperties "
|
||||||
|
<< "but no porosity field is found in object registry."
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -195,6 +242,7 @@ void Foam::isoAdvection::extendMarkedCells
|
|||||||
|
|
||||||
void Foam::isoAdvection::timeIntegratedFlux()
|
void Foam::isoAdvection::timeIntegratedFlux()
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
// Get time step
|
// Get time step
|
||||||
const scalar dt = mesh_.time().deltaTValue();
|
const scalar dt = mesh_.time().deltaTValue();
|
||||||
|
|
||||||
@ -222,6 +270,26 @@ void Foam::isoAdvection::timeIntegratedFlux()
|
|||||||
DynamicList<List<point>> isoFacePts;
|
DynamicList<List<point>> isoFacePts;
|
||||||
const DynamicField<label>& interfaceLabels = surf_->interfaceLabels();
|
const DynamicField<label>& interfaceLabels = surf_->interfaceLabels();
|
||||||
|
|
||||||
|
// Calculating isoface normal velocity
|
||||||
|
scalarField Un0(interfaceLabels.size());
|
||||||
|
forAll(Un0, i)
|
||||||
|
{
|
||||||
|
const label celli = interfaceLabels[i];
|
||||||
|
const point x0(surf_->centre()[celli]);
|
||||||
|
const vector n0(normalised(-surf_->normal()[celli]));
|
||||||
|
Un0[i] = UInterp.interpolate(x0, celli) & n0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Taking acount of porosity if enabled
|
||||||
|
if (porosityEnabled_)
|
||||||
|
{
|
||||||
|
forAll(Un0, i)
|
||||||
|
{
|
||||||
|
const label celli = interfaceLabels[i];
|
||||||
|
Un0[i] /= porosityPtr_->primitiveField()[celli];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Loop through cells
|
// Loop through cells
|
||||||
forAll(interfaceLabels, i)
|
forAll(interfaceLabels, i)
|
||||||
{
|
{
|
||||||
@ -232,6 +300,8 @@ void Foam::isoAdvection::timeIntegratedFlux()
|
|||||||
// This is a surface cell, increment counter, append and mark cell
|
// This is a surface cell, increment counter, append and mark cell
|
||||||
nSurfaceCells++;
|
nSurfaceCells++;
|
||||||
surfCells_.append(celli);
|
surfCells_.append(celli);
|
||||||
|
const point x0(surf_->centre()[celli]);
|
||||||
|
const vector n0(normalised(-surf_->normal()[celli]));
|
||||||
|
|
||||||
DebugInfo
|
DebugInfo
|
||||||
<< "\n------------ Cell " << celli << " with alpha1 = "
|
<< "\n------------ Cell " << celli << " with alpha1 = "
|
||||||
@ -239,19 +309,6 @@ void Foam::isoAdvection::timeIntegratedFlux()
|
|||||||
<< 1.0 - alpha1In_[celli] << " ------------"
|
<< 1.0 - alpha1In_[celli] << " ------------"
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
// Cell is cut
|
|
||||||
const point x0 = surf_->centre()[celli];
|
|
||||||
const vector n0(normalised(-surf_->normal()[celli]));
|
|
||||||
|
|
||||||
// Get the speed of the isoface by interpolating velocity and
|
|
||||||
// dotting it with isoface unit normal
|
|
||||||
const scalar Un0 = UInterp.interpolate(x0, celli) & n0;
|
|
||||||
|
|
||||||
DebugInfo
|
|
||||||
<< "calcIsoFace gives initial surface: \nx0 = " << x0
|
|
||||||
<< ", \nn0 = " << n0 << ", \nUn0 = "
|
|
||||||
<< Un0 << endl;
|
|
||||||
|
|
||||||
// Estimate time integrated flux through each downwind face
|
// Estimate time integrated flux through each downwind face
|
||||||
// Note: looping over all cell faces - in reduced-D, some of
|
// Note: looping over all cell faces - in reduced-D, some of
|
||||||
// these faces will be on empty patches
|
// these faces will be on empty patches
|
||||||
@ -284,7 +341,7 @@ void Foam::isoAdvection::timeIntegratedFlux()
|
|||||||
facei,
|
facei,
|
||||||
x0,
|
x0,
|
||||||
n0,
|
n0,
|
||||||
Un0,
|
Un0[i],
|
||||||
dt,
|
dt,
|
||||||
phiIn[facei],
|
phiIn[facei],
|
||||||
magSfIn[facei]
|
magSfIn[facei]
|
||||||
@ -297,7 +354,7 @@ void Foam::isoAdvection::timeIntegratedFlux()
|
|||||||
bsFaces_.append(facei);
|
bsFaces_.append(facei);
|
||||||
bsx0_.append(x0);
|
bsx0_.append(x0);
|
||||||
bsn0_.append(n0);
|
bsn0_.append(n0);
|
||||||
bsUn0_.append(Un0);
|
bsUn0_.append(Un0[i]);
|
||||||
|
|
||||||
// Note: we must not check if the face is on the
|
// Note: we must not check if the face is on the
|
||||||
// processor patch here.
|
// processor patch here.
|
||||||
@ -552,6 +609,7 @@ void Foam::isoAdvection::checkIfOnProcPatch(const label facei)
|
|||||||
|
|
||||||
void Foam::isoAdvection::applyBruteForceBounding()
|
void Foam::isoAdvection::applyBruteForceBounding()
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
bool alpha1Changed = false;
|
bool alpha1Changed = false;
|
||||||
|
|
||||||
const scalar snapAlphaTol = dict_.getOrDefault<scalar>("snapTol", 0);
|
const scalar snapAlphaTol = dict_.getOrDefault<scalar>("snapTol", 0);
|
||||||
|
|||||||
@ -7,8 +7,8 @@
|
|||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Copyright (C) 2016-2017 DHI
|
Copyright (C) 2016-2017 DHI
|
||||||
Modified code Copyright (C) 2016-2019 OpenCFD Ltd.
|
Modified code Copyright (C) 2016-2019 OpenCFD Ltd.
|
||||||
Modified code Copyright (C) 2018 Johan Roenby
|
|
||||||
Modified code Copyright (C) 2019 DLR
|
Modified code Copyright (C) 2019 DLR
|
||||||
|
Modified code Copyright (C) 2018, 2021 Johan Roenby
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -30,14 +30,13 @@ Class
|
|||||||
Foam::isoAdvection
|
Foam::isoAdvection
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Calculates the new VOF (alpha) field after time step dt given the initial
|
An implementation of the isoAdvector geometric Volume-of-Fluid method
|
||||||
VOF field and a velocity field U and face fluxes phi. The fluid transport
|
advancing the provided volume fraction field (alpha1) in time using the
|
||||||
calculation is based on an idea of using isosurfaces to estimate the
|
given velocity field, U, and corresponding face fluxes, phi.
|
||||||
internal distribution of fluid in cells and advecting such isosurfaces
|
|
||||||
across the mesh faces with the velocity field interpolated to the
|
|
||||||
isosurfaces.
|
|
||||||
|
|
||||||
Reference:
|
References:
|
||||||
|
|
||||||
|
Main isoAdvector idea:
|
||||||
\verbatim
|
\verbatim
|
||||||
Roenby, J., Bredmose, H. and Jasak, H. (2016).
|
Roenby, J., Bredmose, H. and Jasak, H. (2016).
|
||||||
A computational method for sharp interface advection
|
A computational method for sharp interface advection
|
||||||
@ -45,6 +44,20 @@ Description
|
|||||||
doi 10.1098/rsos.160405
|
doi 10.1098/rsos.160405
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
|
Calculation of rhoPhi:
|
||||||
|
\verbatim
|
||||||
|
Roenby, J., Bredmose, H., & Jasak, H. (2019).
|
||||||
|
IsoAdvector: Geometric VOF on general meshes.
|
||||||
|
OpenFOAM® (pp. 281-296). Springer, Cham.
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
Extension to porous media flows:
|
||||||
|
\verbatim
|
||||||
|
Missios, K., Jacobsen, N. G., Moeller, K., & Roenby, J.
|
||||||
|
Using the isoAdvector Geometric VOF Method for Interfacial Flows
|
||||||
|
Through Porous Media. MARINE 2021.
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
Original code supplied by Johan Roenby, DHI (2016)
|
Original code supplied by Johan Roenby, DHI (2016)
|
||||||
Modified Henning Scheufler, DLR
|
Modified Henning Scheufler, DLR
|
||||||
|
|
||||||
@ -157,7 +170,11 @@ class isoAdvection
|
|||||||
//- Storage for boundary surface iso face speed
|
//- Storage for boundary surface iso face speed
|
||||||
DynamicScalarList bsUn0_;
|
DynamicScalarList bsUn0_;
|
||||||
|
|
||||||
|
//- Switch telling if porosity is enabled
|
||||||
|
bool porosityEnabled_;
|
||||||
|
|
||||||
|
//- Pointer to porosity field (read from objectRegistry if exists)
|
||||||
|
volScalarField* porosityPtr_;
|
||||||
|
|
||||||
// Additional data for parallel runs
|
// Additional data for parallel runs
|
||||||
|
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
Copyright (C) 2016-2017 DHI
|
Copyright (C) 2016-2017 DHI
|
||||||
Modified code Copyright (C) 2016-2017 OpenCFD Ltd.
|
Modified code Copyright (C) 2016-2017 OpenCFD Ltd.
|
||||||
Modified code Copyright (C) 2019-2020 DLR
|
Modified code Copyright (C) 2019-2020 DLR
|
||||||
|
Modified code Copyright (C) 2021 Johan Roenby
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -118,6 +119,7 @@ void Foam::isoAdvection::limitFluxes
|
|||||||
const SuType& Su
|
const SuType& Su
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
DebugInFunction << endl;
|
DebugInFunction << endl;
|
||||||
|
|
||||||
const scalar aTol = 100*SMALL; // Note: tolerances
|
const scalar aTol = 100*SMALL; // Note: tolerances
|
||||||
@ -162,14 +164,23 @@ void Foam::isoAdvection::limitFluxes
|
|||||||
{
|
{
|
||||||
checkIfOnProcPatch(facei);
|
checkIfOnProcPatch(facei);
|
||||||
const label own = owner[facei];
|
const label own = owner[facei];
|
||||||
|
scalar Vown = mesh_.V()[own];
|
||||||
|
if (porosityEnabled_)
|
||||||
|
{
|
||||||
|
Vown *= porosityPtr_->primitiveField()[own];
|
||||||
|
}
|
||||||
|
alpha1_[own] -= faceValue(dVfcorrectionValues, facei)/Vown;
|
||||||
|
|
||||||
alpha1_[own] -=
|
|
||||||
faceValue(dVfcorrectionValues, facei)/mesh_.V()[own];
|
|
||||||
if (mesh_.isInternalFace(facei))
|
if (mesh_.isInternalFace(facei))
|
||||||
{
|
{
|
||||||
const label nei = neighbour[facei];
|
const label nei = neighbour[facei];
|
||||||
|
scalar Vnei = mesh_.V()[nei];
|
||||||
|
if (porosityEnabled_)
|
||||||
|
{
|
||||||
|
Vnei *= porosityPtr_->primitiveField()[nei];
|
||||||
|
}
|
||||||
alpha1_[nei] +=
|
alpha1_[nei] +=
|
||||||
faceValue(dVfcorrectionValues, facei)/mesh_.V()[nei];
|
faceValue(dVfcorrectionValues, facei)/Vnei;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Change to treat boundaries consistently
|
// Change to treat boundaries consistently
|
||||||
@ -222,6 +233,7 @@ void Foam::isoAdvection::boundFlux
|
|||||||
const SuType& Su
|
const SuType& Su
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
DebugInFunction << endl;
|
DebugInFunction << endl;
|
||||||
scalar rDeltaT = 1/mesh_.time().deltaTValue();
|
scalar rDeltaT = 1/mesh_.time().deltaTValue();
|
||||||
|
|
||||||
@ -242,7 +254,12 @@ void Foam::isoAdvection::boundFlux
|
|||||||
{
|
{
|
||||||
if (alpha1_[celli] < -aTol || alpha1_[celli] > 1 + aTol)
|
if (alpha1_[celli] < -aTol || alpha1_[celli] > 1 + aTol)
|
||||||
{
|
{
|
||||||
const scalar Vi = meshV[celli];
|
scalar Vi = meshV[celli];
|
||||||
|
if (porosityEnabled_)
|
||||||
|
{
|
||||||
|
Vi *= porosityPtr_->primitiveField()[celli];
|
||||||
|
}
|
||||||
|
|
||||||
scalar alphaOvershoot =
|
scalar alphaOvershoot =
|
||||||
pos0(alpha1_[celli] - 1)*(alpha1_[celli] - 1)
|
pos0(alpha1_[celli] - 1)*(alpha1_[celli] - 1)
|
||||||
+ neg0(alpha1_[celli])*alpha1_[celli];
|
+ neg0(alpha1_[celli])*alpha1_[celli];
|
||||||
@ -374,6 +391,7 @@ void Foam::isoAdvection::boundFlux
|
|||||||
template<class SpType, class SuType>
|
template<class SpType, class SuType>
|
||||||
void Foam::isoAdvection::advect(const SpType& Sp, const SuType& Su)
|
void Foam::isoAdvection::advect(const SpType& Sp, const SuType& Su)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
DebugInFunction << endl;
|
DebugInFunction << endl;
|
||||||
|
|
||||||
if (mesh_.topoChanging())
|
if (mesh_.topoChanging())
|
||||||
@ -409,21 +427,30 @@ void Foam::isoAdvection::advect(const SpType& Sp, const SuType& Su)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Advect the free surface
|
// Advect the free surface
|
||||||
alpha1_.primitiveFieldRef() =
|
if (porosityEnabled_)
|
||||||
(
|
{
|
||||||
alpha1_.oldTime().primitiveField()*rDeltaT
|
// Should Su and Sp also be divided by porosity?
|
||||||
+ Su.field()
|
alpha1_.primitiveFieldRef() =
|
||||||
- fvc::surfaceIntegrate(dVf_)().primitiveField()*rDeltaT
|
(
|
||||||
)/(rDeltaT - Sp.field());
|
alpha1_.oldTime().primitiveField()*rDeltaT + Su.field()
|
||||||
|
- fvc::surfaceIntegrate(dVf_)().primitiveField()*rDeltaT
|
||||||
|
/porosityPtr_->primitiveField()
|
||||||
|
)/(rDeltaT - Sp.field());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alpha1_.primitiveFieldRef() =
|
||||||
|
(
|
||||||
|
alpha1_.oldTime().primitiveField()*rDeltaT
|
||||||
|
+ Su.field()
|
||||||
|
- fvc::surfaceIntegrate(dVf_)().primitiveField()*rDeltaT
|
||||||
|
)/(rDeltaT - Sp.field());
|
||||||
|
}
|
||||||
|
|
||||||
alpha1_.correctBoundaryConditions();
|
alpha1_.correctBoundaryConditions();
|
||||||
|
|
||||||
// Adjust dVf for unbounded cells
|
// Adjust dVf for unbounded cells
|
||||||
limitFluxes
|
limitFluxes(Sp, Su);
|
||||||
(
|
|
||||||
Sp,
|
|
||||||
Su
|
|
||||||
);
|
|
||||||
|
|
||||||
scalar maxAlphaMinus1 = gMax(alpha1In_) - 1;
|
scalar maxAlphaMinus1 = gMax(alpha1In_) - 1;
|
||||||
scalar minAlpha = gMin(alpha1In_);
|
scalar minAlpha = gMin(alpha1In_);
|
||||||
|
|||||||
@ -275,10 +275,10 @@ void Foam::cutFace::calcSubFaceCentreAndArea
|
|||||||
if (nPoints == 3)
|
if (nPoints == 3)
|
||||||
{
|
{
|
||||||
subFaceCentre =
|
subFaceCentre =
|
||||||
(1.0 / 3.0) * (subFacePoints[0] + subFacePoints[1] + subFacePoints[2]);
|
(1.0/3.0)*(subFacePoints[0] + subFacePoints[1] + subFacePoints[2]);
|
||||||
|
|
||||||
subFaceArea = 0.5 * ((subFacePoints[1] - subFacePoints[0]) ^
|
subFaceArea = 0.5*((subFacePoints[1] - subFacePoints[0]) ^
|
||||||
(subFacePoints[2] - subFacePoints[0]));
|
(subFacePoints[2] - subFacePoints[0]));
|
||||||
}
|
}
|
||||||
else if (nPoints > 0)
|
else if (nPoints > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -28,6 +28,7 @@ License
|
|||||||
#include "isoAlpha.H"
|
#include "isoAlpha.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
#include "cutCellPLIC.H"
|
#include "cutCellPLIC.H"
|
||||||
|
#include "profiling.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -76,6 +77,7 @@ Foam::reconstruction::isoAlpha::isoAlpha
|
|||||||
|
|
||||||
void Foam::reconstruction::isoAlpha::reconstruct(bool forceUpdate)
|
void Foam::reconstruction::isoAlpha::reconstruct(bool forceUpdate)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
const bool uptodate = alreadyReconstructed(forceUpdate);
|
const bool uptodate = alreadyReconstructed(forceUpdate);
|
||||||
|
|
||||||
if (uptodate && !forceUpdate)
|
if (uptodate && !forceUpdate)
|
||||||
|
|||||||
@ -29,7 +29,7 @@ License
|
|||||||
#include "fvc.H"
|
#include "fvc.H"
|
||||||
#include "leastSquareGrad.H"
|
#include "leastSquareGrad.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "profiling.H"
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
namespace Foam
|
||||||
@ -46,6 +46,7 @@ namespace reconstruction
|
|||||||
|
|
||||||
void Foam::reconstruction::gradAlpha::gradSurf(const volScalarField& phi)
|
void Foam::reconstruction::gradAlpha::gradSurf(const volScalarField& phi)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
leastSquareGrad<scalar> lsGrad("polyDegree1",mesh_.geometricD());
|
leastSquareGrad<scalar> lsGrad("polyDegree1",mesh_.geometricD());
|
||||||
|
|
||||||
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
||||||
@ -123,6 +124,7 @@ Foam::reconstruction::gradAlpha::gradAlpha
|
|||||||
|
|
||||||
void Foam::reconstruction::gradAlpha::reconstruct(bool forceUpdate)
|
void Foam::reconstruction::gradAlpha::reconstruct(bool forceUpdate)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
const bool uptodate = alreadyReconstructed(forceUpdate);
|
const bool uptodate = alreadyReconstructed(forceUpdate);
|
||||||
|
|
||||||
if (uptodate && !forceUpdate)
|
if (uptodate && !forceUpdate)
|
||||||
|
|||||||
@ -30,6 +30,7 @@ License
|
|||||||
#include "fvc.H"
|
#include "fvc.H"
|
||||||
#include "leastSquareGrad.H"
|
#include "leastSquareGrad.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "profiling.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -47,6 +48,7 @@ namespace reconstruction
|
|||||||
|
|
||||||
void Foam::reconstruction::plicRDF::interpolateNormal()
|
void Foam::reconstruction::plicRDF::interpolateNormal()
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
scalar dt = mesh_.time().deltaTValue();
|
scalar dt = mesh_.time().deltaTValue();
|
||||||
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
||||||
|
|
||||||
@ -159,6 +161,7 @@ void Foam::reconstruction::plicRDF::interpolateNormal()
|
|||||||
|
|
||||||
void Foam::reconstruction::plicRDF::gradSurf(const volScalarField& phi)
|
void Foam::reconstruction::plicRDF::gradSurf(const volScalarField& phi)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
leastSquareGrad<scalar> lsGrad("polyDegree1", mesh_.geometricD());
|
leastSquareGrad<scalar> lsGrad("polyDegree1", mesh_.geometricD());
|
||||||
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
||||||
|
|
||||||
@ -205,6 +208,7 @@ void Foam::reconstruction::plicRDF::gradSurf(const volScalarField& phi)
|
|||||||
|
|
||||||
void Foam::reconstruction::plicRDF::setInitNormals(bool interpolate)
|
void Foam::reconstruction::plicRDF::setInitNormals(bool interpolate)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
||||||
|
|
||||||
interfaceLabels_.clear();
|
interfaceLabels_.clear();
|
||||||
@ -239,6 +243,7 @@ void Foam::reconstruction::plicRDF::calcResidual
|
|||||||
List<normalRes>& normalResidual
|
List<normalRes>& normalResidual
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
||||||
exchangeFields.setUpCommforZone(interfaceCell_,false);
|
exchangeFields.setUpCommforZone(interfaceCell_,false);
|
||||||
|
|
||||||
@ -377,6 +382,7 @@ Foam::reconstruction::plicRDF::plicRDF
|
|||||||
|
|
||||||
void Foam::reconstruction::plicRDF::reconstruct(bool forceUpdate)
|
void Foam::reconstruction::plicRDF::reconstruct(bool forceUpdate)
|
||||||
{
|
{
|
||||||
|
addProfilingInFunction(geometricVoF);
|
||||||
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
zoneDistribute& exchangeFields = zoneDistribute::New(mesh_);
|
||||||
const bool uptodate = alreadyReconstructed(forceUpdate);
|
const bool uptodate = alreadyReconstructed(forceUpdate);
|
||||||
|
|
||||||
|
|||||||
@ -28,8 +28,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rhoPhi,U) Gauss limitedLinearV 1;
|
div(rhoPhi,U) Gauss limitedLinearV 1;
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss interfaceCompression;
|
|
||||||
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,7 @@ correctFluxes
|
|||||||
(phi none)
|
(phi none)
|
||||||
(nHatf none)
|
(nHatf none)
|
||||||
(rhoPhi none)
|
(rhoPhi none)
|
||||||
(alphaPhi none)
|
(alphaPhi_ none)
|
||||||
(ghf none)
|
(ghf none)
|
||||||
(phi0 none)
|
(phi0 none)
|
||||||
(dVf_ none)
|
(dVf_ none)
|
||||||
|
|||||||
@ -28,8 +28,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rhoPhi,U) Gauss upwind;
|
div(rhoPhi,U) Gauss upwind;
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss linear;
|
|
||||||
div(phi,k) Gauss upwind;
|
div(phi,k) Gauss upwind;
|
||||||
div(phi,omega) Gauss upwind;
|
div(phi,omega) Gauss upwind;
|
||||||
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
||||||
|
|||||||
@ -29,9 +29,8 @@ solvers
|
|||||||
writeIsoFaces false;
|
writeIsoFaces false;
|
||||||
reconstructionScheme plicRDF; // isoAlpha
|
reconstructionScheme plicRDF; // isoAlpha
|
||||||
|
|
||||||
nAlphaCorr 1;
|
|
||||||
nAlphaSubCycles 1;
|
nAlphaSubCycles 1;
|
||||||
cAlpha 1;
|
cAlpha 1; // Read by interIsoFoam but not used
|
||||||
}
|
}
|
||||||
|
|
||||||
p_rgh
|
p_rgh
|
||||||
|
|||||||
@ -28,8 +28,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rho*phi,U) Gauss limitedLinearV 1;
|
div(rho*phi,U) Gauss limitedLinearV 1;
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss interfaceCompression;
|
|
||||||
div((muEff*dev(T(grad(U))))) Gauss linear;
|
div((muEff*dev(T(grad(U))))) Gauss linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -19,12 +19,12 @@ solvers
|
|||||||
{
|
{
|
||||||
"alpha.*"
|
"alpha.*"
|
||||||
{
|
{
|
||||||
isoFaceTol 1e-8;
|
isoFaceTol 1e-10;
|
||||||
surfCellTol 1e-8;
|
surfCellTol 1e-10;
|
||||||
nAlphaBounds 3;
|
nAlphaBounds 5;
|
||||||
snapTol 0;
|
snapTol 0;
|
||||||
clip false;
|
clip false;
|
||||||
cAlpha 1;
|
cAlpha 1; //Read by interIsoFoam but not used
|
||||||
nAlphaSubCycles 1;
|
nAlphaSubCycles 1;
|
||||||
reconstructionScheme plicRDF; // isoAlpha
|
reconstructionScheme plicRDF; // isoAlpha
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,8 +28,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rhoPhi,U) Gauss linearUpwind grad(U);
|
div(rhoPhi,U) Gauss linearUpwind grad(U);
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss linear;
|
|
||||||
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,17 +27,8 @@ solvers
|
|||||||
clip true;
|
clip true;
|
||||||
reconstructionScheme isoAlpha; // isoAlpha
|
reconstructionScheme isoAlpha; // isoAlpha
|
||||||
|
|
||||||
nAlphaCorr 2;
|
|
||||||
nAlphaSubCycles 1;
|
nAlphaSubCycles 1;
|
||||||
cAlpha 1;
|
cAlpha 1; // Read but not used by interIsoFoam
|
||||||
|
|
||||||
MULESCorr yes;
|
|
||||||
nLimiterIter 3;
|
|
||||||
|
|
||||||
solver smoothSolver;
|
|
||||||
smoother symGaussSeidel;
|
|
||||||
tolerance 1e-8;
|
|
||||||
relTol 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
"pcorr.*"
|
"pcorr.*"
|
||||||
|
|||||||
@ -0,0 +1,40 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volVectorField;
|
||||||
|
object U;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 1 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform (1 0 0.5);
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
rim
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
front
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
back
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object alpha.water;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 0 0 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
rim
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
front
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
back
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object p_rgh;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [1 -1 -2 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
rim
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
front
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
back
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object porosity;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 0 0 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 1;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
rim
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
front
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
back
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
8
tutorials/multiphase/interIsoFoam/discInConstantPorousFlow/Allclean
Executable file
8
tutorials/multiphase/interIsoFoam/discInConstantPorousFlow/Allclean
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd "${0%/*}" || exit # Run from this directory
|
||||||
|
. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions # Tutorial clean functions
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cleanCase0
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
34
tutorials/multiphase/interIsoFoam/discInConstantPorousFlow/Allrun
Executable file
34
tutorials/multiphase/interIsoFoam/discInConstantPorousFlow/Allrun
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd "${0%/*}" || exit # Run from this directory
|
||||||
|
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
restore0Dir
|
||||||
|
|
||||||
|
runApplication blockMesh
|
||||||
|
|
||||||
|
runApplication setAlphaField
|
||||||
|
|
||||||
|
runApplication setFields
|
||||||
|
|
||||||
|
runApplication decomposePar
|
||||||
|
|
||||||
|
runParallel $(getApplication)
|
||||||
|
|
||||||
|
runApplication reconstructPar
|
||||||
|
|
||||||
|
# restart
|
||||||
|
|
||||||
|
latestTime=$(foamListTimes -latestTime)
|
||||||
|
|
||||||
|
mv -f "$latestTime" "$latestTime".bak
|
||||||
|
|
||||||
|
rm -rf processor*
|
||||||
|
|
||||||
|
runParallel -s decompose redistributePar -decompose -latestTime
|
||||||
|
|
||||||
|
runParallel -s 2 $(getApplication)
|
||||||
|
|
||||||
|
runParallel -s reconstruct redistributePar -reconstruct -latestTime
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class uniformDimensionedVectorField;
|
||||||
|
object g;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 1 -2 0 0 0 0];
|
||||||
|
value ( 0 -9.81 0 );
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object porosityProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
porosityEnabled true;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object transportProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
phases (water air);
|
||||||
|
|
||||||
|
water
|
||||||
|
{
|
||||||
|
transportModel Newtonian;
|
||||||
|
nu 0;
|
||||||
|
rho 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
air
|
||||||
|
{
|
||||||
|
transportModel Newtonian;
|
||||||
|
nu 0;
|
||||||
|
rho 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sigma 0;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object blockMeshDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
scale 1;
|
||||||
|
|
||||||
|
L 5;
|
||||||
|
nx 100;
|
||||||
|
|
||||||
|
y1 -0.05;
|
||||||
|
y2 0.05;
|
||||||
|
ny 1;
|
||||||
|
|
||||||
|
H 3;
|
||||||
|
nz 60;
|
||||||
|
|
||||||
|
vertices
|
||||||
|
(
|
||||||
|
(0 $y1 0)
|
||||||
|
($L $y1 0)
|
||||||
|
($L $y2 0)
|
||||||
|
(0 $y2 0)
|
||||||
|
(0 $y1 $H)
|
||||||
|
($L $y1 $H)
|
||||||
|
($L $y2 $H)
|
||||||
|
(0 $y2 $H)
|
||||||
|
);
|
||||||
|
|
||||||
|
blocks
|
||||||
|
(
|
||||||
|
hex (0 1 2 3 4 5 6 7) ($nx $ny $nz) simpleGrading (1 1 1)
|
||||||
|
);
|
||||||
|
|
||||||
|
edges
|
||||||
|
(
|
||||||
|
);
|
||||||
|
|
||||||
|
boundary
|
||||||
|
(
|
||||||
|
rim
|
||||||
|
{
|
||||||
|
type patch;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(4 5 6 7)
|
||||||
|
(0 4 7 3)
|
||||||
|
(1 2 6 5)
|
||||||
|
(0 3 2 1)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
front
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(0 1 5 4)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
back
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
faces
|
||||||
|
(
|
||||||
|
(2 3 7 6)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object controlDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
application interIsoFoam;
|
||||||
|
|
||||||
|
startFrom latestTime;
|
||||||
|
|
||||||
|
startTime 0.0;
|
||||||
|
|
||||||
|
stopAt endTime;
|
||||||
|
|
||||||
|
endTime 2.5;
|
||||||
|
|
||||||
|
writeControl adjustable;
|
||||||
|
|
||||||
|
writeInterval 0.1;
|
||||||
|
|
||||||
|
deltaT 1e-3;
|
||||||
|
|
||||||
|
purgeWrite 0;
|
||||||
|
|
||||||
|
writeFormat ascii;
|
||||||
|
|
||||||
|
writePrecision 14;
|
||||||
|
|
||||||
|
writeCompression off;
|
||||||
|
|
||||||
|
timeFormat general;
|
||||||
|
|
||||||
|
timePrecision 6;
|
||||||
|
|
||||||
|
graphFormat raw;
|
||||||
|
|
||||||
|
runTimeModifiable no;
|
||||||
|
|
||||||
|
adjustTimeStep yes;
|
||||||
|
|
||||||
|
maxCo 1e6;
|
||||||
|
|
||||||
|
maxAlphaCo 0.5;
|
||||||
|
|
||||||
|
maxDeltaT 1e6;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object decomposeParDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
numberOfSubdomains 4;
|
||||||
|
|
||||||
|
method scotch;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object fvSchemes;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
ddtSchemes
|
||||||
|
{
|
||||||
|
default Euler;
|
||||||
|
}
|
||||||
|
|
||||||
|
gradSchemes
|
||||||
|
{
|
||||||
|
default Gauss linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
divSchemes
|
||||||
|
{
|
||||||
|
div(rhoPhi,U) Gauss limitedLinearV 1;
|
||||||
|
div((muEff*dev(T(grad(U))))) Gauss linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
laplacianSchemes
|
||||||
|
{
|
||||||
|
default Gauss linear corrected;
|
||||||
|
}
|
||||||
|
|
||||||
|
interpolationSchemes
|
||||||
|
{
|
||||||
|
default linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
snGradSchemes
|
||||||
|
{
|
||||||
|
default corrected;
|
||||||
|
}
|
||||||
|
|
||||||
|
fluxRequired
|
||||||
|
{
|
||||||
|
default no;
|
||||||
|
p_rgh;
|
||||||
|
pcorr;
|
||||||
|
alpha1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object fvSolution;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
solvers
|
||||||
|
{
|
||||||
|
"alpha.*"
|
||||||
|
{
|
||||||
|
isoFaceTol 1e-8;
|
||||||
|
surfCellTol 1e-8;
|
||||||
|
nAlphaBounds 3;
|
||||||
|
snapTol 0;
|
||||||
|
clip false;
|
||||||
|
cAlpha 1; // Read but not used by interIsoFoam
|
||||||
|
nAlphaSubCycles 1;
|
||||||
|
reconstructionScheme plicRDF; // isoAlpha
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PIMPLE
|
||||||
|
{
|
||||||
|
frozenFlow yes;
|
||||||
|
momentumPredictor no;
|
||||||
|
nCorrectors -1;
|
||||||
|
nNonOrthogonalCorrectors -1;
|
||||||
|
pRefCell 0;
|
||||||
|
pRefValue 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object setAlphaFieldDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
field alpha.water;
|
||||||
|
type cylinder;
|
||||||
|
radius 0.25;
|
||||||
|
direction (0 1 0);
|
||||||
|
origin (0.5 0 0.5);
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object setFieldsDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
defaultFieldValues
|
||||||
|
(
|
||||||
|
volScalarFieldValue porosity 1
|
||||||
|
);
|
||||||
|
|
||||||
|
regions
|
||||||
|
(
|
||||||
|
boxToCell
|
||||||
|
{
|
||||||
|
box (1 -0.05 0) (4 0.05 3);
|
||||||
|
|
||||||
|
fieldValues
|
||||||
|
(
|
||||||
|
volScalarFieldValue porosity 0.5
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -28,8 +28,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rhoPhi,U) Gauss limitedLinearV 1;
|
div(rhoPhi,U) Gauss limitedLinearV 1;
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss linear;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
laplacianSchemes
|
laplacianSchemes
|
||||||
|
|||||||
@ -26,7 +26,7 @@ solvers
|
|||||||
clip false;
|
clip false;
|
||||||
|
|
||||||
nAlphaSubCycles 1;
|
nAlphaSubCycles 1;
|
||||||
cAlpha 1;
|
cAlpha 1; // Read by interIsoFoam but not used
|
||||||
reconstructionScheme plicRDF; // isoAlpha
|
reconstructionScheme plicRDF; // isoAlpha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,8 +29,6 @@ divSchemes
|
|||||||
{
|
{
|
||||||
default none;
|
default none;
|
||||||
div(rhoPhi,U) Gauss limitedLinearV 1;
|
div(rhoPhi,U) Gauss limitedLinearV 1;
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss linear;
|
|
||||||
|
|
||||||
"div\(phi,(k|omega)\)" Gauss upwind;
|
"div\(phi,(k|omega)\)" Gauss upwind;
|
||||||
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
||||||
|
|||||||
@ -20,7 +20,7 @@ solvers
|
|||||||
"alpha.water.*"
|
"alpha.water.*"
|
||||||
{
|
{
|
||||||
nAlphaSubCycles 1;
|
nAlphaSubCycles 1;
|
||||||
cAlpha 1;
|
cAlpha 1; // Read by interIsoFoam but not used
|
||||||
reconstructionScheme isoAlpha; // plicRDF
|
reconstructionScheme isoAlpha; // plicRDF
|
||||||
isoFaceTol 1e-8;
|
isoFaceTol 1e-8;
|
||||||
surfCellTol 1e-6;
|
surfCellTol 1e-6;
|
||||||
|
|||||||
@ -28,8 +28,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rhoPhi,U) Gauss limitedLinearV 1;
|
div(rhoPhi,U) Gauss limitedLinearV 1;
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss linear;
|
|
||||||
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,7 @@ solvers
|
|||||||
nAlphaBounds 3;
|
nAlphaBounds 3;
|
||||||
clip false;
|
clip false;
|
||||||
nAlphaSubCycles 1;
|
nAlphaSubCycles 1;
|
||||||
cAlpha 1;
|
cAlpha 1; // Read by interIsoFoam but not used
|
||||||
reconstructionScheme isoAlpha; // plicRDF
|
reconstructionScheme isoAlpha; // plicRDF
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,8 +27,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rhoPhi,U) Gauss vanLeerV;
|
div(rhoPhi,U) Gauss vanLeerV;
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss vanLeer;
|
|
||||||
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -18,9 +18,8 @@ solvers
|
|||||||
{
|
{
|
||||||
alpha.water
|
alpha.water
|
||||||
{
|
{
|
||||||
nAlphaCorr 1;
|
|
||||||
nAlphaSubCycles 3;
|
nAlphaSubCycles 3;
|
||||||
cAlpha 1.5;
|
cAlpha 1; // Read by interIsoFoam but not used
|
||||||
|
|
||||||
isoFaceTol 1e-10;
|
isoFaceTol 1e-10;
|
||||||
surfCellTol 1e-6;
|
surfCellTol 1e-6;
|
||||||
|
|||||||
@ -28,8 +28,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rhoPhi,U) Gauss limitedLinearV 1;
|
div(rhoPhi,U) Gauss limitedLinearV 1;
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss linear;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
laplacianSchemes
|
laplacianSchemes
|
||||||
|
|||||||
@ -25,7 +25,7 @@ solvers
|
|||||||
nAlphaBounds 8;
|
nAlphaBounds 8;
|
||||||
clip false;
|
clip false;
|
||||||
nAlphaSubCycles 1;
|
nAlphaSubCycles 1;
|
||||||
cAlpha 1;
|
cAlpha 1; // Read but not used by interIsoFoam
|
||||||
reconstructionScheme isoAlpha;
|
reconstructionScheme isoAlpha;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,7 @@ solvers
|
|||||||
clip true;
|
clip true;
|
||||||
|
|
||||||
nAlphaSubCycles 1;
|
nAlphaSubCycles 1;
|
||||||
cAlpha 1;
|
cAlpha 1; // Read by interIsoFoam but not used
|
||||||
reconstructionScheme isoAlpha; // plicRDF
|
reconstructionScheme isoAlpha; // plicRDF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,8 +27,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rhoPhi,U) Gauss linearUpwind grad(U);
|
div(rhoPhi,U) Gauss linearUpwind grad(U);
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss linear;
|
|
||||||
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -24,9 +24,8 @@ solvers
|
|||||||
snapTol 1e-12;
|
snapTol 1e-12;
|
||||||
clip true;
|
clip true;
|
||||||
|
|
||||||
nAlphaCorr 1;
|
|
||||||
nAlphaSubCycles 1;
|
nAlphaSubCycles 1;
|
||||||
cAlpha 1;
|
cAlpha 1; // Read by interIsoFoam but not used
|
||||||
|
|
||||||
reconstructionScheme plicRDF; // plicRDF
|
reconstructionScheme plicRDF; // plicRDF
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,8 +28,6 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
div(rhoPhi,U) Gauss linear;
|
div(rhoPhi,U) Gauss linear;
|
||||||
div(phi,alpha) Gauss vanLeer;
|
|
||||||
div(phirb,alpha) Gauss linear;
|
|
||||||
div(phi,k) Gauss upwind;
|
div(phi,k) Gauss upwind;
|
||||||
div(phi,epsilon) Gauss upwind;
|
div(phi,epsilon) Gauss upwind;
|
||||||
div(phi,R) Gauss upwind;
|
div(phi,R) Gauss upwind;
|
||||||
|
|||||||
@ -0,0 +1,20 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
object turbulenceProperties;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
simulationType laminar;
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volVectorField;
|
||||||
|
object U;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 1 -1 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform (0 0 0);
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
leftWall
|
||||||
|
{
|
||||||
|
type slip;
|
||||||
|
}
|
||||||
|
|
||||||
|
rightWall
|
||||||
|
{
|
||||||
|
type slip;
|
||||||
|
}
|
||||||
|
|
||||||
|
lowerWall
|
||||||
|
{
|
||||||
|
type slip;
|
||||||
|
}
|
||||||
|
|
||||||
|
atmosphere
|
||||||
|
{
|
||||||
|
type pressureInletOutletVelocity;
|
||||||
|
value uniform (0 0 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultFaces
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: v2106 |
|
||||||
|
| \\ / A nd | Website: www.openfoam.com |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class volScalarField;
|
||||||
|
object alpha.water;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dimensions [0 0 0 0 0 0 0];
|
||||||
|
|
||||||
|
internalField uniform 0;
|
||||||
|
|
||||||
|
boundaryField
|
||||||
|
{
|
||||||
|
leftWall
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
rightWall
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
lowerWall
|
||||||
|
{
|
||||||
|
type zeroGradient;
|
||||||
|
}
|
||||||
|
|
||||||
|
atmosphere
|
||||||
|
{
|
||||||
|
type inletOutlet;
|
||||||
|
inletValue $internalField;
|
||||||
|
value $internalField;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultFaces
|
||||||
|
{
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user