/*---------------------------------------------------------------------------*\
========= |
\\ / 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) 2016-2022 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 .
Class
Foam::isoSurfacePoint
Description
A surface formed by the iso value.
After "Regularised Marching Tetrahedra: improved iso-surface extraction",
G.M. Treece, R.W. Prager and A.H. Gee.
Note:
- does tets without using cell centres/cell values. Not tested.
- regularisation can create duplicate triangles/non-manifold surfaces.
Current handling of those is bit ad-hoc for now and not perfect.
- regularisation does not do boundary points so as to preserve the
boundary perfectly.
- uses geometric merge with fraction of bounding box as distance.
- triangles can be between two cell centres so constant sampling
does not make sense.
- on empty patches behaves like zero gradient.
- does not do 2D correctly, creates non-flat iso surface.
- on processor boundaries might two overlapping (identical) triangles
(one from either side)
The handling on coupled patches is a bit complex. All fields
(values and coordinates) get rewritten so
- empty patches get zerogradient (value) and facecentre (coordinates)
- separated processor patch faces get interpolate (value) and facecentre
(coordinates). (this is already the default for cyclics)
- non-separated processor patch faces keep opposite value and cell centre
Now the triangle generation on non-separated processor patch faces
can use the neighbouring value. Any separated processor face or cyclic
face gets handled just like any boundary face.
SourceFiles
isoSurfacePoint.C
isoSurfacePointTemplates.C
\*---------------------------------------------------------------------------*/
#ifndef Foam_isoSurfacePoint_H
#define Foam_isoSurfacePoint_H
#include "bitSet.H"
#include "volFields.H"
#include "slicedVolFields.H"
#include "isoSurfaceBase.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward Declarations
class plane;
class treeBoundBox;
class triSurface;
/*---------------------------------------------------------------------------*\
Class isoSurfacePoint Declaration
\*---------------------------------------------------------------------------*/
class isoSurfacePoint
:
public isoSurfaceBase
{
// Private Data
//- Cell values.
//- Input volScalarField with separated coupled patches rewritten
autoPtr cValsPtr_;
//- When to merge points
const scalar mergeDistance_;
//- Whether face might be cut
List faceCutType_;
//- Whether cell might be cut
List cellCutType_;
//- Estimated number of cut cells
label nCutCells_;
//- For every unmerged triangle point the point in the triSurface
labelList triPointMergeMap_;
//- triSurface points that have weighted interpolation
DynamicList