Neko-TOP
A portable framework for high-order spectral element flow toplogy optimization.
Loading...
Searching...
No Matches
Mapping cascade

In topology optimization problem we consider an abstract material indicator which we denote here by \(\rho(\mathbf{x}) \in [0,1]\), where \(\mathbf{x}\) are the spatial coordinates. The influence of this design on a physics simulation is commonly modelled by introducing additional coefficients into the PDE being solved. In the case of fluid mechanics problems, a common approach is Brinkman penalization, where an additional forcing term \(\mathbf{f} = - \chi \mathbf{u}\) is added to the Navier-Stokes equations (more information can be found in Brinkman source term).

Note
For conjugate heat transfer problems one may also map to a thermal conductivity \(\kappa\), however this is currently not supported in neko-top.

A mapping_t provides functionality for the mapping \(X_\text{in} \mapsto X_\text{out}\) as well as providing functionality to propagate sensitivity information via the chain rule, i.e. \(\frac{\partial \mathcal{F}}{\partial X_\text{out}} \mapsto \frac{\partial \mathcal{F}}{\partial X_\text{in}}\).

The mapping_cascade_t enables complex composite mappings to be combined

\[ X_1 \mapsto X_2 \mapsto ... \mapsto X_n, \]

and enables sensitivity information to be propagated back through the cascade

\[ \frac{\partial \mathcal{F}}{\partial X_n} \mapsto ... \mapsto \frac{\partial \mathcal{F}}{\partial X_1}. \]

The mapping cascade can be prescribed in the "design" section of the .case file under the list "mapping", for example:

"design": {
"type": "brinkman",
"mapping" : [
{
"type": "PDE_filter",
"r": 0.01
},
{
"type": "RAMP",
"f_max": 1000
}
],
Attention
It is important to note that the order in which the mappings occur in the case file is the order in which they will be executed. In the above example this corresponds to applying a filter first, and then a RAMP mapping.
Note
Currently the mapping cascade is only applicable to the "brinkman" type design.
The intermediate forward and backward mapping fields written by the Brinkman design use the verbose_design, verbose_sensitivity, output_precision, and output_format options from optimization.design.

Mappings

The following mappings are currently implemented in Neko-top.

  1. PDE filter
  2. Linear mapping
  3. RAMP mapping
  4. SIMP mapping
  5. Heaviside mapping

PDE based filter

A filter based on the work of B. S. Lazarov, O. Sigmund that solves a Helmholtz-type differential equation to provide smoothing. The equation has the form

\[ -\tilde{r}^2 \nabla^2 X_\text{out} + X_\text{out} = X_\text{in}, \]

subject to Neumann boundary conditions ( \(\nabla X_\text{out} \cdot n = 0\)).

Note on the locality of the filter:
Although the Helmholtz-type PDE filter is formally a global operator (i.e. the solution is affected in the entire domain), its influence exhibits a rapid exponential decay. For a point source in \(X_\text{in}\), the filtered response \(X_\text{out}\) behaves as

\[ X_\text{out}(\mathbf{x}) \propto \exp\left(-\frac{|\mathbf{x}|}{\tilde{r}}\right), \]

where \(|\mathbf{x}|\) denotes the distance from the source. This exponential decay ensures that the filter acts in a localized manner. In the implementation, the effective filter radius \(\tilde{r}\) is related to the user-prescribed parameter \(r\) by

\[ \tilde{r} = \frac{r}{2\sqrt{3}}, \]

such that the parameter \(r\) corresponds to the physical filter radius commonly used in the topology optimization literature. This scaling ensures that the influence of the filter is strongly localized, with more than 95% of its effect contained within a distance \(r\). The filter can be selected by prescribing "type": "PDE_filter" and has the following input parameters:

Name Description Admissible values Default value
r Physical filter radius. Internally scaled as \(r/(2\sqrt{3})\). Real -
tol The desired tolerance used when solving the system. Real 0.0000000001
max_iter Maximum number of iterations when solving the system. Integer 200
solver Numerical solver used to solve the system. cg,gmres, gmres cg
preconditioner Pre-conditioner used to solve the system. ident, hsmg, jacobi jacobi

Since the Helmholtz operator is Symmetric Positive Definite (SPD), CG is recommended. The convergence rate is highly dependent on the filter radius; larger radii typically improve the condition number.

Linear mapping

A linear mapping of the form

\[ X_\text{out} = f_\text{min} + (f_\text{max} - f_\text{min}) X_\text{in}. \]

The mapping can be selected by prescribing "type": "linear" and has the following input parameters:

Name Description Admissible values Default value
f_max \(f_\text{max}\) in the above equation. Real -
f_min \(f_\text{min}\) in the above equation. Real 0.0

RAMP mapping

A mapping based on the RAMP taking the following two forms depending on the convexity,

concave up:

\[ X_\text{out} = f_\text{min} + (f_\text{max} - f_\text{min}) \frac{X_\text{in}}{1 +q(1 - X_\text{in})}, \]

concave down:

\[ X_\text{out} = f_\text{min} + (f_\text{max} - f_\text{min}) \frac{X_\text{in}(q + 1)}{q + X_\text{in}}, \]

where \(q\) is a penalty parameter.

The mapping can be selected by prescribing "type": "RAMP" and has the following input parameters:

Name Description Admissible values Default value
f_max \(f_\text{max}\) in the above equation. Real -
f_min \(f_\text{min}\) in the above equation. Real 0.0
q \(q\) in the above equation. Real 1.0
convex_up The convexity used in the above equation. .true. or .false. .true.

SIMP mapping

A mapping based on the SIMP taking the following form

\[ X_\text{out} = f_\text{min} + (f_\text{max} - f_\text{min}) X_\text{in}^p, \]

where \(p\) is a penalty parameter.

The mapping can be selected by prescribing "type": "SIMP" and has the following input parameters:

Name Description Admissible values Default value
f_max \(f_\text{max}\) in the above equation. Real -
f_min \(f_\text{min}\) in the above equation. Real 0.0
p \(p\) in the above equation. Real 1.0

Heaviside mapping

A smooth Heaviside mapping taking the form,

\[ X_\text{out} = \frac{\tanh(\beta \eta) + \tanh(\beta (X_\text{in} - \eta))} {\tanh(\beta \eta) + \tanh(\beta (1-\eta))}, \]

where \(\beta>0\) controls the steepness and \(\eta\in[0,1]\) describes the threshold.

The mapping can be selected by prescribing "type": "heaviside_mapping" and has the following input parameters:

Name Description Admissible values Default value
beta Projection sharpness parameter \(\beta\). Real, > 0 8.0
eta Projection threshold parameter \(\eta\). Real in [0,1] 0.5