ikarus-project / ikarus

Ikarus is a C++-based library that uses DUNE modules to solve partial differential equations with the finite element method and more.
https://ikarus-project.github.io/
Other
6 stars 3 forks source link

refactor generic fe skills and localSolutionBlockVector to allow different basis #244

Open tarun-mitruka opened 8 months ago

tarun-mitruka commented 8 months ago

The current implementation restricts the function localSolutionBlockVector and classes Volume and Traction to handle a basis with RootBasis::PreBasis::Node::degree() = Traits::worlddim. This should be generalized such that for element formulations like the 5P shell can still use these features when here, for example, RootBasis::PreBasis::Node::degree() = 5 whereas Traits::worlddim = 3.

Similarly, finite elements have an assumption that the number of children are same same at every node. This will not work, for example for LinearElastic, if we have quadratic displacements in x-direction (ux) but linear displacements in y-direction (uy) because then there are nodes with only ux and no uy degrees of freedom. This will, for example, break the following line: K.template block<myDim, myDim>(i * myDim, j * myDim) += bopI.transpose() * C * bopJ * intElement;

tarun-mitruka commented 3 months ago

Usage of const auto& localFE = localView.tree().child(0).finiteElement(); should also be generalized everywhere because it already assumes that the basis is a power basis. This already then reduces the functionality as it cannot be applied to for example, to Kirchhoff plates which only has a scalar basis. For example, see here.