Fix tutorials: typo in tutorials/viscoelastic/viscoelasticFluidFoam/S-MDCPP/constant...
[OpenFOAM-1.6-ext.git] / src / engine / engineTopoChangerMesh / pistonRefine / pistonRefine.H
blobd89dae86e2dcb24d4dbd22d1175c16b5281337d4
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 2 of the License, or (at your
14     option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 #ifndef pistonRefine_H
28 #define pistonRefine_H
30 #include "engineTopoChangerMesh.H"
31 #include "simpleEnginePiston.H"
32 #include "motionSolver.H"
33 #include "polyPatchID.H"
34 #include "polyMesh.H"
35 #include "volPointInterpolation.H"
37 #include "dynamicFvMesh.H"
38 #include "hexRef8.H"
39 #include "PackedList.H"
40 #include "Switch.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 // Class forward declarations
49 /*---------------------------------------------------------------------------*\
50                            Class pistonRefine Declaration
51 \*---------------------------------------------------------------------------*/
53 class pistonRefine
55     public engineTopoChangerMesh
58 protected:
60          //- Piston patch
61         simpleEnginePiston piston_;        
63         //- Piston Position
64         scalar pistonPosition_;
66         //- deckHeight
67         scalar deckHeight_;
69        //- Mesh cutting engine
70         hexRef8 meshCutter_;
72         //- Dump cellLevel for postprocessing
73         Switch dumpLevel_;
75         //- Fluxes to map
76         List<Pair<word> > correctFluxes_;
78         //- Number of refinement/unrefinement steps done so far.
79         label nRefinementIterations_;
81         //- Protected cells (usually since not hexes)
82         PackedList<1> protectedCell_;
85     // Private Member Functions
87         //- Count set/unset elements in packedlist.
88         static label count(const PackedList<1>&, const unsigned int);
90         //- Calculate cells that cannot be refined since would trigger
91         //  refinement of protectedCell_ (since 2:1 refinement cascade)
92         void calculateProtectedCells(PackedList<1>& unrefineableCell) const;
94         //- Read the projection parameters from dictionary
95         void readDict();
98         //- Refine cells. Update mesh and fields.
99         autoPtr<mapPolyMesh> refine(const labelList&);
101         //- Unrefine cells. Gets passed in centre points of cells to combine.
102         autoPtr<mapPolyMesh> unrefine(const labelList&);
105         // Selection of cells to un/refine
107             //- Calculates approximate value for refinement level so
108             //  we don't go above maxCell
109             scalar getRefineLevel
110             (
111                 const label maxCells,
112                 const label maxRefinement,
113                 const scalar refineLevel,
114                 const scalarField&
115             ) const;
117             //- Get per cell max of connected point
118             scalarField maxPointField(const scalarField&) const;
120             //- Get point min of connected cell
121             scalarField minCellField(const volScalarField&) const;
123             scalarField cellToPoint(const scalarField& vFld) const;
125             scalarField error
126             (
127                 const scalarField& fld,
128                 const scalar minLevel,
129                 const scalar maxLevel
130             ) const;
132             //- Select candidate cells for refinement
133             virtual void selectRefineCandidates
134             (
135                 const scalar lowerRefineLevel,
136                 const scalar upperRefineLevel,
137                 const scalarField& vFld,
138                 PackedList<1>& candidateCell
139             ) const;
141             //- Subset candidate cells for refinement
142             virtual labelList selectRefineCells
143             (
144                 const label maxCells,
145                 const label maxRefinement,
146                 const PackedList<1>& candidateCell
147             ) const;
149             //- Select points that can be unrefined.
150             virtual labelList selectUnrefinePoints
151             (
152                 const scalar unrefineLevel,
153                 const PackedList<1>& markedCell,
154                 const scalarField& pFld
155             ) const;
157             //- Extend markedCell with cell-face-cell.
158             void extendMarkedCells(PackedList<1>& markedCell) const;
160 private:
162         //- Disallow default bitwise copy construct
163         dynamicRefineFvMesh(const dynamicRefineFvMesh&);
165         //- Disallow default bitwise assignment
166         void operator=(const dynamicRefineFvMesh&);
169 ////////////////////////////////////////////////    // Private data
171                
172     // Private Member Functions
174         //- Disallow default bitwise copy construct
175         pistonRefine(const pistonRefine&);
177         //- Disallow default bitwise assignment
178         void operator=(const pistonRefine&);
179         
180         //- Check if all patches exist, then calculate virtualPistonPosition, 
181         //- pistonPosition and deckHeight for the first time
182         void checkAndCalculate();
183         
184         //- Add valve and piston zones and modifiers
185 //        void addZonesAndModifiers(){}
187 public:
189     //- Runtime type information
190     TypeName("pistonRefine");
193     // Constructors
195         //- Construct from database
196         explicit pistonRefine(const IOobject& io);
199     // Destructor 
201         virtual ~pistonRefine();
203     // Member Functions
205         //- Direct access to the refinement engine
206         const hexRef8& meshCutter() const
207         {
208             return meshCutter_;
209         }
211         //- Cells which should not be refined/unrefined
212         const PackedList<1>& protectedCell() const
213         {
214             return protectedCell_;
215         }
217         //- Cells which should not be refined/unrefined
218         PackedList<1>& protectedCell()
219         {
220             return protectedCell_;
221         }
223     // Member Functions
225         
226         const scalar& pistonPosition() const
227         {
228             return pistonPosition_;
229         }
231         scalar& pistonPosition() 
232         {
233             return pistonPosition_;
234         }
235         
236         
237         const scalar& deckHeight() const
238         {
239             return deckHeight_;
240         }
242         scalar& deckHeight() 
243         {
244             return deckHeight_;
245         }
246         
248         const simpleEnginePiston& piston() const
249         {
250             return piston_;
251         }
254         //- Move and morph
255         virtual bool update();
256         
257         //- Set boundary velocities
258         void setBoundaryVelocity(volVectorField& U);
259         
260     // Writing
262         //- Write using given format, version and compression
263         virtual bool writeObject
264         (
265             IOstream::streamFormat fmt,
266             IOstream::versionNumber ver,
267             IOstream::compressionType cmp
268         ) const;
272 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
274 } // End namespace Foam
276 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
278 #endif
280 // ************************************************************************* //