Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update HybridisationSCPC to use ufl.replace with firedrake.formmanipulation.ExtractSubBlock #184

Open
JHopeCollins opened this issue Apr 22, 2024 · 0 comments
Labels
enhancement New feature or request refactor Tidy up existing functionality

Comments

@JHopeCollins
Copy link
Collaborator

In the hybridisation preconditioner we have an original form on V = HDiv x DG. We need to construct a hybridisable form on Vtr = Broken(HDiv) x DG x Tr where the (0-1,0-1) blocks are the original form on V.
Ideally we would do this using ufl.replace. This works fine for replacing instances in each subspace V[0] -> Vtr[0] and V[1] -> Vtr[1]. However we run into issues when we need to replace instances of u \in V, because we can't construct an equivalent u from the subspaces of Vtr.

Our current "solution" in HybridisationSCPC is to restrict ourselves to constructing the hybridisable form from the form_mass and form_function callbacks. This is fine for all current uses in asQ but does limit the PC and adds extra code.

Pablo has suggested that we might be able to get around this by manually splitting the form into blocks using firedrake.formmanipulation.ExtractSubBlock. For terms with instances from HDiv or DG this won't make a difference, but it should split any term with instances from V into multiple terms for each component of V. We should then be able to use ufl.replace on each term.

@JHopeCollins JHopeCollins added enhancement New feature or request refactor Tidy up existing functionality labels Apr 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request refactor Tidy up existing functionality
Projects
None yet
Development

No branches or pull requests

1 participant