plenumPressureFvPatchScalarField: New plenum pressure boundary condition

This condition creates a zero-dimensional model of an enclosed volume of
gas upstream of the inlet. The pressure that the boundary condition
exerts on the inlet boundary is dependent on the thermodynamic state of
the upstream volume.  The upstream plenum density and temperature are
time-stepped along with the rest of the simulation, and momentum is
neglected. The plenum is supplied with a user specified mass flow and
temperature.

The result is a boundary condition which blends between a pressure inlet
condition condition and a fixed mass flow. The smaller the plenum
volume, the quicker the pressure responds to a deviation from the supply
mass flow, and the closer the model approximates a fixed mass flow. As
the plenum size increases, the model becomes more similar to a specified
pressure.

The expansion from the plenum to the inlet boundary is controlled by an
area ratio and a discharge coefficient. The area ratio can be used to
represent further acceleration between a sub-grid blockage such as fins.
The discharge coefficient represents a fractional deviation from an
ideal expansion process.

This condition is useful for simulating unsteady internal flow problems
for which both a mass flow boundary is unrealistic, and a pressure
boundary is susceptible to flow reversal. It was developed for use in
simulating confined combustion.

tutorials/compressible/rhoPimpleFoam/laminar/helmholtzResonance:
    helmholtz resonance tutorial case for plenum pressure boundary

This development was contributed by Will Bainbridge
This commit is contained in:
Henry Weller
2016-04-23 13:43:49 +01:00
parent 2c6b405043
commit b63a532ad7
19 changed files with 1439 additions and 0 deletions

View File

