amdis-core merge requestshttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests2019-05-08T09:17:44Zhttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/53add traits to test whether a dune matrix/vector has only one component2019-05-08T09:17:44ZPraetorius, Simonadd traits to test whether a dune matrix/vector has only one componenthttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/55allow proxies to be passed to the assigner classes as output argument2019-05-08T09:17:11ZPraetorius, Simonallow proxies to be passed to the assigner classes as output argumenthttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/44Resize abstraction for matrices and vectors2019-05-04T00:29:14ZPraetorius, SimonResize abstraction for matrices and vectorshttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/45Provide access function for vectors and matrices2019-05-03T23:00:20ZPraetorius, SimonProvide access function for vectors and matricesFor a general access of matrices and vectors, using various bracket types, the MR introduces the function `access(vector, i)` and `access(matrix, i,j)` that redirects to the specific implementation. Additionally Concepts are added to tes...For a general access of matrices and vectors, using various bracket types, the MR introduces the function `access(vector, i)` and `access(matrix, i,j)` that redirects to the specific implementation. Additionally Concepts are added to test whether an object can be accessed like a vector or matrix.https://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/46add functionality to remove an added marker2019-05-03T21:51:12ZPraetorius, Simonadd functionality to remove an added markerhttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/43extend apply and for_each functions2019-05-03T16:15:35ZPraetorius, Simonextend apply and for_each functionshttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/42add cxx feature test for auto templates2019-05-03T16:15:14ZPraetorius, Simonadd cxx feature test for auto templateshttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/36added Environment for MPI initialization2019-05-03T16:14:40ZPraetorius, Simonadded Environment for MPI initializationThis MR replaces the old `AMDiS::init()` - `AMDiS::finalize()` pattern with a RAII class `Environment`, to be instantiated at the begin of the main method, i.e.
```c++
int main(int argc, char** argv)
{
Environment env(argc, argv);
...This MR replaces the old `AMDiS::init()` - `AMDiS::finalize()` pattern with a RAII class `Environment`, to be instantiated at the begin of the main method, i.e.
```c++
int main(int argc, char** argv)
{
Environment env(argc, argv);
// get MPI rank and size from environment after instantiation:
std::cout << Environment::mpiRank();
std::cout << Environment::mpiSize();
}
```
the ``finalize'' is called automatically when `env` is destructed, i.e. at the end of main().https://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/41allow parallel execution of runner tasks2019-05-03T16:12:23ZPraetorius, Simonallow parallel execution of runner taskshttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/16make eigen and mtl a system package2019-05-02T11:56:53ZPraetorius, Simonmake eigen and mtl a system packageRewrite find eigen and mtl in cmake to link against imported targets. This makes these external mackages system packages and thus compiler warning are not shown anymore. It hast to be checked which cmake version is required for this to w...Rewrite find eigen and mtl in cmake to link against imported targets. This makes these external mackages system packages and thus compiler warning are not shown anymore. It hast to be checked which cmake version is required for this to work. And it has to be checked whether we could do the same for other external packages in dune.https://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/6Add coefficient type to ElementMatrix and ElementVector2019-05-01T11:05:53ZPraetorius, SimonAdd coefficient type to ElementMatrix and ElementVectorTry to allow different coefficient types than `double`, e.g. `float` or `Dune::Float128`. The Test with `Float128` requires some changes in dune. So, it is skipped here.
I'm not sure about the design: How to specify the type of the co...Try to allow different coefficient types than `double`, e.g. `float` or `Dune::Float128`. The Test with `Float128` requires some changes in dune. So, it is skipped here.
I'm not sure about the design: How to specify the type of the coefficients (element matrix/vector type)? Currently, I have just added a `CoefficientType` member type to the `ProblemStatTraits` class. Maybe we should discuss to define the backend of DOFMatrix and DOFVector there and derived the coefficient type from these container classes.https://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/37Changed raw pointer to shared_ptr in DOFVector and DOFMatrix2019-04-30T14:10:08ZPraetorius, SimonChanged raw pointer to shared_ptr in DOFVector and DOFMatrixAlways store a `shared_ptr` of the GlobalBasis instead of a reference or raw pointer.Always store a `shared_ptr` of the GlobalBasis instead of a reference or raw pointer.https://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/30Example/surface grid2019-04-26T20:36:29ZPraetorius, SimonExample/surface gridhttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/23reimplement interpolate function with averaging2019-04-26T13:51:45ZPraetorius, Simonreimplement interpolate function with averagingReplace `Dune::Functions::interpolate` with own implementation based on the dune-functions implementation. Here, I want to allow non-smooth (non-continuouse) functions in the interpolation. Thus simple nodal-interpolation does not work. ...Replace `Dune::Functions::interpolate` with own implementation based on the dune-functions implementation. Here, I want to allow non-smooth (non-continuouse) functions in the interpolation. Thus simple nodal-interpolation does not work. A first strategy is implementated, namely node-averaging. A counter is added that counts how often a values is added to a DOF and after the interpolation the DOF value is divided by this counter value.
Other strategies that could be added:
- Clement type interpolation (using local L2 projection)
- Evaluation in *super-convergent* points, i.e. average over evaluations in the element barycenters
- Least-squares approximation
- [x] Therefore, the interface of `interpolate()` must be extended to support some kind of `strategy` flag.https://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/25Rewrite adaption interface to allow to attach bases to the grid-transfer2019-04-26T11:23:41ZPraetorius, SimonRewrite adaption interface to allow to attach bases to the grid-transferThe GlobalBasis needs to be updated after each grid change. So, we have added a list of callbacks that are called in the `GridTransfer` class in `preAdapt()`, after `adapt()` and in `postAdapt()`. There are two types of supported data:
...The GlobalBasis needs to be updated after each grid change. So, we have added a list of callbacks that are called in the `GridTransfer` class in `preAdapt()`, after `adapt()` and in `postAdapt()`. There are two types of supported data:
1. Classes with `preAdapt(bool)` and `postAdapt(bool)`
2. Classes with `update(gridView())`
The first one is typically implemented by data containers that need interpolation. The second one is implemented by a basis.
The `DOFVector` and its basis are automatically registered in the GridTransfer in construction of the `DOFVector`. If you have a data-container or a basis independent of a DOFVector you have to attach (and detach before destruction) yourself. Therefore, simply call
```c++
GridTransferManager::attach(grid, data); // or
GridTransferManager::detach(grid, data);
```
where data must implement on of the interface 1. or 2., described also in the `AdaptionInterface.hh`.
Note, the adaption cycle works as follows:
1. preAdapt
2. adapt
3. update
4. postAdapt
So, in the postAdapt step we can assume that all update callbacks are executed. The order of the update methods could be random, though. And also the order of the pre/postAdapt callbacks is arbitrary.https://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/32istl AMG preconditioner added2019-04-26T11:21:28ZPraetorius, Simonistl AMG preconditioner addedThe dune-istl AMG method is available as precondition. The corresponding initfile parameters are
```
[...]->solver->precon: [amg,fastamg]
[...]->solver->precon->smoother: [jacobi,sor,ssor] % later more smoothers can be added
[...]->sol...The dune-istl AMG method is available as precondition. The corresponding initfile parameters are
```
[...]->solver->precon: [amg,fastamg]
[...]->solver->precon->smoother: [jacobi,sor,ssor] % later more smoothers can be added
[...]->solver->precon->[...] % general amg parameters, see Dune::Amg::Parameters
[...]->solver->precon->coarsening->[...] % Parameters of Dune::Amg::CoarseningParameters
[...]->solver->precon->aggregation->[...] % Parameters of Dune::Amg::AggregationParameters
[...]->solver->precon->dependency->[...] % Parameters of Dune::Amg::DependencyParameters
[...]->solver->precon->smoother->[...] % Parameters of Dune::Amg::DefaultSmootherArgs
```
See `amdis/linearalgebra/istl/AMGPrecon.hpp` for a detailed list of parameters. The parameter names follow the variable names in the Dune Parameters class.https://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/35make max and min work with user-defined casts2019-04-26T10:26:52ZPraetorius, Simonmake max and min work with user-defined castscorrects a problem with `max(double, FieldVector<double,1>)` and `max(double, FieldMatrix<double,1,1>)`.corrects a problem with `max(double, FieldVector<double,1>)` and `max(double, FieldMatrix<double,1,1>)`.https://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/34allow order() as memberfunction of gridfunctions2019-04-25T17:40:25ZPraetorius, Simonallow order() as memberfunction of gridfunctionsallow order() as memberfunction of gridfunctions and redirect free function to this memberfunction if availableallow order() as memberfunction of gridfunctions and redirect free function to this memberfunction if availablehttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/27Issue/amdisproject executable2019-03-28T12:09:12ZPraetorius, SimonIssue/amdisproject executablehttps://gitlab.math.tu-dresden.de/amdis/amdis-core/-/merge_requests/29add operator+= to transposed view2019-03-28T11:33:56ZPraetorius, Simonadd operator+= to transposed view