Nektar++
StdTetExp.h
Go to the documentation of this file.
1///////////////////////////////////////////////////////////////////////////////
2//
3// File: StdTetExp.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 field for tetrahedral routines built upon
32// StdExpansion3D
33//
34///////////////////////////////////////////////////////////////////////////////
35
36#ifndef NEKTAR_LIB_STDREGIONS_STDTETEXP_H
37#define NEKTAR_LIB_STDREGIONS_STDTETEXP_H
38
42
43namespace Nektar
44{
45namespace StdRegions
46{
47class StdMatrixKey;
48
49class StdTetExp : virtual public StdExpansion3D
50{
51
52public:
55 const LibUtilities::BasisKey &Bb,
56 const LibUtilities::BasisKey &Bc);
58 const LibUtilities::BasisKey &Bb,
59 const LibUtilities::BasisKey &Bc,
60 NekDouble *coeffs, NekDouble *phys);
62 STD_REGIONS_EXPORT virtual ~StdTetExp() override;
63
65 {
67 }
68
69 /** \brief Single Point Evaluation */
72 const Array<OneD, const NekDouble> &physvals);
73
74protected:
75 //----------------------------
76 // Differentiation Methods
77 //----------------------------
79 const Array<OneD, const NekDouble> &inarray,
81 Array<OneD, NekDouble> &out_dz) override;
83 const int dir, const Array<OneD, const NekDouble> &inarray,
84 Array<OneD, NekDouble> &outarray) override;
86 const Array<OneD, const NekDouble> &inarray,
88 Array<OneD, NekDouble> &out_d2) override;
90 const int dir, const Array<OneD, const NekDouble> &inarray,
91 Array<OneD, NekDouble> &outarray) override;
92
93 //---------------------------------------
94 // Transforms
95 //---------------------------------------
97 const Array<OneD, const NekDouble> &inarray,
98 Array<OneD, NekDouble> &outarray) override;
100 const Array<OneD, const NekDouble> &inarray,
101 Array<OneD, NekDouble> &outarray) override;
103 const Array<OneD, const NekDouble> &base0,
104 const Array<OneD, const NekDouble> &base1,
105 const Array<OneD, const NekDouble> &base2,
106 const Array<OneD, const NekDouble> &inarray,
108 bool doCheckCollDir0, bool doCheckCollDir1,
109 bool doCheckCollDir2) override;
110 STD_REGIONS_EXPORT virtual void v_FwdTrans(
111 const Array<OneD, const NekDouble> &inarray,
112 Array<OneD, NekDouble> &outarray) override;
113
114 //---------------------------------------
115 // Inner product functions
116 //---------------------------------------
118 const Array<OneD, const NekDouble> &inarray,
119 Array<OneD, NekDouble> &outarray) override;
121 const Array<OneD, const NekDouble> &inarray,
122 Array<OneD, NekDouble> &outarray,
123 bool multiplybyweights = true) override;
125 const Array<OneD, const NekDouble> &base0,
126 const Array<OneD, const NekDouble> &base1,
127 const Array<OneD, const NekDouble> &base2,
128 const Array<OneD, const NekDouble> &inarray,
130 bool doCheckCollDir0, bool doCheckCollDir1,
131 bool doCheckCollDir2) override;
133 const int dir, const Array<OneD, const NekDouble> &inarray,
134 Array<OneD, NekDouble> &outarray) override;
136 const int dir, const Array<OneD, const NekDouble> &inarray,
137 Array<OneD, NekDouble> &outarray) override;
138
139 //---------------------------------------
140 // Evaluation functions
141 //---------------------------------------
144 Array<OneD, NekDouble> &eta) override;
147 Array<OneD, NekDouble> &xi) override;
148 STD_REGIONS_EXPORT virtual void v_GetCoords(
150 Array<OneD, NekDouble> &coords_z) override;
151 STD_REGIONS_EXPORT virtual void v_FillMode(
152 const int mode, Array<OneD, NekDouble> &outarray) override;
153
155 const Array<OneD, const NekDouble> &coords, int mode) final override;
156
159 const Array<OneD, const NekDouble> &inarray,
160 std::array<NekDouble, 3> &firstOrderDerivs) override;
161
163 const int fid, int &numModes0, int &numModes1,
164 Orientation traceOrient = eDir1FwdDir1_Dir2FwdDir2) override;
165
166 //---------------------------
167 // Helper functions
168 //---------------------------
169 STD_REGIONS_EXPORT virtual int v_GetNverts() const override;
170 STD_REGIONS_EXPORT virtual int v_GetNedges() const override;
171 STD_REGIONS_EXPORT virtual int v_GetNtraces() const override;
173 const override;
174 STD_REGIONS_EXPORT virtual int v_NumBndryCoeffs() const override;
175 STD_REGIONS_EXPORT virtual int v_NumDGBndryCoeffs() const override;
177 const int i) const override;
179 const int i) const override;
181 const int i) const override;
182 STD_REGIONS_EXPORT virtual int v_GetEdgeNcoeffs(const int i) const override;
184 const int i, const int j) const override;
186 const std::vector<unsigned int> &nummodes, int &modes_offset) override;
188 const int i, const int k) const override;
190 const override;
191
192 //--------------------------
193 // Mappings
194 //--------------------------
196 int localVertexId, bool useCoeffPacking = false) override;
198 Array<OneD, unsigned int> &outarray) override;
200 Array<OneD, unsigned int> &outarray) override;
202 const unsigned int fid, Array<OneD, unsigned int> &maparray) override;
203
205 const unsigned int tid, Array<OneD, unsigned int> &maparray,
206 Array<OneD, int> &signarray, Orientation traceOrient = eForwards,
207 int P = -1, int Q = -1) override;
208
210 const int tid, Array<OneD, unsigned int> &maparray,
211 Array<OneD, int> &signarray,
212 const Orientation traceOrient = eDir1FwdDir1_Dir2FwdDir2) override;
213
215 const int tid, Array<OneD, unsigned int> &maparray,
216 Array<OneD, int> &signarray,
217 const Orientation traceOrient = eDir1FwdDir1_Dir2FwdDir2) override;
218
219 //---------------------------------------
220 // Wrapper functions
221 //---------------------------------------
223 const StdMatrixKey &mkey) override;
225 const StdMatrixKey &mkey) override;
226
228 const Array<OneD, const NekDouble> &inarray,
229 Array<OneD, NekDouble> &outarray) override;
230
232 Array<OneD, NekDouble> &array, const StdMatrixKey &mkey) override;
233
234 //---------------------------------------
235 // Method for applying sensors
236 //---------------------------------------
238 int numMin, const Array<OneD, const NekDouble> &inarray,
239 Array<OneD, NekDouble> &outarray) override;
240
241 //---------------------------------------
242 // Output interpolation functions
243 //---------------------------------------
244
246 Array<OneD, int> &conn, bool standard = true) override;
247
248private:
249 //---------------------------------------
250 // Private helper functions
251 //---------------------------------------
252 STD_REGIONS_EXPORT int GetMode(const int i, const int j, const int k);
253};
254
255typedef std::shared_ptr<StdTetExp> StdTetExpSharedPtr;
256} // namespace StdRegions
257} // namespace Nektar
258
259#endif // STDTETEXP_H
#define STD_REGIONS_EXPORT
Describes the specification for a Basis.
Definition: Basis.h:47
Defines a specification for a set of points.
Definition: Points.h:55
virtual int v_GetNtraces() const override
Definition: StdTetExp.cpp:984
virtual int v_GetTraceNcoeffs(const int i) const override
Definition: StdTetExp.cpp:1034
void v_GetTraceNumModes(const int fid, int &numModes0, int &numModes1, Orientation traceOrient=eDir1FwdDir1_Dir2FwdDir2) override
Definition: StdTetExp.cpp:937
NekDouble v_PhysEvaluate(const Array< OneD, NekDouble > &coord, const Array< OneD, const NekDouble > &inarray, std::array< NekDouble, 3 > &firstOrderDerivs) override
Definition: StdTetExp.cpp:873
virtual int v_GetTraceIntNcoeffs(const int i) const override
Definition: StdTetExp.cpp:1060
virtual void v_FillMode(const int mode, Array< OneD, NekDouble > &outarray) override
Definition: StdTetExp.cpp:824
virtual void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: StdTetExp.cpp:432
virtual void v_GetInteriorMap(Array< OneD, unsigned int > &outarray) override
Definition: StdTetExp.cpp:1301
virtual int v_GetNedges() const override
Definition: StdTetExp.cpp:979
int GetMode(const int i, const int j, const int k)
Compute the mode number in the expansion for a particular tensorial combination.
Definition: StdTetExp.cpp:1926
virtual int v_GetEdgeNcoeffs(const int i) const override
Definition: StdTetExp.cpp:1099
virtual bool v_IsBoundaryInteriorExpansion() const override
Definition: StdTetExp.cpp:1210
virtual LibUtilities::PointsKey v_GetTracePointsKey(const int i, const int j) const override
Definition: StdTetExp.cpp:1120
virtual const LibUtilities::BasisKey v_GetTraceBasisKey(const int i, const int k) const override
Definition: StdTetExp.cpp:1151
void v_GetEdgeInteriorToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation traceOrient=eDir1FwdDir1_Dir2FwdDir2) override
Definition: StdTetExp.cpp:1602
void v_MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: StdTetExp.cpp:1958
virtual int v_GetTraceNumPoints(const int i) const override
Definition: StdTetExp.cpp:1081
NekDouble v_PhysEvaluateBasis(const Array< OneD, const NekDouble > &coords, int mode) final override
Definition: StdTetExp.cpp:831
virtual void v_IProductWRTDerivBase_SumFac(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: StdTetExp.cpp:633
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) override
Definition: StdTetExp.cpp:338
virtual void v_SVVLaplacianFilter(Array< OneD, NekDouble > &array, const StdMatrixKey &mkey) override
Definition: StdTetExp.cpp:2039
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdMatrixKey &mkey) override
Definition: StdTetExp.cpp:1896
virtual void v_LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta) override
Definition: StdTetExp.cpp:784
virtual void v_GetBoundaryMap(Array< OneD, unsigned int > &outarray) override
Definition: StdTetExp.cpp:1340
virtual void v_GetSimplexEquiSpacedConnectivity(Array< OneD, int > &conn, bool standard=true) override
Definition: StdTetExp.cpp:2241
void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: StdTetExp.cpp:482
virtual int v_NumBndryCoeffs() const override
Definition: StdTetExp.cpp:994
virtual void v_IProductWRTBase_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, bool multiplybyweights=true) override
Definition: StdTetExp.cpp:509
void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: StdTetExp.cpp:282
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: StdTetExp.cpp:620
NekDouble PhysEvaluate3D(const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &physvals)
Single Point Evaluation.
virtual ~StdTetExp() override
Definition: StdTetExp.cpp:75
StdTetExp(const LibUtilities::BasisKey &Ba, const LibUtilities::BasisKey &Bb, const LibUtilities::BasisKey &Bc, NekDouble *coeffs, NekDouble *phys)
void v_ReduceOrderCoeffs(int numMin, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: StdTetExp.cpp:2181
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) override
Definition: StdTetExp.cpp:242
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_x, Array< OneD, NekDouble > &coords_y, Array< OneD, NekDouble > &coords_z) override
Definition: StdTetExp.cpp:1180
virtual void v_GetTraceCoeffMap(const unsigned int fid, Array< OneD, unsigned int > &maparray) override
Definition: StdTetExp.cpp:1395
void v_GetTraceInteriorToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation traceOrient=eDir1FwdDir1_Dir2FwdDir2) override
Definition: StdTetExp.cpp:1717
virtual void v_BwdTrans_SumFac(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition: StdTetExp.cpp:309
void v_GetElmtTraceToTraceMap(const unsigned int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation traceOrient=eForwards, int P=-1, int Q=-1) override
Definition: StdTetExp.cpp:1487
virtual int v_GetVertexMap(int localVertexId, bool useCoeffPacking=false) override
Definition: StdTetExp.cpp:1220
virtual int v_GetNverts() const override
Definition: StdTetExp.cpp:974
void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_dx, Array< OneD, NekDouble > &out_dy, Array< OneD, NekDouble > &out_dz) override
Calculate the derivative of the physical points.
Definition: StdTetExp.cpp:99
virtual LibUtilities::ShapeType v_DetShapeType() const override
Definition: StdTetExp.cpp:989
virtual void v_LocCollapsedToLocCoord(const Array< OneD, const NekDouble > &eta, Array< OneD, NekDouble > &xi) override
Definition: StdTetExp.cpp:816
LibUtilities::ShapeType DetShapeType() const
Definition: StdTetExp.h:64
virtual int v_NumDGBndryCoeffs() const override
Definition: StdTetExp.cpp:1013
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) override
Definition: StdTetExp.cpp:539
virtual int v_CalcNumberOfCoefficients(const std::vector< unsigned int > &nummodes, int &modes_offset) override
Definition: StdTetExp.cpp:1140
virtual DNekMatSharedPtr v_GenMatrix(const StdMatrixKey &mkey) override
Definition: StdTetExp.cpp:1808
@ P
Monomial polynomials .
Definition: BasisType.h:64
std::shared_ptr< StdTetExp > StdTetExpSharedPtr
Definition: StdTetExp.h:255
The above copyright notice and this permission notice shall be included.
Definition: CoupledSolver.h:2
std::shared_ptr< DNekMat > DNekMatSharedPtr
Definition: NekTypeDefs.hpp:75
double NekDouble