Neko-TOP
A portable framework for high-order spectral element flow toplogy optimization.
|
Neko-top
allows the user to solve constrained optimization problems, often times but not limited to, topology optimization problems involving fluid mechanics.
Objectives and constraints enter the .case
file in neko-top
as lists
In neko-top
multiple objectives can be prescribed in a list, resulting in a multi-objective optimization problem which is handled by a weighted sum of all prescribed objectives
\[ \mathcal{F} = \sum_i w_i \mathcal{F}_i, \]
where \(\mathcal{F}i\) is an objective value \(w_i\) is a prescribed weight.
Multiple constraints on the other hand are also entered in a list but are handled through the MMA functionality discussed in The Method of Moving Asymptotes (MMA).
The following objectives
and constraints
have currently been implemented in neko-top
ยท
This objective is used to either minimize or maximize the pseudo-dissipation. It takes the form
\[ \mathcal{F} = \frac{1}{|\Omega_\text{obj}|}\int_{\Omega_\text{obj}} \frac{1}{2} |\nabla \mathbf{u}|^2 d\Omega, \]
where \(\mathbf{u}\) is the fluid velocity, \(\Omega_\text{obj}\) is the objective domain, \(|\nabla \mathbf{u}|^2\) the pseudo-dissipation where the notation \(|\cdot|\) denotes the Frobenius norm and where \(|\Omega_\text{obj}|\) denotes the volume of the objective domain.
The objective can be selected by prescribing "type": "minimum_dissipation"
and has the following input parameters:
Name | Description | Admissible values | Default value |
---|---|---|---|
weight | The weight used in the objective. | Real | 1.0 |
mask_name | The name of the point_zone indicating \(\Omega_\text{obj}\). | String | "" |
name | The name that will appear in objective_data.csv | String | Dissipation |
In the works of A. Gersborg-Hansen et al. (2005) an objective function of the form
\[ \mathcal{F} = \frac{1}{2}\int \frac{1}{2} \left[ \underset{I}{\nabla \mathbf{u} \cdot \left(\nabla \mathbf{u} + (\nabla \mathbf{u})^T \right)} + \underset{II}{\chi \mathbf{u} \cdot \mathbf{u} } \right] d\Omega, \]
where \(\mathbf{u}\) is the fluid velocity and \(\chi\) the Brinkman amplitude was used, claiming:
Term I is half of the part of the dissipation function that is associated with the in-plane components of the stretching tensor (cf. Currie (2003)), while term II is half the part associated with the out-of-plane components. The latter part arises from the parabolic velocity profile in the lubrication theory (2). From an optimization perspective, term II links the cost function directly to the two-dimensional velocity field.
Later works have argued that this second term can also be used to penalize intermediate values of the design indicator and promote binary designs. Hence, this second term is considered a "velocity penalty" in neko-top
and takes the form
\[ \mathcal{F} = \frac{1}{|\Omega_\text{obj}|}\int_{\Omega_\text{obj}} \frac{1}{2} \chi \mathbf{u}^2 d\Omega. \]
The objective can be selected by prescribing "type": "lube_term"
and has the following input parameters:
"lube_term"
comes from the original claim based on lubrication theory written by Gersborg-Hansen et al.Name | Description | Admissible values | Default value |
---|---|---|---|
weight | The weight used in the objective. | Real | 1.0 |
mask_name | The name of the point_zone indicating \(\Omega_\text{obj}\). | String | "" |
name | The name that will appear in objective_data.csv | String | Out of plane stresses |
This objective is used to either minimize or maximize the mixing of a passive scalar. It takes the form
\[ \mathcal{F} = \frac{1}{|\Omega_\text{obj}|}\int_{\Omega_\text{obj}} \frac{1}{2} (\phi - \phi_\text{ref})^2 d\Omega, \]
where \(\phi\) is the scalar field, \(\Omega_\text{obj}\) is the objective domain, \(|\Omega_\text{obj}|\) denotes the volume of the objective domain and \( \phi_\text{ref}\) is a target concentration.
The objective can be selected by prescribing "type": "scalar_mixing"
and has the following input parameters:
Name | Description | Admissible values | Default value |
---|---|---|---|
weight | The weight used in the objective. | Real | 1.0 |
mask_name | The name of the point_zone indicating \(\Omega_\text{obj}\). | String | "" |
target_concentration | \(\phi_\text{ref}\) in the above equation. | Real | 0.5 |
name | The name that will appear in objective_data.csv | String | Scalar Mixing |
This constraint is used to constrain the volume of the design in the domain. It takes the form
\[ \mathcal{C} = \frac{1}{|\Omega_\text{opt}|}\int_{\Omega_\text{opt}} \rho d\Omega, \]
where \(\rho\) is the material indicator, \(\Omega_\text{opt}\) is the optimization domain and \(|\Omega_\text{opt}|\) denotes the volume of the optimization domain.
The constraint can be used to enforce either a minimum or maximum volume, i.e. \( \mathcal{C} > \mathcal{C}_\text{min} \) or \( \mathcal{C} < \mathcal{C}_\text{max} \).
The constraint can be selected by prescribing "type": "volume"
and has the following input parameters:
Name | Description | Admissible values | Default value |
---|---|---|---|
limit | \( \mathcal{C}_\text{min} \) or \( \mathcal{C}_\text{max} \) in the above equation | Real | - |
is_max | Indicate whether a minimum or maximum volume constraint should be applied. | .true. or .false. | .false. |
mask_name | The name of the point_zone indicating \(\Omega_\text{obj}\). | String | "" |
name | The name that will appear in objective_data.csv | String | Volume constraint |