Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
HPCAPPs
OpenFOAM-GPU-v2.0
Commits
ea17556c
Commit
ea17556c
authored
Mar 07, 2024
by
shunbo
Browse files
Initial commit
parents
Changes
1000
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
2035 additions
and
0 deletions
+2035
-0
applications/solvers/basic/potentialFoam/overPotentialFoam/Make/options
...olvers/basic/potentialFoam/overPotentialFoam/Make/options
+13
-0
applications/solvers/basic/potentialFoam/overPotentialFoam/createControls.H
...rs/basic/potentialFoam/overPotentialFoam/createControls.H
+9
-0
applications/solvers/basic/potentialFoam/overPotentialFoam/createFields.H
...vers/basic/potentialFoam/overPotentialFoam/createFields.H
+138
-0
applications/solvers/basic/potentialFoam/overPotentialFoam/overPotentialFoam.C
...basic/potentialFoam/overPotentialFoam/overPotentialFoam.C
+265
-0
applications/solvers/basic/potentialFoam/potentialFoam.C
applications/solvers/basic/potentialFoam/potentialFoam.C
+268
-0
applications/solvers/basic/scalarTransportFoam/Make/files
applications/solvers/basic/scalarTransportFoam/Make/files
+3
-0
applications/solvers/basic/scalarTransportFoam/Make/options
applications/solvers/basic/scalarTransportFoam/Make/options
+10
-0
applications/solvers/basic/scalarTransportFoam/createFields.H
...ications/solvers/basic/scalarTransportFoam/createFields.H
+54
-0
applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C
...s/solvers/basic/scalarTransportFoam/scalarTransportFoam.C
+116
-0
applications/solvers/combustion/PDRFoam/EaEqn.H
applications/solvers/combustion/PDRFoam/EaEqn.H
+31
-0
applications/solvers/combustion/PDRFoam/EauEqn.H
applications/solvers/combustion/PDRFoam/EauEqn.H
+35
-0
applications/solvers/combustion/PDRFoam/Make/files
applications/solvers/combustion/PDRFoam/Make/files
+33
-0
applications/solvers/combustion/PDRFoam/Make/options
applications/solvers/combustion/PDRFoam/Make/options
+33
-0
applications/solvers/combustion/PDRFoam/PDRFoam.C
applications/solvers/combustion/PDRFoam/PDRFoam.C
+169
-0
applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C
applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C
+216
-0
applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C
...Foam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C
+150
-0
applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H
...Foam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H
+147
-0
applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C
...ion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C
+115
-0
applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H
...ion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H
+138
-0
applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C
.../PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C
+92
-0
No files found.
Too many changes to show.
To preserve performance only
1000 of 1000+
files are displayed.
Plain diff
Email patch
applications/solvers/basic/potentialFoam/overPotentialFoam/Make/options
0 → 100644
View file @
ea17556c
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude \
-I$(LIB_SRC)/overset/lnInclude
EXE_LIBS = \
-lfiniteVolume \
-lmeshTools \
-ldynamicFvMesh \
-lsampling \
-loverset
applications/solvers/basic/potentialFoam/overPotentialFoam/createControls.H
0 → 100644
View file @
ea17556c
const
dictionary
&
potentialFlow
(
mesh
.
solutionDict
().
subDict
(
"potentialFlow"
)
);
const
int
nNonOrthCorr
(
potentialFlow
.
getOrDefault
<
int
>
(
"nNonOrthogonalCorrectors"
,
0
)
);
applications/solvers/basic/potentialFoam/overPotentialFoam/createFields.H
0 → 100644
View file @
ea17556c
Info
<<
"Reading velocity field U
\n
"
<<
endl
;
volVectorField
U
(
IOobject
(
"U"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
MUST_READ
,
IOobject
::
AUTO_WRITE
),
mesh
);
// Initialise the velocity internal field to zero
U
=
dimensionedVector
(
U
.
dimensions
(),
Zero
);
surfaceScalarField
phi
(
IOobject
(
"phi"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
NO_READ
,
IOobject
::
AUTO_WRITE
),
fvc
::
flux
(
U
)
);
if
(
args
.
found
(
"initialiseUBCs"
))
{
U
.
correctBoundaryConditions
();
phi
=
fvc
::
flux
(
U
);
}
// Construct a pressure field
// If it is available read it otherwise construct from the velocity BCs
// converting fixed-value BCs to zero-gradient and vice versa.
// Allow override from command-line -pName option
const
word
pName
=
args
.
getOrDefault
<
word
>
(
"pName"
,
"p"
);
// Infer the pressure BCs from the velocity
wordList
pBCTypes
(
U
.
boundaryField
().
size
(),
fixedValueFvPatchScalarField
::
typeName
);
forAll
(
U
.
boundaryField
(),
patchi
)
{
if
(
U
.
boundaryField
()[
patchi
].
fixesValue
())
{
pBCTypes
[
patchi
]
=
zeroGradientFvPatchScalarField
::
typeName
;
}
}
// Note that registerObject is false for the pressure field. The pressure
// field in this solver doesn't have a physical value during the solution.
// It shouldn't be looked up and used by sub models or boundary conditions.
Info
<<
"Constructing pressure field "
<<
pName
<<
nl
<<
endl
;
volScalarField
p
(
IOobject
(
pName
,
runTime
.
timeName
(),
mesh
,
IOobject
::
READ_IF_PRESENT
,
IOobject
::
NO_WRITE
,
false
),
mesh
,
dimensionedScalar
(
sqr
(
dimVelocity
),
Zero
),
pBCTypes
);
// Infer the velocity potential BCs from the pressure
wordList
PhiBCTypes
(
p
.
boundaryField
().
size
(),
zeroGradientFvPatchScalarField
::
typeName
);
forAll
(
p
.
boundaryField
(),
patchi
)
{
if
(
p
.
boundaryField
()[
patchi
].
fixesValue
())
{
PhiBCTypes
[
patchi
]
=
fixedValueFvPatchScalarField
::
typeName
;
}
}
Info
<<
"Constructing velocity potential field Phi
\n
"
<<
endl
;
volScalarField
Phi
(
IOobject
(
"Phi"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
READ_IF_PRESENT
,
IOobject
::
NO_WRITE
),
mesh
,
dimensionedScalar
(
dimLength
*
dimVelocity
,
Zero
),
PhiBCTypes
);
label
PhiRefCell
=
0
;
scalar
PhiRefValue
=
0
;
setRefCell
(
Phi
,
potentialFlow
.
dict
(),
PhiRefCell
,
PhiRefValue
);
mesh
.
setFluxRequired
(
Phi
.
name
());
#include "createMRF.H"
// Add solver-specific interpolations
{
wordHashSet
&
nonInt
=
const_cast
<
wordHashSet
&>
(
Stencil
::
New
(
mesh
).
nonInterpolatedFields
());
nonInt
.
insert
(
"cellMask"
);
nonInt
.
insert
(
"interpolatedCells"
);
}
// Mask field for zeroing out contributions on hole cells
#include "createCellMask.H"
// Create bool field with interpolated cells
#include "createInterpolatedCells.H"
applications/solvers/basic/potentialFoam/overPotentialFoam/overPotentialFoam.C
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2017 OpenCFD Ltd
-------------------------------------------------------------------------------
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/>.
Application
overPotentialFoam
Group
grpBasicSolvers
Description
Potential flow solver which solves for the velocity potential, to
calculate the flux-field, from which the velocity field is obtained by
reconstructing the flux.
\heading Solver details
The potential flow solution is typically employed to generate initial fields
for full Navier-Stokes codes. The flow is evolved using the equation:
\f[
\laplacian \Phi = \div(\vec{U})
\f]
Where:
\vartable
\Phi | Velocity potential [m2/s]
\vec{U} | Velocity [m/s]
\endvartable
The corresponding pressure field could be calculated from the divergence
of the Euler equation:
\f[
\laplacian p + \div(\div(\vec{U}\otimes\vec{U})) = 0
\f]
but this generates excessive pressure variation in regions of large
velocity gradient normal to the flow direction. A better option is to
calculate the pressure field corresponding to velocity variation along the
stream-lines:
\f[
\laplacian p + \div(\vec{F}\cdot\div(\vec{U}\otimes\vec{U})) = 0
\f]
where the flow direction tensor \f$\vec{F}\f$ is obtained from
\f[
\vec{F} = \hat{\vec{U}}\otimes\hat{\vec{U}}
\f]
\heading Required fields
\plaintable
U | Velocity [m/s]
\endplaintable
\heading Optional fields
\plaintable
p | Kinematic pressure [m2/s2]
Phi | Velocity potential [m2/s]
| Generated from p (if present) or U if not present
\endplaintable
\heading Options
\plaintable
-writep | write the Euler pressure
-writePhi | Write the final velocity potential
-initialiseUBCs | Update the velocity boundaries before solving for Phi
\endplaintable
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "pisoControl.H"
#include "dynamicFvMesh.H"
#include "cellCellStencilObject.H"
#include "localMin.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int
main
(
int
argc
,
char
*
argv
[])
{
argList
::
addNote
(
"Overset potential flow solver which solves for the velocity potential"
);
argList
::
addOption
(
"pName"
,
"pName"
,
"Name of the pressure field"
);
argList
::
addBoolOption
(
"initialiseUBCs"
,
"Initialise U boundary conditions"
);
argList
::
addBoolOption
(
"writePhi"
,
"Write the final velocity potential field"
);
argList
::
addBoolOption
(
"writep"
,
"Calculate and write the Euler pressure field"
);
argList
::
addBoolOption
(
"withFunctionObjects"
,
"Execute functionObjects"
);
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createNamedDynamicFvMesh.H"
pisoControl
potentialFlow
(
mesh
,
"potentialFlow"
);
#include "createFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info
<<
nl
<<
"Calculating potential flow"
<<
endl
;
mesh
.
update
();
surfaceScalarField
faceMask
(
localMin
<
scalar
>
(
mesh
).
interpolate
(
cellMask
));
// Since solver contains no time loop it would never execute
// function objects so do it ourselves
runTime
.
functionObjects
().
start
();
MRF
.
makeRelative
(
phi
);
adjustPhi
(
phi
,
U
,
p
);
// Non-orthogonal velocity potential corrector loop
while
(
potentialFlow
.
correct
())
{
phi
=
fvc
::
flux
(
U
);
while
(
potentialFlow
.
correctNonOrthogonal
())
{
fvScalarMatrix
PhiEqn
(
fvm
::
laplacian
(
faceMask
,
Phi
)
==
fvc
::
div
(
phi
)
);
PhiEqn
.
setReference
(
PhiRefCell
,
PhiRefValue
);
PhiEqn
.
solve
();
if
(
potentialFlow
.
finalNonOrthogonalIter
())
{
phi
-=
PhiEqn
.
flux
();
}
}
MRF
.
makeAbsolute
(
phi
);
Info
<<
"Continuity error = "
<<
mag
(
fvc
::
div
(
phi
))().
weightedAverage
(
mesh
.
V
()).
value
()
<<
endl
;
U
=
fvc
::
reconstruct
(
phi
);
U
.
correctBoundaryConditions
();
Info
<<
"Interpolated velocity error = "
<<
(
sqrt
(
sum
(
sqr
(
fvc
::
flux
(
U
)
-
phi
)))
/
sum
(
mesh
.
magSf
())).
value
()
<<
endl
;
}
// Write U and phi
U
.
write
();
phi
.
write
();
// Optionally write Phi
if
(
args
.
found
(
"writePhi"
))
{
Phi
.
write
();
}
// Calculate the pressure field from the Euler equation
if
(
args
.
found
(
"writep"
))
{
Info
<<
nl
<<
"Calculating approximate pressure field"
<<
endl
;
label
pRefCell
=
0
;
scalar
pRefValue
=
0
.
0
;
setRefCell
(
p
,
potentialFlow
.
dict
(),
pRefCell
,
pRefValue
);
// Calculate the flow-direction filter tensor
volScalarField
magSqrU
(
magSqr
(
U
));
volSymmTensorField
F
(
sqr
(
U
)
/
(
magSqrU
+
SMALL
*
average
(
magSqrU
)));
// Calculate the divergence of the flow-direction filtered div(U*U)
// Filtering with the flow-direction generates a more reasonable
// pressure distribution in regions of high velocity gradient in the
// direction of the flow
volScalarField
divDivUU
(
fvc
::
div
(
F
&
fvc
::
div
(
phi
,
U
),
"div(div(phi,U))"
)
);
// Solve a Poisson equation for the approximate pressure
while
(
potentialFlow
.
correctNonOrthogonal
())
{
fvScalarMatrix
pEqn
(
fvm
::
laplacian
(
p
)
+
divDivUU
);
pEqn
.
setReference
(
pRefCell
,
pRefValue
);
pEqn
.
solve
();
}
p
.
write
();
}
runTime
.
functionObjects
().
end
();
runTime
.
printExecutionTime
(
Info
);
Info
<<
"End
\n
"
<<
endl
;
return
0
;
}
// ************************************************************************* //
applications/solvers/basic/potentialFoam/potentialFoam.C
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2019 OpenCFD Ltd.
-------------------------------------------------------------------------------
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/>.
Application
potentialFoam
Group
grpBasicSolvers
Description
Potential flow solver which solves for the velocity potential, to
calculate the flux-field, from which the velocity field is obtained by
reconstructing the flux.
\heading Solver details
The potential flow solution is typically employed to generate initial fields
for full Navier-Stokes codes. The flow is evolved using the equation:
\f[
\laplacian \Phi = \div(\vec{U})
\f]
Where:
\vartable
\Phi | Velocity potential [m2/s]
\vec{U} | Velocity [m/s]
\endvartable
The corresponding pressure field could be calculated from the divergence
of the Euler equation:
\f[
\laplacian p + \div(\div(\vec{U}\otimes\vec{U})) = 0
\f]
but this generates excessive pressure variation in regions of large
velocity gradient normal to the flow direction. A better option is to
calculate the pressure field corresponding to velocity variation along the
stream-lines:
\f[
\laplacian p + \div(\vec{F}\cdot\div(\vec{U}\otimes\vec{U})) = 0
\f]
where the flow direction tensor \f$\vec{F}\f$ is obtained from
\f[
\vec{F} = \hat{\vec{U}}\otimes\hat{\vec{U}}
\f]
\heading Required fields
\plaintable
U | Velocity [m/s]
\endplaintable
\heading Optional fields
\plaintable
p | Kinematic pressure [m2/s2]
Phi | Velocity potential [m2/s]
| Generated from p (if present) or U if not present
\endplaintable
\heading Options
\plaintable
-writep | write the Euler pressure
-writephi | Write the final volumetric flux
-writePhi | Write the final velocity potential
-initialiseUBCs | Update the velocity boundaries before solving for Phi
\endplaintable
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "pisoControl.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int
main
(
int
argc
,
char
*
argv
[])
{
argList
::
addNote
(
"Potential flow solver which solves for the velocity potential"
);
argList
::
addOption
(
"pName"
,
"pName"
,
"Name of the pressure field"
);
argList
::
addBoolOption
(
"initialiseUBCs"
,
"Initialise U boundary conditions"
);
argList
::
addBoolOption
(
"writephi"
,
"Write the final volumetric flux field"
);
argList
::
addBoolOption
(
"writePhi"
,
"Write the final velocity potential field"
);
argList
::
addBoolOption
(
"writep"
,
"Calculate and write the Euler pressure field"
);
argList
::
addBoolOption
(
"withFunctionObjects"
,
"Execute functionObjects"
);
#include "addRegionOption.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createMesh.H"
pisoControl
potentialFlow
(
mesh
,
"potentialFlow"
);
#include "createFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info
<<
nl
<<
"Calculating potential flow"
<<
endl
;
// Since solver contains no time loop it would never execute
// function objects so do it ourselves
runTime
.
functionObjects
().
start
();
MRF
.
makeRelative
(
phi
);
adjustPhi
(
phi
,
U
,
p
);
// Non-orthogonal velocity potential corrector loop
while
(
potentialFlow
.
correctNonOrthogonal
())
{
fvScalarMatrix
PhiEqn
(
fvm
::
laplacian
(
dimensionedScalar
(
"1"
,
dimless
,
1
),
Phi
)
==
fvc
::
div
(
phi
)
);
PhiEqn
.
setReference
(
PhiRefCell
,
PhiRefValue
);
PhiEqn
.
solve
();
if
(
potentialFlow
.
finalNonOrthogonalIter
())
{
phi
-=
PhiEqn
.
flux
();
}
}
MRF
.
makeAbsolute
(
phi
);
Info
<<
"Continuity error = "
<<
mag
(
fvc
::
div
(
phi
))().
weightedAverage
(
mesh
.
V
()).
value
()
<<
endl
;
U
=
fvc
::
reconstruct
(
phi
);
U
.
correctBoundaryConditions
();
Info
<<
"Interpolated velocity error = "
<<
(
sqrt
(
sum
(
sqr
(
fvc
::
flux
(
U
)
-
phi
)))
/
sum
(
mesh
.
magSf
())).
value
()
<<
endl
;
// Write U
U
.
write
();
// Optionally write the volumetric flux, phi
if
(
args
.
found
(
"writephi"
))
{
phi
.
write
();
}
// Optionally write velocity potential, Phi
if
(
args
.
found
(
"writePhi"
))
{
Phi
.
write
();
}
// Calculate the pressure field from the Euler equation
if
(
args
.
found
(
"writep"
))
{
Info
<<
nl
<<
"Calculating approximate pressure field"
<<
endl
;
label
pRefCell
=
0
;
scalar
pRefValue
=
0
.
0
;
setRefCell
(
p
,
potentialFlow
.
dict
(),
pRefCell
,
pRefValue
);
// Calculate the flow-direction filter tensor
volScalarField
magSqrU
(
magSqr
(
U
));
volSymmTensorField
F
(
sqr
(
U
)
/
(
magSqrU
+
SMALL
*
average
(
magSqrU
)));
// Calculate the divergence of the flow-direction filtered div(U*U)
// Filtering with the flow-direction generates a more reasonable
// pressure distribution in regions of high velocity gradient in the
// direction of the flow
volScalarField
divDivUU
(
fvc
::
div
(
F
&
fvc
::
div
(
phi
,
U
),
"div(div(phi,U))"
)
);
// Solve a Poisson equation for the approximate pressure
while
(
potentialFlow
.
correctNonOrthogonal
())
{
fvScalarMatrix
pEqn
(
fvm
::
laplacian
(
p
)
+
divDivUU
);
pEqn
.
setReference
(
pRefCell
,
pRefValue
);
pEqn
.
solve
();
}
p
.
write
();
}
runTime
.
functionObjects
().
end
();
runTime
.
printExecutionTime
(
Info
);
Info
<<
"End
\n
"
<<
endl
;
return
0
;
}
// ************************************************************************* //
applications/solvers/basic/scalarTransportFoam/Make/files
0 → 100644
View file @
ea17556c
scalarTransportFoam.C
EXE = $(FOAM_APPBIN)/scalarTransportFoam
applications/solvers/basic/scalarTransportFoam/Make/options
0 → 100644
View file @
ea17556c
EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude
EXE_LIBS = \
-lfiniteVolume \
-lfvOptions \
-lmeshTools \
-lsampling
applications/solvers/basic/scalarTransportFoam/createFields.H
0 → 100644
View file @
ea17556c
Info
<<
"Reading field T
\n
"
<<
endl
;
volScalarField
T
(
IOobject
(
"T"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
MUST_READ
,
IOobject
::
AUTO_WRITE
),
mesh
);
Info
<<
"Reading field U
\n
"
<<
endl
;
volVectorField
U
(
IOobject
(
"U"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
MUST_READ
,
IOobject
::
AUTO_WRITE
),
mesh
);
Info
<<
"Reading transportProperties
\n
"
<<
endl
;
IOdictionary
transportProperties
(
IOobject
(
"transportProperties"
,
runTime
.
constant
(),
mesh
,
IOobject
::
MUST_READ_IF_MODIFIED
,
IOobject
::
NO_WRITE
)
);
Info
<<
"Reading diffusivity DT
\n
"
<<
endl
;
dimensionedScalar
DT
(
"DT"
,
dimViscosity
,
transportProperties
);
#include "createPhi.H"
#include "createFvOptions.H"
applications/solvers/basic/scalarTransportFoam/scalarTransportFoam.C
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
-------------------------------------------------------------------------------
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/>.
Application
scalarTransportFoam
Group
grpBasicSolvers
Description
Passive scalar transport equation solver.
\heading Solver details
The equation is given by:
\f[
\ddt{T} + \div \left(\vec{U} T\right) - \div \left(D_T \grad T \right)
= S_{T}
\f]
Where:
\vartable
T | Passive scalar
D_T | Diffusion coefficient
S_T | Source
\endvartable
\heading Required fields
\plaintable
T | Passive scalar
U | Velocity [m/s]
\endplaintable
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "fvOptions.H"
#include "simpleControl.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int
main
(
int
argc
,
char
*
argv
[])
{
argList
::
addNote
(
"Passive scalar transport equation solver."
);
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createMesh.H"
simpleControl
simple
(
mesh
);
#include "createFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info
<<
"
\n
Calculating scalar transport
\n
"
<<
endl
;
#include "CourantNo.H"
while
(
simple
.
loop
())
{
Info
<<
"Time = "
<<
runTime
.
timeName
()
<<
nl
<<
endl
;
while
(
simple
.
correctNonOrthogonal
())
{
fvScalarMatrix
TEqn
(
fvm
::
ddt
(
T
)
+
fvm
::
div
(
phi
,
T
)
-
fvm
::
laplacian
(
DT
,
T
)
==
fvOptions
(
T
)
);
TEqn
.
relax
();
fvOptions
.
constrain
(
TEqn
);
TEqn
.
solve
();
fvOptions
.
correct
(
T
);
}
runTime
.
write
();
}
Info
<<
"End
\n
"
<<
endl
;
return
0
;
}
// ************************************************************************* //
applications/solvers/combustion/PDRFoam/EaEqn.H
0 → 100644
View file @
ea17556c
{
volScalarField
&
hea
=
thermo
.
he
();
fvScalarMatrix
EaEqn
(
betav
*
fvm
::
ddt
(
rho
,
hea
)
+
mvConvection
->
fvmDiv
(
phi
,
hea
)
+
betav
*
fvc
::
ddt
(
rho
,
K
)
+
fvc
::
div
(
phi
,
K
)
+
(
hea
.
name
()
==
"ea"
?
fvc
::
div
(
phi
/
fvc
::
interpolate
(
rho
),
p
,
"div(phiv,p)"
)
:
-
betav
*
dpdt
)
-
fvm
::
laplacian
(
Db
,
hea
)
+
betav
*
fvOptions
(
rho
,
hea
)
);
EaEqn
.
relax
();
fvOptions
.
constrain
(
EaEqn
);
EaEqn
.
solve
();
fvOptions
.
correct
(
hea
);
thermo
.
correct
();
}
applications/solvers/combustion/PDRFoam/EauEqn.H
0 → 100644
View file @
ea17556c
if
(
ign
.
ignited
())
{
volScalarField
&
heau
=
thermo
.
heu
();
fvScalarMatrix
heauEqn
(
betav
*
fvm
::
ddt
(
rho
,
heau
)
+
mvConvection
->
fvmDiv
(
phi
,
heau
)
+
(
betav
*
fvc
::
ddt
(
rho
,
K
)
+
fvc
::
div
(
phi
,
K
))
*
rho
/
thermo
.
rhou
()
+
(
heau
.
name
()
==
"eau"
?
fvc
::
div
(
phi
/
fvc
::
interpolate
(
rho
),
p
,
"div(phiv,p)"
)
*
rho
/
thermo
.
rhou
()
:
-
betav
*
dpdt
*
rho
/
thermo
.
rhou
()
)
-
fvm
::
laplacian
(
Db
,
heau
)
// These terms cannot be used in partially-premixed combustion due to
// the resultant inconsistency between ft and heau transport.
// A possible solution would be to solve for ftu as well as ft.
//- fvm::div(muEff*fvc::grad(b)/(b + 0.001), heau)
//+ fvm::Sp(fvc::div(muEff*fvc::grad(b)/(b + 0.001)), heau)
==
betav
*
fvOptions
(
rho
,
heau
)
);
fvOptions
.
constrain
(
heauEqn
);
heauEqn
.
solve
();
fvOptions
.
correct
(
heau
);
}
applications/solvers/combustion/PDRFoam/Make/files
0 → 100644
View file @
ea17556c
XiModels/XiModel/XiModel.C
XiModels/XiModel/XiModelNew.C
XiModels/fixed/fixed.C
XiModels/algebraic/algebraic.C
XiModels/transport/transport.C
XiModels/XiEqModels/XiEqModel/XiEqModel.C
XiModels/XiEqModels/XiEqModel/XiEqModelNew.C
XiModels/XiEqModels/Gulder/Gulder.C
XiModels/XiEqModels/instabilityXiEq/instabilityXiEq.C
XiModels/XiEqModels/SCOPEBlendXiEq/SCOPEBlendXiEq.C
XiModels/XiEqModels/SCOPEXiEq/SCOPEXiEq.C
XiModels/XiGModels/XiGModel/XiGModel.C
XiModels/XiGModels/XiGModel/XiGModelNew.C
XiModels/XiGModels/KTS/KTS.C
XiModels/XiGModels/instabilityG/instabilityG.C
PDRModels/turbulence/PDRkEpsilon/PDRkEpsilon.C
PDRModels/dragModels/PDRDragModel/PDRDragModel.C
PDRModels/dragModels/PDRDragModel/PDRDragModelNew.C
PDRModels/dragModels/basic/basic.C
PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C
PDRModels/XiGModels/basicXiSubG/basicXiSubG.C
laminarFlameSpeed/SCOPE/SCOPELaminarFlameSpeed.C
/*PDRFoamAutoRefine.C*/
PDRFoam.C
EXE = $(FOAM_APPBIN)/PDRFoam
applications/solvers/combustion/PDRFoam/Make/options
0 → 100644
View file @
ea17556c
EXE_INC = \
-IXiModels/XiModel \
-IXiModels/XiEqModels/XiEqModel \
-IXiModels/XiGModels/XiGModel \
-IPDRModels/dragModels/PDRDragModel \
-IlaminarFlameSpeed/SCOPE \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/surfMesh/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/engine/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
-I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/laminarFlameSpeed/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude
EXE_LIBS = \
-lfiniteVolume \
-lfvOptions \
-lmeshTools \
-lengine \
-lturbulenceModels \
-lcompressibleTurbulenceModels \
-lcompressibleTransportModels \
-lfluidThermophysicalModels \
-lreactionThermophysicalModels \
-lspecie \
-llaminarFlameSpeedModels \
-ldynamicFvMesh
applications/solvers/combustion/PDRFoam/PDRFoam.C
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
-------------------------------------------------------------------------------
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/>.
Application
PDRFoam
Group
grpCombustionSolvers
Description
Solver for compressible premixed/partially-premixed combustion with
turbulence modelling.
Combusting RANS code using the b-Xi two-equation model.
Xi may be obtained by either the solution of the Xi transport
equation or from an algebraic expression. Both approaches are
based on Gulder's flame speed correlation which has been shown
to be appropriate by comparison with the results from the
spectral model.
Strain effects are incorporated directly into the Xi equation
but not in the algebraic approximation. Further work need to be
done on this issue, particularly regarding the enhanced removal rate
caused by flame compression. Analysis using results of the spectral
model will be required.
For cases involving very lean Propane flames or other flames which are
very strain-sensitive, a transport equation for the laminar flame
speed is present. This equation is derived using heuristic arguments
involving the strain time scale and the strain-rate at extinction.
the transport velocity is the same as that for the Xi equation.
For large flames e.g. explosions additional modelling for the flame
wrinkling due to surface instabilities may be applied.
PDR (porosity/distributed resistance) modelling is included to handle
regions containing blockages which cannot be resolved by the mesh.
The fields used by this solver are:
\plaintable
betav | Volume porosity
Lobs | Average diameter of obstacle in cell (m)
Aw | Obstacle surface area per unit volume (1/m)
CR | Drag tensor (1/m)
CT | Turbulence generation parameter (1/m)
Nv | Number of obstacles in cell per unit volume (m^-2)
nsv | Tensor whose diagonal indicates the number to subtract from
| Nv to get the number of obstacles crossing the flow in each
| direction.
\endplaintable
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "psiuReactionThermo.H"
#include "turbulentFluidThermoModel.H"
#include "laminarFlameSpeed.H"
#include "XiModel.H"
#include "PDRDragModel.H"
#include "ignition.H"
#include "bound.H"
#include "pimpleControl.H"
#include "fvOptions.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int
main
(
int
argc
,
char
*
argv
[])
{
argList
::
addNote
(
"Solver for compressible premixed/partially-premixed combustion with"
" turbulence modelling."
);
#include "postProcess.H"
#include "addCheckCaseOptions.H"
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createMesh.H"
#include "createControl.H"
#include "readCombustionProperties.H"
#include "readGravitationalAcceleration.H"
#include "createFields.H"
#include "createFieldRefs.H"
#include "initContinuityErrs.H"
#include "createTimeControls.H"
#include "compressibleCourantNo.H"
#include "setInitialDeltaT.H"
turbulence
->
validate
();
scalar
StCoNum
=
0
.
0
;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info
<<
"
\n
Starting time loop
\n
"
<<
endl
;
while
(
runTime
.
run
())
{
#include "readTimeControls.H"
#include "compressibleCourantNo.H"
#include "setDeltaT.H"
++
runTime
;
Info
<<
"
\n\n
Time = "
<<
runTime
.
timeName
()
<<
endl
;
#include "rhoEqn.H"
// --- Pressure-velocity PIMPLE corrector loop
while
(
pimple
.
loop
())
{
#include "UEqn.H"
// --- Pressure corrector loop
while
(
pimple
.
correct
())
{
#include "bEqn.H"
#include "ftEqn.H"
#include "EauEqn.H"
#include "EaEqn.H"
if
(
!
ign
.
ignited
())
{
thermo
.
heu
()
==
thermo
.
he
();
}
#include "pEqn.H"
}
if
(
pimple
.
turbCorr
())
{
turbulence
->
correct
();
}
}
runTime
.
write
();
runTime
.
printExecutionTime
(
Info
);
}
Info
<<
"End
\n
"
;
return
0
;
}
// ************************************************************************* //
applications/solvers/combustion/PDRFoam/PDRFoamAutoRefine.C
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
-------------------------------------------------------------------------------
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/>.
Application
PDRFoam
Description
Solver for compressible premixed/partially-premixed combustion with
turbulence modelling.
Combusting RANS code using the b-Xi two-equation model.
Xi may be obtained by either the solution of the Xi transport
equation or from an algebraic expression. Both approaches are
based on Gulder's flame speed correlation which has been shown
to be appropriate by comparison with the results from the
spectral model.
Strain effects are incorporated directly into the Xi equation
but not in the algebraic approximation. Further work need to be
done on this issue, particularly regarding the enhanced removal rate
caused by flame compression. Analysis using results of the spectral
model will be required.
For cases involving very lean Propane flames or other flames which are
very strain-sensitive, a transport equation for the laminar flame
speed is present. This equation is derived using heuristic arguments
involving the strain time scale and the strain-rate at extinction.
the transport velocity is the same as that for the Xi equation.
For large flames e.g. explosions additional modelling for the flame
wrinkling due to surface instabilities may be applied.
PDR (porosity/distributed resistance) modelling is included to handle
regions containing blockages which cannot be resolved by the mesh.
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "dynamicFvMesh.H"
#include "psiuReactionThermo.H"
#include "turbulentFluidThermoModel.H"
#include "laminarFlameSpeed.H"
#include "XiModel.H"
#include "PDRDragModel.H"
#include "ignition.H"
#include "bound.H"
#include "dynamicRefineFvMesh.H"
#include "pimpleControl.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int
main
(
int
argc
,
char
*
argv
[])
{
argList
::
addNote
(
"Solver for compressible premixed/partially-premixed combustion with"
" turbulence modelling."
);
#include "setRootCaseLists.H"
#include "createTime.H"
#include "createDynamicFvMesh.H"
pimpleControl
pimple
(
mesh
);
#include "readCombustionProperties.H"
#include "readGravitationalAcceleration.H"
#include "createFields.H"
#include "initContinuityErrs.H"
#include "createTimeControls.H"
#include "compressibleCourantNo.H"
#include "setInitialDeltaT.H"
turbulence
->
validate
();
scalar
StCoNum
=
0
.
0
;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info
<<
"
\n
Starting time loop
\n
"
<<
endl
;
bool
hasChanged
=
false
;
while
(
runTime
.
run
())
{
#include "readTimeControls.H"
#include "compressibleCourantNo.H"
#include "setDeltaT.H"
// Indicators for refinement.
// Note: before ++runTime only for post-processing reasons.
tmp
<
volScalarField
>
tmagGradP
=
mag
(
fvc
::
grad
(
p
));
volScalarField
normalisedGradP
(
"normalisedGradP"
,
tmagGradP
()
/
max
(
tmagGradP
())
);
normalisedGradP
.
writeOpt
()
=
IOobject
::
AUTO_WRITE
;
tmagGradP
.
clear
();
++
runTime
;
Info
<<
"
\n\n
Time = "
<<
runTime
.
timeName
()
<<
endl
;
{
// Make the fluxes absolute
fvc
::
makeAbsolute
(
phi
,
rho
,
U
);
// Test : disable refinement for some cells
bitSet
&
protectedCell
=
refCast
<
dynamicRefineFvMesh
>
(
mesh
).
protectedCell
();
if
(
protectedCell
.
empty
())
{
protectedCell
.
setSize
(
mesh
.
nCells
());
protectedCell
=
false
;
}
forAll
(
betav
,
celli
)
{
if
(
betav
[
celli
]
<
0
.
99
)
{
protectedCell
.
set
(
celli
);
}
}
// Flux estimate for introduced faces.
volVectorField
rhoU
(
"rhoU"
,
rho
*
U
);
// Do any mesh changes
bool
meshChanged
=
mesh
.
update
();
if
(
meshChanged
)
{
hasChanged
=
true
;
}
if
(
runTime
.
write
()
&&
hasChanged
)
{
betav
.
write
();
Lobs
.
write
();
CT
.
write
();
drag
->
writeFields
();
flameWrinkling
->
writeFields
();
hasChanged
=
false
;
}
// Make the fluxes relative to the mesh motion
fvc
::
makeRelative
(
phi
,
rho
,
U
);
}
#include "rhoEqn.H"
// --- Pressure-velocity PIMPLE corrector loop
while
(
pimple
.
loop
())
{
#include "UEqn.H"
// --- Pressure corrector loop
while
(
pimple
.
correct
())
{
#include "bEqn.H"
#include "ftEqn.H"
#include "huEqn.H"
#include "hEqn.H"
if
(
!
ign
.
ignited
())
{
hu
==
h
;
}
#include "pEqn.H"
}
if
(
pimple
.
turbCorr
())
{
turbulence
->
correct
();
}
}
runTime
.
write
();
runTime
.
printExecutionTime
(
Info
);
}
Info
<<
"End
\n
"
;
return
0
;
}
// ************************************************************************* //
applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.C
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
-------------------------------------------------------------------------------
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/>.
\*---------------------------------------------------------------------------*/
#include "basicXiSubXiEq.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace
Foam
{
namespace
XiEqModels
{
defineTypeNameAndDebug
(
basicSubGrid
,
0
);
addToRunTimeSelectionTable
(
XiEqModel
,
basicSubGrid
,
dictionary
);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam
::
XiEqModels
::
basicSubGrid
::
basicSubGrid
(
const
dictionary
&
XiEqProperties
,
const
psiuReactionThermo
&
thermo
,
const
compressible
::
RASModel
&
turbulence
,
const
volScalarField
&
Su
)
:
XiEqModel
(
XiEqProperties
,
thermo
,
turbulence
,
Su
),
B_
(
IOobject
(
"B"
,
Su
.
mesh
().
facesInstance
(),
Su
.
mesh
(),
IOobject
::
MUST_READ
,
IOobject
::
NO_WRITE
),
Su
.
mesh
()
),
XiEqModel_
(
XiEqModel
::
New
(
XiEqModelCoeffs_
,
thermo
,
turbulence
,
Su
))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam
::
XiEqModels
::
basicSubGrid
::~
basicSubGrid
()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam
::
tmp
<
Foam
::
volScalarField
>
Foam
::
XiEqModels
::
basicSubGrid
::
XiEq
()
const
{
const
fvMesh
&
mesh
=
Su_
.
mesh
();
const
volVectorField
&
U
=
mesh
.
lookupObject
<
volVectorField
>
(
"U"
);
const
volScalarField
&
Nv
=
mesh
.
lookupObject
<
volScalarField
>
(
"Nv"
);
const
volSymmTensorField
&
nsv
=
mesh
.
lookupObject
<
volSymmTensorField
>
(
"nsv"
);
volScalarField
magU
(
mag
(
U
));
volVectorField
Uhat
(
U
/
(
mag
(
U
)
+
dimensionedScalar
(
"Usmall"
,
U
.
dimensions
(),
1e-4
))
);
const
scalarField
Cw
=
pow
(
mesh
.
V
(),
2
.
0
/
3
.
0
);
volScalarField
N
(
IOobject
(
"N"
,
mesh
.
time
().
constant
(),
mesh
,
IOobject
::
NO_READ
,
IOobject
::
NO_WRITE
),
mesh
,
dimensionedScalar
(
Nv
.
dimensions
(),
Zero
)
);
N
.
primitiveFieldRef
()
=
Nv
.
primitiveField
()
*
Cw
;
volSymmTensorField
ns
(
IOobject
(
"ns"
,
U
.
mesh
().
time
().
timeName
(),
U
.
mesh
(),
IOobject
::
NO_READ
,
IOobject
::
NO_WRITE
),
U
.
mesh
(),
dimensionedSymmTensor
(
nsv
.
dimensions
(),
Zero
)
);
ns
.
primitiveFieldRef
()
=
nsv
.
primitiveField
()
*
Cw
;
volScalarField
n
(
max
(
N
-
(
Uhat
&
ns
&
Uhat
),
scalar
(
1e-4
)));
volScalarField
b
((
Uhat
&
B_
&
Uhat
)
/
sqrt
(
n
));
volScalarField
up
(
sqrt
((
2
.
0
/
3
.
0
)
*
turbulence_
.
k
()));
volScalarField
XiSubEq
(
scalar
(
1
)
+
max
(
2
.
2
*
sqrt
(
b
),
min
(
0
.
34
*
magU
/
up
*
sqrt
(
b
),
scalar
(
1
.
6
)))
*
min
(
n
,
scalar
(
1
))
);
return
(
XiSubEq
*
XiEqModel_
->
XiEq
());
}
bool
Foam
::
XiEqModels
::
basicSubGrid
::
read
(
const
dictionary
&
XiEqProperties
)
{
XiEqModel
::
read
(
XiEqProperties
);
return
XiEqModel_
->
read
(
XiEqModelCoeffs_
);
}
// ************************************************************************* //
applications/solvers/combustion/PDRFoam/PDRModels/XiEqModels/basicXiSubXiEq/basicXiSubXiEq.H
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2012 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiEqModels::basicSubGrid
Description
Basic sub-grid obstacle flame-wrinkling enhancement factor model.
Details supplied by J Puttock 2/7/06.
<b> Sub-grid flame area generation </b>
\f$ n = N - \hat{\dwea{\vec{U}}}.n_{s}.\hat{\dwea{\vec{U}}} \f$
\f$ n_{r} = \sqrt{n} \f$
where:
\f$ \hat{\dwea{\vec{U}}} = \dwea{\vec{U}} / \vert \dwea{\vec{U}}
\vert \f$
\f$ b = \hat{\dwea{\vec{U}}}.B.\hat{\dwea{\vec{U}}} / n_{r} \f$
where:
\f$ B \f$ is the file "B".
\f$ N \f$ is the file "N".
\f$ n_{s} \f$ is the file "ns".
The flame area enhancement factor \f$ \Xi_{sub} \f$ is expected to
approach:
\f[
\Xi_{{sub}_{eq}} =
1 + max(2.2 \sqrt{b}, min(0.34 \frac{\vert \dwea{\vec{U}}
\vert}{{\vec{U}}^{'}}, 1.6)) \times min(\frac{n}{4}, 1)
\f]
SourceFiles
basicSubGrid.C
\*---------------------------------------------------------------------------*/
#ifndef basicSubGrid_H
#define basicSubGrid_H
#include "XiEqModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace
Foam
{
namespace
XiEqModels
{
/*---------------------------------------------------------------------------*\
Class basicSubGrid Declaration
\*---------------------------------------------------------------------------*/
class
basicSubGrid
:
public
XiEqModel
{
// Private data
//- tblock
volSymmTensorField
B_
;
//- Equilibrium Xi model due to turbulence
autoPtr
<
XiEqModel
>
XiEqModel_
;
// Private Member Functions
//- No copy construct
basicSubGrid
(
const
basicSubGrid
&
)
=
delete
;
//- No copy assignment
void
operator
=
(
const
basicSubGrid
&
)
=
delete
;
public:
//- Runtime type information
TypeName
(
"basicSubGrid"
);
// Constructors
//- Construct from components
basicSubGrid
(
const
dictionary
&
XiEqProperties
,
const
psiuReactionThermo
&
thermo
,
const
compressible
::
RASModel
&
turbulence
,
const
volScalarField
&
Su
);
//- Destructor
virtual
~
basicSubGrid
();
// Member Functions
//- Return the flame-wrinkling XiEq
virtual
tmp
<
volScalarField
>
XiEq
()
const
;
//- Update properties from given dictionary
virtual
bool
read
(
const
dictionary
&
XiEqProperties
);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
}
// End namespace XiEqModels
}
// End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //
applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.C
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
-------------------------------------------------------------------------------
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/>.
\*---------------------------------------------------------------------------*/
#include "basicXiSubG.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace
Foam
{
namespace
XiGModels
{
defineTypeNameAndDebug
(
basicSubGrid
,
0
);
addToRunTimeSelectionTable
(
XiGModel
,
basicSubGrid
,
dictionary
);
};
};
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam
::
XiGModels
::
basicSubGrid
::
basicSubGrid
(
const
dictionary
&
XiGProperties
,
const
psiuReactionThermo
&
thermo
,
const
compressible
::
RASModel
&
turbulence
,
const
volScalarField
&
Su
)
:
XiGModel
(
XiGProperties
,
thermo
,
turbulence
,
Su
),
k1
(
XiGModelCoeffs_
.
get
<
scalar
>
(
"k1"
)),
XiGModel_
(
XiGModel
::
New
(
XiGModelCoeffs_
,
thermo
,
turbulence
,
Su
))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam
::
XiGModels
::
basicSubGrid
::~
basicSubGrid
()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam
::
tmp
<
Foam
::
volScalarField
>
Foam
::
XiGModels
::
basicSubGrid
::
G
()
const
{
const
objectRegistry
&
db
=
Su_
.
db
();
const
volVectorField
&
U
=
db
.
lookupObject
<
volVectorField
>
(
"U"
);
const
volScalarField
&
Nv
=
db
.
lookupObject
<
volScalarField
>
(
"Nv"
);
const
volScalarField
&
Lobs
=
db
.
lookupObject
<
volScalarField
>
(
"Lobs"
);
tmp
<
volScalarField
>
tGtot
=
XiGModel_
->
G
();
volScalarField
&
Gtot
=
tGtot
.
ref
();
const
scalarField
Cw
=
pow
(
Su_
.
mesh
().
V
(),
2
.
0
/
3
.
0
);
scalarField
N
(
Nv
.
primitiveField
()
*
Cw
);
forAll
(
N
,
celli
)
{
if
(
N
[
celli
]
>
1e-3
)
{
Gtot
[
celli
]
+=
k1
*
mag
(
U
[
celli
])
/
Lobs
[
celli
];
}
}
return
tGtot
;
}
Foam
::
tmp
<
Foam
::
volScalarField
>
Foam
::
XiGModels
::
basicSubGrid
::
Db
()
const
{
const
objectRegistry
&
db
=
Su_
.
db
();
const
volScalarField
&
Xi
=
db
.
lookupObject
<
volScalarField
>
(
"Xi"
);
const
volScalarField
&
rho
=
db
.
lookupObject
<
volScalarField
>
(
"rho"
);
const
volScalarField
&
mgb
=
db
.
lookupObject
<
volScalarField
>
(
"mgb"
);
const
volScalarField
&
Lobs
=
db
.
lookupObject
<
volScalarField
>
(
"Lobs"
);
return
XiGModel_
->
Db
()
+
rho
*
Su_
*
(
Xi
-
1
.
0
)
*
mgb
*
(
0
.
5
*
Lobs
)
*
Lobs
/
(
mgb
*
Lobs
+
1
.
0
);
}
bool
Foam
::
XiGModels
::
basicSubGrid
::
read
(
const
dictionary
&
XiGProperties
)
{
XiGModel
::
read
(
XiGProperties
);
XiGModelCoeffs_
.
readEntry
(
"k1"
,
k1
);
return
true
;
}
// ************************************************************************* //
applications/solvers/combustion/PDRFoam/PDRModels/XiGModels/basicXiSubG/basicXiSubG.H
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2013 OpenFOAM Foundation
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::XiGModels::basicSubGrid
Description
Basic sub-grid obstacle flame-wrinkling generation rate coefficient model.
Details supplied by J Puttock 2/7/06.
\f$ G_{sub} \f$ denotes the generation coefficient and it is given by
\f[
G_{sub} = k_{1} /frac{\vert \dwea{\vec{U}} \vert}{L_{obs}}
\frac{/Xi_{{sub}_{eq}}-1}{/Xi_{sub}}
\f]
and the removal:
\f[
- k_{1} /frac{\vert \dwea{\vec{U}} \vert}{L_{sub}}
\frac{\Xi_{sub}-1}{\Xi_{sub}}
\f]
Finally, \f$ G_{sub} \f$ is added to generation rate \f$ G_{in} \f$
due to the turbulence.
SourceFiles
basicSubGrid.C
\*---------------------------------------------------------------------------*/
#ifndef basicSubGrid_H
#define basicSubGrid_H
#include "XiGModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace
Foam
{
namespace
XiGModels
{
/*---------------------------------------------------------------------------*\
Class basicSubGrid Declaration
\*---------------------------------------------------------------------------*/
class
basicSubGrid
:
public
XiGModel
{
// Private data
//- Sub-grid generation rate coefficient
scalar
k1
;
//- Xi generation rate model due to turbulence
autoPtr
<
XiGModel
>
XiGModel_
;
// Private Member Functions
//- No copy construct
basicSubGrid
(
const
basicSubGrid
&
)
=
delete
;
//- No copy assignment
void
operator
=
(
const
basicSubGrid
&
)
=
delete
;
public:
//- Runtime type information
TypeName
(
"basicSubGridG"
);
// Constructors
//- Construct from components
basicSubGrid
(
const
dictionary
&
XiGProperties
,
const
psiuReactionThermo
&
thermo
,
const
compressible
::
RASModel
&
turbulence
,
const
volScalarField
&
Su
);
//- Destructor
virtual
~
basicSubGrid
();
// Member Functions
//- Return the flame-wrinkling generation rate
virtual
tmp
<
volScalarField
>
G
()
const
;
//- Return the flame diffusivity
virtual
tmp
<
volScalarField
>
Db
()
const
;
//- Update properties from given dictionary
virtual
bool
read
(
const
dictionary
&
XiGProperties
);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
}
// End namespace XiGModels
}
// End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //
applications/solvers/combustion/PDRFoam/PDRModels/dragModels/PDRDragModel/PDRDragModel.C
0 → 100644
View file @
ea17556c
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2017 OpenFOAM Foundation
-------------------------------------------------------------------------------
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/>.
\*---------------------------------------------------------------------------*/
#include "PDRDragModel.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace
Foam
{
defineTypeNameAndDebug
(
PDRDragModel
,
0
);
defineRunTimeSelectionTable
(
PDRDragModel
,
dictionary
);
};
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam
::
PDRDragModel
::
PDRDragModel
(
const
dictionary
&
PDRProperties
,
const
compressible
::
RASModel
&
turbulence
,
const
volScalarField
&
rho
,
const
volVectorField
&
U
,
const
surfaceScalarField
&
phi
)
:
regIOobject
(
IOobject
(
"PDRDragModel"
,
U
.
time
().
constant
(),
U
.
db
()
)
),
PDRDragModelCoeffs_
(
PDRProperties
.
subDict
(
PDRProperties
.
get
<
word
>
(
"PDRDragModel"
)
+
"Coeffs"
)
),
turbulence_
(
turbulence
),
rho_
(
rho
),
U_
(
U
),
phi_
(
phi
),
on_
(
PDRDragModelCoeffs_
.
get
<
bool
>
(
"drag"
))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam
::
PDRDragModel
::~
PDRDragModel
()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
bool
Foam
::
PDRDragModel
::
read
(
const
dictionary
&
PDRProperties
)
{
PDRDragModelCoeffs_
=
PDRProperties
.
optionalSubDict
(
type
()
+
"Coeffs"
);
PDRDragModelCoeffs_
.
readEntry
(
"drag"
,
on_
);
return
true
;
}
// ************************************************************************* //
Prev
1
2
3
4
5
6
7
…
50
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment