15 #include "../general/forall.hpp"
17 #include "libceed/ceed.hpp"
42 trialFes(
a->FESpace()),
89 const int integratorCount = integrators.
Size();
90 for (
int i = 0; i < integratorCount; ++i)
92 integrators[i]->AssemblePA(*
a->
FESpace());
96 const int intFaceIntegratorCount = intFaceIntegrators.
Size();
97 for (
int i = 0; i < intFaceIntegratorCount; ++i)
99 intFaceIntegrators[i]->AssemblePAInteriorFaces(*
a->
FESpace());
103 const int boundFaceIntegratorCount = bdrFaceIntegrators.
Size();
104 for (
int i = 0; i < boundFaceIntegratorCount; ++i)
106 bdrFaceIntegrators[i]->AssemblePABoundaryFaces(*
a->
FESpace());
114 const int iSz = integrators.
Size();
118 for (
int i = 0; i < iSz; ++i)
120 integrators[i]->AssembleDiagonalPA(
localY);
137 for (
int i = 0; i < iSz; ++i)
139 integrators[i]->AssembleDiagonalPA(y);
179 const int iSz = integrators.
Size();
184 for (
int i = 0; i < iSz; ++i)
186 integrators[i]->AddMultPA(x, y);
193 for (
int i = 0; i < iSz; ++i)
201 const int iFISz = intFaceIntegrators.
Size();
208 for (
int i = 0; i < iFISz; ++i)
217 const int bFISz = bdrFaceIntegrators.
Size();
224 for (
int i = 0; i < bFISz; ++i)
236 const int iSz = integrators.
Size();
241 for (
int i = 0; i < iSz; ++i)
251 for (
int i = 0; i < iSz; ++i)
253 integrators[i]->AddMultTransposePA(x, y);
258 const int iFISz = intFaceIntegrators.
Size();
265 for (
int i = 0; i < iFISz; ++i)
274 const int bFISz = bdrFaceIntegrators.
Size();
281 for (
int i = 0; i < bFISz; ++i)
291 :
Operator(form->Height(), form->Width()),
a(form)
321 trialFes(form->TrialFESpace()),
322 testFes(form->TestFESpace()),
323 elem_restrict_trial(NULL),
324 elem_restrict_test(NULL)
332 const int integratorCount = integrators.
Size();
333 for (
int i = 0; i < integratorCount; ++i)
387 void PAMixedBilinearFormExtension::SetupMultInputs(
394 const double c)
const
399 elem_restrict_x->
Mult(x, localX);
434 const double c)
const
437 const int iSz = integrators.
Size();
444 for (
int i = 0; i < iSz; ++i)
466 const double c)
const
469 const int iSz = integrators.
Size();
476 for (
int i = 0; i < iSz; ++i)
int Size() const
Logical size of the array.
void FormRectangularSystemOperator(const Array< int > &trial_tdof_list, const Array< int > &test_tdof_list, Operator *&A)
Return in A a parallel (on truedofs) version of this rectangular operator (including constraints)...
int GetVSize() const
Return the number of vector dofs, i.e. GetNDofs() x GetVDim().
void MultTransposeUnsigned(const Vector &x, Vector &y) const
Compute MultTranspose without applying signs based on DOF orientations.
void SetSize(int s)
Resize the vector to size s.
Pointer to an Operator of a specified type.
void UseDevice(bool use_dev) const
Enable execution of Vector operations using the mfem::Device.
int Size() const
Returns the size of the vector.
virtual void Mult(const Vector &x, Vector &y) const =0
Operator application: y=A(x).
bool UsesTensorBasis(const FiniteElementSpace &fes)
virtual void MultTranspose(const Vector &x, Vector &y) const
Action of the transpose operator: y=A^t(x). The default behavior in class Operator is to generate an ...
void FormRectangularLinearSystem(const Array< int > &trial_tdof_list, const Array< int > &test_tdof_list, Vector &x, Vector &b, Operator *&A, Vector &X, Vector &B)
Form a column-constrained linear system using a matrix-free approach.
const Operator * GetElementRestriction(ElementDofOrdering e_ordering) const
Return an Operator that converts L-vectors to E-vectors.
Native ordering as defined by the FiniteElement.
int Height() const
Get the height (size of output) of the Operator. Synonym with NumRows().
static MemoryType GetDeviceMemoryType()
Get the current Device MemoryType. This is the MemoryType used by most MFEM classes when allocating m...
static MemoryType GetMemoryType()
(DEPRECATED) Equivalent to GetDeviceMemoryType().
virtual const Operator * GetFaceRestriction(ElementDofOrdering e_ordering, FaceType, L2FaceValues mul=L2FaceValues::DoubleValued) const
Return an Operator that converts L-vectors to E-vectors on each face.
Operator that converts FiniteElementSpace L-vectors to E-vectors.
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
void FormLinearSystem(const Array< int > &ess_tdof_list, Vector &x, Vector &b, Operator *&A, Vector &X, Vector &B, int copy_interior=0)
Form a constrained linear system using a matrix-free approach.
Vector & Set(const double a, const Vector &x)
(*this) = a * x
int height
Dimension of the output / number of rows in the matrix.
void FormSystemOperator(const Array< int > &ess_tdof_list, Operator *&A)
Return in A a parallel (on truedofs) version of this square operator.
ElementDofOrdering
Constants describing the possible orderings of the DOFs in one element.
Lexicographic ordering for tensor-product FiniteElements.
int width
Dimension of the input / number of columns in the matrix.
void Reset(OpType *A, bool own_A=true)
Reset the OperatorHandle to the given OpType pointer, A.
void SyncAliasMemory(const Vector &v)
Update the alias memory location of the vector to match v.