31 constexpr int DIM = 2;
32 constexpr int NBZ = 1;
34 const int Q1D = T_Q1D ? T_Q1D : q1d;
41 const int Q1D = T_Q1D ? T_Q1D : q1d;
42 MFEM_FOREACH_THREAD(qy,y,Q1D)
44 MFEM_FOREACH_THREAD(qx,x,Q1D)
63 constexpr int DIM = 2;
64 constexpr int NBZ = 1;
67 const int D1D = T_D1D ? T_D1D : d1d;
68 const int Q1D = T_Q1D ? T_Q1D : q1d;
78 const int D1D = T_D1D ? T_D1D : d1d;
79 const int Q1D = T_Q1D ? T_Q1D : q1d;
81 constexpr int NBZ = 1;
82 constexpr int MQ1 = T_Q1D ? T_Q1D : T_MAX;
83 constexpr int MD1 = T_D1D ? T_D1D : T_MAX;
85 MFEM_SHARED
real_t BG[2][MQ1*MD1];
86 MFEM_SHARED
real_t XY[2][NBZ][MD1*MD1];
87 MFEM_SHARED
real_t DQ[4][NBZ][MD1*MQ1];
88 MFEM_SHARED
real_t QQ[4][NBZ][MQ1*MQ1];
90 kernels::internal::LoadX<MD1,NBZ>(e,D1D,X,XY);
91 kernels::internal::LoadBG<MD1,MQ1>(D1D,Q1D,
b,g,BG);
93 kernels::internal::GradX<MD1,MQ1,NBZ>(D1D,Q1D,BG,XY,DQ);
94 kernels::internal::GradY<MD1,MQ1,NBZ>(D1D,Q1D,BG,DQ,QQ);
96 MFEM_FOREACH_THREAD(qy,y,Q1D)
98 MFEM_FOREACH_THREAD(qx,x,Q1D)
101 const real_t *Wid = &W(0,0);
102 kernels::internal::PullGrad<MQ1,NBZ>(Q1D,qx,qy,QQ,Jtr);
120 const int NE = mesh->
GetNE();
122 if (NE == 0) {
return true; }
125 "mixed meshes are not supported");
126 MFEM_VERIFY(!fes.
IsVariableOrder(),
"variable orders are not supported");
132 const int D1D = maps.
ndof;
133 const int Q1D = maps.
nqpt;
134 const int id = (D1D << 4 ) | Q1D;
143 MFEM_LAUNCH_TMOP_KERNEL(TC_IDEAL_SHAPE_UNIT_SIZE_2D_KERNEL,
149 MFEM_VERIFY(
nodes,
"");
156 MFEM_LAUNCH_TMOP_KERNEL(TC_IDEAL_SHAPE_GIVEN_SIZE_2D_KERNEL,
160 default:
return false;
const T * Read(bool on_dev=true) const
Shortcut for mfem::Read(a.GetMemory(), a.Size(), on_dev).
Data type dense matrix using column-major storage.
const real_t * Read(bool on_dev=true) const
Shortcut for mfem::Read( GetMemory(), TotalSize(), on_dev).
Rank 3 tensor (array of matrices)
real_t * Write(bool on_dev=true)
Shortcut for mfem::Write(GetMemory(), TotalSize(), 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.
Mode
Type of data stored in the arrays B, Bt, G, and Gt.
@ 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...
bool IsVariableOrder() const
Returns true if the space contains elements of varying polynomial orders.
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.
int GetVDim() const
Returns vector dimension.
Abstract class for all finite elements.
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...
Geometry::Type GetGeomType() const
Returns the Geometry::Type of the reference element.
const DenseMatrix & GetGeomToPerfGeomJac(int GeomType) const
FiniteElementSpace * FESpace()
Class for an integration rule - an Array of IntegrationPoint.
int GetNE() const
Returns number of elements.
int Dimension() const
Dimension of the reference space used within the elements.
int GetNumGeometries(int dim) const
Return the number of geometries of the given dimension present in the mesh.
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 TargetType target_type
const GridFunction * nodes
bool ComputeAllElementTargets(const FiniteElementSpace &fes, const IntegrationRule &ir, const Vector &xe, DenseTensor &Jtr) 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.
MFEM_HOST_DEVICE void Set(const int height, const int width, const real_t alpha, const TA *Adata, TB *Bdata)
Compute B = alpha*A, where the matrices A and B are of size height x width with data Adata and Bdata.
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.