Nektar++
StdHexExp.h
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // File StdHexExp.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 hexahedron routines.
32 //
33 ///////////////////////////////////////////////////////////////////////////////
34 
35 #ifndef NEKTAR_LIBRARY_STDREGIONS_STDHEXEXP_H
36 #define NEKTAR_LIBRARY_STDREGIONS_STDHEXEXP_H
37 
38 //#include <StdRegions/StdRegions.hpp>
41 
42 namespace Nektar
43 {
44  namespace StdRegions
45  {
46  /// Class representing a hexehedral element in reference space.
47  class StdHexExp: virtual public StdExpansion3D
48  {
49 
50  public:
53  const LibUtilities::BasisKey &Ba,
54  const LibUtilities::BasisKey &Bb,
55  const LibUtilities::BasisKey &Bc);
58 
59 
60  protected:
61  //----------------------------
62  // Differentiation Methods
63  //----------------------------
64  STD_REGIONS_EXPORT virtual void v_PhysDeriv(
65  const Array<OneD, const NekDouble>& inarray,
66  Array<OneD, NekDouble> &out_d0,
67  Array<OneD, NekDouble> &out_d1,
68  Array<OneD, NekDouble> &out_d2);
69  STD_REGIONS_EXPORT virtual void v_PhysDeriv(
70  const int dir,
71  const Array<OneD, const NekDouble>& inarray,
72  Array<OneD, NekDouble>& outarray);
74  const Array<OneD, const NekDouble>& inarray,
75  Array<OneD, NekDouble> &out_d0,
76  Array<OneD, NekDouble> &out_d1,
77  Array<OneD, NekDouble> &out_d2);
79  const int dir,
80  const Array<OneD, const NekDouble>& inarray,
81  Array<OneD, NekDouble>& outarray);
82 
83  //---------------------------------------
84  // Transforms
85  //---------------------------------------
86  STD_REGIONS_EXPORT virtual void v_BwdTrans(
87  const Array<OneD, const NekDouble>& inarray,
88  Array<OneD, NekDouble> &outarray);
89 
91  const Array<OneD, const NekDouble>& inarray,
92  Array<OneD, NekDouble> &outarray);
93 
95  const Array<OneD, const NekDouble>& base0,
96  const Array<OneD, const NekDouble>& base1,
97  const Array<OneD, const NekDouble>& base2,
98  const Array<OneD, const NekDouble>& inarray,
99  Array<OneD, NekDouble> &outarray,
101  bool doCheckCollDir0,
102  bool doCheckCollDir1,
103  bool doCheckCollDir2);
104 
105  STD_REGIONS_EXPORT virtual void v_FwdTrans(
106  const Array<OneD, const NekDouble>& inarray,
107  Array<OneD, NekDouble> &outarray);
108 
109 
110  //---------------------------------------
111  // Inner product functions
112  //---------------------------------------
114  const Array<OneD, const NekDouble> &inarray,
115  Array<OneD, NekDouble> &outarray);
116 
118  const Array<OneD, const NekDouble> &inarray,
119  Array<OneD, NekDouble> &outarray);
120 
122  const Array<OneD, const NekDouble> &inarray,
123  Array<OneD, NekDouble> &outarray,
124  bool multbyweights = true);
125 
127  const Array<OneD, const NekDouble>& base0,
128  const Array<OneD, const NekDouble>& base1,
129  const Array<OneD, const NekDouble>& base2,
130  const Array<OneD, const NekDouble>& inarray,
131  Array<OneD, NekDouble> &outarray,
133  bool doCheckCollDir0,
134  bool doCheckCollDir1,
135  bool doCheckCollDir2);
136 
138  const int dir,
139  const Array<OneD, const NekDouble>& inarray,
140  Array<OneD, NekDouble> & outarray);
141 
143  const int dir,
144  const Array<OneD, const NekDouble>& inarray,
145  Array<OneD, NekDouble> & outarray);
146 
148  const int dir,
149  const Array<OneD, const NekDouble>& inarray,
150  Array<OneD, NekDouble> & outarray);
151 
152  //---------------------------------------
153  // Evaluation functions
154  //---------------------------------------
159  const Array<OneD, const NekDouble>& eta,
161  STD_REGIONS_EXPORT virtual void v_FillMode(
162  const int mode,
163  Array<OneD, NekDouble> &outarray);
165  const Array<OneD, const NekDouble>& coords,
166  int mode) final;
167 
168  //---------------------------
169  // Helper functions
170  //---------------------------
171  STD_REGIONS_EXPORT virtual int v_GetNverts() const;
172  STD_REGIONS_EXPORT virtual int v_GetNedges() const;
173  STD_REGIONS_EXPORT virtual int v_GetNtraces() const;
175  STD_REGIONS_EXPORT virtual int v_NumBndryCoeffs() const;
176  STD_REGIONS_EXPORT virtual int v_NumDGBndryCoeffs() const;
177  STD_REGIONS_EXPORT virtual int v_GetTraceNcoeffs(const int i) const;
178  STD_REGIONS_EXPORT virtual int v_GetTotalTraceIntNcoeffs() const;
179  STD_REGIONS_EXPORT virtual int v_GetTraceIntNcoeffs(const int i) const;
180  STD_REGIONS_EXPORT virtual int v_GetTraceNumPoints(const int i) const;
181 
183  const int i, const int j) const;
185  const std::vector<unsigned int> &nummodes,
186  int &modes_offset);
188  v_GetTraceBasisKey(const int i, const int k) const;
190  STD_REGIONS_EXPORT virtual void v_GetCoords(
191  Array<OneD, NekDouble> &coords_x,
192  Array<OneD, NekDouble> &coords_y,
193  Array<OneD, NekDouble> &coords_z);
195  const int fid,
196  int &numModes0,
197  int &numModes1,
199 
200  STD_REGIONS_EXPORT virtual int v_GetEdgeNcoeffs(const int i) const;
201 
202 
203  //--------------------------
204  // Mappings
205  //--------------------------
207  int localVertexId,
208  bool useCoeffPacking = false);
210  Array<OneD, unsigned int> &outarray);
212  Array<OneD, unsigned int> &outarray);
214  const int fid,
215  Array<OneD, unsigned int> &maparray,
216  Array<OneD, int> &signarray,
217  Orientation faceOrient,
218  int P,
219  int Q);
221  const int tid,
222  Array<OneD, unsigned int> &maparray,
223  Array<OneD, int> &signarray,
224  const Orientation traceOrient = eDir1FwdDir1_Dir2FwdDir2);
225 
227  const int tid,
228  Array<OneD, unsigned int> &maparray,
229  Array<OneD, int> &signarray,
230  const Orientation traceOrient = eDir1FwdDir1_Dir2FwdDir2);
231 
232 
233 
234  //---------------------------------------
235  // Wrapper functions
236  //---------------------------------------
238  const StdMatrixKey &mkey);
240  const StdMatrixKey &mkey);
241 
242 
243  //---------------------------------------
244  // Operator evaluation functions
245  //---------------------------------------
246  STD_REGIONS_EXPORT virtual void v_MassMatrixOp(
247  const Array<OneD, const NekDouble> &inarray,
248  Array<OneD,NekDouble> &outarray,
249  const StdMatrixKey &mkey);
250 
252  const Array<OneD, const NekDouble> &inarray,
253  Array<OneD,NekDouble> &outarray,
254  const StdMatrixKey &mkey);
255 
257  const int k1,
258  const int k2,
259  const Array<OneD, const NekDouble> &inarray,
260  Array<OneD,NekDouble> &outarray,
261  const StdMatrixKey &mkey);
262 
264  const int i,
265  const Array<OneD, const NekDouble> &inarray,
266  Array<OneD,NekDouble> &outarray,
267  const StdMatrixKey &mkey);
268 
270  const Array<OneD, const NekDouble> &inarray,
271  Array<OneD,NekDouble> &outarray,
272  const StdMatrixKey &mkey);
273 
275  const Array<OneD, const NekDouble> &inarray,
276  Array<OneD,NekDouble> &outarray,
277  const StdMatrixKey &mkey);
278 
280  const Array<OneD, const NekDouble>& inarray,
281  Array<OneD, NekDouble> &outarray);
282 
284  Array<OneD, NekDouble> &array,const StdMatrixKey &mkey);
285 
287  Array<OneD, NekDouble> &array,
288  const NekDouble alpha,
289  const NekDouble exponent,
290  const NekDouble cutoff);
291  };
292 
293  typedef std::shared_ptr<StdHexExp> StdHexExpSharedPtr;
294 
295  }
296 }
297 
298 #endif
#define STD_REGIONS_EXPORT
Describes the specification for a Basis.
Definition: Basis.h:50
Defines a specification for a set of points.
Definition: Points.h:60
Class representing a hexehedral element in reference space.
Definition: StdHexExp.h:48
virtual void v_IProductWRTBase_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:372
virtual void v_ExponentialFilter(Array< OneD, NekDouble > &array, const NekDouble alpha, const NekDouble exponent, const NekDouble cutoff)
Definition: StdHexExp.cpp:2496
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)
Differentiation Methods.
Definition: StdHexExp.cpp:90
virtual int v_NumBndryCoeffs() const
Definition: StdHexExp.cpp:720
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
Definition: StdHexExp.cpp:2306
virtual void v_GetTraceNumModes(const int fid, int &numModes0, int &numModes1, Orientation faceOrient=eDir1FwdDir1_Dir2FwdDir2)
Definition: StdHexExp.cpp:907
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdMatrixKey &mkey)
Definition: StdHexExp.cpp:2370
NekDouble v_PhysEvaluateBasis(const Array< OneD, const NekDouble > &coords, int mode) final
Definition: StdHexExp.cpp:670
virtual const LibUtilities::BasisKey v_GetTraceBasisKey(const int i, const int k) const
Definition: StdHexExp.cpp:852
virtual int v_GetTraceNumPoints(const int i) const
Definition: StdHexExp.cpp:803
virtual void v_LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta)
Definition: StdHexExp.cpp:604
virtual void v_FillMode(const int mode, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:624
virtual int v_GetTraceNcoeffs(const int i) const
Definition: StdHexExp.cpp:761
virtual void v_GetTraceToElementMap(const int fid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation faceOrient, int P, int Q)
Definition: StdHexExp.cpp:1248
virtual void v_BwdTrans_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:202
virtual int v_GetEdgeNcoeffs(const int i) const
Definition: StdHexExp.cpp:2239
virtual void v_GetBoundaryMap(Array< OneD, unsigned int > &outarray)
Definition: StdHexExp.cpp:1154
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multbyweights=true)
Definition: StdHexExp.cpp:386
virtual DNekMatSharedPtr v_GenMatrix(const StdMatrixKey &mkey)
Definition: StdHexExp.cpp:2257
virtual int v_GetTraceIntNcoeffs(const int i) const
Definition: StdHexExp.cpp:778
virtual void v_StdPhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
Definition: StdHexExp.cpp:136
virtual void v_GeneralMatrixOp_MatOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
Definition: StdHexExp.cpp:2315
virtual void v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:552
virtual int v_GetVertexMap(int localVertexId, bool useCoeffPacking=false)
Definition: StdHexExp.cpp:960
virtual int v_GetNverts() const
Definition: StdHexExp.cpp:699
virtual void v_GetTraceInteriorToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation traceOrient=eDir1FwdDir1_Dir2FwdDir2)
Definition: StdHexExp.cpp:1905
virtual void v_LocCollapsedToLocCoord(const Array< OneD, const NekDouble > &eta, Array< OneD, NekDouble > &xi)
Definition: StdHexExp.cpp:613
virtual LibUtilities::PointsKey v_GetTracePointsKey(const int i, const int j) const
Definition: StdHexExp.cpp:824
virtual void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
Definition: StdHexExp.cpp:2269
virtual void v_IProductWRTBase_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1, bool doCheckCollDir2)
Definition: StdHexExp.cpp:425
virtual int v_GetTotalTraceIntNcoeffs() const
Definition: StdHexExp.cpp:796
virtual int v_GetNedges() const
Definition: StdHexExp.cpp:704
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_x, Array< OneD, NekDouble > &coords_y, Array< OneD, NekDouble > &coords_z)
Definition: StdHexExp.cpp:881
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
Definition: StdHexExp.cpp:2278
virtual bool v_IsBoundaryInteriorExpansion()
Definition: StdHexExp.cpp:72
virtual void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:172
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdMatrixKey &mkey)
Definition: StdHexExp.cpp:2263
virtual void v_MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:2338
virtual void v_GetInteriorMap(Array< OneD, unsigned int > &outarray)
Definition: StdHexExp.cpp:1090
virtual int v_NumDGBndryCoeffs() const
Definition: StdHexExp.cpp:741
virtual int v_CalcNumberOfCoefficients(const std::vector< unsigned int > &nummodes, int &modes_offset)
Definition: StdHexExp.cpp:844
virtual int v_GetNtraces() const
Definition: StdHexExp.cpp:709
virtual void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:291
virtual void v_BwdTrans_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &base2, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1, bool doCheckCollDir2)
Definition: StdHexExp.cpp:228
virtual LibUtilities::ShapeType v_DetShapeType() const
Definition: StdHexExp.cpp:714
virtual void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
Definition: StdHexExp.cpp:2297
virtual void v_IProductWRTDerivBase_MatOp(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:521
virtual void v_GetEdgeInteriorToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation traceOrient=eDir1FwdDir1_Dir2FwdDir2)
Definition: StdHexExp.cpp:1608
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:512
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Definition: StdHexExp.cpp:352
std::shared_ptr< StdHexExp > StdHexExpSharedPtr
Definition: StdHexExp.h:293
The above copyright notice and this permission notice shall be included.
Definition: CoupledSolver.h:1
std::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:69
double NekDouble
P
Definition: main.py:133