Eigenvector aggregate is a method to approximate the eigenvector derivatives of the eigenvalue problem used in topology optimization. The method is described in the following paper "Topology Optimization using an Eigenvector Aggregate" by Bao Li, Yicong Fu and Graeme J. Kennedy. The paper is available on (To be added).
simple_example.pycontains the code for the simple example in paper section 3.1.demo.pycontains the code for a demo to show exact eigenvector derivatives and approximate eigenvector derivatives described in paper sections 4 and 5, respectively.tube_opt.pyis the main file that contains the code for the 2D tube optimization example. There are five problems in the tube example as follows:plot_Eis used to plot the E matrix shown in Figure 2 in the paper.accuracy_analysisis used to plot the accuracy of the approximate eigenvector derivatives shown in section 8.1.1 in the paper.optimization_eigenvalueruns the maximization of the fundamental frequency problem with a volume constraint.optimization_displacementruns the maximization of the fundamental frequency problem with a volume constraint and displacement constraint.optimization_stressruns the maximization of the fundamental frequency problem with a volume constraint and stress constraint.
topo_opt.pyis the main file for the topology optimization for the beam and square plate. The functionparse_cmd_argstakes the following arguments as input:- For the problem definition parameters:
domainis the domain of the problem, which can bebeamorsquare.objfis the objective function, which is set to befrequencyby default.confsis the constraint function, which is set tovolume_ubby default.vol-frac-ubis the upper bound of the volume fraction constraint.stress-ubis the upper bound of the stress constraint.dis-ubis the upper bound of the displacement constraint.
- For the topology optimization parameters:
nxis the number of elements along the x direction.fileris the density filter, which can bespectralorhelmholtz, with corresponding filter radiusr0which is set to be2.1(2.1 times the element size) by default.ptype-Kis the material penalization method for the stiffness matrix K, which can beSIMPorRAMP, with corresponding penalization parameterspandq. It is set toSIMPwithp=3by default.ptype-Mis the material penalization method for the mass matrix M, which can beMSIMP,RAMP, orLINEAR.optimizeris the optimizer used to solve the optimization problem, which can bepmmaortr, wherepmmais the MMA method andtris the trust region method.maxitis the maximum number of iterations.
- For the problem definition parameters:
outputfolder used to save the output figures and log files.otherfolder contains the code for generating the figures in the paper, helper functions, and bash scripts used to run the code on Georgia Tech's PACE cluster.run.shis the bash script used to run the code.
The code is written in Python 3. To run the code, you need to install the following packages:
- ParOpt (version 2.0.2 is recommended) is a parallel gradient-based optimizer that integrates the MMA method and the trust region method. The dependencies of ParOpt are listed MPI, BLAS, LAPACK, mpi4py, Cython, numpy, scipy
- scienceplots, matplotlib, numpy, scipy, mpmath, icecream
To run the code, simply run the bash script run.sh:
./run.sh
The code will run the simple_example, demo, tube, beam, and square plate examples. The user can also run the code with different parameters by modifying the bash script run.sh. The output figures and log files will be saved in the output folder.
If you find this code useful in your research, please consider citing:
To be added
If you have any questions, please contact Bao Li, Yicong Fu, or Graeme J. Kennedy.