Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Calculating collision: finite elements

  1. Jun 1, 2004 #1
    Hello guys/gals,

    I have a finite volume scheme to calculate the movement of a piece of yarn. This involves dividing the yarn into a number of finite volumes, the center of which is called a node. Collision with surfaces is somewhat of a problem. My integration scheme involves the following steps:

    1. Calculate contact : project the position p normally on the surface, p'. Take p = p'
    2. Calculate the tension force F acting on a node
    3. Calculate the surface reaction. Adjust speed v(old) and force F as below, with (n) the normal and (t) the transversal component:

      v(old) = v(old)(t) - Beta*v(old)(n),
      F = F(t) + F(n) + FrictionForce with F(n) = 0 if F(n) is directed into the surface
    4. Calculate the new speed of a node : v(new) = v(old) + F*dt/m;
    5. Calculate the new position of a node : p(new) = p(old) + v(new)*dt
    The problem is in some cases this makes the tension force oscillate. Does anyone have an idea on a better method to use for handling collision?
  2. jcsd
  3. Jun 1, 2004 #2
    Have you taken into account damping?
    so, for instance,

    [tex] \underline v_{new} = (1 - \gamma) \underline v_{old} + \underline F dt/m [/tex]

    where [tex]0 < \gamma < 1[/tex] is the damping coefficient (friction or whatever).

    This will help prevent irritating oscillations and is generally more physical.

  4. Jun 2, 2004 #3
    I am already using a fourth order damping in order to prevent oscillations and keep it stable, without collision even occurring.

    v(i) = v(i) - Omega*Damping(i)


    Damping(i) = v(i-2) - 4*v(i-1) + 6*v(i) - 4*v(i+1) + v(i+2)

    But I still get oscillations despite of the damping in collision, decreasingthe timestep makes the numerical oscillations smaller but ofcourse makes it slower. That's why I'm wondering whether there isn't a better algorithm to calculate collision.
  5. Jun 2, 2004 #4
    Could you perhaps describe the situation a bit more? I'm having difficulty understanding what is colliding with what and were.

    Generally, collisions are quite tricky to handle numerically. Another method is to assume a spring constant [tex]\kappa \gg 1[/tex] between the colliding objects and treat the collision as a spring. If you put in a maximum range for this interaction then they will only 'collide' once they have come within a certain range of each other, but treating it like a spring will mean that if the two objects are hovering around this range you won't have the force changing so dramatically as they go in and out of contact.

    Also, you might want to investigate using a better algorithm when integrating the velocity. What you are using can be quite unstable under oscillations, so perhaps using a Runge-Kutta or predictor-corrector method will be better. (for instance, http://www.library.cornell.edu/nr/bookcpdf/c16-1.pdf [Broken] )

    Last edited by a moderator: May 1, 2017
  6. Jun 2, 2004 #5
    The nodes of the elastic yarn are colliding with the supposed completely unelastic metal objects like prewinder, main nozzles etcetera. I mainly get tension oscillations when the yarn is moving over a curved surface, and when the speed of the yarn is larger on the place where it starts moving over the surface than where it leaves the surface. Your suggestion of treating the collision as a spring sounds interesting but could you explain more in detail how this would work?

    For the algorithms to calculate the new speed and position I currently use Euler's method as it is quite stable. I have already programmed a Runge-Kutta version of my model but still get tension oscillations in collision. On top of that, the results are not that much more accurate and computation time increases significantly. The reason why higher order methods such as the Runge Kutta method are probably not that much more accurate is that when using a Taylor series of order n, the function in it also needs to be n times differentiable. I don't think the way collision is handled as of now in my program, meets that requirement.
  7. Jun 2, 2004 #6
    Ok, so are you saying that the elements stretch? (that is, the nodes are not at a fixed separation)

    Although the metal is not springy, the yarn certainly is, so any interaction between the two can probably be modelled quite well with a spring. Of course, you should try other potentials too. The idea is quite simple. You have a node and it is closer to the metal surface than the threshold distance. You then calculate the repelling force between them
    [tex]\underline {F_r} = \kappa ( r_t - |\underline {dr}| ) \underline {\hat{dr}}[/tex]
    where [tex]\underline {dr}[/tex] is a vector from the surface to the node, [tex]\underline {\hat{dr}} = \underline {dr} / |\underline {dr}|[/tex] and [tex]r_t[/tex] is the threshold range of interaction. Assuming I have not missed out a minus sign somewhere this ought to give you a repelling force between the node and the surface which will give you a collision.

    Another advantage of this method is that you now have a normal force between the yarn and the metal. Thus it is possible to calculate the friction force [tex]\underline {F_f} = - \underline {v_t} \mu |\underline F_r | [/tex] where [tex]\mu[/tex] is the friction coefficient between metal and yarn and [tex]\underline {v_t}[/tex] is the velocity along the surface.

  8. Jun 2, 2004 #7

    What you proposed sounds interesting, I'll try it, thanks.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook