74 const int nquad0 =
m_base[0]->GetNumPoints();
75 const int nquad1 =
m_base[1]->GetNumPoints();
76 const int nquad2 =
m_base[2]->GetNumPoints();
81 Vmath::Vcopy(nquad0*nquad1*nquad2, &inarray[0], 1, &wsp[0], 1);
83 if (out_dx.num_elements() > 0)
87 Blas::Dgemm(
'N',
'N', nquad0,nquad1*nquad2,nquad0,1.0,
88 D0,nquad0,&wsp[0],nquad0,0.0,&out_dx[0],nquad0);
91 if (out_dy.num_elements() > 0)
94 for (
int j = 0; j < nquad2; ++j)
96 Blas::Dgemm(
'N',
'T', nquad0, nquad1, nquad1,
97 1.0, &wsp[j*nquad0*nquad1], nquad0,
99 0.0, &out_dy[j*nquad0*nquad1], nquad0);
103 if (out_dz.num_elements() > 0)
107 Blas::Dgemm(
'N',
'T',nquad0*nquad1,nquad2,nquad2,1.0,
108 &wsp[0],nquad0*nquad1,D2,nquad2,0.0,&out_dz[0],
120 bool doCheckCollDir0,
121 bool doCheckCollDir1,
122 bool doCheckCollDir2)
124 v_BwdTrans_SumFacKernel(base0, base1, base2, inarray, outarray, wsp, doCheckCollDir0, doCheckCollDir1, doCheckCollDir2);
134 bool doCheckCollDir0,
135 bool doCheckCollDir1,
136 bool doCheckCollDir2)
148 WARNINGL2(coords[0] >= -1,
"coord[0] < -1");
149 WARNINGL2(coords[0] <= 1,
"coord[0] > 1");
150 WARNINGL2(coords[1] >= -1,
"coord[1] < -1");
151 WARNINGL2(coords[1] <= 1,
"coord[1] > 1");
152 WARNINGL2(coords[2] >= -1,
"coord[2] < -1");
153 WARNINGL2(coords[2] <= 1,
"coord[2] > 1");
160 I[0] =
m_base[0]->GetI(eta);
161 I[1] =
m_base[1]->GetI(eta+1);
162 I[2] =
m_base[2]->GetI(eta+2);
173 int Qx =
m_base[0]->GetNumPoints();
174 int Qy =
m_base[1]->GetNumPoints();
175 int Qz =
m_base[2]->GetNumPoints();
184 interpolatingNodes = &I[0]->GetPtr()[0];
186 Blas::Dgemv(
'T',Qx,Qy*Qz,1.0,&physvals[0],Qx,&interpolatingNodes[0], 1, 0.0, &sumFactorization_qr[0], 1);
189 interpolatingNodes = &I[1]->GetPtr()[0];
191 Blas::Dgemv(
'T',Qy,Qz,1.0,&sumFactorization_qr[0],Qy,&interpolatingNodes[0],1,0.0,&sumFactorization_r[0], 1);
194 interpolatingNodes = &I[2]->GetPtr()[0];
195 value =
Blas::Ddot(Qz, interpolatingNodes, 1, &sumFactorization_r[0], 1);
226 if(!(
m_base[0]->Collocation() &&
m_base[1]->Collocation() &&
227 m_base[2]->Collocation()))
255 int nquad0 =
m_base[0]->GetNumPoints();
256 int nquad1 =
m_base[1]->GetNumPoints();
257 int nquad2 =
m_base[2]->GetNumPoints();
258 int nmodes0 =
m_base[0]->GetNumModes();
259 int nmodes1 =
m_base[1]->GetNumModes();
260 int nmodes2 =
m_base[2]->GetNumModes();
261 int wspsize = max(nquad0*nmodes2*(nmodes1+nquad1),
262 nquad0*nquad1*(nquad2+nmodes0)+
263 nmodes0*nmodes1*nquad2);
274 if(!(
m_base[0]->Collocation() &&
m_base[1]->Collocation() &&
275 m_base[2]->Collocation()))
283 wsp0,wsp2,
true,
true,
true);
286 outarray,wsp2,
true,
true,
true);
317 std::map<int, NormalVector>::const_iterator x;
320 "face normal not computed.");
351 switch(faceDirBasisType)
392 ASSERTL0(
false,
"expansion type unknown");
407 switch(faceDirBasisType)
439 ASSERTL0(
false,
"invalid value to flag");
467 ASSERTL0(
false,
"invalid value to flag");
497 ASSERTL0(
false,
"invalid value to flag");
504 ASSERTL0(
false,
"expansion type unknown");
void HelmholtzMatrixOp_MatFree_GenericImpl(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
NekDouble GetConstFactor(const ConstFactorType &factor) const
#define ASSERTL0(condition, msg)
void LaplacianMatrixOp_MatFree_GenericImpl(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
Principle Modified Functions .
void 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)
virtual void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
void MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
const NormalVector & v_GetSurfaceNormal(const int id) const
void MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
void Svtvp(int n, const T alpha, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
svtvp (scalar times vector plus vector): z = alpha*x + y
LibUtilities::BasisKey EvaluateTriFaceBasisKey(const int facedir, const LibUtilities::BasisType faceDirBasisType, const int numpoints, const int nummodes)
Principle Modified Functions .
void LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta)
Convert local cartesian coordinate xi into local collapsed coordinates eta.
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)=0
Gauss Radau pinned at x=-1, .
Principle Orthogonal Functions .
std::map< int, bool > m_negatedNormals
bool ConstFactorExists(const ConstFactorType &factor) const
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
void PhysTensorDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray_d1, Array< OneD, NekDouble > &outarray_d2, Array< OneD, NekDouble > &outarray_d3)
Calculate the 3D derivative in the local tensor/collapsed coordinate at the physical points...
The base class for all shapes.
void 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)
LibUtilities::BasisKey EvaluateQuadFaceBasisKey(const int facedir, const LibUtilities::BasisType faceDirBasisType, const int numpoints, const int nummodes)
Principle Modified Functions .
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrates the specified function over the domain.
Principle Orthogonal Functions .
Principle Orthogonal Functions .
virtual ~StdExpansion3D()
Defines a specification for a set of points.
void Neg(int n, T *x, const int incx)
Negate x = -x.
void LaplacianMatrixOp_MatFree_Kernel(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp)
T Ddot(int n, const Array< OneD, const T > &w, const int incw, const Array< OneD, const T > &x, const int incx, const Array< OneD, const int > &y, const int incy)
std::map< int, NormalVector > m_faceNormals
const NormalVector & v_GetFaceNormal(const int face) const
virtual void v_NegateFaceNormal(const int face)
#define WARNINGL2(condition, msg)
virtual NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coords, const Array< OneD, const NekDouble > &physvals)
This function evaluates the expansion at a single (arbitrary) point of the domain.
static const BasisKey NullBasisKey(eNoBasisType, 0, NullPointsKey)
Defines a null basis with no type or points.
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
Array< OneD, LibUtilities::BasisSharedPtr > m_base
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Describes the specification for a Basis.
1D Gauss-Lobatto-Legendre quadrature points
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)=0