.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/topology_optimization/topology_optimization_short_cantilever.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_topology_optimization_topology_optimization_short_cantilever.py: Solve a 2D short cantilever topology optimization problem ========================================================= .. GENERATED FROM PYTHON SOURCE LINES 23-32 .. code-block:: default import matplotlib.pyplot as plt from gemseo.api import configure_logger from gemseo.api import create_scenario from gemseo.problems.topo_opt.topopt_initialize import ( initialize_design_space_and_discipline_to, ) from matplotlib import colors configure_logger() .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 33-36 Setup the topology optimization problem --------------------------------------- Define the target volume fraction: .. GENERATED FROM PYTHON SOURCE LINES 36-38 .. code-block:: default volume_fraction = 0.3 .. GENERATED FROM PYTHON SOURCE LINES 39-40 Define the problem type: .. GENERATED FROM PYTHON SOURCE LINES 40-42 .. code-block:: default problem_name = "Short_Cantilever" .. GENERATED FROM PYTHON SOURCE LINES 43-44 Define the number of elements in the x- and y- directions: .. GENERATED FROM PYTHON SOURCE LINES 44-47 .. code-block:: default n_x = 50 n_y = 25 .. GENERATED FROM PYTHON SOURCE LINES 48-49 Define the full material Young's modulus and Poisson's ratio: .. GENERATED FROM PYTHON SOURCE LINES 49-52 .. code-block:: default e0 = 1 nu = 0.3 .. GENERATED FROM PYTHON SOURCE LINES 53-54 Define the penalty of the SIMP approach: .. GENERATED FROM PYTHON SOURCE LINES 54-56 .. code-block:: default penalty = 3 .. GENERATED FROM PYTHON SOURCE LINES 57-58 Define the minimum member size in the solution: .. GENERATED FROM PYTHON SOURCE LINES 58-60 .. code-block:: default min_memeber_size = 1.5 .. GENERATED FROM PYTHON SOURCE LINES 61-62 Instantiate the :class:`.DesignSpace` and the disciplines: .. GENERATED FROM PYTHON SOURCE LINES 62-74 .. code-block:: default design_space, disciplines = initialize_design_space_and_discipline_to( problem=problem_name, n_x=n_x, n_y=n_y, e0=e0, nu=nu, penalty=penalty, min_member_size=min_memeber_size, vf0=volume_fraction, ) .. GENERATED FROM PYTHON SOURCE LINES 75-78 Solve the topology optimization problem --------------------------------------- Generate a :class:`.MDOScenario`: .. GENERATED FROM PYTHON SOURCE LINES 78-85 .. code-block:: default scenario = create_scenario( disciplines, formulation="DisciplinaryOpt", objective_name="compliance", design_space=design_space, ) .. GENERATED FROM PYTHON SOURCE LINES 86-87 Add the volume fraction constraint to the scenario: .. GENERATED FROM PYTHON SOURCE LINES 87-89 .. code-block:: default scenario.add_constraint("volume fraction", "ineq", value=volume_fraction) .. GENERATED FROM PYTHON SOURCE LINES 90-91 Generate the XDSM: .. GENERATED FROM PYTHON SOURCE LINES 91-93 .. code-block:: default scenario.xdsmize() .. rst-class:: sphx-glr-script-out Out: .. code-block:: none INFO - 10:03:34: Generating HTML XDSM file in : xdsm.html .. GENERATED FROM PYTHON SOURCE LINES 94-95 Execute the scenario: .. GENERATED FROM PYTHON SOURCE LINES 95-97 .. code-block:: default scenario.execute(input_data={"max_iter": 200, "algo": "NLOPT_MMA"}) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none INFO - 10:03:34: INFO - 10:03:34: *** Start MDOScenario execution *** INFO - 10:03:34: MDOScenario INFO - 10:03:34: Disciplines: DensityFilter MaterialModelInterpolation FininiteElementAnalysis VolumeFraction INFO - 10:03:34: MDO formulation: DisciplinaryOpt INFO - 10:03:34: Optimization problem: INFO - 10:03:34: minimize compliance(x) INFO - 10:03:34: with respect to x INFO - 10:03:34: subject to constraints: INFO - 10:03:34: volume fraction(x) <= 0.3 INFO - 10:03:34: Solving optimization problem with algorithm NLOPT_MMA: INFO - 10:03:34: ... 0%| | 0/200 [00:00 .. GENERATED FROM PYTHON SOURCE LINES 110-111 .. image:: /_images/topology_optimization/Short_Cantilever_history.png .. GENERATED FROM PYTHON SOURCE LINES 114-115 Plot the solution: .. GENERATED FROM PYTHON SOURCE LINES 115-128 .. code-block:: default plt.ion() # Ensure that redrawing is possible fig, ax = plt.subplots() im = ax.imshow( -scenario.optimization_result.x_opt.reshape((n_x, n_y)).T, cmap="gray", interpolation="none", norm=colors.Normalize(vmin=-1, vmax=0), ) fig.show() im.set_array(-scenario.optimization_result.x_opt.reshape((n_x, n_y)).T) fig.canvas.draw() plt.savefig(problem_name + "_solution.png") .. image-sg:: /examples/topology_optimization/images/sphx_glr_topology_optimization_short_cantilever_001.png :alt: topology optimization short cantilever :srcset: /examples/topology_optimization/images/sphx_glr_topology_optimization_short_cantilever_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 129-130 .. image:: /_images/topology_optimization/Short_Cantilever_solution.png .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 16.226 seconds) .. _sphx_glr_download_examples_topology_optimization_topology_optimization_short_cantilever.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: topology_optimization_short_cantilever.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: topology_optimization_short_cantilever.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_