Documentation a537f1bdf2
Loading...
Searching...
No Matches
fem_geometry_structure.hpp
Go to the documentation of this file.
1/*!
2 * \file fem_geometry_structure.hpp
3 * \brief Headers of the main subroutines for creating the geometrical structure for the FEM solver.
4 * The subroutines and functions are in the <i>fem_geometry_structure.cpp</i> file.
5 * \author E. van der Weide
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 "../geometry/CGeometry.hpp"
33#include "../wall_model.hpp"
34#include "../linear_algebra/blas_structure.hpp"
35#include "../toolboxes/fem/CFaceOfElement.hpp"
36
37using namespace std;
38
39/*!
40 * \class CVolumeElementFEM
41 * \brief Class to store a volume element for the FEM solver.
42 * \author E. van der Weide
43 * \version 8.5.0 "Harrier"
44 */
46 public:
47 bool elemIsOwned; /*!< \brief Whether or not this is an owned element. */
48 bool JacIsConsideredConstant; /*!< \brief Whether or not the Jacobian of the transformation
49 to the standard element is considered constant. */
50
51 int rankOriginal; /*!< \brief The rank where the original volume is stored. For
52 the owned volumes, this is simply the current rank. */
53
54 short periodIndexToDonor; /*!< \brief The index of the periodic transformation to the donor
55 element. Only for halo elements. A -1 indicates no periodic
56 transformation. */
57
58 unsigned short VTK_Type; /*!< \brief Element type using the VTK convention. */
59 unsigned short nPolyGrid; /*!< \brief Polynomial degree for the geometry of the element. */
60 unsigned short nPolySol; /*!< \brief Polynomial degree for the solution of the element. */
61 unsigned short nDOFsGrid; /*!< \brief Number of DOFs for the geometry of the element. */
62 unsigned short nDOFsSol; /*!< \brief Number of DOFs for the solution of the element. */
63 unsigned short nFaces; /*!< \brief Number of faces of the element. */
64 unsigned short timeLevel; /*!< \brief Time level of the element when time accurate local
65 time stepping is employed. */
66
67 unsigned short indStandardElement; /*!< \brief Index in the vector of standard elements. */
68
69 unsigned int factTimeLevel; /*!< \brief Number of local time steps for this element
70 compared to the largest time step when time
71 accurate local time stepping is employed. */
72
73 unsigned long elemIDGlobal; /*!< \brief Global element ID of this element. */
74 unsigned long offsetDOFsSolGlobal; /*!< \brief Global offset of the solution DOFs of this element. */
75 unsigned long offsetDOFsSolLocal; /*!< \brief Local offset of the solution DOFs of this element. */
76
77 unsigned long offsetDOFsSolThisTimeLevel; /*!< \brief Local offset of the solution DOFs of this element
78 in the working vector of the time level of the element.
79 Needed for time accurate local time stepping. */
80 unsigned long offsetDOFsSolPrevTimeLevel; /*!< \brief Local offset of the solution DOFs of this element
81 in the working vector of the previous time level. */
82
83 vector<bool> JacFacesIsConsideredConstant; /*!< \brief Vector with the booleans whether the Jacobian of the
84 transformation to the standard element is constant for the faces. */
85 vector<bool> ElementOwnsFaces; /*!< \brief Vector with the booleans whether the element is the
86 owner of the faces. */
87
88 vector<unsigned long> nodeIDsGrid; /*!< \brief Vector with the node IDs of the grid for this element. */
89
90 su2double lenScale; /*!< \brief Length scale of the element. */
91
92 su2double shockSensorValue; /*!< \brief Value for sensing a shock */
93 su2double shockArtificialViscosity; /*!< \brief Artificial viscosity for a shock */
94
95 vector<su2double> metricTerms; /*!< \brief Vector of the metric terms in the
96 integration points of this element. */
97 vector<su2double> metricTermsSolDOFs; /*!< \brief Vector of the metric terms in the
98 solution DOFs of this element. */
99 vector<su2double> metricTerms2ndDer; /*!< \brief Vector of the metric terms needed for the
100 computation of the 2nd derivatives in the
101 integration points. Only determined when
102 needed (ADER-DG with non-aliased predictor
103 for the Navier-Stokes equations). */
104 vector<su2double> gridVelocities; /*!< \brief Vector of the grid velocities in the
105 integration points of this element. */
106 vector<su2double> gridVelocitiesSolDOFs; /*!< \brief Vector of the grid velocities in the
107 solution DOFs of this element. */
108 vector<su2double> massMatrix; /*!< \brief Mass matrix for this element. */
109 vector<su2double> invMassMatrix; /*!< \brief Inverse mass matrix for this element. */
110 vector<su2double> lumpedMassMatrix; /*!< \brief Lumped mass matrix for this element. */
111
112 vector<su2double> coorIntegrationPoints; /*!< \brief The coordinates of the integration points of this element. */
113 vector<su2double> coorSolDOFs; /*!< \brief The coordinates of the solution DOFs of this element. */
114 vector<su2double> wallDistance; /*!< \brief The wall distance to the viscous walls for
115 the integration points of this element. */
116 vector<su2double> wallDistanceSolDOFs; /*!< \brief The wall distance to the viscous walls for
117 the solution DOFs of this element. */
118
119 /*!
120 * \brief Get all the corner points of all the faces of this element. It must be made sure
121 that the numbering of the faces is identical to the numbering used for the
122 standard elements.
123 * \param[out] nFaces - Number of faces of this element.
124 * \param[out] nPointsPerFace - Number of corner points for each of the faces.
125 * \param[out] faceConn - Global IDs of the corner points of the faces.
126 */
127 void GetCornerPointsAllFaces(unsigned short& numFaces, unsigned short nPointsPerFace[], unsigned long faceConn[6][4]);
128};
129
130/*!
131 * \class CPointFEM
132 * \brief Class to store a point for the FEM solver.
133 * \author E. van der Weide
134 * \version 8.5.0 "Harrier"
135 */
136struct CPointFEM {
137 unsigned long globalID; /*!< \brief The global ID of this point in the grid. */
138 short periodIndexToDonor; /*!< \brief The index of the periodic transformation to the donor
139 element. Only for halo elements. A -1 indicates no periodic
140 transformation. */
141 su2double coor[3] = {0.0}; /*!< \brief Array with the coordinates of the node. */
142
143 /*!
144 * \brief Less than operator of the class. Needed for the sorting.
145 */
146 bool operator<(const CPointFEM& other) const;
147
148 /*!
149 * \brief Equal operator of the class. Needed for the removal of double entities.
150 */
151 bool operator==(const CPointFEM& other) const;
152};
153
154/*!
155 * \class CInternalFaceElementFEM
156 * \brief Class to store an internal face for the FEM solver.
157 * \author E. van der Weide
158 * \version 8.5.0 "Harrier"
159 */
161 unsigned short VTK_Type; /*!< \brief Element type using the VTK convention. */
162
163 unsigned short indStandardElement; /*!< \brief Index in the vector of standard face elements. */
164
165 unsigned long elemID0; /*!< \brief Element ID adjacent to side 0 of the face. */
166 unsigned long elemID1; /*!< \brief Element ID adjacent to side 1 of the face. */
167
168 vector<unsigned long> DOFsGridFaceSide0; /*!< \brief Vector of the grid DOFs of side 0 of the face. */
169 vector<unsigned long> DOFsGridFaceSide1; /*!< \brief Vector of the grid DOFs of side 1 of the face. */
170 vector<unsigned long> DOFsSolFaceSide0; /*!< \brief Vector of the solution DOFs of side 0 of the face. */
171 vector<unsigned long> DOFsSolFaceSide1; /*!< \brief Vector of the solution DOFs of side 1 of the face. */
172
173 vector<unsigned long> DOFsGridElementSide0; /*!< \brief Vector of the grid DOFs of the element of side 0. */
174 vector<unsigned long> DOFsGridElementSide1; /*!< \brief Vector of the grid DOFs of the element of side 1. */
175 vector<unsigned long> DOFsSolElementSide0; /*!< \brief Vector of the solution DOFs of the element of side 0. */
176 vector<unsigned long> DOFsSolElementSide1; /*!< \brief Vector of the solution DOFs of the element of side 1. */
177
178 vector<su2double> metricNormalsFace; /*!< \brief The normals in the integration points of the face.
179 The normals point from side 0 to side 1. */
180 vector<su2double> metricCoorDerivFace0; /*!< \brief The terms drdx, dsdx, etc. of side 0 in the
181 integration points of the face. */
182 vector<su2double> metricCoorDerivFace1; /*!< \brief The terms dxdr, dydr, etc. of side 1 in the
183 integration points of the face. */
184
185 vector<su2double> coorIntegrationPoints; /*!< \brief Coordinates for the integration points of this face. */
186 vector<su2double> gridVelocities; /*!< \brief Grid velocities in the integration points of this face. */
187 vector<su2double> wallDistance; /*!< \brief The wall distance to the viscous walls for
188 the integration points of this face. */
189
190 /*!
191 * \brief Less than operator of the class. Needed for the sorting.
192 The criterion for comparison are the standard element and
193 adjacent volume ID's.
194 */
195 bool operator<(const CInternalFaceElementFEM& other) const;
196};
197
198/*!
199 * \class CSurfaceElementFEM
200 * \brief Class to store a surface element for the FEM solver.
201 * \author E. van der Weide
202 * \version 8.5.0 "Harrier"
203 */
205 unsigned short VTK_Type; /*!< \brief Element type using the VTK convention. */
206 unsigned short nPolyGrid; /*!< \brief Polynomial degree for the geometry of the element. */
207 unsigned short nDOFsGrid; /*!< \brief Number of DOFs for the geometry of the element. */
208
209 unsigned short indStandardElement; /*!< \brief Index in the vector of standard elements. */
210
211 unsigned long volElemID; /*!< \brief ID of the corresponding volume element. */
212 unsigned long boundElemIDGlobal; /*!< \brief Global ID of this surface element inside
213 the boundary to which it belongs. */
214
215 vector<unsigned long> nodeIDsGrid; /*!< \brief Vector with the node IDs of the grid for this element.
216 In this vector the original sequence of the grid file
217 is stored. */
218
219 vector<unsigned long> DOFsGridFace; /*!< \brief Vector of the grid DOFs of the face. In principle
220 the same information as nodeIDsGrid, but the sequence
221 could be different. */
222 vector<unsigned long> DOFsSolFace; /*!< \brief Vector of the solution DOFs of the face. */
223
224 vector<unsigned long> DOFsGridElement; /*!< \brief Vector of the grid DOFs of the adjacent element. */
225 vector<unsigned long> DOFsSolElement; /*!< \brief Vector of the solution DOFs of the adjacent element. */
226
227 vector<su2double> metricNormalsFace; /*!< \brief The normals in the integration points of the face.
228 The normals point out of the adjacent element. */
229 vector<su2double> metricCoorDerivFace; /*!< \brief The terms drdx, dsdx, etc. in the integration
230 points of the face. */
231 vector<su2double> coorIntegrationPoints; /*!< \brief The coordinates of the integration points of the face. */
232 vector<su2double> gridVelocities; /*!< \brief Grid velocities in the integration points of this face. */
233 vector<su2double> wallDistance; /*!< \brief The wall distances of the integration points
234 of the face. */
235
236 vector<unsigned long> donorsWallFunction; /*!< \brief Local element IDs of the donors for the wall
237 function treatment. These donors can be halo's. */
238 vector<unsigned short> nIntPerWallFunctionDonor; /*!< \brief The number of integration points per donor
239 element for the wall function treatment. */
240 vector<unsigned short> intPerWallFunctionDonor; /*!< \brief The integration points per donor element
241 for the wall function treatment. */
242 vector<vector<su2double> > matWallFunctionDonor; /*!< \brief Matrices, which store the interpolation coefficients
243 for the donors of the integration points.*/
244
245 /*!
246 * \brief Less than operator of the class. Needed for the sorting.
247 The criterion for comparison is the corresponding (local) volume ID.
248 */
249 bool operator<(const CSurfaceElementFEM& other) const { return volElemID < other.volElemID; }
250
251 /*!
252 * \brief Function, which determines the corner points of this surface element.
253 * \param[out] nPointsPerFace - Number of corner points of the face.
254 * \param[out] faceConn - The corner points of the face.
255 */
256 void GetCornerPointsFace(unsigned short& nPointsPerFace, unsigned long faceConn[]);
257};
258
259/*!
260 * \class CBoundaryFEM
261 * \brief Class to store a boundary for the FEM solver.
262 * \author E. van der Weide
263 * \version 8.5.0 "Harrier"
264 */
266 string markerTag; /*!< \brief Marker tag of this boundary. */
267
268 bool periodicBoundary = false; /*!< \brief Whether or not this boundary is a periodic boundary. */
269 bool haloInfoNeededForBC = false; /*!< \brief Whether or not information of halo elements
270 is needed to impose the boundary conditions. */
271
272 vector<unsigned long> nSurfElem; /*!< \brief Number of surface elements per time level,
273 cumulative storage format. */
274
275 vector<CSurfaceElementFEM> surfElem; /*!< \brief Vector of the local surface elements. */
276
277 CWallModel* wallModel = nullptr; /*!< \brief Wall model for LES. */
278
279 ~CBoundaryFEM(void) { delete wallModel; }
280};
281
282/*!
283 * \class CMeshFEM
284 * \brief Base class for the FEM solver.
285 * \author E. van der Weide
286 * \version 8.5.0 "Harrier"
287 */
288class CMeshFEM : public CGeometry {
289 protected:
290 unsigned long nVolElemTot{0}; /*!< \brief Total number of local volume elements, including halos. */
291 unsigned long nVolElemOwned{0}; /*!< \brief Number of owned local volume elements. */
292
293 vector<unsigned long> nVolElemOwnedPerTimeLevel; /*!< \brief Number of owned local volume elements
294 per time level. Cumulative storage. */
295 vector<unsigned long> nVolElemInternalPerTimeLevel; /*!< \brief Number of internal local volume elements per
296 time level. Internal means that the solution
297 data does not need to be communicated. */
298 vector<unsigned long> nVolElemHaloPerTimeLevel; /*!< \brief Number of local halo volume elements
299 per time level. Cumulative storage. */
300
301 vector<vector<unsigned long> > ownedElemAdjLowTimeLevel; /*!< \brief List of owned elements per time level that are
302 adjacent to elements of the lower time level. */
303 vector<vector<unsigned long> > haloElemAdjLowTimeLevel; /*!< \brief List of halo elements per time level that are
304 adjacent to elements of the lower time level. */
305
306 vector<CVolumeElementFEM> volElem; /*!< \brief Vector of the local volume elements, including halos. */
307
308 vector<CPointFEM> meshPoints; /*!< \brief Vector of the points of the FEM mesh. */
309
310 vector<CBoundaryFEM> boundaries; /*!< \brief Vector of the boundaries of the FEM mesh. */
311
312 vector<unsigned short> rotPerMarkers; /*!< \brief Vector, which contains the indices of the rotational
313 periodic markers. */
314 vector<vector<unsigned long> > rotPerHalos; /*!< \brief Vector of vector, which contains the indices of
315 the halo elements for which a rotationally periodic
316 correction must be applied. */
317
318 vector<int> ranksRecv; /*!< \brief Vector of ranks, from which this rank will receive halo
319 information. Self communication is included. */
320 vector<int> ranksSend; /*!< \brief Vector of ranks, to which this rank will send halo
321 information. Self communication is included. */
322
323 vector<vector<unsigned long> > entitiesSend; /*!< \brief Vector of vector, which contains the entities that
324 must be sent. Self communication is included. For DG
325 an entitity is an element, for regular FEM an entity
326 is a DOF. */
327 vector<vector<unsigned long> > entitiesRecv; /*!< \brief Vector of vector, which contains the entities that
328 must be received. Self communication is included. For DG
329 an entity is an element, for regular FEM an entity
330 is a DOF. */
331
332 vector<CFEMStandardBoundaryFace>
333 standardBoundaryFacesSol; /*!< \brief Vector that contains the standard boundary
334 faces used for the solution of the DG solver. */
335 vector<CFEMStandardBoundaryFace>
336 standardBoundaryFacesGrid; /*!< \brief Vector that contains the standard boundary
337 faces used for the geometry of the DG solver. */
338
339 CBlasStructure* blasFunctions{nullptr}; /*!< \brief Pointer to the object to carry out the BLAS functionalities. */
340
341 public:
342 /*!
343 * \brief Constructor of the class.
344 */
345 CMeshFEM(void) : CGeometry() {}
346
347 /*!
348 * \overload
349 * \brief Redistributes the grid over the ranks and creates the halo layer.
350 * \param[in] geometry - The linear distributed grid that must be redistributed.
351 * \param[in] config - Definition of the particular problem.
352 */
353 CMeshFEM(CGeometry* geometry, CConfig* config);
354
355 /*!
356 * \brief Destructor of the class.
357 */
358 ~CMeshFEM(void) override { delete blasFunctions; }
359
360 /*!
361 * \brief Function, which makes available the boundaries of the local FEM mesh.
362 * \return Pointer to the boundaries of the local FEM mesh.
363 */
364 inline CBoundaryFEM* GetBoundaries(void) { return boundaries.data(); }
365
366 /*!
367 * \brief Function, which makes available the mesh points of the local FEM mesh.
368 * \return Pointer to the mesh points of the local FEM mesh.
369 */
370 inline CPointFEM* GetMeshPoints(void) { return meshPoints.data(); }
371
372 /*!
373 * \brief Function, which makes available the number of mesh points of the local FEM mesh.
374 * \return Number of mesh points of the local FEM mesh.
375 */
376 inline unsigned long GetNMeshPoints(void) { return meshPoints.size(); }
377
378 /*!
379 * \brief Function, which makes available the number of owned volume elements in the local FEM mesh.
380 * \return Number of owned volume elements of the local FEM mesh.
381 */
382 inline unsigned long GetNVolElemOwned(void) const { return nVolElemOwned; }
383
384 /*!
385 * \brief Function, which makes available the total number of volume elements in the local FEM mesh.
386 * \return Total number of volume elements of the local FEM mesh.
387 */
388 inline unsigned long GetNVolElemTot(void) const { return nVolElemTot; }
389
390 /*!
391 * \brief Function, which makes available the volume elements in the local FEM mesh.
392 * \return Pointer to the volume elements of the local FEM mesh.
393 */
394 inline CVolumeElementFEM* GetVolElem(void) { return volElem.data(); }
395
396 /*!
397 * \brief Function, which makes available the number of owned volume elements per time level.
398 * \return The pointer to the data of nVolElemOwnedPerTimeLevel.
399 */
400 inline unsigned long* GetNVolElemOwnedPerTimeLevel(void) { return nVolElemOwnedPerTimeLevel.data(); }
401
402 /*!
403 * \brief Function, which makes available the number of internal volume elements per time level.
404 * \return The pointer to the data of nVolElemInternalPerTimeLevel.
405 */
406 inline unsigned long* GetNVolElemInternalPerTimeLevel(void) { return nVolElemInternalPerTimeLevel.data(); }
407
408 /*!
409 * \brief Function, which makes available the number of halo volume elements per time level.
410 * \return The pointer to the data of nVolElemHaloPerTimeLevel.
411 */
412 inline unsigned long* GetNVolElemHaloPerTimeLevel(void) { return nVolElemHaloPerTimeLevel.data(); }
413
414 /*!
415 * \brief Function, which makes available the vector of vectors containing the owned element
416 IDs adjacent to elements of a lower time level. Note that a copy is made.
417 * \return Copy of ownedElemAdjLowTimeLevel.
418 */
419 inline vector<vector<unsigned long> > GetOwnedElemAdjLowTimeLevel(void) { return ownedElemAdjLowTimeLevel; }
420
421 /*!
422 * \brief Function, which makes available the vector of vectors containing the halo element
423 IDs adjacent to elements of a lower time level. Note that a copy is made.
424 * \return Copy of haloElemAdjLowTimeLevel.
425 */
426 inline vector<vector<unsigned long> > GetHaloElemAdjLowTimeLevel(void) { return haloElemAdjLowTimeLevel; }
427
428 /*!
429 * \brief Function, which makes available the number of standard boundary faces of the solution.
430 * \return Number of standard boundary faces of the solution.
431 */
432 inline unsigned short GetNStandardBoundaryFacesSol(void) { return standardBoundaryFacesSol.size(); }
433
434 /*!
435 * \brief Function, which makes available the standard boundary faces of the solution.
436 * \return Pointer to the standard boundary faces of the solution.
437 */
439
440 /*!
441 * \brief Function, which makes available the vector of receive ranks as
442 a const reference.
443 * \return Const reference to the vector of ranks.
444 */
445 inline const vector<int>& GetRanksRecv(void) const { return ranksRecv; }
446
447 /*!
448 * \brief Function, which makes available the vector of send ranks as
449 a const reference.
450 * \return Const reference to the vector of ranks.
451 */
452 inline const vector<int>& GetRanksSend(void) const { return ranksSend; }
453
454 /*!
455 * \brief Function, which makes available the vector of vectors containing the receive
456 entities as a const reference.
457 * \return Const reference to the vector of vectors of receive entities.
458 */
459 inline const vector<vector<unsigned long> >& GetEntitiesRecv(void) const { return entitiesRecv; }
460
461 /*!
462 * \brief Function, which makes available the vector of vectors containing the send
463 entities as a const reference.
464 * \return Const reference to the vector of vectors of send entities.
465 */
466 inline const vector<vector<unsigned long> >& GetEntitiesSend(void) const { return entitiesSend; }
467
468 /*!
469 * \brief Function, which makes available the vector of rotational periodic markers
470 as a const reference.
471 * \return Const reference to the vector with rotational periodic markers.
472 */
473 inline const vector<unsigned short>& GetRotPerMarkers(void) const { return rotPerMarkers; }
474
475 /*!
476 * \brief Function, which makes available the vector of vectors containing the rotational
477 periodic halos as a const reference.
478 * \return Const reference to the vector of vectors with rotational periodic halos.
479 */
480 inline const vector<vector<unsigned long> >& GetRotPerHalos(void) const { return rotPerHalos; }
481
482 /*!
483 * \brief Compute surface area (positive z-direction) for force coefficient non-dimensionalization.
484 * \param[in] config - Definition of the particular problem.
485 */
486 void SetPositive_ZArea(CConfig* config) override;
487
488 protected:
489 /*!
490 * \brief Function, which computes the gradients of the parametric coordinates
491 w.r.t. the Cartesian coordinates in the integration points of a face,
492 i.e. drdx, drdy, dsdx, etc.
493 * \param[in] nIntegration - Number of integration points on the face.
494 * \param[in] nDOFs - Number of DOFs of the grid associated with the
495 neighboring element.
496 * \param[in] matDerBasisInt - Matrix, which contains the derivatives of the
497 basis functions w.r.t. the parametric
498 coordinates r, s and t in the integration points.
499 * \param[in] DOFs - The DOFs of the grid associated with the element.
500 * \param[out] derivCoor - Storage for the derivatives of the coordinates.
501 * \param[in] config - Definition of the particular problem.
502 */
503 void ComputeGradientsCoordinatesFace(const unsigned short nIntegration, const unsigned short nDOFs,
504 const su2double* matDerBasisInt, const unsigned long* DOFs, su2double* derivCoor,
505 CConfig* config);
506 /*!
507 * \brief Function, which computes the gradients of the Cartesian coordinates
508 w.r.t. the parametric coordinates in the given set of integration
509 points, i.e. dxdr, dydr, etc.
510 * \param[in] nIntegration - Number of integration points.
511 * \param[in] nDOFs - Number of DOFs of the grid associated with the
512 element.
513 * \param[in] matDerBasisInt - Matrix, which contains the derivatives of the
514 basis functions w.r.t. the parametric
515 coordinates r, s and t in the integration points.
516 * \param[in] DOFs - The DOFs of the grid associated with the element.
517 * \param[out] derivCoor - Storage for the derivatives of the coordinates.
518 * \param[in] config - Definition of the particular problem.
519 */
520 void ComputeGradientsCoorWRTParam(const unsigned short nIntegration, const unsigned short nDOFs,
521 const su2double* matDerBasisInt, const unsigned long* DOFs, su2double* derivCoor,
522 CConfig* config);
523 /*!
524 * \brief Function, which computes the information of the normals in the
525 integration points of a face.
526 * \param[in] nIntegration - Number of integration points on the face.
527 * \param[in] nDOFs - Number of DOFs of the grid associated with the face.
528 * \param[in] dr - r-derivatives of the basis functions of the face.
529 * \param[in] ds - s-derivatives of the basis functions of the face.
530 Only for 3D computations.
531 * \param[in] DOFs - The DOFs of the grid associated with the face.
532 * \param[out] normals - Storage for the normal information to be computed.
533 */
534 void ComputeNormalsFace(const unsigned short nIntegration, const unsigned short nDOFs, const su2double* dr,
535 const su2double* ds, const unsigned long* DOFs, su2double* normals);
536
537 /*!
538 * \brief Function, which computes the metric terms of the faces of a
539 physical boundary.
540 * \param[inout] boundary - Boundary for whose faces the boundary metric
541 terms must be computed.
542 * \param[in] config - Definition of the particular problem.
543 */
544 void MetricTermsBoundaryFaces(CBoundaryFEM* boundary, CConfig* config);
545};
546
547/*!
548 * \class CMeshFEM_DG
549 * \brief Class which contains all the variables for the DG FEM solver.
550 * \author E. van der Weide
551 * \version 8.5.0 "Harrier"
552 */
553class CMeshFEM_DG : public CMeshFEM {
554 protected:
555 vector<CFEMStandardElement> standardElementsSol; /*!< \brief Vector that contains the standard volume elements
556 used for the solution of the DG solver. */
557 vector<CFEMStandardElement> standardElementsGrid; /*!< \brief Vector that contains the standard volume elements
558 used for the geometry of the DG solver. */
559
560 vector<CFEMStandardInternalFace> standardMatchingFacesSol; /*!< \brief Vector that contains the standard matching
561 internal faces used for the solution of
562 the DG solver. */
563 vector<CFEMStandardInternalFace> standardMatchingFacesGrid; /*!< \brief Vector that contains the standard matching
564 internal faces used for the geometry of
565 the DG solver. */
566
567 vector<su2double> timeCoefADER_DG; /*!< \brief The time coefficients in the iteration matrix of
568 the ADER-DG predictor step. */
569 vector<su2double> timeInterpolDOFToIntegrationADER_DG; /*!< \brief The interpolation matrix between the time DOFs and
570 the time integration points for ADER-DG. */
571 vector<su2double> timeInterpolAdjDOFToIntegrationADER_DG; /*!< \brief The interpolation matrix between the time DOFs
572 of adjacent elements of a higher time level and the time
573 integration points for ADER-DG. */
574
575 vector<unsigned long> nMatchingFacesInternal; /*!< \brief Number of matching faces between between two owned elements
576 per time level. Cumulative storage format. */
577 vector<unsigned long> nMatchingFacesWithHaloElem; /*!< \brief Number of matching faces between an owned element and a
578 halo element per time level. Cumulative storage format. */
579 vector<CInternalFaceElementFEM> matchingFaces; /*!< \brief Vector of the local matching internal faces. */
580
581 map<unsigned long, unsigned long> Global_to_Local_Point; /*!< \brief Global-local mapping for the DOFs. */
582
583 public:
584 /*!
585 * \brief Constructor of the class.
586 */
588
589 /*!
590 * \overload
591 * \brief Redistributes the grid over the ranks and creates the halo layer.
592 * \param[in] geometry - The linear distributed grid that must be redistributed.
593 * \param[in] config - Definition of the particular problem.
594 */
595 CMeshFEM_DG(CGeometry* geometry, CConfig* config);
596
597 /*!
598 * \brief Function to compute the coordinates of the integration points.
599 */
601
602 /*!
603 * \brief Function to compute the coordinates of solution DOFs.
604 */
605 void CoordinatesSolDOFs(void);
606
607 /*!
608 * \brief Function to create the faces used in the DG formulation.
609 * \param[in] config - Definition of the particular problem.
610 */
611 void CreateFaces(CConfig* config);
612
613 /*!
614 * \brief Function to create the standard volume elements.
615 * \param[in] config - Definition of the particular problem.
616 */
618
619 /*!
620 * \brief Function, which makes available the time coefficients in the
621 iteration matrix of the ADER-DG predictor step.
622 * \return The time coefficients in the iteration matrix of ADER-DG.
623 */
624 inline su2double* GetTimeCoefADER_DG(void) { return timeCoefADER_DG.data(); }
625
626 /*!
627 * \brief Function, which makes available the time interpolation matrix between
628 the time DOFs and time integration points for ADER-DG.
629 * \return The time interpolation matrix for ADER-DG.
630 */
632
633 /*!
634 * \brief Function, which makes available the time interpolation matrix between
635 the adjacent time DOFs of the next time level and the time
636 integration points for ADER-DG.
637 * \return The time interpolation matrix of adjacent time DOFs for ADER-DG.
638 */
642
643 /*!
644 * \brief Function, which makes available the number of matching internal faces
645 between an owned element and a halo element per time level.
646 * \return The number of matching internal faces between these elements per time level.
647 */
648 inline unsigned long* GetNMatchingFacesWithHaloElem(void) { return nMatchingFacesWithHaloElem.data(); }
649
650 /*!
651 * \brief Function, which makes available the number of matching internal faces
652 between two owned elements per time level.
653 * \return The number of matching internal faces per time level.
654 */
655 inline unsigned long* GetNMatchingFacesInternal(void) { return nMatchingFacesInternal.data(); }
656
657 /*!
658 * \brief Function, which makes available the matching internal faces.
659 * \return Pointer to the matching internal faces.
660 */
662
663 /*!
664 * \brief Function to compute the grid velocities for static problems.
665 * \param[in] config - Definition of the particular problem.
666 * \param[in] Kind_Grid_Movement - The type of prescribed grid motion.
667 * \param[in] iZone - The currently active zone number.
668 */
669 void InitStaticMeshMovement(const CConfig* config, const unsigned short Kind_Grid_Movement,
670 const unsigned short iZone);
671
672 /*!
673 * \brief Function, which makes available the number of standard volume elements of the solution.
674 * \return Number of standard volume elements of the solution.
675 */
676 inline unsigned short GetNStandardElementsSol(void) { return standardElementsSol.size(); }
677
678 /*!
679 * \brief Function, which makes available the standard volume elements of the solution.
680 * \return Pointer to the standard volume elements of the solution.
681 */
683
684 /*!
685 * \brief Function, which makes available the number of standard internal matching faces of the solution.
686 * \return Number of standard internal matching faces of the solution.
687 */
688 inline unsigned short GetNStandardMatchingFacesSol(void) { return standardMatchingFacesSol.size(); }
689
690 /*!
691 * \brief Function, which makes available the standard internal matching faces of the solution.
692 * \return Pointer to the standard internal matching faces of the solution.
693 */
695
696 /*!
697 * \brief Function, which computes a length scale of the volume elements.
698 * \param[in] config - Definition of the particular problem.
699 */
700 void LengthScaleVolumeElements(void);
701
702 /*!
703 * \brief Function, which computes the metric terms of the surface
704 elements, both internal faces and physical boundary faces.
705 * \param[in] config - Definition of the particular problem.
706 */
708
709 /*!
710 * \brief Function, which computes the metric terms of the
711 volume elements.
712 * \param[in] config - Definition of the particular problem.
713 */
715
716 /*!
717 * \brief Set the send receive boundaries of the grid.
718 * \param[in] config - Definition of the particular problem.
719 */
720 void SetSendReceive(const CConfig* config) override;
721
722 /*!
723 * \brief Set the local index that correspond with the global numbering index.
724 */
725 void SetGlobal_to_Local_Point() override;
726
727 /*!
728 * \brief Get the local index that correspond with the global numbering index.
729 * \param[in] val_ipoint - Global point.
730 * \return Local index that correspond with the global index, -1 if not found on the current rank.
731 */
732 inline long GetGlobal_to_Local_Point(unsigned long val_ipoint) const override {
733 auto it = Global_to_Local_Point.find(val_ipoint);
734 if (it != Global_to_Local_Point.cend()) return it->second;
735 return -1;
736 }
737
738 /*!
739 * \brief Function, which carries out the preprocessing tasks when wall functions are used.
740 * \param[in] config - Definition of the particular problem.
741 */
743
744 protected:
745 /*!
746 * \brief Function, which computes the correct sequence of the connectivities
747 of a face, such that it matches the sequence of the given corner points.
748 * \param[in] VTK_TypeFace - Type of the face using the VTK convention.
749 * \param[in] cornerPointsFace - The corner points of the face in the desired
750 sequence.
751 * \param[in] VTK_TypeElem - Type of the element using the VTK convention.
752 * \param[in] nPolyGrid - Polynomial degree used in the grid definition
753 for the face and the element.
754 * \param[in] elemNodeIDsGrid - The node IDs of the grid DOFs of the element,
755 i.e. the element connectivity.
756 * \param[in] nPolyConn - Polynomial degree of the connectivities to
757 be modified.
758 * \param[in] connElem - Connectivity of the adjacent volume element.
759 * \param[out] swapFaceInElement - Whether or not the connectivity of the face must
760 be swapped compared to the face of the corresponding
761 standard element. Only relevant for triangular faces
762 of a pyramid and quadrilateral faces of a prism.
763 corresponds to the top point of the adjacent pyramid.
764 * \param[out] modConnFace - Connectivity of the face after the renumbering.
765 * \param[out] modConnElem - Connectivity of the element after the renumbering.
766 This renumbering is such that the face corresponds
767 to the appropriate face of the element used in the
768 standard faces and also the corner points match.
769 */
770 void CreateConnectivitiesFace(const unsigned short VTK_TypeFace, const unsigned long* cornerPointsFace,
771 const unsigned short VTK_TypeElem, const unsigned short nPolyGrid,
772 const vector<unsigned long>& elemNodeIDsGrid, const unsigned short nPolyConn,
773 const unsigned long* connElem, bool& swapFaceInElement, unsigned long* modConnFace,
774 unsigned long* modConnElem);
775
776 /*!
777 * \brief Function, which computes the correct sequence of the connectivities
778 of a line adjacent to a quadrilateral, such that the line is face 0
779 of the quadrilateral and it matches the sequence of the given corner points.
780 * \param[in] cornerPointsLine - The corner points of the line in the desired
781 sequence.
782 * \param[in] nPolyGrid - Polynomial degree used in the grid definition
783 for the line and the quadrilateral.
784 * \param[in] quadNodeIDsGrid - The node IDs of the grid DOFs of the quadrilateral,
785 i.e. the element connectivity.
786 * \param[in] nPolyConn - Polynomial degree of the connectivities to
787 be modified.
788 * \param[in] connQuad - Connectivity of the adjacent quadrilateral.
789 * \param[out] modConnLine - Connectivity of the line after the renumbering.
790 * \param[out] modConnQuad - Connectivity of the quadrilateral after the
791 renumbering. This renumbering is such that the
792 line corresponds to face 0 of the quadrilateral.
793 */
794 void CreateConnectivitiesLineAdjacentQuadrilateral(const unsigned long* cornerPointsLine,
795 const unsigned short nPolyGrid,
796 const vector<unsigned long>& quadNodeIDsGrid,
797 const unsigned short nPolyConn, const unsigned long* connQuad,
798 unsigned long* modConnLine, unsigned long* modConnQuad);
799
800 /*!
801 * \brief Function, which computes the correct sequence of the connectivities
802 of a line adjacent to a triangle, such that the line is face 0
803 of the triangle and it matches the sequence of the given corner points.
804 * \param[in] cornerPointsLine - The corner points of the line in the desired
805 sequence.
806 * \param[in] nPolyGrid - Polynomial degree used in the grid definition
807 for the line and the triangle.
808 * \param[in] triaNodeIDsGrid - The node IDs of the grid DOFs of the triangle,
809 i.e. the element connectivity.
810 * \param[in] nPolyConn - Polynomial degree of the connectivities to
811 be modified.
812 * \param[in] connTria - Connectivity of the adjacent triangle.
813 * \param[out] modConnLine - Connectivity of the line after the renumbering.
814 * \param[out] modConnTria - Connectivity of the triangle after the
815 renumbering. This renumbering is such that the
816 line corresponds to face 0 of the triangle.
817 */
818 void CreateConnectivitiesLineAdjacentTriangle(const unsigned long* cornerPointsLine, const unsigned short nPolyGrid,
819 const vector<unsigned long>& triaNodeIDsGrid,
820 const unsigned short nPolyConn, const unsigned long* connTria,
821 unsigned long* modConnLine, unsigned long* modConnTria);
822
823 /*!
824 * \brief Function, which computes the correct sequence of the connectivities
825 of a quad adjacent to a hexahedron, such that the quad is face 0
826 of the hexahedron and it matches the sequence of the given corner points.
827 * \param[in] cornerPointsQuad - The corner points of the quad in the desired
828 sequence.
829 * \param[in] nPolyGrid - Polynomial degree used in the grid definition
830 for the quadrilateral and the hexahedron.
831 * \param[in] hexaNodeIDsGrid - The node IDs of the grid DOFs of the
832 hexahedron, i.e. the element connectivity.
833 * \param[in] nPolyConn - Polynomial degree of the connectivities to
834 be modified.
835 * \param[in] connHexa - Connectivity of the adjacent hexahedron.
836 * \param[out] modConnQuad - Connectivity of the quad after the renumbering.
837 * \param[out] modConnHexa - Connectivity of the hexahedron after the
838 renumbering. This renumbering is such that the
839 quad corresponds to face 0 of the hexahedron.
840 */
841 void CreateConnectivitiesQuadrilateralAdjacentHexahedron(const unsigned long* cornerPointsQuad,
842 const unsigned short nPolyGrid,
843 const vector<unsigned long>& hexaNodeIDsGrid,
844 const unsigned short nPolyConn,
845 const unsigned long* connHexa, unsigned long* modConnQuad,
846 unsigned long* modConnHexa);
847
848 /*!
849 * \brief Function, which computes the correct sequence of the connectivities
850 of a quad adjacent to a prism, such that the quad is face 2
851 of the prism and it matches the sequence of the given corner points.
852 * \param[in] cornerPointsQuad - The corner points of the quad in the desired
853 sequence.
854 * \param[in] nPolyGrid - Polynomial degree used in the grid definition
855 for the quadrilateral and the prism.
856 * \param[in] prismNodeIDsGrid - The node IDs of the grid DOFs of the prism,
857 i.e. the element connectivity.
858 * \param[in] nPolyConn - Polynomial degree of the connectivities to
859 be modified.
860 * \param[in] connPrism - Connectivity of the adjacent prism.
861 * \param[out] swapFaceInElement - Whether or not the connectivity of the face must
862 be swapped compared to the face of the corresponding
863 standard element.
864 * \param[out] modConnQuad - Connectivity of the quad after the renumbering.
865 * \param[out] modConnPrism - Connectivity of the prism after the
866 renumbering. This renumbering is such that the
867 quad corresponds to face 3 of the prism.
868 */
869 void CreateConnectivitiesQuadrilateralAdjacentPrism(const unsigned long* cornerPointsQuad,
870 const unsigned short nPolyGrid,
871 const vector<unsigned long>& prismNodeIDsGrid,
872 const unsigned short nPolyConn, const unsigned long* connPrism,
873 bool& swapFaceInElement, unsigned long* modConnQuad,
874 unsigned long* modConnPrism);
875
876 /*!
877 * \brief Function, which computes the correct sequence of the connectivities
878 of a quad adjacent to a pyramid, such that the quad is face 0
879 of the pyramid and it matches the sequence of the given corner points.
880 * \param[in] cornerPointsQuad - The corner points of the quad in the desired
881 sequence.
882 * \param[in] nPolyGrid - Polynomial degree used in the grid definition
883 for the quadrilateral and the pyramid.
884 * \param[in] pyraNodeIDsGrid - The node IDs of the grid DOFs of the pyramid,
885 i.e. the element connectivity.
886 * \param[in] nPolyConn - Polynomial degree of the connectivities to
887 be modified.
888 * \param[in] connPyra - Connectivity of the adjacent pyramid.
889 * \param[out] modConnQuad - Connectivity of the quad after the renumbering.
890 * \param[out] modConnPyra - Connectivity of the pyramid after the
891 renumbering. This renumbering is such that the
892 quad corresponds to face 0 of the pyramid.
893 */
894 void CreateConnectivitiesQuadrilateralAdjacentPyramid(const unsigned long* cornerPointsQuad,
895 const unsigned short nPolyGrid,
896 const vector<unsigned long>& pyraNodeIDsGrid,
897 const unsigned short nPolyConn, const unsigned long* connPyra,
898 unsigned long* modConnQuad, unsigned long* modConnPyra);
899
900 /*!
901 * \brief Function, which computes the correct sequence of the connectivities
902 of a triangle adjacent to a prism, such that the triangle is face 0
903 of the prism and it matches the sequence of the given corner points.
904 * \param[in] cornerPointsTria - The corner points of the triangle in the
905 desired sequence.
906 * \param[in] nPolyGrid - Polynomial degree used in the grid definition
907 for the triangle and the prism.
908 * \param[in] prismNodeIDsGrid - The node IDs of the grid DOFs of the prism,
909 i.e. the element connectivity.
910 * \param[in] nPolyConn - Polynomial degree of the connectivities to
911 be modified.
912 * \param[in] connPrism - Connectivity of the adjacent prism.
913 * \param[out] modConnTria - Connectivity of the triangle after the renumbering.
914 * \param[out] modConnPrism - Connectivity of the prism after the
915 renumbering. This renumbering is such that the
916 triangle corresponds to face 0 of the prism.
917 */
918 void CreateConnectivitiesTriangleAdjacentPrism(const unsigned long* cornerPointsTria, const unsigned short nPolyGrid,
919 const vector<unsigned long>& prismNodeIDsGrid,
920 const unsigned short nPolyConn, const unsigned long* connPrism,
921 unsigned long* modConnTria, unsigned long* modConnPrism);
922
923 /*!
924 * \brief Function, which computes the correct sequence of the connectivities
925 of a triangle adjacent to a pyramid, such that the triangle is face 1
926 of the pyramid and it matches the sequence of the given corner points.
927 * \param[in] cornerPointsTria - The corner points of the triangle in the
928 desired sequence.
929 * \param[in] nPolyGrid - Polynomial degree used in the grid definition
930 for the triangle and the pyramid.
931 * \param[in] pyraNodeIDsGrid - The node IDs of the grid DOFs of the pyramid,
932 i.e. the element connectivity.
933 * \param[in] nPolyConn - Polynomial degree of the connectivities to
934 be modified.
935 * \param[in] connPyra - Connectivity of the adjacent pyramid.
936 * \param[out] swapFaceInElement - Whether or not the connectivity of the face must
937 be swapped compared to the face of the corresponding
938 standard element.
939 * \param[out] modConnTria - Connectivity of the triangle after the renumbering.
940 * \param[out] modConnPyra - Connectivity of the pyramid after the
941 renumbering. This renumbering is such that the
942 triangle corresponds to face 3 of the pyramid.
943 */
944 void CreateConnectivitiesTriangleAdjacentPyramid(const unsigned long* cornerPointsTria,
945 const unsigned short nPolyGrid,
946 const vector<unsigned long>& pyraNodeIDsGrid,
947 const unsigned short nPolyConn, const unsigned long* connPyra,
948 bool& swapFaceInElement, unsigned long* modConnTria,
949 unsigned long* modConnPyra);
950
951 /*!
952 * \brief Function, which computes the correct sequence of the connectivities
953 of a triangle adjacent to a tetrahedron, such that the triangle is face 0
954 of the tetrahedron and it matches the sequence of the given corner points.
955 * \param[in] cornerPointsTria - The corner points of the triangle in the
956 desired sequence.
957 * \param[in] nPolyGrid - Polynomial degree used in the grid definition
958 for the triangle and the tetrahedron.
959 * \param[in] tetNodeIDsGrid - The node IDs of the grid DOFs of the
960 tetrahedron, i.e. the element connectivity.
961 * \param[in] nPolyConn - Polynomial degree of the connectivities to
962 be modified.
963 * \param[in] connTet - Connectivity of the adjacent tetrahedron.
964 * \param[out] modConnTria - Connectivity of the triangle after the renumbering.
965 * \param[out] modConnTet - Connectivity of the tetrahedron after the
966 renumbering. This renumbering is such that the
967 triangle corresponds to face 0 of the tetrahedron.
968 */
969 void CreateConnectivitiesTriangleAdjacentTetrahedron(const unsigned long* cornerPointsTria,
970 const unsigned short nPolyGrid,
971 const vector<unsigned long>& tetNodeIDsGrid,
972 const unsigned short nPolyConn, const unsigned long* connTet,
973 unsigned long* modConnTria, unsigned long* modConnTet);
974
975 /*!
976 * \brief Function, which computes the parametric coordinates of the given
977 Cartesian coordinates inside the given parent element.
978 * \param[in] coor - Cartesian coordinates for which the parametric
979 coordinates must be determined.
980 * \param[in] parElem - The high order parent element which contains
981 the point.
982 * \param[in] subElem - Low order sub element inside the parent element
983 which contains the point.
984 * \param[in] weightsSubElem - Interpolation weights inside subElem for the
985 coordinates. Used for an initial guess.
986 * \param[out] parCoor - Parametric coordinates inside the high order
987 parent element for the given coordinates.
988 These parametric coordinates must be computed.
989 */
990 void HighOrderContainmentSearch(const su2double* coor, const unsigned long parElem, const unsigned short subElem,
991 const su2double* weightsSubElem, su2double* parCoor);
992
993 /*!
994 * \brief Function, which computes the metric terms for internal
995 matching faces.
996 * \param[in] config - Definition of the particular problem.
997 */
998 void MetricTermsMatchingFaces(CConfig* config);
999
1000 /*!
1001 * \brief Function, which computes the time coefficients for the ADER-DG predictor step.
1002 * \param[in] config - Definition of the particular problem.
1003 */
1005
1006 /*!
1007 * \brief Function, which computes the volume metric terms for the given
1008 entities from the gradients of the coordinates.
1009 * \param[in] nEntities - Number of entities for which the metric terms
1010 must be computed.
1011 * \param[in] gradCoor - The gradients of the coordinates (w.r.t. the
1012 parametric coordinates) from which the metric
1013 terms must be computed.
1014 * \param[out] metricTerms - Vector in which the metric terms must be stored.
1015 */
1016 void VolumeMetricTermsFromCoorGradients(const unsigned short nEntities, const su2double* gradCoor,
1017 vector<su2double>& metricTerms);
1018
1019 /*!
1020 * \brief Compute an ADT including the coordinates of all viscous markers
1021 * \param[in] config - Definition of the particular problem.
1022 * \return pointer to the ADT
1023 */
1024 std::unique_ptr<CADTElemClass> ComputeViscousWallADT(const CConfig* config) const override;
1025
1026 /*!
1027 * \brief Set wall distances a specific value
1028 */
1029 void SetWallDistance(su2double val) override;
1030
1031 /*!
1032 * \brief Reduce the wall distance based on an previously constructed ADT.
1033 * \details The ADT might belong to another zone, giving rise to lower wall distances
1034 * than those already stored.
1035 * \param[in] WallADT - The ADT to reduce the wall distance
1036 * \param[in] config - Config of this geometry (not the ADT zone's geometry)
1037 * \param[in] iZone - ignored
1038 */
1039 void SetWallDistance(CADTElemClass* WallADT, const CConfig* config, unsigned short iZone) override;
1040};
1041
1042/*!
1043 * \class CDummyMeshFEM_DG
1044 * \brief Class for defining a DG geometry that does not contain any points/elements.
1045 * Can be used for initializing other classes that depend on the geometry without
1046 * going through the time-consuming mesh initialization and paritioning.
1047 * \author T. Albring
1048 */
1050 public:
1051 /*!
1052 * \brief Constructor of the class
1053 * \param[in] config - Definition of the particular problem.
1054 */
1055 CDummyMeshFEM_DG(CConfig* config);
1056};
Class for storing an ADT of (linear) elements in an arbitrary number of dimensions.
Definition CADTElemClass.hpp:41
Class, which serves as an interface to the BLAS functionalities needed.
Definition blas_structure.hpp:41
Main class for defining the problem; basically this class reads the configuration file,...
Definition CConfig.hpp:64
Class for defining a DG geometry that does not contain any points/elements. Can be used for initializ...
Definition fem_geometry_structure.hpp:1049
Class to define a FEM standard boundary face.
Definition fem_standard_element.hpp:1439
Class to define a FEM standard element.
Definition fem_standard_element.hpp:673
Class to define a FEM standard internal face.
Definition fem_standard_element.hpp:1106
Parent class for defining the geometry of the problem (complete geometry, multigrid agglomerated geom...
Definition CGeometry.hpp:75
Class which contains all the variables for the DG FEM solver.
Definition fem_geometry_structure.hpp:553
void WallFunctionPreprocessing(CConfig *config)
Function, which carries out the preprocessing tasks when wall functions are used.
Definition fem_geometry_structure.cpp:5693
void CreateStandardVolumeElements(CConfig *config)
Function to create the standard volume elements.
Definition fem_geometry_structure.cpp:2999
vector< CFEMStandardElement > standardElementsSol
Vector that contains the standard volume elements used for the solution of the DG solver.
Definition fem_geometry_structure.hpp:555
map< unsigned long, unsigned long > Global_to_Local_Point
Global-local mapping for the DOFs.
Definition fem_geometry_structure.hpp:581
void CreateFaces(CConfig *config)
Function to create the faces used in the DG formulation.
Definition fem_geometry_structure.cpp:2296
su2double * GetTimeCoefADER_DG(void)
Function, which makes available the time coefficients in the iteration matrix of the ADER-DG predicto...
Definition fem_geometry_structure.hpp:624
unsigned short GetNStandardElementsSol(void)
Function, which makes available the number of standard volume elements of the solution.
Definition fem_geometry_structure.hpp:676
void CreateConnectivitiesQuadrilateralAdjacentPrism(const unsigned long *cornerPointsQuad, const unsigned short nPolyGrid, const vector< unsigned long > &prismNodeIDsGrid, const unsigned short nPolyConn, const unsigned long *connPrism, bool &swapFaceInElement, unsigned long *modConnQuad, unsigned long *modConnPrism)
Function, which computes the correct sequence of the connectivities of a quad adjacent to a prism,...
Definition fem_geometry_structure.cpp:3837
void LengthScaleVolumeElements(void)
Function, which computes a length scale of the volume elements.
Definition fem_geometry_structure.cpp:4736
unsigned long * GetNMatchingFacesWithHaloElem(void)
Function, which makes available the number of matching internal faces between an owned element and a ...
Definition fem_geometry_structure.hpp:648
std::unique_ptr< CADTElemClass > ComputeViscousWallADT(const CConfig *config) const override
Compute an ADT including the coordinates of all viscous markers.
Definition fem_wall_distance.cpp:31
void MetricTermsMatchingFaces(CConfig *config)
Function, which computes the metric terms for internal matching faces.
Definition fem_geometry_structure.cpp:4664
CFEMStandardInternalFace * GetStandardMatchingFacesSol(void)
Function, which makes available the standard internal matching faces of the solution.
Definition fem_geometry_structure.hpp:694
void CreateConnectivitiesTriangleAdjacentPyramid(const unsigned long *cornerPointsTria, const unsigned short nPolyGrid, const vector< unsigned long > &pyraNodeIDsGrid, const unsigned short nPolyConn, const unsigned long *connPyra, bool &swapFaceInElement, unsigned long *modConnTria, unsigned long *modConnPyra)
Function, which computes the correct sequence of the connectivities of a triangle adjacent to a pyram...
Definition fem_geometry_structure.cpp:4327
vector< unsigned long > nMatchingFacesInternal
Number of matching faces between between two owned elements per time level. Cumulative storage format...
Definition fem_geometry_structure.hpp:575
void MetricTermsVolumeElements(CConfig *config)
Function, which computes the metric terms of the volume elements.
Definition fem_geometry_structure.cpp:4982
void CreateConnectivitiesLineAdjacentQuadrilateral(const unsigned long *cornerPointsLine, const unsigned short nPolyGrid, const vector< unsigned long > &quadNodeIDsGrid, const unsigned short nPolyConn, const unsigned long *connQuad, unsigned long *modConnLine, unsigned long *modConnQuad)
Function, which computes the correct sequence of the connectivities of a line adjacent to a quadrilat...
Definition fem_geometry_structure.cpp:3270
vector< CFEMStandardElement > standardElementsGrid
Vector that contains the standard volume elements used for the geometry of the DG solver.
Definition fem_geometry_structure.hpp:557
CInternalFaceElementFEM * GetMatchingFaces(void)
Function, which makes available the matching internal faces.
Definition fem_geometry_structure.hpp:661
CFEMStandardElement * GetStandardElementsSol(void)
Function, which makes available the standard volume elements of the solution.
Definition fem_geometry_structure.hpp:682
vector< unsigned long > nMatchingFacesWithHaloElem
Number of matching faces between an owned element and a halo element per time level....
Definition fem_geometry_structure.hpp:577
void CreateConnectivitiesQuadrilateralAdjacentHexahedron(const unsigned long *cornerPointsQuad, const unsigned short nPolyGrid, const vector< unsigned long > &hexaNodeIDsGrid, const unsigned short nPolyConn, const unsigned long *connHexa, unsigned long *modConnQuad, unsigned long *modConnHexa)
Function, which computes the correct sequence of the connectivities of a quad adjacent to a hexahedro...
Definition fem_geometry_structure.cpp:3534
su2double * GetTimeInterpolDOFToIntegrationADER_DG(void)
Function, which makes available the time interpolation matrix between the time DOFs and time integrat...
Definition fem_geometry_structure.hpp:631
unsigned long * GetNMatchingFacesInternal(void)
Function, which makes available the number of matching internal faces between two owned elements per ...
Definition fem_geometry_structure.hpp:655
void CreateConnectivitiesFace(const unsigned short VTK_TypeFace, const unsigned long *cornerPointsFace, const unsigned short VTK_TypeElem, const unsigned short nPolyGrid, const vector< unsigned long > &elemNodeIDsGrid, const unsigned short nPolyConn, const unsigned long *connElem, bool &swapFaceInElement, unsigned long *modConnFace, unsigned long *modConnElem)
Function, which computes the correct sequence of the connectivities of a face, such that it matches t...
Definition fem_geometry_structure.cpp:3202
void CreateConnectivitiesQuadrilateralAdjacentPyramid(const unsigned long *cornerPointsQuad, const unsigned short nPolyGrid, const vector< unsigned long > &pyraNodeIDsGrid, const unsigned short nPolyConn, const unsigned long *connPyra, unsigned long *modConnQuad, unsigned long *modConnPyra)
Function, which computes the correct sequence of the connectivities of a quad adjacent to a pyramid,...
Definition fem_geometry_structure.cpp:4073
su2double * GetTimeInterpolAdjDOFToIntegrationADER_DG(void)
Function, which makes available the time interpolation matrix between the adjacent time DOFs of the n...
Definition fem_geometry_structure.hpp:639
vector< CFEMStandardInternalFace > standardMatchingFacesSol
Vector that contains the standard matching internal faces used for the solution of the DG solver.
Definition fem_geometry_structure.hpp:560
void MetricTermsSurfaceElements(CConfig *config)
Function, which computes the metric terms of the surface elements, both internal faces and physical b...
Definition fem_geometry_structure.cpp:4971
void HighOrderContainmentSearch(const su2double *coor, const unsigned long parElem, const unsigned short subElem, const su2double *weightsSubElem, su2double *parCoor)
Function, which computes the parametric coordinates of the given Cartesian coordinates inside the giv...
Definition fem_geometry_structure.cpp:5960
unsigned short GetNStandardMatchingFacesSol(void)
Function, which makes available the number of standard internal matching faces of the solution.
Definition fem_geometry_structure.hpp:688
vector< CFEMStandardInternalFace > standardMatchingFacesGrid
Vector that contains the standard matching internal faces used for the geometry of the DG solver.
Definition fem_geometry_structure.hpp:563
void TimeCoefficientsPredictorADER_DG(CConfig *config)
Function, which computes the time coefficients for the ADER-DG predictor step.
Definition fem_geometry_structure.cpp:5419
void SetGlobal_to_Local_Point() override
Set the local index that correspond with the global numbering index.
Definition fem_geometry_structure.cpp:2151
long GetGlobal_to_Local_Point(unsigned long val_ipoint) const override
Get the local index that correspond with the global numbering index.
Definition fem_geometry_structure.hpp:732
void CoordinatesSolDOFs(void)
Function to compute the coordinates of solution DOFs.
Definition fem_geometry_structure.cpp:2265
vector< su2double > timeInterpolDOFToIntegrationADER_DG
The interpolation matrix between the time DOFs and the time integration points for ADER-DG.
Definition fem_geometry_structure.hpp:569
vector< su2double > timeInterpolAdjDOFToIntegrationADER_DG
The interpolation matrix between the time DOFs of adjacent elements of a higher time level and the ti...
Definition fem_geometry_structure.hpp:571
void CreateConnectivitiesLineAdjacentTriangle(const unsigned long *cornerPointsLine, const unsigned short nPolyGrid, const vector< unsigned long > &triaNodeIDsGrid, const unsigned short nPolyConn, const unsigned long *connTria, unsigned long *modConnLine, unsigned long *modConnTria)
Function, which computes the correct sequence of the connectivities of a line adjacent to a triangle,...
Definition fem_geometry_structure.cpp:3404
CMeshFEM_DG(void)
Constructor of the class.
Definition fem_geometry_structure.hpp:587
void CreateConnectivitiesTriangleAdjacentTetrahedron(const unsigned long *cornerPointsTria, const unsigned short nPolyGrid, const vector< unsigned long > &tetNodeIDsGrid, const unsigned short nPolyConn, const unsigned long *connTet, unsigned long *modConnTria, unsigned long *modConnTet)
Function, which computes the correct sequence of the connectivities of a triangle adjacent to a tetra...
Definition fem_geometry_structure.cpp:4475
vector< CInternalFaceElementFEM > matchingFaces
Vector of the local matching internal faces.
Definition fem_geometry_structure.hpp:579
void CreateConnectivitiesTriangleAdjacentPrism(const unsigned long *cornerPointsTria, const unsigned short nPolyGrid, const vector< unsigned long > &prismNodeIDsGrid, const unsigned short nPolyConn, const unsigned long *connPrism, unsigned long *modConnTria, unsigned long *modConnPrism)
Function, which computes the correct sequence of the connectivities of a triangle adjacent to a prism...
Definition fem_geometry_structure.cpp:4193
void SetSendReceive(const CConfig *config) override
Set the send receive boundaries of the grid.
Definition fem_geometry_structure.cpp:3034
void InitStaticMeshMovement(const CConfig *config, const unsigned short Kind_Grid_Movement, const unsigned short iZone)
Function to compute the grid velocities for static problems.
Definition fem_geometry_structure.cpp:6166
void CoordinatesIntegrationPoints(void)
Function to compute the coordinates of the integration points.
Definition fem_geometry_structure.cpp:2161
void SetWallDistance(su2double val) override
Set wall distances a specific value.
Definition fem_wall_distance.cpp:122
vector< su2double > timeCoefADER_DG
The time coefficients in the iteration matrix of the ADER-DG predictor step.
Definition fem_geometry_structure.hpp:567
void VolumeMetricTermsFromCoorGradients(const unsigned short nEntities, const su2double *gradCoor, vector< su2double > &metricTerms)
Function, which computes the volume metric terms for the given entities from the gradients of the coo...
Definition fem_geometry_structure.cpp:5632
Base class for the FEM solver.
Definition fem_geometry_structure.hpp:288
vector< int > ranksRecv
Vector of ranks, from which this rank will receive halo information. Self communication is included.
Definition fem_geometry_structure.hpp:318
vector< vector< unsigned long > > rotPerHalos
Vector of vector, which contains the indices of the halo elements for which a rotationally periodic c...
Definition fem_geometry_structure.hpp:314
vector< unsigned long > nVolElemOwnedPerTimeLevel
Number of owned local volume elements per time level. Cumulative storage.
Definition fem_geometry_structure.hpp:293
const vector< vector< unsigned long > > & GetRotPerHalos(void) const
Function, which makes available the vector of vectors containing the rotational periodic halos as a c...
Definition fem_geometry_structure.hpp:480
unsigned long * GetNVolElemHaloPerTimeLevel(void)
Function, which makes available the number of halo volume elements per time level.
Definition fem_geometry_structure.hpp:412
unsigned long GetNMeshPoints(void)
Function, which makes available the number of mesh points of the local FEM mesh.
Definition fem_geometry_structure.hpp:376
unsigned long nVolElemOwned
Number of owned local volume elements.
Definition fem_geometry_structure.hpp:291
vector< unsigned long > nVolElemHaloPerTimeLevel
Number of local halo volume elements per time level. Cumulative storage.
Definition fem_geometry_structure.hpp:298
void ComputeNormalsFace(const unsigned short nIntegration, const unsigned short nDOFs, const su2double *dr, const su2double *ds, const unsigned long *DOFs, su2double *normals)
Function, which computes the information of the normals in the integration points of a face.
Definition fem_geometry_structure.cpp:1946
vector< vector< unsigned long > > GetHaloElemAdjLowTimeLevel(void)
Function, which makes available the vector of vectors containing the halo element IDs adjacent to ele...
Definition fem_geometry_structure.hpp:426
const vector< vector< unsigned long > > & GetEntitiesRecv(void) const
Function, which makes available the vector of vectors containing the receive entities as a const refe...
Definition fem_geometry_structure.hpp:459
vector< vector< unsigned long > > entitiesSend
Vector of vector, which contains the entities that must be sent. Self communication is included....
Definition fem_geometry_structure.hpp:323
CMeshFEM(void)
Constructor of the class.
Definition fem_geometry_structure.hpp:345
void ComputeGradientsCoordinatesFace(const unsigned short nIntegration, const unsigned short nDOFs, const su2double *matDerBasisInt, const unsigned long *DOFs, su2double *derivCoor, CConfig *config)
Function, which computes the gradients of the parametric coordinates w.r.t. the Cartesian coordinates...
Definition fem_geometry_structure.cpp:1850
vector< vector< unsigned long > > ownedElemAdjLowTimeLevel
List of owned elements per time level that are adjacent to elements of the lower time level.
Definition fem_geometry_structure.hpp:301
vector< CVolumeElementFEM > volElem
Vector of the local volume elements, including halos.
Definition fem_geometry_structure.hpp:306
unsigned long nVolElemTot
Total number of local volume elements, including halos.
Definition fem_geometry_structure.hpp:290
vector< CFEMStandardBoundaryFace > standardBoundaryFacesGrid
Vector that contains the standard boundary faces used for the geometry of the DG solver.
Definition fem_geometry_structure.hpp:336
const vector< vector< unsigned long > > & GetEntitiesSend(void) const
Function, which makes available the vector of vectors containing the send entities as a const referen...
Definition fem_geometry_structure.hpp:466
vector< vector< unsigned long > > GetOwnedElemAdjLowTimeLevel(void)
Function, which makes available the vector of vectors containing the owned element IDs adjacent to el...
Definition fem_geometry_structure.hpp:419
unsigned long * GetNVolElemInternalPerTimeLevel(void)
Function, which makes available the number of internal volume elements per time level.
Definition fem_geometry_structure.hpp:406
unsigned long GetNVolElemTot(void) const
Function, which makes available the total number of volume elements in the local FEM mesh.
Definition fem_geometry_structure.hpp:388
const vector< int > & GetRanksRecv(void) const
Function, which makes available the vector of receive ranks as a const reference.
Definition fem_geometry_structure.hpp:445
CBlasStructure * blasFunctions
Pointer to the object to carry out the BLAS functionalities.
Definition fem_geometry_structure.hpp:339
CVolumeElementFEM * GetVolElem(void)
Function, which makes available the volume elements in the local FEM mesh.
Definition fem_geometry_structure.hpp:394
unsigned long GetNVolElemOwned(void) const
Function, which makes available the number of owned volume elements in the local FEM mesh.
Definition fem_geometry_structure.hpp:382
vector< CFEMStandardBoundaryFace > standardBoundaryFacesSol
Vector that contains the standard boundary faces used for the solution of the DG solver.
Definition fem_geometry_structure.hpp:333
void MetricTermsBoundaryFaces(CBoundaryFEM *boundary, CConfig *config)
Function, which computes the metric terms of the faces of a physical boundary.
Definition fem_geometry_structure.cpp:2028
CBoundaryFEM * GetBoundaries(void)
Function, which makes available the boundaries of the local FEM mesh.
Definition fem_geometry_structure.hpp:364
vector< CPointFEM > meshPoints
Vector of the points of the FEM mesh.
Definition fem_geometry_structure.hpp:308
vector< unsigned long > nVolElemInternalPerTimeLevel
Number of internal local volume elements per time level. Internal means that the solution data does n...
Definition fem_geometry_structure.hpp:295
vector< int > ranksSend
Vector of ranks, to which this rank will send halo information. Self communication is included.
Definition fem_geometry_structure.hpp:320
vector< CBoundaryFEM > boundaries
Vector of the boundaries of the FEM mesh.
Definition fem_geometry_structure.hpp:310
vector< vector< unsigned long > > haloElemAdjLowTimeLevel
List of halo elements per time level that are adjacent to elements of the lower time level.
Definition fem_geometry_structure.hpp:303
vector< unsigned short > rotPerMarkers
Vector, which contains the indices of the rotational periodic markers.
Definition fem_geometry_structure.hpp:312
CPointFEM * GetMeshPoints(void)
Function, which makes available the mesh points of the local FEM mesh.
Definition fem_geometry_structure.hpp:370
void SetPositive_ZArea(CConfig *config) override
Compute surface area (positive z-direction) for force coefficient non-dimensionalization.
Definition fem_geometry_structure.cpp:2084
~CMeshFEM(void) override
Destructor of the class.
Definition fem_geometry_structure.hpp:358
CFEMStandardBoundaryFace * GetStandardBoundaryFacesSol(void)
Function, which makes available the standard boundary faces of the solution.
Definition fem_geometry_structure.hpp:438
unsigned short GetNStandardBoundaryFacesSol(void)
Function, which makes available the number of standard boundary faces of the solution.
Definition fem_geometry_structure.hpp:432
vector< vector< unsigned long > > entitiesRecv
Vector of vector, which contains the entities that must be received. Self communication is included....
Definition fem_geometry_structure.hpp:327
void ComputeGradientsCoorWRTParam(const unsigned short nIntegration, const unsigned short nDOFs, const su2double *matDerBasisInt, const unsigned long *DOFs, su2double *derivCoor, CConfig *config)
Function, which computes the gradients of the Cartesian coordinates w.r.t. the parametric coordinates...
Definition fem_geometry_structure.cpp:1927
unsigned long * GetNVolElemOwnedPerTimeLevel(void)
Function, which makes available the number of owned volume elements per time level.
Definition fem_geometry_structure.hpp:400
const vector< int > & GetRanksSend(void) const
Function, which makes available the vector of send ranks as a const reference.
Definition fem_geometry_structure.hpp:452
const vector< unsigned short > & GetRotPerMarkers(void) const
Function, which makes available the vector of rotational periodic markers as a const reference.
Definition fem_geometry_structure.hpp:473
Class to store a volume element for the FEM solver.
Definition fem_geometry_structure.hpp:45
unsigned long offsetDOFsSolLocal
Local offset of the solution DOFs of this element.
Definition fem_geometry_structure.hpp:75
unsigned short indStandardElement
Index in the vector of standard elements.
Definition fem_geometry_structure.hpp:67
vector< su2double > gridVelocities
Vector of the grid velocities in the integration points of this element.
Definition fem_geometry_structure.hpp:104
unsigned short VTK_Type
Element type using the VTK convention.
Definition fem_geometry_structure.hpp:58
su2double lenScale
Length scale of the element.
Definition fem_geometry_structure.hpp:90
vector< su2double > gridVelocitiesSolDOFs
Vector of the grid velocities in the solution DOFs of this element.
Definition fem_geometry_structure.hpp:106
unsigned short nDOFsGrid
Number of DOFs for the geometry of the element.
Definition fem_geometry_structure.hpp:61
vector< su2double > metricTerms2ndDer
Vector of the metric terms needed for the computation of the 2nd derivatives in the integration point...
Definition fem_geometry_structure.hpp:99
vector< su2double > coorIntegrationPoints
The coordinates of the integration points of this element.
Definition fem_geometry_structure.hpp:112
vector< su2double > coorSolDOFs
The coordinates of the solution DOFs of this element.
Definition fem_geometry_structure.hpp:113
void GetCornerPointsAllFaces(unsigned short &numFaces, unsigned short nPointsPerFace[], unsigned long faceConn[6][4])
Get all the corner points of all the faces of this element. It must be made sure that the numbering o...
Definition fem_geometry_structure.cpp:60
vector< bool > JacFacesIsConsideredConstant
Vector with the booleans whether the Jacobian of the transformation to the standard element is consta...
Definition fem_geometry_structure.hpp:83
vector< su2double > metricTerms
Vector of the metric terms in the integration points of this element.
Definition fem_geometry_structure.hpp:95
vector< su2double > wallDistanceSolDOFs
The wall distance to the viscous walls for the solution DOFs of this element.
Definition fem_geometry_structure.hpp:116
short periodIndexToDonor
The index of the periodic transformation to the donor element. Only for halo elements....
Definition fem_geometry_structure.hpp:54
int rankOriginal
The rank where the original volume is stored. For the owned volumes, this is simply the current rank.
Definition fem_geometry_structure.hpp:51
unsigned long offsetDOFsSolGlobal
Global offset of the solution DOFs of this element.
Definition fem_geometry_structure.hpp:74
vector< bool > ElementOwnsFaces
Vector with the booleans whether the element is the owner of the faces.
Definition fem_geometry_structure.hpp:85
bool JacIsConsideredConstant
Whether or not the Jacobian of the transformation to the standard element is considered constant.
Definition fem_geometry_structure.hpp:48
unsigned int factTimeLevel
Number of local time steps for this element compared to the largest time step when time accurate loca...
Definition fem_geometry_structure.hpp:69
unsigned short nPolyGrid
Polynomial degree for the geometry of the element.
Definition fem_geometry_structure.hpp:59
bool elemIsOwned
Whether or not this is an owned element.
Definition fem_geometry_structure.hpp:47
vector< su2double > wallDistance
The wall distance to the viscous walls for the integration points of this element.
Definition fem_geometry_structure.hpp:114
vector< su2double > lumpedMassMatrix
Lumped mass matrix for this element.
Definition fem_geometry_structure.hpp:110
vector< unsigned long > nodeIDsGrid
Vector with the node IDs of the grid for this element.
Definition fem_geometry_structure.hpp:88
unsigned long offsetDOFsSolPrevTimeLevel
Local offset of the solution DOFs of this element in the working vector of the previous time level.
Definition fem_geometry_structure.hpp:80
unsigned short nFaces
Number of faces of the element.
Definition fem_geometry_structure.hpp:63
unsigned long elemIDGlobal
Global element ID of this element.
Definition fem_geometry_structure.hpp:73
unsigned short timeLevel
Time level of the element when time accurate local time stepping is employed.
Definition fem_geometry_structure.hpp:64
unsigned long offsetDOFsSolThisTimeLevel
Local offset of the solution DOFs of this element in the working vector of the time level of the elem...
Definition fem_geometry_structure.hpp:77
vector< su2double > invMassMatrix
Inverse mass matrix for this element.
Definition fem_geometry_structure.hpp:109
vector< su2double > metricTermsSolDOFs
Vector of the metric terms in the solution DOFs of this element.
Definition fem_geometry_structure.hpp:97
unsigned short nPolySol
Polynomial degree for the solution of the element.
Definition fem_geometry_structure.hpp:60
su2double shockArtificialViscosity
Artificial viscosity for a shock.
Definition fem_geometry_structure.hpp:93
vector< su2double > massMatrix
Mass matrix for this element.
Definition fem_geometry_structure.hpp:108
unsigned short nDOFsSol
Number of DOFs for the solution of the element.
Definition fem_geometry_structure.hpp:62
su2double shockSensorValue
Value for sensing a shock.
Definition fem_geometry_structure.hpp:92
Base class for defining the LES wall model.
Definition wall_model.hpp:47
passivedouble su2double
Definition code_config.hpp:181
Headers of the main functions for the FEM standard elements. The functions are in the fem_standard_el...
Class to store a boundary for the FEM solver.
Definition fem_geometry_structure.hpp:265
bool periodicBoundary
Whether or not this boundary is a periodic boundary.
Definition fem_geometry_structure.hpp:268
bool haloInfoNeededForBC
Whether or not information of halo elements is needed to impose the boundary conditions.
Definition fem_geometry_structure.hpp:269
vector< CSurfaceElementFEM > surfElem
Vector of the local surface elements.
Definition fem_geometry_structure.hpp:275
string markerTag
Marker tag of this boundary.
Definition fem_geometry_structure.hpp:266
vector< unsigned long > nSurfElem
Number of surface elements per time level, cumulative storage format.
Definition fem_geometry_structure.hpp:272
~CBoundaryFEM(void)
Definition fem_geometry_structure.hpp:279
CWallModel * wallModel
Wall model for LES.
Definition fem_geometry_structure.hpp:277
Class to store an internal face for the FEM solver.
Definition fem_geometry_structure.hpp:160
vector< su2double > metricCoorDerivFace1
The terms dxdr, dydr, etc. of side 1 in the integration points of the face.
Definition fem_geometry_structure.hpp:182
unsigned long elemID0
Element ID adjacent to side 0 of the face.
Definition fem_geometry_structure.hpp:165
unsigned short VTK_Type
Element type using the VTK convention.
Definition fem_geometry_structure.hpp:161
unsigned long elemID1
Element ID adjacent to side 1 of the face.
Definition fem_geometry_structure.hpp:166
vector< su2double > coorIntegrationPoints
Coordinates for the integration points of this face.
Definition fem_geometry_structure.hpp:185
vector< unsigned long > DOFsGridElementSide1
Vector of the grid DOFs of the element of side 1.
Definition fem_geometry_structure.hpp:174
bool operator<(const CInternalFaceElementFEM &other) const
Less than operator of the class. Needed for the sorting. The criterion for comparison are the standar...
Definition fem_geometry_structure.cpp:74
unsigned short indStandardElement
Index in the vector of standard face elements.
Definition fem_geometry_structure.hpp:163
vector< unsigned long > DOFsGridFaceSide1
Vector of the grid DOFs of side 1 of the face.
Definition fem_geometry_structure.hpp:169
vector< unsigned long > DOFsGridElementSide0
Vector of the grid DOFs of the element of side 0.
Definition fem_geometry_structure.hpp:173
vector< unsigned long > DOFsSolElementSide0
Vector of the solution DOFs of the element of side 0.
Definition fem_geometry_structure.hpp:175
vector< unsigned long > DOFsSolFaceSide1
Vector of the solution DOFs of side 1 of the face.
Definition fem_geometry_structure.hpp:171
vector< unsigned long > DOFsSolElementSide1
Vector of the solution DOFs of the element of side 1.
Definition fem_geometry_structure.hpp:176
vector< unsigned long > DOFsGridFaceSide0
Vector of the grid DOFs of side 0 of the face.
Definition fem_geometry_structure.hpp:168
vector< su2double > gridVelocities
Grid velocities in the integration points of this face.
Definition fem_geometry_structure.hpp:186
vector< su2double > metricNormalsFace
The normals in the integration points of the face. The normals point from side 0 to side 1.
Definition fem_geometry_structure.hpp:178
vector< su2double > metricCoorDerivFace0
The terms drdx, dsdx, etc. of side 0 in the integration points of the face.
Definition fem_geometry_structure.hpp:180
vector< unsigned long > DOFsSolFaceSide0
Vector of the solution DOFs of side 0 of the face.
Definition fem_geometry_structure.hpp:170
vector< su2double > wallDistance
The wall distance to the viscous walls for the integration points of this face.
Definition fem_geometry_structure.hpp:187
Class to store a point for the FEM solver.
Definition fem_geometry_structure.hpp:136
short periodIndexToDonor
The index of the periodic transformation to the donor element. Only for halo elements....
Definition fem_geometry_structure.hpp:138
su2double coor[3]
Array with the coordinates of the node.
Definition fem_geometry_structure.hpp:141
bool operator==(const CPointFEM &other) const
Equal operator of the class. Needed for the removal of double entities.
Definition fem_geometry_structure.cpp:56
unsigned long globalID
The global ID of this point in the grid.
Definition fem_geometry_structure.hpp:137
bool operator<(const CPointFEM &other) const
Less than operator of the class. Needed for the sorting.
Definition fem_geometry_structure.cpp:51
Class to store a surface element for the FEM solver.
Definition fem_geometry_structure.hpp:204
unsigned long volElemID
ID of the corresponding volume element.
Definition fem_geometry_structure.hpp:211
void GetCornerPointsFace(unsigned short &nPointsPerFace, unsigned long faceConn[])
Function, which determines the corner points of this surface element.
Definition fem_geometry_structure.cpp:86
vector< unsigned long > DOFsGridFace
Vector of the grid DOFs of the face. In principle the same information as nodeIDsGrid,...
Definition fem_geometry_structure.hpp:219
unsigned short VTK_Type
Element type using the VTK convention.
Definition fem_geometry_structure.hpp:205
vector< su2double > metricNormalsFace
The normals in the integration points of the face. The normals point out of the adjacent element.
Definition fem_geometry_structure.hpp:227
vector< su2double > coorIntegrationPoints
The coordinates of the integration points of the face.
Definition fem_geometry_structure.hpp:231
vector< su2double > metricCoorDerivFace
The terms drdx, dsdx, etc. in the integration points of the face.
Definition fem_geometry_structure.hpp:229
unsigned short indStandardElement
Index in the vector of standard elements.
Definition fem_geometry_structure.hpp:209
vector< vector< su2double > > matWallFunctionDonor
Matrices, which store the interpolation coefficients for the donors of the integration points.
Definition fem_geometry_structure.hpp:242
vector< su2double > wallDistance
The wall distances of the integration points of the face.
Definition fem_geometry_structure.hpp:233
vector< su2double > gridVelocities
Grid velocities in the integration points of this face.
Definition fem_geometry_structure.hpp:232
vector< unsigned long > donorsWallFunction
Local element IDs of the donors for the wall function treatment. These donors can be halo's.
Definition fem_geometry_structure.hpp:236
vector< unsigned long > DOFsGridElement
Vector of the grid DOFs of the adjacent element.
Definition fem_geometry_structure.hpp:224
unsigned short nPolyGrid
Polynomial degree for the geometry of the element.
Definition fem_geometry_structure.hpp:206
unsigned short nDOFsGrid
Number of DOFs for the geometry of the element.
Definition fem_geometry_structure.hpp:207
vector< unsigned short > intPerWallFunctionDonor
The integration points per donor element for the wall function treatment.
Definition fem_geometry_structure.hpp:240
vector< unsigned short > nIntPerWallFunctionDonor
The number of integration points per donor element for the wall function treatment.
Definition fem_geometry_structure.hpp:238
unsigned long boundElemIDGlobal
Global ID of this surface element inside the boundary to which it belongs.
Definition fem_geometry_structure.hpp:212
vector< unsigned long > DOFsSolElement
Vector of the solution DOFs of the adjacent element.
Definition fem_geometry_structure.hpp:225
vector< unsigned long > nodeIDsGrid
Vector with the node IDs of the grid for this element. In this vector the original sequence of the gr...
Definition fem_geometry_structure.hpp:215
bool operator<(const CSurfaceElementFEM &other) const
Less than operator of the class. Needed for the sorting. The criterion for comparison is the correspo...
Definition fem_geometry_structure.hpp:249
vector< unsigned long > DOFsSolFace
Vector of the solution DOFs of the face.
Definition fem_geometry_structure.hpp:222