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
e2cc8830
Commit
e2cc8830
authored
Jan 16, 2012
by
mattijs
Browse files
ENH: tetrahedron: move slicing with plane. Removed tetPointRef.H
parent
6a6986b4
Changes
22
Hide whitespace changes
Inline
Side-by-side
applications/test/momentOfInertia/Test-momentOfInertia.C
View file @
e2cc8830
...
...
@@ -35,7 +35,7 @@ Description
#include
"polyMesh.H"
#include
"ListOps.H"
#include
"face.H"
#include
"tet
PointRef
.H"
#include
"tet
rahedron
.H"
#include
"triFaceList.H"
#include
"OFstream.H"
#include
"meshTools.H"
...
...
applications/utilities/mesh/manipulation/createBaffles/createBaffles.C
View file @
e2cc8830
...
...
@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 201
1
OpenFOAM Foundation
\\ / A nd | Copyright (C) 201
2
OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
...
...
src/OpenFOAM/meshes/meshShapes/tetCell/tetCell.H
View file @
e2cc8830
...
...
@@ -43,7 +43,7 @@ SourceFiles
#include
"triFace.H"
#include
"edge.H"
#include
"pointField.H"
#include
"tet
PointRef
.H"
#include
"tet
rahedron
.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
...
...
src/OpenFOAM/meshes/polyMesh/polyMeshTetDecomposition/polyMeshTetDecomposition.H
View file @
e2cc8830
...
...
@@ -42,7 +42,7 @@ SourceFiles
#include
"polyMesh.H"
#include
"coupledPolyPatch.H"
#include
"syncTools.H"
#include
"tet
PointRef
.H"
#include
"tet
rahedron
.H"
#include
"tetIndices.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
...
...
src/OpenFOAM/meshes/polyMesh/polyMeshTetDecomposition/tetIndices.H
View file @
e2cc8830
...
...
@@ -38,7 +38,7 @@ SourceFiles
#define tetIndices_H
#include
"label.H"
#include
"tet
PointRef
.H"
#include
"tet
rahedron
.H"
#include
"triPointRef.H"
#include
"polyMesh.H"
#include
"triFace.H"
...
...
src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C
View file @
e2cc8830
...
...
@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 201
1
OpenFOAM Foundation
\\ / A nd | Copyright (C) 201
2
OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
...
...
src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCheck/primitiveMeshCheck.C
View file @
e2cc8830
...
...
@@ -25,7 +25,7 @@ License
#include
"primitiveMesh.H"
#include
"pyramidPointFaceRef.H"
#include
"tet
PointRef
.H"
#include
"tet
rahedron
.H"
#include
"ListOps.H"
#include
"unitConversion.H"
#include
"SortableList.H"
...
...
src/OpenFOAM/meshes/primitiveShapes/tetrahedron/tetPointRef.H
deleted
100644 → 0
View file @
6a6986b4
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Typedef
Foam::tetPointRef
Description
\*---------------------------------------------------------------------------*/
#ifndef tetPointRef_H
#define tetPointRef_H
#include
"point.H"
#include
"tetrahedron.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace
Foam
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
typedef
tetrahedron
<
point
,
const
point
&>
tetPointRef
;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
}
// End namespace Foam
#endif
// ************************************************************************* //
src/
sampling/meshToMeshInterpolation/tetOverlapVolume
/tetPoints.H
→
src/
OpenFOAM/meshes/primitiveShapes/tetrahedron
/tetPoints.H
View file @
e2cc8830
...
...
@@ -35,9 +35,9 @@ SourceFiles
#ifndef tetPoints_H
#define tetPoints_H
#include
"tetrahedron.H"
#include
"FixedList.H"
#include
"treeBoundBox.H"
#include
"tetPointRef.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
...
...
src/OpenFOAM/meshes/primitiveShapes/tetrahedron/tetrahedron.H
View file @
e2cc8830
...
...
@@ -54,6 +54,8 @@ namespace Foam
class
Istream
;
class
Ostream
;
class
tetPoints
;
class
plane
;
// Forward declaration of friend functions and operators
...
...
@@ -73,6 +75,7 @@ inline Ostream& operator<<
const
tetrahedron
<
Point
,
PointRef
>&
);
typedef
tetrahedron
<
point
,
const
point
&>
tetPointRef
;
/*---------------------------------------------------------------------------*\
class tetrahedron Declaration
...
...
@@ -81,10 +84,71 @@ inline Ostream& operator<<
template
<
class
Point
,
class
PointRef
>
class
tetrahedron
{
public:
// Classes for use in sliceWithPlane. What to do with decomposition
// of tet.
//- Dummy
class
dummyOp
{
public:
inline
void
operator
()(
const
tetPoints
&
);
};
//- Sum resulting volumes
class
sumVolOp
{
public:
scalar
vol_
;
inline
sumVolOp
();
inline
void
operator
()(
const
tetPoints
&
);
};
//- Store resulting tets
class
storeOp
{
FixedList
<
tetPoints
,
200
>&
tets_
;
label
&
nTets_
;
public:
inline
storeOp
(
FixedList
<
tetPoints
,
200
>&
,
label
&
);
inline
void
operator
()(
const
tetPoints
&
);
};
private:
// Private data
PointRef
a_
,
b_
,
c_
,
d_
;
inline
static
point
planeIntersection
(
const
FixedList
<
scalar
,
4
>&
,
const
tetPoints
&
,
const
label
,
const
label
);
template
<
class
TetOp
>
inline
static
void
decomposePrism
(
const
FixedList
<
point
,
6
>&
points
,
TetOp
&
op
);
template
<
class
AboveTetOp
,
class
BelowTetOp
>
inline
static
void
tetSliceWithPlane
(
const
plane
&
pl
,
const
tetPoints
&
tet
,
AboveTetOp
&
aboveOp
,
BelowTetOp
&
belowOp
);
public:
...
...
@@ -184,6 +248,16 @@ public:
//- Return true if point is inside tetrahedron
inline
bool
inside
(
const
point
&
pt
)
const
;
//- Decompose tet into tets above and below plane
template
<
class
AboveTetOp
,
class
BelowTetOp
>
inline
void
sliceWithPlane
(
const
plane
&
pl
,
AboveTetOp
&
aboveOp
,
BelowTetOp
&
belowOp
)
const
;
//- Return (min)containment sphere, i.e. the smallest sphere with
// all points inside. Returns pointHit with:
// - hit : if sphere is equal to circumsphere
...
...
src/OpenFOAM/meshes/primitiveShapes/tetrahedron/tetrahedronI.H
View file @
e2cc8830
...
...
@@ -25,7 +25,8 @@ License
#include
"triangle.H"
#include
"IOstreams.H"
#include
"triPointRef.H"
#include
"tetPoints.H"
#include
"plane.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
...
...
@@ -492,6 +493,483 @@ bool Foam::tetrahedron<Point, PointRef>::inside(const point& pt) const
}
template
<
class
Point
,
class
PointRef
>
inline
void
Foam
::
tetrahedron
<
Point
,
PointRef
>::
dummyOp
::
operator
()
(
const
tetPoints
&
)
{}
template
<
class
Point
,
class
PointRef
>
inline
Foam
::
tetrahedron
<
Point
,
PointRef
>::
sumVolOp
::
sumVolOp
()
:
vol_
(
0.0
)
{}
template
<
class
Point
,
class
PointRef
>
inline
void
Foam
::
tetrahedron
<
Point
,
PointRef
>::
sumVolOp
::
operator
()
(
const
tetPoints
&
tet
)
{
vol_
+=
tet
.
tet
().
mag
();
}
template
<
class
Point
,
class
PointRef
>
inline
Foam
::
tetrahedron
<
Point
,
PointRef
>::
storeOp
::
storeOp
(
FixedList
<
tetPoints
,
200
>&
tets
,
label
&
nTets
)
:
tets_
(
tets
),
nTets_
(
nTets
)
{}
template
<
class
Point
,
class
PointRef
>
inline
void
Foam
::
tetrahedron
<
Point
,
PointRef
>::
storeOp
::
operator
()
(
const
tetPoints
&
tet
)
{
tets_
[
nTets_
++
]
=
tet
;
}
template
<
class
Point
,
class
PointRef
>
inline
Foam
::
point
Foam
::
tetrahedron
<
Point
,
PointRef
>::
planeIntersection
(
const
FixedList
<
scalar
,
4
>&
d
,
const
tetPoints
&
t
,
const
label
negI
,
const
label
posI
)
{
return
(
d
[
posI
]
*
t
[
negI
]
-
d
[
negI
]
*
t
[
posI
])
/
(
-
d
[
negI
]
+
d
[
posI
]);
}
template
<
class
Point
,
class
PointRef
>
template
<
class
TetOp
>
inline
void
Foam
::
tetrahedron
<
Point
,
PointRef
>::
decomposePrism
(
const
FixedList
<
point
,
6
>&
points
,
TetOp
&
op
)
{
op
(
tetPoints
(
points
[
1
],
points
[
3
],
points
[
2
],
points
[
0
]));
op
(
tetPoints
(
points
[
1
],
points
[
2
],
points
[
3
],
points
[
4
]));
op
(
tetPoints
(
points
[
4
],
points
[
2
],
points
[
3
],
points
[
5
]));
}
template
<
class
Point
,
class
PointRef
>
template
<
class
AboveTetOp
,
class
BelowTetOp
>
inline
void
Foam
::
tetrahedron
<
Point
,
PointRef
>::
tetSliceWithPlane
(
const
plane
&
pl
,
const
tetPoints
&
tet
,
AboveTetOp
&
aboveOp
,
BelowTetOp
&
belowOp
)
{
// Distance to plane
FixedList
<
scalar
,
4
>
d
;
label
nPos
=
0
;
forAll
(
tet
,
i
)
{
d
[
i
]
=
((
tet
[
i
]
-
pl
.
refPoint
())
&
pl
.
normal
());
if
(
d
[
i
]
>
0
)
{
nPos
++
;
}
}
if
(
nPos
==
4
)
{
aboveOp
(
tet
);
}
else
if
(
nPos
==
3
)
{
// Sliced into below tet and above prism. Prism gets split into
// two tets.
// Find the below tet
label
i0
=
-
1
;
forAll
(
d
,
i
)
{
if
(
d
[
i
]
<=
0
)
{
i0
=
i
;
break
;
}
}
label
i1
=
d
.
fcIndex
(
i0
);
label
i2
=
d
.
fcIndex
(
i1
);
label
i3
=
d
.
fcIndex
(
i2
);
point
p01
=
planeIntersection
(
d
,
tet
,
i0
,
i1
);
point
p02
=
planeIntersection
(
d
,
tet
,
i0
,
i2
);
point
p03
=
planeIntersection
(
d
,
tet
,
i0
,
i3
);
// i0 = tetCell vertex 0: p01,p02,p03 outwards pointing triad
// ,, 1 : ,, inwards pointing triad
// ,, 2 : ,, outwards pointing triad
// ,, 3 : ,, inwards pointing triad
//Pout<< "Split 3pos tet " << tet << " d:" << d << " into" << nl;
if
(
i0
==
0
||
i0
==
2
)
{
tetPoints
t
(
tet
[
i0
],
p01
,
p02
,
p03
);
//Pout<< " belowtet:" << t << " around i0:" << i0 << endl;
//checkTet(t, "nPos 3, belowTet i0==0 or 2");
belowOp
(
t
);
// Prism
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
i1
];
p
[
1
]
=
tet
[
i3
];
p
[
2
]
=
tet
[
i2
];
p
[
3
]
=
p01
;
p
[
4
]
=
p03
;
p
[
5
]
=
p02
;
//Pout<< " aboveprism:" << p << endl;
decomposePrism
(
p
,
aboveOp
);
}
else
{
tetPoints
t
(
p01
,
p02
,
p03
,
tet
[
i0
]);
//Pout<< " belowtet:" << t << " around i0:" << i0 << endl;
//checkTet(t, "nPos 3, belowTet i0==1 or 3");
belowOp
(
t
);
// Prism
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
i3
];
p
[
1
]
=
tet
[
i1
];
p
[
2
]
=
tet
[
i2
];
p
[
3
]
=
p03
;
p
[
4
]
=
p01
;
p
[
5
]
=
p02
;
//Pout<< " aboveprism:" << p << endl;
decomposePrism
(
p
,
aboveOp
);
}
}
else
if
(
nPos
==
2
)
{
// Tet cut into two prisms. Determine the positive one.
label
pos0
=
-
1
;
label
pos1
=
-
1
;
label
neg0
=
-
1
;
label
neg1
=
-
1
;
forAll
(
d
,
i
)
{
if
(
d
[
i
]
>
0
)
{
if
(
pos0
==
-
1
)
{
pos0
=
i
;
}
else
{
pos1
=
i
;
}
}
else
{
if
(
neg0
==
-
1
)
{
neg0
=
i
;
}
else
{
neg1
=
i
;
}
}
}
//Pout<< "Split 2pos tet " << tet << " d:" << d
// << " around pos0:" << pos0 << " pos1:" << pos1
// << " neg0:" << neg0 << " neg1:" << neg1 << " into" << nl;
const
edge
posEdge
(
pos0
,
pos1
);
if
(
posEdge
==
edge
(
0
,
1
))
{
point
p02
=
planeIntersection
(
d
,
tet
,
0
,
2
);
point
p03
=
planeIntersection
(
d
,
tet
,
0
,
3
);
point
p12
=
planeIntersection
(
d
,
tet
,
1
,
2
);
point
p13
=
planeIntersection
(
d
,
tet
,
1
,
3
);
// Split the resulting prism
{
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
0
];
p
[
1
]
=
p02
;
p
[
2
]
=
p03
;
p
[
3
]
=
tet
[
1
];
p
[
4
]
=
p12
;
p
[
5
]
=
p13
;
//Pout<< " 01 aboveprism:" << p << endl;
decomposePrism
(
p
,
aboveOp
);
}
{
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
2
];
p
[
1
]
=
p02
;
p
[
2
]
=
p12
;
p
[
3
]
=
tet
[
3
];
p
[
4
]
=
p03
;
p
[
5
]
=
p13
;
//Pout<< " 01 belowprism:" << p << endl;
decomposePrism
(
p
,
belowOp
);
}
}
else
if
(
posEdge
==
edge
(
1
,
2
))
{
point
p01
=
planeIntersection
(
d
,
tet
,
0
,
1
);
point
p13
=
planeIntersection
(
d
,
tet
,
1
,
3
);
point
p02
=
planeIntersection
(
d
,
tet
,
0
,
2
);
point
p23
=
planeIntersection
(
d
,
tet
,
2
,
3
);
// Split the resulting prism
{
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
1
];
p
[
1
]
=
p01
;
p
[
2
]
=
p13
;
p
[
3
]
=
tet
[
2
];
p
[
4
]
=
p02
;
p
[
5
]
=
p23
;
//Pout<< " 12 aboveprism:" << p << endl;
decomposePrism
(
p
,
aboveOp
);
}
{
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
3
];
p
[
1
]
=
p23
;
p
[
2
]
=
p13
;
p
[
3
]
=
tet
[
0
];
p
[
4
]
=
p02
;
p
[
5
]
=
p01
;
//Pout<< " 12 belowprism:" << p << endl;
decomposePrism
(
p
,
belowOp
);
}
}
else
if
(
posEdge
==
edge
(
2
,
0
))
{
point
p01
=
planeIntersection
(
d
,
tet
,
0
,
1
);
point
p03
=
planeIntersection
(
d
,
tet
,
0
,
3
);
point
p12
=
planeIntersection
(
d
,
tet
,
1
,
2
);
point
p23
=
planeIntersection
(
d
,
tet
,
2
,
3
);
// Split the resulting prism
{
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
2
];
p
[
1
]
=
p12
;
p
[
2
]
=
p23
;
p
[
3
]
=
tet
[
0
];
p
[
4
]
=
p01
;
p
[
5
]
=
p03
;
//Pout<< " 20 aboveprism:" << p << endl;
decomposePrism
(
p
,
aboveOp
);
}
{
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
1
];
p
[
1
]
=
p12
;
p
[
2
]
=
p01
;
p
[
3
]
=
tet
[
3
];
p
[
4
]
=
p23
;
p
[
5
]
=
p03
;
//Pout<< " 20 belowprism:" << p << endl;
decomposePrism
(
p
,
belowOp
);
}
}
else
if
(
posEdge
==
edge
(
0
,
3
))
{
point
p01
=
planeIntersection
(
d
,
tet
,
0
,
1
);
point
p02
=
planeIntersection
(
d
,
tet
,
0
,
2
);
point
p13
=
planeIntersection
(
d
,
tet
,
1
,
3
);
point
p23
=
planeIntersection
(
d
,
tet
,
2
,
3
);
// Split the resulting prism
{
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
3
];
p
[
1
]
=
p23
;
p
[
2
]
=
p13
;
p
[
3
]
=
tet
[
0
];
p
[
4
]
=
p02
;
p
[
5
]
=
p01
;
//Pout<< " 03 aboveprism:" << p << endl;
decomposePrism
(
p
,
aboveOp
);
}
{
FixedList
<
point
,
6
>
p
;
p
[
0
]
=
tet
[
2
];
p
[
1
]
=
p23
;
p
[
2
]
=
p02
;
p
[
3
]
=
tet
[
1
];
p
[
4
]
=
p13
;
p
[
5
]
=
p01
;
//Pout<< " 03 belowprism:" << p << endl;
decomposePrism
(
p
,
belowOp
);
}
}
else
if
(
posEdge
==
edge
(
1
,
3
))
{
point
p01
=
planeIntersection
(
d
,
tet
,
0
,
1
);
point
p12
=
planeIntersection
(
d
,
tet
,
1
,
2
);
point
p03
=
planeIntersection
(
d
,
tet
,
0
,
3
);
point
p23
=
planeIntersection
(
d
,
tet
,
2
,
3
);
// Split the resulting prism