I have some questions about the FDK setup

Hello AnyBody,
I'm trying to replace the left side of the mandible with a prosthesis, in which the skull is fixed and the mandible is driven to complete the occlusal motion, the contact between the prosthesis after replacement and the natural bone on the right side was set to the FDK joint.Because of the prosthetic replacement on the left side, the condyle peaks on both sides of the condyle are not at the same level,and the contact pressure modulus on both sides was also different considering the material difference between the natural joint and the prosthesis. I used the FDK tutorial method, but this will cause the replacement prosthesis to penetrate too much, singlesidedonoff = On and singlesidedonoff = Off, modifying the contact pressure modulus and refining the mesh on the contact surface do not have much effect.
So my question is how do i solve the big through? Should FDK be penetrating on contact?
Here is my FDK setup code and the model diagram:
AnyKinLinear TMJ_JntR={
AnyRefNode &MandibleRef = ..Seg.Mandible.TMJ_NodeR;
AnyRefNode &SkullRef = ..Seg.Skull.TMJ_NodeR;
Ref=0;
};
AnyKinEqSimpleDriver TMJ_JntR_Z_Constraint = {
AnyKinMeasureOrg TMJ_JntR_Z={
AnyKinLinear &ref = ..TMJ_JntR;
MeasureOrganizer={2};
};
DriverPos = {0.00};
DriverVel = {0.0};
Reaction.Type = {Off};
CType={ForceDep};
};
AnyKinMeasureOrg TMJ_JntR_X={
AnyKinLinear &ref = ..HumanModel.Jnt.TMJ_JntR;
MeasureOrganizer={0};
};

AnyKinEqSimpleDriver TMJ_JntR_X_Driver = {
AnyKinMeasure& ref = .TMJ_JntR_X;
DriverPos = {0};
DriverVel = {0.0};
Reaction.Type = {Off};
CType={ForceDep};
};
AnyForceSurfaceContact TMJ_JntR_Contact =
{ AnySurface &sMaster = ..Seg.Mandible.SurfContactRight;
AnySurface &sSlave =Main.Model.HumanModel.Seg.Skull.SurfContactRight;
PressureModule = 2.5e8;
ForceViewOnOff = On;
MeshRefinementMaster = 0;
MeshRefinementSlave = 0;
SingleSidedOnOff= On;
};
AnyForce LEFTArtificialStiffness =
{
AnyFloat Stiffness = 1e4; // N/m
AnyKinLinear lin =
{
AnyRefNode &MandibleRef = ...Seg.Skull.TMJ_NodeR;
AnyRefNode &SkullRef = ...Seg.Mandible.TMJ_NodeR;
Ref=0;
};
F = - Stiffness * lin.Pos;
};

AnyKinLinear TMJ_JntL={
AnyRefNode &MandibleRef = ..Seg.Mandible.L;
AnyRefNode &SkullRef = ..Seg.Skull.L;
Ref=0;
};

AnyKinEqSimpleDriver TMJ_JntL_Z_Constraint = {
AnyKinMeasureOrg TMJ_JntL_Z={
AnyKinLinear &ref = ..TMJ_JntL;
MeasureOrganizer={2};
};
DriverPos = {0.00};
DriverVel = {0.0};
Reaction.Type = {Off};
CType={ForceDep};
};

AnyKinMeasureOrg TMJ_JntL_Y={
AnyKinLinear &ref = ..HumanModel.Jnt.TMJ_JntL;
MeasureOrganizer={1};
};

AnyKinEqSimpleDriver TMJ_JntL_Y_Driver = {
AnyKinMeasure& ref = .TMJ_JntL_Y;
DriverPos = {0};
DriverVel = {0};
Reaction.Type = {Off};
CType={ForceDep};
};

AnyKinMeasureOrg TMJ_JntL_X={
AnyKinLinear &ref = ..HumanModel.Jnt.TMJ_JntL;
MeasureOrganizer={0};
};

AnyKinEqSimpleDriver TMJ_JntL_X_Driver = {
AnyKinMeasure& ref = .TMJ_JntL_X;
DriverPos = {0};
DriverVel = {0.0};
Reaction.Type = {Off};
CType={ForceDep};
};

