Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
ebb9a9e1
Commit
ebb9a9e1
authored
Sep 17, 2010
by
graham
Browse files
ENH: tet decomposed particle tracking.
Squashed merge of particleInteractions up to commit e7cb5bcf0315c359539ef1e715e1d51991343391
parent
b329ea6f
Changes
236
Hide whitespace changes
Inline
Side-by-side
applications/solvers/combustion/dieselEngineFoam/Make/options
View file @
ebb9a9e1
...
...
@@ -2,6 +2,7 @@ EXE_INC = \
-I../engineFoam \
-I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/lagrangian/dieselSpray/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/liquids/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \
...
...
@@ -24,6 +25,7 @@ EXE_LIBS = \
-lreactionThermophysicalModels \
-lfiniteVolume \
-llagrangian \
-lmeshTools \
-ldieselSpray \
-lliquids \
-lliquidMixture \
...
...
applications/solvers/combustion/dieselFoam/Make/options
View file @
ebb9a9e1
...
...
@@ -3,6 +3,7 @@ EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/lagrangian/dieselSpray/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/liquids/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/liquidMixture/lnInclude \
...
...
@@ -21,6 +22,7 @@ EXE_LIBS = \
-lcompressibleLESModels \
-lreactionThermophysicalModels \
-llagrangian \
-lmeshTools \
-ldieselSpray \
-lliquids \
-lliquidMixture \
...
...
applications/solvers/discreteMethods/dsmc/dsmcFoam/Make/options
View file @
ebb9a9e1
...
...
@@ -9,4 +9,3 @@ EXE_LIBS = \
-lfiniteVolume \
-llagrangian \
-ldsmc
applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/files
0 → 100644
View file @
ebb9a9e1
incompressibleUncoupledKinematicParcelDyMFoam.C
EXE = $(FOAM_APPBIN)/incompressibleUncoupledKinematicParcelDyMFoam
applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/Make/options
0 → 100644
View file @
ebb9a9e1
EXE_INC = \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/lagrangian/intermediate/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/radiation/lnInclude \
-I$(LIB_SRC)/turbulenceModels/incompressible/turbulenceModel \
-I$(LIB_SRC)/transportModels \
-I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/surfaceFilmModels/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude
EXE_LIBS = \
-llagrangian \
-llagrangianIntermediate \
-lthermophysicalFunctions \
-lbasicThermophysicalModels \
-lspecie \
-lradiation \
-lincompressibleRASModels \
-lincompressibleLESModels \
-lincompressibleTransportModels \
-lfiniteVolume \
-lmeshTools \
-lsurfaceFilmModels \
-ldynamicMesh \
-ldynamicFvMesh \
-ltopoChangerFvMesh
applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/createFields.H
0 → 100644
View file @
ebb9a9e1
Info
<<
"
\n
Reading transportProperties
\n
"
<<
endl
;
IOdictionary
transportProperties
(
IOobject
(
"transportProperties"
,
runTime
.
constant
(),
mesh
,
IOobject
::
MUST_READ_IF_MODIFIED
,
IOobject
::
NO_WRITE
)
);
dimensionedScalar
rhoInfValue
(
transportProperties
.
lookup
(
"rhoInf"
)
);
volScalarField
rhoInf
(
IOobject
(
"rho"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
NO_READ
,
IOobject
::
AUTO_WRITE
),
mesh
,
rhoInfValue
);
Info
<<
"Reading field U
\n
"
<<
endl
;
volVectorField
U
(
IOobject
(
"U"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
MUST_READ
,
IOobject
::
AUTO_WRITE
),
mesh
);
#include
"createPhi.H"
Info
<<
"Creating turbulence model
\n
"
<<
endl
;
singlePhaseTransportModel
laminarTransport
(
U
,
phi
);
const
volScalarField
nu
=
laminarTransport
.
nu
();
autoPtr
<
incompressible
::
turbulenceModel
>
turbulence
(
incompressible
::
turbulenceModel
::
New
(
U
,
phi
,
laminarTransport
)
);
volScalarField
mu
(
IOobject
(
"mu"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
NO_READ
,
IOobject
::
AUTO_WRITE
),
nu
*
rhoInfValue
);
word
kinematicCloudName
(
"kinematicCloud"
);
args
.
optionReadIfPresent
(
"cloudName"
,
kinematicCloudName
);
Info
<<
"Constructing kinematicCloud "
<<
kinematicCloudName
<<
endl
;
basicKinematicCloud
kinematicCloud
(
kinematicCloudName
,
rhoInf
,
U
,
mu
,
g
);
IOobject
Hheader
(
"H"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
NO_READ
);
autoPtr
<
volVectorField
>
HPtr_
;
if
(
Hheader
.
headerOk
())
{
Info
<<
"
\n
Reading field H
\n
"
<<
endl
;
HPtr_
.
reset
(
new
volVectorField
(
IOobject
(
"H"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
MUST_READ
,
IOobject
::
AUTO_WRITE
),
mesh
)
);
}
IOobject
HdotGradHheader
(
"HdotGradH"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
NO_READ
);
autoPtr
<
volVectorField
>
HdotGradHPtr_
;
if
(
HdotGradHheader
.
headerOk
())
{
Info
<<
"Reading field HdotGradH"
<<
endl
;
HdotGradHPtr_
.
reset
(
new
volVectorField
(
IOobject
(
"HdotGradH"
,
runTime
.
timeName
(),
mesh
,
IOobject
::
MUST_READ
,
IOobject
::
AUTO_WRITE
),
mesh
)
);
}
applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelDyMFoam/incompressibleUncoupledKinematicParcelDyMFoam.C
0 → 100644
View file @
ebb9a9e1
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2008-2010 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
uncoupledKinematicParcelFoam
Description
Transient solver for the passive transport of a single kinematic
particle could.
Uses a pre-calculated velocity field to evolve the cloud.
\*---------------------------------------------------------------------------*/
#include
"fvCFD.H"
#include
"dynamicFvMesh.H"
#include
"singlePhaseTransportModel.H"
#include
"turbulenceModel.H"
#include
"basicKinematicCloud.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int
main
(
int
argc
,
char
*
argv
[])
{
argList
::
addOption
(
"cloudName"
,
"name"
,
"specify alternative cloud name. default is 'kinematicCloud'"
);
#include
"setRootCase.H"
#include
"createTime.H"
# include "createDynamicFvMesh.H"
#include
"readGravitationalAcceleration.H"
#include
"createFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info
<<
"
\n
Starting time loop
\n
"
<<
endl
;
while
(
runTime
.
loop
())
{
Info
<<
"Time = "
<<
runTime
.
timeName
()
<<
nl
<<
endl
;
mesh
.
update
();
U
.
correctBoundaryConditions
();
Info
<<
"Evolving "
<<
kinematicCloud
.
name
()
<<
endl
;
laminarTransport
.
correct
();
mu
=
nu
*
rhoInfValue
;
kinematicCloud
.
evolve
();
runTime
.
write
();
Info
<<
"ExecutionTime = "
<<
runTime
.
elapsedCpuTime
()
<<
" s"
<<
" ClockTime = "
<<
runTime
.
elapsedClockTime
()
<<
" s"
<<
nl
<<
endl
;
}
Info
<<
"End
\n
"
<<
endl
;
return
0
;
}
// ************************************************************************* //
applications/test/findCell-octree/findCell-octree.C
View file @
ebb9a9e1
...
...
@@ -29,6 +29,8 @@ License
#include
"IStringStream.H"
#include
"octree.H"
#include
"octreeDataCell.H"
#include
"indexedOctree.H"
#include
"treeDataCell.H"
#include
"OFstream.H"
using
namespace
Foam
;
...
...
@@ -44,11 +46,13 @@ int main(int argc, char *argv[])
# include "createTime.H"
# include "createMesh.H"
label
nReps
=
100000
;
const
point
sample
=
args
.
argRead
<
point
>
(
1
);
treeBoundBox
meshBb
(
mesh
.
point
s
());
treeBoundBox
meshBb
(
mesh
.
bound
s
());
// Calculate typical cell rel
e
ated size to shift bb by.
// Calculate typical cell related size to shift bb by.
scalar
typDim
=
meshBb
.
avgDim
()
/
(
2
.
0
*
Foam
::
cbrt
(
scalar
(
mesh
.
nCells
())));
treeBoundBox
shiftedBb
...
...
@@ -57,16 +61,13 @@ int main(int argc, char *argv[])
meshBb
.
max
()
+
vector
(
typDim
,
typDim
,
typDim
)
);
Info
<<
"Mesh"
<<
endl
;
Info
<<
" bounding box : "
<<
meshBb
<<
endl
;
Info
<<
" bounding box (shifted) : "
<<
shiftedBb
<<
endl
;
Info
<<
" typical dimension : "
<<
shiftedBb
.
typDim
()
<<
endl
;
/*
* Now we have allBb and shiftedBb
*/
Info
<<
"Initialised mesh in "
<<
runTime
.
cpuTimeIncrement
()
<<
" s"
<<
endl
;
// Wrap indices and mesh information into helper object
octreeDataCell
shapes
(
mesh
);
...
...
@@ -80,14 +81,52 @@ int main(int argc, char *argv[])
10
.
0
// maximum ratio of cubes v.s. cells
);
Info
<<
"Point:"
<<
sample
<<
" is in shape "
<<
oc
.
find
(
sample
)
<<
nl
<<
"Point:"
<<
sample
<<
" is in cell "
<<
mesh
.
findCell
(
sample
)
<<
endl
;
for
(
label
i
=
0
;
i
<
nReps
-
1
;
i
++
)
{
oc
.
find
(
sample
);
}
Info
<<
"Point:"
<<
sample
<<
" is in shape "
<<
oc
.
find
(
sample
)
<<
endl
;
oc
.
printStats
(
Info
);
Info
<<
"Found in octree "
<<
nReps
<<
" times in "
<<
runTime
.
cpuTimeIncrement
()
<<
" s"
<<
endl
;
indexedOctree
<
treeDataCell
>
ioc
(
treeDataCell
(
true
,
mesh
),
shiftedBb
,
8
,
// maxLevel
10
,
// leafsize
3
.
0
// duplicity
);
for
(
label
i
=
0
;
i
<
nReps
-
1
;
i
++
)
{
ioc
.
findInside
(
sample
);
}
Info
<<
"Point:"
<<
sample
<<
" is in shape "
<<
ioc
.
findInside
(
sample
)
<<
", where the possible cells were:"
<<
nl
<<
ioc
.
findIndices
(
sample
)
<<
endl
;
Info
<<
"Found in indexedOctree "
<<
nReps
<<
" times in "
<<
runTime
.
cpuTimeIncrement
()
<<
" s"
<<
endl
;
for
(
label
i
=
0
;
i
<
nReps
-
1
;
i
++
)
{
mesh
.
findCell
(
sample
);
}
Info
<<
"Point:"
<<
sample
<<
" is in cell "
<<
mesh
.
findCell
(
sample
)
<<
endl
;
Info
<<
"Found in mesh.findCell "
<<
nReps
<<
" times in "
<<
runTime
.
cpuTimeIncrement
()
<<
" s"
<<
endl
;
Info
<<
"End
\n
"
<<
endl
;
...
...
applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict
View file @
ebb9a9e1
...
...
@@ -341,11 +341,14 @@ meshQualityControls
// Set to very negative number (e.g. -1E30) to disable.
minVol 1e-13;
//- Minimum tet volume. Is absolute volume of the tet formed by the
// face-centre decomposition triangle and the cell centre.
// Set to a sensible fraction of the smallest cell volume expected.
// Set to very negative number (e.g. -1E30) to disable.
minTetVol 1e-20;
//- Minimum quality of the tet formed by the face-centre
// and variable base point minimum decomposition triangles and
// the cell centre. Set to very negative number (e.g. -1E30) to
// disable.
// <0 = inside out tet,
// 0 = flat tet
// 1 = regular tet
minTetQuality 1e-9;
//- Minimum face area. Set to <0 to disable.
minArea -1;
...
...
applications/utilities/mesh/manipulation/checkMesh/checkGeometry.C
View file @
ebb9a9e1
...
...
@@ -6,6 +6,7 @@
#include
"EdgeMap.H"
#include
"wedgePolyPatch.H"
#include
"unitConversion.H"
#include
"polyMeshTetDecomposition.H"
// Find wedge with opposite orientation. Note: does not actually check that
...
...
@@ -83,7 +84,7 @@ bool Foam::checkWedges
{
Info
<<
" Wedge "
<<
pp
.
name
()
<<
" with angle "
<<
radToDeg
(
wedgeAngle
)
<<
" degrees"
<<
endl
;
<<
endl
;
}
// Find opposite
...
...
@@ -413,7 +414,6 @@ Foam::label Foam::checkGeometry(const polyMesh& mesh, const bool allGeometry)
}
}
{
faceSet
faces
(
mesh
,
"wrongOrientedFaces"
,
mesh
.
nFaces
()
/
100
+
1
);
if
(
mesh
.
checkFacePyramids
(
true
,
-
SMALL
,
&
faces
))
...
...
@@ -434,8 +434,8 @@ Foam::label Foam::checkGeometry(const polyMesh& mesh, const bool allGeometry)
}
{
faceSet
faces
(
mesh
,
"
wrongOrientedTriangle
Faces"
,
mesh
.
nFaces
()
/
100
+
1
);
if
(
mesh
.
checkFace
Tet
s
(
true
,
0
,
&
faces
))
faceSet
faces
(
mesh
,
"
skew
Faces"
,
mesh
.
nFaces
()
/
100
+
1
);
if
(
mesh
.
checkFace
Skewnes
s
(
true
,
&
faces
))
{
noFailedChecks
++
;
...
...
@@ -444,17 +444,26 @@ Foam::label Foam::checkGeometry(const polyMesh& mesh, const bool allGeometry)
if
(
nFaces
>
0
)
{
Info
<<
" <<Writing "
<<
nFaces
<<
" faces with incorrectly orientated triangles to set "
<<
faces
.
name
()
<<
endl
;
<<
" skew faces to set "
<<
faces
.
name
()
<<
endl
;
faces
.
instance
()
=
mesh
.
pointsInstance
();
faces
.
write
();
}
}
}
if
(
allGeometry
)
{
faceSet
faces
(
mesh
,
"skewFaces"
,
mesh
.
nFaces
()
/
100
+
1
);
if
(
mesh
.
checkFaceSkewness
(
true
,
&
faces
))
faceSet
faces
(
mesh
,
"lowQualityTetFaces"
,
mesh
.
nFaces
()
/
100
+
1
);
if
(
polyMeshTetDecomposition
::
checkFaceTets
(
mesh
,
polyMeshTetDecomposition
::
minTetQuality
,
true
,
&
faces
)
)
{
noFailedChecks
++
;
...
...
@@ -463,7 +472,8 @@ Foam::label Foam::checkGeometry(const polyMesh& mesh, const bool allGeometry)
if
(
nFaces
>
0
)
{
Info
<<
" <<Writing "
<<
nFaces
<<
" skew faces to set "
<<
faces
.
name
()
<<
endl
;
<<
" faces with low quality or negative volume "
<<
"decomposition tets to set "
<<
faces
.
name
()
<<
endl
;
faces
.
instance
()
=
mesh
.
pointsInstance
();
faces
.
write
();
}
...
...
applications/utilities/parallelProcessing/decomposePar/decomposePar.C
View file @
ebb9a9e1
...
...
@@ -558,7 +558,6 @@ int main(int argc, char *argv[])
lagrangianScalarFieldFields
);
lagrangianFieldDecomposer
::
readFields
(
cloudI
,
...
...
@@ -687,6 +686,19 @@ int main(int argc, char *argv[])
)
);
labelIOList
faceProcAddressing
(
IOobject
(
"faceProcAddressing"
,
procMesh
.
facesInstance
(),
procMesh
.
meshSubDir
,
procMesh
,
IOobject
::
MUST_READ
,
IOobject
::
NO_WRITE
)
);
labelIOList
cellProcAddressing
(
IOobject
...
...
@@ -728,19 +740,6 @@ int main(int argc, char *argv[])
||
surfaceTensorFields
.
size
()
)
{
labelIOList
faceProcAddressing
(
IOobject
(
"faceProcAddressing"
,
procMesh
.
facesInstance
(),
procMesh
.
meshSubDir
,
procMesh
,
IOobject
::
MUST_READ
,
IOobject
::
NO_WRITE
)
);
fvFieldDecomposer
fieldDecomposer
(
mesh
,
...
...
@@ -814,6 +813,7 @@ int main(int argc, char *argv[])
(
mesh
,
procMesh
,
faceProcAddressing
,
cellProcAddressing
,
cloudDirs
[
cloudI
],
lagrangianPositions
[
cloudI
],
...
...
applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.C
View file @
ebb9a9e1
...
...
@@ -35,6 +35,7 @@ Foam::lagrangianFieldDecomposer::lagrangianFieldDecomposer
(
const
polyMesh
&
mesh
,
const
polyMesh
&
procMesh
,
const
labelList
&
faceProcAddressing
,
const
labelList
&
cellProcAddressing
,
const
word
&
cloudName
,
const
Cloud
<
indexedParticle
>&
lagrangianPositions
,
...
...
@@ -47,6 +48,14 @@ Foam::lagrangianFieldDecomposer::lagrangianFieldDecomposer
{
label
pi
=
0
;
// faceProcAddressing not required currently
// labelList decodedProcFaceAddressing(faceProcAddressing.size());
// forAll(faceProcAddressing, i)
// {
// decodedProcFaceAddressing[i] = mag(faceProcAddressing[i]) - 1;
// }