Multiple Load SIMP

We employ here a multi-app scheme similar to that employed in Thermal and mechanical optimization. In this example, each subapp is solving the same mechanics problem with a different applied load. The sensitivity of the structure to each load is computed separately and used in a global optimization algorithm. Considering the optimization of a problem with the separate effect of the loads, instead of accounting for its simultaneous application, can yield a final optimized system whose material distribution is a significantly different from a simple concomitant approach (see Bendsoe and Sigmund (2003)). In the extreme case, having two loads acting on the same point in opposite directions would yield an ill-defined optimized structure if such loads are considered to be concomitant. However, the independent combination of each of the load's sensitivities would yield a structure that is optimized to reduce the compliance under the desired load sensitivity weighting.

In this example, we consider a bridge-like structure on which two vertical loads are applied. The multiapp approach sends the updated pseudo-densities to the subapps, whereas said subapps send their parent app the new load sensitivities. The subapp input files are almost identical, with different load application points:

Listing 1: MBB Application point one

[UserObjects]
  [rad_avg]
    type = RadialAverage
    radius = 3
    weights = linear
    prop_name = sensitivity
    force_preaux = true
    execute_on = 'TIMESTEP_END'
  []
  # No SIMP optimization in subapp
  [calc_sense]
    type = SensitivityFilter
    density_sensitivity = Dc
    design_density = mat_den
    filter_UO = rad_avg
    force_postaux = true
    execute_on = 'TIMESTEP_END'
  []
[]
(modules/combined/examples/optimization/multi-load/single_subapp_one.i)

Listing 2: MBB Application point two

[UserObjects]
  [rad_avg]
    type = RadialAverage
    radius = 3
    weights = linear
    prop_name = sensitivity
    execute_on = TIMESTEP_END
    force_preaux = true
  []
  # No SIMP optimization in subapp
  [calc_sense]
    type = SensitivityFilter
    density_sensitivity = Dc
    design_density = mat_den
    filter_UO = rad_avg
    execute_on = TIMESTEP_END
    force_postaux = true
  []
[]
(modules/combined/examples/optimization/multi-load/single_subapp_two.i)

Filtering of sensitivities takes place in the subapps with the main application being responsible for performing the optimization process.

Listing 3: MBB Density update in main application

[UserObjects]
  # We do filtering in the subapps
  [update]
    type = DensityUpdate
    density_sensitivity = total_sensitivity
    design_density = mat_den
    volume_fraction = ${vol_frac}
    execute_on = MULTIAPP_FIXED_POINT_BEGIN
  []
[]
(modules/combined/examples/optimization/multi-load/single_main.i)

If considered to act simultaneously, the optimized structure becomes an arch. If, on the other hand, the structural responses to each of loads are combined, a more robust triangular frame resurfaces as an optimized design. See figure below for one solution to multi-load problem:

References

  1. Martin Philip Bendsoe and Ole Sigmund. Topology optimization: theory, methods, and applications. Springer Science & Business Media, 2003.[BibTeX]