@ -0,0 +1,55 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object T;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 1 0 0 0];
internalField uniform 300;
boundaryField
{
inlet
{
type fixedValue;
value uniform 300;
}
outlet
{
type inletOutlet;
inletValue uniform 300;
value uniform 300;
}
symmetry
{
type symmetry;
}
wall
{
type fixedValue;
value uniform 300;
}
plenum
{
type fixedValue;
value uniform 300;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,60 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
location "0";
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
inlet
{
type flowRateInletVelocity;
phi phi;
rho rho;
massFlowRate 0.0001;
value uniform (0 0 0);
}
outlet
{
type pressureInletOutletVelocity;
inletValue uniform (0 0 0);
value uniform (0 0 0);
}
symmetry
{
type symmetry;
}
wall
{
type fixedValue;
value uniform (0 0 0);
}
plenum
{
type pressureInletVelocity;
phi phi;
rho rho;
value uniform (0 0 0);
}
}
// ************************************************************************* //

View File

@ -0,0 +1,63 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object p;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0];
internalField uniform 1e5;
boundaryField
{
inlet
{
type zeroGradient;
}
outlet
{
type fixedMean;
meanValue constant 1e5;
value uniform 1e5;
}
symmetry
{
type symmetry;
}
wall
{
type zeroGradient;
}
plenum
{
type plenumPressure;
gamma 1.4;
R 287.04;
supplyMassFlowRate 0.0001;
supplyTotalTemperature 300;
plenumVolume 0.000125;
plenumDensity 1.1613;
plenumTemperature 300;
inletAreaRatio 1.0;
inletDischargeCoefficient 0.8;
timeScale 1e-4;
value uniform 1e5;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,9 @@
#!/bin/sh
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
(cd system && rm -f blockMeshDict.caseBlocks blockMeshDict.caseBoundary)
rm -rf resolved modelled pressure.eps

View File

@ -0,0 +1,47 @@
#!/bin/sh
cd ${0%/*} || exit 1
. $WM_PROJECT_DIR/bin/tools/RunFunctions
# Run function links the appropriate mesh files and clones the case
run()
{
(
cd system
rm -f blockMeshDict.caseBlocks blockMeshDict.caseBoundary
ln -s blockMeshDict.${1}Blocks blockMeshDict.caseBlocks
ln -s blockMeshDict.${1}Boundary blockMeshDict.caseBoundary
)
cloneCase . ${1}
(
cd ${1}
runApplication blockMesh
runApplication decomposePar
runParallel $(getApplication)
)
}
# Run with a fully resolved plenum
run resolved
# Run with the plenum modelled by a boundary condition
run modelled
# Plot a comparison of the pressure in the neck
cat << EOF | gnuplot -persist
set terminal postscript eps size 5,4 enhanced color
set xlabel "Time (s)"
set ylabel "Guage pressure in the neck (Pa)"
set output "pressure.eps"
plot \
"resolved/postProcessing/probes/0/p" us 1:(\$4-1e5) t "Resolved Plenum" w l, \
"modelled/postProcessing/probes/0/p" us 1:(\$4-1e5) t "Modelled Plenum" w l
EOF

View File

@ -0,0 +1,49 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object thermophysicalProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
thermoType
{
type hePsiThermo;
mixture pureMixture;
transport const;
thermo eConst;
equationOfState perfectGas;
specie specie;
energy sensibleInternalEnergy;
}
mixture
{
specie
{
nMoles 1;
molWeight 28.9;
}
thermodynamics
{
Cv 712;
Hf 0;
}
transport
{
mu 1.8e-05;
Pr 0.7;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,21 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object turbulenceProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
simulationType laminar;
// ************************************************************************* //

View File

@ -0,0 +1,251 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 0.0025;
vertices
(
(-28 -10 -10)
(-28 -10 -5)
(-28 -10 5)
(-28 -10 10)
(-28 -5 -10)
(-28 -5 -5)
(-28 -5 5)
(-28 -5 10)
(-28 5 -10)
(-28 5 -5)
(-28 5 5)
(-28 5 10)
(-28 10 -10)
(-28 10 -5)
(-28 10 5)
(-28 10 10)
(-14 -10 -10)
(-14 -10 -5)
(-14 -10 5)
(-14 -10 10)
(-14 -5 -10)
(-14 -5 -5)
(-14 -5 5)
(-14 -5 10)
(-14 5 -10)
(-14 5 -5)
(-14 5 5)
(-14 5 10)
(-14 10 -10)
(-14 10 -5)
(-14 10 5)
(-14 10 10)
( -8 -10 -10)
( -8 -10 -5)
( -8 -10 5)
( -8 -10 10)
( -8 -5 -10)
( -8 -5 -5)
( -8 -5 5)
( -8 -5 10)
( -8 5 -10)
( -8 5 -5)
( -8 5 5)
( -8 5 10)
( -8 10 -10)
( -8 10 -5)
( -8 10 5)
( -8 10 10)
( 0 -10 -10)
( 0 -10 -5)
( 0 -10 5)
( 0 -10 10)
( 0 -5 -10)
( 0 -5 -5)
( 0 -5 5)
( 0 -5 10)
( 0 5 -10)
( 0 5 -5)
( 0 5 5)
( 0 5 10)
( 0 10 -10)
( 0 10 -5)
( 0 10 5)
( 0 10 10)
( 6 -10 -10)
( 6 -10 -5)
( 6 -10 5)
( 6 -10 10)
( 6 -5 -10)
( 6 -5 -5)
( 6 -5 5)
( 6 -5 10)
( 6 5 -10)
( 6 5 -5)
( 6 5 5)
( 6 5 10)
( 6 10 -10)
( 6 10 -5)
( 6 10 5)
( 6 10 10)
( 10 -10 -10)
( 10 -10 -5)
( 10 -10 5)
( 10 -10 10)
( 10 -5 -10)
( 10 -5 -5)
( 10 -5 5)
( 10 -5 10)
( 10 5 -10)
( 10 5 -5)
( 10 5 5)
( 10 5 10)
( 10 10 -10)
( 10 10 -5)
( 10 10 5)
( 10 10 10)
(-11 -2 -2)
(-11 -2 2)
(-11 2 -2)
(-11 2 2)
( -8 -2 -2)
( -8 -2 2)
( -8 2 -2)
( -8 2 2)
( 0 -2 -2)
( 0 -2 2)
( 0 2 -2)
( 0 2 2)
( 3 -2 -2)
( 3 -2 2)
( 3 2 -2)
( 3 2 2)
);
x1 14; x2 6; x3 20; x4 6; x5 4; // X divisions
yc 6; ys 12; zc $yc; zs $ys; // Y and Z corner and side divisions
o 6; // O-grid divisions
blocks
(
#include "blockMeshDict.caseBlocks"
hex ( 48 52 53 49 64 68 69 65) ($yc $zc $x4) simpleGrading (1 1 1)
hex ( 49 53 54 50 65 69 70 66) ($yc $zs $x4) simpleGrading (1 1 1)
hex ( 50 54 55 51 66 70 71 67) ($yc $zc $x4) simpleGrading (1 1 1)
hex ( 52 56 57 53 68 72 73 69) ($ys $zc $x4) simpleGrading (1 1 1)
hex ( 54 58 59 55 70 74 75 71) ($ys $zc $x4) simpleGrading (1 1 1)
hex ( 56 60 61 57 72 76 77 73) ($yc $zc $x4) simpleGrading (1 1 1)
hex ( 57 61 62 58 73 77 78 74) ($yc $zs $x4) simpleGrading (1 1 1)
hex ( 58 62 63 59 74 78 79 75) ($yc $zc $x4) simpleGrading (1 1 1)
hex ( 64 68 69 65 80 84 85 81) ($yc $zc $x5) simpleGrading (1 1 1)
hex ( 65 69 70 66 81 85 86 82) ($yc $zs $x5) simpleGrading (1 1 1)
hex ( 66 70 71 67 82 86 87 83) ($yc $zc $x5) simpleGrading (1 1 1)
hex ( 68 72 73 69 84 88 89 85) ($ys $zc $x5) simpleGrading (1 1 1)
hex ( 69 73 74 70 85 89 90 86) ($ys $zs $x5) simpleGrading (1 1 1)
hex ( 70 74 75 71 86 90 91 87) ($ys $zc $x5) simpleGrading (1 1 1)
hex ( 72 76 77 73 88 92 93 89) ($yc $zc $x5) simpleGrading (1 1 1)
hex ( 73 77 78 74 89 93 94 90) ($yc $zs $x5) simpleGrading (1 1 1)
hex ( 74 78 79 75 90 94 95 91) ($yc $zc $x5) simpleGrading (1 1 1)
hex (100 102 103 101 104 106 107 105) ($ys $zs $x3) simpleGrading (1 1 1)
hex (104 106 107 105 108 110 111 109) ($ys $zs $x4) simpleGrading (1 1 1)
hex (108 110 111 109 69 73 74 70 ) ($ys $zs $o ) simpleGrading (1 1 1)
hex ( 53 54 70 69 104 105 109 108) ($zs $x4 $o ) simpleGrading (1 1 1)
hex ( 57 53 69 73 106 104 108 110) ($ys $x4 $o ) simpleGrading (1 1 1)
hex ( 54 58 74 70 105 107 111 109) ($ys $x4 $o ) simpleGrading (1 1 1)
hex ( 58 57 73 74 107 106 110 111) ($zs $x4 $o ) simpleGrading (1 1 1)
);
edges
(
);
defaultPatch
{
name walls;
type wall;
}
boundary
(
#include "blockMeshDict.caseBoundary"
outlet
{
type patch;
faces
(
(80 84 85 81)
(81 85 86 82)
(82 86 87 83)
(84 88 89 85)
(85 89 90 86)
(86 90 91 87)
(88 92 93 89)
(89 93 94 90)
(90 94 95 91)
);
}
sides
{
type symmetry;
faces
(
(48 49 65 64)
(49 50 66 65)
(50 51 67 66)
(48 52 68 64)
(52 56 72 68)
(56 60 76 72)
(51 55 71 67)
(55 59 75 71)
(59 63 79 75)
(60 61 77 76)
(61 62 78 77)
(62 63 79 78)
(64 65 81 80)
(65 66 82 81)
(66 67 83 82)
(64 68 84 80)
(68 72 88 84)
(72 76 92 88)
(67 71 87 83)
(71 75 91 87)
(75 79 95 91)
(76 77 93 92)
(77 78 94 93)
(78 79 95 94)
);
}
);
mergePatchPairs
(
);
// ************************************************************************* //

View File

@ -0,0 +1,8 @@
plenum
{
type patch;
faces
(
(100 102 103 101)
);
}

View File

@ -0,0 +1,26 @@
hex ( 0 4 5 1 16 20 21 17) ($yc $zc $x1) simpleGrading (1 1 1)
hex ( 1 5 6 2 17 21 22 18) ($yc $zs $x1) simpleGrading (1 1 1)
hex ( 2 6 7 3 18 22 23 19) ($yc $zc $x1) simpleGrading (1 1 1)
hex ( 4 8 9 5 20 24 25 21) ($ys $zc $x1) simpleGrading (1 1 1)
hex ( 5 9 10 6 21 25 26 22) ($ys $zs $x1) simpleGrading (1 1 1)
hex ( 6 10 11 7 22 26 27 23) ($ys $zc $x1) simpleGrading (1 1 1)
hex ( 8 12 13 9 24 28 29 25) ($yc $zc $x1) simpleGrading (1 1 1)
hex ( 9 13 14 10 25 29 30 26) ($yc $zs $x1) simpleGrading (1 1 1)
hex ( 10 14 15 11 26 30 31 27) ($yc $zc $x1) simpleGrading (1 1 1)
hex ( 16 20 21 17 32 36 37 33) ($yc $zc $x2) simpleGrading (1 1 1)
hex ( 17 21 22 18 33 37 38 34) ($yc $zs $x2) simpleGrading (1 1 1)
hex ( 18 22 23 19 34 38 39 35) ($yc $zc $x2) simpleGrading (1 1 1)
hex ( 20 24 25 21 36 40 41 37) ($ys $zc $x2) simpleGrading (1 1 1)
hex ( 22 26 27 23 38 42 43 39) ($ys $zc $x2) simpleGrading (1 1 1)
hex ( 24 28 29 25 40 44 45 41) ($yc $zc $x2) simpleGrading (1 1 1)
hex ( 25 29 30 26 41 45 46 42) ($yc $zs $x2) simpleGrading (1 1 1)
hex ( 26 30 31 27 42 46 47 43) ($yc $zc $x2) simpleGrading (1 1 1)
hex ( 21 25 26 22 96 98 99 97) ($ys $zs $o ) simpleGrading (1 1 1)
hex ( 96 98 99 97 100 102 103 101) ($ys $zs $x2) simpleGrading (1 1 1)
hex ( 21 22 38 37 96 97 101 100) ($zs $x2 $o ) simpleGrading (1 1 1)
hex ( 25 21 37 41 98 96 100 102) ($ys $x2 $o ) simpleGrading (1 1 1)
hex ( 22 26 42 38 97 99 103 101) ($ys $x2 $o ) simpleGrading (1 1 1)
hex ( 26 25 41 42 99 98 102 103) ($zs $x2 $o ) simpleGrading (1 1 1)

View File

@ -0,0 +1,16 @@
inlet
{
type patch;
faces
(
( 0 4 5 1)
( 1 5 6 2)
( 2 6 7 3)
( 4 8 9 5)
( 5 9 10 6)
( 6 10 11 7)
( 8 12 13 9)
( 9 13 14 10)
(10 14 15 11)
);
}

View File

@ -0,0 +1,73 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application rhoPimpleFoam;
startFrom startTime;
startTime 0;
stopAt endTime;
endTime 0.05;
deltaT 1e-4;
writeControl adjustableRunTime;
writeInterval 1e-2;
purgeWrite 0;
writeFormat ascii;
writePrecision 10;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable true;
adjustTimeStep no;
maxCo 0.5;
functions
{
probes
{
functionObjectLibs ( "libsampling.so" );
type probes;
name probes;
outputControl timeStep;
outputInterval 1;
fields ( p );
probeLocations
(
( -0.045 0 0 )
( -0.045 0.020 0 )
( -0.010 0 0 )
( 0.0125 0 0 )
( 0.0125 0.020 0 )
);
}
}
// ************************************************************************* //

View File

@ -0,0 +1,22 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object decomposeParDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
numberOfSubdomains 4;
method scotch;
// ************************************************************************* //

View File

@ -0,0 +1,54 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes
{
default Euler;
}
gradSchemes
{
default Gauss linear;
}
divSchemes
{
default none;
div(phi,U) Gauss limitedLinearV 1;
div(phi,e) Gauss limitedLinear 1;
div(phi,K) Gauss limitedLinear 1;
div(phiv,p) Gauss limitedLinear 1;
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
}
laplacianSchemes
{
default Gauss linear corrected;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default corrected;
}
// ************************************************************************* //

View File

@ -0,0 +1,67 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers
{
"(p|rho)"
{
solver PCG;
preconditioner DIC;
tolerance 1e-6;
relTol 0.01;
}
"(p|rho)Final"
{
$p;
relTol 0;
}
"(U|e|k|nuTilda)"
{
solver smoothSolver;
smoother symGaussSeidel;
tolerance 1e-6;
relTol 0.01;
}
"(U|e|k|nuTilda)Final"
{
$U;
relTol 0;
}
}
PIMPLE
{
momentumPredictor yes;
nOuterCorrectors 3;
nCorrectors 1;
nNonOrthogonalCorrectors 0;
rhoMin 0.5;
rhoMax 2.0;
}
relaxationFactors
{
equations
{
".*" 1;
}
}
// ************************************************************************* //