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
在2023年3月20日星期一 UTC+1 17:48:21<Simon> 写道:

> 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
>

-- 
You received this message because you are subscribed to the Google Groups 
"ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/projectchrono/6a46ba3a-4493-4e67-b0c9-e3c3008c946cn%40googlegroups.com.

Reply via email to