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<<<{"href": "../../../../syntax/UserObjects/index.html"}>>>]
  [rad_avg]
    type = RadialAverage<<<{"description": "Perform a radial average of a material property", "href": "../../../../source/userobjects/RadialAverage.html"}>>>
    radius<<<{"description": "Cut-off radius for the averaging"}>>> = 3
    weights<<<{"description": "Distance based weight function"}>>> = linear
    prop_name<<<{"description": "Name of the material property to average"}>>> = sensitivity
    force_preaux<<<{"description": "Forces the UserObject to be executed in PREAUX"}>>> = true
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_END'
  []
  # No SIMP optimization in subapp
  [calc_sense]
    type = SensitivityFilter<<<{"description": "Computes the filtered sensitivity using a radial average user object.", "href": "../../../../source/userobjects/SensitivityFilter.html"}>>>
    density_sensitivity<<<{"description": "Name of the density_sensitivity variable."}>>> = Dc
    design_density<<<{"description": "Design density variable name."}>>> = mat_den
    filter_UO<<<{"description": "Radial Average user object"}>>> = rad_avg
    force_postaux<<<{"description": "Forces the UserObject to be executed in POSTAUX"}>>> = true
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 'TIMESTEP_END'
  []
[]
(modules/combined/examples/optimization/multi-load/single_subapp_one.i)

Listing 2: MBB Application point two

[UserObjects<<<{"href": "../../../../syntax/UserObjects/index.html"}>>>]
  [rad_avg]
    type = RadialAverage<<<{"description": "Perform a radial average of a material property", "href": "../../../../source/userobjects/RadialAverage.html"}>>>
    radius<<<{"description": "Cut-off radius for the averaging"}>>> = 3
    weights<<<{"description": "Distance based weight function"}>>> = linear
    prop_name<<<{"description": "Name of the material property to average"}>>> = sensitivity
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
    force_preaux<<<{"description": "Forces the UserObject to be executed in PREAUX"}>>> = true
  []
  # No SIMP optimization in subapp
  [calc_sense]
    type = SensitivityFilter<<<{"description": "Computes the filtered sensitivity using a radial average user object.", "href": "../../../../source/userobjects/SensitivityFilter.html"}>>>
    density_sensitivity<<<{"description": "Name of the density_sensitivity variable."}>>> = Dc
    design_density<<<{"description": "Design density variable name."}>>> = mat_den
    filter_UO<<<{"description": "Radial Average user object"}>>> = rad_avg
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = TIMESTEP_END
    force_postaux<<<{"description": "Forces the UserObject to be executed in 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<<<{"href": "../../../../syntax/UserObjects/index.html"}>>>]
  # We do filtering in the subapps
  [update]
    type = DensityUpdate<<<{"description": "Compute updated densities based on sensitivities using an optimality criteria method to keep the volume constraint satisified.", "href": "../../../../source/userobjects/DensityUpdate.html"}>>>
    density_sensitivity<<<{"description": "Name of the density_sensitivity variable."}>>> = total_sensitivity
    design_density<<<{"description": "Design density variable name."}>>> = mat_den
    volume_fraction<<<{"description": "Volume Fraction"}>>> = ${vol_frac}
    execute_on<<<{"description": "The list of flag(s) indicating when this object should be executed. For a description of each flag, see https://mooseframework.inl.gov/source/interfaces/SetupInterface.html."}>>> = 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]