WARPXM v1.10.0
Loading...
Searching...
No Matches
wmbasisarrayset.h
Go to the documentation of this file.
1#ifndef WMBASISARRAYSET_H
2#define WMBASISARRAYSET_H
3
4// Wm includes
5#include "lib/wxexcept.h"
6#include "warpxm/warpxm_config.h"
7
8// std includes
9#include <vector>
10#include <string>
11#include <functional>
12
14{
15public:
17
18 void loadBasis(const int primitiveID,
19 const std::string& basisArraySetName,
20 const std::string& vspace_basisName,
21 const size_t vspace_ndims);
22 void loadFile(const std::string& filename);
23
25 {
27 }
28 int getNumFaceNodes() const
29 {
30 return _numFaceNodes;
31 }
33 {
34 return _numTotalFaceNodes;
35 }
41 {
43 }
44 int getNumDims() const
45 {
46 return _numDims;
47 }
48 int getNumTotalNodes() const
49 {
50 return _numTotalNodes;
51 }
53 {
54 return _numGaussQuadNodes;
55 }
57 {
58 return _numInternalNodes;
59 }
60 int getSpatialOrder() const
61 {
62 return _spatialOrder;
63 }
64
66 {
67 return _cfl;
68 }
69
71 {
73 }
75 {
77 }
79 {
81 }
82
84 {
86 }
87
89 {
91 }
93 {
95 }
97 {
99 }
100
102 {
104 }
105
107 {
109 }
110
112 {
114 }
115
117 {
119 }
120
122 {
123 return _numSubElements;
124 }
126 {
128 }
129 const int* getSubElementConnectivity() const
130 {
131 return &(_subElementConnectivity[0]);
132 }
133
138 const std::vector<int>& getFaceNodesDeduplicated() const
139 {
141 }
142
143 const std::vector<real>& getNodePositions() const
144 {
145 return _nodePositions;
146 }
147
148 const std::vector<real>& getNodePositionsGaussQuad() const
149 {
151 }
152
153 const std::vector<real>& getNodePositions_PositivityPreservingQuad() const
154 {
155 if (getNumDims() == 1)
156 {
157 return _nodePositions;
158 }
159 else
160 {
161 WxExcept wxe("WmBasisArraySet.h : ");
162 wxe << "Positivity-preserving quadrature node positions only defined for "
163 "1-dimensional elements"
164 << std::endl;
165 throw wxe;
166 }
167 }
168
170 {
171 if (getNumDims() == 1)
172 {
173 return _numTotalNodes;
174 }
175 else if (getNumDims() == 2)
176 {
179 }
180 else
181 {
182 WxExcept wxe("WmBasisArraySet.h : ");
183 wxe << "Positivity-preserving quadrature node positions only defined for "
184 "1 and 2-dimensional elements"
185 << std::endl;
186 throw wxe;
187 }
188 }
189
191 {
192 if (getNumDims() == 1)
193 {
194 return 0;
195 }
196 else if (getNumDims() == 2)
197 {
199 }
200 else
201 {
202 WxExcept wxe("WmBasisArraySet.h : ");
203 wxe << "Positivity-preserving quadrature node positions only defined for "
204 "1 and 2-dimensional elements"
205 << std::endl;
206 throw wxe;
207 }
208 }
209
211 {
213 }
214
216 {
217 return &(_basisArray_NumericalFlux[0]);
218 }
220 {
222 }
224 {
225 return &(_basisArray_InternalFlux[0]);
226 }
228 {
229 return &(_basisArray_GaussQuad[0]);
230 }
231
232 const std::vector<real>& getBasisArray_PositivityPreservingQuadWeights() const
233 {
234 if (getNumDims() == 1)
235 {
237 }
238 else
239 {
240 WxExcept wxe("WmBasisArraySet.h : ");
241 wxe << "Positivity-preserving quadrature weights only defined for "
242 "1-dimensional elements"
243 << std::endl;
244 throw wxe;
245 }
246 }
247
248 const std::vector<real>&
250 {
252 }
253
255 {
257 }
258
259 const std::vector<real>& getBasisArray_LinearAverage() const
260 {
262 }
264 {
265 return &(_basisArray_LinearCenter[0]);
266 }
268 {
270 }
272 {
274 }
276 {
278 }
279
286 {
288 }
289
290 const std::vector<std::function<real(const std::array<real, 3>&)>>&
292 {
293 return _monomial_functions;
294 }
295
296 const int* getOrientations(const int index) const
297 {
298 return &(_orientations[index][0]);
299 }
300 const int* getFaceNodes(const int face_index) const
301 {
302 return &(_faceNodes[face_index][0]);
303 }
304
310 {
311 return _vol_multiplier;
312 }
313
314 // stuff for element with different types of faces
315 int getNumFaceTypes() const
316 {
317 return _num_face_types;
318 }
319
320 int getNumFaceNodes(int face_index) const
321 {
322 return _num_face_nodes_per_face[face_index];
323 }
324
326 {
327 return _numOrientations;
328 }
329
330 int getNumFaceNodesForFaceType(int face_type) const
331 {
332 return _num_face_nodes_per_face_type[face_type];
333 }
334
335 const std::vector<int>& getNumFaceNodesVector() const
336 {
338 }
339
340 // CSR Array Getters
341 bool has_csr() const
342 {
343 return _has_csr;
344 }
345
346 // Internal Flux Matrix
347 const std::vector<real>& getBasisArrayInternalFluxCSRVal(const int dim) const
348 {
349 return _ups2csr_val[dim];
350 }
351
352 const std::vector<int>& getBasisArrayInternalFluxCSRCol(const int dim) const
353 {
354 return _ups2csr_col[dim];
355 }
356
357 const std::vector<int>& getBasisArrayInternalFluxCSRRowPtr(const int dim) const
358 {
359 return _ups2csr_rowptr[dim];
360 }
361
362 // Derivative Matrix
363 const std::vector<real>& getBasisArrayDerivativeMatrixCSRVal(const int dim) const
364 {
365 return _Drcsr_val[dim];
366 }
367
368 const std::vector<int>& getBasisArrayDerivativeMatrixCSRCol(const int dim) const
369 {
370 return _Drcsr_col[dim];
371 }
372
373 const std::vector<int>& getBasisArrayDerivativeCSRRowPtr(const int dim) const
374 {
375 return _Drcsr_rowptr[dim];
376 }
377
378 // Numerical Flux Matrix
379 const std::vector<real>& getBasisArrayNumericalFluxCSRVal(const int face) const
380 {
381 return _ups1csr_val[face];
382 }
383
384 const std::vector<int>& getBasisArrayNumericalFluxCSRCol(const int face) const
385 {
386 return _ups1csr_col[face];
387 }
388
389 const std::vector<int>& getBasisArrayNumericalFluxCSRRowPtr(const int face) const
390 {
391 return _ups1csr_rowptr[face];
392 }
393
394protected:
395 void clear();
396
398
399 // Convention here is that unstructured (simplex) parts have original names
400 // and the structured parts (squares, for velocity space) have "Squares" after name
410 int _numDims; // Actual dimensionality of elements
411 int _numDimsUnstruct; // Number of unstructured dimensions (only specified in mixed
412 // case)
416
418
419 // Sub element deconstruction of basis
422 std::vector<int> _subElementConnectivity;
423
431
433
434 // Used of faces can be different i.e. phase space element where not all the faces are
435 // the same
437 // sets the number of faces for each face type
438 std::vector<int> _num_faces_per_face_type;
440 std::vector<int> _num_face_nodes_per_face;
441 std::vector<int> _faceNodesDeduplicated;
442
443 std::vector<real> _nodePositionsGaussQuad;
444 std::vector<real> _basisArray_GaussQuad;
446
447 std::vector<real> _nodePositions;
448 std::vector<real> _basisArray_NumericalFlux;
449 std::vector<real> _basisArray_NumericalFlux_altFace; // Alternate num. flux for
450 // structured velocity space
451 std::vector<real> _basisArray_InternalFlux;
452 std::vector<real> _basisArray_LinearAverage;
453 std::vector<real> _basisArray_LinearCenter;
457 std::vector<std::function<real(const std::array<real, 3>&)>> _monomial_functions;
459 // Vector of quadrature weights for integrating a function along
460 // the face. The node ordering coincides with the ordering used
461 // in _faceNodes.
463
465
466 std::vector<std::vector<int>> _orientations;
467 std::vector<std::vector<int>> _faceNodes;
468
469 // csr data
471 // ups2
472 std::vector<int> _ups2csr_val_lengths;
473 std::vector<std::vector<real>> _ups2csr_val;
474 std::vector<std::vector<int>> _ups2csr_col;
475 std::vector<std::vector<int>> _ups2csr_rowptr;
476 // Dr
477 std::vector<int> _Drcsr_val_lengths;
478 std::vector<std::vector<real>> _Drcsr_val;
479 std::vector<std::vector<int>> _Drcsr_col;
480 std::vector<std::vector<int>> _Drcsr_rowptr;
481 // ups1
482 std::vector<int> _ups1csr_val_lengths;
483 std::vector<std::vector<real>> _ups1csr_val;
484 std::vector<std::vector<int>> _ups1csr_col;
485 std::vector<std::vector<int>> _ups1csr_rowptr;
486
487private:
488};
489
490#endif // WMBASISARRAYSET_H
Definition: wmbasisarrayset.h:14
size_t getBasisArrayBlockSize_InternalFlux() const
Definition: wmbasisarrayset.h:78
int getNumDims() const
Definition: wmbasisarrayset.h:44
std::vector< std::vector< int > > _Drcsr_col
Definition: wmbasisarrayset.h:479
const std::vector< real > & getBasisArray_LinearAverage() const
Definition: wmbasisarrayset.h:259
size_t getNumPositivityPreservingQuadNodes()
Definition: wmbasisarrayset.h:169
int getNumFaceNodes(int face_index) const
Definition: wmbasisarrayset.h:320
const real * getBasisArray_NumericalFlux() const
Definition: wmbasisarrayset.h:215
const real * getBasisArray_CollocationToOrthogonal() const
Definition: wmbasisarrayset.h:275
size_t getBasisArraySize_InternalFlux() const
Definition: wmbasisarrayset.h:96
int _numInteriorPositivityPreservingQuadNodes
Definition: wmbasisarrayset.h:415
std::vector< int > _subElementConnectivity
Definition: wmbasisarrayset.h:422
int _basisArray_NumericalFlux_Size
Definition: wmbasisarrayset.h:424
std::vector< std::vector< int > > _ups1csr_rowptr
Definition: wmbasisarrayset.h:485
std::vector< real > _basisArray_NumericalFlux_altFace
Definition: wmbasisarrayset.h:449
std::vector< int > _num_face_nodes_per_face
Definition: wmbasisarrayset.h:440
int getNumOrientations() const
Definition: wmbasisarrayset.h:325
std::vector< std::vector< int > > _faceNodes
Definition: wmbasisarrayset.h:467
int _numTotalFaceNodesDeduplicated
Definition: wmbasisarrayset.h:406
int _numDims
Definition: wmbasisarrayset.h:410
std::vector< real > _nodePositions
Definition: wmbasisarrayset.h:447
const std::vector< real > & getBasisArray_evaluateAtInteriorPositivityPreservingQuadNodes() const
Definition: wmbasisarrayset.h:249
std::vector< real > _basisArray_OrthogonalToCollocation
Definition: wmbasisarrayset.h:455
std::vector< std::vector< int > > _Drcsr_rowptr
Definition: wmbasisarrayset.h:480
const std::vector< int > & getBasisArrayDerivativeMatrixCSRCol(const int dim) const
Definition: wmbasisarrayset.h:368
int _numFacesPerElement
Definition: wmbasisarrayset.h:401
std::vector< std::vector< real > > _ups2csr_val
Definition: wmbasisarrayset.h:473
int getNumFaceTypes() const
Definition: wmbasisarrayset.h:315
std::vector< std::vector< real > > _Drcsr_val
Definition: wmbasisarrayset.h:478
std::vector< real > _basisArray_InternalFlux
Definition: wmbasisarrayset.h:451
std::vector< std::vector< int > > _ups2csr_col
Definition: wmbasisarrayset.h:474
const real * getBasisArray_GaussQuad() const
Definition: wmbasisarrayset.h:227
size_t getNumInteriorPositivityPreservingQuadNodes() const
Definition: wmbasisarrayset.h:190
std::vector< real > _basisArray_evaluateAtInteriorPositivityPreservingQuadNodes
Definition: wmbasisarrayset.h:464
int _numFacesPerElementSquares
Definition: wmbasisarrayset.h:402
int _numTotalNodes
Definition: wmbasisarrayset.h:408
int _numInternalNodes
Definition: wmbasisarrayset.h:407
int getNumSubElements() const
Definition: wmbasisarrayset.h:121
int _basisArray_LinearCenter_Size
Definition: wmbasisarrayset.h:428
bool _has_csr
Definition: wmbasisarrayset.h:470
int _num_face_types
Definition: wmbasisarrayset.h:436
std::vector< std::vector< int > > _ups2csr_rowptr
Definition: wmbasisarrayset.h:475
const int * getFaceNodes(const int face_index) const
Definition: wmbasisarrayset.h:300
const int * getSubElementConnectivity() const
Definition: wmbasisarrayset.h:129
int _basisArray_Derivative_Approximation_Size
Definition: wmbasisarrayset.h:430
size_t getBasisArraySize_NumericalFlux() const
Definition: wmbasisarrayset.h:88
const real * getBasisArray_MonomialConversion() const
Definition: wmbasisarrayset.h:267
int _numFaceNodes
Definition: wmbasisarrayset.h:403
size_t getBasisArraySize_NumericalFlux_altFace() const
Definition: wmbasisarrayset.h:92
int getNumFaceNodesForFaceType(int face_type) const
Definition: wmbasisarrayset.h:330
std::vector< real > _basisArray_GaussQuad
Definition: wmbasisarrayset.h:444
const std::vector< real > & getNodePositions() const
Definition: wmbasisarrayset.h:143
int _two_num_flux_arrays_flag
Definition: wmbasisarrayset.h:397
real getInverseElementVolume() const
1/element volume, in the local coordinate system useful for turning volume averages into volume integ...
Definition: wmbasisarrayset.h:309
int getNumTotalNodes() const
Definition: wmbasisarrayset.h:48
real getCFLLimit() const
Definition: wmbasisarrayset.h:65
int _numFaceNodesSquares
Definition: wmbasisarrayset.h:404
std::vector< int > _faceNodesDeduplicated
Definition: wmbasisarrayset.h:441
int getNumInternalNodes() const
Definition: wmbasisarrayset.h:56
int getNumFacesPerElement() const
Definition: wmbasisarrayset.h:24
int _numTotalFaceNodes
Definition: wmbasisarrayset.h:405
std::vector< std::vector< int > > _orientations
Definition: wmbasisarrayset.h:466
size_t getBasisArraySize_LinearAverage() const
Definition: wmbasisarrayset.h:106
const real * getBasisArray_LinearCenter() const
Definition: wmbasisarrayset.h:263
std::vector< std::vector< real > > _ups1csr_val
Definition: wmbasisarrayset.h:483
const std::vector< real > & getBasisArrayDerivativeMatrixCSRVal(const int dim) const
Definition: wmbasisarrayset.h:363
const real * getBasisArray_DerivativeApproximation() const
Definition: wmbasisarrayset.h:254
int _numGaussQuadNodes
Definition: wmbasisarrayset.h:409
const std::vector< real > & getBasisArrayNumericalFluxCSRVal(const int face) const
Definition: wmbasisarrayset.h:379
std::vector< real > _basisArray_CollocationToOrthogonal
Definition: wmbasisarrayset.h:456
int _spatialOrder
Definition: wmbasisarrayset.h:414
std::vector< real > _basisArray_faceQuadratureWeights
Definition: wmbasisarrayset.h:462
const std::vector< int > & getNumFaceNodesVector() const
Definition: wmbasisarrayset.h:335
const std::vector< std::function< real(const std::array< real, 3 > &)> > & get_monomial_functions() const
Definition: wmbasisarrayset.h:291
const real * getBasisArray_InternalFlux() const
Definition: wmbasisarrayset.h:223
int _basisArray_NumericalFlux_altFace_Size
Definition: wmbasisarrayset.h:425
const std::vector< int > & getBasisArrayInternalFluxCSRRowPtr(const int dim) const
Definition: wmbasisarrayset.h:357
std::vector< real > _basisArray_NumericalFlux
Definition: wmbasisarrayset.h:448
const real * getBasisArray_OrthogonalToCollocation() const
Definition: wmbasisarrayset.h:271
size_t getBasisArraySize_DerivativeApproximation() const
Definition: wmbasisarrayset.h:101
size_t getBasisArrayBlockSize_NumericalFlux() const
Definition: wmbasisarrayset.h:74
const std::vector< real > & getNodePositions_PositivityPreservingQuad() const
Definition: wmbasisarrayset.h:153
int getNumTotalFaceNodesDeduplicated() const
Get the total number of face nodes on the element, not double-counting nodes that live on more than o...
Definition: wmbasisarrayset.h:40
std::vector< int > _num_faces_per_face_type
Definition: wmbasisarrayset.h:438
int _numOrientations
Definition: wmbasisarrayset.h:413
bool has_csr() const
Definition: wmbasisarrayset.h:341
std::vector< std::function< real(const std::array< real, 3 > &)> > _monomial_functions
Definition: wmbasisarrayset.h:457
int _numNodesPerSubElement
Definition: wmbasisarrayset.h:421
int _numDimsUnstruct
Definition: wmbasisarrayset.h:411
int _basisArray_InternalFlux_Size
Definition: wmbasisarrayset.h:426
size_t getBasisArraySize_MonomialConversion() const
Definition: wmbasisarrayset.h:116
const std::vector< real > & getNodePositionsGaussQuad() const
Definition: wmbasisarrayset.h:148
std::vector< real > _basisArray_LagrangeOnGQnodes
Definition: wmbasisarrayset.h:445
size_t getBasisArraySize_LinearCenter() const
Definition: wmbasisarrayset.h:111
int _numSubElements
Definition: wmbasisarrayset.h:420
const real * getBasisArray_LagrangeOnGQnodes() const
Definition: wmbasisarrayset.h:210
int getSpatialOrder() const
Definition: wmbasisarrayset.h:60
const std::vector< int > & getBasisArrayDerivativeCSRRowPtr(const int dim) const
Definition: wmbasisarrayset.h:373
std::vector< real > _basisArray_MonomialConversion
Definition: wmbasisarrayset.h:454
int getNumTotalFaceNodes() const
Definition: wmbasisarrayset.h:32
const real * getBasisArray_FaceQuadratureWeights() const
an array of length numNodesPerFace.
Definition: wmbasisarrayset.h:285
size_t getBasisArrayBlockSize_DerivativeApproximation() const
Definition: wmbasisarrayset.h:83
int getNumNodesPerSubElement() const
Definition: wmbasisarrayset.h:125
real _cfl
Definition: wmbasisarrayset.h:432
std::vector< int > _ups2csr_val_lengths
Definition: wmbasisarrayset.h:472
const std::vector< real > & getBasisArrayInternalFluxCSRVal(const int dim) const
Definition: wmbasisarrayset.h:347
int getNumFaceNodes() const
Definition: wmbasisarrayset.h:28
int _basisArray_LinearAverage_Size
Definition: wmbasisarrayset.h:427
void loadBasis(const int primitiveID, const std::string &basisArraySetName, const std::string &vspace_basisName, const size_t vspace_ndims)
std::vector< int > _ups1csr_val_lengths
Definition: wmbasisarrayset.h:482
std::vector< std::vector< int > > _ups1csr_col
Definition: wmbasisarrayset.h:484
std::vector< real > _basisArray_LinearCenter
Definition: wmbasisarrayset.h:453
std::vector< int > _num_face_nodes_per_face_type
Definition: wmbasisarrayset.h:439
const std::vector< int > & getBasisArrayInternalFluxCSRCol(const int dim) const
Definition: wmbasisarrayset.h:352
const int * getOrientations(const int index) const
Definition: wmbasisarrayset.h:296
std::vector< int > _Drcsr_val_lengths
Definition: wmbasisarrayset.h:477
size_t getBasisArrayBlockSize_Source() const
Definition: wmbasisarrayset.h:70
std::vector< real > _nodePositionsGaussQuad
Definition: wmbasisarrayset.h:443
void loadFile(const std::string &filename)
real _vol_multiplier
Definition: wmbasisarrayset.h:417
const std::vector< int > & getFaceNodesDeduplicated() const
Return the list of all face node indices, with duplicates (e.g.
Definition: wmbasisarrayset.h:138
std::vector< real > _basisArray_LinearAverage
Definition: wmbasisarrayset.h:452
const std::vector< int > & getBasisArrayNumericalFluxCSRCol(const int face) const
Definition: wmbasisarrayset.h:384
const std::vector< int > & getBasisArrayNumericalFluxCSRRowPtr(const int face) const
Definition: wmbasisarrayset.h:389
std::vector< real > _basisArray_Derivative_Approximation
Definition: wmbasisarrayset.h:458
const std::vector< real > & getBasisArray_PositivityPreservingQuadWeights() const
Definition: wmbasisarrayset.h:232
const real * getBasisArray_NumericalFlux_altFace() const
Definition: wmbasisarrayset.h:219
int getNumGaussQuadNodes() const
Definition: wmbasisarrayset.h:52
int _basisArray_MonomialConversion_Size
Definition: wmbasisarrayset.h:429
wxm::lib::Except is the class to use for creating and throwing exceptions.
Definition: wxexcept.h:31
#define real
Definition: wmoclunstructuredreconstruction.h:11