IBBM 2017

Results 1 to 9 of 9

Thread: Mixed prescribed and free rigid body components

  1. #1

    Default Mixed prescribed and free rigid body components

    Hi all,

    I am a new FEBio user.

    I have a rigid body in my model and I would like to prescribe its rotation about x, but leave free the other two rotations (about y and z). I want the other two rotations to be based on the contact with another body (the rigid bodies are not in contact with each other, but two deformable bodies between the rigid bodies are).

    This is what I am trying to do:

    <rigid_body mat="1">
    <prescribed bc="Rx" lc="2">0.0</prescribed>
    <prescribed bc="Rz" lc="2">0.0</prescribed>
    <prescribed bc="x" lc="2">0.0</prescribed>
    <prescribed bc="y" lc="2">0.0</prescribed>
    <prescribed bc="z" lc="2">-1.0</prescribed>
    <force bc="Ry" lc="2">0.0</force>
    </rigid_body>

    But I get the following error message:
    FATAL ERROR: Rigid body rotations cannot mix prescribed and free components.

    Is there a way to do this?

    Thanks for your help

    Alessandro

  2. #2
    Join Date
    Dec 2007
    Posts
    639

    Default

    Hi Alessandro,

    FEBio uses quaternions to describe rigid body rotations. Effectively, this is equivalent to specifying a rotation axis (using a unit vector) and a rotation angle about that axis. To prescribe a rotation about the x-axis, the unit vector must be along x. This will automatically constrain rotations in other directions. That's why FEBio issues this error.

    To reproduce the motion that you mention, you will need to use rigid joints. For example, you combine two revolute joints to produce a universal joint (two rotation degrees of freedom, which you can leave unconstrained), then you can use a third revolute joint aligned with the x-axis to which you prescribe a desired rotation angle. A universal joint requires the specification of three rigid bodies, a driving yoke, a spider and a driven yoke (http://www.motorera.com/dictionary/pics/u/ujoint.gif), with one revolute joint connecting the driving yoke and spider and the other connecting the spider and the driven yoke. Then you can connect the driving yoke to the ground via the the third revolute joint with a prescribed rotation. The driven yoke should be the rigid body to which you want to prescribe the x-rotation.

    Best,

    Gerard

  3. #3

    Default

    Hi Gerard,

    thanks for replying. I think what you are saying is clear. So, if I want to create a universal joint between two rigid bodies, I should create a "dummy" rigid body (with just a single element for example) in between the two original rigid bodies, right? Something like:

    RB1 - revolute joint - dummy RB - revolute joint - RB2

    Also, can Rigid Joints be defined in the Constraints section of a Step? So that I can control kinematically one joint in the first step and then apply a load using the same joint in the second step?

    Thanks

    Alessandro

  4. #4
    Join Date
    Dec 2007
    Posts
    639

    Default

    Hi Alessandro,

    RB1 - revolute joint - dummy RB - revolute joint - RB2
    Yes. You don't need to define any finite element domain for the dummy RB. You just need to create a rigid body material and place its center of mass at the appropriate location (at the center of the universal joint).

    Also, can Rigid Joints be defined in the Constraints section of a Step? So that I can control kinematically one joint in the first step and then apply a load using the same joint in the second step?
    Yes, rigid joints can belong to individual steps.

    Best,

    Gerard

  5. #5

    Default

    Hi Gerard,

    I made the joint at the knee using the two dummy rigid bodies. I am able to run simulations in which I drive kinematically 1 dof at a time (e.g. drive flexion and fix every other dof), and also some combinations (e.g. flexion and AP translation). However, for some combinations (e.g. VV and flexion) the simulation struggles to converge (keeps reforming stiffness matrix) and the joint stops working correctly (when eventually it converges, the femur is in an absurd spot).

    Could I send my model to you so that you can take a look? I would really appreciate it.

    Thanks,

    Alessandro

  6. #6
    Join Date
    Dec 2007
    Posts
    639

    Default

    Hi Alessandro,

    Yes, I'll take a look and see if I can resolve the issue.

    Best,

    Gerard

  7. #7
    Join Date
    Dec 2007
    Posts
    639

    Default

    Hi Alessandro,

    As per my email message to you, I was able to resolve this issue by setting the stiffness matrix to non-symmetric (<symmetric_stiffness>0</symmetric_stiffness> in the Control section). Rigid joints produce non-symmetric stiffness matrices, so the convergence of the model becomes haphazard when using the default symmetric stiffness setting.

    Best,

    Gerard

  8. #8
    Join Date
    Jul 2017
    Posts
    8

    Default

    Hi there

    I am having a very similar problem. I tried to apply the non-symmetric description but it is still reducing my dt value and creating tiny time steps and then diverging. I am also unclear on what it is struggling with when prescribing motions to the rigid joint?

    Thanks,

    Julian

  9. #9

    Default

    Hi all,

    Gerard was able to fix my problem. The main fix was to change reduce the rigid joint penalties from the large numbers found in the documentation (1e12) to 1.0.

    Hope this helps others.

    Thanks for your help!

    Alessandro

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •