/usr/include/freefoam/dynamicFvMesh/dynamicRefineFvMesh.H is in libfreefoam-dev 0.1.0+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | /*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-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/>.
Class
Foam::dynamicRefineFvMesh
Description
A fvMesh with built-in refinement.
Determines which cells to refine/unrefine and does all in update().
SourceFiles
dynamicRefineFvMesh.C
\*---------------------------------------------------------------------------*/
#ifndef dynamicRefineFvMesh_H
#define dynamicRefineFvMesh_H
#include <dynamicFvMesh/dynamicFvMesh.H>
#include <dynamicMesh/hexRef8.H>
#include <OpenFOAM/PackedBoolList.H>
#include <OpenFOAM/Switch.H>
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class dynamicRefineFvMesh Declaration
\*---------------------------------------------------------------------------*/
class dynamicRefineFvMesh
:
public dynamicFvMesh
{
protected:
//- Mesh cutting engine
hexRef8 meshCutter_;
//- Dump cellLevel for postprocessing
Switch dumpLevel_;
//- Fluxes to map
List<Pair<word> > correctFluxes_;
//- Number of refinement/unrefinement steps done so far.
label nRefinementIterations_;
//- Protected cells (usually since not hexes)
PackedBoolList protectedCell_;
// Private Member Functions
//- Count set/unset elements in packedlist.
static label count(const PackedBoolList&, const unsigned int);
//- Calculate cells that cannot be refined since would trigger
// refinement of protectedCell_ (since 2:1 refinement cascade)
void calculateProtectedCells(PackedBoolList& unrefineableCell) const;
//- 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
//- Calculates approximate value for refinement level so
// we don't go above maxCell
scalar getRefineLevel
(
const label maxCells,
const label maxRefinement,
const scalar refineLevel,
const scalarField&
) const;
//- Get per cell max of connected point
scalarField maxPointField(const scalarField&) const;
//- Get point min of connected cell
scalarField minCellField(const volScalarField&) const;
scalarField cellToPoint(const scalarField& vFld) const;
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
dynamicRefineFvMesh(const dynamicRefineFvMesh&);
//- Disallow default bitwise assignment
void operator=(const dynamicRefineFvMesh&);
public:
//- Runtime type information
TypeName("dynamicRefineFvMesh");
// Constructors
//- Construct from IOobject
explicit dynamicRefineFvMesh(const IOobject& io);
// Destructor
virtual ~dynamicRefineFvMesh();
// Member Functions
//- Direct access to the refinement engine
const hexRef8& meshCutter() const
{
return meshCutter_;
}
//- Cells which should not be refined/unrefined
const PackedBoolList& protectedCell() const
{
return protectedCell_;
}
//- Cells which should not be refined/unrefined
PackedBoolList& protectedCell()
{
return protectedCell_;
}
//- 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
// ************************ vim: set sw=4 sts=4 et: ************************ //
|