'el_x_const' can be initialized just once in the beginning of each
method.
Allow block integrators to skip a block-vector or block-matrix
(gradient) component that is zero by setting the dimension(s) of
the respective output vector or matrix to zero.
* In the methods Mult and GetGradient, use BlockVectors to wrap the input and
output Vectors.
* Delete all temporary objects allocated in the bodies of the methods.
* Make sure the method SetSpaces works in the case when the BlockNonlinearForm
is not empty.
* Allocate the ess_vdofs arrays in SetSpaces - this way calling SetEssentialBC
is optional.
* NonlinearForm is now an Operator between true-dof vectors.
* In both classes, essential b.c. are represented internally as a list
of true dofs.
* Move the methods GetProlongation() and GetRestriction(), which are
part of the Operator interface, from class ParNonlinearForm to the
base class, NonlinearForm.
* Add doxygen documentation.
* Add a new Update() method, similar to (Par)BilinearForm.
* The method ParNonlinearForm::GetLocalGradient() does not impose
essential b.c. - they must be imposed at the true-dof level.
using the method AssembleFaceMatrix.
In class NonlinearForm, rename the data members 'dfi', 'fbfi', etc to
use the ending 'nfi' (from nonlinear form integrator) instead of 'bfi'.
In NonlinearForm::GetEnergy, replace the warning messages with abort
calls.
In the destructor of NonlinearForm, delete the NonlinearFormIntegrator
objects stored in 'fnfi' and 'bfnfi'.
Add a version of NonlinearForm::AddBdrFaceIntegrator that allows
restricting the integrator to a subset of the boundary.
In ParNonlinearForm::GetGradient, call abort when the form has face
terms - not implemented.
In class ParNonlinearForm, add the methods GetProlongation and
GetRestriction - they use the associated ParFiniteElementSpace.