multiple bodies

112 views
Skip to first unread message

Mohammad Wasfi

unread,
Jun 13, 2022, 11:24:08 PM6/13/22
to ProjectChrono
Hi,
I'm running a co-simulation script to simulate dropping a cone that is split into two bodies on a particle bed using a material-based model. However, I am trying to have the two bodies either linked together or move at the same speed. I tried to use the Chlink different methods to link the bodies but it didn't work. I also tried to include two motors and have the two bodies move at the same speed but that did not work either. I looked at many demos but they mostly have only one body in a simulation and so could not find something similar to my application. I am going to include my file for your reference. 

Thank you so much, 
cone_drop.cpp

Ruochun Zhang

unread,
Jun 14, 2022, 1:35:56 AM6/14/22
to ProjectChrono
Hi,

Without looking into too many details, you should try this first: Change the first argument of method ApplyMeshMotion to be corresponding mesh numbers. We you AddMesh, it returns the mesh number that you can refer to in your script, but in your case, they are simply 0 and 1 (instead of both 0).

If there are still problems, could you follow up and provide more information on how it "did not work"?

Thank you,
Ruochun

Mohammad Wasfi

unread,
Jun 15, 2022, 4:44:29 PM6/15/22
to ProjectChrono
Hello, 

Thank you so much for your response. That indeed solved the problem. However, it did not help me with the purpose of my simulation. the reason that I split the cone body into two bodies is that I wanted to obtain the forces on the tip of the cone only. However, by splitting the body, the simulation time increased by 2.5 and I am not really sure of the accuracy of the result. Is there a way to specify the specific part of the cone( the tip in case) where I want to obtain the forces on? in other words,  is there a way to obtain the forces on the tip of the cone only without the need for splitting the cone into two different bodies? I am new to Chrono so I am not 100% sure of its abilities. I would assume that this is something common and would have a solution.

Thank you so much,  

Ruochun Zhang

unread,
Jun 15, 2022, 10:59:04 PM6/15/22
to ProjectChrono
Hi,

That should be possible and in fact, I think you are almost doing that. The current Chrono::GPU can only output the total force experienced by a mesh, which means you have to do some pre-processing to split the mesh into two (near-tip region and the rest of the cone body), however you don't have to split the Chrono body into two. After splitting the mesh (maybe with a CAD software), you should have 2 meshes, which are both non-closed surface meshes, but it is fine, because Chrono::GPU treats a mesh as a collection of triangle facets anyway; just make sure when put together, these 2 meshes form an almost-watertight cone surface. Then you can load them in your script via two AddMesh calls (or add AddMeshes, if you would). Then, these two meshes can be managed by one Chrono body. It's just like before, get position and velocity of that Chrono body, and apply that information to both meshes. Then, you can use CollectMeshContactForces to collect the force and torque information from whichever mesh you are interested in. Note however, before you Accumulate_force and Accumulate_torque to that Chrono body, you need to add cone_force and cone_torque of the two partial meshes together, because obviously they are both parts of the cone body and the forces they experience stack, from the perspective of the Chrono body.

One thing that is a bit weird to me is that splitting the cone causes the simulation time to increase significantly for you. The Chrono side of simulation should only take a fraction of the total runtime, for a reasonably sized DEM problem. Either the mesh got some issues or the problem size is extremely small. But it's perhaps not a big show-stopper.

Finally, I hear you, I'll consider adding more explicit control/query methods to mesh objects in our upcoming new-generation Chrono DEM solver.

Thank you,
Ruochun 

Mohammad Wasfi

unread,
Jun 17, 2022, 2:01:21 AM6/17/22
to ProjectChrono
Hello, 
Thank you for your explanation. I also found it weird that the simulation time increased by such a significant factor. my simulations used to take 3.30 hrs and now they take 8hrs. As a result, I would try to switch gears and try the method you described. However, I have some questions about it. when you import the meshed all together in one file, how can you distinguish between the different meshes when writing the script? in other words, since the meshes are all managed by the same body,  how can I get the forces on one mesh only (e.g. tip of the cone)?  I am new to Chrono so I am still trying to learn the logic when scripting stuff. I would appreciate if you have an example of how I can do this. 

Thank you so much

Ruochun Zhang

unread,
Jun 17, 2022, 3:01:05 AM6/17/22
to ProjectChrono
Hi,

Not all in one file: you should split your meshes into 2 different files and load separately, if you want to make it easier. Each file should contain a part of your original mesh. This task is pre-processing, you have to use a mesh tool, and Chrono cannot help you do that. Any modern CAD should suffice. Should be easily doable in Python too, Trimesh package could help you. Just to name a few possibilities.

Thank you,
Ruochun

Reply all
Reply to author
Forward
0 new messages