AnyForceSurfaceContact TMJ_JntL_Contact =
{
AnySurface &sMaster = ..Seg.Mandible.SurfContactLeft;
AnySurface &sSlave = ..Seg.Skull.SurfContactLeft;
PressureModule = 1e9;
ForceViewOnOff = On;
MeshRefinementMaster = 0;
MeshRefinementSlave = 0;
SingleSidedOnOff= On;
};

AnyForce ArtificialStiffness =
{
AnyFloat Stiffness = 1e4; // N/m
AnyKinLinear lin =
{
AnyRefNode &SkullRef = ...Seg.Skull.L;
AnyRefNode &MandibleRef = ...Seg.Mandible.L;
Ref=0;
};
F = - Stiffness * lin.Pos;
};

As can be seen from the image below, through the large, red is the fossa, gray prosthesis mandibular ramus:

Best regards,
han

The following image shows the contact of the mandibular ramus prosthesis. The force is not distributed at the top of the condyle, but at the stem of the temporomandibular prosthesis. This should not be correct.


At the same time, if the contact pressure modulus is too large, it will lead to excessive contact force, such results are not correct.

Hi Han,

It does indeed look wrong. You need to check your input and implementation details. Try creating a 2-body system fixed by a prismatic joint and drive one surface through another. Your contact force profile should be reasonable. Secondly, I would check the quality of the input - does the surface have good normals and so on. Do you have some inner surfaces that could change contact behavior? Try using only the outer shell.

Kind regards,
Pavel

Hi Pavel,

I'm not sure if I can set the FDK degrees of freedom only in the upper and lower directions, except for the following two FDK settings:

AnyKinLinear TMJ_JntR={
AnyRefNode &MandibleRef = ..Seg.Mandible.TMJ_NodeR;
AnyRefNode &SkullRef = ..Seg.Skull.TMJ_NodeR;
Ref=0;
};
AnyKinEqSimpleDriver TMJ_JntR_Z_Constraint = {
AnyKinMeasureOrg TMJ_JntR_Z={
AnyKinLinear &ref = ..TMJ_JntR;
MeasureOrganizer={2};
};
DriverPos = {0.00};
DriverVel = {0.0};
Reaction.Type = {Off};
CType={ForceDep};
};

AnyKinLinear TMJ_JntL={
AnyRefNode &MandibleRef = ..Seg.Mandible.L;
AnyRefNode &SkullRef = ..Seg.Skull.L;
Ref=0;
};

AnyKinEqSimpleDriver TMJ_JntL_Z_Constraint = {
AnyKinMeasureOrg TMJ_JntL_Z={
AnyKinLinear &ref = ..TMJ_JntL;
MeasureOrganizer={2};
};
DriverPos = {0.00};
DriverVel = {0.0};
Reaction.Type = {Off};
CType={ForceDep};
};
In the meantime, can I comment out the following code:
AnyForce LEFTArtificialStiffness =
{
AnyFloat Stiffness = 1e4; // N/m
AnyKinLinear lin =
{
AnyRefNode &MandibleRef = ...Seg.Skull.TMJ_NodeR;
AnyRefNode &SkullRef = ...Seg.Mandible.TMJ_NodeR;
Ref=0;
};
F = - Stiffness * lin.Pos;
};

AnyForce ArtificialStiffness =
{
AnyFloat Stiffness = 1e4; // N/m
AnyKinLinear lin =
{
AnyRefNode &SkullRef = ...Seg.Skull.L;
AnyRefNode &MandibleRef = ...Seg.Mandible.L;
Ref=0;
};
F = - Stiffness * lin.Pos;
};
Finally, there is the setting of the contact pressure modulus. The value of the contact pressure modulus calculated according to the formula given by the official website seems to cause the calculation to be particularly slow in the simulation. The following tips keep appearing:
Failed to resolve force-dependent kinematics. Too many iterations used.

Best regards,
han

I am sorry, I meant you should drive it through without using FDK and see behaviour of your contact elements. Try using many time steps to have a granular understanding of your contact model. Try aligning movement direction with the direction of movement in your bigger movement.

The failure of fdk is causing the slow down. It simply means it takes all possible iterations to try and solve it.

FDK should run well if you set your model up properly and give good initial conditions.

Kind regards,
Pavel

This topic was automatically closed 125 days after the last reply. New replies are no longer allowed.