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
147  void boundControlPointMovement(vectorField& controlPointsMovement);
148 
149  //- Move control points. No effect on mesh
150  void moveControlPoints(const vectorField& controlPointsMovement);
151 
152  //- Write control points to constant and optimisation folders
153  void writeControlPoints() const;
154 
155  //- Dummy function required by MeshObject.
156  // Since this class is going to initiate the mesh movement,
157  // there is nothing more to be done when the mesh points change
158  virtual bool movePoints();
159 
160  //- Dummy function required by MeshObject.
161  // Since this class is going to initiate the mesh movement,
162  // there is nothing more to be done when the mesh points change
163  virtual void updateMesh(const mapPolyMesh&);
164 };
165 
166 
167 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
168 
169 } // End namespace Foam
170 
171 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
172 
173 #endif
174 
175 // ************************************************************************* //
Foam::volBSplinesBase::activeDesignVariables_
labelList activeDesignVariables_
Definition: volBSplinesBase.H:68
Foam::volBSplinesBase::movePoints
virtual bool movePoints()
Definition: volBSplinesBase.C:317
Foam::volBSplinesBase::boxRef
NURBS3DVolume & boxRef(const label boxI)
Definition: volBSplinesBase.C:126
Foam::volBSplinesBase
Class constructing a number of volumetric B-Splines boxes, read from dynamicMeshDict....
Definition: volBSplinesBase.H:55
Foam::volBSplinesBase::getAllControlPoints
vectorField getAllControlPoints() const
Definition: volBSplinesBase.C:138
Foam::volBSplinesBase::findBoxID
label findBoxID(const label cpI) const
Definition: volBSplinesBase.C:183
Foam::NURBS3DVolume
NURBS3DVolume morpher. Includes support functions for gradient computations Base class providing supp...
Definition: NURBS3DVolume.H:68
Foam::volBSplinesBase::box
const NURBS3DVolume & box(const label boxI) const
Definition: volBSplinesBase.C:120
Foam::volBSplinesBase::getActiveDesignVariables
const labelList & getActiveDesignVariables() const
Definition: volBSplinesBase.C:201
Foam::volBSplinesBase::moveControlPoints
void moveControlPoints(const vectorField &controlPointsMovement)
Definition: volBSplinesBase.C:277
Foam::volBSplinesBase::boxes
const PtrList< NURBS3DVolume > & boxes() const
Definition: volBSplinesBase.C:108
OFstream.H
Foam::Field
Generic templated field type.
Definition: Field.H:59
Foam::MeshObject< fvMesh, UpdateableMeshObject, volBSplinesBase >::mesh
const fvMesh & mesh() const
Definition: MeshObject.H:118
Foam::volBSplinesBase::getTotalControlPointsNumber
label getTotalControlPointsNumber() const
Definition: volBSplinesBase.C:150
Foam::volBSplinesBase::getControlPoints
const vectorField & getControlPoints(const label &iNURB) const
Definition: volBSplinesBase.C:132
Foam::volBSplinesBase::boundControlPointMovement
void boundControlPointMovement(vectorField &controlPointsMovement)
Definition: volBSplinesBase.C:245
Foam::volBSplinesBase::getNumberOfBoxes
label getNumberOfBoxes() const
Definition: volBSplinesBase.C:162
Foam::PtrList
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers....
Definition: List.H:55
Foam::volBSplinesBase::boxesRef
PtrList< NURBS3DVolume > & boxesRef()
Definition: volBSplinesBase.C:114
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:81
Foam
Definition: atmBoundaryLayer.C:26
Foam::volBSplinesBase::volume_
PtrList< NURBS3DVolume > volume_
Definition: volBSplinesBase.H:65
Foam::volBSplinesBase::computeMaxBoundaryDisplacement
scalar computeMaxBoundaryDisplacement(const vectorField &controlPointsMovement, const labelList &patchesToBeMoved)
Definition: volBSplinesBase.C:208
Foam::volBSplinesBase::getStartCpID
labelList getStartCpID() const
Definition: volBSplinesBase.C:168
Foam::List
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: BitOps.H:58
NURBS3DVolume.H
Foam::volBSplinesBase::updateMesh
virtual void updateMesh(const mapPolyMesh &)
Definition: volBSplinesBase.C:324
Foam::mapPolyMesh
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
Definition: mapPolyMesh.H:157
Foam::MeshObject
Templated abstract base-class for optional mesh objects used to automate their allocation to the mesh...
Definition: MeshObject.H:84
Foam::volBSplinesBase::TypeName
TypeName("volBSplinesBase")
Foam::volBSplinesBase::writeControlPoints
void writeControlPoints() const
Definition: volBSplinesBase.C:307
Foam::volBSplinesBase::~volBSplinesBase
virtual ~volBSplinesBase()=default