I am a mechanical engineer experimenting with calculix to see if I can use it for what I have in mind and now I ran into the first mayor issue I would like to hear your opinion about:
Would it be possible to use the stresses calculated in one or more model(s) as loads in another one?
My motivation: I found a pretty nice python script on github (GitHub - calculix/beso: Python code for topology optimization using CalculiX FEM solver.) that enables me to do topology optimizations. That script runs calculix as FEM solver and I get impressive results already. The catch is that I can only do optimizations for a single load case at the moment. Do you think it would be possible to create an *.inp including multiple load cases to feed the topology optimization with?
You could use the
*Initial conditions, type=stress keyword to apply predefined stresses as initial values for analysis. But you would have to find a way to convert the stress output in the dat file from the first analysis to the initial stress input for the second analysis.
Another way would be to define simulation with multiple steps (that’s common in CalculiX). With proper settings, the second step uses the results from the first one as a base state. However, I don’t know if this solution will work with that beso optimization code.
As a side note, maybe you know that already but you can use beso with FreeCAD’s GUI.
Thank you for the hint. And yes, I use the FreeCAD GUI script to start the optimization. That means that I am quite the newbie when it comes to the inp file syntax having relied on the automatically generated files however. So it will probably take me a while to read the Calculix manual and try this out. I’ll be in touch.
Hi @Clonkh, as @Calc_em mentioned, you could use
*initial conditions, type=stress for this purpose. I believe there is a way to specify
continue_from="name" on the
beso_conf.py file, but I haven’t used it. How different are the load cases? I think beso doesn’t care about which step you are in, if I recall correctly, it looks at the end of the simulation.
There is also
steps_superposition =  on the
beso_conf.py file, maybe this is the way to go.
thank you I’ll look into both your advices. The part I am designing is meant for a sub system of a naval vessel. So it’ll be subject to accelerations that I want to include as resulting reation forces and torques at the mounting points. Since those can happen in opposite directions I hope to include them all in multiple load cases instead of adding them all in one case only to eliminate each other and rather use the rsults of each case as loads.
This is a question that comes up every now and then. I might not be understanding your case well enough but often the idea of imposing a previous stress state onto a model doesn’t make sense, even physically. If the stress was caused by external forces (including body forces like acceleration), you still have to keep those forces in place for the stress to continue to exist.
Perhaps you want to capture not the entire stress field but just the reactions at the mounting points then re-apply them as loads in a subsequent solve? That makes sense, and you can get them by hand using RF in the *NODE FILE card. But it’s not clear to me why you’d need to instead of including the original loads. You would also need to create new constraints somewhere else to balance them, which would be difficult for distributed acceleration loads.
I can imagine this could be useful if one wants to work with bodies that for whatever reason have some stresses that remains from previous steps. It would avoid to repeat the whole process from the beginning
For example, at the end of a cold forming process + plasticity.
This article / beginner tutorial for Solidworks shows exactly what I am trying to achieve:
As well as this graph from an Ansys tutorial:
See how the result outputs of each individual structural analysis get fed into the topology optimization as loads? Having seen such a tutorial made me want to replicate that for Calculix/Beso. That is why I am so fixated on using resulting stresses as loads. And I think that approach is quite smart for 2 reasons:
- The stresses resulting from each indvidual load applied alone differ greatly from all external loads applied at once.
- I don’t want to find out any displacement values of my mesh but determine where material is needed and cover all the possible loads my part will have to withstand at once.
On Friday I’ll be able to work from home. Then I’ll can concentrate on this issue. I’ll post the results then (probably how I miserably failed^^)