35 #include <boost/core/ignore_unused.hpp> 45 namespace LocalRegions
49 m_metricinfo(m_geom->GetGeomFactors())
58 int nDim =
m_base.num_elements();
59 string type =
"regular";
66 err << nDim <<
"D " << type <<
" Jacobian not positive " 67 <<
"(element ID = " <<
m_geom->GetGlobalID() <<
") " 68 <<
"(first vertex ID = " <<
m_geom->GetVid(0) <<
")";
107 const std::vector<unsigned int > &nummodes,
108 const int nmodes_offset,
110 std::vector<LibUtilities::BasisType> &fromType)
117 const std::shared_ptr<Expansion> &EdgeExp,
127 const std::shared_ptr<Expansion> &EdgeExp,
136 const std::shared_ptr<Expansion> &FaceExp,
150 v_DGDeriv(dir, inarray, EdgeExp, coeffs, outarray);
189 boost::ignore_unused(mkey);
241 const int expDim =
m_base.num_elements();
248 for (
int i = 0; i < expDim; ++i)
250 CBasis[i] =
m_geom->GetXmap()->GetBasis(i);
251 nqGeom *= CBasis[i]->GetNumPoints();
252 doCopy = doCopy &&
m_base[i]->GetBasisKey().SamePoints(
253 CBasis[i]->GetBasisKey());
262 for (
int i = 0; i <
m_geom->GetCoordim(); ++i)
264 m_geom->GetXmap()->BwdTrans(
m_geom->GetCoeffs(i), tmp[i]);
269 for (
int i = 0; i <
m_geom->GetCoordim(); ++i)
272 m_geom->GetXmap()->BwdTrans(
m_geom->GetCoeffs(i), tmpGeom);
279 CBasis[0]->GetPointsKey(), &tmpGeom[0],
280 m_base[0]->GetPointsKey(), &tmp[i][0]);
286 CBasis[0]->GetPointsKey(),
287 CBasis[1]->GetPointsKey(),
289 m_base[0]->GetPointsKey(),
290 m_base[1]->GetPointsKey(),
297 CBasis[0]->GetPointsKey(),
298 CBasis[1]->GetPointsKey(),
299 CBasis[2]->GetPointsKey(),
301 m_base[0]->GetPointsKey(),
302 m_base[1]->GetPointsKey(),
303 m_base[2]->GetPointsKey(),
317 int shapedim = dfdir.num_elements();
319 int nqtot = direction.num_elements()/coordim;
321 for(
int j = 0; j < shapedim; j++)
324 for (
int k = 0; k < coordim; k++)
329 &df[shapedim*k+j][0], 1,
330 &direction[k*nqtot], 1,
338 &direction[k*nqtot], 1,
354 int nquad0, nquad1, nquad2;
360 nquad0 =
m_base[0]->GetNumPoints();
361 nquad1 =
m_base[1]->GetNumPoints();
362 nqtot = nquad0*nquad1;
367 nquad0 =
m_base[0]->GetNumPoints();
368 nquad1 =
m_base[1]->GetNumPoints();
369 nquad2 =
m_base[2]->GetNumPoints();
370 nqtot = nquad0 * nquad1 * nquad2;
398 for (
int k = 0; k < coordim; k++)
400 StdRegions::VarCoeffMap::const_iterator MFdir =
401 varcoeffs.find(MMFCoeffs[5*dir+k]);
436 StdRegions::VarCoeffMap::const_iterator MFdir =
437 varcoeffs.find(MMFCoeffs[5*dir+indxDiv]);
469 StdRegions::VarCoeffMap::const_iterator MFdir = varcoeffs.find(MMFCoeffs[5*dir+indxMag]);
480 boost::ignore_unused(r_bnd, matrixType);
488 boost::ignore_unused(r_bnd);
495 const std::vector<unsigned int > &nummodes,
496 const int nmodes_offset,
498 std::vector<LibUtilities::BasisType> &fromType)
500 boost::ignore_unused(data, nummodes, nmodes_offset,
507 const std::shared_ptr<Expansion> &EdgeExp,
512 boost::ignore_unused(edge, EdgeExp, Fx, Fy, outarray);
518 const std::shared_ptr<Expansion> &EdgeExp,
522 boost::ignore_unused(edge, EdgeExp, Fn, outarray);
528 const std::shared_ptr<Expansion> &FaceExp,
532 boost::ignore_unused(face, FaceExp, Fn, outarray);
543 boost::ignore_unused(dir, inarray, EdgeExp, coeffs, outarray);
550 boost::ignore_unused(vec);
void ComputeLaplacianMetric()
virtual NekDouble v_VectorFlux(const Array< OneD, Array< OneD, NekDouble > > &vec)
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
std::vector< PointsKey > PointsKeyVector
NekDouble VectorFlux(const Array< OneD, Array< OneD, NekDouble > > &vec)
DNekMatSharedPtr BuildTransformationMatrix(const DNekScalMatSharedPtr &r_bnd, const StdRegions::MatrixType matrixType)
LibUtilities::ShapeType DetShapeType() const
This function returns the shape of the expansion domain.
std::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
void ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int nmodes_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
SpatialDomains::GeometrySharedPtr GetGeom() const
std::shared_ptr< GeomFactors > GeomFactorsSharedPtr
Pointer to a GeomFactors object.
void MultiplyByStdQuadratureMetric(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_MultiplyByQuadratureMetric(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
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
SpatialDomains::GeomFactorsSharedPtr m_metricinfo
static DNekScalMatSharedPtr NullDNekScalMatSharedPtr
DNekMatSharedPtr BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
std::map< ConstFactorType, NekDouble > ConstFactorMap
std::shared_ptr< DNekMat > DNekMatSharedPtr
SpatialDomains::GeometrySharedPtr m_geom
virtual DNekMatSharedPtr v_BuildTransformationMatrix(const DNekScalMatSharedPtr &r_bnd, const StdRegions::MatrixType matrixType)
virtual DNekMatSharedPtr v_BuildVertexMatrix(const DNekScalMatSharedPtr &r_bnd)
virtual void v_ExtractDataToCoeffs(const NekDouble *data, const std::vector< unsigned int > &nummodes, const int nmodes_offset, NekDouble *coeffs, std::vector< LibUtilities::BasisType > &fromType)
static DNekMatSharedPtr NullDNekMatSharedPtr
const LibUtilities::PointsKeyVector GetPointsKeys() const
void Interp2D(const BasisKey &fbasis0, const BasisKey &fbasis1, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, Array< OneD, NekDouble > &to)
this function interpolates a 2D function evaluated at the quadrature points of the 2D basis...
Expansion(SpatialDomains::GeometrySharedPtr pGeom)
virtual void v_ComputeLaplacianMetric()
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
virtual void v_GetCoords(Array< OneD, NekDouble > &coords_1, Array< OneD, NekDouble > &coords_2, Array< OneD, NekDouble > &coords_3)
Array< OneD, NekDouble > v_GetMFMag(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
std::shared_ptr< Geometry > GeometrySharedPtr
Array< OneD, NekDouble > v_GetMF(const int dir, const int shapedim, const StdRegions::VarCoeffMap &varcoeffs)
virtual DNekScalMatSharedPtr v_GetLocMatrix(const LocalRegions::MatrixKey &mkey)
void DGDeriv(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, Array< OneD, NekDouble > > &coeffs, Array< OneD, NekDouble > &outarray)
const SpatialDomains::GeomFactorsSharedPtr & GetMetricInfo() const
virtual void v_AddFaceNormBoundaryInt(const int face, const std::shared_ptr< Expansion > &FaceExp, const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
virtual void v_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)
Array< OneD, NekDouble > v_GetMFDiv(const int dir, const StdRegions::VarCoeffMap &varcoeffs)
DNekScalMatSharedPtr GetLocMatrix(const LocalRegions::MatrixKey &mkey)
void AddFaceNormBoundaryInt(const int face, const std::shared_ptr< Expansion > &FaceExp, const Array< OneD, const NekDouble > &Fn, Array< OneD, NekDouble > &outarray)
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)
void Interp3D(const BasisKey &fbasis0, const BasisKey &fbasis1, const BasisKey &fbasis2, const Array< OneD, const NekDouble > &from, const BasisKey &tbasis0, const BasisKey &tbasis1, const BasisKey &tbasis2, Array< OneD, NekDouble > &to)
this function interpolates a 3D function evaluated at the quadrature points of the 3D basis...
void ComputeGmatcdotMF(const Array< TwoD, const NekDouble > &df, const Array< OneD, const NekDouble > &direction, Array< OneD, Array< OneD, NekDouble > > &dfdir)
virtual void v_DGDeriv(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, ExpansionSharedPtr > &EdgeExp, Array< OneD, Array< OneD, NekDouble > > &coeffs, Array< OneD, NekDouble > &outarray)
Geometry is straight-sided with constant geometric factors.
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 ...
void ComputeQuadratureMetric()
StdExpansion()
Default Constructor.
int GetTotPoints() const
This function returns the total number of quadrature points used in the element.
GeomType
Indicates the type of element geometry.
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
Array< OneD, LibUtilities::BasisSharedPtr > m_base
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Geometry is curved or has non-constant factors.
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.