3D MBB Beam with a PDE Filter

In this example is included to show that TROUT works in 3D too. Only new material not covered in the previous example will be covered here 2D Topology Optimization with Radial Average Filter, 2D Topology Optimization with PDE Filter and Boundary Penalty, 3D Topology Optimization with PDE Filter.

In this example, the mesh block is 3D.

Listing 1: MBB Mesh block

[Mesh<<<{"href": "../../../../syntax/Mesh/index.html"}>>>]
  [MeshGenerator]
    type = GeneratedMeshGenerator<<<{"description": "Create a line, square, or cube mesh with uniformly spaced or biased elements.", "href": "../../../../source/meshgenerators/GeneratedMeshGenerator.html"}>>>
    dim<<<{"description": "The dimension of the mesh to be generated"}>>> = 3
    nx<<<{"description": "Number of elements in the X direction"}>>> = 60
    ny<<<{"description": "Number of elements in the Y direction"}>>> = 20
    nz<<<{"description": "Number of elements in the Z direction"}>>> = 20
    xmin<<<{"description": "Lower X Coordinate of the generated mesh"}>>> = 0
    xmax<<<{"description": "Upper X Coordinate of the generated mesh"}>>> = 30
    ymin<<<{"description": "Lower Y Coordinate of the generated mesh"}>>> = 0
    ymax<<<{"description": "Upper Y Coordinate of the generated mesh"}>>> = 10
    zmin<<<{"description": "Lower Z Coordinate of the generated mesh"}>>> = 0
    zmax<<<{"description": "Upper Z Coordinate of the generated mesh"}>>> = 10
  []
  [node]
    type = ExtraNodesetGenerator<<<{"description": "Creates a new node set and a new boundary made with the nodes the user provides.", "href": "../../../../source/meshgenerators/ExtraNodesetGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = MeshGenerator
    new_boundary<<<{"description": "The names of the boundaries to create"}>>> = hold_y
    coord<<<{"description": "The nodes with coordinates you want to be in the nodeset. Separate multple coords with ';' (Either this parameter or \"nodes\" must be supplied)."}>>> = '0 0 0; 0 0 10'
  []
  [push]
    type = ExtraNodesetGenerator<<<{"description": "Creates a new node set and a new boundary made with the nodes the user provides.", "href": "../../../../source/meshgenerators/ExtraNodesetGenerator.html"}>>>
    input<<<{"description": "The mesh we want to modify"}>>> = node
    new_boundary<<<{"description": "The names of the boundaries to create"}>>> = push
    coord<<<{"description": "The nodes with coordinates you want to be in the nodeset. Separate multple coords with ';' (Either this parameter or \"nodes\" must be supplied)."}>>> = '30 10 5'
  []
[]
(modules/combined/examples/optimization/3d_mbb.i)

The results below show the final design for the 3D MBB problem.