Clean up of deprecated polyhedral AMR classes:
1. dynamicRefinePolyFvMesh class (replaced by dynamicPolyRefinementFvMesh) 2. polyRef class (replaced by polyhedralRefinement polyMesh modifier) 3. polyRefinementHistory (not required anymore)
This commit is contained in:
parent
e1523d07ac
commit
7459da3a36
10 changed files with 58 additions and 9153 deletions
|
@ -10,7 +10,6 @@ dynamicMotionSolverFvMesh/dynamicMotionSolverFvMesh.C
|
||||||
subsetMotionSolverFvMesh/subsetMotionSolverFvMesh.C
|
subsetMotionSolverFvMesh/subsetMotionSolverFvMesh.C
|
||||||
dynamicInkJetFvMesh/dynamicInkJetFvMesh.C
|
dynamicInkJetFvMesh/dynamicInkJetFvMesh.C
|
||||||
dynamicRefineFvMesh/dynamicRefineFvMesh.C
|
dynamicRefineFvMesh/dynamicRefineFvMesh.C
|
||||||
dynamicRefinePolyFvMesh/dynamicRefinePolyFvMesh.C
|
|
||||||
|
|
||||||
mixerGgiFvMesh/mixerGgiFvMesh.C
|
mixerGgiFvMesh/mixerGgiFvMesh.C
|
||||||
turboFvMesh/turboFvMesh.C
|
turboFvMesh/turboFvMesh.C
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
/*--------------------------------*- C++ -*----------------------------------*\
|
|
||||||
| ========= | |
|
|
||||||
| \\ / F ield | foam-extend: Open Source CFD |
|
|
||||||
| \\ / O peration | Version: 4.0 |
|
|
||||||
| \\ / A nd | Web: http://www.foam-extend.org |
|
|
||||||
| \\/ M anipulation | |
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
FoamFile
|
|
||||||
{
|
|
||||||
version 2.0;
|
|
||||||
format ascii;
|
|
||||||
class dictionary;
|
|
||||||
object dynamicMeshDict;
|
|
||||||
}
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
dynamicFvMesh dynamicRefinePolyFvMesh;
|
|
||||||
|
|
||||||
// Refinement
|
|
||||||
dynamicRefineFvMeshCoeffs
|
|
||||||
{
|
|
||||||
// Refine every refineInterval timesteps
|
|
||||||
refineInterval 3;
|
|
||||||
|
|
||||||
// Maximum refinement level (starts from 0)
|
|
||||||
maxRefinement 2;
|
|
||||||
|
|
||||||
// Maximum cell limit (approximate)
|
|
||||||
maxCells 1000000;
|
|
||||||
|
|
||||||
// volScalarField to base refinement on
|
|
||||||
field gamma;
|
|
||||||
|
|
||||||
// Which cells to un/refine: based on point values (simple averaging).
|
|
||||||
// - refine pointCells of point value inbetween minLevel..maxLevel
|
|
||||||
// - unrefine pointCells that are within nBufferLayers of points marked
|
|
||||||
// for refinement.
|
|
||||||
minLevel 0.01;
|
|
||||||
maxLevel 0.99;
|
|
||||||
nBufferLayers 1;
|
|
||||||
|
|
||||||
// Newly introduced patch points optionally get projected onto a surface
|
|
||||||
//projectSurfaces ("fixedWalls4.stl");
|
|
||||||
//projectPatches (fixedWalls);
|
|
||||||
// Maximum project distance
|
|
||||||
//projectDistance 1;
|
|
||||||
|
|
||||||
// Fluxes to adapt. For newly created faces or split faces the flux
|
|
||||||
// gets estimated from an interpolated volVectorField ('velocity')
|
|
||||||
// First is name of the flux to adapt, second is velocity that will
|
|
||||||
// be interpolated and inner-producted with the face area vector.
|
|
||||||
correctFluxes ((phi U));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,220 +0,0 @@
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | foam-extend: Open Source CFD
|
|
||||||
\\ / O peration | Version: 4.0
|
|
||||||
\\ / A nd | Web: http://www.foam-extend.org
|
|
||||||
\\/ M anipulation | For copyright notice see file Copyright
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
License
|
|
||||||
This file is part of foam-extend.
|
|
||||||
|
|
||||||
foam-extend 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.
|
|
||||||
|
|
||||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Class
|
|
||||||
Foam::dynamicRefinePolyFvMesh
|
|
||||||
|
|
||||||
Description
|
|
||||||
A fvMesh with built-in refinement of arbitrary polyhedral cells.
|
|
||||||
|
|
||||||
Determines which cells to refine/unrefine and does all in update().
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
dynamicRefinePolyFvMesh.C
|
|
||||||
|
|
||||||
Author
|
|
||||||
Vuko Vukcevic, Wikki Ltd. All rights reserved
|
|
||||||
|
|
||||||
Notes
|
|
||||||
Generalisation of dynamicRefineMesh for polyhedral cells
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef dynamicRefinePolyFvMesh_H
|
|
||||||
#define dynamicRefinePolyFvMesh_H
|
|
||||||
|
|
||||||
#include "dynamicFvMesh.H"
|
|
||||||
#include "polyRef.H"
|
|
||||||
#include "PackedBoolList.H"
|
|
||||||
#include "Switch.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Class dynamicRefinePolyFvMesh Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
class dynamicRefinePolyFvMesh
|
|
||||||
:
|
|
||||||
public dynamicFvMesh
|
|
||||||
{
|
|
||||||
|
|
||||||
// Private data
|
|
||||||
|
|
||||||
// Helper variables to enable switching between a single and multiple
|
|
||||||
// mesh motion updates within a time step (if update() is called more
|
|
||||||
// than once in a single time step)
|
|
||||||
|
|
||||||
//- Switch for single motion update (true by default)
|
|
||||||
Switch singleMotionUpdate_;
|
|
||||||
|
|
||||||
//- Helper varaible: current time index
|
|
||||||
label curTimeIndex_;
|
|
||||||
|
|
||||||
//- Switch whether to use point based refinement (ensures 4:1 point
|
|
||||||
// consistency, along with the 2:1 face consistency
|
|
||||||
// consistency). Set based on max refinement level and user input
|
|
||||||
Switch pointBasedRefinement_;
|
|
||||||
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
//- Mesh cutting engine
|
|
||||||
polyRef meshCutter_;
|
|
||||||
|
|
||||||
//- Dump cellLevel for postprocessing
|
|
||||||
Switch dumpLevel_;
|
|
||||||
|
|
||||||
//- Fluxes to map
|
|
||||||
List<Pair<word> > correctFluxes_;
|
|
||||||
|
|
||||||
//- Number of refinement/unrefinement steps done so far.
|
|
||||||
label nRefinementIterations_;
|
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- Count set/unset elements in packedlist.
|
|
||||||
static label count(const PackedBoolList&, const unsigned int);
|
|
||||||
|
|
||||||
//- Read the projection parameters from dictionary
|
|
||||||
void readDict();
|
|
||||||
|
|
||||||
|
|
||||||
//- Refine cells. Update mesh and fields.
|
|
||||||
autoPtr<mapPolyMesh> refine(const labelList&);
|
|
||||||
|
|
||||||
//- Unrefine cells. Gets passed in centre points of cells to combine.
|
|
||||||
autoPtr<mapPolyMesh> unrefine(const labelList&);
|
|
||||||
|
|
||||||
|
|
||||||
// Selection of cells to un/refine
|
|
||||||
|
|
||||||
//- Get per cell max of connected point
|
|
||||||
scalarField maxPointField(const scalarField&) const;
|
|
||||||
|
|
||||||
//- Get point min of connected cell
|
|
||||||
scalarField minCellField(const volScalarField&) const;
|
|
||||||
|
|
||||||
//- Simple (non-parallel) interpolation by averaging
|
|
||||||
scalarField cellToPoint(const scalarField& vFld) const;
|
|
||||||
|
|
||||||
//- Calculate error (= -1 by default or distance from inbetween
|
|
||||||
// levels
|
|
||||||
scalarField error
|
|
||||||
(
|
|
||||||
const scalarField& fld,
|
|
||||||
const scalar minLevel,
|
|
||||||
const scalar maxLevel
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Select candidate cells for refinement
|
|
||||||
virtual void selectRefineCandidates
|
|
||||||
(
|
|
||||||
const scalar lowerRefineLevel,
|
|
||||||
const scalar upperRefineLevel,
|
|
||||||
const scalarField& vFld,
|
|
||||||
PackedBoolList& candidateCell
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Subset candidate cells for refinement
|
|
||||||
virtual labelList selectRefineCells
|
|
||||||
(
|
|
||||||
const label maxCells,
|
|
||||||
const label maxRefinement,
|
|
||||||
const PackedBoolList& candidateCell
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Select points that can be unrefined
|
|
||||||
virtual labelList selectUnrefinePoints
|
|
||||||
(
|
|
||||||
const scalar unrefineLevel,
|
|
||||||
const PackedBoolList& markedCell,
|
|
||||||
const scalarField& pFld
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Extend markedCell with cell-face-cell
|
|
||||||
void extendMarkedCells(PackedBoolList& markedCell) const;
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
|
||||||
dynamicRefinePolyFvMesh(const dynamicRefinePolyFvMesh&);
|
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
|
||||||
void operator=(const dynamicRefinePolyFvMesh&);
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
//- Runtime type information
|
|
||||||
TypeName("dynamicRefinePolyFvMesh");
|
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
|
|
||||||
//- Construct from IOobject
|
|
||||||
explicit dynamicRefinePolyFvMesh(const IOobject& io);
|
|
||||||
|
|
||||||
|
|
||||||
// Destructor
|
|
||||||
|
|
||||||
virtual ~dynamicRefinePolyFvMesh();
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
//- Direct access to the refinement engine
|
|
||||||
const polyRef& meshCutter() const
|
|
||||||
{
|
|
||||||
return meshCutter_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Update the mesh for both mesh motion and topology change
|
|
||||||
virtual bool update();
|
|
||||||
|
|
||||||
|
|
||||||
// Writing
|
|
||||||
|
|
||||||
//- Write using given format, version and compression
|
|
||||||
virtual bool writeObject
|
|
||||||
(
|
|
||||||
IOstream::streamFormat fmt,
|
|
||||||
IOstream::versionNumber ver,
|
|
||||||
IOstream::compressionType cmp
|
|
||||||
) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
|
@ -55,7 +55,6 @@ motionSolver/motionSolver.C
|
||||||
refinementData/refinementData.C
|
refinementData/refinementData.C
|
||||||
refinementData/refinementDistanceData.C
|
refinementData/refinementDistanceData.C
|
||||||
refinementData/refinementHistory.C
|
refinementData/refinementHistory.C
|
||||||
refinementData/polyRefinementHistory.C
|
|
||||||
|
|
||||||
directTopoChange/directTopoChange/directTopoChange.C
|
directTopoChange/directTopoChange/directTopoChange.C
|
||||||
|
|
||||||
|
@ -64,7 +63,6 @@ $(directActions)/addPatchCellLayer.C
|
||||||
$(directActions)/edgeCollapser.C
|
$(directActions)/edgeCollapser.C
|
||||||
$(directActions)/faceCollapser.C
|
$(directActions)/faceCollapser.C
|
||||||
$(directActions)/hexRef8.C
|
$(directActions)/hexRef8.C
|
||||||
$(directActions)/polyRef.C
|
|
||||||
$(directActions)/removeCells.C
|
$(directActions)/removeCells.C
|
||||||
$(directActions)/removeFaces.C
|
$(directActions)/removeFaces.C
|
||||||
$(directActions)/removePoints.C
|
$(directActions)/removePoints.C
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,583 +0,0 @@
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | foam-extend: Open Source CFD
|
|
||||||
\\ / O peration | Version: 4.0
|
|
||||||
\\ / A nd | Web: http://www.foam-extend.org
|
|
||||||
\\/ M anipulation | For copyright notice see file Copyright
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
License
|
|
||||||
This file is part of foam-extend.
|
|
||||||
|
|
||||||
foam-extend 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.
|
|
||||||
|
|
||||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Class
|
|
||||||
Foam::polyRef
|
|
||||||
|
|
||||||
Description
|
|
||||||
Refinement of (split) polyhedra using directTopoChange.
|
|
||||||
|
|
||||||
Each polyhedron is split by the following procedure:
|
|
||||||
1. Adding points at the edge centre, face centre and cell centre,
|
|
||||||
2. Adding cells n cells where n is the number of points of the cell,
|
|
||||||
3. Splitting each face into multiple faces going from:
|
|
||||||
existing corner point -> new edge centre point -> new face centre
|
|
||||||
point -> other new edge centre point (sharing the same corner point)
|
|
||||||
4. Adding internal faces going from:
|
|
||||||
new edge centre point -> new face centre point -> new cell centre
|
|
||||||
point -> other new face centre point (sharing the same edge)
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
polyRef.C
|
|
||||||
|
|
||||||
Author
|
|
||||||
Vuko Vukcevic, Wikki Ltd. All rights reserved.
|
|
||||||
|
|
||||||
Notes
|
|
||||||
Generalisation of hexRef8 for polyhedral cells
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef polyRef_H
|
|
||||||
#define polyRef_H
|
|
||||||
|
|
||||||
#include "labelIOList.H"
|
|
||||||
#include "face.H"
|
|
||||||
#include "HashSet.H"
|
|
||||||
#include "DynamicList.H"
|
|
||||||
#include "primitivePatch.H"
|
|
||||||
#include "removeFaces.H"
|
|
||||||
#include "polyRefinementHistory.H"
|
|
||||||
#include "PackedList.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// Forward declaration of classes
|
|
||||||
class polyMesh;
|
|
||||||
class polyPatch;
|
|
||||||
class directTopoChange;
|
|
||||||
class mapPolyMesh;
|
|
||||||
class mapDistributePolyMesh;
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Class polyRef Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
class polyRef
|
|
||||||
{
|
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- Reference to underlying mesh
|
|
||||||
const polyMesh& mesh_;
|
|
||||||
|
|
||||||
//- Per cell the refinement level
|
|
||||||
labelIOList cellLevel_;
|
|
||||||
|
|
||||||
//- Per point the refinement level
|
|
||||||
labelIOList pointLevel_;
|
|
||||||
|
|
||||||
//- Typical edge length between unrefined points
|
|
||||||
const scalar level0Edge_;
|
|
||||||
|
|
||||||
//- Refinement history
|
|
||||||
polyRefinementHistory history_;
|
|
||||||
|
|
||||||
//- Face remover engine
|
|
||||||
removeFaces faceRemover_;
|
|
||||||
|
|
||||||
//- Level of saved points
|
|
||||||
Map<label> savedPointLevel_;
|
|
||||||
|
|
||||||
//- Level of saved cells
|
|
||||||
Map<label> savedCellLevel_;
|
|
||||||
|
|
||||||
|
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
//- Reorder according to map
|
|
||||||
static void reorder
|
|
||||||
(
|
|
||||||
const labelList& map,
|
|
||||||
const label len,
|
|
||||||
const label null,
|
|
||||||
labelList& elems
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Get patch and zone info
|
|
||||||
void getFaceInfo
|
|
||||||
(
|
|
||||||
const label faceI,
|
|
||||||
label& patchID,
|
|
||||||
label& zoneID,
|
|
||||||
label& zoneFlip
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Adds a face on top of existing faceI. Reverses if nessecary
|
|
||||||
label addFace
|
|
||||||
(
|
|
||||||
directTopoChange& meshMod,
|
|
||||||
const label faceI,
|
|
||||||
const face& newFace,
|
|
||||||
const label own,
|
|
||||||
const label nei
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Adds internal face from point. No checks on reversal
|
|
||||||
label addInternalFace
|
|
||||||
(
|
|
||||||
directTopoChange& meshMod,
|
|
||||||
const label meshFaceI,
|
|
||||||
const label meshPointI,
|
|
||||||
const face& newFace,
|
|
||||||
const label own,
|
|
||||||
const label nei
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Modifies existing faceI for either new owner/neighbour or new face
|
|
||||||
// points. Reverses if nessecary
|
|
||||||
void modFace
|
|
||||||
(
|
|
||||||
directTopoChange& meshMod,
|
|
||||||
const label faceI,
|
|
||||||
const face& newFace,
|
|
||||||
const label own,
|
|
||||||
const label nei
|
|
||||||
) const;
|
|
||||||
|
|
||||||
scalar getLevel0EdgeLength() const;
|
|
||||||
|
|
||||||
//- Get cell added to point of cellI (if any)
|
|
||||||
label getAnchorCell
|
|
||||||
(
|
|
||||||
const labelListList& cellAnchorPoints,
|
|
||||||
const labelListList& cellAddedCells,
|
|
||||||
const label cellI,
|
|
||||||
const label faceI,
|
|
||||||
const label pointI
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Get new owner and neighbour (in unspecified order) of pointI
|
|
||||||
// on faceI
|
|
||||||
void getFaceNeighbours
|
|
||||||
(
|
|
||||||
const labelListList& cellAnchorPoints,
|
|
||||||
const labelListList& cellAddedCells,
|
|
||||||
const label faceI,
|
|
||||||
const label pointI,
|
|
||||||
|
|
||||||
label& own,
|
|
||||||
label& nei
|
|
||||||
) const;
|
|
||||||
|
|
||||||
|
|
||||||
//- Get index of point with minimum pointlevel
|
|
||||||
label findMinLevel(const labelList& f) const;
|
|
||||||
|
|
||||||
//- Get index of point with maximum pointlevel
|
|
||||||
label findMaxLevel(const labelList& f) const;
|
|
||||||
|
|
||||||
//- Count number of vertices <= anchorLevel
|
|
||||||
label countAnchors(const labelList&, const label) const;
|
|
||||||
|
|
||||||
//- Find index of point with wantedLevel, starting from fp
|
|
||||||
label findLevel
|
|
||||||
(
|
|
||||||
const face& f,
|
|
||||||
const label startFp,
|
|
||||||
const bool searchForward,
|
|
||||||
const label wantedLevel
|
|
||||||
) const;
|
|
||||||
|
|
||||||
////- Print levels of list of points.
|
|
||||||
//void printLevels(Ostream&, const labelList&) const;
|
|
||||||
|
|
||||||
//- debug: check orientation of added internal face
|
|
||||||
static void checkInternalOrientation
|
|
||||||
(
|
|
||||||
directTopoChange& meshMod,
|
|
||||||
const label cellI,
|
|
||||||
const label faceI,
|
|
||||||
const point& ownPt,
|
|
||||||
const point& neiPt,
|
|
||||||
const face& newFace
|
|
||||||
);
|
|
||||||
|
|
||||||
//- debug: check orientation of new boundary face
|
|
||||||
static void checkBoundaryOrientation
|
|
||||||
(
|
|
||||||
directTopoChange& meshMod,
|
|
||||||
const label cellI,
|
|
||||||
const label faceI,
|
|
||||||
const point& ownPt,
|
|
||||||
const point& boundaryPt,
|
|
||||||
const face& newFace
|
|
||||||
);
|
|
||||||
|
|
||||||
//- If p0 and p1 are existing vertices check if edge is split and insert
|
|
||||||
// splitPoint
|
|
||||||
void insertEdgeSplit
|
|
||||||
(
|
|
||||||
const labelList& edgeMidPoint,
|
|
||||||
const label p0,
|
|
||||||
const label p1,
|
|
||||||
dynamicLabelList& verts
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Store in maps correspondence from midpoint to anchors and faces
|
|
||||||
label storeMidPointInfo
|
|
||||||
(
|
|
||||||
const labelListList& cellAnchorPoints,
|
|
||||||
const labelListList& cellAddedCells,
|
|
||||||
const labelList& cellMidPoint,
|
|
||||||
const labelList& edgeMidPoint,
|
|
||||||
const label cellI,
|
|
||||||
const label faceI,
|
|
||||||
const bool faceOrder,
|
|
||||||
const label midPointI,
|
|
||||||
const label anchorPointI,
|
|
||||||
const label faceMidPointI,
|
|
||||||
|
|
||||||
Map<edge>& midPointToAnchors,
|
|
||||||
Map<edge>& midPointToFaceMids,
|
|
||||||
directTopoChange& meshMod
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Create all internal faces from an unsplit face
|
|
||||||
void createInternalFromSplitFace
|
|
||||||
(
|
|
||||||
const labelListList& cellAnchorPoints,
|
|
||||||
const labelListList& cellAddedCells,
|
|
||||||
const labelList& cellMidPoint,
|
|
||||||
const labelList& faceMidPoint,
|
|
||||||
const labelList& edgeMidPoint,
|
|
||||||
const label cellI,
|
|
||||||
const label faceI,
|
|
||||||
|
|
||||||
Map<edge>& midPointToAnchors,
|
|
||||||
Map<edge>& midPointToFaceMids,
|
|
||||||
directTopoChange& meshMod,
|
|
||||||
label& nFacesAdded
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Create all internal faces to split cellI into n cells where n is the
|
|
||||||
// number of cell points
|
|
||||||
void createInternalFaces
|
|
||||||
(
|
|
||||||
const labelListList& cellAnchorPoints,
|
|
||||||
const labelListList& cellAddedCells,
|
|
||||||
const labelList& cellMidPoint,
|
|
||||||
const labelList& faceMidPoint,
|
|
||||||
const labelList& faceAnchorLevel,
|
|
||||||
const labelList& edgeMidPoint,
|
|
||||||
const label cellI,
|
|
||||||
directTopoChange& meshMod
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Store vertices from startFp upto face split point.
|
|
||||||
// Used when splitting face into n faces where n is the number of
|
|
||||||
// points in a face (or number of edges)
|
|
||||||
void walkFaceToMid
|
|
||||||
(
|
|
||||||
const labelList& edgeMidPoint,
|
|
||||||
const label cLevel,
|
|
||||||
const label faceI,
|
|
||||||
const label startFp,
|
|
||||||
dynamicLabelList& faceVerts
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Same as walkFaceToMid but now walk back
|
|
||||||
void walkFaceFromMid
|
|
||||||
(
|
|
||||||
const labelList& edgeMidPoint,
|
|
||||||
const label cLevel,
|
|
||||||
const label faceI,
|
|
||||||
const label startFp,
|
|
||||||
dynamicLabelList& faceVerts
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Updates refineCell such that a face consistent 2:1 refinement is
|
|
||||||
// obtained. Returns local number of cells changed
|
|
||||||
label faceConsistentRefinement
|
|
||||||
(
|
|
||||||
const bool maxSet,
|
|
||||||
PackedList<1>& refineCell
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Updates refineCell such that a point consistent 4:1 refinement is
|
|
||||||
// obtained. Returns local number of cells changed
|
|
||||||
label pointConsistentRefinement
|
|
||||||
(
|
|
||||||
PackedList<1>& refineCell
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Updates unrefineCell such that a face consistent 2:1 unrefinement is
|
|
||||||
// obtained. Returns local number of cells changed
|
|
||||||
label faceConsistentUnrefinement
|
|
||||||
(
|
|
||||||
const bool maxSet,
|
|
||||||
PackedList<1>& unrefineCell
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Updates unrefineCell such that a point consistent 4:1 unrefinement
|
|
||||||
// is obtained. Returns local number of cells changed
|
|
||||||
label pointConsistentUnrefinement
|
|
||||||
(
|
|
||||||
const PackedList<1>& unrefinePoints,
|
|
||||||
PackedList<1>& unrefineCell
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Check wanted refinement for 2:1 consistency
|
|
||||||
void checkWantedRefinementLevels(const labelList&) const;
|
|
||||||
|
|
||||||
|
|
||||||
// Copy control
|
|
||||||
|
|
||||||
//- Disallow default bitwise copy construct
|
|
||||||
polyRef(const polyRef&);
|
|
||||||
|
|
||||||
//- Disallow default bitwise assignment
|
|
||||||
void operator=(const polyRef&);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
//- Runtime type information
|
|
||||||
ClassName("polyRef");
|
|
||||||
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
|
|
||||||
//- Construct from mesh, read_if_present refinement data
|
|
||||||
// (from write below)
|
|
||||||
polyRef(const polyMesh& mesh);
|
|
||||||
|
|
||||||
//- Construct from mesh and un/refinement data
|
|
||||||
polyRef
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const labelList& cellLevel,
|
|
||||||
const labelList& pointLevel,
|
|
||||||
const polyRefinementHistory& history
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Construct from mesh and refinement data.
|
|
||||||
polyRef
|
|
||||||
(
|
|
||||||
const polyMesh& mesh,
|
|
||||||
const labelList& cellLevel,
|
|
||||||
const labelList& pointLevel
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
// Access
|
|
||||||
|
|
||||||
const labelIOList& cellLevel() const
|
|
||||||
{
|
|
||||||
return cellLevel_;
|
|
||||||
}
|
|
||||||
|
|
||||||
const labelIOList& pointLevel() const
|
|
||||||
{
|
|
||||||
return pointLevel_;
|
|
||||||
}
|
|
||||||
|
|
||||||
const polyRefinementHistory& history() const
|
|
||||||
{
|
|
||||||
return history_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Typical edge length between unrefined points
|
|
||||||
scalar level0EdgeLength() const
|
|
||||||
{
|
|
||||||
return level0Edge_;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Refinement
|
|
||||||
|
|
||||||
//- Gets level such that the face has n points <= level, where n is
|
|
||||||
// the number of points (or edges) for a face.
|
|
||||||
label getAnchorLevel(const label faceI) const;
|
|
||||||
|
|
||||||
//- Helper: get points of a cell without using cellPoints addressing
|
|
||||||
labelList cellPoints(const label cellI) const;
|
|
||||||
|
|
||||||
//- Given valid mesh and current cell level and proposed
|
|
||||||
// cells to refine calculate any clashes (due to 2:1) and return
|
|
||||||
// ok list of cells to refine.
|
|
||||||
// Either adds cells to refine to set (maxSet = true) or
|
|
||||||
// removes cells to refine (maxSet = false)
|
|
||||||
Xfer<labelList> consistentRefinement
|
|
||||||
(
|
|
||||||
const labelList& cellsToRefine,
|
|
||||||
const bool maxSet,
|
|
||||||
const bool pointBasedRefinement
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Like consistentRefinement but slower:
|
|
||||||
// - specify number of cells between consecutive refinement levels
|
|
||||||
// (consistentRefinement equivalent to 1)
|
|
||||||
// - specify max level difference between point-connected cells.
|
|
||||||
// (-1 to disable). Note that with normal 2:1 limitation
|
|
||||||
// (maxFaceDiff=1) there can be 8:1 size difference across point
|
|
||||||
// connected cells so maxPointDiff allows you to make that less.
|
|
||||||
// cellsToRefine : cells we're thinking about refining. It will
|
|
||||||
// extend this set. All refinement levels will be
|
|
||||||
// at least maxFaceDiff layers thick.
|
|
||||||
// facesToCheck : additional faces where to implement the
|
|
||||||
// maxFaceDiff thickness (usually only boundary
|
|
||||||
// faces)
|
|
||||||
Xfer<labelList> consistentSlowRefinement
|
|
||||||
(
|
|
||||||
const label maxFaceDiff,
|
|
||||||
const labelList& cellsToRefine,
|
|
||||||
const labelList& facesToCheck,
|
|
||||||
const label maxPointDiff,
|
|
||||||
const labelList& pointsToCheck
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Like consistentSlowRefinement but uses different meshWave
|
|
||||||
// (proper distance instead of toplogical count). No point checks
|
|
||||||
// yet
|
|
||||||
Xfer<labelList> consistentSlowRefinement2
|
|
||||||
(
|
|
||||||
const label maxFaceDiff,
|
|
||||||
const labelList& cellsToRefine,
|
|
||||||
const labelList& facesToCheck
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Insert refinement. All selected cells will be split into n cells
|
|
||||||
// where n is the number of points per cell.
|
|
||||||
// Returns per element in cells the n cells they were split into.
|
|
||||||
// Guarantees that the 0th element is the original cell label.
|
|
||||||
// Mapping:
|
|
||||||
// -split cells: n new ones get added from original
|
|
||||||
// -split faces: original gets modified; n - 1 new ones get added
|
|
||||||
// from original
|
|
||||||
// -added internal faces: added from original cell face (if
|
|
||||||
// that was internal) or created out-of-nothing (so will not
|
|
||||||
// get mapped!). Note: could make this inflate from point but
|
|
||||||
// that will allocate interpolation.
|
|
||||||
// -points added to split edge: added from edge start()
|
|
||||||
// -midpoints added: added from cellPoints[0].
|
|
||||||
labelListList setRefinement
|
|
||||||
(
|
|
||||||
const labelList& cells,
|
|
||||||
directTopoChange&
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Update local numbering for changed mesh
|
|
||||||
void updateMesh(const mapPolyMesh&);
|
|
||||||
|
|
||||||
|
|
||||||
// Restoring : is where other processes delete and reinsert data.
|
|
||||||
// These callbacks allow this to restore the cellLevel
|
|
||||||
// and pointLevel for reintroduced points.
|
|
||||||
// Is not related to undoing my refinement
|
|
||||||
|
|
||||||
//- Signal points/face/cells for which to store data
|
|
||||||
void storeData
|
|
||||||
(
|
|
||||||
const labelList& pointsToStore,
|
|
||||||
const labelList& facesToStore,
|
|
||||||
const labelList& cellsToStore
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Update local numbering + undo
|
|
||||||
// Data to restore given as new pointlabel + stored pointlabel
|
|
||||||
// (i.e. what was in pointsToStore)
|
|
||||||
void updateMesh
|
|
||||||
(
|
|
||||||
const mapPolyMesh&,
|
|
||||||
const Map<label>& pointsToRestore,
|
|
||||||
const Map<label>& facesToRestore,
|
|
||||||
const Map<label>& cellsToRestore
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
//- Update local numbering for subsetted mesh.
|
|
||||||
// Gets new-to-old maps. Not compatible with unrefinement.
|
|
||||||
void subset
|
|
||||||
(
|
|
||||||
const labelList& pointMap,
|
|
||||||
const labelList& faceMap,
|
|
||||||
const labelList& cellMap
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Update local numbering for mesh redistribution
|
|
||||||
void distribute(const mapDistributePolyMesh&);
|
|
||||||
|
|
||||||
//- Debug: Check coupled mesh for correctness
|
|
||||||
void checkMesh() const;
|
|
||||||
|
|
||||||
//- Debug: Check 2:1 consistency across faces.
|
|
||||||
// maxPointDiff==-1 : only check 2:1 across faces
|
|
||||||
// maxPointDiff!=-1 : check point-connected cells.
|
|
||||||
void checkRefinementLevels
|
|
||||||
(
|
|
||||||
const label maxPointDiff,
|
|
||||||
const labelList& pointsToCheck
|
|
||||||
) const;
|
|
||||||
|
|
||||||
|
|
||||||
// Unrefinement (undoing refinement, not arbitrary coarsening)
|
|
||||||
|
|
||||||
//- Return the points at the centre of top-level split cells
|
|
||||||
// that can be unsplit.
|
|
||||||
labelList getSplitPoints() const;
|
|
||||||
|
|
||||||
//- Given proposed splitPoints to unrefine according to calculate
|
|
||||||
// any clashes (due to 2:1) and return ok list of points to
|
|
||||||
// unrefine. Either adds points to refine to set (maxSet = true)
|
|
||||||
// or removes points to refine (maxSet = false)
|
|
||||||
labelList consistentUnrefinement
|
|
||||||
(
|
|
||||||
const labelList& pointsToUnrefine,
|
|
||||||
const bool maxSet,
|
|
||||||
const bool pointBasedUnrefinement
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Remove some refinement. Needs to be supplied output of
|
|
||||||
// consistentUnrefinement. Only call if undoable set.
|
|
||||||
// All n pointCells of a split point will be combined into
|
|
||||||
// the lowest numbered cell of those n.
|
|
||||||
void setUnrefinement
|
|
||||||
(
|
|
||||||
const labelList& splitPointLabels,
|
|
||||||
directTopoChange&
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// Write
|
|
||||||
|
|
||||||
// Set instance for mesh files
|
|
||||||
void setInstance(const fileName& inst);
|
|
||||||
|
|
||||||
//- Force writing refinement+history to polyMesh directory.
|
|
||||||
bool write() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,381 +0,0 @@
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | foam-extend: Open Source CFD
|
|
||||||
\\ / O peration | Version: 4.0
|
|
||||||
\\ / A nd | Web: http://www.foam-extend.org
|
|
||||||
\\/ M anipulation | For copyright notice see file Copyright
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
License
|
|
||||||
This file is part of foam-extend.
|
|
||||||
|
|
||||||
foam-extend 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.
|
|
||||||
|
|
||||||
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Class
|
|
||||||
Foam::polyRefinementHistory
|
|
||||||
|
|
||||||
Description
|
|
||||||
All refinement history. Used in unrefinement.
|
|
||||||
|
|
||||||
- visibleCells: valid for the current mesh and contains per cell -1
|
|
||||||
(cell unrefined) or an index into splitCells_.
|
|
||||||
- splitCells: for every split contains the parent (also index into
|
|
||||||
splitCells) and optionally a subsplit as n indices into splitCells, where
|
|
||||||
n is the number of points of a cell. Note that the numbers in splitCells
|
|
||||||
are not cell labels, they are purely indices into splitCells.
|
|
||||||
|
|
||||||
E.g. 2 cells, cell 1 gets refined so end up with 9 cells:
|
|
||||||
@verbatim
|
|
||||||
// splitCells
|
|
||||||
9
|
|
||||||
(
|
|
||||||
-1 (1 2 3 4 5 6 7 8)
|
|
||||||
0 0()
|
|
||||||
0 0()
|
|
||||||
0 0()
|
|
||||||
0 0()
|
|
||||||
0 0()
|
|
||||||
0 0()
|
|
||||||
0 0()
|
|
||||||
0 0()
|
|
||||||
)
|
|
||||||
|
|
||||||
// visibleCells
|
|
||||||
9(-1 1 2 3 4 5 6 7 8)
|
|
||||||
@endverbatim
|
|
||||||
|
|
||||||
|
|
||||||
So cell0 (visibleCells=-1) is unrefined.
|
|
||||||
Cells 1-8 have all valid splitCells entries which are:
|
|
||||||
- parent:0
|
|
||||||
- subsplits:0()
|
|
||||||
|
|
||||||
The parent 0 refers back to the splitcell entries.
|
|
||||||
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
polyRefinementHistory.C
|
|
||||||
|
|
||||||
<<<<<<< 7cd6e2357adfdf4cf68d7a6c8b8131585a0c68b7
|
|
||||||
Author
|
|
||||||
Vuko Vukcevic, Wikki Ltd. All rights reserved
|
|
||||||
|
|
||||||
Notes
|
|
||||||
Generalisation of refinementHistory for polyhedral cells
|
|
||||||
|
|
||||||
=======
|
|
||||||
>>>>>>> Created polyRefinementHistory
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef polyRefinementHistory_H
|
|
||||||
#define polyRefinementHistory_H
|
|
||||||
|
|
||||||
#include "DynamicList.H"
|
|
||||||
#include "dynamicLabelList.H"
|
|
||||||
#include "labelList.H"
|
|
||||||
#include "FixedList.H"
|
|
||||||
#include "SLList.H"
|
|
||||||
#include "autoPtr.H"
|
|
||||||
#include "regIOobject.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
|
|
||||||
// Forward declaration of classes
|
|
||||||
class mapPolyMesh;
|
|
||||||
class mapDistributePolyMesh;
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Class polyRefinementHistory Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
class polyRefinementHistory
|
|
||||||
:
|
|
||||||
public regIOobject
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
class splitPolyCell
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
// Index to original splitCell this cell was refined off from
|
|
||||||
// -1: top level cell
|
|
||||||
// -2: free splitCell (so should also be in freeSplitCells_)
|
|
||||||
label parent_;
|
|
||||||
|
|
||||||
//- cells this cell was refined into
|
|
||||||
autoPtr<labelList> addedCellsPtr_;
|
|
||||||
|
|
||||||
//- Construct null (parent = -1)
|
|
||||||
splitPolyCell();
|
|
||||||
|
|
||||||
//- Construct from parent
|
|
||||||
splitPolyCell(const label parent);
|
|
||||||
|
|
||||||
//- Construct from Istream
|
|
||||||
splitPolyCell(Istream& is);
|
|
||||||
|
|
||||||
//- Construct as deep copy
|
|
||||||
splitPolyCell(const splitPolyCell&);
|
|
||||||
|
|
||||||
//- Copy operator since autoPtr otherwise 'steals' storage.
|
|
||||||
void operator=(const splitPolyCell& s)
|
|
||||||
{
|
|
||||||
// Check for assignment to self
|
|
||||||
if (this == &s)
|
|
||||||
{
|
|
||||||
FatalErrorIn
|
|
||||||
(
|
|
||||||
"splitPolyCell::operator=(const Foam::splitPolyCell&)"
|
|
||||||
) << "Attempted assignment to self"
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
|
|
||||||
parent_ = s.parent_;
|
|
||||||
|
|
||||||
addedCellsPtr_.reset
|
|
||||||
(
|
|
||||||
s.addedCellsPtr_.valid()
|
|
||||||
? new labelList(s.addedCellsPtr_())
|
|
||||||
: NULL
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator==(const splitPolyCell& s) const
|
|
||||||
{
|
|
||||||
if (addedCellsPtr_.valid() != s.addedCellsPtr_.valid())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if (parent_ != s.parent_)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
else if (addedCellsPtr_.valid())
|
|
||||||
{
|
|
||||||
return addedCellsPtr_() == s.addedCellsPtr_();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator!=(const splitPolyCell& s) const
|
|
||||||
{
|
|
||||||
return !operator==(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
friend Istream& operator>>(Istream&, splitPolyCell&);
|
|
||||||
friend Ostream& operator<<(Ostream&, const splitPolyCell&);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
TypeName("polyRefinementHistory");
|
|
||||||
|
|
||||||
// Private data
|
|
||||||
|
|
||||||
//- Storage for splitCells
|
|
||||||
DynamicList<splitPolyCell> splitCells_;
|
|
||||||
|
|
||||||
//- Unused indices in splitCells
|
|
||||||
dynamicLabelList freeSplitCells_;
|
|
||||||
|
|
||||||
//- Currently visible cells. Indices into splitCells.
|
|
||||||
labelList visibleCells_;
|
|
||||||
|
|
||||||
|
|
||||||
// Private member functions
|
|
||||||
|
|
||||||
//- Debug write
|
|
||||||
static void writeEntry
|
|
||||||
(
|
|
||||||
const List<splitPolyCell>&,
|
|
||||||
const splitPolyCell&
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Debug write
|
|
||||||
static void writeDebug
|
|
||||||
(
|
|
||||||
const labelList&,
|
|
||||||
const List<splitPolyCell>&
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Check consistency of structure, i.e. indices into splitCells_.
|
|
||||||
void checkIndices() const;
|
|
||||||
|
|
||||||
//- Allocate a splitCell. Return index in splitCells_.
|
|
||||||
label allocateSplitCell
|
|
||||||
(
|
|
||||||
const label parent,
|
|
||||||
const label i,
|
|
||||||
const label nCells
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Free a splitCell.
|
|
||||||
void freeSplitCell(const label index);
|
|
||||||
|
|
||||||
//- Mark entry in splitCells. Recursively mark its parent and subs.
|
|
||||||
void markSplit
|
|
||||||
(
|
|
||||||
const label,
|
|
||||||
labelList& oldToNew,
|
|
||||||
DynamicList<splitPolyCell>&
|
|
||||||
) const;
|
|
||||||
|
|
||||||
void countProc
|
|
||||||
(
|
|
||||||
const label index,
|
|
||||||
const label newProcNo,
|
|
||||||
labelList& splitCellProc,
|
|
||||||
labelList& splitCellNum
|
|
||||||
) const;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
|
|
||||||
//- Construct (read) given an IOobject
|
|
||||||
polyRefinementHistory(const IOobject&);
|
|
||||||
|
|
||||||
//- Construct (read) or construct null
|
|
||||||
polyRefinementHistory
|
|
||||||
(
|
|
||||||
const IOobject&,
|
|
||||||
const List<splitPolyCell>& splitCells,
|
|
||||||
const labelList& visibleCells
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Construct (read) or construct from initial number of cells
|
|
||||||
// (all visible)
|
|
||||||
polyRefinementHistory(const IOobject&, const label nCells);
|
|
||||||
|
|
||||||
//- Construct as copy
|
|
||||||
polyRefinementHistory(const IOobject&, const polyRefinementHistory&);
|
|
||||||
|
|
||||||
//- Construct from Istream
|
|
||||||
polyRefinementHistory(const IOobject&, Istream&);
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
//- Per cell in the current mesh (i.e. visible) either -1 (unrefined)
|
|
||||||
// or an index into splitCells.
|
|
||||||
const labelList& visibleCells() const
|
|
||||||
{
|
|
||||||
return visibleCells_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Storage for splitPolyCells.
|
|
||||||
const DynamicList<splitPolyCell>& splitCells() const
|
|
||||||
{
|
|
||||||
return splitCells_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Cache of unused indices in splitCells
|
|
||||||
const dynamicLabelList& freeSplitCells() const
|
|
||||||
{
|
|
||||||
return freeSplitCells_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Is there unrefinement history. Note that this will fall over if
|
|
||||||
// there are 0 cells in the mesh. But this gives problems with
|
|
||||||
// lots of other programs anyway.
|
|
||||||
bool active() const
|
|
||||||
{
|
|
||||||
return visibleCells_.size() > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Get parent of cell
|
|
||||||
label parentIndex(const label cellI) const
|
|
||||||
{
|
|
||||||
label index = visibleCells_[cellI];
|
|
||||||
|
|
||||||
if (index < 0)
|
|
||||||
{
|
|
||||||
FatalErrorIn("polyRefinementHistory::parentIndex(const label)")
|
|
||||||
<< "Cell " << cellI << " is not visible"
|
|
||||||
<< abort(FatalError);
|
|
||||||
}
|
|
||||||
return splitCells_[index].parent_;
|
|
||||||
}
|
|
||||||
|
|
||||||
//- Store splitting of cell into n (number of points for a cell)
|
|
||||||
void storeSplit
|
|
||||||
(
|
|
||||||
const label cellI,
|
|
||||||
const labelList& addedCells
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Store combining n cells into master
|
|
||||||
void combineCells
|
|
||||||
(
|
|
||||||
const label masterCellI,
|
|
||||||
const labelList& combinedCells
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Update numbering for mesh changes
|
|
||||||
void updateMesh(const mapPolyMesh&);
|
|
||||||
|
|
||||||
//- Update numbering for subsetting
|
|
||||||
void subset
|
|
||||||
(
|
|
||||||
const labelList& pointMap,
|
|
||||||
const labelList& faceMap,
|
|
||||||
const labelList& cellMap
|
|
||||||
);
|
|
||||||
|
|
||||||
//- Update local numbering for mesh redistribution.
|
|
||||||
// Can only distribute clusters sent across in one go; cannot
|
|
||||||
// handle parts recombined in multiple passes.
|
|
||||||
void distribute(const mapDistributePolyMesh&);
|
|
||||||
|
|
||||||
//- Compact splitCells_. Removes all freeSplitCells_ elements.
|
|
||||||
void compact();
|
|
||||||
|
|
||||||
//- Extend/shrink storage. additional visibleCells_ elements get
|
|
||||||
// set to -1.
|
|
||||||
void resize(const label nCells);
|
|
||||||
|
|
||||||
//- Debug write
|
|
||||||
void writeDebug() const;
|
|
||||||
|
|
||||||
|
|
||||||
//- ReadData function required for regIOobject read operation
|
|
||||||
virtual bool readData(Istream&);
|
|
||||||
|
|
||||||
//- WriteData function required for regIOobject write operation
|
|
||||||
virtual bool writeData(Ostream&) const;
|
|
||||||
|
|
||||||
|
|
||||||
// IOstream Operators
|
|
||||||
|
|
||||||
friend Istream& operator>>(Istream&, polyRefinementHistory&);
|
|
||||||
friend Ostream& operator<<(Ostream&, const polyRefinementHistory&);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | foam-extend: Open Source CFD |
|
||||||
|
| \\ / O peration | Version: 4.0 |
|
||||||
|
| \\ / A nd | Web: http://www.foam-extend.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "constant";
|
||||||
|
object dynamicMeshDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
dynamicFvMesh dynamicPolyRefinementFvMesh;
|
||||||
|
|
||||||
|
dynamicPolyRefinementFvMeshCoeffs
|
||||||
|
{
|
||||||
|
// Dynamic mesh procedure controls
|
||||||
|
refineInterval 1;
|
||||||
|
|
||||||
|
// Refinement selection criteria
|
||||||
|
refinementSelection
|
||||||
|
{
|
||||||
|
// Refines all cells with 0.001 < alpha < 0.999, otherwise unrefines
|
||||||
|
// previously refined cells
|
||||||
|
type fieldBoundsRefinement;
|
||||||
|
fieldName alpha;
|
||||||
|
lowerBound 0.001;
|
||||||
|
upperBound 0.999;
|
||||||
|
|
||||||
|
// Whether to use cell-point-cell smoothing for selecting refinement
|
||||||
|
// candidates. Off by default
|
||||||
|
cellPointCellSmoothing off;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Polyhedral refinement engine controls
|
||||||
|
active yes;
|
||||||
|
|
||||||
|
// Maximum number of cells to allow (not strictly controlled)
|
||||||
|
maxCells 2000000;
|
||||||
|
|
||||||
|
// Maximum refinement level
|
||||||
|
maxRefinementLevel 3;
|
||||||
|
|
||||||
|
// Number of buffer layers between refinement levels
|
||||||
|
nBufferLayers 1;
|
||||||
|
|
||||||
|
// Whether to use point based consistency check. Needed when one allows more
|
||||||
|
// than 2 refinement levels (automatically switched on in that case)
|
||||||
|
pointBasedRefinement yes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
Reference in a new issue