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.