Currently Peregrine seems to only allow users to control the ground structure indirectly using node division in the “Design Domain” component. Is it possible to have an API for users to specify their own ground truss structure (not just the nodes in the ground mesh but the connectivity also), and have Peregrine do layout optimization on it (like sizing optimization and elements can be taken out if cross-section is sized to zero)? Based on my understanding, this should require little change in the mathematical formulation.
I appreciate that there is an example showing how to use the “Define Topology” component and apply geometry optimization to it. Adding ground structure domain specifications would be immensely helpful for the users!
Thank you very much for this great plugin! Very helpful for my research!
Depending on your use case, you might be able to get some mileage out of the “Define Topology” component followed by the “Filter” component, which will take in an initial structure, optimize the sizes and filter out smaller elements, but there will be no way of performing member adding on this structure using the components currently available.
Thanks for your reply! Yes, a ground structure interface for topology optimization is definitely a killer feature! I’d love to see them in the next release.
Can you say a bit more about how does the filter component work? Does it work as follows?
It first removes the small-cross-section elements below a certain “Filter Threshold”, and repositions the nodal positions to restore equilibrium if needed? Does it run a sizing optimization, like treating each element’s cross-section as independent variables and optimizing them all together?
Good to hear from you - it’s been a while since we met in Boston!
Just to clarify - it should be possible to specify a ground structure as an input, the only issue is that if this contains a large number of members it will likely be a bit slower to solve as a layout/topology optimization problem than when using an inbuilt automatically generated ground structure, as the adaptive “member adding” feature won’t be used.
Basically a size optimization can be performed, with each non-optimal member assigned a zero area - which equates to layout/topology optimization when many nodes/members are involved.
I’ll ask Jack to share an example file to illustrate this.
Here is an example file that includes a user-defined ground structure as described. userGS.gh (28.6 KB)
Note that some problems defined in this way may produce a solution which is more complex than than you might expect, which tends to occur when equivalent volume solutions are found and the more complex one is chosen. Using a more highly connected initial ground structure, or one which has been more carefully constructed around the problem can help alleviate this.
Filtering behaves exactly as you described, including the sizing optimization. I should add that it also takes in a minimum permissable percentage volume increase, such that any solution that would require a larger volume increase at the specified filter threshold is rejected and filtering will fail.
@m.gilbert Thank you very much for the clarification! Indeed it’s been long - and I am very happy to see the scripts we played at the IASS workshop flourished into such a great plugin! Fantastic work from you guys!
@j.maggs This example is exactly what I’m looking for, thank you! But when I was playing with the filter component, more often than not it turns yellow and told me:
Component did not complete intended action. Input solution is unchanged Please try a smaller threshold
I was playing with some random ground structures and the “define topology” topology component is working, but the filter component is complaining with the message above. No matter how I change the threshold it still cannot complete the operation.
Filtering can fail for several reasons. All members with area below the threshold are removed in a single pass, so if the topology is such that one of the removed members cannot be compensated for by others once removed, then filtering will fail. Alternatively, it may be that a solution is being found, but it is rejected due to the volume increase being larger than that permitted by the Volume Increase Limit (the Filter component Limit input).
Based on the images you’ve shared, I would guess that a threshold of 0.1 - which looks to be the minimum on your slider - is still too high for this particular structure. I’d go lower, and consider raising the Volume Increase Limit too. Note that, for some structures, finding the right combination of Volume Increase Limit and Filter Threshold values can require some trial and error - this will occur if the structure contains some very small members which are nontheless critical to the final structure.
Thanks for your prompt reply! I’ve tried the threshold from 0.01 down to 0.000001 and limit from 100 to 1000, all warnings and no result returned. Is the Limit a percentage number (from the default value seems it is)?
I’ve tried the threshold from 0.01 down to 0.000001 and limit from 100 to 1000
These values seem reasonable to me. It may be that one of the smallest members in your structure cannot be filtered out, for the reasons discussed above. If you like, send a copy of the file with the issue to firstname.lastname@example.org, and I or one of my colleagues will see if we can identify the problem.