2D MBB Beam with a PDE Filter
In this example we will go over using a PDE filter instead of a convolution type filter (see Wallin et al. (2020)). For larger problems this method may scale better depending on processor counts and filter radius size. Only new material not covered in the previous example will be covered here 2D Topology Optimization with a Convolution Filter.
First there is a new variable Dc
that will be the filtered sensitivity.
Listing 1: MBB Variables
block
[Variables]
[Dc]
initial_condition = -1.0
[]
[]
(modules/combined/examples/optimization/2d_mbb_pde.i)The AuxVariables
block sensitivity
is now used as a source term for the PDE filter. There is also now a Dc_elem
variable that will be used for the density update.
Listing 2: MBB AuxVariables
block
[AuxVariables]
[Emin]
family = MONOMIAL
order = CONSTANT
initial_condition = ${Emin}
[]
[power]
family = MONOMIAL
order = CONSTANT
initial_condition = ${power}
[]
[E0]
family = MONOMIAL
order = CONSTANT
initial_condition = ${E0}
[]
[sensitivity]
family = MONOMIAL
order = FIRST
initial_condition = -1.0
[AuxKernel]
type = MaterialRealAux
variable = sensitivity
property = sensitivity
execute_on = LINEAR
[]
[]
[mat_den]
family = MONOMIAL
order = CONSTANT
initial_condition = ${vol_frac}
[]
[Dc_elem]
family = MONOMIAL
order = CONSTANT
initial_condition = -1.0
[AuxKernel]
type = SelfAux
variable = Dc_elem
v = Dc
execute_on = 'TIMESTEP_END'
[]
[]
[]
(modules/combined/examples/optimization/2d_mbb_pde.i)In the Kernel block the filtering is done using a FunctionDiffusion
kernel, Reaction
Kernel, and a CoupledForce
kernel. The function coefficient () in the FunctionDiffusion
kernel is related to the radius () of the RadialAverage
filter by the equation .
Listing 3: MBB Kernels
block
[Kernels]
[diffusion]
type = FunctionDiffusion
variable = Dc
function = 0.15 # radius coeff
[]
[potential]
type = Reaction
variable = Dc
[]
[source]
type = CoupledForce
variable = Dc
v = sensitivity
[]
[]
(modules/combined/examples/optimization/2d_mbb_pde.i)One advantage of using a PDE filter is that by applying boundary conditions on the sensitivity variable on the boundary of the domain the filter will prevent "sticking" of the material commonly seen in topology optimization. That penalty condition is applied using the ADRobinBC
where the coef
controls how much the sensitivity is penalized on the boundary.
Listing 4: MBB BCs
block
[BCs]
[no_x]
type = DirichletBC
variable = disp_y
boundary = hold_y
value = 0.0
[]
[no_y]
type = DirichletBC
variable = disp_x
boundary = right
value = 0.0
[]
[boundary_penalty]
type = ADRobinBC
variable = Dc
boundary = 'left top'
coefficient = 10
[]
[boundary_penalty_right]
type = ADRobinBC
variable = Dc
boundary = 'right'
coefficient = 10
[]
[]
(modules/combined/examples/optimization/2d_mbb_pde.i)The UserObjects
block now only contains the DensityUpdate
object.
Listing 5: MBB UserObjects
block
[UserObjects]
[update]
type = DensityUpdate
density_sensitivity = Dc_elem
design_density = mat_den
volume_fraction = ${vol_frac}
execute_on = TIMESTEP_BEGIN
force_postaux = true
[]
[]
(modules/combined/examples/optimization/2d_mbb_pde.i)References
- Mathias Wallin, Niklas Ivarsson, Oded Amir, and Daniel Tortorelli.
Consistent boundary conditions for pde filter regularization in topology optimization.
Struct. Multidiscip. Optim., 62(3):1299–1311, sep 2020.
URL: https://doi.org/10.1007/s00158-020-02556-w, doi:10.1007/s00158-020-02556-w.[BibTeX]