Nektar++
|
Represents a basis of a given type. More...
#include <Basis.h>
Public Member Functions | |
virtual | ~Basis () |
Destructor. More... | |
int | GetNumModes () const |
Return order of basis from the basis specification. More... | |
int | GetTotNumModes () const |
Return total number of modes from the basis specification. More... | |
int | GetNumPoints () const |
Return the number of points from the basis specification. More... | |
int | GetTotNumPoints () const |
Return total number of points from the basis specification. More... | |
BasisType | GetBasisType () const |
Return the type of expansion basis. More... | |
PointsKey | GetPointsKey () const |
Return the points specification for the basis. More... | |
PointsType | GetPointsType () const |
Return the type of quadrature. More... | |
const Array< OneD, const NekDouble > & | GetZ () const |
const Array< OneD, const NekDouble > & | GetW () const |
void | GetZW (Array< OneD, const NekDouble > &z, Array< OneD, const NekDouble > &w) const |
const std::shared_ptr< NekMatrix< NekDouble > > & | GetD (Direction dir=xDir) const |
const std::shared_ptr< NekMatrix< NekDouble > > | GetI (const Array< OneD, const NekDouble > &x) |
const std::shared_ptr< NekMatrix< NekDouble > > | GetI (const BasisKey &bkey) |
bool | ExactIprodInt () const |
Determine if basis has exact integration for inner product. More... | |
bool | Collocation () const |
Determine if basis has collocation properties. More... | |
const Array< OneD, const NekDouble > & | GetBdata () const |
Return basis definition array m_bdata. More... | |
const Array< OneD, const NekDouble > & | GetDbdata () const |
Return basis definition array m_dbdata. More... | |
const BasisKey | GetBasisKey () const |
Returns the specification for the Basis. More... | |
virtual void | Initialize () |
Static Public Member Functions | |
static std::shared_ptr< Basis > | Create (const BasisKey &bkey) |
Returns a new instance of a Basis with given BasisKey. More... | |
Protected Attributes | |
BasisKey | m_basisKey |
Basis specification. More... | |
PointsSharedPtr | m_points |
Set of points. More... | |
Array< OneD, NekDouble > | m_bdata |
Basis definition. More... | |
Array< OneD, NekDouble > | m_dbdata |
Derivative Basis definition. More... | |
NekManager< BasisKey, NekMatrix< NekDouble >, BasisKey::opLess > | m_InterpManager |
Private Member Functions | |
Basis (const BasisKey &bkey) | |
Private constructor with BasisKey. More... | |
Basis () | |
Private default constructor. More... | |
std::shared_ptr< NekMatrix< NekDouble > > | CalculateInterpMatrix (const BasisKey &tbasis0) |
Calculate the interpolation Matrix for coefficient from one base (m_basisKey) to another (tbasis0) More... | |
void | GenBasis () |
Generate appropriate basis and their derivatives. More... | |
Static Private Attributes | |
static bool | initBasisManager [] |
|
inlinevirtual |
|
private |
Private constructor with BasisKey.
Definition at line 95 of file Foundations/Basis.cpp.
References CalculateInterpMatrix(), and m_InterpManager.
|
inlineprivate |
Private default constructor.
Definition at line 347 of file Basis.h.
References Nektar::ErrorUtil::efatal, Nektar::lhs, LIB_UTILITIES_EXPORT, NEKERROR, Nektar::LibUtilities::BasisKey::operator<, Nektar::LibUtilities::operator<<(), Nektar::LibUtilities::operator>(), and Nektar::rhs.
Referenced by Create().
|
private |
Calculate the interpolation Matrix for coefficient from one base (m_basisKey) to another (tbasis0)
Definition at line 124 of file Foundations/Basis.cpp.
References Nektar::LibUtilities::BasisManager(), Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::BasisKey::GetBasisType(), Nektar::LibUtilities::BasisKey::GetNumModes(), and m_basisKey.
Referenced by Basis().
|
inline |
Determine if basis has collocation properties.
Definition at line 307 of file Basis.h.
Returns a new instance of a Basis with given BasisKey.
Definition at line 104 of file Foundations/Basis.cpp.
References Basis().
|
inline |
Determine if basis has exact integration for inner product.
Definition at line 301 of file Basis.h.
|
private |
Generate appropriate basis and their derivatives.
The following expansions are generated depending on the enum type defined in m_basisKey.m_basistype:
NOTE: This definition does not follow the order in the Karniadakis & Sherwin book since this leads to a more compact hierarchical pattern for implementation purposes. The order of these modes dictates the ordering of the expansion coefficients.
In the following m_numModes = P
eModified_A:
m_bdata[i + j*m_numpoints] = \( \phi^a_i(z_j) = \left \{ \begin{array}{ll} \left ( \frac{1-z_j}{2}\right ) & i = 0 \\ \\ \left ( \frac{1+z_j}{2}\right ) & i = 1 \\ \\ \left ( \frac{1-z_j}{2}\right )\left ( \frac{1+z_j}{2}\right ) P^{1,1}_{i-2}(z_j) & 2\leq i < P\\ \end{array} \right . \)
eModified_B:
m_bdata[n(i,j) + k*m_numpoints] = \( \phi^b_{ij}(z_k) = \left \{ \begin{array}{lll} \phi^a_j(z_k) & i = 0, & 0\leq j < P \\ \\ \left ( \frac{1-z_k}{2}\right )^{i} & 1 \leq i < P,& j = 0 \\ \\ \left ( \frac{1-z_k}{2}\right )^{i} \left ( \frac{1+z_k}{2}\right ) P^{2i-1,1}_{j-1}(z_k) & 1 \leq i < P,\ & 1\leq j < P-i\ \\ \end{array} \right . , \)
where \( n(i,j) \) is a consecutive ordering of the triangular indices \( 0 \leq i, i+j < P \) where j runs fastest.
eModified_C:
m_bdata[n(i,j,k) + l*m_numpoints] = \( \phi^c_{ij,k}(z_l) = \phi^b_{i+j,k}(z_l) = \left \{ \begin{array}{llll} \phi^b_{j,k}(z_l) & i = 0, & 0\leq j < P & 0\leq k < P-j\\ \\ \left ( \frac{1-z_l}{2}\right )^{i+j} & 1\leq i < P,\ & 0\leq j < P-i,\ & k = 0 \\ \\ \left ( \frac{1-z_l}{2}\right )^{i+j} \left ( \frac{1+z_l}{2}\right ) P^{2i+2j-1,1}_{k-1}(z_k) & 1\leq i < P,& 0\leq j < P-i& 1\leq k < P-i-j \\ \\ \end{array} \right . , \)
where \( n(i,j,k) \) is a consecutive ordering of the triangular indices \( 0 \leq i, i+j, i+j+k < P \) where k runs fastest, then j and finally i.
Orthogonal basis A
\(\tilde \psi_p^a (\eta_1) = L_p(\eta_1) = P_p^{0,0}(\eta_1)\)
Orthogonal basis B
\(\tilde \psi_{pq}^b(\eta_2) = \left ( {1 - \eta_2} \over 2 \right)^p P_q^{2p+1,0}(\eta_2)\) \
Orthogonal basis C
\(\tilde \psi_{pqr}^c = \left ( {1 - \eta_3} \over 2 \right)^{p+q} P_r^{2p+2q+2, 0}(\eta_3)\) \ \
Orthogonal basis C for Pyramid expansion (which is richer than tets)
\(\tilde \psi_{pqr}^c = \left ( {1 - \eta_3} \over 2\right)^{pq} P_r^{2pq+2, 0}(\eta_3)\) \( \mbox{where }pq = max(p+q,0) \)
This orthogonal expansion has modes that are always in the Cartesian space, however the equivalent ModifiedPyr_C has vertex modes that do not lie in this space. If one chooses \(pq = max(p+q-1,0)\) then the expansion will space the same space as the vertices but the order of the expanion in 'r' is reduced by one.
1) Eta_z values are the changing the fastest, then r, q, and finally p. 2) r index increases by the stride of numPoints.
Definition at line 217 of file Foundations/Basis.cpp.
References ASSERTL0, Nektar::LibUtilities::BasisManager(), Blas::Dgemm(), Nektar::LibUtilities::eChebyshev, Nektar::ErrorUtil::efatal, Nektar::LibUtilities::eFourier, Nektar::LibUtilities::eFourierHalfModeIm, Nektar::LibUtilities::eFourierHalfModeRe, Nektar::LibUtilities::eFourierSingleMode, Nektar::LibUtilities::eGauss_Lagrange, Nektar::LibUtilities::eGaussGaussLegendre, Nektar::LibUtilities::eGaussLobattoLegendre, Nektar::LibUtilities::eGLL_Lagrange, Nektar::LibUtilities::eLegendre, Nektar::LibUtilities::eModified_A, Nektar::LibUtilities::eModified_B, Nektar::LibUtilities::eModified_C, Nektar::LibUtilities::eModifiedPyr_C, Nektar::LibUtilities::eMonomial, Nektar::LibUtilities::eOrtho_A, Nektar::LibUtilities::eOrtho_B, Nektar::LibUtilities::eOrtho_C, Nektar::LibUtilities::eOrthoPyr_C, GetBasisType(), Nektar::LibUtilities::BasisKey::GetNumModes(), GetNumModes(), GetNumPoints(), Nektar::LibUtilities::BasisKey::GetPointsKey(), Polylib::hgj(), Polylib::hglj(), Polylib::jacobfd(), m_basisKey, m_bdata, m_dbdata, m_points, NEKERROR, class_topology::P, CellMLToNektar.cellml_metadata::p, Nektar::LibUtilities::PointsManager(), and Vmath::Vcopy().
Referenced by Initialize().
|
inline |
Returns the specification for the Basis.
Definition at line 325 of file Basis.h.
References LIB_UTILITIES_EXPORT.
Referenced by export_Basis().
|
inline |
Return the type of expansion basis.
Definition at line 247 of file Basis.h.
Referenced by export_Basis(), and GenBasis().
Return basis definition array m_bdata.
Definition at line 313 of file Basis.h.
Referenced by Nektar::LocalRegions::Expansion1D::AddHDGHelmholtzTraceTerms(), Nektar::LocalRegions::Expansion1D::AddNormTraceInt(), and export_Basis().
|
inline |
Return basis definition array m_dbdata.
Definition at line 319 of file Basis.h.
Referenced by export_Basis().
|
inline |
|
inline |
Definition at line 292 of file Basis.h.
References ASSERTL0, Nektar::LibUtilities::PointsKey::GetPointsDim(), and Nektar::LibUtilities::BasisKey::GetPointsKey().
|
inline |
Return order of basis from the basis specification.
Definition at line 223 of file Basis.h.
Referenced by Nektar::LibUtilities::BasisKey::Collocation(), Nektar::LibUtilities::BasisKey::ExactIprodInt(), export_Basis(), GenBasis(), Initialize(), and main().
|
inline |
Return the number of points from the basis specification.
Definition at line 235 of file Basis.h.
Referenced by Nektar::LibUtilities::BasisKey::Collocation(), Nektar::LibUtilities::BasisKey::ExactIprodInt(), export_Basis(), and GenBasis().
|
inline |
Return the points specification for the basis.
Definition at line 253 of file Basis.h.
Referenced by export_Basis().
|
inline |
Return the type of quadrature.
Definition at line 259 of file Basis.h.
Referenced by Nektar::LibUtilities::BasisKey::Collocation(), and Nektar::LibUtilities::BasisKey::ExactIprodInt().
|
inline |
Return total number of modes from the basis specification.
Definition at line 229 of file Basis.h.
Referenced by export_Basis().
|
inline |
Return total number of points from the basis specification.
Definition at line 241 of file Basis.h.
Referenced by export_Basis(), and Initialize().
|
inline |
|
virtual |
Definition at line 112 of file Foundations/Basis.cpp.
References ASSERTL0, GenBasis(), GetNumModes(), and GetTotNumPoints().
Referenced by export_Basis().
|
staticprivate |
|
protected |
Basis specification.
Definition at line 333 of file Basis.h.
Referenced by CalculateInterpMatrix(), and GenBasis().
|
protected |
|
protected |