Nektar++
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 
42 #include <memory>
43 #include <vector>
44 #include <map>
45 
46 namespace Nektar
47 {
48  namespace LocalRegions
49  {
50 
51  class Expansion;
52  class MatrixKey;
53 
55  {
63  };
64 
65  typedef std::shared_ptr<Expansion> ExpansionSharedPtr;
66  typedef std::weak_ptr<Expansion> ExpansionWeakPtr;
67  typedef std::vector< ExpansionSharedPtr > ExpansionVector;
68  typedef std::map<MetricType, Array<OneD, NekDouble> > MetricMap;
69 
70  class Expansion : virtual public StdRegions::StdExpansion
71  {
72  public:
74  LOCAL_REGIONS_EXPORT Expansion(const Expansion &pSrc); // copy constructor.
76 
78 
82 
84 
86 
88 
90  const DNekScalMatSharedPtr &r_bnd,
91  const StdRegions::MatrixType matrixType);
92 
94  const DNekScalMatSharedPtr &r_bnd);
96  const NekDouble *data,
97  const std::vector<unsigned int > &nummodes,
98  const int nmodes_offset,
99  NekDouble *coeffs,
100  std::vector<LibUtilities::BasisType> &fromType);
102  const int edge,
103  const std::shared_ptr<Expansion> &EdgeExp,
106  Array<OneD, NekDouble> &outarray);
108  const int edge,
109  const std::shared_ptr<Expansion> &EdgeExp,
111  Array<OneD, NekDouble> &outarray);
113  const int face,
114  const std::shared_ptr<Expansion> &FaceExp,
116  Array<OneD, NekDouble> &outarray);
118  const int dir,
119  const Array<OneD, const NekDouble>& inarray,
121  Array<OneD, Array<OneD, NekDouble> > &coeffs,
122  Array<OneD, NekDouble> &outarray);
124  const Array<OneD, Array<OneD, NekDouble > > &vec);
125 
126  protected:
129  MetricMap m_metrics;
130 
131  void ComputeLaplacianMetric();
133  void ComputeGmatcdotMF(
135  const Array<OneD, const NekDouble> &direction,
136  Array<OneD, Array<OneD, NekDouble> > &dfdir);
137 
138  virtual void v_MultiplyByQuadratureMetric(
139  const Array<OneD, const NekDouble> &inarray,
140  Array<OneD, NekDouble> &outarray);
141 
142  virtual void v_ComputeLaplacianMetric() {};
143 
144  virtual void v_GetCoords(
145  Array<OneD,NekDouble> &coords_1,
146  Array<OneD,NekDouble> &coords_2,
147  Array<OneD,NekDouble> &coords_3);
148 
150  const int dir,
151  const int shapedim,
152  const StdRegions::VarCoeffMap &varcoeffs);
153 
155  const int dir,
156  const StdRegions::VarCoeffMap &varcoeffs);
157 
159  const int dir,
160  const StdRegions::VarCoeffMap &varcoeffs);
161 
163  const LocalRegions::MatrixKey &mkey);
164 
166  const DNekScalMatSharedPtr &r_bnd,
167  const StdRegions::MatrixType matrixType);
168 
170  const DNekScalMatSharedPtr &r_bnd);
171 
172  virtual void v_ExtractDataToCoeffs(
173  const NekDouble *data,
174  const std::vector<unsigned int > &nummodes,
175  const int nmodes_offset,
176  NekDouble *coeffs,
177  std::vector<LibUtilities::BasisType> &fromType);
178  virtual void v_AddEdgeNormBoundaryInt(
179  const int edge,
180  const std::shared_ptr<Expansion> &EdgeExp,
183  Array<OneD, NekDouble> &outarray);
184  virtual void v_AddEdgeNormBoundaryInt(
185  const int edge,
186  const std::shared_ptr<Expansion> &EdgeExp,
188  Array<OneD, NekDouble> &outarray);
189  virtual void v_AddFaceNormBoundaryInt(
190  const int face,
191  const std::shared_ptr<Expansion> &FaceExp,
193  Array<OneD, NekDouble> &outarray);
194  virtual void v_DGDeriv(
195  const int dir,
196  const Array<OneD, const NekDouble>& inarray,
198  Array<OneD, Array<OneD, NekDouble> > &coeffs,
199  Array<OneD, NekDouble> &outarray);
200  virtual NekDouble v_VectorFlux(
201  const Array<OneD, Array<OneD, NekDouble > > &vec);
202 
203  private:
204 
205  };
206  } //end of namespace
207 } //end of namespace
208 
209 #endif
std::weak_ptr< Expansion > ExpansionWeakPtr
Definition: Expansion.h:66
virtual NekDouble v_VectorFlux(const Array< OneD, Array< OneD, NekDouble > > &vec)
Definition: Expansion.cpp:547
NekDouble VectorFlux(const Array< OneD, Array< OneD, NekDouble > > &vec)
Definition: Expansion.cpp:153
DNekMatSharedPtr BuildTransformationMatrix(const DNekScalMatSharedPtr &r_bnd, const StdRegions::MatrixType matrixType)
Definition: Expansion.cpp:90
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
void ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int nmodes_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
Definition: Expansion.cpp:105
SpatialDomains::GeometrySharedPtr GetGeom() const
Definition: Expansion.cpp:167
std::shared_ptr< GeomFactors > GeomFactorsSharedPtr
Pointer to a GeomFactors object.
Definition: GeomFactors.h:62
virtual void v_MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: Expansion.cpp:194
SpatialDomains::GeomFactorsSharedPtr m_metricinfo
Definition: Expansion.h:128
DNekMatSharedPtr BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
Definition: Expansion.cpp:98
std::map< ConstFactorType, NekDouble > ConstFactorMap
Definition: StdRegions.hpp:294
std::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:69
SpatialDomains::GeometrySharedPtr m_geom
Definition: Expansion.h:127
std::vector< ExpansionSharedPtr > ExpansionVector
Definition: Expansion.h:67
virtual DNekMatSharedPtr v_BuildTransformationMatrix(const DNekScalMatSharedPtr &r_bnd, const StdRegions::MatrixType matrixType)
Definition: Expansion.cpp:476
virtual DNekMatSharedPtr v_BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
Definition: Expansion.cpp:485
virtual void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int nmodes_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
Definition: Expansion.cpp:493
The base class for all shapes.
Definition: StdExpansion.h:68
Expansion(SpatialDomains::GeometrySharedPtr pGeom)
Definition: Expansion.cpp:47
virtual void v_ComputeLaplacianMetric()
Definition: Expansion.h:142
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
Definition: StdRegions.hpp:264
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
Definition: Expansion.cpp:231
std::map< MetricType, Array< OneD, NekDouble > > MetricMap
Definition: Expansion.h:68
Array< OneD, NekDouble > v_GetMFMag(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
Definition: Expansion.cpp:444
std::shared_ptr< Geometry > GeometrySharedPtr
Definition: Geometry.h:53
Array< OneD, NekDouble > v_GetMF(const int dir, const int shapedim, const StdRegions::VarCoeffMap &varcoeffs)
Definition: Expansion.cpp:347
virtual DNekScalMatSharedPtr v_GetLocMatrix(const LocalRegions::MatrixKey &mkey)
Definition: Expansion.cpp:187
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)
Definition: Expansion.cpp:143
double NekDouble
const SpatialDomains::GeomFactorsSharedPtr & GetMetricInfo() const
Definition: Expansion.cpp:181
virtual void v_AddFaceNormBoundaryInt(const int face, const std::shared_ptr< Expansion > &FaceExp, const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
Definition: Expansion.cpp:526
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)
Definition: Expansion.cpp:505
std::shared_ptr< Expansion > ExpansionSharedPtr
Definition: Expansion.h:65
Array< OneD, NekDouble > v_GetMFDiv(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
Definition: Expansion.cpp:411
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
Definition: Expansion.cpp:85
void AddFaceNormBoundaryInt(const int face, const std::shared_ptr< Expansion > &FaceExp, const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
Definition: Expansion.cpp:134
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)
Definition: Expansion.cpp:115
void ComputeGmatcdotMF(const Array< TwoD, const NekDouble > &df, const Array< OneD, const NekDouble > &direction, Array< OneD, Array< OneD, NekDouble > > &dfdir)
Definition: Expansion.cpp:312
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)
Definition: Expansion.cpp:536
#define LOCAL_REGIONS_EXPORT
static VarCoeffMap NullVarCoeffMap
Definition: StdRegions.hpp:265
static ConstFactorMap NullConstFactorMap
Definition: StdRegions.hpp:295