FEM-optimization
Classes of degrees of freedom
Muscade
introduces 3 classes of degrees of freedom (dofs).
Xdofs are the dofs normaly encountered in normal "forward" FEM analysis. They provide a discrete representation of the response of the system. There is a one-to-one relation (a "duality") between the Xdofs $X$ and the residuals $R$, which are the discretized form of he differential equations we seek to solve. In forward FEM, we seek to solve a problem of the form
\[\forall t, R(X(t),t)=0\]
Udofs are additional dofs that can be used to represent additional loads on the system. Like Xdofs, Udofs are time-dependant. Unlike Xdofs, there str no residuald (no new equations) corresponding to them.
Adofs are additional dofs that can be used to parameterise the model. Adofs are not time-dependant,and there are no residuals corresponing to them.
Equilibrium now requires
\[\forall t, R(X(t),U(t),A,t)=0\]
which is ill-posed (unknowns $U$ and $A$ have been added, but there are no new equations).
Lagrangian
To simplify the presentations in the following, we drop time $t$ from the notations. This can be interpreted in two ways:
- We are looking at a problem at a single instant (static).
- We are solving an evolution problem (dynamic), and $X$ and $U$ are now vectors-valued functions of time, and $R$represents a vector of ordinary differential equations (over time).
To make the problem well-posed again, we introduce a cost (or target, or surprisal) function $Q(X,U,A)$. We then seek to make $Q$ extremal (finding a local minimum, maximum), under the constraint that the above equations be verified. This is equivalent to finding an extremal (a saddle point) of the Lagrangian (not to be confused with the potential in Lagrangian mechanics)
\[L(\Lambda,X,U,A)= Q(X,U,A) + Λ\cdot R(X,U,A)\]
where $Λ$ are Lagrange multipliers. There is again a one-to-one correspondance between Λdofs and Xdofs.
For evolution problems, the above dot product includes an integral over time. The gradients of $L$ are ordinary differential equations (in time), found using Frechet derivatives.
Solvers
Solvers in Muscade
solve problems of different forms including forward X
problems:
\[R(X,0,0)=0\]
optimisation XUA
problems:
\[\begin{aligned} \nabla_\Lambda L(\Lambda,X,U,A) &= 0 \\ \nabla_X L(\Lambda,X,U,A) &= 0 \\ \nabla_U L(\Lambda,X,U,A) &= 0 \\ \nabla_A L(\Lambda,X,U,A) &= 0 \end{aligned}\]
as well as XU
problems:
\[\begin{aligned} \nabla_\Lambda L(\Lambda,X,U,0) &= 0 \\ \nabla_X L(\Lambda,X,U,0) &= 0 \\ \nabla_U L(\Lambda,X,U,0) &= 0 \end{aligned}\]
and XA
problems:
\[\begin{aligned} \nabla_\Lambda L(\Lambda,X,0,A) &= 0 \\ \nabla_X L(\Lambda,X,0,A) &= 0 \\ \nabla_A L(\Lambda,X,0,A) &= 0 \end{aligned}\]
New elements
When creating a new element in Muscade
to create an application, one can either implement a contribution to $R(X,U,A)$ by implementing a method Muscade.residual
for the element, or a contribution to $L(\Lambda,X,U,A)$ by implementing Muscade.lagrangian
. For performance, when possible (when implementing an "physical" element discretizing the differential equations), use Muscade.residual
.