From cd99e292bb0ffdfa5a7fe80922f86d84e46a39fa Mon Sep 17 00:00:00 2001 From: Tzanio Date: Mon, 26 Feb 2018 17:40:19 -0800 Subject: [PATCH] Added entry in CHANGELOG. Other small changes. --- CHANGELOG | 19 +++++++++++++------ fem/fe.cpp | 2 +- fem/fe.hpp | 7 +++++-- fem/fespace.hpp | 15 +++++++++------ 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 51d65ca71e..e9a2ac2bed 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -26,6 +26,13 @@ More efficient non-conforming adaptive mesh refinement Discretization improvements --------------------------- +- Added general support for transfer of GridFunction data from one finite + element space on a coarse mesh to another finite element space on a refined + mesh (a "low-order-refined" space). The new method, GetTransferOperator in the + FiniteElementSpace class, works both in serial and parallel, and is based on a + version of the GetLocalInterpolation method in the FiniteElement class, that + allows the coarse FiniteElement to be different from the fine FiniteElement. + - Added classes for general block nonlinear finite element operators (deriving from BlockNonlinearForm and ParBlockNonlinearForm) enabling solution of nonlinear systems with multiple unknowns in different function spaces. Such @@ -37,6 +44,9 @@ Discretization improvements element space header in the NURBS mesh output, so NURBS meshes in the old format need to be updated. +- In the classes NonlinearForm and ParNonlinearForm, added support for + non-conforming AMR meshes; see also the "API changes" section. + - Added symplectic integrators of orders 1-4 for systems of first order ODEs derived from a Hamiltonian, see class SIASolver in linalg/ode.hpp. @@ -62,17 +72,14 @@ New and updated examples and miniapps NURBS meshes in the miniapps/nurbs directory. Currently the directory contains variable order NURBS versions of examples 1, 1p and 11p. -- In the classes NonlinearForm and ParNonlinearForm, added support for - non-conforming AMR meshes; see also the "API changes" section. - - Added a new miniapp: miniapps/tools/load-dc.cpp, that can be used to visualize fields saved via DataCollection classes. - Example 10p with its SUNDIALS and PETSc versions have been updated to reflect the change in the behavior of the method ParNonlinearForm::GetLocalGradient() - (see the "API changes" section) and now should work correctly on - non-conforming AMR meshes. Example 10 and its SUNDIALS version have also been - updated to support non-conforming ARM meshes. + (see the "API changes" section) and now works correctly on non-conforming AMR + meshes. Example 10 and its SUNDIALS version have also been updated to support + non-conforming ARM meshes. Miscellaneous ------------- diff --git a/fem/fe.cpp b/fem/fe.cpp index 638846c805..d0e03ce1bf 100644 --- a/fem/fe.cpp +++ b/fem/fe.cpp @@ -236,7 +236,7 @@ void ScalarFiniteElement::ScalarLocalInterpolation( ElementTransformation &Trans, DenseMatrix &I, const ScalarFiniteElement &fine_fe) const { - // General "interpolation", defined based on L2 projection + // General "interpolation", defined by L2 projection double v[Geometry::MaxDim]; Vector vv (v, Dim); diff --git a/fem/fe.hpp b/fem/fe.hpp index 65f7994ed0..a7e8b43c0f 100644 --- a/fem/fe.hpp +++ b/fem/fe.hpp @@ -339,8 +339,11 @@ public: /** @brief Return interpolation matrix, @a I, which maps dofs from a coarse element, @a fe, to the fine dofs on @a this finite element. */ /** @a Trans represents the mapping from the reference element of @a this - element into a subset of the reference space of the element @a fe. It is - assumed that both finite elements use the same MapType. */ + element into a subset of the reference space of the element @a fe, thus + allowing the "coarse" FiniteElement to be different from the "fine" + FiniteElement as when h-refinement is combined with p-refinement or + p-derefinement. It is assumed that both finite elements use the same + MapType. */ virtual void GetLocalInterpolation(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &I) const; diff --git a/fem/fespace.hpp b/fem/fespace.hpp index 7e425b049a..1c402562f6 100644 --- a/fem/fespace.hpp +++ b/fem/fespace.hpp @@ -172,10 +172,10 @@ protected: // This method assumes that this->mesh is a refinement of coarse_fes->mesh // and that the CoarseFineTransformations of this->mesh are set accordingly. - // Another assumption is that the FEs of this use the same MapType as the - // FEs of coarse_fes. Finally, it assumes that this->mesh and - // coarse_fes->mesh are NOT mixed meshes, and the spaces this and coarse_fes - // are NOT variable-order spaces. + // Another assumption is that the FEs of this use the same MapType as the FEs + // of coarse_fes. Finally, it assumes that this->mesh and coarse_fes->mesh + // are NOT mixed meshes, and that the spaces this and coarse_fes are NOT + // variable-order spaces. void GetLocalRefinementMatrices(const FiniteElementSpace &coarse_fes, DenseTensor &localP) const; @@ -453,14 +453,17 @@ public: SparseMatrix *H2L_GlobalRestrictionMatrix(FiniteElementSpace *lfes); /** @brief Construct and return an Operator that can be used to transfer - GridFunction data from the @a coarse_fes to @a this FE space. */ + GridFunction data from @a coarse_fes, defined on a coarse mesh, to @a + this FE space, defined on a refined mesh. */ /** It is assumed that the mesh of this FE space is a refinement of the mesh of @a coarse_fes and the CoarseFineTransformations returned by the method Mesh::GetRefinementTransforms() of the refined mesh are set accordingly. The Operator::Type of @a T can be set to request an Operator of the set type. Currently, only Operator::MFEM_SPARSEMAT and Operator::ANY_TYPE are supported. When Operator::ANY_TYPE is requested, the choice of the - particular Operator sub-class is left to the method. */ + particular Operator sub-class is left to the method. This method also + works in parallel because the transfer operator is local to the MPI task + when the input is a synchronized ParGridFunction. */ void GetTransferOperator(const FiniteElementSpace &coarse_fes, OperatorHandle &T) const;