Nektar++
Loading...
Searching...
No Matches
NodalTriExp.cpp
Go to the documentation of this file.
1///////////////////////////////////////////////////////////////////////////////
2//
3// File: NodalTriExp.cpp
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: NodalTriExp routines
32//
33///////////////////////////////////////////////////////////////////////////////
34
37
38using namespace std;
39
41{
43 const LibUtilities::BasisKey &Bb,
44 const LibUtilities::PointsType Ntype,
46 : StdExpansion(LibUtilities::StdTriData::getNumberOfCoefficients(
47 Ba.GetNumModes(), (Bb.GetNumModes())),
48 2, Ba, Bb),
49 StdExpansion2D(LibUtilities::StdTriData::getNumberOfCoefficients(
50 Ba.GetNumModes(), (Bb.GetNumModes())),
51 Ba, Bb),
52 StdNodalTriExp(Ba, Bb, Ntype), Expansion(geom), Expansion2D(geom),
53 TriExp(Ba, Bb, geom),
54 m_matrixManager(
55 std::bind(&Expansion2D::CreateMatrix, this, std::placeholders::_1)),
56 m_staticCondMatrixManager(std::bind(&Expansion::CreateStaticCondMatrix,
57 this, std::placeholders::_1))
58{
59}
60
62 : StdExpansion(T), StdExpansion2D(T), StdTriExp(T), StdNodalTriExp(T),
63 Expansion(T), Expansion2D(T), TriExp(T),
64 m_matrixManager(T.m_matrixManager),
65 m_staticCondMatrixManager(T.m_staticCondMatrixManager)
66{
67}
68
70 Array<OneD, NekDouble> &outarray)
71{
73 v_NodalToModal(inarray, tmp);
74 StdTriExp::v_BwdTrans(tmp, outarray);
75}
76
78 Array<OneD, NekDouble> &outarray)
79{
80 TriExp::v_IProductWRTBase(inarray, outarray);
81 NodalToModalTranspose(outarray, outarray);
82}
83
85 const int dir, const Array<OneD, const NekDouble> &inarray,
86 Array<OneD, NekDouble> &outarray)
87{
88 TriExp::v_IProductWRTDerivBase(dir, inarray, outarray);
89 NodalToModalTranspose(outarray, outarray);
90}
91
99
110
112 const NekDouble *data, const std::vector<unsigned int> &nummodes,
113 const int mode_offset, NekDouble *coeffs,
114 [[maybe_unused]] std::vector<LibUtilities::BasisType> &fromType)
115{
117 Expansion::ExtractDataToCoeffs(data, nummodes, mode_offset, &modes[0],
118 fromType);
119
121 ModalToNodal(modes, nodes);
122}
123
125 const StdRegions::StdMatrixKey &mkey)
126{
127 LibUtilities::BasisKey bkey0 = m_base[0]->GetBasisKey();
128 LibUtilities::BasisKey bkey1 = m_base[1]->GetBasisKey();
132
133 return tmp->GetStdMatrix(mkey);
134}
135
140
146
148{
149 m_matrixManager.DeleteObject(mkey);
150}
151
153 Array<OneD, NekDouble> &outarray,
154 const StdRegions::StdMatrixKey &mkey)
155{
156 StdExpansion::MassMatrixOp_MatFree(inarray, outarray, mkey);
157}
158
160 const Array<OneD, const NekDouble> &inarray,
162{
163 StdExpansion::LaplacianMatrixOp_MatFree_GenericImpl(inarray, outarray,
164 mkey);
165}
166
168 const int k1, const int k2, const Array<OneD, const NekDouble> &inarray,
170{
171 StdExpansion::LaplacianMatrixOp_MatFree(k1, k2, inarray, outarray, mkey);
172}
173
175 const int i, const Array<OneD, const NekDouble> &inarray,
177{
178 StdExpansion::WeakDerivMatrixOp_MatFree(i, inarray, outarray, mkey);
179}
180
182 const Array<OneD, const NekDouble> &inarray,
184{
185 StdExpansion::HelmholtzMatrixOp_MatFree_GenericImpl(inarray, outarray,
186 mkey);
187}
188
189} // namespace Nektar::LocalRegions
Describes the specification for a Basis.
Definition Basis.h:45
PointsType GetPointsType() const
Definition Points.h:90
void ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int nmodes_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Calculates the inner product of a given function f with the different modes of the expansion.
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
void v_MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType) override
StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const override
void v_DropLocMatrix(const MatrixKey &mkey) override
NodalTriExp(const LibUtilities::BasisKey &Ba, const LibUtilities::BasisKey &Bb, const LibUtilities::PointsType Ntype, SpatialDomains::Geometry2D *geom)
Constructor using BasisKey class for quadrature points and order definition.
void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_WeakDerivMatrixOp(const int i, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey) override
StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const override
DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey) override
DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey) override
void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Definition TriExp.cpp:193
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
2D geometry information
Definition Geometry2D.h:50
LibUtilities::BasisType GetBasisType(const int dir) const
This function returns the type of basis used in the dir direction.
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)=0
Calculates the inner product of a given function f with the different modes of the expansion.
Array< OneD, LibUtilities::BasisSharedPtr > m_base
void v_NodalToModal(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void NodalToModalTranspose(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
void ModalToNodal(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
LibUtilities::PointsKey m_nodalPointsKey
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
std::shared_ptr< StdNodalTriExp > StdNodalTriExpSharedPtr
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
std::shared_ptr< DNekMat > DNekMatSharedPtr
STL namespace.