Nektar++
HexExp.h
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // File: HexExp.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 routines for Hex expansion
32 //
33 ///////////////////////////////////////////////////////////////////////////////
34 
35 #ifndef HEXEXP_H
36 #define HEXEXP_H
37 
38 #include <LibUtilities/BasicUtils/NekManager.hpp> // for NekManager
39 
42 #include <LocalRegions/MatrixKey.h>
43 #include <SpatialDomains/HexGeom.h>
44 #include <StdRegions/StdHexExp.h>
45 
46 namespace Nektar
47 {
48 namespace LocalRegions
49 {
50 class HexExp : virtual public StdRegions::StdHexExp, virtual public Expansion3D
51 {
52 public:
54  const LibUtilities::BasisKey &Bb,
55  const LibUtilities::BasisKey &Bc,
57 
59 
60  LOCAL_REGIONS_EXPORT virtual ~HexExp() override = default;
61 
62 protected:
63  //------------------------------
64  // Integration Method
65  //------------------------------
67  const Array<OneD, const NekDouble> &inarray) override;
68 
69  //-----------------------------
70  // Differentiation Methods
71  //-----------------------------
72  LOCAL_REGIONS_EXPORT virtual void v_PhysDeriv(
73  const Array<OneD, const NekDouble> &inarray,
75  Array<OneD, NekDouble> &out_d2) override;
76 
77  LOCAL_REGIONS_EXPORT virtual void v_PhysDeriv(
78  const int dir, const Array<OneD, const NekDouble> &inarray,
79  Array<OneD, NekDouble> &outarray) override;
80 
82  const Array<OneD, const NekDouble> &inarray,
83  const Array<OneD, const NekDouble> &direction,
84  Array<OneD, NekDouble> &out) override;
85 
86  //---------------------------------------
87  // Transforms
88  //---------------------------------------
89  LOCAL_REGIONS_EXPORT virtual void v_FwdTrans(
90  const Array<OneD, const NekDouble> &inarray,
91  Array<OneD, NekDouble> &outarray) override;
92 
93  //---------------------------------------
94  // Inner product functions
95  //---------------------------------------
97  const Array<OneD, const NekDouble> &inarray,
98  Array<OneD, NekDouble> &outarray) override;
99 
101  const Array<OneD, const NekDouble> &inarray,
102  Array<OneD, NekDouble> &outarray,
103  bool multiplybyweights = true) override;
104 
106  const int dir, const Array<OneD, const NekDouble> &inarray,
107  Array<OneD, NekDouble> &outarray) override;
108 
110  const int dir, const Array<OneD, const NekDouble> &inarray,
111  Array<OneD, NekDouble> &outarray) override;
112 
114  const int dir, const Array<OneD, const NekDouble> &inarray,
115  Array<OneD, Array<OneD, NekDouble>> &outarray) override;
116 
118  const Array<OneD, const NekDouble> &direction,
119  const Array<OneD, const NekDouble> &inarray,
120  Array<OneD, NekDouble> &outarray) override
121  {
122  IProductWRTDirectionalDerivBase_SumFac(direction, inarray, outarray);
123  }
124 
126  const Array<OneD, const NekDouble> &direction,
127  const Array<OneD, const NekDouble> &inarray,
128  Array<OneD, NekDouble> &outarray) override;
129 
130  //---------------------------------------
131  // Evaluation functions
132  //---------------------------------------
134  const Array<OneD, const NekDouble> &Lcoord,
135  const Array<OneD, const NekDouble> &physvals) override;
136 
138  const Array<OneD, const NekDouble> &coords,
139  const Array<OneD, const NekDouble> &physvals) override;
140 
142  const Array<OneD, NekDouble> &coord,
143  const Array<OneD, const NekDouble> &inarray,
144  std::array<NekDouble, 3> &firstOrderDerivs) override;
145 
146  LOCAL_REGIONS_EXPORT virtual void v_GetCoord(
147  const Array<OneD, const NekDouble> &Lcoords,
148  Array<OneD, NekDouble> &coords) override;
149 
150  LOCAL_REGIONS_EXPORT virtual void v_GetCoords(
151  Array<OneD, NekDouble> &coords_1, Array<OneD, NekDouble> &coords_2,
152  Array<OneD, NekDouble> &coords_3) override;
153 
154  //---------------------------------------
155  // Helper functions
156  //---------------------------------------
158  const override;
159 
161  void) const override;
162 
164  void) const override;
165 
167  const NekDouble *data, const std::vector<unsigned int> &nummodes,
168  const int mode_offset, NekDouble *coeffs,
169  std::vector<LibUtilities::BasisType> &fromType) override;
170 
172  const int face, Array<OneD, int> &outarray) override;
173 
174  LOCAL_REGIONS_EXPORT void v_ComputeTraceNormal(const int face) override;
175 
176  //---------------------------------------
177  // Operator creation functions
178  //---------------------------------------
180  const Array<OneD, const NekDouble> &inarray,
181  Array<OneD, NekDouble> &outarray,
182  const StdRegions::StdMatrixKey &mkey) override;
183 
185  const Array<OneD, const NekDouble> &inarray,
186  Array<OneD, NekDouble> &outarray,
187  const StdRegions::StdMatrixKey &mkey) override;
188 
190  const int k1, const int k2, const Array<OneD, const NekDouble> &inarray,
191  Array<OneD, NekDouble> &outarray,
192  const StdRegions::StdMatrixKey &mkey) override;
193 
195  const int i, const Array<OneD, const NekDouble> &inarray,
196  Array<OneD, NekDouble> &outarray,
197  const StdRegions::StdMatrixKey &mkey) override;
198 
200  const Array<OneD, const NekDouble> &inarray,
201  Array<OneD, NekDouble> &outarray,
202  const StdRegions::StdMatrixKey &mkey) override;
203 
205  const Array<OneD, const NekDouble> &inarray,
206  Array<OneD, NekDouble> &outarray,
207  const StdRegions::StdMatrixKey &mkey) override;
208 
210  const Array<OneD, const NekDouble> &inarray,
211  Array<OneD, NekDouble> &outarray,
212  const StdRegions::StdMatrixKey &mkey) override;
213 
215  int numMin, const Array<OneD, const NekDouble> &inarray,
216  Array<OneD, NekDouble> &outarray) override;
217 
219  Array<OneD, NekDouble> &array,
220  const StdRegions::StdMatrixKey &mkey) override;
221 
222  //---------------------------------------
223  // Matrix creation functions
224  //---------------------------------------
226  const StdRegions::StdMatrixKey &mkey) override;
227 
229  const StdRegions::StdMatrixKey &mkey) override;
230 
232  const MatrixKey &mkey) override;
233 
234  LOCAL_REGIONS_EXPORT void v_DropLocMatrix(const MatrixKey &mkey) override;
235 
237  const MatrixKey &mkey) override;
238 
240  const MatrixKey &mkey) override;
241 
242  LOCAL_REGIONS_EXPORT virtual void v_ComputeLaplacianMetric() override;
243 
244 private:
249 
251  const Array<OneD, const NekDouble> &inarray,
252  Array<OneD, NekDouble> &outarray, Array<OneD, NekDouble> &wsp) override;
253 
254  virtual void v_NormalTraceDerivFactors(
255  Array<OneD, Array<OneD, NekDouble>> &factors,
256  Array<OneD, Array<OneD, NekDouble>> &d0factors,
257  Array<OneD, Array<OneD, NekDouble>> &d1factors) override;
258 };
259 
260 typedef std::shared_ptr<HexExp> HexExpSharedPtr;
261 typedef std::vector<HexExpSharedPtr> HexExpVector;
262 } // namespace LocalRegions
263 } // namespace Nektar
264 
265 #endif // HEX_EXP_H
#define LOCAL_REGIONS_EXPORT
#define STD_REGIONS_EXPORT
Describes the specification for a Basis.
Definition: Basis.h:50
virtual void v_WeakDirectionalDerivMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
Definition: HexExp.cpp:1181
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray) override
Integrate the physical point list inarray over region.
Definition: HexExp.cpp:103
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3) override
Definition: HexExp.cpp:647
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
Definition: HexExp.h:246
virtual void v_AlignVectorToCollapsedDir(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray) override
Definition: HexExp.cpp:474
virtual void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
Definition: HexExp.cpp:1151
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
Definition: HexExp.cpp:1158
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) override
Definition: HexExp.cpp:1301
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey) override
Definition: HexExp.cpp:1323
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
Definition: HexExp.h:248
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
Definition: HexExp.cpp:1195
void v_DropLocStaticCondMatrix(const MatrixKey &mkey) override
Definition: HexExp.cpp:1350
virtual DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey) override
Definition: HexExp.cpp:1335
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true) override
Calculate the inner product of inarray with respect to the given basis B = base0 * base1 * base2.
Definition: HexExp.cpp:372
virtual 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...
Definition: HexExp.cpp:299
virtual void v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Calculates the inner product .
Definition: HexExp.cpp:429
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdRegions::StdMatrixKey &mkey) override
Definition: HexExp.cpp:1271
void v_ComputeTraceNormal(const int face) override
Definition: HexExp.cpp:882
HexExp(const LibUtilities::BasisKey &Ba, const LibUtilities::BasisKey &Bb, const LibUtilities::BasisKey &Bc, const SpatialDomains::HexGeomSharedPtr &geom)
Constructor using BasisKey class for quadrature points and order definition.
Definition: HexExp.cpp:59
virtual void v_ComputeLaplacianMetric() override
Definition: HexExp.cpp:1428
virtual void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType) override
Definition: HexExp.cpp:664
virtual ~HexExp() override=default
virtual void v_LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp) override
Definition: HexExp.cpp:1355
virtual void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2) override
Calculate the derivative of the physical points.
Definition: HexExp.cpp:144
void v_DropLocMatrix(const MatrixKey &mkey) override
Definition: HexExp.cpp:1340
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: HexExp.cpp:402
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords) override
Retrieves the physical coordinates of a given set of reference coordinates.
Definition: HexExp.cpp:630
virtual NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &physvals) override
This function evaluates the expansion at a single (arbitrary) point of the domain.
Definition: HexExp.cpp:583
virtual void v_IProductWRTDirectionalDerivBase_SumFac(const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: HexExp.cpp:516
virtual void v_PhysDirectionalDeriv(const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &direction, Array< OneD, NekDouble > &out) override
Physical derivative along a direction vector.
Definition: HexExp.cpp:257
virtual void v_NormalTraceDerivFactors(Array< OneD, Array< OneD, NekDouble >> &factors, Array< OneD, Array< OneD, NekDouble >> &d0factors, Array< OneD, Array< OneD, NekDouble >> &d1factors) override
: This method gets all of the factors which are required as part of the Gradient Jump Penalty stabili...
Definition: HexExp.cpp:1470
virtual NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals) override
Definition: HexExp.cpp:575
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey) override
Definition: HexExp.cpp:1345
virtual void v_GetTracePhysMap(const int face, Array< OneD, int > &outarray) override
Definition: HexExp.cpp:767
virtual LibUtilities::ShapeType v_DetShapeType() const override
Return the region shape using the enum-list of ShapeType.
Definition: HexExp.cpp:659
virtual void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: HexExp.cpp:1213
virtual void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
Definition: HexExp.cpp:1173
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const override
Definition: HexExp.cpp:603
virtual void v_IProductWRTDirectionalDerivBase(const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: HexExp.h:117
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const override
Definition: HexExp.cpp:610
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Calculate the inner product of inarray with respect to the elements basis.
Definition: HexExp.cpp:334
virtual void v_MassLevelCurvatureMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
Definition: HexExp.cpp:1188
void IProductWRTDirectionalDerivBase_SumFac(const Array< OneD, const NekDouble > &direction, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Class representing a hexehedral element in reference space.
Definition: StdHexExp.h:48
std::vector< HexExpSharedPtr > HexExpVector
Definition: HexExp.h:261
std::shared_ptr< HexExp > HexExpSharedPtr
Definition: HexExp.h:260
std::shared_ptr< HexGeom > HexGeomSharedPtr
Definition: HexGeom.h:87
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
The above copyright notice and this permission notice shall be included.
Definition: CoupledSolver.h:2
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
Definition: NekTypeDefs.hpp:79
std::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:75
double NekDouble