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 -------------------------------------------------------------------------------
12 License
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 
29 Class
30  Foam::volBSplinesBase
31 
32 Description
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 
40 SourceFiles
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 
53 namespace Foam
54 {
55 
56 /*---------------------------------------------------------------------------*\
57  Class volBSplinesBase Declaration
58 \*---------------------------------------------------------------------------*/
59 
60 class volBSplinesBase
61 :
62  public MeshObject<fvMesh, UpdateableMeshObject, volBSplinesBase>
63 {
64 protected:
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 
76 private:
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 
87 public:
88 
89  //- Runtime type information
90  TypeName("volBSplinesBase");
91 
92 
93  // Constructors
94 
95  //- Construct from components
96  volBSplinesBase(const fvMesh& mesh);
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 // ************************************************************************* //
const NURBS3DVolume & box(const label boxI) const
Get const reference to a specific box.
void moveControlPoints(const vectorField &controlPointsMovement)
Move control points. No effect on mesh.
virtual void updateMesh(const mapPolyMesh &)
Dummy function required by MeshObject.
void writeControlPoints() const
Write control points to constant and optimisation folders.
labelList activeDesignVariables_
Active design variables numbering for all boxes.
const vectorField & getControlPoints(const label &iNURB) const
Get reference to control points.
label getNumberOfBoxes() const
Get number of boxes.
NURBS3DVolume & boxRef(const label boxI)
Get non-const reference to a specific box.
NURBS3DVolume morpher. Includes support functions for gradient computations Base class providing supp...
Definition: NURBS3DVolume.H:69
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Definition: mapPolyMesh.H:157
vectorField getAllControlPoints() const
Get control points from all boxes.
Templated abstract base-class for optional mesh objects used to automate their allocation to the mesh...
Definition: MeshObject.H:85
const fvMesh & mesh() const noexcept
Reference to the mesh.
Definition: MeshObject.H:157
labelList getStartCpID() const
Get start CP ID for each box.
const PtrList< NURBS3DVolume > & boxes() const
Get const reference to the vol. B-splines boxes.
TypeName("volBSplinesBase")
Runtime type information.
void boundControlPointMovement(vectorField &controlPointsMovement) const
Bound control points movement.
label getTotalControlPointsNumber() const
Get cumulative number of control points from all boxes.
PtrList< NURBS3DVolume > & boxesRef()
Get non-const reference to the vol. B-splines boxes.
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers...
Definition: List.H:55
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:79
virtual ~volBSplinesBase()=default
Destructor.
virtual bool movePoints()
Dummy function required by MeshObject.
label findBoxID(const label cpI) const
Find box of certain control point.
PtrList< NURBS3DVolume > volume_
List with volumetric B-splines boxes.
Namespace for OpenFOAM.
scalar computeMaxBoundaryDisplacement(const vectorField &controlPointsMovement, const labelList &patchesToBeMoved)
Get max boundary displacement for a given control-points movement.
const labelList & getActiveDesignVariables() const
Get active design variables.
Class constructing a number of volumetric B-Splines boxes, read from dynamicMeshDict. Useful for various sensitivities and optMeshMovement classes.