twoDPointCorrector.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
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.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::twoDPointCorrector
26 
27 Description
28  Class applies a two-dimensional correction to mesh motion point field.
29 
30  The correction guarantees that the mesh does not get twisted during motion
31  and thus introduce a third dimension into a 2-D problem.
32 
33  The operation is performed by looping through all edges approximately
34  normal to the plane and enforcing their orthogonality onto the plane by
35  adjusting points on their ends.
36 
37 SourceFiles
38  twoDPointCorrector.C
39 
40 \*---------------------------------------------------------------------------*/
41 
42 #ifndef twoDPointCorrector_H
43 #define twoDPointCorrector_H
44 
45 #include "MeshObject.H"
46 #include "pointField.H"
47 #include "labelList.H"
48 #include "vector.H"
49 
50 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 
52 namespace Foam
53 {
54 
55 // Forward class declarations
56 class polyMesh;
57 
58 /*---------------------------------------------------------------------------*\
59  Class twoDPointCorrector Declaration
60 \*---------------------------------------------------------------------------*/
61 
63 :
64  public MeshObject<polyMesh, UpdateableMeshObject, twoDPointCorrector>
65 {
66  // Private Data
67 
68  //- Is 2D correction required, i.e. is the mesh
69  bool required_;
70 
71  //- 2-D plane unit normal
72  mutable vector* planeNormalPtr_;
73 
74  //- Indices of edges normal to plane
75  mutable labelList* normalEdgeIndicesPtr_;
76 
77  //- Flag to indicate a wedge geometry
78  mutable bool isWedge_;
79 
80  //- Wedge axis (if wedge geometry)
81  mutable vector wedgeAxis_;
82 
83  //- Wedge angle (if wedge geometry)
84  mutable scalar wedgeAngle_;
85 
86 
87  // Private Member Functions
88 
89  //- Calculate addressing
90  void calcAddressing() const;
91 
92  //- Clear addressing
93  void clearAddressing() const;
94 
95  //- Snap a point to the wedge patch(es)
96  void snapToWedge(const vector& n, const point& A, point& p) const;
97 
98 
99  // Static Data Members
100 
101  //- Edge orthogonality tolerance
102  static const scalar edgeOrthogonalityTol;
103 
104 
105 public:
106 
107  // Declare name of the class and its debug switch
108  ClassName("twoDPointCorrector");
109 
110 
111  // Constructors
112 
113  //- Construct from components
115 
116  //- Disallow default bitwise copy construction
117  twoDPointCorrector(const twoDPointCorrector&) = delete;
118 
119 
120  //- Destructor
122 
123 
124  // Member Functions
125 
126  //- Is 2D correction required, i.e. is the mesh a wedge or slab
127  bool required() const
128  {
129  return required_;
130  }
131 
132  //- Return plane normal
133  const vector& planeNormal() const;
134 
135  //- Return indices of normal edges.
136  const labelList& normalEdgeIndices() const;
137 
138  //- Return direction normal to plane
139  direction normalDir() const;
140 
141  //- Correct motion points
142  void correctPoints(pointField& p) const;
143 
144  //- Correct motion displacements
145  void correctDisplacement(const pointField& p, vectorField& disp) const;
146 
147  //- Update topology
148  virtual void topoChange(const polyTopoChangeMap&);
149 
150  //- Update from another mesh using the given map
151  virtual void mapMesh(const polyMeshMap&);
152 
153  //- Redistribute or update using the given distribution map
154  virtual void distribute(const polyDistributionMap&);
155 
156  //- Correct weighting factors for moving mesh.
157  virtual bool movePoints();
158 
159 
160  // Member Operators
161 
162  //- Disallow default bitwise assignment
163  void operator=(const twoDPointCorrector&) = delete;
164 };
165 
166 
167 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
168 
169 } // End namespace Foam
170 
171 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
172 
173 #endif
174 
175 // ************************************************************************* //
Class containing mesh-to-mesh mapping information after a mesh distribution where we send parts of me...
uint8_t direction
Definition: direction.H:45
const labelList & normalEdgeIndices() const
Return indices of normal edges.
ClassName("twoDPointCorrector")
virtual void distribute(const polyDistributionMap &)
Redistribute or update using the given distribution map.
twoDPointCorrector(const polyMesh &mesh)
Construct from components.
void correctPoints(pointField &p) const
Correct motion points.
void operator=(const twoDPointCorrector &)=delete
Disallow default bitwise assignment.
Templated abstract base-class for optional mesh objects used to automate their allocation to the mesh...
Definition: MeshObject.H:87
void correctDisplacement(const pointField &p, vectorField &disp) const
Correct motion displacements.
bool required() const
Is 2D correction required, i.e. is the mesh a wedge or slab.
Class applies a two-dimensional correction to mesh motion point field.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
virtual void topoChange(const polyTopoChangeMap &)
Update topology.
const vector & planeNormal() const
Return plane normal.
virtual bool movePoints()
Correct weighting factors for moving mesh.
direction normalDir() const
Return direction normal to plane.
virtual void mapMesh(const polyMeshMap &)
Update from another mesh using the given map.
label n
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:76
volScalarField & p
Class containing mesh-to-mesh mapping information.
Definition: polyMeshMap.H:50
Namespace for OpenFOAM.