Velocity extension
GridapTopOpt.AbstractVelocityExtension — Typeabstract type AbstractVelocityExtension endAn abstract type for velocity extension structures. Structs that inherit from this type must implement the project! method.
GridapTopOpt.IdentityVelocityExtension — Typestruct IdentityVelocityExtension <: AbstractVelocityExtensionA velocity-extension method that does nothing.
GridapTopOpt.VelocityExtension — Typestruct VelocityExtension{A,B} <: AbstractVelocityExtensionWrapper to hold a stiffness matrix and a cache for the Hilbertian extension-regularisation. See Allaire et al. 2022 (link).
The Hilbertian extension-regularisation method involves solving an identification problem over a Hilbert space $H$ on $D$ with inner product $\langle\cdot,\cdot\rangle_H$: Find $g_\Omega\in H$ such that $\langle g_\Omega,w\rangle_H =-J^{\prime}(\Omega)(w\boldsymbol{n})~ \forall w\in H.$
This provides two benefits:
- It naturally extends the shape sensitivity from $\partial\Omega$ onto the bounding domain $D$; and
- ensures a descent direction for $J(\Omega)$ with additional regularity (i.e., $H$ as opposed to $L^2(\partial\Omega)$)
Properties
K::A: The discretised inner product over $H$.U_reg::B: The trial space used for the Hilbertian extension-regularisation.cache::C: Cached objects used forproject!
GridapTopOpt.VelocityExtension — MethodVelocityExtension(biform,U_reg,V_reg;assem,ls)Create an instance of VelocityExtension given a bilinear form biform, trial space U_reg, and test space V_reg.
Optional
assem: A matrix assemblerls::LinearSolver: A linear solver
GridapTopOpt.project! — Methodproject!(vel_ext::VelocityExtension,dF::AbstractVector,V_φ,uhd) -> dF_reg::VectorProject dFh onto a function space described by the vel_ext.
Note:
- We expect that
dFis a vector resulting from assembly on V_φ. - uhd should be an FEFunction on V_φ.