Nektar++
Loading...
Searching...
No Matches
Expansion.h
Go to the documentation of this file.
1///////////////////////////////////////////////////////////////////////////////
2//
3// File: Expansion.h
4//
5// For more information, please see: http://www.nektar.info
6//
7// The MIT License
8//
9// Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10// Department of Aeronautics, Imperial College London (UK), and Scientific
11// Computing and Imaging Institute, University of Utah (USA).
12//
13// Permission is hereby granted, free of charge, to any person obtaining a
14// copy of this software and associated documentation files (the "Software"),
15// to deal in the Software without restriction, including without limitation
16// the rights to use, copy, modify, merge, publish, distribute, sublicense,
17// and/or sell copies of the Software, and to permit persons to whom the
18// Software is furnished to do so, subject to the following conditions:
19//
20// The above copyright notice and this permission notice shall be included
21// in all copies or substantial portions of the Software.
22//
23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29// DEALINGS IN THE SOFTWARE.
30//
31// Description: Header file for Expansion routines
32//
33///////////////////////////////////////////////////////////////////////////////
34
35#ifndef EXPANSION_H
36#define EXPANSION_H
37
43#include <map>
44#include <memory>
45#include <vector>
46
48{
49
50class Expansion;
51class MatrixKey;
52
54
65
66typedef std::shared_ptr<Expansion> ExpansionSharedPtr;
67typedef std::weak_ptr<Expansion> ExpansionWeakPtr;
68typedef std::vector<ExpansionSharedPtr> ExpansionVector;
69typedef std::map<MetricType, Array<OneD, NekDouble>> MetricMap;
70
71class Expansion : virtual public StdRegions::StdExpansion
72{
73public:
75 SpatialDomains::Geometry *pGeom); // default constructor.
76 LOCAL_REGIONS_EXPORT Expansion(const Expansion &pSrc); // copy constructor.
78
79 LOCAL_REGIONS_EXPORT void SetTraceExp(const int traceid,
82
84
89
95
98
100 const LocalRegions::MatrixKey &mkey);
101
103 const StdRegions::MatrixType mtype,
104 const StdRegions::ConstFactorMap &factors =
107
109
111
113 CreateIndexMap(const IndexMapKey &ikey);
114
117
119 const;
120
123 const StdRegions::MatrixType matrixType);
124
127
129 const NekDouble *data, const std::vector<unsigned int> &nummodes,
130 const int nmodes_offset, NekDouble *coeffs,
131 std::vector<LibUtilities::BasisType> &fromType);
132
134 const int edge, const std::shared_ptr<Expansion> &EdgeExp,
137 Array<OneD, NekDouble> &outarray);
139 const int edge, const std::shared_ptr<Expansion> &EdgeExp,
141 Array<OneD, NekDouble> &outarray);
143 const int face, const std::shared_ptr<Expansion> &FaceExp,
145 Array<OneD, NekDouble> &outarray);
147 const int dir, const Array<OneD, const NekDouble> &inarray,
150 Array<OneD, NekDouble> &outarray);
153
156 Array<OneD, Array<OneD, NekDouble>> &d0factors,
157 Array<OneD, Array<OneD, NekDouble>> &d1factors);
158
160 {
161 return m_indexMapManager[ikey];
162 }
163
165 const int dir, const Array<OneD, const NekDouble> &inarray,
167 {
168 v_AlignVectorToCollapsedDir(dir, inarray, outarray);
169 }
170
172
174
175 inline int GetLeftAdjacentElementTrace() const;
176
177 inline int GetRightAdjacentElementTrace() const;
178
179 inline void SetAdjacentElementExp(int traceid, ExpansionSharedPtr &e);
180
182 {
183 return v_GetTraceOrient(trace);
184 }
185
188 Array<OneD, NekDouble> &outarray)
189 {
190 v_SetCoeffsToOrientation(dir, inarray, outarray);
191 }
192
193 /// Divided by the metric jacobi and quadrature weights
195 const Array<OneD, const NekDouble> &inarray,
196 Array<OneD, NekDouble> &outarray)
197 {
198 v_DivideByQuadratureMetric(inarray, outarray);
199 }
200
201 /**
202 * @brief Extract the metric factors to compute the contravariant
203 * fluxes along edge \a edge and stores them into \a outarray
204 * following the local edge orientation (i.e. anticlockwise
205 * convention).
206 */
207 inline void GetTraceQFactors(const int trace,
208 Array<OneD, NekDouble> &outarray)
209 {
210 v_GetTraceQFactors(trace, outarray);
211 }
212
213 inline void GetTracePhysVals(
214 const int trace, const StdRegions::StdExpansionSharedPtr &TraceExp,
215 const Array<OneD, const NekDouble> &inarray,
216 Array<OneD, NekDouble> &outarray,
218 {
219 v_GetTracePhysVals(trace, TraceExp, inarray, outarray, orient);
220 }
221
223 const int trace, const StdRegions::StdExpansionSharedPtr &TraceExp,
224 const Array<OneD, const NekDouble> &inarray,
225 Array<OneD, NekDouble> &outarray)
226 {
227 v_GetLocTracePhysVals(trace, TraceExp, inarray.data(), outarray);
228 }
229
230 inline void GetTracePhysMap(const int edge, Array<OneD, int> &outarray)
231 {
232 v_GetTracePhysMap(edge, outarray);
233 }
234
238 const int nq0, const int nq1,
239 bool Forwards = true)
240 {
241 v_ReOrientTracePhysVals(orient, in, out, nq0, nq1, Forwards);
242 }
243
245 LOCAL_REGIONS_EXPORT const std::map<int, NormalVector> &GetTraceNormals(
246 void);
247
248 inline void ComputeTraceNormal(const int id)
249 {
251 }
252
254 {
255 return v_GetPhysNormals();
256 }
257
259 {
260 v_SetPhysNormals(normal);
261 }
262
263 inline void SetUpPhysNormals(const int trace)
264 {
265 v_SetUpPhysNormals(trace);
266 }
267
269 const int traceid, const Array<OneD, const NekDouble> &primCoeffs,
270 DNekMatSharedPtr &inoutmat)
271 {
272 v_AddRobinMassMatrix(traceid, primCoeffs, inoutmat);
273 }
274
275 inline void TraceNormLen(const int traceid, NekDouble &h, NekDouble &p)
276 {
277 v_TraceNormLen(traceid, h, p);
278 }
279
281 const int traceid, const Array<OneD, const NekDouble> &primCoeffs,
282 const Array<OneD, NekDouble> &incoeffs, Array<OneD, NekDouble> &coeffs)
283 {
284 v_AddRobinTraceContribution(traceid, primCoeffs, incoeffs, coeffs);
285 }
286
288 GetElmtBndNormDirElmtLen(const int nbnd) const;
289
292
294 const int traceid, Array<OneD, DNekMatSharedPtr> &DerivMat);
295
296 LOCAL_REGIONS_EXPORT void PhysBaseOnTraceMat(const int traceid,
297 DNekMatSharedPtr &BdataMat);
298 /// Handles generation of geometry factors.
299 void GenGeomFactors();
300
301protected:
304
305 std::map<int, ExpansionWeakPtr> m_traceExp;
309 std::map<int, NormalVector> m_traceNormals;
314
315 /// the element length in each element boundary(Vertex, edge
316 /// or face) normal direction calculated based on the local
317 /// m_geomFactors times the standard element length (which is
318 /// 2.0)
319 std::map<int, Array<OneD, NekDouble>> m_elmtBndNormDirElmtLen;
320
324 const Array<OneD, const NekDouble> &direction,
326
327 Array<OneD, NekDouble> GetMF(const int dir, const int shapedim,
328 const StdRegions::VarCoeffMap &varcoeffs);
329
330 Array<OneD, NekDouble> GetMFDiv(const int dir,
331 const StdRegions::VarCoeffMap &varcoeffs);
332
333 Array<OneD, NekDouble> GetMFMag(const int dir,
334 const StdRegions::VarCoeffMap &varcoeffs);
335
337 const Array<OneD, const NekDouble> &inarray,
338 Array<OneD, NekDouble> &outarray) override;
339
342 const Array<OneD, const NekDouble> &physvals) override;
343
345 const Array<OneD, const NekDouble> &inarray,
346 Array<OneD, NekDouble> &outarray) override;
347
348 virtual void v_DivideByQuadratureMetric(
349 const Array<OneD, const NekDouble> &inarray,
350 Array<OneD, NekDouble> &outarray);
351
353 {
354 }
355
357 const;
358
360 void) const;
361
362 int v_GetCoordim() const override
363 {
364 return m_geom->GetCoordim();
365 }
366
367 void v_GetCoords(Array<OneD, NekDouble> &coords_1,
368 Array<OneD, NekDouble> &coords_2,
369 Array<OneD, NekDouble> &coords_3) override;
370
372 const LocalRegions::MatrixKey &mkey);
373
374 virtual void v_DropLocMatrix(const LocalRegions::MatrixKey &mkey);
375
377 const DNekScalMatSharedPtr &r_bnd,
378 const StdRegions::MatrixType matrixType);
379
381 const DNekScalMatSharedPtr &r_bnd);
382
383 virtual void v_ExtractDataToCoeffs(
384 const NekDouble *data, const std::vector<unsigned int> &nummodes,
385 const int nmodes_offset, NekDouble *coeffs,
386 std::vector<LibUtilities::BasisType> &fromType);
387
388 virtual void v_AddEdgeNormBoundaryInt(
389 const int edge, const std::shared_ptr<Expansion> &EdgeExp,
392 Array<OneD, NekDouble> &outarray);
393 virtual void v_AddEdgeNormBoundaryInt(
394 const int edge, const std::shared_ptr<Expansion> &EdgeExp,
396 Array<OneD, NekDouble> &outarray);
397 virtual void v_AddFaceNormBoundaryInt(
398 const int face, const std::shared_ptr<Expansion> &FaceExp,
400 Array<OneD, NekDouble> &outarray);
401 virtual void v_DGDeriv(const int dir,
402 const Array<OneD, const NekDouble> &inarray,
405 Array<OneD, NekDouble> &outarray);
406 virtual NekDouble v_VectorFlux(
407 const Array<OneD, Array<OneD, NekDouble>> &vec);
408
409 virtual void v_NormalTraceDerivFactors(
411 Array<OneD, Array<OneD, NekDouble>> &d0factors,
412 Array<OneD, Array<OneD, NekDouble>> &d1factors);
413
414 virtual void v_AlignVectorToCollapsedDir(
415 const int dir, const Array<OneD, const NekDouble> &inarray,
416 Array<OneD, Array<OneD, NekDouble>> &outarray);
417
418 virtual StdRegions::Orientation v_GetTraceOrient(int trace);
419
422 Array<OneD, NekDouble> &outarray) override;
423
424 virtual void v_GetTraceQFactors(const int trace,
425 Array<OneD, NekDouble> &outarray);
426
427 virtual void v_GetTracePhysVals(
428 const int trace, const StdRegions::StdExpansionSharedPtr &TraceExp,
429 const Array<OneD, const NekDouble> &inarray,
431
432 virtual void v_GetLocTracePhysVals(
433 const int trace, const StdRegions::StdExpansionSharedPtr &TraceExp,
434 const NekDouble *inarray, Array<OneD, NekDouble> &outarray);
435
436 virtual void v_GetTracePhysMap(const int edge, Array<OneD, int> &outarray);
437
438 virtual void v_ReOrientTracePhysVals(const StdRegions::Orientation orient,
441 const int nq0, const int nq1,
442 bool Forwards);
443
444 virtual void v_ComputeTraceNormal(const int id);
445
447
449
450 virtual void v_SetUpPhysNormals(const int id);
451
452 virtual void v_AddRobinMassMatrix(
453 const int face, const Array<OneD, const NekDouble> &primCoeffs,
454 DNekMatSharedPtr &inoutmat);
455
456 virtual void v_AddRobinTraceContribution(
457 const int traceid, const Array<OneD, const NekDouble> &primCoeffs,
458 const Array<OneD, NekDouble> &incoeffs, Array<OneD, NekDouble> &coeffs);
459
460 virtual void v_TraceNormLen(const int traceid, NekDouble &h, NekDouble &p);
461
462 virtual void v_GenTraceExp(const int traceid, ExpansionSharedPtr &exp);
463
464private:
465};
466
467/**
468 * @brief Get the geometric factors for this object, generating them if
469 * required.
470 */
472{
473 return m_geomFactors.get();
474}
475
476/**
477 * @brief Generate the geometric factors (i.e. derivatives of \f$\chi\f$) and
478 * related metrics.
479 *
480 * @see SpatialDomains::GeomFactors
481 */
487
488// This returns a local trace expansion which might be replaced by a global
489// trace (for example by the DG trace which could be of a different order or
490// Dirichlet BCs)
492{
493 ASSERTL1(traceid < GetNtraces(), "Trace is out of range.");
494
495 ExpansionSharedPtr returnval;
496
497 if (m_traceExp.count(traceid))
498 {
499 // Use stored value
500 returnval = m_traceExp[traceid].lock();
501 }
502 else
503 {
504 // Generate trace exp
505 v_GenTraceExp(traceid, returnval);
506 }
507
508 return returnval;
509}
510
511// Generate a local Trace expansion
513{
514 ASSERTL1(traceid < GetNtraces(), "Trace is out of range.");
515
516 ExpansionSharedPtr returnval;
517
518 // Generate local trace exp
519 v_GenTraceExp(traceid, returnval);
520
521 return returnval;
522}
523
524inline void Expansion::SetTraceExp(const int traceid, ExpansionSharedPtr &exp)
525{
526 ASSERTL1(traceid < GetNtraces(), "Trace out of range.");
527
528 m_traceExp[traceid] = exp;
529}
530
532{
533 ASSERTL1(m_elementLeft.lock().get(), "Left adjacent element not set.");
534 return m_elementLeft.lock();
535}
536
538{
539 ASSERTL1(m_elementLeft.lock().get(), "Right adjacent element not set.");
540
541 return m_elementRight.lock();
542}
543
545{
546 return m_elementTraceLeft;
547}
548
550{
551 return m_elementTraceRight;
552}
553
554inline void Expansion::SetAdjacentElementExp(int traceid,
556{
557 if (m_elementLeft.lock().get())
558 {
559 m_elementRight = exp;
560 m_elementTraceRight = traceid;
561 }
562 else
563 {
564 m_elementLeft = exp;
565 m_elementTraceLeft = traceid;
566 }
567}
568
569void GetTraceQuadRange(const LibUtilities::ShapeType shapeType,
570 const LibUtilities::BasisKeyVector &bkeys, int traceid,
571 std::vector<int> &q_begin, std::vector<int> &q_end);
572
573} // namespace Nektar::LocalRegions
574
575#endif
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
#define LOCAL_REGIONS_EXPORT
std::map< int, NormalVector > m_traceNormals
Definition Expansion.h:309
std::map< int, Array< OneD, NekDouble > > m_elmtBndNormDirElmtLen
the element length in each element boundary(Vertex, edge or face) normal direction calculated based o...
Definition Expansion.h:319
virtual void v_SetPhysNormals(Array< OneD, const NekDouble > &normal)
void SetTraceExp(const int traceid, ExpansionSharedPtr &f)
Definition Expansion.h:524
virtual void v_TraceNormLen(const int traceid, NekDouble &h, NekDouble &p)
IndexMapValuesSharedPtr CreateIndexMap(const IndexMapKey &ikey)
void AddRobinTraceContribution(const int traceid, const Array< OneD, const NekDouble > &primCoeffs, const Array< OneD, NekDouble > &incoeffs, Array< OneD, NekDouble > &coeffs)
Definition Expansion.h:280
SpatialDomains::GeomFactors * GetGeomFactors() const
Get the geometric factors for this object, generating them if required.
Definition Expansion.h:471
void GetTracePhysMap(const int edge, Array< OneD, int > &outarray)
Definition Expansion.h:230
void DropLocMatrix(const LocalRegions::MatrixKey &mkey)
Definition Expansion.cpp:94
SpatialDomains::Geometry * GetGeom() const
ExpansionSharedPtr GetLeftAdjacentElementExp() const
Definition Expansion.h:531
DNekMatSharedPtr BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
virtual void v_DivideByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_GenTraceExp(const int traceid, ExpansionSharedPtr &exp)
void v_SetCoeffsToOrientation(StdRegions::Orientation dir, Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
SpatialDomains::Geometry * m_geom
Definition Expansion.h:306
virtual void v_AddRobinTraceContribution(const int traceid, const Array< OneD, const NekDouble > &primCoeffs, const Array< OneD, NekDouble > &incoeffs, Array< OneD, NekDouble > &coeffs)
ExpansionWeakPtr m_elementRight
Definition Expansion.h:311
void ReOrientTracePhysVals(const StdRegions::Orientation orient, const Array< OneD, const NekDouble > &in, Array< OneD, NekDouble > &out, const int nq0, const int nq1, bool Forwards=true)
Definition Expansion.h:235
void PhysDerivBaseOnTraceMat(const int traceid, Array< OneD, DNekMatSharedPtr > &DerivMat)
void AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray)
Definition Expansion.h:164
void ComputeGmatcdotMF(const Array< TwoD, const NekDouble > &df, const Array< OneD, const NekDouble > &direction, Array< OneD, Array< OneD, NekDouble > > &dfdir)
virtual void v_GetTraceQFactors(const int trace, Array< OneD, NekDouble > &outarray)
virtual void v_ComputeTraceNormal(const int id)
void GetTraceQFactors(const int trace, Array< OneD, NekDouble > &outarray)
Extract the metric factors to compute the contravariant fluxes along edge edge and stores them into o...
Definition Expansion.h:207
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const
DNekScalBlkMatSharedPtr CreateStaticCondMatrix(const MatrixKey &mkey)
void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3) override
Array< OneD, NekDouble > GetMFMag(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
void SetUpPhysNormals(const int trace)
Definition Expansion.h:263
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp() const
void SetAdjacentElementExp(int traceid, ExpansionSharedPtr &e)
Definition Expansion.h:554
virtual DNekMatSharedPtr v_BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Forward transform from physical quadrature space stored in inarray and evaluate the expansion coeffic...
const Array< OneD, const NekDouble > & GetPhysNormals(void)
Definition Expansion.h:253
virtual DNekScalMatSharedPtr v_GetLocMatrix(const LocalRegions::MatrixKey &mkey)
virtual void v_GetLocTracePhysVals(const int trace, const StdRegions::StdExpansionSharedPtr &TraceExp, const NekDouble *inarray, Array< OneD, NekDouble > &outarray)
int GetLeftAdjacentElementTrace() const
Definition Expansion.h:544
void DivideByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Divided by the metric jacobi and quadrature weights.
Definition Expansion.h:194
void GetTracePhysVals(const int trace, const StdRegions::StdExpansionSharedPtr &TraceExp, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, StdRegions::Orientation orient=StdRegions::eNoOrientation)
Definition Expansion.h:213
virtual void v_AddFaceNormBoundaryInt(const int face, const std::shared_ptr< Expansion > &FaceExp, const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
virtual void v_DGDeriv(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, Array< OneD, NekDouble > > &coeffs, Array< OneD, NekDouble > &outarray)
virtual DNekMatSharedPtr v_BuildTransformationMatrix(const DNekScalMatSharedPtr &r_bnd, const StdRegions::MatrixType matrixType)
const Array< OneD, const NekDouble > & GetElmtBndNormDirElmtLen(const int nbnd) const
virtual void v_AddRobinMassMatrix(const int face, const Array< OneD, const NekDouble > &primCoeffs, DNekMatSharedPtr &inoutmat)
std::map< int, ExpansionWeakPtr > m_traceExp
Definition Expansion.h:305
virtual void v_NormalTraceDerivFactors(Array< OneD, Array< OneD, NekDouble > > &factors, Array< OneD, Array< OneD, NekDouble > > &d0factors, Array< OneD, Array< OneD, NekDouble > > &d1factors)
void AddEdgeNormBoundaryInt(const int edge, const std::shared_ptr< Expansion > &EdgeExp, const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
ExpansionWeakPtr m_elementLeft
Definition Expansion.h:310
void AddFaceNormBoundaryInt(const int face, const std::shared_ptr< Expansion > &FaceExp, const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
virtual void v_DropLocMatrix(const LocalRegions::MatrixKey &mkey)
void AddRobinMassMatrix(const int traceid, const Array< OneD, const NekDouble > &primCoeffs, DNekMatSharedPtr &inoutmat)
Definition Expansion.h:268
StdRegions::StdExpansionSharedPtr GetStdExp() const
Definition Expansion.h:85
ExpansionSharedPtr GetLocTraceExp(const int traceid)
Definition Expansion.h:512
void PhysBaseOnTraceMat(const int traceid, DNekMatSharedPtr &BdataMat)
virtual NekDouble v_VectorFlux(const Array< OneD, Array< OneD, NekDouble > > &vec)
int v_GetCoordim() const override
Definition Expansion.h:362
virtual StdRegions::Orientation v_GetTraceOrient(int trace)
void DGDeriv(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, Array< OneD, NekDouble > > &coeffs, Array< OneD, NekDouble > &outarray)
void StdDerivBaseOnTraceMat(Array< OneD, DNekMatSharedPtr > &DerivMat)
void ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int nmodes_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
void v_MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coord, const Array< OneD, const NekDouble > &physvals) override
ExpansionSharedPtr GetTraceExp(const int traceid)
Definition Expansion.h:491
void SetPhysNormals(Array< OneD, const NekDouble > &normal)
Definition Expansion.h:258
virtual void v_ReOrientTracePhysVals(const StdRegions::Orientation orient, const Array< OneD, const NekDouble > &in, Array< OneD, NekDouble > &out, const int nq0, const int nq1, bool Forwards)
void GetLocTracePhysVals(const int trace, const StdRegions::StdExpansionSharedPtr &TraceExp, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition Expansion.h:222
void NormalTraceDerivFactors(Array< OneD, Array< OneD, NekDouble > > &factors, Array< OneD, Array< OneD, NekDouble > > &d0factors, Array< OneD, Array< OneD, NekDouble > > &d1factors)
virtual void v_ComputeLaplacianMetric()
Definition Expansion.h:352
virtual const Array< OneD, const NekDouble > & v_GetPhysNormals()
virtual void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int nmodes_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
ExpansionSharedPtr GetRightAdjacentElementExp() const
Definition Expansion.h:537
virtual void v_AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray)
StdRegions::Orientation GetTraceOrient(int trace)
Definition Expansion.h:181
const std::map< int, NormalVector > & GetTraceNormals(void)
virtual void v_AddEdgeNormBoundaryInt(const int edge, const std::shared_ptr< Expansion > &EdgeExp, const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
IndexMapValuesSharedPtr GetIndexMap(const IndexMapKey &ikey)
Definition Expansion.h:159
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
Definition Expansion.cpp:88
virtual void v_SetUpPhysNormals(const int id)
virtual void v_GetTracePhysMap(const int edge, Array< OneD, int > &outarray)
Array< OneD, NekDouble > GetMFDiv(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
int GetRightAdjacentElementTrace() const
Definition Expansion.h:549
void TraceNormLen(const int traceid, NekDouble &h, NekDouble &p)
Definition Expansion.h:275
StdRegions::StdExpansionSharedPtr GetLinStdExp(void) const
Definition Expansion.h:90
const NormalVector & GetTraceNormal(const int id)
Array< OneD, NekDouble > GetMF(const int dir, const int shapedim, const StdRegions::VarCoeffMap &varcoeffs)
SpatialDomains::GeomFactorsUniquePtr m_geomFactors
Definition Expansion.h:307
virtual void v_GetTracePhysVals(const int trace, const StdRegions::StdExpansionSharedPtr &TraceExp, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, StdRegions::Orientation orient)
void GenGeomFactors()
Handles generation of geometry factors.
Definition Expansion.h:482
LibUtilities::NekManager< IndexMapKey, IndexMapValues, IndexMapKey::opLess > m_indexMapManager
Definition Expansion.h:303
void ComputeTraceNormal(const int id)
Definition Expansion.h:248
void SetCoeffsToOrientation(StdRegions::Orientation dir, Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition Expansion.h:186
DNekMatSharedPtr BuildTransformationMatrix(const DNekScalMatSharedPtr &r_bnd, const StdRegions::MatrixType matrixType)
Definition Expansion.cpp:99
NekDouble VectorFlux(const Array< OneD, Array< OneD, NekDouble > > &vec)
Calculation and storage of geometric factors associated with the mapping from StdRegions reference el...
Definition GeomFactors.h:68
Base class for shape geometry information.
Definition Geometry.h:84
int GetCoordim() const
Return the coordinate dimension of this object (i.e. the dimension of the space in which this object ...
Definition Geometry.h:277
GeomFactorsUniquePtr GenGeomFactors(LibUtilities::PointsKeyVector &keyTgt)
Used by Expansion to generate associated GeomFactors.
Definition Geometry.h:430
The base class for all shapes.
const LibUtilities::PointsKeyVector GetPointsKeys() const
int GetNtraces() const
Returns the number of trace elements connected to this element.
std::vector< BasisKey > BasisKeyVector
Name for a vector of BasisKeys.
std::vector< PointsKey > PointsKeyVector
Definition Points.h:313
std::shared_ptr< Expansion > ExpansionSharedPtr
Definition Expansion.h:66
std::shared_ptr< IndexMapValues > IndexMapValuesSharedPtr
std::weak_ptr< Expansion > ExpansionWeakPtr
Definition Expansion.h:67
void GetTraceQuadRange(const LibUtilities::ShapeType shapeType, const LibUtilities::BasisKeyVector &bkeys, int traceid, std::vector< int > &q_begin, std::vector< int > &q_end)
Array< OneD, Array< OneD, NekDouble > > NormalVector
Definition Expansion.h:53
std::vector< ExpansionSharedPtr > ExpansionVector
Definition Expansion.h:68
std::map< MetricType, Array< OneD, NekDouble > > MetricMap
Definition Expansion.h:69
unique_ptr_objpool< GeomFactors > GeomFactorsUniquePtr
Definition Geometry.h:62
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
std::map< ConstFactorType, NekDouble > ConstFactorMap
static ConstFactorMap NullConstFactorMap
static VarCoeffMap NullVarCoeffMap
std::map< StdRegions::VarCoeffType, VarCoeffEntry > VarCoeffMap
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
std::shared_ptr< DNekMat > DNekMatSharedPtr