35 #include <boost/core/ignore_unused.hpp>
45 namespace LocalRegions
61 : StdExpansion(Ba.GetNumModes(), 1, Ba),
62 StdExpansion1D(Ba.GetNumModes(), Ba), StdRegions::StdSegExp(Ba),
65 std::bind(&
SegExp::CreateMatrix, this, std::placeholders::_1),
66 std::string(
"SegExpMatrix")),
67 m_staticCondMatrixManager(std::bind(&
Expansion::CreateStaticCondMatrix,
68 this, std::placeholders::_1),
69 std::string(
"SegExpStaticCondMatrix"))
78 : StdExpansion(S), StdExpansion1D(S), StdRegions::StdSegExp(S),
80 m_staticCondMatrixManager(S.m_staticCondMatrixManager)
111 int nquad0 =
m_base[0]->GetNumPoints();
127 ival = StdSegExp::v_Integral(tmp);
161 int nquad0 =
m_base[0]->GetNumPoints();
172 Vmath::Vmul(nquad0, &gmat[0][0], 1, &diff[0], 1, &out_d0[0], 1);
177 Vmath::Vmul(nquad0, &gmat[1][0], 1, &diff[0], 1, &out_d1[0], 1);
182 Vmath::Vmul(nquad0, &gmat[2][0], 1, &diff[0], 1, &out_d2[0], 1);
189 Vmath::Smul(nquad0, gmat[0][0], diff, 1, out_d0, 1);
194 Vmath::Smul(nquad0, gmat[1][0], diff, 1, out_d1, 1);
199 Vmath::Smul(nquad0, gmat[2][0], diff, 1, out_d2, 1);
215 int nquad0 =
m_base[0]->GetNumPoints();
216 int coordim =
m_geom->GetCoordim();
254 int nquad0 =
m_base[0]->GetNumPoints();
257 int coordim =
m_geom->GetCoordim();
269 cout <<
"der_n" << endl;
270 for (
int k = 0; k < coordim; ++k)
278 for (
int i = 0; i < nquad0; i++)
280 cout <<
"nx= " << normals[0][i] <<
" ny=" << normals[1][i]
284 "normal vectors do not exist: check if a"
285 "boundary region is defined as I ");
287 Vmath::Vmul(nquad0, normals[0], 1, inarray_d0, 1, out_dn_tmp, 1);
288 Vmath::Vadd(nquad0, out_dn_tmp, 1, out_dn, 1, out_dn, 1);
290 Vmath::Vmul(nquad0, normals[1], 1, inarray_d1, 1, out_dn_tmp, 1);
291 Vmath::Vadd(nquad0, out_dn_tmp, 1, out_dn, 1, out_dn, 1);
293 for (
int i = 0; i < nquad0; i++)
295 cout <<
"deps/dx =" << inarray_d0[i]
296 <<
" deps/dy=" << inarray_d1[i] << endl;
326 ASSERTL1(
false,
"input dir is out of range");
360 if (
m_base[0]->Collocation())
376 out = (*matsys) * in;
384 if (
m_base[0]->Collocation())
414 "Cannot use FwdTrans_BndConstrained with these points.");
419 ASSERTL0(
false,
"This type of FwdTrans is not defined"
420 "for this expansion type");
423 fill(outarray.get(), outarray.get() +
m_ncoeffs, 0.0);
451 Blas::Dgemv(
'N', nInteriorDofs, nInteriorDofs, matsys->Scale(),
452 &((matsys->GetOwnedMatrix())->GetPtr())[0],
453 nInteriorDofs, tmp1.get() + offset, 1, 0.0,
454 outarray.get() + offset, 1);
520 int nquad0 =
m_base[0]->GetNumPoints();
533 StdSegExp::v_IProductWRTBase(base, tmp, outarray, coll_check);
540 ASSERTL1(dir < 3,
"input dir is out of range");
542 "input dir is out of range");
544 int nquad =
m_base[0]->GetNumPoints();
552 Vmath::Vmul(nquad, gmat[dir], 1, inarray, 1, tmp1, 1);
556 Vmath::Smul(nquad, gmat[dir][0], inarray, 1, tmp1, 1);
566 int nq =
m_base[0]->GetNumPoints();
574 Vmath::Vmul(nq, &Fx[0], 1, &normals[0][0], 1, &Fn[0], 1);
575 Vmath::Vvtvp(nq, &Fy[0], 1, &normals[1][0], 1, &Fn[0], 1, &Fn[0], 1);
601 return StdSegExp::v_PhysEvaluate(Lcoord, physvals);
610 m_geom->GetLocCoords(coord, Lcoord);
612 return StdSegExp::v_PhysEvaluate(Lcoord, physvals);
620 ASSERTL1(Lcoords[0] >= -1.0 && Lcoords[0] <= 1.0,
621 "Local coordinates are not in region [-1,1]");
624 for (i = 0; i <
m_geom->GetCoordim(); ++i)
626 coords[i] =
m_geom->GetCoord(i, Lcoords);
642 int nquad =
m_base[0]->GetNumPoints();
649 outarray = inarray[0];
652 outarray = inarray[nquad - 1];
667 Blas::Ddot(nquad, mat_gauss->GetOwnedMatrix()->GetPtr().get(), 1,
676 size_t nquad =
m_base[0]->GetNumPoints();
683 outarray[0] += inarray;
686 outarray[nquad - 1] += inarray;
701 mat_gauss->GetOwnedMatrix()->GetPtr().get(), 1,
702 &outarray[0], 1, &outarray[0], 1);
711 boost::ignore_unused(EdgeExp, orient);
715 outarray[0] = result;
721 int nquad =
m_base[0]->GetNumPoints();
723 ASSERTL1(vertex == 0 || vertex == 1,
"Vertex value should be 0 or 1");
727 map[0] = vertex == 0 ? 0 : nquad - 1;
741 if (&inarray[0] != &outarray[0])
756 m_base[0]->GetBasisKey());
762 m_base[0]->GetPointsKey());
769 return m_geom->GetCoordim();
811 const NekDouble *data,
const std::vector<unsigned int> &nummodes,
812 const int mode_offset,
NekDouble *coeffs,
813 std::vector<LibUtilities::BasisType> &fromType)
815 boost::ignore_unused(fromType);
821 int fillorder = min((
int)nummodes[mode_offset],
m_ncoeffs);
850 ASSERTL0(
false,
"basis is either not set up or not hierarchicial");
867 for (i = 0; i < vCoordDim; ++i)
873 size_t nbnd = vertex;
886 for (i = 0; i < vCoordDim; ++i)
892 for (i = 0; i < vCoordDim; ++i)
898 ASSERTL0(
false,
"point is out of range (point < 2)");
903 for (i = 0; i < vCoordDim; ++i)
905 vert += normal[i][0] * normal[i][0];
907 vert = 1.0 /
sqrt(vert);
911 for (i = 0; i < vCoordDim; ++i)
913 Vmath::Smul(nqe, vert, normal[i], 1, normal[i], 1);
926 boost::ignore_unused(mkey);
928 int nquad =
m_base[0]->GetNumPoints();
938 switch (
m_geom->GetCoordim())
947 Vmath::Vmul(nquad, &gmat[0][0], 1, dPhysValuesdx.get(), 1,
948 dPhysValuesdx.get(), 1);
952 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
960 PhysDeriv(physValues, dPhysValuesdx, dPhysValuesdy);
965 Vmath::Vmul(nquad, &gmat[0][0], 1, dPhysValuesdx.get(), 1,
966 dPhysValuesdx.get(), 1);
967 Vmath::Vvtvp(nquad, &gmat[1][0], 1, dPhysValuesdy.get(), 1,
968 dPhysValuesdx.get(), 1, dPhysValuesdx.get(), 1);
972 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
973 Blas::Daxpy(nquad, gmat[1][0], dPhysValuesdy.get(), 1,
974 dPhysValuesdx.get(), 1);
983 PhysDeriv(physValues, dPhysValuesdx, dPhysValuesdy, dPhysValuesdz);
988 Vmath::Vmul(nquad, &gmat[0][0], 1, dPhysValuesdx.get(), 1,
989 dPhysValuesdx.get(), 1);
990 Vmath::Vvtvp(nquad, &gmat[1][0], 1, dPhysValuesdy.get(), 1,
991 dPhysValuesdx.get(), 1, dPhysValuesdx.get(), 1);
992 Vmath::Vvtvp(nquad, &gmat[2][0], 1, dPhysValuesdz.get(), 1,
993 dPhysValuesdx.get(), 1, dPhysValuesdx.get(), 1);
997 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
998 Blas::Daxpy(nquad, gmat[1][0], dPhysValuesdy.get(), 1,
999 dPhysValuesdx.get(), 1);
1000 Blas::Daxpy(nquad, gmat[2][0], dPhysValuesdz.get(), 1,
1001 dPhysValuesdx.get(), 1);
1006 ASSERTL0(
false,
"Wrong number of dimensions");
1017 int nquad =
m_base[0]->GetNumPoints();
1032 switch (
m_geom->GetCoordim())
1041 Vmath::Vmul(nquad, &gmat[0][0], 1, dPhysValuesdx.get(), 1,
1042 dPhysValuesdx.get(), 1);
1046 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
1054 PhysDeriv(physValues, dPhysValuesdx, dPhysValuesdy);
1059 Vmath::Vmul(nquad, &gmat[0][0], 1, dPhysValuesdx.get(), 1,
1060 dPhysValuesdx.get(), 1);
1061 Vmath::Vvtvp(nquad, &gmat[1][0], 1, dPhysValuesdy.get(), 1,
1062 dPhysValuesdx.get(), 1, dPhysValuesdx.get(), 1);
1066 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
1067 Blas::Daxpy(nquad, gmat[1][0], dPhysValuesdy.get(), 1,
1068 dPhysValuesdx.get(), 1);
1077 PhysDeriv(physValues, dPhysValuesdx, dPhysValuesdy, dPhysValuesdz);
1082 Vmath::Vmul(nquad, &gmat[0][0], 1, dPhysValuesdx.get(), 1,
1083 dPhysValuesdx.get(), 1);
1084 Vmath::Vvtvp(nquad, &gmat[1][0], 1, dPhysValuesdy.get(), 1,
1085 dPhysValuesdx.get(), 1, dPhysValuesdx.get(), 1);
1086 Vmath::Vvtvp(nquad, &gmat[2][0], 1, dPhysValuesdz.get(), 1,
1087 dPhysValuesdx.get(), 1, dPhysValuesdx.get(), 1);
1091 Blas::Dscal(nquad, gmat[0][0], dPhysValuesdx.get(), 1);
1092 Blas::Daxpy(nquad, gmat[1][0], dPhysValuesdy.get(), 1,
1093 dPhysValuesdx.get(), 1);
1094 Blas::Daxpy(nquad, gmat[2][0], dPhysValuesdz.get(), 1,
1095 dPhysValuesdx.get(), 1);
1100 ASSERTL0(
false,
"Wrong number of dimensions");
1133 return tmp->GetStdMatrix(mkey);
1143 "Geometric information is not set up");
1153 goto UseLocRegionsMatrix;
1158 goto UseStdRegionsMatrix;
1179 goto UseStdRegionsMatrix;
1191 goto UseLocRegionsMatrix;
1203 "Cannot call eWeakDeriv2 in a "
1204 "coordinate system which is not at "
1205 "least two-dimensional");
1210 "Cannot call eWeakDeriv2 in a "
1211 "coordinate system which is not "
1212 "three-dimensional");
1236 goto UseLocRegionsMatrix;
1240 int coordim =
m_geom->GetCoordim();
1242 for (
int i = 0; i < coordim; ++i)
1248 goto UseStdRegionsMatrix;
1261 int rows = LapMat.GetRows();
1262 int cols = LapMat.GetColumns();
1268 (*helm) = LapMat + factor * MassMat;
1309 coords[0] = (vertex == 0) ? -1.0 : 1.0;
1311 m_Ix =
m_base[0]->GetI(coords);
1317 UseLocRegionsMatrix:
1323 UseStdRegionsMatrix:
1352 returnval = StdSegExp::v_GenMatrix(mkey);
1374 ASSERTL1(&inarray[0] != &outarray[0],
1375 "inarray and outarray can not be the same");
1380 outarray[0] = inarray[1];
1381 outarray[1] = inarray[0];
1385 outarray[m] = sgn * inarray[m];
1393 outarray[
m_ncoeffs - 1 - m] = inarray[m];
1397 ASSERTL0(
false,
"This basis is not allowed in this method");
1418 out = (*matsys) * in;
#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.
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
std::map< int, NormalVector > m_traceNormals
std::map< int, Array< OneD, NekDouble > > m_elmtBndNormDirElmtLen
the element length in each element boundary(Vertex, edge or face) normal direction calculated based o...
SpatialDomains::GeometrySharedPtr GetGeom() const
SpatialDomains::GeometrySharedPtr m_geom
ExpansionSharedPtr GetLeftAdjacentElementExp() const
int GetLeftAdjacentElementTrace() const
SpatialDomains::GeomFactorsSharedPtr m_metricinfo
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
virtual void v_LaplacianMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
virtual void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Forward transform from physical quadrature space stored in inarray and evaluate the expansion coeffic...
virtual StdRegions::StdExpansionSharedPtr v_GetLinStdExp(void) const override
virtual void v_GetTracePhysVals(const int edge, const StdRegions::StdExpansionSharedPtr &EdgeExp, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, StdRegions::Orientation orient) override
virtual void v_PhysDeriv_s(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_ds) override
Evaluate the derivative along a line: . The derivative is calculated performing the product .
virtual int v_GetNumPoints(const int dir) const
virtual void v_GetVertexPhysVals(const int vertex, const Array< OneD, const NekDouble > &inarray, NekDouble &outarray) override
virtual NekDouble v_StdPhysEvaluate(const Array< OneD, const NekDouble > &Lcoord, const Array< OneD, const NekDouble > &physvals) override
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 void v_NormVectorIProductWRTBase(const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray) override
DNekScalMatSharedPtr CreateMatrix(const MatrixKey &mkey)
virtual int v_GetCoordim() override
virtual StdRegions::StdExpansionSharedPtr v_GetStdExp(void) const override
virtual void v_FwdTransBndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
Inner product of inarray over region with respect to the expansion basis (this)->_Base[0] and return ...
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey) override
LibUtilities::NekManager< MatrixKey, DNekScalBlkMat, MatrixKey::opLess > m_staticCondMatrixManager
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray) override
Integrate the physical point list inarray over region and return the value.
virtual void v_HelmholtzMatrixOp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const StdRegions::StdMatrixKey &mkey) override
virtual void v_PhysDeriv_n(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_dn) override
Evaluate the derivative normal to a line: . The derivative is calculated performing the product .
virtual void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int mode_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType) override
Unpack data from input file assuming it comes from.
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) override
Evaluate the derivative at the physical quadrature points given by inarray and return in outarray.
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3) override
virtual DNekScalBlkMatSharedPtr v_GetLocStaticCondMatrix(const MatrixKey &mkey) override
void MultiplyByElmtInvMass(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual int v_NumBndryCoeffs() const override
LibUtilities::NekManager< MatrixKey, DNekScalMat, MatrixKey::opLess > m_matrixManager
virtual NekDouble v_PhysEvaluate(const Array< OneD, const NekDouble > &coord, const Array< OneD, const NekDouble > &physvals) override
virtual void v_GetTracePhysMap(const int vertex, Array< OneD, int > &map) override
virtual int v_NumDGBndryCoeffs() const override
virtual DNekMatSharedPtr v_CreateStdMatrix(const StdRegions::StdMatrixKey &mkey) override
virtual void v_SetCoeffsToOrientation(StdRegions::Orientation dir, Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
void v_DropLocStaticCondMatrix(const MatrixKey &mkey) override
virtual DNekScalMatSharedPtr v_GetLocMatrix(const MatrixKey &mkey) override
virtual void v_GetCoord(const Array< OneD, const NekDouble > &Lcoords, Array< OneD, NekDouble > &coords) override
virtual void v_AddVertexPhysVals(const int vertex, const NekDouble &inarray, Array< OneD, NekDouble > &outarray)
virtual int v_GetNcoeffs(void) const
virtual const LibUtilities::BasisSharedPtr & v_GetBasis(int dir) const
virtual SpatialDomains::GeomType v_MetricInfoType()
virtual void v_ComputeTraceNormal(const int vertex) override
virtual const Array< OneD, const NekDouble > & v_GetPhysNormals(void) override
virtual void v_IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray) override
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.
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.
DNekMatSharedPtr GetStdMatrix(const StdMatrixKey &mkey)
const LibUtilities::PointsKeyVector GetPointsKeys() const
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)
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
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
The above copyright notice and this permission notice shall be included.
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
static Array< OneD, Array< OneD, NekDouble > > NullNekDoubleArrayOfArray
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 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 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*x.
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.
scalarT< T > sqrt(scalarT< T > in)