Skip to content

Typical benchmark problems in topology optimization

jose-antonio-torres edited this page May 17, 2024 · 5 revisions

Benchmark problems consist in a set of computationally difficult problems, either from real-world applications or randomly generated, used by researchers in order to test the efficiency of optimization solvers. In this page you will find the most typical ones in the world of topology optimization. We will show the computational domain and the boundary conditions.

How do we set the boundary conditions in Swan?

But before proceeding... it is important to define a general way to define the boundary conditions in Swan.

In relation with the computational domain definition, we should refer to the tutorial file Swan/Tutorials/Tutorial00_Mesh.mlx.

Regarding the boundary conditions definition, we should refer to the tutorial file Swan/Tutorials/TopOptTestTutorial.m, and more specifically to the function bc = createBoundaryConditions(obj). Here we show an extract:

        % ...
        xMax    = max(obj.mesh.coord(:,1));
        yMax    = max(obj.mesh.coord(:,2));
        isDir1   = @(coor)  abs(coor(:,1))==0;
        isForce1 = @(coor)  (abs(coor(:,1))==xMax & abs(coor(:,2))>=0.35*yMax & abs(coor(:,2))<=0.65*yMax);

        sDir{1}.domain    = @(coor) isDir1(coor);
        sDir{1}.direction = [1,2];
        sDir{1}.value     = 0;

        sPL{1}.domain    = @(coor) isForce1(coor);
        sPL{1}.direction = 2;
        sPL{1}.value     = -1;

        % ...

In this case, we have defined the boundary conditions of a 2D Cantilever Beam.

In general terms:

  • The isDiri variable defines the region of the boundary where the "i"th set of Dirichet boundary conditions will be defined.
  • The sDir{i}.direction and sDir{i}-value variables define the directions (x/y/z) and the value of the imposed Dirichlet condition, respectively. In the case of multiple directions condition (i.e [1,2]) one may write also two values, this is [0,0.01]. However, if both values are the same, i.e [0,0], it is enough to type the value just once.
  • The isForcej variable defines the region of the boundary where the "j"th set of Neumann boundary conditions will be defined.
  • The sPL{j}.direction and sPL{j}.value variables define the directions and the value of the imposed Neumann condition.

2D Cantilever beam

  • $\mathbf{u} = [0,0] \ \forall \ (x,y)\in\Gamma_D$
  • $\mathbf{f} = [0,-1] \ \forall \ (x,y)\in\Gamma_N$

2D MBB beam (aka Bridge)

  • $u_y = 0 \ \forall \ (x,y)\in\Gamma_D^{(1)}$
  • $\mathbf{u} = [0,0] \ \forall \ (x,y)\in\Gamma_D^{(2)}$
  • $\mathbf{f} = [0,-1] \ \forall \ (x,y)\in\Gamma_N$

Arch

  • $\mathbf{u} = [0,0] \ \forall \ (x,y)\in\Gamma_D$
  • $\mathbf{f} = [0,-1] \ \forall \ (x,y)\in\Gamma_N$