Revolute joint with static initialization

102 views
Skip to first unread message

Simon

unread,
Mar 20, 2023, 12:48:21 PM3/20/23
to ProjectChrono
Hi,

in the example below I modelled a simple pendulum. To my understanding, nonlinear static analysis should place the pendulum in the 'down' position, i.e. aligned with the gravity vector. However, the static analysis seems to blow up even for a small deviation from the static equilibrium position (see output below).
Should the nonlinear static analysis work in this example case?

Thank you,
Simon

Code:
ChSystemNSC system{};

auto fixed_body{chrono_types::make_shared<ChBody>()};
fixed_body->SetBodyFixed(true);
auto pendulum_mass{chrono_types::make_shared<ChBody>()};
pendulum_mass->SetPos({1.0, 0.01, 0.0});

system.Set_G_acc({10.0, 0.0, 0.0});

auto rotation_link{chrono_types::make_shared<ChLinkLockRevolute>()};
rotation_link->Initialize(pendulum_mass, fixed_body, {});

system.Add(fixed_body);
system.Add(pendulum_mass);
system.Add(rotation_link);

system.DoStaticNonlinear(10, true);


Output:
Nonlinear statics
   max iterations:     10
   incremental steps:  6
   stopping test:      correction
      relative tol:    0.0001
      absolute tol:    1e-08

--- Nonlinear statics iteration 0  |Dx|_wrms = 12864.8
--- Nonlinear statics iteration 1  |Dx|_wrms = 9543.48
--- Nonlinear statics iteration 2  |Dx|_wrms = 6371.51
--- Nonlinear statics iteration 3  |Dx|_wrms = 10438.1
--- Nonlinear statics iteration 4  |Dx|_wrms = 6571.89
--- Nonlinear statics iteration 5  |Dx|_wrms = 6797.78
--- Nonlinear statics iteration 6  |Dx|_wrms = 6870.05
--- Nonlinear statics iteration 7  |Dx|_wrms = 16263.7
--- Nonlinear statics iteration 8  |Dx|_wrms = 9692.65
--- Nonlinear statics iteration 9  |Dx|_wrms = 29415.4

chao peng

unread,
Apr 24, 2023, 11:18:11 AM4/24/23
to ProjectChrono
Hello Simon,

A pendulum is simple, just when you look at it in the first second.

By default, the tangent stiffness matrix of constraint (Kc= \frac{\partial{C_q}\lambda}{\partial{q}}) is not implemented in the system matrix. The system stiffness matrix of a pendulum is zero. Thus, the Newton-Raphson iteration in the ChStaticSolver() don't know what's the potential correct direction to search for the equilibrium status.

I just pushed several commits, in which the tangent stiffness matrix (Kc) of ChLinkMateGeneric() and its children classes are implemented, another static solver ChStaticNonlinearRigidMotion() is also implemented to deal with the static problem for the systems including rigid motion DOFs. And two demos, pendulum and mooring line, are also given to show the application of the static solver ChStaticNonlinearRigidMotion(), and to demonstrate the importance of Kc in the static and eigenvalue problem.

I need more time to improve the 3D visualization of the demos.

Have fun with the demos if you like. 

Best regards,
PENG Chao

chao peng

unread,
Apr 24, 2023, 11:22:19 AM4/24/23
to ProjectChrono
I forgot to paste the commit:

please refer to [6a36465] on 24th April:
Add demos to show the capacity of the static solver ChStaticNonlinearRigidMotion() for a pendulum and a mooring line. These two demos also indicates the importantce of the tangent stiffness matrix (Kc) of constraint in the static and eigenvalue problems. However, these two demos need to improve further, expecially the 3D visualization.

Best regards,
PENG Chao

Simon

unread,
Apr 26, 2023, 4:32:32 AM4/26/23
to ProjectChrono
This is great, thank you very much!
Simon
Reply all
Reply to author
Forward
0 new messages