22 :
Operator(nlf->FESpace()->GetVSize()), nlf(nlf) { }
27 dnfi(*nlf->GetDNFI()),
46 for (
int i = 0; i <
dnfi.Size(); i++)
48 energy +=
dnfi[i]->GetLocalStateEnergyPA(
xe);
57 "face integrators are not supported yet");
59 for (
int i = 0; i <
dnfi.Size(); ++i) {
dnfi[i]->AssemblePA(
fes); }
68 for (
int i = 0; i <
dnfi.Size(); ++i) {
dnfi[i]->AddMultPA(
xe,
ye); }
75 for (
int i = 0; i <
dnfi.Size(); ++i)
77 dnfi[i]->AddMultPA(x, y);
101void PANonlinearFormExtension::Gradient::AssembleGrad(
const Vector &g)
104 for (
int i = 0; i < ext.
dnfi.Size(); ++i)
106 ext.
dnfi[i]->AssembleGradPA(ext.
xe, ext.
fes);
110void PANonlinearFormExtension::Gradient::Mult(
const Vector &x, Vector &y)
const
113 ext.elemR->Mult(x, ext.xe);
114 for (
int i = 0; i < ext.dnfi.Size(); ++i)
116 ext.dnfi[i]->AddMultGradPA(ext.xe, ext.ye);
118 ext.elemR->MultTranspose(ext.ye, y);
121void PANonlinearFormExtension::Gradient::AssembleDiagonal(Vector &diag)
const
123 MFEM_ASSERT(diag.Size() ==
Height(),
124 "Vector for holding diagonal has wrong size!");
126 for (
int i = 0; i < ext.dnfi.Size(); ++i)
128 ext.dnfi[i]->AssembleGradDiagonalPA(ext.ye);
130 ext.elemR->MultTranspose(ext.ye, diag);
133void PANonlinearFormExtension::Gradient::Update()
158 const int Ni = integrators.
Size();
159 for (
int i = 0; i < Ni; ++i)
161 integrators[i]->AssembleMF(
fes);
168 const int iSz = integrators.
Size();
174 for (
int i = 0; i < iSz; ++i)
184 for (
int i = 0; i < iSz; ++i)
186 integrators[i]->AddMultMF(x, y);
int Size() const
Return the logical size of the array.
static MemoryType GetMemoryType()
(DEPRECATED) Equivalent to GetDeviceMemoryType().
const ElementRestrictionOperator * GetElementRestriction(ElementDofOrdering e_ordering) const
Return an Operator that converts L-vectors to E-vectors.
int GetVSize() const
Return the number of vector dofs, i.e. GetNDofs() x GetVDim().
int width
Dimension of the input / number of columns in the matrix.
int Height() const
Get the height (size of output) of the Operator. Synonym with NumRows().
int height
Dimension of the output / number of rows in the matrix.
virtual void Mult(const Vector &x, Vector &y) const =0
Operator application: y=A(x).
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 ...
virtual void UseDevice(bool use_dev) const
Enable execution of Vector operations using the mfem::Device.
void SetSize(int s)
Resize the vector to size s.
bool DeviceCanUseCeed()
Function that determines if a CEED kernel should be used, based on the current mfem::Device configura...
ElementDofOrdering
Constants describing the possible orderings of the DOFs in one element.
@ LEXICOGRAPHIC
Lexicographic ordering for tensor-product FiniteElements.