Can I give a particle certain rotation angle or displacement in EDEM?

Raheem Sterling_22160
Raheem Sterling_22160 Altair Community Member
edited July 2023 in Community Q&A

Hi

For some reason, I need to give a particle a constant velocity or angluar velocity to debug a contact model, to compare with the analytical solution which given by the certain displacement and rotation angle with particles.

Thanks

Tagged:

Best Answer

Answers

  • RWood
    RWood
    Altair Employee
    edited July 2023 Answer ✓

    Hi,

    You can apply the desired linear and angular velocity at creation time in a factory, but I assume you don't mean that. After creation you'll need to apply the force or torque that corresponds to the velocity value you would like, after first subtracting the force or torque that was calculated during the current timestep.

    See here:

    https://community.altair.com/community?id=community_question&sys_id=3729fb461b548d94507ca6442a4bcbf9&anchor=answer_1c5b209edb5c0950cfd5f6a4e29619c5&view_source=searchResult

    That post is about bringing the particles to rest, so you would simply add the force or torque that gives your desired velocity on top.

    Cheers,

    Richard

  • Raheem Sterling_22160
    Raheem Sterling_22160 Altair Community Member
    edited July 2023

    Hi,

    You can apply the desired linear and angular velocity at creation time in a factory, but I assume you don't mean that. After creation you'll need to apply the force or torque that corresponds to the velocity value you would like, after first subtracting the force or torque that was calculated during the current timestep.

    See here:

    https://community.altair.com/community?id=community_question&sys_id=3729fb461b548d94507ca6442a4bcbf9&anchor=answer_1c5b209edb5c0950cfd5f6a4e29619c5&view_source=searchResult

    That post is about bringing the particles to rest, so you would simply add the force or torque that gives your desired velocity on top.

    Cheers,

    Richard

    Hi Richard,

    If my force in the contact model was calculated by: F=k*delta_angle, where k is stiffness and relative_angle means the rotation angle of this particle compared with last timestep, so can the calculation of this angle be written as element1.angvel*time step?or element1.angvel*time step is the rotation angle for the next timestep?

  • RWood
    RWood
    Altair Employee
    edited July 2023

    Hi Richard,

    If my force in the contact model was calculated by: F=k*delta_angle, where k is stiffness and relative_angle means the rotation angle of this particle compared with last timestep, so can the calculation of this angle be written as element1.angvel*time step?or element1.angvel*time step is the rotation angle for the next timestep?

    Anything you access via element.whatever will be for the current timestep. Values you access from within calculateForce( ) have come from EDEM for that timestep, as far as wherever the model is in the chain. Assuming you have something like:

    Hertz Mindlin (HM)
    API plugin
    Standard Rolling friction

    if you access element1.angvel inside your plugin, you'll be getting the values after they've come out of the HM for that timestep. Whereas if you had:

    Hertz Mindlin (HM)
    Standard Rolling friction
    API plugin

    now your element1.angvel would still be for that timestep but would be the value that came out of the rolling friction model, after already having been through the HM.

    Richard

  • Raheem Sterling_22160
    Raheem Sterling_22160 Altair Community Member
    edited July 2023

    Anything you access via element.whatever will be for the current timestep. Values you access from within calculateForce( ) have come from EDEM for that timestep, as far as wherever the model is in the chain. Assuming you have something like:

    Hertz Mindlin (HM)
    API plugin
    Standard Rolling friction

    if you access element1.angvel inside your plugin, you'll be getting the values after they've come out of the HM for that timestep. Whereas if you had:

    Hertz Mindlin (HM)
    Standard Rolling friction
    API plugin

    now your element1.angvel would still be for that timestep but would be the value that came out of the rolling friction model, after already having been through the HM.

    Richard

    Thanks, can I understand as that:

    element.value would change and pass through the chain of CM until the last one, then the element.value is the properties of particles updating in current timestep. In my case, element1.angVel*timestep or element1.velocity would be added to the orientation and translation of particles to the next timestep.

    Generally speaking, does EDEM update the force first and then update the position, or the opposite process?

  • RWood
    RWood
    Altair Employee
    edited July 2023

    Thanks, can I understand as that:

    element.value would change and pass through the chain of CM until the last one, then the element.value is the properties of particles updating in current timestep. In my case, element1.angVel*timestep or element1.velocity would be added to the orientation and translation of particles to the next timestep.

    Generally speaking, does EDEM update the force first and then update the position, or the opposite process?

    I guess it depends what way you look at it. Those values are applied during the current timestep (n), but you would only see the effects of them, or access their values, in the next time step (n+1). 
    image
    We're talking about calculateForce( ) in step 4, you could do some more updating of the forces in a particle body force in step 5, but the particle values are updated in that same timestep, in step 6, though you won't see those changes until the following timestep.

    Richard

  • Raheem Sterling_22160
    Raheem Sterling_22160 Altair Community Member
    edited July 2023

    I guess it depends what way you look at it. Those values are applied during the current timestep (n), but you would only see the effects of them, or access their values, in the next time step (n+1). 
    image
    We're talking about calculateForce( ) in step 4, you could do some more updating of the forces in a particle body force in step 5, but the particle values are updated in that same timestep, in step 6, though you won't see those changes until the following timestep.

    Richard

    Thanks, it's quiet clear, but if I want to rotate a vector which depends on its orientation, the only way safe is to access the element.orientation, but not rotate from it's angle. Or can I do it in step 6 and retrive the value in step 4?
  • RWood
    RWood
    Altair Employee
    edited July 2023

    Thanks, it's quiet clear, but if I want to rotate a vector which depends on its orientation, the only way safe is to access the element.orientation, but not rotate from it's angle. Or can I do it in step 6 and retrive the value in step 4?

    Unfortunately not. Users have no way of interacting with the API other than at steps 2, 4 and 5. After the forces are all collected in step 5, the rest of the calculations are carried out by EDEM's solver and users cannot interact with the data any further for that timestep.

    Richard