76 int nquad0 =
m_base[0]->GetNumPoints();
77 int nquad1 =
m_base[1]->GetNumPoints();
79 if (outarray_d0.num_elements() > 0)
82 if(inarray.data() == outarray_d0.data())
85 Vmath::Vcopy(nquad0 * nquad1,inarray.get(),1,wsp.get(),1);
86 Blas::Dgemm(
'N',
'N', nquad0, nquad1, nquad0, 1.0,
87 &(D0->GetPtr())[0], nquad0, &wsp[0], nquad0, 0.0,
88 &outarray_d0[0], nquad0);
92 Blas::Dgemm(
'N',
'N', nquad0, nquad1, nquad0, 1.0,
93 &(D0->GetPtr())[0], nquad0, &inarray[0], nquad0, 0.0,
94 &outarray_d0[0], nquad0);
98 if (outarray_d1.num_elements() > 0)
101 if(inarray.data() == outarray_d1.data())
104 Vmath::Vcopy(nquad0 * nquad1,inarray.get(),1,wsp.get(),1);
105 Blas:: Dgemm(
'N',
'T', nquad0, nquad1, nquad1, 1.0, &wsp[0], nquad0,
106 &(D1->GetPtr())[0], nquad1, 0.0, &outarray_d1[0], nquad0);
110 Blas:: Dgemm(
'N',
'T', nquad0, nquad1, nquad1, 1.0, &inarray[0], nquad0,
111 &(D1->GetPtr())[0], nquad1, 0.0, &outarray_d1[0], nquad0);
128 I[0] =
m_base[0]->GetI(coll);
129 I[1] =
m_base[1]->GetI(coll+1);
140 int nq0 =
m_base[0]->GetNumPoints();
141 int nq1 =
m_base[1]->GetNumPoints();
145 for (i = 0; i < nq1;++i)
147 wsp1[i] =
Blas::Ddot(nq0, &(I[0]->GetPtr())[0], 1,
148 &physvals[i * nq0], 1);
152 val =
Blas::Ddot(nq1, I[1]->GetPtr(), 1, wsp1, 1);
167 int nquad0 =
m_base[0]->GetNumPoints();
168 int nquad1 =
m_base[1]->GetNumPoints();
172 for (i = 0; i < nquad1; ++i)
174 Vmath::Vmul(nquad0, &inarray[0] + i*nquad0, 1, w0.get(),
175 1, &tmp[0] + i*nquad0, 1);
178 for (i = 0; i < nquad0; ++i)
180 Vmath::Vmul(nquad1, &tmp[0]+ i, nquad0, w1.get(), 1,
181 &tmp[0] + i, nquad0);
194 bool doCheckCollDir0,
195 bool doCheckCollDir1)
206 bool doCheckCollDir0,
207 bool doCheckCollDir1)
224 int nquad0 =
m_base[0]->GetNumPoints();
225 int nquad1 =
m_base[1]->GetNumPoints();
226 int nqtot = nquad0*nquad1;
227 int nmodes0 =
m_base[0]->GetNumModes();
228 int nmodes1 =
m_base[1]->GetNumModes();
229 int wspsize = max(max(max(nqtot,
m_ncoeffs),nquad1*nmodes0),nquad0*nmodes1);
238 if(!(
m_base[0]->Collocation() &&
m_base[1]->Collocation()))
255 inarray,outarray,mkey);
271 int nquad0 =
m_base[0]->GetNumPoints();
272 int nquad1 =
m_base[1]->GetNumPoints();
273 int nqtot = nquad0*nquad1;
274 int nmodes0 =
m_base[0]->GetNumModes();
275 int nmodes1 =
m_base[1]->GetNumModes();
276 int wspsize = max(max(max(nqtot,
m_ncoeffs),nquad1*nmodes0),
289 if (!(
m_base[0]->Collocation() &&
m_base[1]->Collocation()))
297 wsp0, wsp2,
true,
true);
313 &wsp1[0], 1, &outarray[0], 1);
318 inarray,outarray,mkey);
void HelmholtzMatrixOp_MatFree_GenericImpl(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
NekDouble GetConstFactor(const ConstFactorType &factor) const
void LaplacianMatrixOp_MatFree_GenericImpl(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
void BwdTrans_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0=true, bool doCheckCollDir1=true)
void MultiplyByQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_IProductWRTBase_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1)=0
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
void LocCoordToLocCollapsed(const Array< OneD, const NekDouble > &xi, Array< OneD, NekDouble > &eta)
Convert local cartesian coordinate xi into local collapsed coordinates eta.
NekDouble Integral(const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &w0, const Array< OneD, const NekDouble > &w1)
virtual void v_LaplacianMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
boost::shared_ptr< DNekMat > DNekMatSharedPtr
void PhysTensorDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray_d0, Array< OneD, NekDouble > &outarray_d1)
Calculate the 2D derivative in the local tensor/collapsed coordinate at the physical points...
bool ConstFactorExists(const ConstFactorType &factor) const
The base class for all shapes.
static const NekDouble kNekZeroTol
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.
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)
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed t...
virtual ~StdExpansion2D()
void IProductWRTBase_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0=true, bool doCheckCollDir1=true)
T Vsum(int n, const T *x, const int incx)
Subtract return sum(x)
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.
virtual void v_BwdTrans_SumFacKernel(const Array< OneD, const NekDouble > &base0, const Array< OneD, const NekDouble > &base1, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, Array< OneD, NekDouble > &wsp, bool doCheckCollDir0, bool doCheckCollDir1)=0
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
virtual void v_HelmholtzMatrixOp_MatFree(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)