volBSplinesBase.H
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2007-2020 PCOpt/NTUA
9 Copyright (C) 2013-2020 FOSS GP
10 Copyright (C) 2019 OpenCFD Ltd.
11-------------------------------------------------------------------------------
12License
13 This file is part of OpenFOAM.
14
15 OpenFOAM is free software: you can redistribute it and/or modify it
16 under the terms of the GNU General Public License as published by
17 the Free Software Foundation, either version 3 of the License, or
18 (at your option) any later version.
19
20 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
21 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
22 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
27
28
29Class
30 Foam::volBSplinesBase
31
32Description
33 Class constructing a number of volumetric B-Splines boxes,
34 read from dynamicMeshDict. Useful for various sensitivities and
35 optMeshMovement classes.
36
37 Derives from MeshObject so that all instances know and update the same
38 control points and parametric coordinates are computed only once
39
40SourceFiles
41 volBSplinesBase.C
42
43\*---------------------------------------------------------------------------*/
44
45#ifndef volBSplinesBase_H
46#define volBSplinesBase_H
47
48#include "NURBS3DVolume.H"
49#include "OFstream.H"
50
51// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
52
53namespace Foam
54{
55
56/*---------------------------------------------------------------------------*\
57 Class volBSplinesBase Declaration
58\*---------------------------------------------------------------------------*/
61:
62 public MeshObject<fvMesh, UpdateableMeshObject, volBSplinesBase>
63{
64protected:
65
66 // Protected data
67
68 //- List with volumetric B-splines boxes.
69 // No overlapping is supported
71
72 //- Active design variables numbering for all boxes
74
75
76private:
77
78 // Private Member Functions
79
80 //- No copy construct
81 volBSplinesBase(const volBSplinesBase&) = delete;
82
83 //- No copy assignment
84 void operator=(const volBSplinesBase&) = delete;
85
86
87public:
88
89 //- Runtime type information
90 TypeName("volBSplinesBase");
91
92
93 // Constructors
94
95 //- Construct from components
97
98
99 //- Destructor
100 virtual ~volBSplinesBase() = default;
101
102
103 // Member Functions
104
105 //- Get const reference to the vol. B-splines boxes
106 const PtrList<NURBS3DVolume>& boxes() const;
107
108 //- Get non-const reference to the vol. B-splines boxes
110
111 //- Get const reference to a specific box
112 const NURBS3DVolume& box(const label boxI) const;
113
114 //- Get non-const reference to a specific box
115 NURBS3DVolume& boxRef(const label boxI);
116
117 //- Get reference to control points
118 const vectorField& getControlPoints(const label& iNURB) const;
119
120 //- Get control points from all boxes
122
123 //- Get cumulative number of control points from all boxes
124 label getTotalControlPointsNumber() const;
125
126 //- Get number of boxes
127 label getNumberOfBoxes() const;
128
129 //- Get start CP ID for each box
130 labelList getStartCpID() const;
131
132 //- Find box of certain control point
133 label findBoxID(const label cpI) const;
134
135 //- Get active design variables
136 const labelList& getActiveDesignVariables() const;
137
138 //- Get max boundary displacement for a given control-points
139 //- movement
141 (
142 const vectorField& controlPointsMovement,
143 const labelList& patchesToBeMoved
144 );
145
146 //- Bound control points movement
148 (
149 vectorField& controlPointsMovement
150 ) const;
151
152 //- Move control points. No effect on mesh
153 void moveControlPoints(const vectorField& controlPointsMovement);
154
155 //- Write control points to constant and optimisation folders
156 void writeControlPoints() const;
157
158 //- Dummy function required by MeshObject.
159 // Since this class is going to initiate the mesh movement,
160 // there is nothing more to be done when the mesh points change
161 virtual bool movePoints();
162
163 //- Dummy function required by MeshObject.
164 // Since this class is going to initiate the mesh movement,
165 // there is nothing more to be done when the mesh points change
166 virtual void updateMesh(const mapPolyMesh&);
167};
168
169
170// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
171
172} // End namespace Foam
173
174// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
175
176#endif
177
178// ************************************************************************* //
Templated abstract base-class for optional mesh objects used to automate their allocation to the mesh...
Definition: MeshObject.H:91
NURBS3DVolume morpher. Includes support functions for gradient computations Base class providing supp...
Definition: NURBS3DVolume.H:76
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers....
Definition: PtrList.H:73
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:91
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Definition: mapPolyMesh.H:162
Class constructing a number of volumetric B-Splines boxes, read from dynamicMeshDict....
virtual bool movePoints()
Dummy function required by MeshObject.
virtual ~volBSplinesBase()=default
Destructor.
void moveControlPoints(const vectorField &controlPointsMovement)
Move control points. No effect on mesh.
const vectorField & getControlPoints(const label &iNURB) const
Get reference to control points.
const PtrList< NURBS3DVolume > & boxes() const
Get const reference to the vol. B-splines boxes.
vectorField getAllControlPoints() const
Get control points from all boxes.
const labelList & getActiveDesignVariables() const
Get active design variables.
void writeControlPoints() const
Write control points to constant and optimisation folders.
scalar computeMaxBoundaryDisplacement(const vectorField &controlPointsMovement, const labelList &patchesToBeMoved)
labelList getStartCpID() const
Get start CP ID for each box.
label findBoxID(const label cpI) const
Find box of certain control point.
NURBS3DVolume & boxRef(const label boxI)
Get non-const reference to a specific box.
PtrList< NURBS3DVolume > & boxesRef()
Get non-const reference to the vol. B-splines boxes.
TypeName("volBSplinesBase")
Runtime type information.
labelList activeDesignVariables_
Active design variables numbering for all boxes.
const NURBS3DVolume & box(const label boxI) const
Get const reference to a specific box.
label getTotalControlPointsNumber() const
Get cumulative number of control points from all boxes.
void boundControlPointMovement(vectorField &controlPointsMovement) const
Bound control points movement.
PtrList< NURBS3DVolume > volume_
List with volumetric B-splines boxes.
virtual void updateMesh(const mapPolyMesh &)
Dummy function required by MeshObject.
label getNumberOfBoxes() const
Get number of boxes.
Namespace for OpenFOAM.
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition: typeInfo.H:73