calculix / beso

Python code for topology optimization using CalculiX FEM solver.
GNU Lesser General Public License v3.0
314 stars 47 forks source link

Deflection constraint and goal #31

Open sebastianmaklary opened 1 year ago

sebastianmaklary commented 1 year ago

Hi again. :)

While being able to minimize compliance with the optimization_base = "stiffness" is great, I feel that there's a need for being able to also have the stiffness as an input since it is often a requirement in the part design and in my opinion would make more sense as an input than having a goal mass does. When we design mechanical components, the constraints are often: space usage, interface faces, stress level and a either certain or minimum stiffness while the mass is just to be kept as low as possible within the constraints in addition to manufacturing constraints. The beso script allows for control of all except for the stiffness constraint so if that could be implemented, then it would improve the usefulness.

I imagine that an implementation might be similar to how the failure index imposes an optimization constraint. The constraint could either be maximum deflection of all the nodes in the *ELSET or it could be the deflection of a particular node. The constraint should be possible to be placed on either the total deflection or a directional deflection.

A related thing is if the deflection in a node was an optimization goal like the mass is in the beso code. This would allow the design of flexible mechanisms while under load. A deflection boundary condition also does something to create flexible mechanisms by making something that moves a certain way with low stresses but I believe that this should then be used in addition to a load and a deflection goal in another direction as that could be among the functional requirements for a mechanism but where a boundary condition would not be realistic due to reacting forces through it.

fandaL commented 1 year ago

Using true constraint on displacement would be difficult with actual code. Maybe a little help for you is to monitor a displacement during the optimization, so the optimization is still based on compliance (not knowing about your displacement constraint) but you can see where a mass fitting your requirement is. See displacement_graph parameter in beso_conf.py