All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project does not adhere to Semantic Versioning.
- We now provide a guix.scm file to easily set up a build environment
with
guix shell
. See INSTALL.md for more information. - A new cmake option
-DINSTALL_EXAMPLES=ON
can now be used to install the example programs from the src directory withmake install
. By default this option is disable, i.e. the example programs are not installed as before.
- dune-dpg now requires at least version 2.8 of the Dune core modules and has been tested to be compatible with version 2.9.
changeGridView
now works onNormalizedBasis
,InnerProduct
andBilinearForm
.
- refinedglobalbasis.hh still contained a fallback for the deprecated
BasisBuilder
namespace, which we've renamed in 0.4 toBasisFactory
in accordance with a rename in dune-functions 2.6. This lastBasisBuilder
namespace has now been removed. - The deprecated spaces
PQkDGRefinedDGBasis
,PQkSubsampledDGNodalBasis
,PQkDGSubsampledDGNodalBasis
,PQkFaceNodalBasis
andPQkTraceNodalBasis
have been removed. Instead they should be used under their new names starting with Lagrange... . - When building against dune-localfunctions 2.10, the interpolate methods of dune-dpg's LocalInterpolation classes only accept functions that are callables with one argument, returning the evaluation. The old f.evaluate(x, y) interface has been removed in dune-localfunctions 2.10 and is thus not supported anymore.
- The ASTI example programs now have a -t argument that logs the runtime of the dpg solver for each iteration and direction.
- ASTI: Logging the runtime of the scattering approximation has been disabled unless the -t option has been given.
- The amount of memory allocations for evaluating local functions has been drastically reduced by re-using the std::vector that holds those local function evaluations. This lead to more than 30% of runtime reduction for the example from Felix' thesis.
- Implemented RefinedLocalView::bound() as required by the LocalView concept as of dune-functions 2.9.
- Updated URL of dune-subgrid Git repository in our documentation.
- Fixed compilation with dune-localfunction < 2.8.
- We now require a C++17-compatible compiler, e.g. GCC 7 or later.
- dune-dpg now requires at least version 2.7 of the Dune core modules and has been tested to be compatible with version 2.8.
- The
DoerflerMarking
function now usesstd::stable_sort
instead ofstd::sort
to remove a source of potential non-determinism when there are elements with the same error estimates and only one of them gets marked. - Fix last remaining compilation warnings given by GCC 8.
- Small optimization of
intersectSubGrids
: If the maxLevel of both subgrids is different, we only need to iterate until the smaller maxLevel. - ASTI: we now have one canonical definition of the test space inner product. Previously we used different definitions depending on whether we used normalized or unnormalized spaces.
- Rename all PQk... spaces to Lagrange... .
This adds the new spaces
LagrangeDGRefinedDGBasis
,LagrangeSubsampledDGBasis
,LagrangeDGSubsampledDGBasis
,LagrangeFaceBasis
andLagrangeTraceBasis
. The old PQk... names of these spaces remain as deprecated typedefs. - Large parts of our code have been refactored for readability and to better adhere to modern C++ practices.
- The spaces
PQkDGRefinedDGBasis
,PQkSubsampledDGNodalBasis
,PQkDGSubsampledDGNodalBasis
,PQkFaceNodalBasis
andPQkTraceNodalBasis
have been deprecated. All those spaces are now available under a name starting with Lagrange... . - When building against dune-functions >= 2.8, we do not provide any
NodeIndexSet
s anymore, as those were deprecated in dune-functions 2.8. Instead there is a newindices
function in eachPreBasis
.
bindLocalIndexSets
andgetLocalIndexSets
have been removed, as IndexSets have been deprecated in dune-functions 2.6.
- Added references to Felix’ thesis and our ASTI Math. Comp. paper to the README.
- dune-dpg has been made compatible with the 2.7.0 release of the Dune core modules.
- All plotting scripts have been made compatible with Python 3.
- The dependency for dune-subgrid has been lowered to version 2.6 which should contain all the commits required by dune-dpg.
- When setting a custom output directory for the asti_* example programs, we don't append a timestamp to this directory anymore.
- The descriptions of example programs and how to run them have all been moved to doc/experiments.md.
- FindBoostHana.cmake now correctly uses the
BOOST_INCLUDEDIR
variable. It can thus find Boost::Hana now if you have a non-standard Boost include path, provided that you specify it with-DBOOST_INCLUDEDIR=…
when invoking cmake. - The
OptimalTestBasis
class has been fixed. It went unnoticed for a long time, that this class didn't compile as none of our test programs is using it anymore.
- Added description of how to plot the condition number of the discrete trial to test space mapping to experiments.md.
- ASTI: use the same test inner product independent of whether we are using unnormalized or normalized spaces.
- ErrorPlotter: actually plot the error and not its square.
- Fixed plots that had the x label cut off at the bottom.
- A simpler interface to create (bi)linear forms and inner products
has been added. This tries to be less verbose than the old interface
and allows to easily use both constant coefficients and ones that
are
GridViewFunction
s. You can find examples of using the new interfaces in our example programs and in the commit notes of commit a7104b565f35c735336fda764e95d68a97258b8d. - The radiative transfer code described in Felix’ thesis has been merged. You can use the example program asti_checkerboard_normalized to recreate the results in his thesis. See doc/experiments.md for more details.
- You can now normalize the basis functions in a GlobalBasis with
respect to a given inner product by using
NormalizedBasis
orNormalizedRefinedBasis
. DPGSystemAssembler
gained a new methodapplyHomogeneousDirichletBoundary
with a simpler interface thanapplyDirichletBoundary
.- A new
ConstrainedLocalView
was added that provides the indexing methods ofConstrainedLocalIndexSet
likeDefaultLocalView
now provides indexing methods in dune-functions 2.6. - FunctionPlotter can now be used to plot functions defined over a finite element space with local grid refinement. This is useful to plot data defined in the test search space.
- dune-dpg now requires Version 2.6 of the Dune core modules. This allowed us to remove a lot of fallback code, making our code more readable and easier to maintain.
- You can now use
GridViewFunction
s as coefficients in integral terms. The quadrature order needed by a grid view function is queried by our matrix and vector assembly routines via the type traitrequiredQuadratureOrder<LocalFunction>::value
. If you write your own GridViewFunction, make sure to specializerequiredQuadratureOrder
for itsLocalFunction
. - Our own textbook implementation of the Cholesky decomposition has been replaced with the one implemented in Eigen which seems to be much more robust when the matrix is very badly conditioned.
- The
interpolate
method of all localfunctions can now be called with a function object f that implementsf(x)
instead of thef.evaluate(x,y)
interface. This is in accordance with changes in dune-localfunctions 2.7. iterateOverLocalIndexSet
has been renamed toiterateOverLocalIndices
.- The
BasisBuilder
namespace has been renamed toBasisFactory
in accordance with a rename in dune-functions 2.6. (Since we never use the members of this namespace, this rename will probably not affect you.)
- The
localIndexSet()
method ofConstrainedGlobalBasis
has been marked as deprecated.
- The workarounds for missing dune-subgrid functionality have been removed as everything is now implemented in SubGrid itself. Be sure to use at least commit 5706c70d8c4472f39e5bd61d1de1caf22381b8b9 of dune-subgrid which implements all required methods in the SubGrid class.
- The version of
make_LinearFunctionalTerm
with domainOfIntegration template argument, that has been deprecated in 0.3, has been removed. - The old
ErrorTools::DoerflerMarking
function which could choose between two residuals and which was deprecated in 0.3 has been removed.
- New
ErrorTools::l2norm
function to compute the L_2 norm of a finite element function. - New
ErrorPlotter
class to plot error estimators. - New global bases
HangingNodeLagrangeP2Basis
andHangingNodeBernsteinP2Basis
implementing P2 elements with hanging nodes. Since we only handle hanging nodes of order one, you have to make sure that neighboring cells in the grid do not vary in level by more than one. This can be assured by using dune-subgrid which by default limits the difference in level to maximally one. since dune-subgrid does not implement the whole grid interface, we defined missing functionality indune/dpg/subgrid_workarounds.hh
. - Since the new hanging node bases do not fit the GlobalBasis interface
as their index set does not implement DefaultIndexSet, we introduce a
new
ConstrainedGlobalBasis
interface. Use the auxiliary functionsiterateOverLocalIndexSet
andaddToGlobalMatrix
to conveniently handle index sets from both interfaces. - Add a Bernstein polynomial basis under the name
BernsteinPkLocalFiniteElement
with corresponding global basesBernsteinBasis
,BernsteinDGBasis
,BernsteinDGRefinedDGBasis
andHangingNodeBernsteinP2Basis
. They can be used as a more stable replacement for the standard Lagrange basis. - New functions to save grid functions before adaptive refinement and to
restore them to the refined grid, namely
attachDataToGrid
andrestoreDataToRefinedGrid
. - New function
BoundaryTools::getBoundaryMask
that marks the boundary DoFs of a global basis. This works likeBoundaryTools::getInflowBoundaryMask
but marks the complete boundary instead of only the inflow boundary and might be useful to define the boundary of an elliptical problem. - New
SkeletalLinearFunctionalTerm
that can be used to implement the second alternative for handling boundary values as given in Broersen, Dahmen, Stevenson Remark 3.6. - New
SpaceTupleView
class to use part of a tuple of spaces as a space tuple pointer. This is used e.g. in our saddle point problem example to define test and trial spaces as part of the same tuple of spaces. - New option to use a least squares solver instead of Cholesky by defining the preprocessor variable DUNE_DPG_USE_LEAST_SQUARES_INSTEAD_OF_CHOLESKY. This might help on strongly refined grids, where the Gramian in the trial to test map is so ill-conditioned that we cannot compute the Cholesky decomposition anymore. This has been observed when locally refining the unit square domain 19 times.
plot_solution.cc
now implements adaptive grid refinements. The old version on a fixed grid from v0.2.1 has been moved toplot_solution_simple.cc
.
- We now require version 2.5 of the DUNE core modules and a fully C++14 compatible compiler, e.g. GCC-6. dune-dpg is fully forward-compatible to the upcoming 2.6 release of the DUNE core modules.
SystemAssembler
,RhsAssembler
,BilinearForm
,LinearForm
andInnerProduct
now try to share spaces. This allows the user to update all spaces at once after refining the grid. To make this sharing of spaces possible, the interfaces of those classes now takeshared_ptr
s to tuples of spaces. To create suchshared_ptr
s to tuples, you can use the new functionmake_space_tuple
.- the example programs plot_solution and dune_dpg_error now require dune-subgrid to compile as they use the new hanging node bases for the trace variables now.
BoundaryTools::getInflowBoundaryValue
has been renamed toBoundaryTools::getBoundaryValue
as it also works for other boundary values. Additionally, it now takes a single boundary value function instead of a tuple of functions. SincegetBoundaryValue
takes only a single FE space, it didn’t make any sense to pass multiple boundary value functions to it.- Replace all usage of Boost::Fusion and MPL with C++14 metaprogramming. In many places we now use functions from dune/common/hybridutilities.hh or dune/common/tupleutility.hh instead. In the remaining places, where we needed to do some more complicated type computations, we now use Boost Hana. Thus our Boost dependency has been increased to Boost 1.63 or newer.
- ErrorTools: The element-wise operations are now marked as private.
- ErrorTools: Mark all methods as static. In the future, we might make ErrorTools a namespace instead of a class.
ErrorTools
andBoundaryTools
are not constructible anymore.ErrorTools::DoerflerMarking
can now be called asDoerflerMarking(grid, ratio, errorEstimates)
whereerrorEstimates
is astd::vector<std::tuple<EntitySeed, double>>&&
where each entry gives the seed of an element and its squared error estimate. You can use Dörfler marking with your own error estimators or use the functionErrorTools::squaredCellwiseResidual
to compute the error estimates.ErrorTools::computeL2error
now takes the exact solution directly instead of having it wrapped in astd::tuple
.LinearFunctionalTerm
now also works with a refined solution space.- We now check in a static_assert that
defineCharacteristicFaces
is not called with refined spaces. - Using DUNE 2.6 will use the more efficient
indices
interface which was recently added to dune-functions. This should give faster access to global indices, especially if you are using theOptimalTestBasis
class. - The boundaryValue argument of the
applyDirichletBoundaryToMatrix
method of DPGAssembler and SaddlepointAssembler has been removed as it was never used in this method. - README, INSTALL: Mention dune-uggrid instead of ug.
- Remove some noise from the API documentation and add some more documentation for previously undocumented things.
ReferenceRefinementCache
now gets shared between refined spaces.- INSTALL.md: Improve documentation of non-standard search paths.
BoundaryTools::getBoundaryValue
was mixing up local and global functions, thus giving wrong results. This has now been fixed.- The computation of
unitOuterNormal
on faces of refined finite elements was wrong and has been fixed. - Fix wrong indices when using
LinearFunctionalTerm
with more than one test space. - Fix indices in
IntegralTerm
andLinearFunctionalTerm
when both spaces are refined. - Fix a bug in the computation of
splitPoint
used in the travel distance weighted inner product. This bug might have manifested in your code by throwing an error from the Cholesky solver that said that the matrix is not symmetrical positive definite.
- The old
ErrorTools::DoerflerMarking
function which could choose between two residual has been deprecated. Instead use the new function described in the Changed section. There is now a functionErrorTools::squaredCellwiseResidual(...)
that computes the squared residual from the oldDoerflerMarking
function. Thus you can replace your old function call withErrorTools::DoerflerMarking(grid, ratio, ErrorTools::squaredCellwiseResidual(...))
.
- Remove the
make_DPGLinearForm
,make_DPG_LinearForm
andmake_Saddlepoint_LinearForm
functions, usemake_LinearForm
instead. - Remove the
refinedReferenceElement
method of refined global basis nodes. As a replacement, a new methodrefinedReferenceElementGridView
has been added that directly returns the leafGridView. - Remove the
update
method fromBufferedTestspaceCoefficientMatrix
andUnbufferedTestspaceCoefficientMatrix
. - Remove the
clone
method from all local bases. This method was never used and has been removed from all the local bases in dune-localfunctions 2.6. - Make the auxiliary class
computeIndex
a private member. This should have never been a part of the public dune-dpg API. - Remove
PQkTransportBasis
andTransportQuadratureRule
. Our code did not work with this basis for a long time so obviously nobody was using it. This allowed us to simplify the internalChooseQuadrature
interface. - Remove some unused auxiliary types.
- Lower Boost requirements to 1.56 and document that 1.60 and 1.61 cause compilation errors.
- Fix compilation with GCC 6.
- Improve the INSTALL instructions:
- Fix instructions for MacOS.
- Fix URL for UG 3.12.1.
- Describe how to use Boost 1.59 from a non-standard include path.
- Add the possibility to cache the test space coefficient matrices with the newly introduced GeometryBuffer class when using a uniform grid and constant coefficients.
- Add LinearForm to better describe the rhs functions. This allows more easily to modify the rhs than the previous tuple of functions.
- Implement the travel distance weighted inner product from Broersen, Dahmen and Stevenson, 2015.
- Add a function to do adaptive grid refinements with Dörfler marking. This is not used in our examples yet. See function DoerflerMarking in dune/dpg/errortools.hh
- Add new aposteriori error indicator ||u-lifting(theta)||_L_2^2 + conforming residual(lifting(theta))^2 used by Broersen, Dahmen and Stevenson.
- New replaceTestSpaces function to easily create BilinearForm, InnerProduct and LinearForm for computation of a posteriori errors.
- scripts/run_convergence_test.sh now takes a list of grid resolutions as argument.
- Add .editorconfig to define indentations, etc (see http://editorconfig.org for more information)
- Split SystemAssembler into DPGSystemAssembler and SaddlepointSystemAssembler.
- Compute near optimal test spaces like in Roberts 2014. This gives a significant speedup and simplifies the interface of make_DPGSystemAssembler.
- Add new test program to profile the runtime difference between buffered and unbuffered test space coefficient matrices.
- CMake now complains if Boost Fusion is older than 1.59.
- Bump CMake dependency to 2.8.12 to be compatible with latest Dune requirements.
- Remove now unused template parameter FormulationType from BilinearForm.
- Add dummy implementation for partial() in local bases for newer versions of dune-localfunctions.
- Improve documentation in INSTALL and README.
- Completely rewritten build instructions can now be found in INSTALL.
- Describe the example programs more detailedly in README.
- plot_solution gained additional parameters c, betaX and betaY that are used to specify the parameters of the transport problem to solve.
- Renamed variables in plot_solution to be compatible with the paper.
- Boost Fusion is now marked as a required dependency and will not appear under unfound packages in cmake.
- Don’t try to install the removed header pqksubsamplednodalbasis.hh.
- Fixed remaining pedantic warnings (except for the deprecation warnings generated by dune-grid which are out of our control).
- dune-dpg has been made compatible with Dune 2.4.1.
- The definition of BOOST_FUSION_INVOKE_PROCEDURE_MAX_ARITY has been moved to config.h.cmake.
- Consistently name tuples of spaces, localViews etc. with plural s to distinguish them from single objects.
- A bug in the computation of the right hand side for refined test spaces has been fixed. This also fixed the wrong results we were getting from the a posteriori estimator when using refined a posteriori test spaces.
- Added some missing #includes and removed unused ones.
- Fixed a lot of pedantic warnings like signed–unsigned comparison and unused variables.
- initial release, compatible with Dune 2.4.0