Add global spaces for global constraints (Lagrange multipliers)
- Dominant language
- Julia
- Stars
- 879
- Forks
- 119
- Avg merge
- 6d 3h
- Merged PRs (30d)
- 4
Description
It would be nice to have the possibility to have global "test functions", e.g., a test FE space that is a basis of fields defined in the global physical domain. This way, we could define constraints at the driver level as you define the rest of the terms. E.g.,
```
C = TestSpace(1.0) # Space for the Lagrange multiplier for your constraint
constraint_lhs(u,c) = u*c # Mean value
constraint_rhs(u,c) = 0.0 # equal to zero
```
or
```
C = TestSpace(VectorValue(1.0,0.0),VectorValue(1.0,0.0),VectorValue(x[2],-x[1]) # Rigid-body modes
constraint_lhs(u,c) = u \cdot c
constraint_rhs(u,c) = VectorValue(0.0,0.0)
```
The solution of the resulting linear system is not simple. The resulting problem is indefinite, it could be efficiently solved using a Schur complement approach.
Contributor guide
Research direction
The issue names no files or tests. Start by locating the existing TestSpace abstractions and the entry points that assemble and solve the resulting linear system. Done means global test spaces can express the mean-value and rigid-body constraints shown, with an appropriate approach for the resulting indefinite system.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- backend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100