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]