35 #include <boost/core/ignore_unused.hpp>
45 namespace LocalRegions
61 StdExpansion(Ba.GetNumModes(), 1, Ba),
62 StdExpansion1D(Ba.GetNumModes(), Ba),
63 StdRegions::StdSegExp(Ba),
67 std::bind(&
SegExp::CreateMatrix, this, std::placeholders::_1),
68 std::string(
"SegExpMatrix")),
69 m_staticCondMatrixManager(
70 std::bind(&
SegExp::CreateStaticCondMatrix, this, std::placeholders::_1),
71 std::string(
"SegExpStaticCondMatrix"))
83 StdRegions::StdSegExp(S),
86 m_matrixManager(S.m_matrixManager),
87 m_staticCondMatrixManager(S.m_staticCondMatrixManager)
121 int nquad0 =
m_base[0]->GetNumPoints();
137 ival = StdSegExp::v_Integral(tmp);
172 int nquad0 =
m_base[0]->GetNumPoints();
181 if(out_d0.num_elements())
187 if(out_d1.num_elements())
193 if(out_d2.num_elements())
201 if(out_d0.num_elements())
207 if(out_d1.num_elements())
213 if(out_d2.num_elements())
233 int nquad0 =
m_base[0]->GetNumPoints();
234 int coordim =
m_geom->GetCoordim();
273 int nquad0 =
m_base[0]->GetNumPoints();
276 int coordim =
m_geom->GetCoordim();
289 for(
int k=0; k<coordim; ++k)
296 for(
int i=0; i<nquad0; i++)
298 cout<<
"nx= "<<normals[0][i]<<
" ny="<<normals[1][i]<<endl;
301 "normal vectors do not exist: check if a"
302 "boundary region is defined as I ");
304 Vmath::Vmul(nquad0,normals[0],1,inarray_d0,1,out_dn_tmp,1);
305 Vmath::Vadd(nquad0,out_dn_tmp,1,out_dn,1,out_dn,1);
307 Vmath::Vmul(nquad0,normals[1],1,inarray_d1,1,out_dn_tmp,1);
308 Vmath::Vadd(nquad0,out_dn_tmp,1,out_dn,1,out_dn,1);
310 for(
int i=0; i<nquad0; i++)
312 cout<<
"deps/dx ="<<inarray_d0[i]<<
" deps/dy="<<inarray_d1[i]<<endl;
345 ASSERTL1(
false,
"input dir is out of range");
381 if (
m_base[0]->Collocation())
405 if(
m_base[0]->Collocation())
432 "Cannot use FwdTrans_BndConstrained with these points.");
437 ASSERTL0(
false,
"This type of FwdTrans is not defined"
438 "for this expansion type");
441 fill(outarray.get(), outarray.get()+
m_ncoeffs, 0.0 );
448 inarray[
m_base[0]->GetNumPoints()-1];
473 &((matsys->GetOwnedMatrix())->GetPtr())[0],
474 nInteriorDofs,tmp1.get()+offset,1,0.0,
475 outarray.get()+offset,1);
547 int nquad0 =
m_base[0]->GetNumPoints();
561 StdSegExp::v_IProductWRTBase(base,tmp,outarray,coll_check);
570 int nquad =
m_base[0]->GetNumPoints();
586 Vmath::Smul(nquad, gmat[0][0], inarray, 1, tmp1, 1);
598 Vmath::Smul(nquad, gmat[1][0], inarray, 1, tmp1, 1);
611 Vmath::Smul(nquad, gmat[2][0], inarray, 1, tmp1, 1);
617 ASSERTL1(
false,
"input dir is out of range");
629 int nq =
m_base[0]->GetNumPoints();
638 Vmath::Vmul (nq, &Fx[0], 1, &normals[0][0], 1, &Fn[0], 1);
639 Vmath::Vvtvp(nq, &Fy[0], 1, &normals[1][0], 1, &Fn[0], 1, &Fn[0], 1);
666 return StdSegExp::v_PhysEvaluate(Lcoord,physvals);
676 m_geom->GetLocCoords(coord,Lcoord);
678 return StdSegExp::v_PhysEvaluate(Lcoord, physvals);
688 ASSERTL1(Lcoords[0] >= -1.0&& Lcoords[0] <= 1.0,
689 "Local coordinates are not in region [-1,1]");
692 for(i = 0; i <
m_geom->GetCoordim(); ++i)
694 coords[i] =
m_geom->GetCoord(i,Lcoords);
712 int nquad =
m_base[0]->GetNumPoints();
719 outarray = inarray[0];
722 outarray = inarray[nquad - 1];
737 outarray =
Blas::Ddot(nquad, mat_gauss->GetOwnedMatrix()
738 ->GetPtr().get(), 1, &inarray[0], 1);
750 boost::ignore_unused(EdgeExp, orient);
754 outarray[0] = result;
776 if (&inarray[0] != &outarray[0])
797 2,
m_base[0]->GetPointsKey());
805 return m_geom->GetCoordim();
851 const std::vector<unsigned int > &nummodes,
852 const int mode_offset,
854 std::vector<LibUtilities::BasisType> &fromType)
856 boost::ignore_unused(fromType);
862 int fillorder = min((
int) nummodes[mode_offset],
m_ncoeffs);
873 nummodes[mode_offset],
879 f0,data, t0, coeffs);
887 nummodes[mode_offset],
893 f0,data, t0, coeffs);
898 "basis is either not set up or not hierarchicial");
917 for (i = 0; i < vCoordDim; ++i)
931 for(i = 0; i < vCoordDim; ++i)
937 for(i = 0; i < vCoordDim; ++i)
944 "point is out of range (point < 2)");
949 for (i =0 ; i < vCoordDim; ++i)
951 vert += normal[i][0]*normal[i][0];
953 vert = 1.0/sqrt(vert);
954 for (i = 0; i < vCoordDim; ++i)
956 Vmath::Smul(nqe, vert, normal[i], 1, normal[i], 1);
971 boost::ignore_unused(mkey);
973 int nquad =
m_base[0]->GetNumPoints();
983 switch (
m_geom->GetCoordim())
993 &gmat[0][0],1,dPhysValuesdx.get(),1,
994 dPhysValuesdx.get(),1);
999 gmat[0][0], dPhysValuesdx.get(), 1);
1007 PhysDeriv(physValues,dPhysValuesdx,dPhysValuesdy);
1013 &gmat[0][0],1,dPhysValuesdx.get(),1,
1014 dPhysValuesdx.get(),1);
1016 &gmat[1][0],1,dPhysValuesdy.get(),1,
1017 dPhysValuesdx.get(),1,
1018 dPhysValuesdx.get(),1);
1023 gmat[0][0], dPhysValuesdx.get(), 1);
1025 gmat[1][0], dPhysValuesdy.get(), 1,
1026 dPhysValuesdx.get(), 1);
1036 dPhysValuesdy,dPhysValuesdz);
1042 &gmat[0][0], 1, dPhysValuesdx.get(), 1,
1043 dPhysValuesdx.get(),1);
1045 &gmat[1][0], 1, dPhysValuesdy.get(), 1,
1046 dPhysValuesdx.get(),1,
1047 dPhysValuesdx.get(),1);
1049 &gmat[2][0], 1, dPhysValuesdz.get(), 1,
1050 dPhysValuesdx.get(),1,
1051 dPhysValuesdx.get(),1);
1055 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
1057 gmat[1][0], dPhysValuesdy.get(), 1,
1058 dPhysValuesdx.get(), 1);
1060 gmat[2][0], dPhysValuesdz.get(), 1,
1061 dPhysValuesdx.get(), 1);
1066 ASSERTL0(
false,
"Wrong number of dimensions");
1079 int nquad =
m_base[0]->GetNumPoints();
1095 switch (
m_geom->GetCoordim())
1105 &gmat[0][0],1,dPhysValuesdx.get(),1,
1106 dPhysValuesdx.get(),1);
1110 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
1118 PhysDeriv(physValues, dPhysValuesdx, dPhysValuesdy);
1124 &gmat[0][0], 1, dPhysValuesdx.get(), 1,
1125 dPhysValuesdx.get(), 1);
1127 &gmat[1][0], 1, dPhysValuesdy.get(), 1,
1128 dPhysValuesdx.get(), 1,
1129 dPhysValuesdx.get(), 1);
1133 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
1135 gmat[1][0], dPhysValuesdy.get(), 1,
1136 dPhysValuesdx.get(), 1);
1146 dPhysValuesdy, dPhysValuesdz);
1152 &gmat[0][0], 1, dPhysValuesdx.get(), 1,
1153 dPhysValuesdx.get(), 1);
1155 &gmat[1][0], 1, dPhysValuesdy.get(), 1,
1156 dPhysValuesdx.get(), 1,
1157 dPhysValuesdx.get(), 1);
1159 &gmat[2][0], 1, dPhysValuesdz.get(), 1,
1160 dPhysValuesdx.get(), 1,
1161 dPhysValuesdx.get(), 1);
1165 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
1167 gmat[1][0], dPhysValuesdy.get(), 1,
1168 dPhysValuesdx.get(), 1);
1170 gmat[2][0], dPhysValuesdz.get(),
1171 1, dPhysValuesdx.get(), 1);
1176 ASSERTL0(
false,
"Wrong number of dimensions");
1213 return tmp->GetStdMatrix(mkey);
1225 "Geometric information is not set up");
1235 goto UseLocRegionsMatrix;
1240 goto UseStdRegionsMatrix;
1261 goto UseStdRegionsMatrix;
1273 goto UseLocRegionsMatrix;
1285 "Cannot call eWeakDeriv2 in a "
1286 "coordinate system which is not at "
1287 "least two-dimensional");
1292 "Cannot call eWeakDeriv2 in a "
1293 "coordinate system which is not "
1294 "three-dimensional");
1318 goto UseLocRegionsMatrix;
1322 int coordim =
m_geom->GetCoordim();
1324 for (
int i = 0; i < coordim; ++i)
1330 goto UseStdRegionsMatrix;
1346 int rows = LapMat.GetRows();
1347 int cols = LapMat.GetColumns();
1353 (*helm) = LapMat + factor*MassMat;
1397 coords[0] = (vertex == 0) ? -1.0 : 1.0;
1399 m_Ix =
m_base[0]->GetI(coords);
1405 UseLocRegionsMatrix:
1412 UseStdRegionsMatrix:
1443 returnval = StdSegExp::v_GenMatrix(mkey);
1458 "Geometric information is not set up");
1464 exp_size[0] = nbdry;
1480 goto UseLocRegionsMatrix;
1486 goto UseLocRegionsMatrix;
1491 factor = mat->Scale();
1492 goto UseStdRegionsMatrix;
1495 UseStdRegionsMatrix:
1503 returnval->SetBlock(0,0,Atmp =
1505 factor,Asubmat = mat->GetBlock(0,0)));
1506 returnval->SetBlock(0,1,Atmp =
1508 one,Asubmat = mat->GetBlock(0,1)));
1509 returnval->SetBlock(1,0,Atmp =
1511 factor,Asubmat = mat->GetBlock(1,0)));
1512 returnval->SetBlock(1,1,Atmp =
1514 invfactor,Asubmat = mat->GetBlock(1,1)));
1517 UseLocRegionsMatrix:
1537 for (i = 0; i < nbdry; ++i)
1539 for (j = 0; j < nbdry; ++j)
1541 (*A)(i,j) = mat(bmap[i],bmap[j]);
1544 for (j = 0; j < nint; ++j)
1546 (*B)(i,j) = mat(bmap[i],imap[j]);
1550 for (i = 0; i < nint; ++i)
1552 for (j = 0; j < nbdry; ++j)
1554 (*C)(i,j) = mat(imap[i],bmap[j]);
1557 for (j = 0; j < nint; ++j)
1559 (*D)(i,j) = mat(imap[i],imap[j]);
1568 (*A) = (*A) - (*B)*(*C);
1574 AllocateSharedPtr(factor,
A));
1576 AllocateSharedPtr(one,B));
1578 AllocateSharedPtr(factor,C));
1580 AllocateSharedPtr(invfactor,D));
1606 ASSERTL1(&inarray[0] != &outarray[0],
1607 "inarray and outarray can not be the same");
1612 outarray[0] = inarray[1];
1613 outarray[1] = inarray[0];
1617 outarray[m] = sgn*inarray[m];
1629 ASSERTL0(
false,
"This basis is not allowed in this method");
#define ASSERTL0(condition, msg)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mode...
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
#define ASSERTL2(condition, msg)
Assert Level 2 – Debugging which is used FULLDEBUG compilation mode. This level assert is designed to...
Describes the specification for a Basis.
Defines a specification for a set of points.
Expansion2DSharedPtr GetLeftAdjacentElementExp() const
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
int GetLeftAdjacentElementEdge() const
SpatialDomains::GeometrySharedPtr GetGeom() const
SpatialDomains::GeometrySharedPtr m_geom
SpatialDomains::GeomFactorsSharedPtr m_metricinfo
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
void v_DropLocStaticCondMatrix(const MatrixKey &mkey)
DNekScalBlkMatSharedPtr CreateStaticCondMatrix(const MatrixKey &mkey)
virtual int v_NumBndryCoeffs() const
virtual NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals)
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Forward transform from physical quadrature space stored in inarray and evaluate the expansion coeffic...
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey)
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
virtual int v_GetCoordim()
virtual int v_GetNumPoints(const int dir) const
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const
virtual int v_NumDGBndryCoeffs() const
virtual void v_GetVertexPhysVals(const int vertex, const Array< OneD, const NekDouble > &inarray, NekDouble &outarray)
void ReverseCoeffsAndSign(const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Reverse the coefficients in a boundary interior expansion this routine is of use when we need the seg...
virtual DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey)
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Inner product of inarray over region with respect to the expansion basis (this)->_Base[0] and return ...
virtual void v_NormVectorIProductWRTBase(const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
DNekScalMatSharedPtr CreateMatrix(const MatrixKey &mkey)
virtual void v_PhysDeriv_n(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_dn)
Evaluate the derivative normal to a line: . The derivative is calculated performing the product .
virtual void v_ComputeVertexNormal(const int vertex)
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_PhysDeriv_s(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_ds)
Evaluate the derivative along a line: . The derivative is calculated performing the product .
virtual void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray)
Evaluate the derivative at the physical quadrature points given by inarray and return in outarray.
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey)
void MultiplyByElmtInvMass(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords)
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
Integrate the physical point list inarray over region and return the value.
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey)
virtual int v_GetNcoeffs(void) const
virtual void v_FwdTrans_BndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
Unpack data from input file assuming it comes from.
virtual void v_GetTracePhysVals(const int edge, const StdRegions::StdExpansionSharedPtr &EdgeExp, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, StdRegions::Orientation orient)
virtual const LibUtilities::BasisSharedPtr & v_GetBasis(int dir) const
virtual const Array< OneD, const NekDouble > & v_GetPhysNormals(void)
virtual void v_SetCoeffsToOrientation(Array< OneD, NekDouble > &coeffs, StdRegions::Orientation dir)
virtual NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coord, const Array< OneD, const NekDouble > &physvals)
virtual SpatialDomains::GeomType v_MetricInfoType()
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
void PhysTensorDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
Evaluate the derivative at the physical quadrature points given by inarray and return in outarray.
std::map< int, NormalVector > m_vertexNormals
void GetBoundaryMap(Array< OneD, unsigned int > &outarray)
const LibUtilities::BasisSharedPtr & GetBasis(int dir) const
This function gets the shared point to basis in the dir direction.
LibUtilities::BasisType GetBasisType(const int dir) const
This function returns the type of basis used in the dir direction.
int NumBndryCoeffs(void) const
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
const LibUtilities::PointsKeyVector GetPointsKeys() const
DNekBlkMatSharedPtr GetStdStaticCondMatrix(const StdMatrixKey &mkey)
void MassMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdMatrixKey &mkey)
int GetVertexMap(const int localVertexId, bool useCoeffPacking=false)
void NormVectorIProductWRTBase(const Array< OneD, const NekDouble > &Fx, Array< OneD, NekDouble > &outarray)
const NormalVector & GetEdgeNormal(const int edge) const
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
void GetInteriorMap(Array< OneD, unsigned int > &outarray)
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Backward transformation from coefficient space to physical space.
DNekMatSharedPtr GenMatrix(const StdMatrixKey &mkey)
LibUtilities::PointsType GetPointsType(const int dir) const
This function returns the type of quadrature points used in the dir direction.
int GetNumPoints(const int dir) const
This function returns the number of quadrature points in the dir direction.
void PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1=NullNekDouble1DArray, Array< OneD, NekDouble > &out_d2=NullNekDouble1DArray)
Array< OneD, LibUtilities::BasisSharedPtr > m_base
const ConstFactorMap & GetConstFactors() const
LibUtilities::ShapeType GetShapeType() const
const VarCoeffMap & GetVarCoeffs() const
MatrixType GetMatrixType() const
NekDouble GetConstFactor(const ConstFactorType &factor) const
static void Dgemv(const char &trans, const int &m, const int &n, const double &alpha, const double *a, const int &lda, const double *x, const int &incx, const double &beta, double *y, const int &incy)
BLAS level 2: Matrix vector multiply y = A x where A[m x n].
static void Dscal(const int &n, const double &alpha, double *x, const int &incx)
BLAS level 1: x = alpha x.
static double Ddot(const int &n, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: output = .
static void Daxpy(const int &n, const double &alpha, const double *x, const int &incx, const double *y, const int &incy)
BLAS level 1: y = alpha x plus y.
std::shared_ptr< Basis > BasisSharedPtr
void Interp1D(const BasisKey &fbasis0, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, Array< OneD, NekDouble > &to)
this function interpolates a 1D function evaluated at the quadrature points of the basis fbasis0 to ...
std::vector< PointsKey > PointsKeyVector
@ eGaussLobattoLegendre
1D Gauss-Lobatto-Legendre quadrature points
@ ePolyEvenlySpaced
1D Evenly-spaced points using Lagrange polynomial
@ eGaussGaussLegendre
1D Gauss-Gauss-Legendre quadrature points
@ eModified_B
Principle Modified Functions .
@ eGauss_Lagrange
Lagrange Polynomials using the Gauss points .
@ eGLL_Lagrange
Lagrange for SEM basis .
@ eModified_A
Principle Modified Functions .
std::shared_ptr< GeomFactors > GeomFactorsSharedPtr
Pointer to a GeomFactors object.
GeomType
Indicates the type of element geometry.
@ eRegular
Geometry is straight-sided with constant geometric factors.
@ eNoGeomType
No type defined.
@ eMovingRegular
Currently unused.
@ eDeformed
Geometry is curved or has non-constant factors.
std::shared_ptr< Geometry1D > Geometry1DSharedPtr
std::shared_ptr< StdExpansion > StdExpansionSharedPtr
std::map< ConstFactorType, NekDouble > ConstFactorMap
std::shared_ptr< StdSegExp > StdSegExpSharedPtr
static Array< OneD, Array< OneD, NekDouble > > NullNekDoubleArrayofArray
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
std::shared_ptr< DNekBlkMat > DNekBlkMatSharedPtr
std::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
static Array< OneD, NekDouble > NullNekDouble1DArray
std::shared_ptr< DNekMat > DNekMatSharedPtr
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.
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y.
void Vdiv(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x/y.
void Zero(int n, T *x, const int incx)
Zero vector.
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y.