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;
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
real_t BG[2][MQ1*MD1];
51 MFEM_SHARED
real_t XY[2][NBZ][MD1*MD1];
52 MFEM_SHARED
real_t DQ[4][NBZ][MD1*MQ1];
53 MFEM_SHARED
real_t 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);
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).
static MemoryType GetDeviceMemoryType()
Get the current Device MemoryType. This is the MemoryType used by most MFEM classes when allocating m...
Structure representing the matrices/tensors needed to evaluate (in reference space) the values,...
Array< real_t > G
Gradients/divergences/curls of basis functions evaluated at quadrature points.
@ TENSOR
Tensor product representation using 1D matrices/tensors with dimensions using 1D number of quadrature...
Array< real_t > B
Basis functions evaluated at quadrature points.
int ndof
Number of degrees of freedom = number of basis functions. When mode is TENSOR, this is the 1D number.
int nqpt
Number of quadrature points. When mode is TENSOR, this is the 1D number.
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
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.
Mesh * GetMesh() const
Returns the mesh.
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...
int GetNPoints() const
Returns the number of the points in the integration rule.
int GetNE() const
Returns number of elements.
int Height() const
Get the height (size of output) of the Operator. Synonym with NumRows().
virtual void Mult(const Vector &x, Vector &y) const =0
Operator application: y=A(x).
const IntegrationRule & ir
real_t MinDetJpr_2D(const FiniteElementSpace *, const Vector &) const
virtual const real_t * Read(bool on_dev=true) const
Shortcut for mfem::Read(vec.GetMemory(), vec.Size(), on_dev).
virtual void UseDevice(bool use_dev) const
Enable execution of Vector operations using the mfem::Device.
real_t Min() const
Returns the minimal element of the vector.
virtual real_t * Write(bool on_dev=true)
Shortcut for mfem::Write(vec.GetMemory(), vec.Size(), on_dev).
MFEM_HOST_DEVICE T Det(const T *data)
Compute the determinant of a square matrix of size dim with given data.
MFEM_REGISTER_TMOP_KERNELS(void, DatcSize, const int NE, const int ncomp, const int sizeidx, const real_t input_min_size, const DenseMatrix &w_, const Array< real_t > &b_, const Vector &x_, const Vector &nc_reduce, DenseTensor &j_, const int d1d, const int q1d)
MFEM_HOST_DEVICE DeviceTensor< sizeof...(Dims), T > Reshape(T *ptr, Dims... dims)
Wrap a pointer as a DeviceTensor with automatically deduced template parameters.
void forall_2D_batch(int N, int X, int Y, int BZ, lambda &&body)
ElementDofOrdering
Constants describing the possible orderings of the DOFs in one element.
@ LEXICOGRAPHIC
Lexicographic ordering for tensor-product FiniteElements.