Documentation 6b54b78464
Loading...
Searching...
No Matches
CGeometry.hpp
Go to the documentation of this file.
1/*!
2 * \file CGeometry.hpp
3 * \brief Headers of the main subroutines for creating the geometrical structure.
4 * The subroutines and functions are in the <i>CGeometry.cpp</i> file.
5 * \author F. Palacios, T. Economon
6 * \version 8.5.0 "Harrier"
7 *
8 * SU2 Project Website: https://su2code.github.io
9 *
10 * The SU2 Project is maintained by the SU2 Foundation
11 * (http://su2foundation.org)
12 *
13 * Copyright 2012-2026, SU2 Contributors (cf. AUTHORS.md)
14 *
15 * SU2 is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU Lesser General Public
17 * License as published by the Free Software Foundation; either
18 * version 2.1 of the License, or (at your option) any later version.
19 *
20 * SU2 is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 * Lesser General Public License for more details.
24 *
25 * You should have received a copy of the GNU Lesser General Public
26 * License along with SU2. If not, see <http://www.gnu.org/licenses/>.
27 */
28
29#pragma once
30
31#include <limits>
32#include "../parallelization/mpi_structure.hpp"
33
34#ifdef HAVE_METIS
35#include "metis.h"
36#endif
37#ifdef HAVE_PARMETIS
38extern "C" {
39#include "parmetis.h"
40}
41#endif
42
43#include <string>
44#include <fstream>
45#include <sstream>
46#include <cmath>
47#include <algorithm>
48#include <cstring>
49#include <cstdio>
50#include <cstdlib>
51#include <climits>
52#include <memory>
53#include <unordered_map>
54#include <cstdint>
55
58#include "dual_grid/CPoint.hpp"
59#include "dual_grid/CEdge.hpp"
60#include "dual_grid/CVertex.hpp"
62
63#include "../CConfig.hpp"
64#include "../toolboxes/graph_toolbox.hpp"
65#include "../adt/CADTElemClass.hpp"
66
67using namespace std;
68
69/*!
70 * \class CGeometry
71 * \brief Parent class for defining the geometry of the problem (complete geometry,
72 * multigrid agglomerated geometry, only boundary geometry, etc..)
73 * \author F. Palacios
74 */
75class CGeometry {
76 public:
77 /*!
78 * \brief Aggregates the full symmetric CSR and its LDU split (L strictly-lower, U strictly-upper).
79 * Built together lazily via GetSparsePattern; all three are always valid once non-empty.
80 */
82 CCompressedSparsePatternUL csr; /*!< Full symmetric pattern (with diagonal pointer). */
83 CCompressedSparsePatternUL l; /*!< Strictly-lower part. */
84 CCompressedSparsePatternUL u; /*!< Strictly-upper part. */
85
86 bool empty() const { return csr.empty(); }
87 };
88
89 protected:
90 enum : size_t { OMP_MIN_SIZE = 32 }; /*!< \brief Chunk size for small loops. */
91 enum : size_t { MAXNDIM = 3 };
92
93 const int size{SINGLE_NODE}; /*!< \brief MPI Size. */
94 const int rank{MASTER_NODE}; /*!< \brief MPI Rank. */
95
96 unsigned long nPoint{0}, /*!< \brief Number of points of the mesh. */
97 nPointDomain{0}, /*!< \brief Number of real points of the mesh. */
98 nPointGhost{0}, /*!< \brief Number of ghost points of the mesh. */
99 Global_nPoint{0}, /*!< \brief Total number of nodes in a simulation across all processors (including halos). */
101 0}, /*!< \brief Total number of nodes in a simulation across all processors (excluding halos). */
102 nElem{0}, /*!< \brief Number of elements of the mesh. */
103 Global_nElem{0}, /*!< \brief Total number of elements in a simulation across all processors (all types). */
105 0}, /*!< \brief Total number of elements in a simulation across all processors (excluding halos). */
106 nEdge{0}, /*!< \brief Number of edges of the mesh. */
107 nFace{0}, /*!< \brief Number of faces of the mesh. */
108 nelem_edge{0}, /*!< \brief Number of edges in the mesh. */
109 Global_nelem_edge{0}, /*!< \brief Total number of edges in the mesh across all processors. */
110 nelem_triangle{0}, /*!< \brief Number of triangles in the mesh. */
111 Global_nelem_triangle{0}, /*!< \brief Total number of triangles in the mesh across all processors. */
112 nelem_quad{0}, /*!< \brief Number of quadrangles in the mesh. */
113 Global_nelem_quad{0}, /*!< \brief Total number of quadrangles in the mesh across all processors. */
114 nelem_tetra{0}, /*!< \brief Number of tetrahedra in the mesh. */
115 Global_nelem_tetra{0}, /*!< \brief Total number of tetrahedra in the mesh across all processors. */
116 nelem_hexa{0}, /*!< \brief Number of hexahedra in the mesh. */
117 Global_nelem_hexa{0}, /*!< \brief Total number of hexahedra in the mesh across all processors. */
118 nelem_prism{0}, /*!< \brief Number of prisms in the mesh. */
119 Global_nelem_prism{0}, /*!< \brief Total number of prisms in the mesh across all processors. */
120 nelem_pyramid{0}, /*!< \brief Number of pyramids in the mesh. */
121 Global_nelem_pyramid{0}, /*!< \brief Total number of pyramids in the mesh across all processors. */
122 nelem_edge_bound{0}, /*!< \brief Number of edges on the mesh boundaries. */
123 Global_nelem_edge_bound{0}, /*!< \brief Total number of edges on the mesh boundaries across all processors. */
124 nelem_triangle_bound{0}, /*!< \brief Number of triangles on the mesh boundaries. */
126 0}, /*!< \brief Total number of triangles on the mesh boundaries across all processors. */
127 nelem_quad_bound{0}, /*!< \brief Number of quads on the mesh boundaries. */
128 Global_nelem_quad_bound{0}, /*!< \brief Total number of quads on the mesh boundaries across all processors. */
129 nNonconvexElements{0}; /*!< \brief Number of nonconvex elements in the mesh. */
130
131 unsigned short nDim{0}; /*!< \brief Number of dimension of the problem. */
132 unsigned short nZone{0}; /*!< \brief Number of zones in the problem. */
133 unsigned short nMarker{0}; /*!< \brief Number of different markers of the mesh. */
134 unsigned short nCommLevel{0}; /*!< \brief Number of non-blocking communication levels. */
135
136 unsigned short MGLevel{0}; /*!< \brief The mesh level index for the current geometry container. */
137 unsigned long Max_GlobalPoint{0}; /*!< \brief Greater global point in the domain local structure. */
138
139 /*--- Boundary information. ---*/
140
141 short* Marker_All_SendRecv{nullptr}; /*!< \brief MPI Marker. */
144
145 /*--- Create vectors and distribute the values among the different planes queues ---*/
146
147 vector<vector<su2double>>
148 Xcoord_plane; /*!< \brief Vector containing x coordinates of new points appearing on a single plane */
149 vector<vector<su2double>>
150 Ycoord_plane; /*!< \brief Vector containing y coordinates of new points appearing on a single plane */
151 vector<vector<su2double>>
152 Zcoord_plane; /*!< \brief Vector containing z coordinates of new points appearing on a single plane */
153 vector<vector<su2double>> FaceArea_plane; /*!< \brief Vector containing area/volume associated with new points
154 appearing on a single plane */
155 vector<vector<unsigned long>> Plane_points; /*!< \brief Vector containing points appearing on a single plane */
156
157 vector<su2double> XCoordList; /*!< \brief Vector containing points appearing on a single plane */
158
159#if defined(HAVE_MPI) && defined(HAVE_PARMETIS)
160 vector<vector<unsigned long>>
161 adj_nodes; /*!< \brief Vector of vectors holding each node's adjacency during preparation for ParMETIS. */
162 vector<idx_t> adjacency; /*!< \brief Local adjacency array to be input into ParMETIS for partitioning (idx_t is a
163 ParMETIS type defined in their headers). */
164 vector<idx_t> xadj; /*!< \brief Index array that points to the start of each node's adjacency in CSR format (needed to
165 interpret the adjacency array). */
166#endif
167
168 /*--- Turbomachinery variables ---*/
169
170 unsigned short* nSpanWiseSections{
171 nullptr}; /*!< \brief Number of Span wise section for each turbo marker, indexed by inflow/outflow */
172 unsigned short* nSpanSectionsByMarker{nullptr}; /*!< \brief Number of Span wise section for each turbo marker, indexed
173 by marker. Needed for deallocation.*/
174 unsigned short nTurboPerf{0}; /*!< \brief Number of Span wise section for each turbo marker. */
175 su2double** SpanWiseValue{nullptr}; /*!< \brief Span wise values for each turbo marker. */
176 long** nVertexSpan{nullptr}; /*!< \brief number of vertexes for span wise section for each marker. */
177 unsigned long** nTotVertexSpan{nullptr}; /*!< \brief number of vertexes at each span wise section for each marker. */
178 unsigned long nVertexSpanMax[3] = {
179 0}; /*!< \brief max number of vertexes for each span section for each marker flag. */
180 su2double*** AverageTurboNormal{nullptr}; /*!< \brief Average boundary normal at each span wise section for each
181 marker in the turbomachinery frame of reference.*/
182 su2double*** AverageNormal{nullptr}; /*!< \brief Average boundary normal at each span wise section for each marker.*/
184 nullptr}; /*!< \brief Average boundary grid velocity at each span wise section for each marker.*/
186 nullptr}; /*!< \brief Average tangential rotational speed at each span wise section for each marker.*/
187 su2double** SpanArea{nullptr}; /*!< \brief Area at each span wise section for each marker.*/
188 su2double** MaxAngularCoord{nullptr}; /*!< \brief Max angular pitch at each span wise section for each marker.*/
189 su2double** MinAngularCoord{nullptr}; /*!< \brief Max angular pitch at each span wise section for each marker.*/
191 nullptr}; /*!< \brief Min relative angular coord at each span wise section for each marker.*/
192 su2double** TurboRadius{nullptr}; /*!< \brief Radius at each span wise section for each marker.*/
194 su2double** TangGridVelOut{nullptr}; /*!< \brief Average tangential rotational speed at each span wise section for
195 each turbomachinery marker.*/
197 su2double** SpanAreaOut{nullptr}; /*!< \brief Area at each span wise section for each turbomachinery marker.*/
199 su2double** TurboRadiusOut{nullptr}; /*!< \brief Radius at each span wise section for each turbomachinery marker*/
200
201 /*--- Sparsity patterns associated with the geometry. ---*/
202
203 LDUSparsePattern finiteVolumePatternFill0; /*!< \brief FVM sparsity with 0-fill (structural pattern). */
204 LDUSparsePattern finiteVolumePatternFillN; /*!< \brief FVM sparsity with N-fill (e.g. for ILU-N). */
205 LDUSparsePattern finiteElementPatternFill0; /*!< \brief FEM sparsity with 0-fill (structural pattern). */
206 LDUSparsePattern finiteElementPatternFillN; /*!< \brief FEM sparsity with N-fill (e.g. for ILU-N). */
207
208 su2vector<su2uint> finiteVolumeLToUTranspMap; /*!< \brief FVM L-entry -> U-entry of its transpose. */
209 su2vector<su2uint> finiteVolumeUToLTranspMap; /*!< \brief FVM U-entry -> L-entry of its transpose. */
210 su2vector<su2uint> finiteElementLToUTranspMap; /*!< \brief FEM L-entry -> U-entry of its transpose. */
211 su2vector<su2uint> finiteElementUToLTranspMap; /*!< \brief FEM U-entry -> L-entry of its transpose. */
212
213 /*--- Edge and element colorings. ---*/
214
215 CCompressedSparsePatternUL edgeColoring, /*!< \brief Edge coloring structure for thread-based parallelization. */
216 elemColoring; /*!< \brief Element coloring structure for thread-based parallelization. */
217 unsigned long edgeColorGroupSize{1}; /*!< \brief Size of the edge groups within each color. */
218 unsigned long elemColorGroupSize{1}; /*!< \brief Size of the element groups within each color. */
219
220 ColMajorMatrix<uint8_t> CoarseGridColor_; /*!< \brief Coarse grid levels, colorized. */
221
222 public:
223 /*!< \brief Linelets (mesh lines perpendicular to stretching direction). */
225 /*!< \brief Detect isotropic mesh region. */
226 static passivedouble ALPHA_ISOTROPIC() { return 0.8; }
227 enum : unsigned long { MAX_LINELET_POINTS = 32 }; /*!< \brief Maximum points per linelet. */
228
229 std::vector<std::vector<unsigned long>> linelets; /*!< \brief Point indices for each linelet. */
230
231 /*!< \brief Index of the linelet of each point ("linelets" transfered to points). */
232 std::vector<unsigned> lineletIdx;
233
234 /*!< \brief Signals that a point is not on a linelet. */
235 enum : unsigned { NO_LINELET = std::numeric_limits<unsigned>::max() };
236
237 /*!< \brief Coloring for OpenMP parallelization, "linelets" is sorted by color. */
238 std::vector<unsigned long> colorOffsets;
239
240 std::vector<uint8_t> lineletColor; /*!< \brief Coloring transfered to points, for visualization. */
241
242 bool computed = false; /*!< \brief Set once the (collective) computation is done, even if a rank has no linelets. */
243 };
244
245 protected:
247
248 public:
249 /*--- Main geometric elements of the grid. ---*/
250
251 CPrimalGrid** elem{nullptr}; /*!< \brief Element vector (primal grid information). */
252 CPrimalGrid*** bound{nullptr}; /*!< \brief Boundary vector (primal grid information). */
253 CPoint* nodes{nullptr}; /*!< \brief Node vector (dual grid information). */
254 CEdge* edges{nullptr}; /*!< \brief Edge vector (dual grid information). */
255 CVertex*** vertex{nullptr}; /*!< \brief Boundary Vertex vector (dual grid information). */
257 nullptr}; /*!< \brief Boundary Vertex vector ordered for turbomachinery calculation(dual grid information). */
258 unsigned long* nVertex{nullptr}; /*!< \brief Number of vertex for each marker. */
259 unsigned long* nElem_Bound{nullptr}; /*!< \brief Number of elements of the boundary. */
260 string* Tag_to_Marker{nullptr}; /*!< \brief Names of boundary markers. */
261
262 /*!< \brief Corrected normals on nodes with shared symmetry markers. */
263 vector<std::unordered_map<unsigned long, std::array<su2double, MAXNDIM>>> symmetryNormals;
264
265 /*!< \brief Bool if boundary-marker is straight(2D)/plane(3D) for each local marker. */
266 vector<bool> boundIsStraight;
267 vector<su2double> SurfaceAreaCfgFile; /*!< \brief Total Surface area for all markers. */
268
269 /*--- Partitioning-specific variables ---*/
270
271 unordered_map<unsigned long, unsigned long>
272 Global_to_Local_Elem; /*!< \brief Mapping of global to local index for elements. */
273 unsigned long* beg_node{nullptr}; /*!< \brief Array containing the first node on each rank due to a linear
274 partitioning by global index. */
275 unsigned long* end_node{
276 nullptr}; /*!< \brief Array containing the last node on each rank due to a linear partitioning by global index. */
277 unsigned long* nPointLinear{nullptr}; /*!< \brief Array containing the total number of nodes on each rank due to a
278 linear partioning by global index. */
279 unsigned long* nPointCumulative{nullptr}; /*!< \brief Cumulative storage array containing the total number of points
280 on all prior ranks in the linear partitioning. */
281
282 /*--- Data structures for point-to-point MPI communications. ---*/
283
284 int maxCountPerPoint{0}; /*!< \brief Maximum number of pieces of data sent per vertex in point-to-point comms. */
285 int nP2PSend{0}; /*!< \brief Number of sends during point-to-point comms. */
286 int nP2PRecv{0}; /*!< \brief Number of receives during point-to-point comms. */
288 nullptr}; /*!< \brief Data structure holding number of vertices for each send in point-to-point comms. */
290 nullptr}; /*!< \brief Data structure holding number of vertices for each recv in point-to-point comms. */
292 nullptr}; /*!< \brief Data structure holding the ranks of the neighbors for point-to-point send comms. */
294 nullptr}; /*!< \brief Data structure holding the ranks of the neighbors for point-to-point recv comms. */
295 map<int, int> P2PSend2Neighbor; /*!< \brief Data structure holding the reverse mapping of the ranks of the neighbors
296 for point-to-point send comms. */
297 map<int, int> P2PRecv2Neighbor; /*!< \brief Data structure holding the reverse mapping of the ranks of the neighbors
298 for point-to-point recv comms. */
299 unsigned long *Local_Point_P2PSend{nullptr}, /*!< \brief Data structure holding the local index of all vertices to be
300 sent in point-to-point comms. */
301 *Local_Point_P2PRecv{nullptr}; /*!< \brief Data structure holding the local index of all vertices to be received
302 in point-to-point comms. */
303 su2double* bufD_P2PRecv{nullptr}; /*!< \brief Data structure for su2double point-to-point receive. */
304 su2double* bufD_P2PSend{nullptr}; /*!< \brief Data structure for su2double point-to-point send. */
305#ifdef CODI_REVERSE_TYPE
306 passivedouble* bufPD_P2PRecv{nullptr}; /*!< \brief Data structure for passivedouble point-to-point receive. */
307 passivedouble* bufPD_P2PSend{nullptr}; /*!< \brief Data structure for passivedouble point-to-point send. */
308#endif
309#ifdef USE_MIXED_PRECISION
310 su2mixedfloat* bufF_P2PRecv{nullptr}; /*!< \brief Data structure for su2mixedfloat point-to-point receive. */
311 su2mixedfloat* bufF_P2PSend{nullptr}; /*!< \brief Data structure for su2mixedfloat point-to-point send. */
312#endif
313 unsigned short* bufS_P2PRecv{nullptr}; /*!< \brief Data structure for unsigned long point-to-point receive. */
314 unsigned short* bufS_P2PSend{nullptr}; /*!< \brief Data structure for unsigned long point-to-point send. */
315 SU2_MPI::Request* req_P2PSend{nullptr}; /*!< \brief Data structure for point-to-point send requests. */
316 SU2_MPI::Request* req_P2PRecv{nullptr}; /*!< \brief Data structure for point-to-point recv requests. */
317
319 PassiveRequest* reqP_P2PSend{nullptr}; /*!< \brief Data structure for point-to-point send requests. */
320 PassiveRequest* reqP_P2PRecv{nullptr}; /*!< \brief Data structure for point-to-point recv requests. */
321
322 /*--- Data structures for periodic communications. ---*/
323
324 int maxCountPerPeriodicPoint{0}; /*!< \brief Maximum number of pieces of data sent per vertex in periodic comms. */
325 int nPeriodicSend{0}; /*!< \brief Number of sends during periodic comms. */
326 int nPeriodicRecv{0}; /*!< \brief Number of receives during periodic comms. */
328 nullptr}; /*!< \brief Data structure holding number of vertices for each send in periodic comms. */
330 nullptr}; /*!< \brief Data structure holding number of vertices for each recv in periodic comms. */
332 nullptr}; /*!< \brief Data structure holding the ranks of the neighbors for periodic send comms. */
334 nullptr}; /*!< \brief Data structure holding the ranks of the neighbors for periodic recv comms. */
335 map<int, int> PeriodicSend2Neighbor; /*!< \brief Data structure holding the reverse mapping of the ranks of the
336 neighbors for periodic send comms. */
337 map<int, int> PeriodicRecv2Neighbor; /*!< \brief Data structure holding the reverse mapping of the ranks of the
338 neighbors for periodic recv comms. */
340 nullptr}, /*!< \brief Data structure holding the local index of all vertices to be sent in periodic comms. */
341 *Local_Point_PeriodicRecv{nullptr}, /*!< \brief Data structure holding the local index of all vertices to be
342 received in periodic comms. */
343 *Local_Marker_PeriodicSend{nullptr}, /*!< \brief Data structure holding the local index of the periodic marker for
344 a particular vertex to be sent in periodic comms. */
345 *Local_Marker_PeriodicRecv{nullptr}; /*!< \brief Data structure holding the local index of the periodic marker for
346 a particular vertex to be received in periodic comms. */
347 su2double* bufD_PeriodicRecv{nullptr}; /*!< \brief Data structure for su2double periodic receive. */
348 su2double* bufD_PeriodicSend{nullptr}; /*!< \brief Data structure for su2double periodic send. */
349 unsigned short* bufS_PeriodicRecv{nullptr}; /*!< \brief Data structure for unsigned long periodic receive. */
350 unsigned short* bufS_PeriodicSend{nullptr}; /*!< \brief Data structure for unsigned long periodic send. */
351 SU2_MPI::Request* req_PeriodicSend{nullptr}; /*!< \brief Data structure for periodic send requests. */
352 SU2_MPI::Request* req_PeriodicRecv{nullptr}; /*!< \brief Data structure for periodic recv requests. */
353
354 /*--- Mesh quality metrics. ---*/
355
356 vector<su2double> Orthogonality; /*!< \brief Measure of dual CV orthogonality angle (0 to 90 deg., 90 being best). */
357 vector<su2double> Aspect_Ratio; /*!< \brief Measure of dual CV aspect ratio (max face area / min face area). */
358 vector<su2double>
359 Volume_Ratio; /*!< \brief Measure of dual CV volume ratio (max sub-element volume / min sub-element volume). */
360
361 const ColMajorMatrix<uint8_t>& CoarseGridColor = CoarseGridColor_; /*!< \brief Coarse grid levels, colorized. */
362
363 /*!
364 * \brief Constructor of the class.
365 */
366 CGeometry();
367
368 /*!
369 * \brief Constructor of the class.
370 */
371 CGeometry(CConfig* config, unsigned short nDim);
372
373 /*!
374 * \brief Destructor of the class.
375 */
376 virtual ~CGeometry();
377
378 /*!
379 * \brief Routine to launch non-blocking recvs only for all periodic communications.
380 * \brief Routine to set up persistent data structures for point-to-point MPI communications.
381 * \note This routine is called by any class that has loaded data into the generic communication buffers.
382 * \param[in] geometry - Geometrical definition of the problem.
383 * \param[in] config - Definition of the particular problem.
384 */
385 void PreprocessP2PComms(CGeometry* geometry, CConfig* config);
386
387 /*!
388 * \brief Routine to allocate buffers for point-to-point MPI communications. Also called to dynamically reallocate if
389 * not enough memory is found for comms during runtime. \param[in] val_countPerPoint - Maximum count of the data type
390 * per vertex in point-to-point comms, e.g., nPrimvarGrad*nDim.
391 */
392 void AllocateP2PComms(unsigned short val_countPerPoint);
393
394 /*!
395 * \brief Routine to launch non-blocking recvs only for all point-to-point communication with neighboring partitions.
396 * \note This routine is called by any class that has loaded data into the generic communication buffers.
397 * \param[in] geometry - Geometrical definition of the problem.
398 * \param[in] config - Definition of the particular problem.
399 * \param[in] commType - Enumerated type for the quantity to be communicated.
400 * \param[in] countPerPoint - Number of variables per point.
401 * \param[in] val_reverse - Boolean controlling forward or reverse communication between neighbors.
402 */
403 void PostP2PRecvs(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPoint,
404 bool val_reverse) const;
405
406 /*!
407 * \brief Routine to launch a single non-blocking send once the buffer is loaded for a point-to-point commucation.
408 * \note This routine is called by any class that has loaded data into the generic communication buffers.
409 * \param[in] geometry - Geometrical definition of the problem.
410 * \param[in] config - Definition of the particular problem.
411 * \param[in] commType - Enumerated type for the quantity to be communicated.
412 * \param[in] countPerPoint - Number of variables per point.
413 * \param[in] val_iMessage - Index of the message in the order they are stored.
414 * \param[in] val_reverse - Boolean controlling forward or reverse communication between neighbors.
415 */
416 void PostP2PSends(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPoint,
417 int val_iMessage, bool val_reverse) const;
418
419 /*!
420 * \brief Returns the COMM_TYPE enum for a given data type.
421 */
422 template <class T>
424 if constexpr (std::is_same_v<T, su2double>) {
425 return COMM_TYPE::DOUBLE;
426 } else if constexpr (std::is_same_v<T, passivedouble>) {
428 } else if constexpr (std::is_same_v<T, su2mixedfloat>) {
429 return COMM_TYPE::FLOAT;
430 } else {
431 static_assert(std::is_same_v<T, unsigned short>);
433 }
434 }
435
436 /*!
437 * \brief Returns the send buffer for a given data type.
438 */
439 template <class T>
440 auto* GetP2PSendBuf() const {
441 if constexpr (std::is_same_v<T, su2double>) {
442 return bufD_P2PSend;
443#ifdef CODI_REVERSE_TYPE
444 } else if constexpr (std::is_same_v<T, passivedouble>) {
445 return bufPD_P2PSend;
446#endif
447#ifdef USE_MIXED_PRECISION
448 } else if constexpr (std::is_same_v<T, su2mixedfloat>) {
449 return bufF_P2PSend;
450#endif
451 } else {
452 static_assert(std::is_same_v<T, unsigned short>);
453 return bufS_P2PSend;
454 }
455 }
456
457 /*!
458 * \brief Returns the receive buffer for a given data type.
459 */
460 template <class T>
461 auto* GetP2PRecvBuf() const {
462 if constexpr (std::is_same_v<T, su2double>) {
463 return bufD_P2PRecv;
464#ifdef CODI_REVERSE_TYPE
465 } else if constexpr (std::is_same_v<T, passivedouble>) {
466 return bufPD_P2PRecv;
467#endif
468#ifdef USE_MIXED_PRECISION
469 } else if constexpr (std::is_same_v<T, su2mixedfloat>) {
470 return bufF_P2PRecv;
471#endif
472 } else {
473 static_assert(std::is_same_v<T, unsigned short>);
474 return bufS_P2PRecv;
475 }
476 }
477
478 /*!
479 * \brief Returns the send requests for a given data type.
480 */
481 template <class T>
482 auto* GetP2PSendReq() const {
483 if constexpr (std::is_same_v<T, su2double>) {
484 return req_P2PSend;
485 } else if constexpr (std::is_same_v<T, passivedouble> || std::is_same_v<T, su2mixedfloat>) {
486 return reqP_P2PSend;
487 } else {
488 static_assert(std::is_same_v<T, unsigned short>);
489 return req_P2PSend;
490 }
491 }
492
493 /*!
494 * \brief Returns the receive requests for a given data type.
495 */
496 template <class T>
497 auto* GetP2PRecvReq() const {
498 if constexpr (std::is_same_v<T, su2double>) {
499 return req_P2PRecv;
500 } else if constexpr (std::is_same_v<T, passivedouble> || std::is_same_v<T, su2mixedfloat>) {
501 return reqP_P2PRecv;
502 } else {
503 static_assert(std::is_same_v<T, unsigned short>);
504 return req_P2PRecv;
505 }
506 }
507
508 /*!
509 * \brief Routine to set up persistent data structures for periodic communications.
510 * \param[in] geometry - Geometrical definition of the problem.
511 * \param[in] config - Definition of the particular problem.
512 */
513 void PreprocessPeriodicComms(CGeometry* geometry, CConfig* config);
514
515 /*!
516 * \brief Routine to allocate buffers for periodic communications. Also called to dynamically reallocate if not enough
517 * memory is found for comms during runtime. \param[in] val_countPerPeriodicPoint - Maximum count of the data type per
518 * vertex in periodic comms, e.g., nPrimvarGrad*nDim.
519 */
520 void AllocatePeriodicComms(unsigned short val_countPerPeriodicPoint);
521
522 /*!
523 * \brief Routine to launch non-blocking recvs only for all periodic communication with neighboring partitions.
524 * \note This routine is called by any class that has loaded data into the generic communication buffers.
525 * \param[in] geometry - Geometrical definition of the problem.
526 * \param[in] config - Definition of the particular problem.
527 * \param[in] commType - Enumerated type for the quantity to be communicated.
528 * \param[in] countPerPeriodicPoint - Number of variables per point.
529 */
530 void PostPeriodicRecvs(CGeometry* geometry, const CConfig* config, COMM_TYPE commType,
531 unsigned short countPerPeriodicPoint);
532
533 /*!
534 * \brief Routine to launch a single non-blocking send once the buffer is loaded for a periodic commucation.
535 * \note This routine is called by any class that has loaded data into the generic communication buffers.
536 * \param[in] geometry - Geometrical definition of the problem.
537 * \param[in] config - Definition of the particular problem.
538 * \param[in] commType - Enumerated type for the quantity to be communicated.
539 * \param[in] countPerPeriodicPoint - Number of variables per point.
540 * \param[in] val_iMessage - Index of the message in the order they are stored.
541 */
542 void PostPeriodicSends(CGeometry* geometry, const CConfig* config, COMM_TYPE commType,
543 unsigned short countPerPeriodicPoint, int val_iMessage) const;
544
545 /*!
546 * \brief Helper function to define the type and number of variables per point for each communication type.
547 * \param[in] config - Definition of the particular problem.
548 * \param[in] commType - Enumerated type for the quantity to be communicated.
549 * \param[out] COUNT_PER_POINT - Number of communicated variables per point.
550 * \param[out] MPI_TYPE - Enumerated type for the datatype of the quantity to be communicated.
551 */
552 void GetCommCountAndType(const CConfig* config, MPI_QUANTITIES commType, unsigned short& COUNT_PER_POINT,
553 COMM_TYPE& MPI_TYPE) const;
554
555 /*!
556 * \brief Routine to load a geometric quantity into the data structures for MPI point-to-point communication and to
557 * launch non-blocking sends and recvs for all point-to-point communication with neighboring partitions.
558 * \param[in] geometry - Geometrical definition of the problem.
559 * \param[in] config - Definition of the particular problem.
560 * \param[in] commType - Enumerated type for the quantity to be communicated.
561 */
562 void InitiateComms(CGeometry* geometry, const CConfig* config, MPI_QUANTITIES commType) const;
563
564 /*!
565 * \brief Routine to complete the set of non-blocking communications launched by InitiateComms() and unpacking of the
566 * data into the geometry class. \param[in] geometry - Geometrical definition of the problem. \param[in] config -
567 * Definition of the particular problem. \param[in] commType - Enumerated type for the quantity to be unpacked.
568 */
569 void CompleteComms(CGeometry* geometry, const CConfig* config, MPI_QUANTITIES commType);
570
571 /*!
572 * \brief Get number of coordinates.
573 * \return Number of coordinates.
574 */
575 inline unsigned short GetnDim() const { return nDim; }
576
577 /*!
578 * \brief Get number of zones.
579 * \return Number of zones.
580 */
581 inline unsigned short GetnZone() const { return nZone; }
582
583 /*!
584 * \brief Get number of points.
585 * \return Number of points.
586 */
587 inline unsigned long GetnPoint() const { return nPoint; }
588
589 /*!
590 * \brief Get number of real points (that belong to the domain).
591 * \return Number of real points.
592 */
593 inline unsigned long GetnPointDomain() const { return nPointDomain; }
594
595 /*!
596 * \brief Retrieve total number of nodes in a simulation across all processors (including halos).
597 * \return Total number of nodes in a simulation across all processors (including halos).
598 */
599 inline unsigned long GetGlobal_nPoint() const { return Global_nPoint; }
600
601 /*!
602 * \brief Retrieve total number of nodes in a simulation across all processors (excluding halos).
603 * \return Total number of nodes in a simulation across all processors (excluding halos).
604 */
605 inline unsigned long GetGlobal_nPointDomain() const { return Global_nPointDomain; }
606
607 /*!
608 * \brief Get number of elements.
609 * \return Number of elements.
610 */
611 inline unsigned long GetnElem() const { return nElem; }
612
613 /*!
614 * \brief Get number of edges.
615 * \return Number of edges.
616 */
617 inline unsigned long GetnEdge() const { return nEdge; }
618
619 /*!
620 * \brief Get number of markers.
621 * \return Number of markers.
622 */
623 inline unsigned short GetnMarker() const { return nMarker; }
624
625 /*!
626 * \brief Get number of vertices.
627 * \param[in] val_marker - Marker of the boundary.
628 * \return Number of vertices.
629 */
630 inline const su2double* GetSpanWiseValue(unsigned short val_marker) const { return SpanWiseValue[val_marker - 1]; }
631
632 /*!
633 * \brief Get number of vertices.
634 * \param[in] val_marker - Marker of the boundary.
635 * \return Number of vertices.
636 */
637 inline unsigned long GetnVertex(unsigned short val_marker) const { return nVertex[val_marker]; }
638
639 /*!
640 * \brief Get number of span wise section.
641 * \param[in] marker_flag - flag of the turbomachinery boundary.
642 * \return Number of span wise section.
643 */
644 inline unsigned short GetnSpanWiseSections(unsigned short marker_flag) const {
645 return nSpanWiseSections[marker_flag - 1];
646 }
647
648 /*!
649 * \brief Get number of vertices.
650 * \param[in] val_marker - Marker of the boundary.
651 * \return Number of vertices.
652 */
653 inline unsigned long GetnVertexSpan(unsigned short val_marker, unsigned short val_span) const {
654 return nVertexSpan[val_marker][val_span];
655 }
656
657 /*!
658 * \brief Get number of frequencies per span for NRBC.
659 * \param[in] val_marker - Marker of the boundary.
660 * \return Number of frequencies for NRBC.
661 */
662 inline unsigned long GetnFreqSpan(unsigned short val_marker, unsigned short val_span) const {
663 return (nTotVertexSpan[val_marker][val_span] / 2 - 1);
664 }
665
666 /*!
667 * \brief Get number of vertices.
668 * \param[in] val_marker - Marker of the boundary.
669 * \return Number of vertices.
670 */
671 inline unsigned long GetnVertexSpanMax(unsigned short marker_flag) const { return nVertexSpanMax[marker_flag]; }
672
673 /*!
674 * \brief Get number of max frequencies for initializing the Fourier Coefficient for NR BC.
675 * \param[in] marker_flag - Marker of the boundary.
676 * \return Number of frequencies.
677 */
678 inline unsigned long GetnFreqSpanMax(unsigned short marker_flag) const {
679 return (nVertexSpanMax[marker_flag] / 2 - 1);
680 }
681
682 /*!
683 * \brief Get number of vertices.
684 * \param[in] val_marker - Marker of the boundary.
685 * \return Number of vertices.
686 */
687 inline void SetnVertexSpanMax(unsigned short marker_flag, unsigned long nVertMax) {
688 nVertexSpanMax[marker_flag] = nVertMax;
689 }
690
691 /*!
692 * \brief Get the edge index from using the nodes of the edge.
693 * \param[in] first_point - First point of the edge.
694 * \param[in] second_point - Second point of the edge.
695 * \param[in] error - Throw error if edge does not exist.
696 * \return Index of the edge.
697 */
698 inline long FindEdge(unsigned long first_point, unsigned long second_point, bool error = true) const {
699 for (unsigned short iNode = 0; iNode < nodes->GetnPoint(first_point); iNode++) {
700 auto iPoint = nodes->GetPoint(first_point, iNode);
701 if (iPoint == second_point) return nodes->GetEdge(first_point, iNode);
702 }
703 if (error) {
704 char buf[100];
705 SPRINTF(buf, "Can't find the edge that connects %lu and %lu.", first_point, second_point);
707 }
708 return -1;
709 }
710
711 /*!
712 * \brief Get the edge index from using the nodes of the edge.
713 * \param[in] first_point - First point of the edge.
714 * \param[in] second_point - Second point of the edge.
715 * \return Index of the edge.
716 */
717 inline bool CheckEdge(unsigned long first_point, unsigned long second_point) const {
718 return FindEdge(first_point, second_point, false) >= 0;
719 }
720
721 /*!
722 * \brief Create a file for testing the geometry.
723 */
724 void TestGeometry() const;
725
726 /*!
727 * \brief A virtual member.
728 * \param[in] val_nmarker - Number of markers.
729 */
730 inline void SetnMarker(unsigned short val_nmarker) { nMarker = val_nmarker; }
731
732 /*!
733 * \brief Set the number of dimensions of the problem.
734 * \param[in] val_nDim - Number of dimensions.
735 */
736 inline void SetnDim(unsigned short val_nDim) { nDim = val_nDim; }
737
738 /*!
739 * \brief Get the index of a marker.
740 * \param[in] val_marker - Marker of the boundary.
741 * \return Index of the marker in the grid defintion.
742 */
743 inline string GetMarker_Tag(unsigned short val_marker) const { return Tag_to_Marker[val_marker]; }
744
745 /*!
746 * \brief Set index of a marker.
747 * \param[in] val_marker - Marker of the boundary.
748 * \param[in] val_index - Index of the marker.
749 */
750 inline void SetMarker_Tag(unsigned short val_marker, string val_index) {
751 Tag_to_Marker[val_marker] = std::move(val_index);
752 }
753
754 /*!
755 * \brief Set the number of boundary elements.
756 * \param[in] val_marker - Marker of the boundary.
757 * \param[in] val_nelem_bound - Number of boundary elements.
758 */
759 inline void SetnElem_Bound(unsigned short val_marker, unsigned long val_nelem_bound) {
760 nElem_Bound[val_marker] = val_nelem_bound;
761 }
762
763 /*!
764 * \brief Set the number of grid points.
765 * \param[in] val_npoint - Number of grid points.
766 */
767 inline void SetnPoint(unsigned long val_npoint) { nPoint = val_npoint; }
768
769 /*!
770 * \brief Set the number of grid points in the domain.
771 * \param[in] val_npoint - Number of grid points in the domain.
772 */
773 inline void SetnPointDomain(unsigned long val_npoint) { nPointDomain = val_npoint; }
774
775 /*!
776 * \brief Set the value of the total number of points globally in the simulation.
777 * \param[in] val_global_npoint - Global number of points in the mesh (excluding halos).
778 */
779 void SetGlobal_nPointDomain(unsigned long val_global_npoint) { Global_nPointDomain = val_global_npoint; }
780
781 /*!
782 * \brief Set the number of grid elements.
783 * \param[in] val_nelem - Number of grid elements.
784 */
785 inline void SetnElem(unsigned long val_nelem) { nElem = val_nelem; }
786
787 /*!
788 * \brief Get the number of boundary elements.
789 * \param[in] val_marker - Marker of the boundary.
790 */
791 inline unsigned long GetnElem_Bound(unsigned short val_marker) const { return nElem_Bound[val_marker]; }
792
793 /*!
794 * \brief Get the number of elements in vtk fortmat.
795 */
796 inline unsigned long GetMax_GlobalPoint() const { return Max_GlobalPoint; }
797
798 /*!
799 * \brief Finds face of element.
800 * \param[in] first_elem - Identification of the first element.
801 * \param[in] second_elem - Identification of the second element.
802 * \param[in] face_first_elem - Index of the common face for the first element.
803 * \param[in] face_second_elem - Index of the common face for the second element.
804 */
805 inline virtual bool FindFace(unsigned long first_elem, unsigned long second_elem, unsigned short& face_first_elem,
806 unsigned short& face_second_elem) {
807 return false;
808 }
809
810 /*!
811 * \brief Sets area to be positive in Z direction.
812 * \param[in] config - Definition of the particular problem.
813 */
814 inline virtual void SetPositive_ZArea(CConfig* config) {}
815
816 /*!
817 * \brief Set connectivity between points.
818 */
819 inline virtual void SetPoint_Connectivity() {}
820
821 /*!
822 * \brief Orders the RCM.
823 * \param[in] config - Definition of the particular problem.
824 */
825 inline virtual void SetRCM_Ordering(CConfig* config) {}
826
827 /*!
828 * \brief Connects elements .
829 */
830 inline virtual void SetElement_Connectivity() {}
831
832 /*!
833 * \brief Sets the edges of an elemment.
834 */
835 void SetEdges();
836
837 /*!
838 * \brief Sets the faces of an element..
839 */
840 void SetFaces();
841
842 /*!
843 * \brief Sets the boundary volume.
844 */
845 inline virtual void SetBoundVolume() {}
846
847 /*!
848 * \brief Sets the vertices.
849 * \param[in] config - Definition of the particular problem.
850 */
851 inline virtual void SetVertex(const CConfig* config) {}
852
853 /*!
854 * \brief Computes the N span.
855 * \param[in] config - Definition of the particular problem.
856 * \param[in] val_iZone - Zone of the problem
857 * \param[in] marker_flag - Marker being used
858 * \param[in] allocate
859 */
860 inline virtual void ComputeNSpan(CConfig* config, unsigned short val_iZone, unsigned short marker_flag,
861 bool allocate) {}
862
863 /*!
864 * \brief Set vertices for turbomachinery problems.
865 * \param[in] config - Definition of the particular problem.
866 * \param[in] val_iZone - Zone of the problem
867 * \param[in] marker_flag - Marker being used
868 * \param[in] allocate
869 */
870 inline virtual void SetTurboVertex(CConfig* config, unsigned short val_iZone, unsigned short marker_flag,
871 bool allocate) {}
872
873 /*!
874 * \brief A virtual member.
875 * \param[in] config - Definition of the particular problem.
876 * \param[in] val_iZone - Zone of the problem
877 * \param[in] marker_flag - Marker being used
878 */
879 inline virtual void UpdateTurboVertex(CConfig* config, unsigned short val_iZone, unsigned short marker_flag) {}
880
881 /*!
882 * \brief A virtual member.
883 * \param[in] config - Definition of the particular problem.
884 * \param[in] val_iZone - Zone of the problem
885 * \param[in] marker_flag - Marker being used
886 * \param[in] allocate
887 */
888 inline virtual void SetAvgTurboValue(CConfig* config, unsigned short val_iZone, unsigned short marker_flag,
889 bool allocate) {}
890
891 /*!
892 * \brief A virtual member.
893 * \param[in] config - Definition of the particular problem.
894 * \param[in] allocate
895 */
896 inline virtual void GatherInOutAverageValues(CConfig* config, bool allocate) {}
897
898 /*!
899 * \brief Store all the turboperformance in the solver in final zone.
900 * \param[in] donor_geometry - Solution from the donor mesh.
901 * \param[in] target_geometry - Solution from the target mesh.
902 * \param[in] donorZone - counter of the donor solution
903 */
904 inline virtual void SetAvgTurboGeoValues(const CConfig* donor_config, CGeometry* donor_geometry,
905 unsigned short donorZone){};
906
907 /*!
908 * \brief Set max length.
909 * \param[in] config - Definition of the particular problem.
910 */
911 inline virtual void SetMaxLength(CConfig* config) {}
912
913 /*!
914 * \brief Sets control volume.
915 * \param[in] config - Definition of the particular problem.
916 * \param[in] action - Allocate or not the new elements.
917 */
918 inline virtual void SetControlVolume(CConfig* config, unsigned short action) {}
919
920 /*!
921 * \brief A virtual member.
922 * \param[in] config - Definition of the particular problem.
923 */
924 inline virtual void VisualizeControlVolume(const CConfig* config) const {}
925
926 /*!
927 * \brief A virtual member.
928 * \param[in] config - Definition of the particular problem.
929 */
930 inline virtual void MatchActuator_Disk(const CConfig* config) {}
931
932 /*!
933 * \brief Match periodic boundary points using coordinate-based matching.
934 * \details Gathers coordinates from all ranks via MPI, applies the rotation/translation
935 * for the periodic pair, and finds the nearest neighbor. Works on both fine and coarse grids.
936 * \param[in] config - Definition of the particular problem.
937 * \param[in] val_periodic - Index of the periodic marker pair.
938 */
939 virtual void MatchPeriodic(const CConfig* config, unsigned short val_periodic);
940
941 /*!
942 * \brief A virtual member.
943 * \param[in] config - Definition of the particular problem.
944 * \param[in] action - Allocate or not the new elements.
945 */
946 inline virtual void SetBoundControlVolume(const CConfig* config, unsigned short action) {}
947
948 /*!
949 * \brief Computes modified normals at intersecting symmetry planes.
950 * \param[in] config - Definition of the particular problem.
951 */
952 void ComputeModifiedSymmetryNormals(const CConfig* config);
953
954 /*!
955 * \brief A virtual member.
956 * \param[in] config_filename - Name of the file where the tecplot information is going to be stored.
957 */
958 inline virtual void SetTecPlot(char config_filename[MAX_STRING_SIZE], bool new_file) {}
959
960 /*!
961 * \brief A virtual member.
962 * \param[in] mesh_filename - Name of the file where the tecplot information is going to be stored.
963 * \param[in] new_file - Boolean to decide if aopen a new file or add to a old one
964 * \param[in] config - Definition of the particular problem.
965 */
966 inline virtual void SetBoundTecPlot(char mesh_filename[MAX_STRING_SIZE], bool new_file, CConfig* config) {}
967
968 /*!
969 * \brief A virtual member.
970 * \param[in] config - Definition of the particular problem.
971 */
972 inline virtual void Check_IntElem_Orientation(const CConfig* config) {}
973
974 /*!
975 * \brief A virtual member.
976 * \param[in] config - Definition of the particular problem.
977 */
978 inline virtual void Check_BoundElem_Orientation(const CConfig* config) {}
979
980 /*!
981 * \brief A virtual member.
982 * \param[in] config - Definition of the particular problem.
983 */
984 inline virtual void SetColorGrid(CConfig* config) {}
985
986 /*!
987 * \brief A virtual member.
988 * \param[in] config - Definition of the particular problem.
989 */
990 inline virtual void SetColorGrid_Parallel(const CConfig* config) {}
991
992 /*!
993 * \brief A virtual member.
994 * \param[in] config - Definition of the particular problem.
995 */
996 inline virtual void SetColorFEMGrid_Parallel(CConfig* config) {}
997
998 /*!
999 * \brief A virtual member.
1000 * \param[in] config - Definition of the particular problem.
1001 */
1002 inline virtual void DivideConnectivity(CConfig* config, unsigned short Elem_Type) {}
1003
1004 /*!
1005 * \brief A virtual member.
1006 * \param[in] geometry - Geometrical definition of the problem.
1007 * \param[in] config - Definition of the particular problem.
1008 * \param[in] val_domain - Number of domains for parallelization purposes.
1009 */
1010 inline virtual void SetSendReceive(const CConfig* config) {}
1011
1012 /*!
1013 * \brief A virtual member.
1014 * \param[in] geometry - Geometrical definition of the problem.
1015 * \param[in] config - Definition of the particular problem.
1016 * \param[in] val_domain - Number of domains for parallelization purposes.
1017 */
1018 inline virtual void SetBoundaries(CConfig* config) {}
1019
1020 /*!
1021 * \brief A virtual member.
1022 * \param[in] fine_grid - Geometrical definition of the problem.
1023 */
1024 inline virtual void SetCoord(const CGeometry* fine_grid) {}
1025
1026 /*!
1027 * \brief A virtual member.
1028 * \param[in] fine_grid - Geometrical definition of the problem.
1029 * \param[in] val_marker - Index of the boundary marker.
1030 */
1031 inline virtual void SetMultiGridWallHeatFlux(const CGeometry* fine_grid, unsigned short val_marker) {}
1032
1033 /*!
1034 * \brief A virtual member.
1035 * \param[in] fine_grid - Geometrical definition of the problem.
1036 * \param[in] val_marker - Index of the boundary marker.
1037 */
1038 inline virtual void SetMultiGridWallTemperature(const CGeometry* fine_grid, unsigned short val_marker) {}
1039
1040 /*!
1041 * \brief A virtual member.
1042 * \param[in] fine_grid - Geometrical definition of the child grid (for multigrid).
1043 */
1044 inline virtual void SetPoint_Connectivity(const CGeometry* fine_grid) {}
1045
1046 /*!
1047 * \brief A virtual member.
1048 * \param[in] fine_grid - Geometrical definition of the problem.
1049 * \param[in] config - Definition of the particular problem.
1050 */
1051 inline virtual void SetVertex(const CGeometry* fine_grid, const CConfig* config) {}
1052
1053 /*!
1054 * \brief A virtual member.
1055 * \param[in] fine_grid - Geometrical definition of the problem.
1056 * \param[in] action - Allocate or not the new elements.
1057 */
1058 inline virtual void SetControlVolume(const CGeometry* fine_grid, unsigned short action) {}
1059
1060 /*!
1061 * \brief A virtual member.
1062 * \param[in] fine_grid - Geometrical definition of the problem.
1063 * \param[in] config - Definition of the particular problem.
1064 * \param[in] action - Allocate or not the new elements.
1065 */
1066 inline virtual void SetBoundControlVolume(const CGeometry* fine_grid, const CConfig* config, unsigned short action) {}
1067
1068 /*!
1069 * \brief A virtual member.
1070 * \param[in] config - Definition of the particular problem.
1071 */
1072 inline virtual void SetBoundSensitivity(CConfig* config) {}
1073
1074 /*!
1075 * \brief Set the data containers for customized boundary conditions.
1076 * \param[in] config - Definition of the particular problem.
1077 */
1078 void SetCustomBoundary(CConfig* config);
1079
1080 /*!
1081 * \brief General interface for setting the velocity in the geometry during motion ramps
1082 * \param[in] config - config class
1083 * \param[in] ramp_flag - flag for type of ramp
1084 * \param[in] print - bool to print update to screen
1085 */
1086 void SetVelocity(CConfig* config, bool print) {
1088 SetRotationalVelocity(config, print);
1090 SetTranslationalVelocity(config, print);
1091 };
1092
1093 /*!
1094 * \brief Set cartesian grid velocity based on rotational speed and axis.
1095 * \param[in] config - Definition of the particular problem.
1096 * \param[in] print - Display information on screen.
1097 */
1098 void SetRotationalVelocity(const CConfig* config, bool print = false);
1099
1100 /*!
1101 * \brief Set the rotational velocity of the points on the shroud markers to 0.
1102 * \param[in] config - Definition of the particular problem.
1103 */
1104 void SetShroudVelocity(const CConfig* config);
1105
1106 /*!
1107 * \brief Set the translational velocity at each node.
1108 * \param[in] config - Definition of the particular problem.
1109 * \param[in] print - Display information on screen.
1110 */
1111 void SetTranslationalVelocity(const CConfig* config, bool print = false);
1112
1113 /*!
1114 * \brief Set the translational/rotational velocity for all moving walls.
1115 * \param[in] config - Definition of the particular problem.
1116 * \param[in] print - Display information on screen.
1117 */
1118 void SetWallVelocity(const CConfig* config, bool print = false);
1119
1120 /*!
1121 * \brief Set the grid velocity via finite differencing at each node.
1122 * \param[in] config - Definition of the particular problem.
1123 */
1124 void SetGridVelocity(const CConfig* config);
1125
1126 /*!
1127 * \brief A virtual member.
1128 * \param[in] fine_grid - Geometry of the fine mesh.
1129 */
1130 inline virtual void SetRestricted_GridVelocity(const CGeometry* fine_grid) {}
1131
1132 /*!
1133 * \brief Compute the surface area of all global markers.
1134 * \param[in] config - Definition of the particular problem.
1135 */
1136 void ComputeSurfaceAreaCfgFile(const CConfig* config);
1137
1138 /*!
1139 * \brief Get global Surface Area to a local marker.
1140 * \param[in] config - Definition of the particular problem.
1141 * \param[in] val_marker - Local surface marker.
1142 * \return Global Surface Area to the local marker
1143 */
1144 su2double GetSurfaceArea(const CConfig* config, unsigned short val_marker) const;
1145
1146 /*!
1147 * \brief Check if a boundary is straight(2D) / plane(3D) for EULER_WALL and SYMMETRY_PLANE
1148 * only and store the information in boundIsStraight. For all other boundary types
1149 * this will return false and could therfore be wrong. Used ultimately for BC_Slip_Wall.
1150 * \param[in] config - Definition of the particular problem.
1151 * \param[in] print_on_screen - Boolean whether to print result on screen.
1152 */
1153 void ComputeSurfStraightness(const CConfig* config, bool print_on_screen);
1154
1155 /*!
1156 * \brief Find and store all vertices on a sharp corner in the geometry.
1157 * \param[in] config - Definition of the particular problem.
1158 */
1159 void ComputeSurf_Curvature(CConfig* config);
1160
1161 /*!
1162 * \brief A virtual member.
1163 * \param[in] config - Definition of the particular problem.
1164 */
1165 void ComputeAirfoil_Section(su2double* Plane_P0, su2double* Plane_Normal, su2double MinXCoord, su2double MaxXCoord,
1166 su2double MinYCoord, su2double MaxYCoord, su2double MinZCoord, su2double MaxZCoord,
1167 const su2double* FlowVariable, vector<su2double>& Xcoord_Airfoil,
1168 vector<su2double>& Ycoord_Airfoil, vector<su2double>& Zcoord_Airfoil,
1169 vector<su2double>& Variable_Airfoil, bool original_surface, CConfig* config);
1170
1171 /*!
1172 * \brief A virtual member.
1173 */
1174 virtual su2double Compute_MaxThickness(su2double* Plane_P0, su2double* Plane_Normal, CConfig* config,
1175 vector<su2double>& Xcoord_Airfoil, vector<su2double>& Ycoord_Airfoil,
1176 vector<su2double>& Zcoord_Airfoil) {
1177 return 0.0;
1178 }
1179
1180 /*!
1181 * \brief A virtual member.
1182 */
1183 virtual su2double Compute_Twist(su2double* Plane_P0, su2double* Plane_Normal, vector<su2double>& Xcoord_Airfoil,
1184 vector<su2double>& Ycoord_Airfoil, vector<su2double>& Zcoord_Airfoil) {
1185 return 0.0;
1186 }
1187
1188 /*!
1189 * \brief A virtual member.
1190 */
1191 virtual su2double Compute_Chord(su2double* Plane_P0, su2double* Plane_Normal, vector<su2double>& Xcoord_Airfoil,
1192 vector<su2double>& Ycoord_Airfoil, vector<su2double>& Zcoord_Airfoil) {
1193 return 0.0;
1194 }
1195
1196 /*!
1197 * \brief A virtual member.
1198 */
1199 virtual su2double Compute_Width(su2double* Plane_P0, su2double* Plane_Normal, vector<su2double>& Xcoord_Airfoil,
1200 vector<su2double>& Ycoord_Airfoil, vector<su2double>& Zcoord_Airfoil) {
1201 return 0.0;
1202 }
1203
1204 /*!
1205 * \brief A virtual member.
1206 */
1207 virtual su2double Compute_WaterLineWidth(su2double* Plane_P0, su2double* Plane_Normal, CConfig* config,
1208 vector<su2double>& Xcoord_Airfoil, vector<su2double>& Ycoord_Airfoil,
1209 vector<su2double>& Zcoord_Airfoil) {
1210 return 0.0;
1211 }
1212
1213 /*!
1214 * \brief A virtual member.
1215 */
1216 virtual su2double Compute_Height(su2double* Plane_P0, su2double* Plane_Normal, vector<su2double>& Xcoord_Airfoil,
1217 vector<su2double>& Ycoord_Airfoil, vector<su2double>& Zcoord_Airfoil) {
1218 return 0.0;
1219 }
1220
1221 /*!
1222 * \brief A virtual member.
1223 */
1224 virtual su2double Compute_LERadius(su2double* Plane_P0, su2double* Plane_Normal, vector<su2double>& Xcoord_Airfoil,
1225 vector<su2double>& Ycoord_Airfoil, vector<su2double>& Zcoord_Airfoil) {
1226 return 0.0;
1227 }
1228
1229 /*!
1230 * \brief A virtual member.
1231 */
1232 virtual su2double Compute_Thickness(su2double* Plane_P0, su2double* Plane_Normal, su2double Location, CConfig* config,
1233 vector<su2double>& Xcoord_Airfoil, vector<su2double>& Ycoord_Airfoil,
1234 vector<su2double>& Zcoord_Airfoil, su2double& ZLoc) {
1235 return 0.0;
1236 }
1237
1238 /*!
1239 * \brief A virtual member.
1240 */
1241 virtual su2double Compute_Area(su2double* Plane_P0, su2double* Plane_Normal, CConfig* config,
1242 vector<su2double>& Xcoord_Airfoil, vector<su2double>& Ycoord_Airfoil,
1243 vector<su2double>& Zcoord_Airfoil) {
1244 return 0.0;
1245 }
1246
1247 /*!
1248 * \brief A virtual member.
1249 */
1250 virtual su2double Compute_Length(su2double* Plane_P0, su2double* Plane_Normal, CConfig* config,
1251 vector<su2double>& Xcoord_Airfoil, vector<su2double>& Ycoord_Airfoil,
1252 vector<su2double>& Zcoord_Airfoil) {
1253 return 0.0;
1254 }
1255
1256 /*!
1257 * \brief A virtual member.
1258 */
1259 virtual void Compute_Wing_LeadingTrailing(su2double* LeadingEdge, su2double* TrailingEdge, su2double* Plane_P0,
1260 su2double* Plane_Normal, vector<su2double>& Xcoord_Airfoil,
1261 vector<su2double>& Ycoord_Airfoil, vector<su2double>& Zcoord_Airfoil) {}
1262
1263 /*!
1264 * \brief A virtual member.
1265 */
1266 virtual void Compute_Fuselage_LeadingTrailing(su2double* LeadingEdge, su2double* TrailingEdge, su2double* Plane_P0,
1267 su2double* Plane_Normal, vector<su2double>& Xcoord_Airfoil,
1268 vector<su2double>& Ycoord_Airfoil, vector<su2double>& Zcoord_Airfoil) {}
1269
1270 /*!
1271 * \brief A virtual member.
1272 */
1273 virtual su2double Compute_Dihedral(su2double* LeadingEdge_im1, su2double* TrailingEdge_im1, su2double* LeadingEdge_i,
1274 su2double* TrailingEdge_i) {
1275 return 0.0;
1276 }
1277
1278 /*!
1279 * \brief A virtual member.
1280 */
1281 virtual su2double Compute_Curvature(su2double* LeadingEdge_im1, su2double* TrailingEdge_im1, su2double* LeadingEdge_i,
1282 su2double* TrailingEdge_i, su2double* LeadingEdge_ip1,
1283 su2double* TrailingEdge_ip1) {
1284 return 0.0;
1285 }
1286
1287 /*!
1288 * \brief A virtual member.
1289 */
1290 virtual void Compute_Wing(CConfig* config, bool original_surface, su2double& Wing_Volume,
1291 su2double& Wing_MinMaxThickness, su2double& Wing_MaxMaxThickness, su2double& Wing_MinChord,
1292 su2double& Wing_MaxChord, su2double& Wing_MinLERadius, su2double& Wing_MaxLERadius,
1293 su2double& Wing_MinToC, su2double& Wing_MaxToC, su2double& Wing_ObjFun_MinToC,
1294 su2double& Wing_MaxTwist, su2double& Wing_MaxCurvature, su2double& Wing_MaxDihedral) {}
1295
1296 /*!
1297 * \brief A virtual member.
1298 */
1299 virtual void Compute_Fuselage(CConfig* config, bool original_surface, su2double& Fuselage_Volume,
1300 su2double& Fuselage_WettedArea, su2double& Fuselage_MinWidth,
1301 su2double& Fuselage_MaxWidth, su2double& Fuselage_MinWaterLineWidth,
1302 su2double& Fuselage_MaxWaterLineWidth, su2double& Fuselage_MinHeight,
1303 su2double& Fuselage_MaxHeight, su2double& Fuselage_MaxCurvature) {}
1304
1305 /*!
1306 * \brief A virtual member.
1307 */
1308 virtual void Compute_Nacelle(CConfig* config, bool original_surface, su2double& Nacelle_Volume,
1309 su2double& Nacelle_MinMaxThickness, su2double& Nacelle_MaxMaxThickness,
1310 su2double& Nacelle_MinChord, su2double& Nacelle_MaxChord, su2double& Nacelle_MinLERadius,
1311 su2double& Nacelle_MaxLERadius, su2double& Nacelle_MinToC, su2double& Nacelle_MaxToC,
1312 su2double& Nacelle_ObjFun_MinToC, su2double& Nacelle_MaxTwist) {}
1313
1314 /*!
1315 * \brief A virtual member.
1316 * \param[in] config - Definition of the particular problem.
1317 */
1318 inline virtual void FindNormal_Neighbor(const CConfig* config) {}
1319
1320 /*!
1321 * \brief A virtual member.
1322 */
1323 inline virtual void SetGlobal_to_Local_Point() {}
1324
1325 /*!
1326 * \brief A virtual member.
1327 * \param[in] val_ipoint - Global point.
1328 * \return Local index that correspond with the global index.
1329 */
1330 inline virtual long GetGlobal_to_Local_Point(unsigned long val_ipoint) const { return 0; }
1331
1332 /*!
1333 * \brief Retrieve total number of elements in a simulation across all processors.
1334 * \return Total number of elements in a simulation across all processors.
1335 */
1336 inline unsigned long GetGlobal_nElem() const { return Global_nElem; }
1337
1338 /*!
1339 * \brief Retrieve total number of elements in a simulation across all processors (excluding halos).
1340 * \return Total number of elements in a simulation across all processors (excluding halos).
1341 */
1342 inline unsigned long GetGlobal_nElemDomain() const { return Global_nElemDomain; }
1343
1344 /*!
1345 * \brief Retrieve total number of triangular elements in a simulation across all processors.
1346 * \return Total number of line elements in a simulation across all processors.
1347 */
1348 inline unsigned long GetGlobal_nElemLine() const { return Global_nelem_edge; }
1349
1350 /*!
1351 * \brief Retrieve total number of triangular elements in a simulation across all processors.
1352 * \return Total number of triangular elements in a simulation across all processors.
1353 */
1354 inline unsigned long GetGlobal_nElemTria() const { return Global_nelem_triangle; }
1355
1356 /*!
1357 * \brief Retrieve total number of quadrilateral elements in a simulation across all processors.
1358 * \return Total number of quadrilateral elements in a simulation across all processors.
1359 */
1360 inline unsigned long GetGlobal_nElemQuad() const { return Global_nelem_quad; }
1361
1362 /*!
1363 * \brief Retrieve total number of tetrahedral elements in a simulation across all processors.
1364 * \return Total number of tetrahedral elements in a simulation across all processors.
1365 */
1366 inline unsigned long GetGlobal_nElemTetr() const { return Global_nelem_tetra; }
1367
1368 /*!
1369 * \brief Retrieve total number of hexahedral elements in a simulation across all processors.
1370 * \return Total number of hexahedral elements in a simulation across all processors.
1371 */
1372 inline unsigned long GetGlobal_nElemHexa() const { return Global_nelem_hexa; }
1373
1374 /*!
1375 * \brief Retrieve total number of prism elements in a simulation across all processors.
1376 * \return Total number of prism elements in a simulation across all processors.
1377 */
1378 inline unsigned long GetGlobal_nElemPris() const { return Global_nelem_prism; }
1379
1380 /*!
1381 * \brief Retrieve total number of pyramid elements in a simulation across all processors.
1382 * \return Total number of pyramid elements in a simulation across all processors.
1383 */
1384 inline unsigned long GetGlobal_nElemPyra() const { return Global_nelem_pyramid; }
1385
1386 /*!
1387 * \brief Get number of triangular elements.
1388 * \return Number of line elements.
1389 */
1390 inline unsigned long GetnElemLine() const { return nelem_edge; }
1391
1392 /*!
1393 * \brief Get number of triangular elements.
1394 * \return Number of triangular elements.
1395 */
1396 inline unsigned long GetnElemTria() const { return nelem_triangle; }
1397
1398 /*!
1399 * \brief Get number of quadrilateral elements.
1400 * \return Number of quadrilateral elements.
1401 */
1402 inline unsigned long GetnElemQuad() const { return nelem_quad; }
1403
1404 /*!
1405 * \brief Get number of tetrahedral elements.
1406 * \return Number of tetrahedral elements.
1407 */
1408 inline unsigned long GetnElemTetr() const { return nelem_tetra; }
1409
1410 /*!
1411 * \brief Get number of hexahedral elements.
1412 * \return Number of hexahedral elements.
1413 */
1414 inline unsigned long GetnElemHexa() const { return nelem_hexa; }
1415
1416 /*!
1417 * \brief Get number of prism elements.
1418 * \return Number of prism elements.
1419 */
1420 inline unsigned long GetnElemPris() const { return nelem_prism; }
1421
1422 /*!
1423 * \brief Get number of pyramid elements.
1424 * \return Number of pyramid elements.
1425 */
1426 inline unsigned long GetnElemPyra() const { return nelem_pyramid; }
1427
1428 /*!
1429 * \brief Get x coords of geometrical planes in the mesh
1430 */
1431 inline vector<vector<su2double>> GetXCoord() const { return Xcoord_plane; }
1432
1433 /*!
1434 * \brief Get y coords of geometrical planes in the mesh
1435 */
1436 inline vector<vector<su2double>> GetYCoord() const { return Ycoord_plane; }
1437
1438 /*!
1439 * \brief Get z coords of geometrical planes in the mesh
1440 */
1441 inline vector<vector<su2double>> GetZCoord() const { return Zcoord_plane; }
1442
1443 /*!
1444 * \brief Get all points on a geometrical plane in the mesh
1445 */
1446 inline vector<vector<unsigned long>> GetPlanarPoints() const { return Plane_points; }
1447
1448 /*!
1449 * \brief Compute the intersection between a segment and a plane.
1450 * \param[in] Segment_P0 - Definition of the particular problem.
1451 * \param[in] Segment_P1 - Definition of the particular problem.
1452 * \param[in] Plane_P0 - Definition of the particular problem.
1453 * \param[in] Plane_Normal - Definition of the particular problem.
1454 * \param[in] Intersection - Definition of the particular problem.
1455 * \return If the intersection has has been successful.
1456 */
1457 bool SegmentIntersectsPlane(const su2double* Segment_P0, const su2double* Segment_P1, su2double Variable_P0,
1458 su2double Variable_P1, const su2double* Plane_P0, const su2double* Plane_Normal,
1459 su2double* Intersection, su2double& Variable_Interp);
1460
1461 /*!
1462 * \brief Ray Intersects Triangle (Moller and Trumbore algorithm)
1463 */
1464 bool RayIntersectsTriangle(const su2double orig[3], const su2double dir[3], const su2double vert0[3],
1465 const su2double vert1[3], const su2double vert2[3], su2double* intersect);
1466
1467 /*!
1468 * \brief Segment Intersects Triangle
1469 */
1470 bool SegmentIntersectsTriangle(su2double point0[3], const su2double point1[3], su2double vert0[3], su2double vert1[3],
1471 su2double vert2[3]);
1472
1473 /*!
1474 * \brief Segment Intersects Line (for 2D FFD Intersection)
1475 */
1476 bool SegmentIntersectsLine(const su2double point0[2], const su2double point1[2], const su2double vert0[2],
1477 const su2double vert1[2]);
1478
1479 /*!
1480 * \brief Register the coordinates of the mesh nodes.
1481 */
1482 void RegisterCoordinates() const;
1483
1484 /*!
1485 * \brief Update the multi-grid structure and the wall-distance.
1486 * \param geometry_container - Geometrical definition.
1487 * \param config - Config
1488 */
1489 static void UpdateGeometry(CGeometry** geometry_container, CConfig* config);
1490
1491 /*!
1492 * \brief Update the multi-grid structure for the customized boundary conditions
1493 * \param geometry_container - Geometrical definition.
1494 * \param config - Definition of the particular problem.
1495 */
1496 void UpdateCustomBoundaryConditions(CGeometry** geometry_container, CConfig* config);
1497
1498 /*!
1499 * \brief A virtual member.
1500 * \param config - Config
1501 */
1502 inline virtual void SetSensitivity(CConfig* config) {}
1503
1504 /*!
1505 * \brief A virtual member.
1506 * \param config - Config
1507 */
1508 inline virtual void ReadUnorderedSensitivity(CConfig* config) {}
1509
1510 /*!
1511 * \brief A virtual member.
1512 * \param iPoint - Point
1513 * \param iDim - Dimension
1514 */
1515 inline virtual su2double GetSensitivity(unsigned long iPoint, unsigned short iDim) const { return 0.0; }
1516
1517 /*!
1518 * \brief A virtual member.
1519 * \param iPoint - Point
1520 * \param iDim - Dimension
1521 * \param val - Value of the sensitivity
1522 */
1523 inline virtual void SetSensitivity(unsigned long iPoint, unsigned short iDim, su2double val) {}
1524
1525 /*!
1526 * \brief Get the average normal at a specific span for a given marker in the turbomachinery reference of frame.
1527 * \param[in] val_marker - marker value.
1528 * \param[in] val_span - span value.
1529 * \return The span-wise averaged turbo normal.
1530 */
1531 inline const su2double* GetAverageTurboNormal(unsigned short val_marker, unsigned short val_span) const {
1532 return AverageTurboNormal[val_marker][val_span];
1533 }
1534
1535 /*!
1536 * \brief Get the average normal at a specific span for a given marker.
1537 * \param[in] val_marker - marker value.
1538 * \param[in] val_span - span value.
1539 * \return The span-wise averaged normal.
1540 */
1541 inline const su2double* GetAverageNormal(unsigned short val_marker, unsigned short val_span) const {
1542 return AverageNormal[val_marker][val_span];
1543 }
1544
1545 /*!
1546 * \brief Get the value of the total area for each span.
1547 * \param[in] val_marker - marker value.
1548 * \param[in] val_span - span value.
1549 * \return The span-wise area.
1550 */
1551 inline su2double GetSpanArea(unsigned short val_marker, unsigned short val_span) const {
1552 return SpanArea[val_marker][val_span];
1553 }
1554
1555 /*!
1556 * \brief Get the value of the total area for each span.
1557 * \param[in] val_marker - marker value.
1558 * \param[in] val_span - span value.
1559 * \return The span-wise averaged turbo normal.
1560 */
1561 inline su2double GetTurboRadius(unsigned short val_marker, unsigned short val_span) const {
1562 return TurboRadius[val_marker][val_span];
1563 }
1564
1565 /*!
1566 * \brief Get the value of the average tangential rotational velocity for each span.
1567 * \param[in] val_marker - marker value.
1568 * \param[in] val_span - span value.
1569 * \return The span-wise averaged tangential velocity.
1570 */
1571 inline su2double GetAverageTangGridVel(unsigned short val_marker, unsigned short val_span) const {
1572 return AverageTangGridVel[val_marker][val_span];
1573 }
1574
1575 /*!
1576 * \brief Get the value of the inflow tangential velocity at each span.
1577 * \param[in] val_marker - marker turbo-performance value.
1578 * \param[in] val_span - span value.
1579 * \return The span-wise inflow tangential velocity.
1580 */
1581 inline su2double GetTangGridVelIn(unsigned short val_marker, unsigned short val_span) const {
1582 return TangGridVelIn[val_marker][val_span];
1583 }
1584
1585 /*!
1586 * \brief Get the value of the outflow tangential velocity at each span.
1587 * \param[in] val_marker - marker turbo-performance value.
1588 * \param[in] val_span - span value.
1589 * \return The span-wise outflow tangential velocity.
1590 */
1591 inline su2double GetTangGridVelOut(unsigned short val_marker, unsigned short val_span) const {
1592 return TangGridVelOut[val_marker][val_span];
1593 }
1594
1595 /*!
1596 * \brief Get the value of the inflow area at each span.
1597 * \param[in] val_marker - marker turbo-performance value.
1598 * \param[in] val_span - span value.
1599 * \return The span-wise inflow area.
1600 */
1601 inline su2double GetSpanAreaIn(unsigned short val_marker, unsigned short val_span) const {
1602 return SpanAreaIn[val_marker][val_span];
1603 }
1604
1605 /*!
1606 * \brief Get the value of the outflow area at each span.
1607 * \param[in] val_marker - marker turbo-performance value.
1608 * \param[in] val_span - span value.
1609 * \return The span-wise outflow area.
1610 */
1611 inline su2double GetSpanAreaOut(unsigned short val_marker, unsigned short val_span) const {
1612 return SpanAreaOut[val_marker][val_span];
1613 }
1614
1615 /*!
1616 * \brief Get the value of the inflow radius at each span.
1617 * \param[in] val_marker - marker turbo-performance value.
1618 * \param[in] val_span - span value.
1619 * \return The span-wise inflow radius.
1620 */
1621 inline su2double GetTurboRadiusIn(unsigned short val_marker, unsigned short val_span) const {
1622 return TurboRadiusIn[val_marker][val_span];
1623 }
1624
1625 /*!
1626 * \brief Get the value of the outflow radius at each span.
1627 * \param[in] val_marker - marker turbo-performance value.
1628 * \param[in] val_span - span value.
1629 * \return The span-wise outflow radius.
1630 */
1631 inline su2double GetTurboRadiusOut(unsigned short val_marker, unsigned short val_span) const {
1632 return TurboRadiusOut[val_marker][val_span];
1633 }
1634
1635 /*!
1636 * \brief Set the value of the inflow tangential velocity at each span.
1637 * \param[in] val_marker - marker turbo-performance value.
1638 * \param[in] val_span - span value.
1639 */
1640 inline void SetTangGridVelIn(su2double value, unsigned short val_marker, unsigned short val_span) {
1641 TangGridVelIn[val_marker][val_span] = value;
1642 }
1643
1644 /*!
1645 * \brief Set the value of the outflow tangential velocity at each span.
1646 * \param[in] val_marker - marker turbo-performance value.
1647 * \param[in] val_span - span value.
1648 */
1649 inline void SetTangGridVelOut(su2double value, unsigned short val_marker, unsigned short val_span) {
1650 TangGridVelOut[val_marker][val_span] = value;
1651 }
1652
1653 /*!
1654 * \brief Set the value of the inflow area at each span.
1655 * \param[in] val_marker - marker turbo-performance value.
1656 * \param[in] val_span - span value.
1657 */
1658 inline void SetSpanAreaIn(su2double value, unsigned short val_marker, unsigned short val_span) {
1659 SpanAreaIn[val_marker][val_span] = value;
1660 }
1661
1662 /*!
1663 * \brief Set the value of the outflow area at each span.
1664 * \param[in] val_marker - marker turbo-performance value.
1665 * \param[in] val_span - span value.
1666 */
1667 inline void SetSpanAreaOut(su2double value, unsigned short val_marker, unsigned short val_span) {
1668 SpanAreaOut[val_marker][val_span] = value;
1669 }
1670
1671 /*!
1672 * \brief Set the value of the inflow radius at each span.
1673 * \param[in] val_marker - marker turbo-performance value.
1674 * \param[in] val_span - span value.
1675 */
1676 inline void SetTurboRadiusIn(su2double value, unsigned short val_marker, unsigned short val_span) {
1677 TurboRadiusIn[val_marker][val_span] = value;
1678 }
1679
1680 /*!
1681 * \brief Set the value of the outflow radius at each span.
1682 * \param[in] val_marker - marker turbo-performance value.
1683 * \param[in] val_span - span value.
1684 */
1685 inline void SetTurboRadiusOut(su2double value, unsigned short val_marker, unsigned short val_span) {
1686 TurboRadiusOut[val_marker][val_span] = value;
1687 }
1688
1689 /*!
1690 * \brief A total number of vertex independently from the MPI partions.
1691 * \param[in] val_marker - marker value.
1692 * \param[in] val_span - span value.
1693 */
1694 inline unsigned long GetnTotVertexSpan(unsigned short val_marker, unsigned short val_span) const {
1695 return nTotVertexSpan[val_marker][val_span];
1696 }
1697
1698 /*!
1699 * \brief min angular pitch independently from the MPI partions.
1700 * \param[in] val_marker - marker value.
1701 * \param[in] val_span - span value.
1702 */
1703 inline su2double GetMinAngularCoord(unsigned short val_marker, unsigned short val_span) const {
1704 return MinAngularCoord[val_marker][val_span];
1705 }
1706
1707 /*!
1708 * \brief max angular pitch independently from the MPI partions.
1709 * \param[in] val_marker - marker value.
1710 * \param[in] val_span - span value.
1711 */
1712 inline su2double GetMaxAngularCoord(unsigned short val_marker, unsigned short val_span) const {
1713 return MaxAngularCoord[val_marker][val_span];
1714 }
1715
1716 /*!
1717 * \brief min Relatice angular coord independently from the MPI partions.
1718 * \param[in] val_marker - marker value.
1719 * \param[in] val_span - span value.
1720 */
1721 inline su2double GetMinRelAngularCoord(unsigned short val_marker, unsigned short val_span) const {
1722 return MinRelAngularCoord[val_marker][val_span];
1723 }
1724
1725 /*!
1726 * \brief Get the average grid velocity at a specific span for a given marker.
1727 * \param[in] val_marker - marker value.
1728 * \param[in] val_span - span value.
1729 */
1730 inline const su2double* GetAverageGridVel(unsigned short val_marker, unsigned short val_span) const {
1731 return AverageGridVel[val_marker][val_span];
1732 }
1733
1734 /*!
1735 * \brief Get the value of the customized temperature at a specified vertex on a specified marker.
1736 * \param[in] val_marker - Marker value
1737 * \param[in] val_vertex - Boundary vertex value
1738 */
1739 inline su2double GetCustomBoundaryTemperature(unsigned short val_marker, unsigned long val_vertex) const {
1740 return CustomBoundaryTemperature[val_marker][val_vertex];
1741 }
1742
1743 /*!
1744 * \brief Set the value of the customized temperature at a specified vertex on a specified marker.
1745 * \param[in] val_marker - Marker value
1746 * \param[in] val_vertex - Boundary vertex value
1747 * \param[in] val_customBoundaryTemperature - Value of the temperature.
1748 */
1749 inline void SetCustomBoundaryTemperature(unsigned short val_marker, unsigned long val_vertex,
1750 su2double val_customBoundaryTemperature) {
1751 CustomBoundaryTemperature[val_marker][val_vertex] = val_customBoundaryTemperature;
1752 }
1753
1754 /*!
1755 * \brief Get the value of the customized normal heat flux at a specified vertex on a specified marker.
1756 * \param[in] val_marker - Marker value
1757 * \param[in] val_vertex - Boundary vertex value
1758 */
1759 inline su2double GetCustomBoundaryHeatFlux(unsigned short val_marker, unsigned long val_vertex) const {
1760 return CustomBoundaryHeatFlux[val_marker][val_vertex];
1761 }
1762
1763 /*!
1764 * \brief Set the value of the customized normal heat flux at a specified vertex on a specified marker.
1765 * \param[in] val_marker - Marker value
1766 * \param[in] val_vertex - Boundary vertex value
1767 * \param[in] val_customBoundaryHeatFlux - Value of the normal heat flux.
1768 */
1769 inline void SetCustomBoundaryHeatFlux(unsigned short val_marker, unsigned long val_vertex,
1770 su2double val_customBoundaryHeatFlux) {
1771 CustomBoundaryHeatFlux[val_marker][val_vertex] = val_customBoundaryHeatFlux;
1772 }
1773
1774 /*!
1775 * \brief Set a representative wall value of the agglomerated control volumes on a particular boundary marker.
1776 * \param[in] fine_grid - Geometrical definition of the problem.
1777 * \param[in] val_marker - Index of the boundary marker.
1778 * \param[in] wall_quantity - Object with methods Get(iVertex_fine) and Set(iVertex_coarse, val).
1779 */
1780 template <class T>
1781 void SetMultiGridMarkerQuantity(const CGeometry* fine_grid, unsigned short val_marker, T& wall_quantity) {
1782 for (auto iVertex = 0ul; iVertex < nVertex[val_marker]; iVertex++) {
1783 const auto Point_Coarse = vertex[val_marker][iVertex]->GetNode();
1784
1785 if (!nodes->GetDomain(Point_Coarse)) continue;
1786
1787 su2double Area_Parent = 0.0;
1788
1789 /*--- Compute area parent by taking into account only volumes that are on the marker. ---*/
1790 for (auto iChildren = 0u; iChildren < nodes->GetnChildren_CV(Point_Coarse); iChildren++) {
1791 const auto Point_Fine = nodes->GetChildren_CV(Point_Coarse, iChildren);
1792 const auto isVertex =
1793 fine_grid->nodes->GetDomain(Point_Fine) && (fine_grid->nodes->GetVertex(Point_Fine, val_marker) != -1);
1794 if (isVertex) {
1795 Area_Parent += fine_grid->nodes->GetVolume(Point_Fine);
1796 }
1797 }
1798
1799 su2double Quantity_Coarse = 0.0;
1800
1801 /*--- Loop again to average coarser value. ---*/
1802 for (auto iChildren = 0u; iChildren < nodes->GetnChildren_CV(Point_Coarse); iChildren++) {
1803 const auto Point_Fine = nodes->GetChildren_CV(Point_Coarse, iChildren);
1804 const auto isVertex =
1805 fine_grid->nodes->GetDomain(Point_Fine) && (fine_grid->nodes->GetVertex(Point_Fine, val_marker) != -1);
1806 if (isVertex) {
1807 const auto Vertex_Fine = fine_grid->nodes->GetVertex(Point_Fine, val_marker);
1808 const auto Area_Children = fine_grid->nodes->GetVolume(Point_Fine);
1809 Quantity_Coarse += wall_quantity.Get(Vertex_Fine) * Area_Children / Area_Parent;
1810 }
1811 }
1812
1813 /*--- Set the value at the coarse level. ---*/
1814 wall_quantity.Set(iVertex, Quantity_Coarse);
1815 }
1816 }
1817
1818 /*!
1819 * \brief Filter values given at the element CG by performing a weighted average over a radial neighbourhood.
1820 * \param[in] filter_radius - Parameter defining the size of the neighbourhood.
1821 * \param[in] kernels - Kernel types and respective parameter, size of vector defines number of filter recursions.
1822 * \param[in] search_limit - Max degree of neighborhood considered for neighbor search, avoids excessive work in fine
1823 * regions. \param[in,out] values - On entry, the "raw" values, on exit, the filtered values.
1824 */
1825 void FilterValuesAtElementCG(const vector<su2double>& filter_radius,
1826 const vector<pair<ENUM_FILTER_KERNEL, su2double>>& kernels,
1827 const unsigned short search_limit, su2double* values) const;
1828
1829 /*!
1830 * \brief Build the global (entire mesh!) adjacency matrix for the elements in compressed format.
1831 * Used by FilterValuesAtElementCG to search for geometrically close neighbours.
1832 * \param[out] neighbour_start - i'th position stores the start position in "neighbour_idx" for the immediate
1833 * neighbours of global element "i". Size nElemDomain+1
1834 * \param[out] neighbour_idx - Global index of the neighbours, mush be NULL on entry and free'd by calling function.
1835 */
1836 void GetGlobalElementAdjacencyMatrix(vector<unsigned long>& neighbour_start, long*& neighbour_idx) const;
1837
1838 /*!
1839 * \brief Get the neighbours of the global element in the first position of "neighbours" that are within "radius" of
1840 * it. \param[in] iElem_global - Element of interest. \param[in] radius - Parameter defining the size of the
1841 * neighbourhood. \param[in] search_limit - Maximum "logical radius" to consider, limits cost in refined regions, use
1842 * 0 for unlimited. \param[in] neighbour_start - See GetGlobalElementAdjacencyMatrix. \param[in] neighbour_idx - See
1843 * GetGlobalElementAdjacencyMatrix. \param[in] cg_elem - Global element centroid coordinates in row major format
1844 * {x0,y0,x1,y1,...}. Size nDim*nElemDomain. \param[in,out] neighbours - The neighbours of iElem_global.
1845 * \param[in,out] is_neighbor - Working vector of size nElemGlobal, MUST be all false on entry (if so, on exit it will
1846 * be the same). \return true if the search was successful, i.e. not limited.
1847 */
1848 bool GetRadialNeighbourhood(const unsigned long iElem_global, const passivedouble radius, size_t search_limit,
1849 const vector<unsigned long>& neighbour_start, const long* neighbour_idx,
1850 const su2double* cg_elem, vector<long>& neighbours, vector<bool>& is_neighbor) const;
1851
1852 /*!
1853 * \brief Compute and store the volume of the primal elements.
1854 */
1855 void SetElemVolume();
1856
1857 /*!
1858 * \brief Set the multigrid index for the current geometry object.
1859 * \param[in] val_iMesh - Multigrid index for current geometry object.
1860 */
1861 inline void SetMGLevel(unsigned short val_iMesh) { MGLevel = val_iMesh; }
1862
1863 /*!
1864 * \brief Get the multigrid index for the current geometry object.
1865 * \return Multigrid index for current geometry object.
1866 */
1867 inline unsigned short GetMGLevel() const { return MGLevel; }
1868
1869 /*!
1870 * \brief A virtual member.
1871 * \param config - Config
1872 */
1873 inline virtual void ComputeMeshQualityStatistics(const CConfig* config) {}
1874
1875 /*!
1876 * \brief Color multigrid levels for visualization.
1877 * \param nMGLevels - Number of levels
1878 * \param geometry - The levels
1879 */
1880 void ColorMGLevels(unsigned short nMGLevels, const CGeometry* const* geometry);
1881
1882 /*!
1883 * \brief Get the sparse pattern of "type" with given level of fill.
1884 * \note This method builds the pattern if that has not been done yet.
1885 * \param[in] type - Finite volume or finite element.
1886 * \param[in] fillLvl - Level of fill of the pattern.
1887 * \return Reference to the sparse pattern.
1888 */
1889 const LDUSparsePattern& GetSparsePattern(ConnectivityType type, unsigned long fillLvl = 0);
1890
1891 /*!
1892 * \brief Get the bijective map from L-entry indices to U-entry indices of their transposes.
1893 * \note Requires symmetric pattern. Builds both LU transpose maps if not already built.
1894 * \param[in] type - Finite volume or finite element.
1895 * \return Reference to the l_to_u map.
1896 */
1898
1899 /*!
1900 * \brief Get the bijective map from U-entry indices to L-entry indices of their transposes.
1901 * \note Requires symmetric pattern. Builds both LU transpose maps if not already built.
1902 * \param[in] type - Finite volume or finite element.
1903 * \return Reference to the u_to_l map.
1904 */
1906
1907 /*!
1908 * \brief Get the edge coloring.
1909 * \note This method computes the coloring if that has not been done yet.
1910 * \note Can be instructed to determine and use the maximum edge color group size between 1 and
1911 * CGeometry::edgeColorGroupSize that yields a coloring that is at least as efficient as #COLORING_EFF_THRESH.
1912 * \param[out] efficiency - optional output of the coloring efficiency.
1913 * \param[in] maximizeEdgeColorGroupSize - use the maximum edge color group size that gives an efficient coloring.
1914 * \return Reference to the coloring.
1915 */
1916 const CCompressedSparsePatternUL& GetEdgeColoring(su2double* efficiency = nullptr,
1917 bool maximizeEdgeColorGroupSize = false);
1918
1919 /*!
1920 * \brief Force the natural (sequential) edge coloring.
1921 */
1923
1924 /*!
1925 * \brief Get the group size used in edge coloring.
1926 * \return Group size.
1927 */
1928 inline unsigned long GetEdgeColorGroupSize() const { return edgeColorGroupSize; }
1929
1930 /*!
1931 * \brief Get the element coloring.
1932 * \note This method computes the coloring if that has not been done yet.
1933 * \param[out] efficiency - optional output of the coloring efficiency.
1934 * \return Reference to the coloring.
1935 */
1936 const CCompressedSparsePatternUL& GetElementColoring(su2double* efficiency = nullptr);
1937
1938 /*!
1939 * \brief Force the natural (sequential) element coloring.
1940 */
1942
1943 /*!
1944 * \brief Get the group size used in element coloring.
1945 * \return Group size.
1946 */
1947 inline unsigned long GetElementColorGroupSize() const { return elemColorGroupSize; }
1948
1949 /*!
1950 * \brief Get the linelet definition, this function computes the linelets if that has not been done yet.
1951 */
1952 const CLineletInfo& GetLineletInfo(const CConfig* config) const;
1953
1954 /*!
1955 * \brief Compute an ADT including the coordinates of all viscous markers
1956 * \param[in] config - Definition of the particular problem.
1957 * \return pointer to the ADT
1958 */
1959 virtual std::unique_ptr<CADTElemClass> ComputeViscousWallADT(const CConfig* config) const { return nullptr; }
1960
1961 /*!
1962 * \brief Reduce the wall distance based on an previously constructed ADT.
1963 * \details The ADT might belong to another zone, giving rise to lower wall distances
1964 * than those already stored.
1965 * \param[in] WallADT - The ADT to reduce the wall distance
1966 * \param[in] config - Config of this geometry (not the ADT zone's geometry)
1967 * \param[in] iZone - Zone whose markers made the ADT
1968 */
1969 virtual void SetWallDistance(CADTElemClass* WallADT, const CConfig* config,
1970 unsigned short iZone = numeric_limits<unsigned short>::max()) {}
1971
1972 /*!
1973 * \brief Set wall distances a specific value
1974 * \param[in] val - new value for the wall distance at all points.
1975 */
1976 virtual void SetWallDistance(su2double val) {}
1977
1978 /*!
1979 * \brief Compute the distances to the closest vertex on viscous walls over the entire domain
1980 * \param[in] config_container - Definition of the particular problem.
1981 * \param[in] geometry_container - Geometrical definition of the problem.
1982 */
1983 static void ComputeWallDistance(const CConfig* const* config_container, CGeometry**** geometry_container,
1984 const int record_zone = -1);
1985
1986 /*!
1987 * \brief Set the amount of nonconvex elements in the mesh.
1988 * \param[in] nonconvex_elems - amount of nonconvex elements in the mesh
1989 */
1990 void SetnNonconvexElements(unsigned long nonconvex_elems) { nNonconvexElements = nonconvex_elems; }
1991
1992 /*!
1993 * \brief Get the amount of nonconvex elements in the mesh.
1994 * \param[out] nNonconvexElements- amount of nonconvex elements in the mesh
1995 */
1996 unsigned long GetnNonconvexElements() const { return nNonconvexElements; }
1997
1998 /*!
1999 * \brief For streamwise periodicity, find & store a unique reference node on the designated periodic inlet.
2000 * \param[in] config - Definition of the particular problem.
2001 */
2002 inline virtual void FindUniqueNode_PeriodicBound(const CConfig* config) {}
2003
2004 /*!
2005 * \brief Get a pointer to the reference node coordinate vector.
2006 * \return A pointer to the reference node coordinate vector.
2007 */
2008 inline virtual const su2double* GetStreamwise_Periodic_RefNode() const { return nullptr; }
2009};
Headers of the main subroutines for doing the complete dual grid structure. The subroutines and funct...
Declaration of the edge class CEdge.cpp file.
Declaration of the point class that stores geometric and adjacency information for dual control volum...
Headers of the main subroutines for storing the primal grid structure. The subroutines and functions ...
Headers of the main subroutines for doing the complete dual grid structure. The subroutines and funct...
Headers of the main subroutines for doing the complete dual grid structure. The subroutines and funct...
A templated matrix/vector-like object.
Definition C2DContainer.hpp:374
Class for storing an ADT of (linear) elements in an arbitrary number of dimensions.
Definition CADTElemClass.hpp:41
int Request
Definition mpi_structure.hpp:505
static void Error(const std::string &ErrorMsg, const std::string &FunctionName)
Definition mpi_structure.cpp:131
bool empty() const
Definition graph_toolbox.hpp:184
Main class for defining the problem; basically this class reads the configuration file,...
Definition CConfig.hpp:64
unsigned short GetKind_GridMovement() const
Get the type of dynamic mesh motion. Each zone gets a config file.
Definition CConfig.hpp:6303
Class for defining the edges of the dual grid.
Definition CEdge.hpp:39
Parent class for defining the geometry of the problem (complete geometry, multigrid agglomerated geom...
Definition CGeometry.hpp:75
unsigned long GetnVertex(unsigned short val_marker) const
Get number of vertices.
Definition CGeometry.hpp:637
su2double * bufD_P2PRecv
Data structure for su2double point-to-point receive.
Definition CGeometry.hpp:303
unsigned short GetnSpanWiseSections(unsigned short marker_flag) const
Get number of span wise section.
Definition CGeometry.hpp:644
unsigned long GetGlobal_nElemTetr() const
Retrieve total number of tetrahedral elements in a simulation across all processors.
Definition CGeometry.hpp:1366
void SetGridVelocity(const CConfig *config)
Set the grid velocity via finite differencing at each node.
Definition CGeometry.cpp:4095
su2double GetMinRelAngularCoord(unsigned short val_marker, unsigned short val_span) const
min Relatice angular coord independently from the MPI partions.
Definition CGeometry.hpp:1721
unsigned long Global_nElemDomain
Total number of elements in a simulation across all processors (excluding halos).
Definition CGeometry.hpp:104
unsigned long Global_nelem_triangle_bound
Total number of triangles on the mesh boundaries across all processors.
Definition CGeometry.hpp:125
virtual void Check_IntElem_Orientation(const CConfig *config)
A virtual member.
Definition CGeometry.hpp:972
unsigned long edgeColorGroupSize
Size of the edge groups within each color.
Definition CGeometry.hpp:217
SU2_MPI::Request * req_PeriodicSend
Data structure for periodic send requests.
Definition CGeometry.hpp:351
unsigned long nelem_edge
Number of edges in the mesh.
Definition CGeometry.hpp:108
unsigned short GetMGLevel() const
Get the multigrid index for the current geometry object.
Definition CGeometry.hpp:1867
unsigned long Global_nelem_triangle
Total number of triangles in the mesh across all processors.
Definition CGeometry.hpp:111
virtual void SetSendReceive(const CConfig *config)
A virtual member.
Definition CGeometry.hpp:1010
virtual su2double Compute_Twist(su2double *Plane_P0, su2double *Plane_Normal, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1183
const CCompressedSparsePatternUL & GetElementColoring(su2double *efficiency=nullptr)
Get the element coloring.
Definition CGeometry.cpp:4263
SU2_MPI::Request * req_P2PSend
Data structure for point-to-point send requests.
Definition CGeometry.hpp:315
virtual void SetColorGrid(CConfig *config)
A virtual member.
Definition CGeometry.hpp:984
virtual void SetBoundControlVolume(const CConfig *config, unsigned short action)
A virtual member.
Definition CGeometry.hpp:946
unsigned long GetEdgeColorGroupSize() const
Get the group size used in edge coloring.
Definition CGeometry.hpp:1928
void PostP2PSends(CGeometry *geometry, const CConfig *config, COMM_TYPE commType, unsigned short countPerPoint, int val_iMessage, bool val_reverse) const
Routine to launch a single non-blocking send once the buffer is loaded for a point-to-point commucati...
Definition CGeometry.cpp:497
unsigned long GetGlobal_nElemLine() const
Retrieve total number of triangular elements in a simulation across all processors.
Definition CGeometry.hpp:1348
su2double *** AverageGridVel
Average boundary grid velocity at each span wise section for each marker.
Definition CGeometry.hpp:183
int * Neighbors_P2PRecv
Data structure holding the ranks of the neighbors for point-to-point recv comms.
Definition CGeometry.hpp:293
su2double GetSpanArea(unsigned short val_marker, unsigned short val_span) const
Get the value of the total area for each span.
Definition CGeometry.hpp:1551
virtual void SetGlobal_to_Local_Point()
A virtual member.
Definition CGeometry.hpp:1323
unsigned long * Local_Point_PeriodicSend
Data structure holding the local index of all vertices to be sent in periodic comms.
Definition CGeometry.hpp:339
unsigned short * bufS_P2PRecv
Data structure for unsigned long point-to-point receive.
Definition CGeometry.hpp:313
const int size
MPI Size.
Definition CGeometry.hpp:93
virtual void SetColorFEMGrid_Parallel(CConfig *config)
A virtual member.
Definition CGeometry.hpp:996
int nPeriodicSend
Number of sends during periodic comms.
Definition CGeometry.hpp:325
void SetSpanAreaOut(su2double value, unsigned short val_marker, unsigned short val_span)
Set the value of the outflow area at each span.
Definition CGeometry.hpp:1667
vector< su2double > XCoordList
Vector containing points appearing on a single plane.
Definition CGeometry.hpp:157
unsigned long GetnElemPris() const
Get number of prism elements.
Definition CGeometry.hpp:1420
void SetNaturalElementColoring()
Force the natural (sequential) element coloring.
Definition CGeometry.cpp:4306
@ MAXNDIM
Definition CGeometry.hpp:91
void SetCustomBoundaryTemperature(unsigned short val_marker, unsigned long val_vertex, su2double val_customBoundaryTemperature)
Set the value of the customized temperature at a specified vertex on a specified marker.
Definition CGeometry.hpp:1749
void SetCustomBoundary(CConfig *config)
Set the data containers for customized boundary conditions.
Definition CGeometry.cpp:2750
PassiveRequest * reqP_P2PSend
Data structure for point-to-point send requests.
Definition CGeometry.hpp:319
const CCompressedSparsePatternUL & GetEdgeColoring(su2double *efficiency=nullptr, bool maximizeEdgeColorGroupSize=false)
Get the edge coloring.
Definition CGeometry.cpp:4161
void PostPeriodicRecvs(CGeometry *geometry, const CConfig *config, COMM_TYPE commType, unsigned short countPerPeriodicPoint)
Routine to launch non-blocking recvs only for all periodic communication with neighboring partitions.
Definition CGeometry.cpp:1531
const su2double * GetAverageTurboNormal(unsigned short val_marker, unsigned short val_span) const
Get the average normal at a specific span for a given marker in the turbomachinery reference of frame...
Definition CGeometry.hpp:1531
unsigned long GetGlobal_nPointDomain() const
Retrieve total number of nodes in a simulation across all processors (excluding halos).
Definition CGeometry.hpp:605
static void UpdateGeometry(CGeometry **geometry_container, CConfig *config)
Update the multi-grid structure and the wall-distance.
Definition CGeometry.cpp:2730
unsigned short nTurboPerf
Number of Span wise section for each turbo marker.
Definition CGeometry.hpp:174
su2double GetAverageTangGridVel(unsigned short val_marker, unsigned short val_span) const
Get the value of the average tangential rotational velocity for each span.
Definition CGeometry.hpp:1571
void SetShroudVelocity(const CConfig *config)
Set the rotational velocity of the points on the shroud markers to 0.
Definition CGeometry.cpp:3999
vector< bool > boundIsStraight
Definition CGeometry.hpp:266
virtual su2double Compute_Length(su2double *Plane_P0, su2double *Plane_Normal, CConfig *config, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1250
void TestGeometry() const
Create a file for testing the geometry.
Definition CGeometry.cpp:1713
unsigned long Global_nelem_quad
Total number of quadrangles in the mesh across all processors.
Definition CGeometry.hpp:113
unsigned long Global_nelem_tetra
Total number of tetrahedra in the mesh across all processors.
Definition CGeometry.hpp:115
su2double ** SpanArea
Area at each span wise section for each marker.
Definition CGeometry.hpp:187
void GetCommCountAndType(const CConfig *config, MPI_QUANTITIES commType, unsigned short &COUNT_PER_POINT, COMM_TYPE &MPI_TYPE) const
Helper function to define the type and number of variables per point for each communication type.
Definition CGeometry.cpp:608
unsigned short MGLevel
The mesh level index for the current geometry container.
Definition CGeometry.hpp:136
void ComputeSurfaceAreaCfgFile(const CConfig *config)
Compute the surface area of all global markers.
Definition CGeometry.cpp:2809
vector< vector< su2double > > GetXCoord() const
Get x coords of geometrical planes in the mesh.
Definition CGeometry.hpp:1431
unsigned long nElem
Number of elements of the mesh.
Definition CGeometry.hpp:102
unsigned long nelem_quad
Number of quadrangles in the mesh.
Definition CGeometry.hpp:112
unsigned long nEdge
Number of edges of the mesh.
Definition CGeometry.hpp:106
su2double ** MinAngularCoord
Max angular pitch at each span wise section for each marker.
Definition CGeometry.hpp:189
int nP2PRecv
Number of receives during point-to-point comms.
Definition CGeometry.hpp:286
LDUSparsePattern finiteElementPatternFillN
FEM sparsity with N-fill (e.g. for ILU-N).
Definition CGeometry.hpp:206
void ComputeSurf_Curvature(CConfig *config)
Find and store all vertices on a sharp corner in the geometry.
Definition CGeometry.cpp:3128
PassiveRequest * reqP_P2PRecv
Data structure for point-to-point recv requests.
Definition CGeometry.hpp:320
unsigned long GetnPoint() const
Get number of points.
Definition CGeometry.hpp:587
auto * GetP2PSendReq() const
Returns the send requests for a given data type.
Definition CGeometry.hpp:482
void FilterValuesAtElementCG(const vector< su2double > &filter_radius, const vector< pair< ENUM_FILTER_KERNEL, su2double > > &kernels, const unsigned short search_limit, su2double *values) const
Filter values given at the element CG by performing a weighted average over a radial neighbourhood.
Definition CGeometry.cpp:3507
virtual su2double Compute_Width(su2double *Plane_P0, su2double *Plane_Normal, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1199
unsigned long nelem_prism
Number of prisms in the mesh.
Definition CGeometry.hpp:118
vector< std::unordered_map< unsigned long, std::array< su2double, MAXNDIM > > > symmetryNormals
Bool if boundary-marker is straight(2D)/plane(3D) for each local marker.
Definition CGeometry.hpp:263
void SetCustomBoundaryHeatFlux(unsigned short val_marker, unsigned long val_vertex, su2double val_customBoundaryHeatFlux)
Set the value of the customized normal heat flux at a specified vertex on a specified marker.
Definition CGeometry.hpp:1769
unsigned long GetnElemTria() const
Get number of triangular elements.
Definition CGeometry.hpp:1396
void SetVelocity(CConfig *config, bool print)
General interface for setting the velocity in the geometry during motion ramps.
Definition CGeometry.hpp:1086
virtual ~CGeometry()
Destructor of the class.
Definition CGeometry.cpp:38
virtual void SetSensitivity(CConfig *config)
A virtual member.
Definition CGeometry.hpp:1502
unsigned long * nElem_Bound
Number of elements of the boundary.
Definition CGeometry.hpp:259
unsigned short * bufS_PeriodicRecv
Data structure for unsigned long periodic receive.
Definition CGeometry.hpp:349
virtual su2double Compute_Chord(su2double *Plane_P0, su2double *Plane_Normal, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1191
virtual void SetBoundTecPlot(char mesh_filename[MAX_STRING_SIZE], bool new_file, CConfig *config)
A virtual member.
Definition CGeometry.hpp:966
const ColMajorMatrix< uint8_t > & CoarseGridColor
Coarse grid levels, colorized.
Definition CGeometry.hpp:361
CPoint * nodes
Node vector (dual grid information).
Definition CGeometry.hpp:253
map< int, int > P2PRecv2Neighbor
Data structure holding the reverse mapping of the ranks of the neighbors for point-to-point recv comm...
Definition CGeometry.hpp:297
su2double ** MinRelAngularCoord
Min relative angular coord at each span wise section for each marker.
Definition CGeometry.hpp:190
virtual void SetPoint_Connectivity(const CGeometry *fine_grid)
A virtual member.
Definition CGeometry.hpp:1044
unsigned long * Local_Point_PeriodicRecv
Data structure holding the local index of all vertices to be received in periodic comms.
Definition CGeometry.hpp:341
@ OMP_MIN_SIZE
Definition CGeometry.hpp:90
void SetnPoint(unsigned long val_npoint)
Set the number of grid points.
Definition CGeometry.hpp:767
void CompleteComms(CGeometry *geometry, const CConfig *config, MPI_QUANTITIES commType)
Routine to complete the set of non-blocking communications launched by InitiateComms() and unpacking ...
Definition CGeometry.cpp:737
map< int, int > P2PSend2Neighbor
Data structure holding the reverse mapping of the ranks of the neighbors for point-to-point send comm...
Definition CGeometry.hpp:295
unsigned long nPointDomain
Number of real points of the mesh.
Definition CGeometry.hpp:97
CPrimalGrid *** bound
Boundary vector (primal grid information).
Definition CGeometry.hpp:252
void SetTurboRadiusIn(su2double value, unsigned short val_marker, unsigned short val_span)
Set the value of the inflow radius at each span.
Definition CGeometry.hpp:1676
const LDUSparsePattern & GetSparsePattern(ConnectivityType type, unsigned long fillLvl=0)
Get the sparse pattern of "type" with given level of fill.
Definition CGeometry.cpp:4126
unsigned long ** nTotVertexSpan
number of vertexes at each span wise section for each marker.
Definition CGeometry.hpp:177
su2double GetCustomBoundaryTemperature(unsigned short val_marker, unsigned long val_vertex) const
Get the value of the customized temperature at a specified vertex on a specified marker.
Definition CGeometry.hpp:1739
void AllocatePeriodicComms(unsigned short val_countPerPeriodicPoint)
Routine to allocate buffers for periodic communications. Also called to dynamically reallocate if not...
Definition CGeometry.cpp:1494
unsigned long GetnElem() const
Get number of elements.
Definition CGeometry.hpp:611
virtual void FindUniqueNode_PeriodicBound(const CConfig *config)
For streamwise periodicity, find & store a unique reference node on the designated periodic inlet.
Definition CGeometry.hpp:2002
su2double ** CustomBoundaryHeatFlux
Definition CGeometry.hpp:143
void ColorMGLevels(unsigned short nMGLevels, const CGeometry *const *geometry)
Color multigrid levels for visualization.
Definition CGeometry.cpp:4313
unsigned long nelem_edge_bound
Number of edges on the mesh boundaries.
Definition CGeometry.hpp:122
unsigned long GetnElemPyra() const
Get number of pyramid elements.
Definition CGeometry.hpp:1426
virtual void SetBoundVolume()
Sets the boundary volume.
Definition CGeometry.hpp:845
void SetFaces()
Sets the faces of an element..
Definition CGeometry.cpp:1682
SU2_MPI::Request * req_PeriodicRecv
Data structure for periodic recv requests.
Definition CGeometry.hpp:352
su2double ** SpanWiseValue
Span wise values for each turbo marker.
Definition CGeometry.hpp:175
void SetNaturalEdgeColoring()
Force the natural (sequential) edge coloring.
Definition CGeometry.cpp:4256
void ComputeSurfStraightness(const CConfig *config, bool print_on_screen)
Check if a boundary is straight(2D) / plane(3D) for EULER_WALL and SYMMETRY_PLANE only and store the ...
Definition CGeometry.cpp:3011
CGeometry(CConfig *config, unsigned short nDim)
Constructor of the class.
unsigned long Global_nelem_prism
Total number of prisms in the mesh across all processors.
Definition CGeometry.hpp:119
virtual su2double Compute_MaxThickness(su2double *Plane_P0, su2double *Plane_Normal, CConfig *config, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1174
virtual void SetPositive_ZArea(CConfig *config)
Sets area to be positive in Z direction.
Definition CGeometry.hpp:814
unsigned long GetGlobal_nElemTria() const
Retrieve total number of triangular elements in a simulation across all processors.
Definition CGeometry.hpp:1354
void SetEdges()
Sets the edges of an elemment.
Definition CGeometry.cpp:1650
unsigned long nelem_quad_bound
Number of quads on the mesh boundaries.
Definition CGeometry.hpp:127
CTurboVertex **** turbovertex
Boundary Vertex vector ordered for turbomachinery calculation(dual grid information).
Definition CGeometry.hpp:256
virtual void SetMaxLength(CConfig *config)
Set max length.
Definition CGeometry.hpp:911
virtual void SetTurboVertex(CConfig *config, unsigned short val_iZone, unsigned short marker_flag, bool allocate)
Set vertices for turbomachinery problems.
Definition CGeometry.hpp:870
unsigned long * Local_Point_P2PSend
Data structure holding the local index of all vertices to be sent in point-to-point comms.
Definition CGeometry.hpp:299
vector< vector< unsigned long > > GetPlanarPoints() const
Get all points on a geometrical plane in the mesh.
Definition CGeometry.hpp:1446
su2double ** TurboRadius
Radius at each span wise section for each marker.
Definition CGeometry.hpp:192
su2double GetSurfaceArea(const CConfig *config, unsigned short val_marker) const
Get global Surface Area to a local marker.
Definition CGeometry.cpp:2843
unsigned long Global_nElem
Total number of elements in a simulation across all processors (all types).
Definition CGeometry.hpp:103
virtual void SetRCM_Ordering(CConfig *config)
Orders the RCM.
Definition CGeometry.hpp:825
virtual void DivideConnectivity(CConfig *config, unsigned short Elem_Type)
A virtual member.
Definition CGeometry.hpp:1002
virtual su2double GetSensitivity(unsigned long iPoint, unsigned short iDim) const
A virtual member.
Definition CGeometry.hpp:1515
void SetWallVelocity(const CConfig *config, bool print=false)
Set the translational/rotational velocity for all moving walls.
Definition CGeometry.cpp:4036
su2double ** CustomBoundaryTemperature
Definition CGeometry.hpp:142
unsigned long GetnElemHexa() const
Get number of hexahedral elements.
Definition CGeometry.hpp:1414
void SetMultiGridMarkerQuantity(const CGeometry *fine_grid, unsigned short val_marker, T &wall_quantity)
Set a representative wall value of the agglomerated control volumes on a particular boundary marker.
Definition CGeometry.hpp:1781
su2double GetSpanAreaIn(unsigned short val_marker, unsigned short val_span) const
Get the value of the inflow area at each span.
Definition CGeometry.hpp:1601
virtual void SetPoint_Connectivity()
Set connectivity between points.
Definition CGeometry.hpp:819
unsigned short * nSpanWiseSections
Number of Span wise section for each turbo marker, indexed by inflow/outflow.
Definition CGeometry.hpp:170
unsigned long GetnVertexSpanMax(unsigned short marker_flag) const
Get number of vertices.
Definition CGeometry.hpp:671
unsigned long Global_nelem_quad_bound
Total number of quads on the mesh boundaries across all processors.
Definition CGeometry.hpp:128
short * Marker_All_SendRecv
MPI Marker.
Definition CGeometry.hpp:141
unsigned long GetGlobal_nElem() const
Retrieve total number of elements in a simulation across all processors.
Definition CGeometry.hpp:1336
void UpdateCustomBoundaryConditions(CGeometry **geometry_container, CConfig *config)
Update the multi-grid structure for the customized boundary conditions.
Definition CGeometry.cpp:2789
void GetGlobalElementAdjacencyMatrix(vector< unsigned long > &neighbour_start, long *&neighbour_idx) const
Build the global (entire mesh!) adjacency matrix for the elements in compressed format....
Definition CGeometry.cpp:3735
void SetTangGridVelIn(su2double value, unsigned short val_marker, unsigned short val_span)
Set the value of the inflow tangential velocity at each span.
Definition CGeometry.hpp:1640
vector< su2double > SurfaceAreaCfgFile
Total Surface area for all markers.
Definition CGeometry.hpp:267
vector< vector< unsigned long > > Plane_points
Vector containing points appearing on a single plane.
Definition CGeometry.hpp:155
virtual void SetWallDistance(su2double val)
Set wall distances a specific value.
Definition CGeometry.hpp:1976
su2vector< su2uint > finiteVolumeLToUTranspMap
FVM L-entry -> U-entry of its transpose.
Definition CGeometry.hpp:208
vector< vector< su2double > > GetYCoord() const
Get y coords of geometrical planes in the mesh.
Definition CGeometry.hpp:1436
int * nPoint_PeriodicSend
Data structure holding number of vertices for each send in periodic comms.
Definition CGeometry.hpp:327
virtual long GetGlobal_to_Local_Point(unsigned long val_ipoint) const
A virtual member.
Definition CGeometry.hpp:1330
unsigned long GetMax_GlobalPoint() const
Get the number of elements in vtk fortmat.
Definition CGeometry.hpp:796
CVertex *** vertex
Boundary Vertex vector (dual grid information).
Definition CGeometry.hpp:255
int * nPoint_P2PRecv
Data structure holding number of vertices for each recv in point-to-point comms.
Definition CGeometry.hpp:289
unsigned long * nPointCumulative
Cumulative storage array containing the total number of points on all prior ranks in the linear parti...
Definition CGeometry.hpp:279
int nP2PSend
Number of sends during point-to-point comms.
Definition CGeometry.hpp:285
unsigned long Global_nPointDomain
Total number of nodes in a simulation across all processors (excluding halos).
Definition CGeometry.hpp:100
void SetTurboRadiusOut(su2double value, unsigned short val_marker, unsigned short val_span)
Set the value of the outflow radius at each span.
Definition CGeometry.hpp:1685
su2double * bufD_P2PSend
Data structure for su2double point-to-point send.
Definition CGeometry.hpp:304
const su2vector< su2uint > & GetUToLTransposeSparsePatternMap(ConnectivityType type)
Get the bijective map from U-entry indices to L-entry indices of their transposes.
Definition CGeometry.cpp:4150
virtual const su2double * GetStreamwise_Periodic_RefNode() const
Get a pointer to the reference node coordinate vector.
Definition CGeometry.hpp:2008
void SetnElem(unsigned long val_nelem)
Set the number of grid elements.
Definition CGeometry.hpp:785
bool CheckEdge(unsigned long first_point, unsigned long second_point) const
Get the edge index from using the nodes of the edge.
Definition CGeometry.hpp:717
virtual void SetMultiGridWallTemperature(const CGeometry *fine_grid, unsigned short val_marker)
A virtual member.
Definition CGeometry.hpp:1038
su2vector< su2uint > finiteVolumeUToLTranspMap
FVM U-entry -> L-entry of its transpose.
Definition CGeometry.hpp:209
int * nPoint_P2PSend
Data structure holding number of vertices for each send in point-to-point comms.
Definition CGeometry.hpp:287
virtual void SetBoundSensitivity(CConfig *config)
A virtual member.
Definition CGeometry.hpp:1072
bool SegmentIntersectsPlane(const su2double *Segment_P0, const su2double *Segment_P1, su2double Variable_P0, su2double Variable_P1, const su2double *Plane_P0, const su2double *Plane_Normal, su2double *Intersection, su2double &Variable_Interp)
Compute the intersection between a segment and a plane.
Definition CGeometry.cpp:1754
vector< vector< su2double > > Zcoord_plane
Vector containing z coordinates of new points appearing on a single plane.
Definition CGeometry.hpp:152
unordered_map< unsigned long, unsigned long > Global_to_Local_Elem
Mapping of global to local index for elements.
Definition CGeometry.hpp:272
void PreprocessPeriodicComms(CGeometry *geometry, CConfig *config)
Routine to set up persistent data structures for periodic communications.
Definition CGeometry.cpp:1158
virtual bool FindFace(unsigned long first_elem, unsigned long second_elem, unsigned short &face_first_elem, unsigned short &face_second_elem)
Finds face of element.
Definition CGeometry.hpp:805
unsigned short nCommLevel
Number of non-blocking communication levels.
Definition CGeometry.hpp:134
virtual su2double Compute_Thickness(su2double *Plane_P0, su2double *Plane_Normal, su2double Location, CConfig *config, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil, su2double &ZLoc)
A virtual member.
Definition CGeometry.hpp:1232
virtual void SetVertex(const CConfig *config)
Sets the vertices.
Definition CGeometry.hpp:851
su2double ** TurboRadiusIn
Definition CGeometry.hpp:198
typename SelectMPIWrapper< passivedouble >::W::Request PassiveRequest
Definition CGeometry.hpp:318
unsigned long * Local_Marker_PeriodicRecv
Data structure holding the local index of the periodic marker for a particular vertex to be received ...
Definition CGeometry.hpp:345
unsigned short nMarker
Number of different markers of the mesh.
Definition CGeometry.hpp:133
unsigned long GetnVertexSpan(unsigned short val_marker, unsigned short val_span) const
Get number of vertices.
Definition CGeometry.hpp:653
void PreprocessP2PComms(CGeometry *geometry, CConfig *config)
Routine to launch non-blocking recvs only for all periodic communications.
Definition CGeometry.cpp:149
unsigned long nelem_triangle
Number of triangles in the mesh.
Definition CGeometry.hpp:110
unsigned short GetnZone() const
Get number of zones.
Definition CGeometry.hpp:581
virtual void FindNormal_Neighbor(const CConfig *config)
A virtual member.
Definition CGeometry.hpp:1318
unsigned long nPoint
Number of points of the mesh.
Definition CGeometry.hpp:96
int nPeriodicRecv
Number of receives during periodic comms.
Definition CGeometry.hpp:326
su2double GetSpanAreaOut(unsigned short val_marker, unsigned short val_span) const
Get the value of the outflow area at each span.
Definition CGeometry.hpp:1611
su2double GetMaxAngularCoord(unsigned short val_marker, unsigned short val_span) const
max angular pitch independently from the MPI partions.
Definition CGeometry.hpp:1712
void ComputeAirfoil_Section(su2double *Plane_P0, su2double *Plane_Normal, su2double MinXCoord, su2double MaxXCoord, su2double MinYCoord, su2double MaxYCoord, su2double MinZCoord, su2double MaxZCoord, const su2double *FlowVariable, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil, vector< su2double > &Variable_Airfoil, bool original_surface, CConfig *config)
A virtual member.
Definition CGeometry.cpp:1934
su2double GetTurboRadius(unsigned short val_marker, unsigned short val_span) const
Get the value of the total area for each span.
Definition CGeometry.hpp:1561
vector< vector< su2double > > FaceArea_plane
Vector containing area/volume associated with new points appearing on a single plane.
Definition CGeometry.hpp:153
int maxCountPerPoint
Maximum number of pieces of data sent per vertex in point-to-point comms.
Definition CGeometry.hpp:284
virtual void Compute_Fuselage_LeadingTrailing(su2double *LeadingEdge, su2double *TrailingEdge, su2double *Plane_P0, su2double *Plane_Normal, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1266
unsigned long * Local_Point_P2PRecv
Data structure holding the local index of all vertices to be received in point-to-point comms.
Definition CGeometry.hpp:301
void SetElemVolume()
Compute and store the volume of the primal elements.
Definition CGeometry.cpp:3880
const su2double * GetSpanWiseValue(unsigned short val_marker) const
Get number of vertices.
Definition CGeometry.hpp:630
unsigned long nelem_hexa
Number of hexahedra in the mesh.
Definition CGeometry.hpp:116
virtual void SetAvgTurboValue(CConfig *config, unsigned short val_iZone, unsigned short marker_flag, bool allocate)
A virtual member.
Definition CGeometry.hpp:888
string GetMarker_Tag(unsigned short val_marker) const
Get the index of a marker.
Definition CGeometry.hpp:743
su2double GetTangGridVelOut(unsigned short val_marker, unsigned short val_span) const
Get the value of the outflow tangential velocity at each span.
Definition CGeometry.hpp:1591
unsigned long GetElementColorGroupSize() const
Get the group size used in element coloring.
Definition CGeometry.hpp:1947
static void ComputeWallDistance(const CConfig *const *config_container, CGeometry ****geometry_container, const int record_zone=-1)
Compute the distances to the closest vertex on viscous walls over the entire domain.
Definition CGeometry.cpp:4547
unsigned short nDim
Number of dimension of the problem.
Definition CGeometry.hpp:131
void SetnElem_Bound(unsigned short val_marker, unsigned long val_nelem_bound)
Set the number of boundary elements.
Definition CGeometry.hpp:759
vector< su2double > Volume_Ratio
Measure of dual CV volume ratio (max sub-element volume / min sub-element volume).
Definition CGeometry.hpp:359
su2double ** SpanAreaOut
Area at each span wise section for each turbomachinery marker.
Definition CGeometry.hpp:197
virtual void UpdateTurboVertex(CConfig *config, unsigned short val_iZone, unsigned short marker_flag)
A virtual member.
Definition CGeometry.hpp:879
const su2double * GetAverageNormal(unsigned short val_marker, unsigned short val_span) const
Get the average normal at a specific span for a given marker.
Definition CGeometry.hpp:1541
LDUSparsePattern finiteVolumePatternFillN
FVM sparsity with N-fill (e.g. for ILU-N).
Definition CGeometry.hpp:204
virtual su2double Compute_Area(su2double *Plane_P0, su2double *Plane_Normal, CConfig *config, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1241
unsigned long GetnNonconvexElements() const
Get the amount of nonconvex elements in the mesh.
Definition CGeometry.hpp:1996
su2vector< su2uint > finiteElementUToLTranspMap
FEM U-entry -> L-entry of its transpose.
Definition CGeometry.hpp:211
unsigned short * nSpanSectionsByMarker
Number of Span wise section for each turbo marker, indexed by marker. Needed for deallocation.
Definition CGeometry.hpp:172
vector< vector< su2double > > Ycoord_plane
Vector containing y coordinates of new points appearing on a single plane.
Definition CGeometry.hpp:150
unsigned long GetGlobal_nElemHexa() const
Retrieve total number of hexahedral elements in a simulation across all processors.
Definition CGeometry.hpp:1372
unsigned long GetnElem_Bound(unsigned short val_marker) const
Get the number of boundary elements.
Definition CGeometry.hpp:791
unsigned long GetGlobal_nElemPyra() const
Retrieve total number of pyramid elements in a simulation across all processors.
Definition CGeometry.hpp:1384
void PostPeriodicSends(CGeometry *geometry, const CConfig *config, COMM_TYPE commType, unsigned short countPerPeriodicPoint, int val_iMessage) const
Routine to launch a single non-blocking send once the buffer is loaded for a periodic commucation.
Definition CGeometry.cpp:1582
string * Tag_to_Marker
Names of boundary markers.
Definition CGeometry.hpp:260
su2double GetMinAngularCoord(unsigned short val_marker, unsigned short val_span) const
min angular pitch independently from the MPI partions.
Definition CGeometry.hpp:1703
unsigned long GetnTotVertexSpan(unsigned short val_marker, unsigned short val_span) const
A total number of vertex independently from the MPI partions.
Definition CGeometry.hpp:1694
void SetnNonconvexElements(unsigned long nonconvex_elems)
Set the amount of nonconvex elements in the mesh.
Definition CGeometry.hpp:1990
virtual void SetColorGrid_Parallel(const CConfig *config)
A virtual member.
Definition CGeometry.hpp:990
virtual su2double Compute_Height(su2double *Plane_P0, su2double *Plane_Normal, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1216
CGeometry()
Constructor of the class.
Definition CGeometry.cpp:36
int * Neighbors_P2PSend
Data structure holding the ranks of the neighbors for point-to-point send comms.
Definition CGeometry.hpp:291
vector< su2double > Aspect_Ratio
Measure of dual CV aspect ratio (max face area / min face area).
Definition CGeometry.hpp:357
virtual void SetControlVolume(const CGeometry *fine_grid, unsigned short action)
A virtual member.
Definition CGeometry.hpp:1058
su2double ** SpanAreaIn
Definition CGeometry.hpp:196
su2double GetTangGridVelIn(unsigned short val_marker, unsigned short val_span) const
Get the value of the inflow tangential velocity at each span.
Definition CGeometry.hpp:1581
virtual su2double Compute_Dihedral(su2double *LeadingEdge_im1, su2double *TrailingEdge_im1, su2double *LeadingEdge_i, su2double *TrailingEdge_i)
A virtual member.
Definition CGeometry.hpp:1273
void SetGlobal_nPointDomain(unsigned long val_global_npoint)
Set the value of the total number of points globally in the simulation.
Definition CGeometry.hpp:779
unsigned long elemColorGroupSize
Size of the element groups within each color.
Definition CGeometry.hpp:218
su2double GetTurboRadiusOut(unsigned short val_marker, unsigned short val_span) const
Get the value of the outflow radius at each span.
Definition CGeometry.hpp:1631
long FindEdge(unsigned long first_point, unsigned long second_point, bool error=true) const
Get the edge index from using the nodes of the edge.
Definition CGeometry.hpp:698
void RegisterCoordinates() const
Register the coordinates of the mesh nodes.
Definition CGeometry.cpp:2720
void SetnDim(unsigned short val_nDim)
Set the number of dimensions of the problem.
Definition CGeometry.hpp:736
unsigned long * nPointLinear
Array containing the total number of nodes on each rank due to a linear partioning by global index.
Definition CGeometry.hpp:277
void SetRotationalVelocity(const CConfig *config, bool print=false)
Set cartesian grid velocity based on rotational speed and axis.
Definition CGeometry.cpp:3948
virtual su2double Compute_LERadius(su2double *Plane_P0, su2double *Plane_Normal, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1224
void SetTranslationalVelocity(const CConfig *config, bool print=false)
Set the translational velocity at each node.
Definition CGeometry.cpp:4017
bool RayIntersectsTriangle(const su2double orig[3], const su2double dir[3], const su2double vert0[3], const su2double vert1[3], const su2double vert2[3], su2double *intersect)
Ray Intersects Triangle (Moller and Trumbore algorithm)
Definition CGeometry.cpp:1803
void SetMarker_Tag(unsigned short val_marker, string val_index)
Set index of a marker.
Definition CGeometry.hpp:750
map< int, int > PeriodicRecv2Neighbor
Data structure holding the reverse mapping of the ranks of the neighbors for periodic recv comms.
Definition CGeometry.hpp:337
unsigned long nelem_tetra
Number of tetrahedra in the mesh.
Definition CGeometry.hpp:114
virtual void MatchActuator_Disk(const CConfig *config)
A virtual member.
Definition CGeometry.hpp:930
unsigned long GetGlobal_nElemPris() const
Retrieve total number of prism elements in a simulation across all processors.
Definition CGeometry.hpp:1378
virtual void SetControlVolume(CConfig *config, unsigned short action)
Sets control volume.
Definition CGeometry.hpp:918
virtual std::unique_ptr< CADTElemClass > ComputeViscousWallADT(const CConfig *config) const
Compute an ADT including the coordinates of all viscous markers.
Definition CGeometry.hpp:1959
unsigned long nVertexSpanMax[3]
max number of vertexes for each span section for each marker flag.
Definition CGeometry.hpp:178
unsigned long nPointGhost
Number of ghost points of the mesh.
Definition CGeometry.hpp:98
auto * GetP2PRecvBuf() const
Returns the receive buffer for a given data type.
Definition CGeometry.hpp:461
void AllocateP2PComms(unsigned short val_countPerPoint)
Routine to allocate buffers for point-to-point MPI communications. Also called to dynamically realloc...
Definition CGeometry.cpp:343
vector< vector< su2double > > Xcoord_plane
Vector containing x coordinates of new points appearing on a single plane.
Definition CGeometry.hpp:148
bool SegmentIntersectsTriangle(su2double point0[3], const su2double point1[3], su2double vert0[3], su2double vert1[3], su2double vert2[3])
Segment Intersects Triangle.
Definition CGeometry.cpp:1898
void SetSpanAreaIn(su2double value, unsigned short val_marker, unsigned short val_span)
Set the value of the inflow area at each span.
Definition CGeometry.hpp:1658
unsigned long Global_nelem_edge
Total number of edges in the mesh across all processors.
Definition CGeometry.hpp:109
unsigned long GetnEdge() const
Get number of edges.
Definition CGeometry.hpp:617
int * nPoint_PeriodicRecv
Data structure holding number of vertices for each recv in periodic comms.
Definition CGeometry.hpp:329
const su2double * GetAverageGridVel(unsigned short val_marker, unsigned short val_span) const
Get the average grid velocity at a specific span for a given marker.
Definition CGeometry.hpp:1730
virtual void SetRestricted_GridVelocity(const CGeometry *fine_grid)
A virtual member.
Definition CGeometry.hpp:1130
auto * GetP2PSendBuf() const
Returns the send buffer for a given data type.
Definition CGeometry.hpp:440
ColMajorMatrix< uint8_t > CoarseGridColor_
Coarse grid levels, colorized.
Definition CGeometry.hpp:220
int maxCountPerPeriodicPoint
Maximum number of pieces of data sent per vertex in periodic comms.
Definition CGeometry.hpp:324
unsigned short * bufS_P2PSend
Data structure for unsigned long point-to-point send.
Definition CGeometry.hpp:314
su2double *** AverageTurboNormal
Average boundary normal at each span wise section for each marker in the turbomachinery frame of refe...
Definition CGeometry.hpp:180
const su2vector< su2uint > & GetLToUTransposeSparsePatternMap(ConnectivityType type)
Get the bijective map from L-entry indices to U-entry indices of their transposes.
Definition CGeometry.cpp:4139
unsigned long * beg_node
Array containing the first node on each rank due to a linear partitioning by global index.
Definition CGeometry.hpp:273
bool SegmentIntersectsLine(const su2double point0[2], const su2double point1[2], const su2double vert0[2], const su2double vert1[2])
Segment Intersects Line (for 2D FFD Intersection)
Definition CGeometry.cpp:1859
virtual void Compute_Wing(CConfig *config, bool original_surface, su2double &Wing_Volume, su2double &Wing_MinMaxThickness, su2double &Wing_MaxMaxThickness, su2double &Wing_MinChord, su2double &Wing_MaxChord, su2double &Wing_MinLERadius, su2double &Wing_MaxLERadius, su2double &Wing_MinToC, su2double &Wing_MaxToC, su2double &Wing_ObjFun_MinToC, su2double &Wing_MaxTwist, su2double &Wing_MaxCurvature, su2double &Wing_MaxDihedral)
A virtual member.
Definition CGeometry.hpp:1290
const int rank
MPI Rank.
Definition CGeometry.hpp:94
virtual void SetMultiGridWallHeatFlux(const CGeometry *fine_grid, unsigned short val_marker)
A virtual member.
Definition CGeometry.hpp:1031
unsigned long GetnElemTetr() const
Get number of tetrahedral elements.
Definition CGeometry.hpp:1408
virtual void VisualizeControlVolume(const CConfig *config) const
A virtual member.
Definition CGeometry.hpp:924
CCompressedSparsePatternUL elemColoring
Element coloring structure for thread-based parallelization.
Definition CGeometry.hpp:216
bool GetRadialNeighbourhood(const unsigned long iElem_global, const passivedouble radius, size_t search_limit, const vector< unsigned long > &neighbour_start, const long *neighbour_idx, const su2double *cg_elem, vector< long > &neighbours, vector< bool > &is_neighbor) const
Get the neighbours of the global element in the first position of "neighbours" that are within "radiu...
Definition CGeometry.cpp:3815
unsigned long nelem_triangle_bound
Number of triangles on the mesh boundaries.
Definition CGeometry.hpp:124
unsigned long Global_nelem_edge_bound
Total number of edges on the mesh boundaries across all processors.
Definition CGeometry.hpp:123
unsigned long GetnPointDomain() const
Get number of real points (that belong to the domain).
Definition CGeometry.hpp:593
unsigned long * Local_Marker_PeriodicSend
Data structure holding the local index of the periodic marker for a particular vertex to be sent in p...
Definition CGeometry.hpp:343
unsigned long Global_nPoint
Total number of nodes in a simulation across all processors (including halos).
Definition CGeometry.hpp:99
void SetnVertexSpanMax(unsigned short marker_flag, unsigned long nVertMax)
Get number of vertices.
Definition CGeometry.hpp:687
su2double ** AverageTangGridVel
Average tangential rotational speed at each span wise section for each marker.
Definition CGeometry.hpp:185
unsigned long nelem_pyramid
Number of pyramids in the mesh.
Definition CGeometry.hpp:120
virtual su2double Compute_WaterLineWidth(su2double *Plane_P0, su2double *Plane_Normal, CConfig *config, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1207
unsigned short GetnDim() const
Get number of coordinates.
Definition CGeometry.hpp:575
virtual void ComputeNSpan(CConfig *config, unsigned short val_iZone, unsigned short marker_flag, bool allocate)
Computes the N span.
Definition CGeometry.hpp:860
su2double *** AverageNormal
Average boundary normal at each span wise section for each marker.
Definition CGeometry.hpp:182
virtual void SetAvgTurboGeoValues(const CConfig *donor_config, CGeometry *donor_geometry, unsigned short donorZone)
Store all the turboperformance in the solver in final zone.
Definition CGeometry.hpp:904
su2double ** TurboRadiusOut
Radius at each span wise section for each turbomachinery marker.
Definition CGeometry.hpp:199
unsigned short GetnMarker() const
Get number of markers.
Definition CGeometry.hpp:623
LDUSparsePattern finiteElementPatternFill0
FEM sparsity with 0-fill (structural pattern).
Definition CGeometry.hpp:205
CEdge * edges
Edge vector (dual grid information).
Definition CGeometry.hpp:254
virtual void SetVertex(const CGeometry *fine_grid, const CConfig *config)
A virtual member.
Definition CGeometry.hpp:1051
unsigned long GetnElemLine() const
Get number of triangular elements.
Definition CGeometry.hpp:1390
void PostP2PRecvs(CGeometry *geometry, const CConfig *config, COMM_TYPE commType, unsigned short countPerPoint, bool val_reverse) const
Routine to launch non-blocking recvs only for all point-to-point communication with neighboring parti...
Definition CGeometry.cpp:380
SU2_MPI::Request * req_P2PRecv
Data structure for point-to-point recv requests.
Definition CGeometry.hpp:316
su2double ** MaxAngularCoord
Max angular pitch at each span wise section for each marker.
Definition CGeometry.hpp:188
su2vector< su2uint > finiteElementLToUTranspMap
FEM L-entry -> U-entry of its transpose.
Definition CGeometry.hpp:210
unsigned long GetnFreqSpan(unsigned short val_marker, unsigned short val_span) const
Get number of frequencies per span for NRBC.
Definition CGeometry.hpp:662
unsigned long GetnFreqSpanMax(unsigned short marker_flag) const
Get number of max frequencies for initializing the Fourier Coefficient for NR BC.
Definition CGeometry.hpp:678
LDUSparsePattern finiteVolumePatternFill0
FVM sparsity with 0-fill (structural pattern).
Definition CGeometry.hpp:203
int * Neighbors_PeriodicRecv
Data structure holding the ranks of the neighbors for periodic recv comms.
Definition CGeometry.hpp:333
void SetMGLevel(unsigned short val_iMesh)
Set the multigrid index for the current geometry object.
Definition CGeometry.hpp:1861
CCompressedSparsePatternUL edgeColoring
Edge coloring structure for thread-based parallelization.
Definition CGeometry.hpp:215
virtual su2double Compute_Curvature(su2double *LeadingEdge_im1, su2double *TrailingEdge_im1, su2double *LeadingEdge_i, su2double *TrailingEdge_i, su2double *LeadingEdge_ip1, su2double *TrailingEdge_ip1)
A virtual member.
Definition CGeometry.hpp:1281
virtual void ReadUnorderedSensitivity(CConfig *config)
A virtual member.
Definition CGeometry.hpp:1508
virtual void Compute_Nacelle(CConfig *config, bool original_surface, su2double &Nacelle_Volume, su2double &Nacelle_MinMaxThickness, su2double &Nacelle_MaxMaxThickness, su2double &Nacelle_MinChord, su2double &Nacelle_MaxChord, su2double &Nacelle_MinLERadius, su2double &Nacelle_MaxLERadius, su2double &Nacelle_MinToC, su2double &Nacelle_MaxToC, su2double &Nacelle_ObjFun_MinToC, su2double &Nacelle_MaxTwist)
A virtual member.
Definition CGeometry.hpp:1308
void SetTangGridVelOut(su2double value, unsigned short val_marker, unsigned short val_span)
Set the value of the outflow tangential velocity at each span.
Definition CGeometry.hpp:1649
virtual void SetBoundaries(CConfig *config)
A virtual member.
Definition CGeometry.hpp:1018
void SetnMarker(unsigned short val_nmarker)
A virtual member.
Definition CGeometry.hpp:730
CPrimalGrid ** elem
Element vector (primal grid information).
Definition CGeometry.hpp:251
long ** nVertexSpan
number of vertexes for span wise section for each marker.
Definition CGeometry.hpp:176
void ComputeModifiedSymmetryNormals(const CConfig *config)
Computes modified normals at intersecting symmetry planes.
Definition CGeometry.cpp:2857
const CLineletInfo & GetLineletInfo(const CConfig *config) const
Get the linelet definition, this function computes the linelets if that has not been done yet.
Definition CGeometry.cpp:4340
CLineletInfo lineletInfo
Definition CGeometry.hpp:246
su2double GetTurboRadiusIn(unsigned short val_marker, unsigned short val_span) const
Get the value of the inflow radius at each span.
Definition CGeometry.hpp:1621
su2double ** TangGridVelOut
Average tangential rotational speed at each span wise section for each turbomachinery marker.
Definition CGeometry.hpp:194
unsigned long Max_GlobalPoint
Greater global point in the domain local structure.
Definition CGeometry.hpp:137
virtual void Check_BoundElem_Orientation(const CConfig *config)
A virtual member.
Definition CGeometry.hpp:978
unsigned long GetGlobal_nElemDomain() const
Retrieve total number of elements in a simulation across all processors (excluding halos).
Definition CGeometry.hpp:1342
virtual void SetSensitivity(unsigned long iPoint, unsigned short iDim, su2double val)
A virtual member.
Definition CGeometry.hpp:1523
su2double * bufD_PeriodicSend
Data structure for su2double periodic send.
Definition CGeometry.hpp:348
unsigned long Global_nelem_pyramid
Total number of pyramids in the mesh across all processors.
Definition CGeometry.hpp:121
su2double GetCustomBoundaryHeatFlux(unsigned short val_marker, unsigned long val_vertex) const
Get the value of the customized normal heat flux at a specified vertex on a specified marker.
Definition CGeometry.hpp:1759
virtual void Compute_Fuselage(CConfig *config, bool original_surface, su2double &Fuselage_Volume, su2double &Fuselage_WettedArea, su2double &Fuselage_MinWidth, su2double &Fuselage_MaxWidth, su2double &Fuselage_MinWaterLineWidth, su2double &Fuselage_MaxWaterLineWidth, su2double &Fuselage_MinHeight, su2double &Fuselage_MaxHeight, su2double &Fuselage_MaxCurvature)
A virtual member.
Definition CGeometry.hpp:1299
vector< vector< su2double > > GetZCoord() const
Get z coords of geometrical planes in the mesh.
Definition CGeometry.hpp:1441
unsigned long * nVertex
Number of vertex for each marker.
Definition CGeometry.hpp:258
unsigned long nFace
Number of faces of the mesh.
Definition CGeometry.hpp:107
vector< su2double > Orthogonality
Measure of dual CV orthogonality angle (0 to 90 deg., 90 being best).
Definition CGeometry.hpp:356
su2double ** TangGridVelIn
Definition CGeometry.hpp:193
unsigned short * bufS_PeriodicSend
Data structure for unsigned long periodic send.
Definition CGeometry.hpp:350
unsigned long GetnElemQuad() const
Get number of quadrilateral elements.
Definition CGeometry.hpp:1402
virtual void ComputeMeshQualityStatistics(const CConfig *config)
A virtual member.
Definition CGeometry.hpp:1873
unsigned long GetGlobal_nElemQuad() const
Retrieve total number of quadrilateral elements in a simulation across all processors.
Definition CGeometry.hpp:1360
unsigned long GetGlobal_nPoint() const
Retrieve total number of nodes in a simulation across all processors (including halos).
Definition CGeometry.hpp:599
unsigned long * end_node
Array containing the last node on each rank due to a linear partitioning by global index.
Definition CGeometry.hpp:275
auto * GetP2PRecvReq() const
Returns the receive requests for a given data type.
Definition CGeometry.hpp:497
virtual void GatherInOutAverageValues(CConfig *config, bool allocate)
A virtual member.
Definition CGeometry.hpp:896
virtual void SetBoundControlVolume(const CGeometry *fine_grid, const CConfig *config, unsigned short action)
A virtual member.
Definition CGeometry.hpp:1066
virtual void SetCoord(const CGeometry *fine_grid)
A virtual member.
Definition CGeometry.hpp:1024
su2double * bufD_PeriodicRecv
Data structure for su2double periodic receive.
Definition CGeometry.hpp:347
map< int, int > PeriodicSend2Neighbor
Data structure holding the reverse mapping of the ranks of the neighbors for periodic send comms.
Definition CGeometry.hpp:335
unsigned long Global_nelem_hexa
Total number of hexahedra in the mesh across all processors.
Definition CGeometry.hpp:117
unsigned long nNonconvexElements
Number of nonconvex elements in the mesh.
Definition CGeometry.hpp:129
virtual void MatchPeriodic(const CConfig *config, unsigned short val_periodic)
Match periodic boundary points using coordinate-based matching.
Definition CGeometry.cpp:834
virtual void SetTecPlot(char config_filename[MAX_STRING_SIZE], bool new_file)
A virtual member.
Definition CGeometry.hpp:958
void SetnPointDomain(unsigned long val_npoint)
Set the number of grid points in the domain.
Definition CGeometry.hpp:773
COMM_TYPE GetCommType() const
Returns the COMM_TYPE enum for a given data type.
Definition CGeometry.hpp:423
unsigned short nZone
Number of zones in the problem.
Definition CGeometry.hpp:132
void InitiateComms(CGeometry *geometry, const CConfig *config, MPI_QUANTITIES commType) const
Routine to load a geometric quantity into the data structures for MPI point-to-point communication an...
Definition CGeometry.cpp:640
virtual void SetElement_Connectivity()
Connects elements .
Definition CGeometry.hpp:830
virtual void Compute_Wing_LeadingTrailing(su2double *LeadingEdge, su2double *TrailingEdge, su2double *Plane_P0, su2double *Plane_Normal, vector< su2double > &Xcoord_Airfoil, vector< su2double > &Ycoord_Airfoil, vector< su2double > &Zcoord_Airfoil)
A virtual member.
Definition CGeometry.hpp:1259
virtual void SetWallDistance(CADTElemClass *WallADT, const CConfig *config, unsigned short iZone=numeric_limits< unsigned short >::max())
Reduce the wall distance based on an previously constructed ADT.
Definition CGeometry.hpp:1969
int * Neighbors_PeriodicSend
Data structure holding the ranks of the neighbors for periodic send comms.
Definition CGeometry.hpp:331
Class for point definition (dual control volumes).
Definition CPoint.hpp:47
unsigned long GetChildren_CV(unsigned long iPoint, unsigned short nchildren_CV) const
Get the children control volume of an agglomerated control volume.
Definition CPoint.hpp:681
unsigned long GetPoint(unsigned long iPoint, unsigned long npoint) const
Get all the points that compose the control volume.
Definition CPoint.hpp:264
long GetEdge(unsigned long iPoint, unsigned long nedge) const
Get all the edges that compose the control volume.
Definition CPoint.hpp:291
long GetVertex(unsigned long iPoint, unsigned long iMarker) const
Get the vertex that compose the control volume for a marker.
Definition CPoint.hpp:316
bool GetDomain(unsigned long iPoint) const
For parallel computation, its indicates if a point must be computed or not.
Definition CPoint.hpp:423
su2double & GetVolume(unsigned long iPoint)
Get area or volume of the control volume.
Definition CPoint.hpp:557
unsigned short GetnPoint(unsigned long iPoint) const
Get the number of points that compose the control volume.
Definition CPoint.hpp:256
unsigned short GetnChildren_CV(unsigned long iPoint) const
Get the number of children of an agglomerated control volume.
Definition CPoint.hpp:721
Class to define the numerical primal grid.
Definition CPrimalGrid.hpp:45
Class for vertex definition for turbomachinery (equivalent to edges, but for the boundaries).
Definition CTurboVertex.hpp:38
Class for vertex definition (equivalent to edges, but for the boundaries).
Definition CVertex.hpp:38
unsigned long GetNode() const
Get the node of the vertex.
Definition CVertex.hpp:70
double passivedouble
Definition code_config.hpp:129
passivedouble su2mixedfloat
Definition code_config.hpp:189
passivedouble su2double
Definition code_config.hpp:181
#define SPRINTF
Definition datatype_structure.hpp:181
ConnectivityType
In FVM points are connected by the edges (faces) of the grid. In FEM, two points are connected if the...
Definition graph_toolbox.hpp:49
#define CURRENT_FUNCTION
Definition mpi_structure.hpp:59
const int MASTER_NODE
Master node for MPI parallelization.
Definition option_structure.hpp:112
@ STEADY_TRANSLATION
Simulation in a steadily translating frame.
Definition option_structure.hpp:864
@ ROTATING_FRAME
Simulation in a rotating frame.
Definition option_structure.hpp:863
COMM_TYPE
Definition option_structure.hpp:116
@ UNSIGNED_SHORT
Communication type for unsigned short.
@ PASSIVE_DOUBLE
Communication type for passivedouble.
@ FLOAT
Communication type for su2mixedfloat.
@ DOUBLE
Communication type for double.
const int SINGLE_NODE
There is only a node in the MPI parallelization.
Definition option_structure.hpp:113
const unsigned int MAX_STRING_SIZE
Maximum size of a generic string.
Definition option_structure.hpp:78
MPI_QUANTITIES
Vertex-based quantities exchanged in MPI point-to-point communications.
Definition option_structure.hpp:2873
Linelets (mesh lines perpendicular to stretching direction).
Definition CGeometry.hpp:224
std::vector< unsigned > lineletIdx
Signals that a point is not on a linelet.
Definition CGeometry.hpp:232
static passivedouble ALPHA_ISOTROPIC()
Detect isotropic mesh region.
Definition CGeometry.hpp:226
@ MAX_LINELET_POINTS
Definition CGeometry.hpp:227
@ NO_LINELET
Definition CGeometry.hpp:235
std::vector< uint8_t > lineletColor
Coloring transfered to points, for visualization.
Definition CGeometry.hpp:240
bool computed
Set once the (collective) computation is done, even if a rank has no linelets.
Definition CGeometry.hpp:242
std::vector< unsigned long > colorOffsets
Definition CGeometry.hpp:238
std::vector< std::vector< unsigned long > > linelets
Point indices for each linelet.
Definition CGeometry.hpp:229
Aggregates the full symmetric CSR and its LDU split (L strictly-lower, U strictly-upper)....
Definition CGeometry.hpp:81
CCompressedSparsePatternUL l
Definition CGeometry.hpp:83
CCompressedSparsePatternUL csr
Definition CGeometry.hpp:82
CCompressedSparsePatternUL u
Definition CGeometry.hpp:84
bool empty() const
Definition CGeometry.hpp:86