Customary Element: Static Condensation and bddc

4 years 1 week ago #2859 by THaubold
Hi again,

I'm interested in testing my element definition in combination with static condensation (and the bddc preconditioner).

Up to now i followed the mylittlengsolve example on how to define high order H^1 basic functions and implement the integrator and so on.
Since both static condensation flags, do nothing for my element, i guess i need to implement the static condensation my self, is that correct? What is the correct syntax for this?
Can i implement the static condensation such that i can reuse the standard bddc preconditioner or do i need to implement it by hand as well? (Or do i need to consider something else as well?)

4 years 1 week ago - 4 years 1 week ago #2860 by lkogler
Wether a DOF is eliminated by static condensation or not is given by the FESpace, not the element itself.

Any DOFs of coupling type LOCAL_DOF are eliminated. Those of INTERFACE_DOF and WIREBASKET_DOF
remain. The bddc Preconditioner further reduces the problem to only the WIREBASKET_DOF ones. Per default, all DOFs are seen as wirebasket DOFs.

On the C++ side, the FESpace has an array called "ctofdof", which gives the coupling type for every DOF.
You have to overload the "UpdateCouplingDofArray" method of the FESpace and set it there. (See, for example, comp/h1hofespace.cpp, lines 776-831)

Alternatively, you can also set it from python via the "SetCouplingType" method of the FESpace.

You should be able to reuse the bddc preconditioner as long as you set the ctofdof array correctly.

Last edit: 4 years 1 week ago by lkogler.
The following user(s) said Thank You: THaubold
Time to create page: 0.160 seconds