Roger – new PyChrono conda packages are available at 
https://anaconda.org/channels/projectchrono/packages/pychrono/files.  Look for 
files ending with “_45”.
--Radu

From: [email protected] <[email protected]> On Behalf 
Of Roger Bergua
Sent: Friday, January 9, 2026 8:23 PM
To: ProjectChrono <[email protected]>
Subject: Re: [chrono] Re: Reaction loads issue

Hi Radu,

Thank you very much for the feedback!

I use the PyChrono conda package. But I can wait. One relatively easy work 
around to get the proper load is to run a dynamic simulation till reaching the 
equilibrium of the system and look at the loads at that instant. No worries.

Roger

On Friday, January 9, 2026 at 5:54:58 AM UTC-7 Radu Serban wrote:
Hi Roger,

This appears to be a bug in the nonlinear static analysis.

I didn’t implement this, so I’m not exactly sure what the thought process was 
but it’s certainly flawed. There is a static analysis -- so-called 
“incremental” -- where the external load is applied incrementally (over a given 
number of iterations, by default 6). However, this load scaling was also used 
for ChStaticNonLinearAnalysis (which is what you end up running when you call 
sys.DoStaticNonlinear).  But that is incorrect: indeed, the scaling goes to 1.0 
after the specified number of “incremental steps” but, if the nonlinear solver 
converges in fewer iterations than that, you end up with a solution 
corresponding to the incorrect load.

I pushed a fix where I removed this “incremental scaling” from all static 
analysis algorithms, except the one that is meant to use it.
With that, your code generates the expected results.
By the way, you can explicitly create an analysis object so that you can 
optionally modify various parameters and options. Instead of:
system.DoStaticNonlinear()
use:
static_analysis = ChStaticNonLinearAnalysis()
static_analysis.SetMaxIterations(20)
static_analysis.SetCorrectionTolerance(1e-4, 1e-8)  # test on correction vector
#static_analysis.SetResidualTolerance(1e-8)          # test on residual vector
static_analysis.SetVerbose(True)
system.DoStaticAnalysis(static_analysis)

If I recall correctly, you are using a PyChrono conda package. It will take a 
little bit longer until we build and upload new conda packages. You can wait 
for those, or else build PyChrono from sources yourself.

--Radu


From: [email protected] <[email protected]> On Behalf Of 
Roger Bergua
Sent: Thursday, January 8, 2026 1:52 AM
To: ProjectChrono <[email protected]>
Subject: [chrono] Re: Reaction loads issue

Attaching the pyChrono file in *.txt format.
On Wednesday, January 7, 2026 at 4:23:20 PM UTC-7 Roger Bergua wrote:
Hi all,

I'm modeling a very easy cantilever beam in the vertical direction. The system 
has just one cylindrical hollow beam (Euler-Bernoulli) and a clamp condition 
(ChBody + ChLinkMateGeneric).

The beam has the next properties:
Length: = 2 m
Outer diameter: Do = 0.2 m
Inne diameter: Di = 0.15 m
Density: rho = 7,860 kg/m^3

The mass of the beam is:
m = pi*((Do/2)^2-(Di/2)^2)*L*rho = 216.06 kg

By applying one acceleration of 10 m/s^2 along x in the radial direction of the 
beam, the expected applied loads at the clamp side would be:
Fx = 216.06*10 = 2160.6 N
Fy = 0 N
Fz = 0 N
Mx = 0 Nm
My = 216.06*10*(L/2) = 2160.6 Nm
Mz = 0 Nm

I can reproduce this values perfectly in pyChrono.

However, by applying the -10 m/s^2 acceleration along the z direction (i.e., 
along the beam longitudinal axis) I should get:
Fx = 0 N
Fy = 0 N
Fz = 216.06*(-10) = -2160.6 N
Mx = 0 Nm
My = 0 Nm
Mz = 0 Nm

Instead of this, pyChrono returns Fz = -617.3 N

I'm unable to understand how this value is computed. Maybe there is a 
better/recommended way to get the loads at the clamp side or the beam itself?

Attached you can find the model in pyChrono to reproduce the above results.

Thanks for the support!




--
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 visit 
https://groups.google.com/d/msgid/projectchrono/4f0211fc-e642-4e2f-89d4-583c1e267f13n%40googlegroups.com<https://urldefense.com/v3/__https:/groups.google.com/d/msgid/projectchrono/4f0211fc-e642-4e2f-89d4-583c1e267f13n*40googlegroups.com?utm_medium=email&utm_source=footer__;JQ!!Mak6IKo!P5mHf3HR6o_LrvlV9n36DehcgjZNWrs4MfcjsbHHpwCjHfcOhD9VCYcma4-AyU845XL2lcqg2sfwisBFS4SC$>.
--
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]<mailto:[email protected]>.
To view this discussion visit 
https://groups.google.com/d/msgid/projectchrono/d0b0424f-f7c3-4e40-a8a7-4ece597a4567n%40googlegroups.com<https://urldefense.com/v3/__https:/groups.google.com/d/msgid/projectchrono/d0b0424f-f7c3-4e40-a8a7-4ece597a4567n*40googlegroups.com?utm_medium=email&utm_source=footer__;JQ!!Mak6IKo!Npl3vRpDcv4_3AxOsBv6jbKPAFFStwzUyaIBO6tq1UNSI8o-snND_rgDW1W6c_qnGp94eFz7xJBjjWZAm5xf$>.

-- 
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 visit 
https://groups.google.com/d/msgid/projectchrono/CH3PPF46CDC2185DD7A8D6827B732FAAA9FA780A%40CH3PPF46CDC2185.namprd06.prod.outlook.com.

Reply via email to