Shape Optimization with the p-Laplacian¶
Problem Formulation¶
In this demo, we take a look at yet another possibility to compute the shape gradient and to use this method for solving shape optimization problems. Here, we investigate the approach of Müller, Kühl, Siebenborn, Deckelnick, Hinze, and Rung and use the \(p\)-Laplacian in order to compute the shape gradient. As a model problem, we consider the following one, as in Shape Optimization with a Poisson Problem:
For the initial domain, we use the unit disc \(\Omega = \{ x \in \mathbb{R}^2 \,\mid\, \lvert\lvert x \rvert\rvert_2 < 1 \}\), and the right-hand side \(f\) is given by
Implementation¶
The complete python code can be found in the file demo_p_laplacian.py
,
and the corresponding config can be found in config.ini
.
Source Code¶
The python source code for this example is completely identical to the one in Shape Optimization with a Poisson Problem, so we do not cover this here again. The only changes occur in the configuration file, which we cover below.
Configuration File¶
All the relevant changes appear in the ShapeGradient Section of the config file, where we now add the following three lines
use_p_laplacian = True
p_laplacian_power = 10
p_laplacian_stabilization = 0.0
Here, use_p_laplacian
is a boolean flag which indicates that we want to override the default behavior and use the \(p\) Laplacian to compute the shape gradient instead of linear elasticity. In particular, this means that we solve the following equation to determine the shape gradient \(\mathcal{G}\)
Here, \(dJ(\Omega)[\mathcal{V}]\) is the shape derivative. The parameter \(p\) is defined via the config file parameter p_laplacian_power
, and is 10 for this example. Finally, it is possible to use a stabilized formulation of the \(p\)-Laplacian equation shown above, where the stabilization parameter is determined via the config line parameter p_laplacian_stabilization
, which should be small (e.g. in the order of 1e-3
). Moreover, \(\mu\) is the stiffness parameter, which can be specified via the config file parameters mu_def
and mu_fixed
and works as usually (cf. Shape Optimization with a Poisson Problem:). Finally, we have added the possibility to use the damping parameter \(\delta\), which is specified via the config file parameter damping_factor
, also in the Section ShapeGradient.
Note
Note, that the \(p\)-Laplace methods are only meant to work with the gradient descent method. Other methods, such as BFGS or NCG methods, might be able to work on certain problems, but you might encounter strange behavior of the methods.
Finally, we show the result of the optimization, which looks similar to the one obtained in Shape Optimization with a Poisson Problem: