-
Marcus Mohr authored
The idea of this function is to return for a given operator the number of couplings between degrees of freedom. Modulo elimination of Dirichlet boundary conditions and zero coupling weights this will correspond to the number of non-zeros in the sparsity pattern of the associated matrix. Note that the coupling counts will only depend on the function spaces involved, but not on the specifics of the operator resp. bilinear form. Thus, getNumberOfDoFCouplings() is a driver that in turn relies on the actual counting being done in the countLocalDoFCouplings() function. Its purpose is mostly to determine from the operator the underlying sub-operators and function spaces. This commit implements the functionality for 2D and for P1Operators in 3D. Further work on coupling count - 2D case works now for P1-P1 for the "All" case - In 3D the results are incorrect - Started adding BC stuff, but will remove that again, as it get's too complicated; we would need to discard not only the to but also the from couplings on those primivites. Coupling count now works also for scalar P2 operators in 2D * Implemented the basic VertexDoFFunction and EdgeDoFFunction combos as building blocks. * Removed all boundary condition stuff. Makes getNumberOfGlobalDoFCouplings() a free-function The reason for this is that inside the Operator class we do not have enough information to compute the number of couplings for block operators such as Stokes. For those cases it is not only the supports of the ansatz functions that determine the number of couplings, but also the block structure of the operator itself. CouplingCountTest now also works for P2-P1Taylor-Hood-Stokes operators in 2D. Fixes problem with CouplingCountTest when building w/o PETSc Completes implementation of countLocalDoFCouplings for P1Functions in 3D The CouplingCountTest now runs through for a P1Operator on the 3D mesh pyramid_4el.msh. Thanks to Nils for pointing out to use getLocalEdgeID() to get the edge into cell couplings right.
c22d6bfd