Excellent! Thank you, Radu! On Sunday, January 11, 2026 at 5:58:42 AM UTC-7 Radu Serban wrote:
> 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]. > > 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/2d1cc56b-b81c-4e1d-a85a-c1c3e3352061n%40googlegroups.com.
