EDEM API Contact Model | Not working correctly: Bonded-Particle Contact Model V3.5.0
Hi Everyone,
I have been trying to implement the Bonded-Particle contact model (v3.5.0) API provided by EDEM (from its previous EDEMSimulation forums), then it works fine. But when I tried to import the geometry model(.mesh file), the bead chain model created using the (v3.5.0)API broke into particles when it collided with the geometry model I imported.In contrast, when I simply use the built-in Bonding V2 model against the same parameters as for API, then it works fine.
Any suggestions, what could be the potential issue with that?
Thank you.
Best regards,
Bai
Best Answers
-
Hi Bai,
I believe the model is setup correctly only the particle velocities are high (6 m/s) and the bond stiffness is also high (1e10 N/m3).
This typically means we need lower time-steps for the simulation to be stable, if you try closer to 1e-7 s for the time-step this should show more stable behaviour.
RegardsStephen
0 -
Hi Bai,
I had a look at the case again and I notice there are two factories. 'New Factory 1' is a static factory creating the particles at t=0 s.In the settings in bonded_particle_prefs.txt the bond formation time is set to 0 s so all particles created at t=0 s are bonded.
There is a second factory "new factory 2" which is inside the geometry section and this s a dynamic factory, so any particles created after t=0 s are not bonded, so give the impression of breaking although no bonds were ever created.
This is the difference between the in-built model which allows for bonds to be created at the same time as the particles are created, rather than at one specified point in time (0 s in this case).
In the code (gpu example) this is the point at which the bonds are formed. Its checking if the Contact property Bond Status is 0 at the specified time, and if so is creating the bond (increasing status from 0 to 1.
if (true == element2.isParticle())
{
//create bonds if:
if (simulation.getCurrentSimulationTime() > m_requestedBondTime)
{
if (simulation.getCurrentSimulationTime() <= (m_requestedBondTime + simulation.getTimestep()))
{
if (m_BondStatus[0] == 0.0)
{
//change bond status to set that it exists
m_BondStatusDelta[0] += 1.0;
//this is only recorded once, can later be used to check if bond is in compression or tension
customPropReal* m_BondRandDelta = contact.getCustomPropertyDelta(iBOND_RANDOM_COEF);
customPropReal random_number = (rand100(element1.getID(), element2.getID(), simulation.getCurrentSimulationTime()) - CUSTOM_REAL_CONST(50.0)) / CUSTOM_REAL_CONST(50.0); //number between -1 and 1
m_BondRandDelta[0] = random_number;
//tangentialPhysicalOverlap = real3();
}
}
}
}If you want dynamic bonding you would have to change these conditions.
Regards
Stephen
0 -
Thank you Stephen, it worked.
Best regards,
bai
0
Answers
-
Hi Bai,
I believe the model is setup correctly only the particle velocities are high (6 m/s) and the bond stiffness is also high (1e10 N/m3).
This typically means we need lower time-steps for the simulation to be stable, if you try closer to 1e-7 s for the time-step this should show more stable behaviour.
RegardsStephen
0 -
Hi Stephen,
Thank you very much for your valuable feedback. After trying a time step of 1e-7 s, there was no significant improvement in the performance. I also tried a time step of 1e-8 s, but the situation did not improve. The bead-chain model I created using the (v3.5.0)API breaks when it collides with the imported geometry, but it does not break when colliding with the geometry created by EDEM itself. Additionally, when using Bonding V2 to create the bead-chain model, it does not break upon collision with the geometry.Do you have any good suggestions regarding this? Thanks!
Best regards,
Bai
0 -
Hi Bai,
I had a look at the case again and I notice there are two factories. 'New Factory 1' is a static factory creating the particles at t=0 s.In the settings in bonded_particle_prefs.txt the bond formation time is set to 0 s so all particles created at t=0 s are bonded.
There is a second factory "new factory 2" which is inside the geometry section and this s a dynamic factory, so any particles created after t=0 s are not bonded, so give the impression of breaking although no bonds were ever created.
This is the difference between the in-built model which allows for bonds to be created at the same time as the particles are created, rather than at one specified point in time (0 s in this case).
In the code (gpu example) this is the point at which the bonds are formed. Its checking if the Contact property Bond Status is 0 at the specified time, and if so is creating the bond (increasing status from 0 to 1.
if (true == element2.isParticle())
{
//create bonds if:
if (simulation.getCurrentSimulationTime() > m_requestedBondTime)
{
if (simulation.getCurrentSimulationTime() <= (m_requestedBondTime + simulation.getTimestep()))
{
if (m_BondStatus[0] == 0.0)
{
//change bond status to set that it exists
m_BondStatusDelta[0] += 1.0;
//this is only recorded once, can later be used to check if bond is in compression or tension
customPropReal* m_BondRandDelta = contact.getCustomPropertyDelta(iBOND_RANDOM_COEF);
customPropReal random_number = (rand100(element1.getID(), element2.getID(), simulation.getCurrentSimulationTime()) - CUSTOM_REAL_CONST(50.0)) / CUSTOM_REAL_CONST(50.0); //number between -1 and 1
m_BondRandDelta[0] = random_number;
//tangentialPhysicalOverlap = real3();
}
}
}
}If you want dynamic bonding you would have to change these conditions.
Regards
Stephen
0 -
Thank you Stephen, it worked.
Best regards,
bai
0