12 #include "../tmop.hpp" 14 #include "../tmop_tools.hpp" 15 #include "../../general/forall.hpp" 16 #include "../../linalg/kernels.hpp" 30 constexpr
int DIM = 2;
31 constexpr
int NBZ = 1;
33 const int D1D = T_D1D ? T_D1D : d1d;
34 const int Q1D = T_Q1D ? T_Q1D : q1d;
42 MFEM_FORALL_2D(e, NE, Q1D, Q1D, NBZ,
44 const int D1D = T_D1D ? T_D1D : d1d;
45 const int Q1D = T_Q1D ? T_Q1D : q1d;
46 constexpr
int NBZ = 1;
47 constexpr
int MQ1 = T_Q1D ? T_Q1D : T_MAX;
48 constexpr
int MD1 = T_D1D ? T_D1D : T_MAX;
50 MFEM_SHARED
double BG[2][MQ1*MD1];
51 MFEM_SHARED
double XY[2][NBZ][MD1*MD1];
52 MFEM_SHARED
double DQ[4][NBZ][MD1*MQ1];
53 MFEM_SHARED
double QQ[4][NBZ][MQ1*MQ1];
55 kernels::internal::LoadX<MD1,NBZ>(e,D1D,X,XY);
56 kernels::internal::LoadBG<MD1,MQ1>(D1D,Q1D,
b,g,BG);
58 kernels::internal::GradX<MD1,MQ1,NBZ>(D1D,Q1D,BG,XY,DQ);
59 kernels::internal::GradY<MD1,MQ1,NBZ>(D1D,Q1D,BG,DQ,QQ);
61 MFEM_FOREACH_THREAD(qy,y,Q1D)
63 MFEM_FOREACH_THREAD(qx,x,Q1D)
66 kernels::internal::PullGrad<MQ1,NBZ>(Q1D,qx,qy,QQ,J);
67 E(qx,qy,e) = kernels::Det<2>(J);
87 const int D1D = maps.
ndof;
88 const int Q1D = maps.
nqpt;
89 const int id = (D1D << 4 ) | Q1D;
96 MFEM_LAUNCH_TMOP_KERNEL(MinDetJpr_Kernel_2D,
id,NE,B,G,XE,E);
const T * Read(bool on_dev=true) const
Shortcut for mfem::Read(a.GetMemory(), a.Size(), on_dev).
int GetNPoints() const
Returns the number of the points in the integration rule.
const IntegrationRule & ir
Tensor product representation using 1D matrices/tensors with dimensions using 1D number of quadrature...
virtual void UseDevice(bool use_dev) const
Enable execution of Vector operations using the mfem::Device.
int nqpt
Number of quadrature points. When mode is TENSOR, this is the 1D number.
double MinDetJpr_2D(const FiniteElementSpace *, const Vector &) const
int ndof
Number of degrees of freedom = number of basis functions. When mode is TENSOR, this is the 1D number...
virtual const double * Read(bool on_dev=true) const
Shortcut for mfem::Read(vec.GetMemory(), vec.Size(), on_dev).
virtual void Mult(const Vector &x, Vector &y) const =0
Operator application: y=A(x).
virtual const FiniteElement * GetFE(int i) const
Returns pointer to the FiniteElement in the FiniteElementCollection associated with i'th element in t...
const ElementRestrictionOperator * GetElementRestriction(ElementDofOrdering e_ordering) const
Return an Operator that converts L-vectors to E-vectors.
virtual const DofToQuad & GetDofToQuad(const IntegrationRule &ir, DofToQuad::Mode mode) const
Return a DofToQuad structure corresponding to the given IntegrationRule using the given DofToQuad::Mo...
virtual double * Write(bool on_dev=true)
Shortcut for mfem::Write(vec.GetMemory(), vec.Size(), on_dev).
static MemoryType GetDeviceMemoryType()
Get the current Device MemoryType. This is the MemoryType used by most MFEM classes when allocating m...
MFEM_REGISTER_TMOP_KERNELS(void, DatcSize, const int NE, const int ncomp, const int sizeidx, const DenseMatrix &w_, const Array< double > &b_, const Vector &x_, DenseTensor &j_, const int d1d, const int q1d)
Mesh * GetMesh() const
Returns the mesh.
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
double Min() const
Returns the minimal element of the vector.
int Height() const
Get the height (size of output) of the Operator. Synonym with NumRows().
Structure representing the matrices/tensors needed to evaluate (in reference space) the values...
Array< double > B
Basis functions evaluated at quadrature points.
int GetNE() const
Returns number of elements.
ElementDofOrdering
Constants describing the possible orderings of the DOFs in one element.
Array< double > G
Gradients/divergences/curls of basis functions evaluated at quadrature points.
Lexicographic ordering for tensor-product FiniteElements.
MFEM_HOST_DEVICE DeviceTensor< sizeof...(Dims), T > Reshape(T *ptr, Dims... dims)
Wrap a pointer as a DeviceTensor with automatically deduced template parameters.