35 #include <boost/core/ignore_unused.hpp>
49 namespace LocalRegions
52 StdExpansion(),
Expansion(pGeom), StdExpansion2D()
64 "Routine only set up for two-dimensions");
74 for (
int i = 0; i < nedges;++i)
80 if (edgeExp->GetRightAdjacentElementExp())
82 if (edgeExp->GetRightAdjacentElementExp()->GetGeom()
83 ->GetGlobalID() ==
GetGeom()->GetGlobalID())
95 int nquad_e = min(EdgeExp->GetNumPoints(0),
96 int(normals[0].size()));
98 int nEdgePts = EdgeExp->GetTotPoints();
100 Vmath::Vmul (nquad_e, normals[0], 1, Fx, 1, edgePhys, 1);
101 Vmath::Vvtvp(nquad_e, normals[1], 1, Fy, 1, edgePhys, 1,
108 if (locExp->GetRightAdjacentElementExp()->GetGeom()->GetGlobalID()
131 for (i = 0; i < nedges; ++i)
137 if (edgeExp->GetRightAdjacentElementExp())
139 if (edgeExp->GetRightAdjacentElementExp()->GetGeom()
140 ->GetGlobalID() ==
GetGeom()->GetGlobalID())
155 int order_e = map->size();
157 int n_coeffs = EdgeExp->GetNcoeffs();
160 if(n_coeffs!=order_e)
162 EdgeExp->FwdTrans(Fn, edgeCoeffs);
172 LibUtilities::BasisKey bkey_ortho(btype,EdgeExp->GetBasis(0)->GetNumModes(),EdgeExp->GetBasis(0)->GetPointsKey());
173 LibUtilities::BasisKey bkey(EdgeExp->GetBasis(0)->GetBasisType(),EdgeExp->GetBasis(0)->GetNumModes(),EdgeExp->GetBasis(0)->GetPointsKey());
177 for(i = order_e; i < n_coeffs; i++)
185 EdgeExp->MassMatrixOp(edgeCoeffs, edgeCoeffs, masskey);
189 EdgeExp->IProductWRTBase(Fn, edgeCoeffs);
200 if(EdgeExp->GetBasis(0)->GetBasisType() !=
204 for(i = 0; i < order_e; ++i)
206 outarray[(*map)[i].index] +=
207 (*map)[i].sign * edgeCoeffs[i];
212 int nCoeffs0, nCoeffs1;
226 nCoeffs1 =
m_base[1]->GetNumModes();
228 for(i = 0; i < order_e; ++i)
230 for(j = 0; j < nCoeffs1; j++)
232 outarray[(*map)[i].index + j*order_e] +=
233 mat_gauss->GetPtr()[j]*
234 (*map)[i].sign*edgeCoeffs[i];
241 nCoeffs0 =
m_base[0]->GetNumModes();
243 for(i = 0; i < order_e; ++i)
245 for(j = 0; j < nCoeffs0; j++)
247 outarray[(*map)[i].index - j] +=
248 mat_gauss->GetPtr()[order_e - 1 -j]*
249 (*map)[i].sign*edgeCoeffs[i];
256 nCoeffs1 =
m_base[1]->GetNumModes();
258 for(i = 0; i < order_e; ++i)
260 for(j = 0; j < nCoeffs1; j++)
262 outarray[(*map)[i].index - j*order_e] +=
263 mat_gauss->GetPtr()[order_e - 1 - j]*
264 (*map)[i].sign*edgeCoeffs[i];
271 nCoeffs0 =
m_base[0]->GetNumModes();
273 for(i = 0; i < order_e; ++i)
275 for(j = 0; j < nCoeffs0; j++)
277 outarray[(*map)[i].index + j] +=
278 mat_gauss->GetPtr()[j]*
279 (*map)[i].sign*edgeCoeffs[i];
285 ASSERTL0(
false,
"edge value (< 3) is out of range");
299 for(i = 0; i < nedges; ++i)
303 e_tmp = inout + cnt);
324 for(e = 0; e < nedges; ++e)
326 order_e = EdgeExp[e]->GetNcoeffs();
327 nquad_e = EdgeExp[e]->GetNumPoints(0);
334 for(i = 0; i < order_e; ++i)
336 edgeCoeffs[i] = inarray[i+cnt];
340 EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
389 for(e = 0; e < nedges; ++e)
391 nquad_e = EdgeExp[e]->GetNumPoints(0);
397 EdgeExp[e]->BwdTrans(edgeCoeffs[e], edgePhys);
399 Vmath::Vmul(nquad_e, normals[dir], 1, edgePhys, 1, edgePhys, 1);
417 int order_e = EdgeExp->GetNcoeffs();
418 int nquad_e = EdgeExp->GetNumPoints(0);
428 StdRegions::VarCoeffMap::const_iterator x;
431 if ((x = varcoeffs.find(VarCoeff[0])) != varcoeffs.end())
435 edge, EdgeExp, x->second, work);
436 Vmath::Vmul(nquad_e, work, 1, edgePhys, 1, edgePhys, 1);
439 EdgeExp->IProductWRTBase(edgePhys, coeff);
442 for(i = 0; i < order_e; ++i)
444 outarray[map[i]] +=
sign[i]*coeff[i];
458 ASSERTL0(&inarray[0] != &outarray[0],
459 "Input and output arrays use the same memory");
466 for(e = 0; e < nedges; ++e)
468 order_e = EdgeExp[e]->GetNcoeffs();
472 Vmath::Vcopy(order_e, tmp = inarray + cnt, 1, edgeCoeffs, 1);
473 EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
475 tau, e, EdgeExp, edgePhys, dirForcing, outarray);
494 int nquad_e = EdgeExp[edge]->GetNumPoints(0);
495 int order_e = EdgeExp[edge]->GetNcoeffs();
530 StdRegions::VarCoeffMap::const_iterator x;
532 if ((x = varcoeffs.find(VarCoeff[0])) != varcoeffs.end())
536 edge, EdgeExp[edge], x->second, work);
537 Vmath::Vmul(nquad_e, work, 1, edgePhys, 1, edgePhys, 1);
543 EdgeExp[edge]->IProductWRTBase(edgePhys, outcoeff);
545 for(i = 0; i < order_e; ++i)
547 outarray[emap[i]] +=
sign[i] * tau * outcoeff[i];
557 for(n = 0; n < coordim; ++n)
575 Vmath::Vmul(nquad_e, ncdotMF_e, 1, edgePhys, 1, inval, 1);
579 Vmath::Vmul(nquad_e, normals[n], 1, edgePhys, 1, inval, 1);
592 EdgeExp[edge]->IProductWRTBase(inval, outcoeff);
595 for(i = 0; i < ncoeffs; ++i)
598 for(j = 0; j < order_e; ++j)
600 tmpcoeff[i] += (*invMass)(i,emap[j]) *
sign[j]
620 Coeffs = Coeffs + Dmat*Tmpcoeff;
624 if(varcoeffs.find(VarCoeff[n]) != varcoeffs.end())
630 Coeffs = Coeffs + Dmat*Tmpcoeff;
635 Coeffs = Coeffs + Dmat*Tmpcoeff;
663 for (
unsigned int i = 0; i < EdgeExp->GetNcoeffs(); ++i)
665 edgetmp[i] = tmp[emap[i]];
669 EdgeExp->BwdTrans(edgetmp, outarray);
690 "HybridDGHelmholtz matrix not set up "
691 "for non boundary-interior expansions");
715 DNekMat LocMat(ncoeffs,ncoeffs);
725 StdRegions::VarCoeffMap::const_iterator x;
727 for(i=0; i < coordim; ++i)
761 Mat = Mat + Dmat*invMass*
Transpose(Dmat);
777 Mat = Mat + DmatL*invMass*
Transpose(DmatR);
782 Mat = Mat + Dmat*invMass*
Transpose(Dmat);
789 Mat = Mat + lambdaval*Mass;
792 for(i = 0; i < nedges; ++i)
795 order_e = EdgeExp->GetNcoeffs();
797 int nq = EdgeExp->GetNumPoints(0);
811 for(j = 0; j < order_e; ++j)
813 for(k = 0; k < order_e; ++k)
815 Mat(emap[j],emap[k]) = Mat(emap[j],emap[k]) + tau*
sign[j]*
sign[k]*
eMass(j,k);
849 for(i = 0; i < nedges; ++i)
857 for(j = 0; j < nbndry; ++j)
874 for(k = 0; k < ncoeffs; ++k)
920 for(i = 0; i < nedges; ++i)
942 ASSERTL0(
false,
"Direction not known");
953 v_GetMF(dir,shapedim,varcoeffs);
992 for(j = 0; j < nbndry; ++j)
998 for(k = 0; k < ncoeffs; ++k)
1000 Ulam[k] = lamToU(k,j);
1017 Vmath::Vcopy(ncoeffs,&ulam[0],1,&(Qmat.GetPtr())[0]+j*ncoeffs,1);
1025 int order_e, nquad_e;
1030 StdRegions::VarCoeffMap::const_iterator x;
1072 for(i = 0; i < nedges; ++i)
1078 for(i = 0; i < nbndry; ++i)
1086 for(e = 0; e < nedges; ++e)
1088 order_e = EdgeExp[e]->GetNcoeffs();
1089 nquad_e = EdgeExp[e]->GetNumPoints(0);
1106 for(j = 0; j < order_e; ++j)
1108 edgeCoeffs[j] =
sign[j]*(*LamToQ[0])(emap[j],i);
1111 EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
1123 normals, varcoeffs);
1136 for(j = 0; j < order_e; ++j)
1138 edgeCoeffs[j] =
sign[j]*(*LamToQ[1])(emap[j],i);
1141 EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
1155 normals, varcoeffs);
1172 for(j = 0; j < order_e; ++j)
1174 edgeCoeffs[j] =
sign[j]*(*LamToQ[2])(emap[j],i);
1177 EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
1192 for(j = 0; j < order_e; ++j)
1194 edgeCoeffs[j] =
sign[j]*LamToU(emap[j],i) - lam[cnt+j];
1197 EdgeExp[e]->BwdTrans(edgeCoeffs, edgePhys);
1200 if ((x = varcoeffs.find(VarCoeff[0])) != varcoeffs.end())
1203 Vmath::Vmul(nquad_e,varcoeff_work,1,edgePhys,1,edgePhys,1);
1209 EdgeExp[e]->IProductWRTBase(work, edgeCoeffs);
1211 EdgeExp[e]->SetCoeffsToOrientation(edgedir,edgeCoeffs,edgeCoeffs);
1213 for(j = 0; j < order_e; ++j)
1215 BndMat(cnt+j,i) = edgeCoeffs[j];
1242 &(lmat->GetPtr())[0],1);
1248 ASSERTL0(
false,
"This matrix type cannot be generated from this class");
1286 Out_d = InvMass*Coeffs;
1301 "Not set up for non boundary-interior expansions");
1302 ASSERTL1(inoutmat->GetRows() == inoutmat->GetColumns(),
1303 "Assuming that input matrix was square");
1307 int order_e = edgeExp->GetNcoeffs();
1316 DNekScalMat &edgemat = *edgeExp->GetLocMatrix(mkey);
1330 int rows = inoutmat->GetRows();
1345 for(i = 0; i < order_e; ++i)
1347 for(j = 0; j < nbndry; ++j)
1349 if(map[i] == bmap[j])
1355 ASSERTL1(j != nbndry,
"Did not find number in map");
1365 for(i = 0; i < edge; ++i)
1370 for(i = 0; i < order_e; ++i)
1377 switch(edgeExp->GetBasis(0)->GetBasisType())
1380 reverse( map.get() , map.get()+order_e);
1383 reverse( map.get() , map.get()+order_e);
1387 swap(map[0],map[1]);
1388 for(i = 3; i < order_e; i+=2)
1395 ASSERTL0(
false,
"Edge boundary type not valid for this method");
1401 ASSERTL0(
false,
"Could not identify matrix type from dimension");
1404 for(i = 0; i < order_e; ++i)
1407 for(j = 0; j < order_e; ++j)
1410 (*inoutmat)(id1,id2) += edgemat(i,j)*
sign[i]*
sign[j];
1430 "Not set up for non boundary-interior expansions");
1433 int order_e = edgeExp->GetNcoeffs();
1444 DNekScalMat &edgemat = *edgeExp->GetLocMatrix(mkey);
1450 for (i = 0; i < order_e; ++i)
1452 vEdgeCoeffs[i] = incoeffs[map[i]]*
sign[i];
1455 vEdgeCoeffs = edgemat * vEdgeCoeffs;
1457 for (i = 0; i < order_e; ++i)
1459 coeffs[map[i]] += vEdgeCoeffs[i]*
sign[i];
1469 int nVerts, vid1, vid2, vMap1, vMap2;
1476 nVerts, nVerts, 0.0, storage);
1477 DNekMat &VertexMat = (*m_vertexmatrix);
1479 for (vid1 = 0; vid1 < nVerts; ++vid1)
1483 for (vid2 = 0; vid2 < nVerts; ++vid2)
1486 VertexValue = (*r_bnd)(vMap1, vMap2);
1487 VertexMat.SetValue(vid1, vid2, VertexValue);
1491 return m_vertexmatrix;
1506 map<int, int> invmap;
1507 for (j = 0; j < nBndCoeffs; ++j)
1509 invmap[bmap[j]] = j;
1525 for (n = 0; n < nEdgeCoeffs; ++n)
1527 edgemaparray[n] = invmap[maparray[n]];
1530 return edgemaparray;
1539 const int edge)
const
1541 std::map<int, NormalVector>::const_iterator x;
1544 "Edge normal not computed.");
1551 const int nq0,
const int nq1)
1553 boost::ignore_unused(nq1);
1555 if (idmap.size() != nq0)
1563 for (
int i = 0; i < nq0; ++i)
1571 for (
int i = 0; i < nq0; ++i)
1578 ASSERTL0(
false,
"Unknown orientation");
1613 int nquad_e = EdgeExp_e->GetNumPoints(0);
1615 int nquad0 =
m_base[0]->GetNumPoints();
1616 int nquad1 =
m_base[1]->GetNumPoints();
1617 int nqtot = nquad0*nquad1;
1638 StdRegions::VarCoeffMap::const_iterator MFdir;
1643 for (
int k=0; k<coordim; k++)
1645 MFdir = varcoeffs.find(MMFCoeffs[dir*5+k]);
1646 tmp = MFdir->second;
1668 Vmath::Vmul (nq, &vec[0][0], 1, &normals[0][0], 1, &Fn[0], 1);
1669 Vmath::Vvtvp(nq, &vec[1][0], 1, &normals[1][0], 1, &Fn[0], 1, &Fn[0], 1);
1670 Vmath::Vvtvp(nq, &vec[2][0], 1, &normals[2][0], 1, &Fn[0], 1, &Fn[0], 1);
1672 return StdExpansion::Integral(Fn);
#define ASSERTL0(condition, msg)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode....
#define sign(a, b)
return the sign(b)*a
Describes the specification for a Basis.
virtual void v_DGDeriv(const int dir, const Array< OneD, const NekDouble > &incoeffs, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, Array< OneD, NekDouble > > &edgeCoeffs, Array< OneD, NekDouble > &out_d)
virtual void v_AddRobinTraceContribution(const int traceid, const Array< OneD, const NekDouble > &primCoeffs, const Array< OneD, NekDouble > &incoeffs, Array< OneD, NekDouble > &coeffs)
std::vector< bool > m_requireNeg
virtual Array< OneD, NekDouble > v_GetMFDiv(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
void SetTraceToGeomOrientation(Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, NekDouble > &inout)
virtual const NormalVector & v_GetTraceNormal(const int edge) const
void v_ReOrientTracePhysMap(const StdRegions::Orientation orient, Array< OneD, int > &idmap, const int nq0, const int nq1)
virtual void v_AddEdgeNormBoundaryInt(const int edge, const ExpansionSharedPtr &EdgeExp, const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
virtual Array< OneD, NekDouble > v_GetMFMag(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
Array< OneD, unsigned int > GetTraceInverseBoundaryMap(int eid)
virtual void v_SetUpPhysNormals(const int edge)
virtual void v_AddRobinMassMatrix(const int edgeid, const Array< OneD, const NekDouble > &primCoeffs, DNekMatSharedPtr &inoutmat)
void AddNormTraceInt(const int dir, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, Array< OneD, NekDouble > > &edgeCoeffs, Array< OneD, NekDouble > &outarray)
virtual DNekMatSharedPtr v_GenMatrix(const StdRegions::StdMatrixKey &mkey)
virtual Array< OneD, NekDouble > v_GetMF(const int dir, const int shapedim, const StdRegions::VarCoeffMap &varcoeffs)
SpatialDomains::Geometry2DSharedPtr GetGeom2D() const
void AddHDGHelmholtzEdgeTerms(const NekDouble tau, const int edge, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, NekDouble > &edgePhys, const StdRegions::VarCoeffMap &dirForcing, Array< OneD, NekDouble > &outarray)
Array< OneD, NekDouble > v_GetnEdgecdotMF(const int dir, const int edge, ExpansionSharedPtr &EdgeExp_e, const Array< OneD, const Array< OneD, NekDouble > > &normals, const StdRegions::VarCoeffMap &varcoeffs)
virtual NekDouble v_VectorFlux(const Array< OneD, Array< OneD, NekDouble > > &vec)
void GetPhysEdgeVarCoeffsFromElement(const int edge, ExpansionSharedPtr &EdgeExp, const Array< OneD, const NekDouble > &varcoeff, Array< OneD, NekDouble > &outarray)
void AddEdgeBoundaryInt(const int edge, ExpansionSharedPtr &EdgeExp, Array< OneD, NekDouble > &edgePhys, Array< OneD, NekDouble > &outarray, const StdRegions::VarCoeffMap &varcoeffs=StdRegions::NullVarCoeffMap)
virtual DNekMatSharedPtr v_BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
std::map< int, NormalVector > m_edgeNormals
void AddHDGHelmholtzTraceTerms(const NekDouble tau, const Array< OneD, const NekDouble > &inarray, Array< OneD, ExpansionSharedPtr > &EdgeExp, const StdRegions::VarCoeffMap &dirForcing, Array< OneD, NekDouble > &outarray)
SpatialDomains::GeometrySharedPtr GetGeom() const
SpatialDomains::GeometrySharedPtr m_geom
std::vector< ExpansionWeakPtr > m_traceExp
Array< OneD, NekDouble > v_GetMF(const int dir, const int shapedim, const StdRegions::VarCoeffMap &varcoeffs)
ExpansionSharedPtr GetLeftAdjacentElementExp() const
const NormalVector & GetTraceNormal(const int id) const
virtual void v_ComputeTraceNormal(const int id)
int GetLeftAdjacentElementTrace() const
Array< OneD, NekDouble > v_GetMFMag(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
Array< OneD, NekDouble > v_GetMFDiv(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
void AddEdgeNormBoundaryInt(const int edge, const std::shared_ptr< Expansion > &EdgeExp, const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
virtual StdRegions::Orientation v_GetTraceOrient(int trace)
ExpansionSharedPtr GetTraceExp(const int traceid)
StdRegions::Orientation GetTraceOrient(int trace)
IndexMapValuesSharedPtr GetIndexMap(const IndexMapKey &ikey)
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
static std::shared_ptr< DataType > AllocateSharedPtr(const Args &...args)
Allocate a shared pointer from the memory pool.
void GetBoundaryMap(Array< OneD, unsigned int > &outarray)
int GetNcoeffs(void) const
This function returns the total number of coefficients used in the expansion.
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
int NumBndryCoeffs(void) const
int NumDGBndryCoeffs(void) const
int GetVertexMap(const int localVertexId, bool useCoeffPacking=false)
void IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
this function calculates the inner product of a given function f with the different modes of the expa...
int GetNtraces() const
Returns the number of trace elements connected to this element.
int GetNverts() const
This function returns the number of vertices of the expansion domain.
void GetTraceToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, Orientation traceOrient=eForwards, int P=-1, int Q=-1)
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
void GetTraceInteriorToElementMap(const int tid, Array< OneD, unsigned int > &maparray, Array< OneD, int > &signarray, const Orientation traceOrient=eForwards)
int GetTraceNcoeffs(const int i) const
This function returns the number of expansion coefficients belonging to the i-th trace.
void FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function performs the Forward transformation from physical space to coefficient space.
bool IsBoundaryInteriorExpansion()
LibUtilities::NekManager< StdMatrixKey, DNekMat, StdMatrixKey::opLess > m_stdMatrixManager
int GetBasisNumModes(const int dir) const
This function returns the number of expansion modes in the dir direction.
Array< OneD, LibUtilities::BasisSharedPtr > m_base
const ConstFactorMap & GetConstFactors() const
const VarCoeffMap & GetVarCoeffs() const
MatrixType GetMatrixType() const
const Array< OneD, const NekDouble > & GetVarCoeff(const StdRegions::VarCoeffType &coeff) const
bool HasVarCoeff(const StdRegions::VarCoeffType &coeff) const
NekDouble GetConstFactor(const ConstFactorType &factor) const
const VarCoeffMap GetVarCoeffAsMap(const VarCoeffType &coeff) const
void InterpCoeff1D(const BasisKey &fbasis0, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, Array< OneD, NekDouble > &to)
@ eGauss_Lagrange
Lagrange Polynomials using the Gauss points .
@ eGLL_Lagrange
Lagrange for SEM basis .
@ eModified_A
Principle Modified Functions .
std::shared_ptr< Expansion > ExpansionSharedPtr
std::shared_ptr< IndexMapValues > IndexMapValuesSharedPtr
std::shared_ptr< Expansion1D > Expansion1DSharedPtr
std::shared_ptr< Geometry2D > Geometry2DSharedPtr
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
@ eInvLaplacianWithUnityMean
std::map< ConstFactorType, NekDouble > ConstFactorMap
static ConstFactorMap NullConstFactorMap
The above copyright notice and this permission notice shall be included.
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
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 Neg(int n, T *x, const int incx)
Negate x = -x.
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 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)