wrong displacement values using "ElasticSolver"?

Numerical methods and mathematical models of Elmer
tomatoma
Posts: 30
Joined: 12 Feb 2016, 23:04
Antispam: Yes

wrong displacement values using "ElasticSolver"?

Post by tomatoma »

Hi,

I obtain wrong displacement values using "ElasticSolver" and I cannot understand why.
The geometry is made up of two identical bodies, one on top of the other:
bodies.png
bodies.png (100.17 KiB) Viewed 427 times
The dimensions of each body are 0.3(x) x 0.05(y) x 0.05 (z).
The mesh is made up of second order bricks (0.01 x 0.01 x 0.01).
Material:
Youngs modulus = 5e6
Poisson ratio = 0.0 (=> constant cross-section, linear problem)

Forces:
Force 3 = 5e5 (on top assembly face)
Force 3 = -5e5 (on bottom assembly face)


On the common face between the two bodies (similar results by setting the Displacements):
Boundary Condition 1
Target Boundaries(1) = 2
Name = "Ref"
!Displacement 1 = 0.0
!Displacement 2 = 0.0
!Displacement 3 = 0.0
Spring 1 = 1e2
Spring 2 = 1e2
Spring 3 = 1e2
End

Displacement.png
Displacement.png (202.29 KiB) Viewed 427 times
The correct displacements on top and bottom faces are +5e-3 and -5e-3 respectively in the z direction.

StressSolver and ElasticSolver stress_zz result: 5e5 everywhere (as expected)

StressSolver top face z displacement (min, mean, max): 4.963e-3, 4.999e-3, 5.034e-3 (nearly correct. Much better results by setting the Displacements to 0 on BC1)

ElasticSolver top face z displacement (min, mean, max): 4.401e-3 4.401e-3 4.401e-3 (WHY??????? :shock: )

The z displacement obtained from the ElasticSolver is 88% the correct displacement everywhere. Why? :?:

The other stress and displacement components are virtually zero from both Solvers.

I cannot understand what's wrong. :?

Also, is there a way to output the Elemental Fields? Adding Save Elemental Fields = True in ResultOutputSolver does not make any difference. Aren't stress and strain obtained from the nodal displacement and computed on the elements (Gauss Points) and then nodal stress and strain are obtained from the nodal values? :?:

Elmersolver Version: 9.0 (Rev: Release, Compiled: 2024-04-26)

Thanks
mesh.zip
(111.76 KiB) Downloaded 46 times
kevinarden
Posts: 2418
Joined: 25 Jan 2019, 01:28
Antispam: Yes

Re: wrong displacement values using "ElasticSolver"?

Post by kevinarden »

Your mesh looks good, and they are second order elements, all should be fine.
I assume that your iterative solver did not truly converge, leaving the answer a little short.
For solid mechanics I avoid that by using direct methods, there are three available.
No worries about convergence when solving direct.
correct.png
correct.png (40.7 KiB) Viewed 423 times
The down side of direct is you may run out of memory, in that case you need to make sure the solution is really converged.

Interesting that when I ran your settings it appears to converge, but the non-linear iterations is set to 20, and the answer was
as you stated.

Since there is nothing non-linear in the solution I set the non-linear iterations to 1
and the iterative solver arrived at the same correct answer as direct method.
mika
Posts: 252
Joined: 15 Sep 2009, 07:44

Re: wrong displacement values using "ElasticSolver"?

Post by mika »

kevinarden wrote: 23 May 2024, 01:28 there is nothing non-linear in the solution
If ElasticSolver is used, the strain measure will be a nonlinear function of displacements. If nothing special is given in the sif file, the nonlinear measure of strain is computed as E = 1/2 [grad u + grad u^T + (grad u)^T(grad u)]. StressSolve neglects the nonlinear part 1/2 (grad u)^T(grad u) . If one gives

Code: Select all

Large Deflection = False
ElasticSolver will also use the linearized strain. Then the nonlinear iteration should be unnecessary.
tomatoma wrote: 22 May 2024, 23:18 Poisson ratio = 0.0 (=> constant cross-section, linear problem)
So this doesn't imply that the strain measure would be a linear function of displacements.
tomatoma
Posts: 30
Joined: 12 Feb 2016, 23:04
Antispam: Yes

Re: wrong displacement values using "ElasticSolver"?

Post by tomatoma »

Hi kevinarden,

thanks for your reply.
This is a very simple test case which shows that the displacement obtained with ElasticSolver + iterative solver might be wrong.
However, I'll need to use this combination (ElasticSolver + iterative solver) on larger non-linear problems, where I cannot use direct solver (runs out of memory) and StressSolver (suitable for linear problems only).
So, my aim would be to obtain a correct solution on this simple test case by using ElasticSolver + iterative solver, so that I can be more confident to obtain a correct solution on more complex and larger problems, that I cannot verify by other means.
One thing I can't understand is how can ElasticSolver + iterative solver give wrong displacement (and strain) but correct stress values? (this, at least, is what I understand). Aren't stress and strain simply related by the Young's modulus? So, how can strain be wrong and stress be correct? :?:

Very similar wrong displacement result obtained by using ElasticSolver + :
Elmer Version: 9.0 (Rev: Release, Compiled: 2024-05-23)
Linear System Solver = Iterative
Linear System Iterative Method = BiCGStab, BiCGStabl, TFQMR, GCR, CGS, CG

and

Linear System Solver = Direct
Linear System Direct Method = Umfpack, Banded

Thanks
tomatoma
Posts: 30
Joined: 12 Feb 2016, 23:04
Antispam: Yes

Re: wrong displacement values using "ElasticSolver"?

Post by tomatoma »

Hi mika,

thanks for your reply.

Adding
Large Deflection = False
to Solver 1 section did not make any difference.
tomatoma
Posts: 30
Joined: 12 Feb 2016, 23:04
Antispam: Yes

Re: wrong displacement values using "ElasticSolver"?

Post by tomatoma »

Hi

Just noticed that with ElasticSolver,
regardless of the line

Code: Select all

Large Deflection = False
by setting

Code: Select all

Nonlinear System Max Iterations = 1
yields the correct displacement, while by setting

Code: Select all

Nonlinear System Max Iterations = 2
(or higher values) yields the wrong displacement.

However, on a more complex/larger problem, how can one know how to set the Nonlinear System Max Iterations?

The solution to this issue is still not clear to me, sorry! :oops:

Regards
kevinarden
Posts: 2418
Joined: 25 Jan 2019, 01:28
Antispam: Yes

Re: wrong displacement values using "ElasticSolver"?

Post by kevinarden »

By "nothing non-linear" I meant I thought the displacements were to small too reach the large displacement theory,
Yes ElasticSolver is using the large deflection formulation

According to the manual
Large Deflection = False

only shows up in the shell solver, not ElasticSolver
kevinarden
Posts: 2418
Joined: 25 Jan 2019, 01:28
Antispam: Yes

Re: wrong displacement values using "ElasticSolver"?

Post by kevinarden »

If I run it in steps instead of steady state, the result path is not a linear line, there is a curve, a non-linear response
result.png
(61.64 KiB) Not downloaded yet
This is with the
Large Deflection = False
which elastic solver ignores
tomatoma
Posts: 30
Joined: 12 Feb 2016, 23:04
Antispam: Yes

Re: wrong displacement values using "ElasticSolver"?

Post by tomatoma »

Hi kevinarden,

in steady-state, the displacement of a spring is proportional to the force applied. The problem is linear.
If you do a transient analysis, the response of a mass-spring-damper system can go from exponential to oscillatory, depending on the system parameters. In our case there is no damping, so the response of a spring-mass system shall be sinusoidal.

By adding the density (1000) to the material properties and setting the Simulation section as follows (only relevant lines):

Code: Select all

  Simulation Type = Transient
  Timestepping Method = BDF
  BDF Order = 2
  Timestep Sizes = 0.1e-3
  Timestep Intervals = 200
and by using the StressSolver one can obtain the following displacement:
Transient.png
(154.41 KiB) Not downloaded yet
which is similar to a sinusoidal waveform.
Now, I'm not an expert. This is not a lumped mass system, but a distributed mass system. In a lumped mass system with no damping the displacement must be sinusoidal (plus an offset which depends from the initial conditions). In our case, as I said, I don't know if the displacement shall be sinusoidal or not, but I'd suppose so.
kevinarden
Posts: 2418
Joined: 25 Jan 2019, 01:28
Antispam: Yes

Re: wrong displacement values using "ElasticSolver"?

Post by kevinarden »

I did not do transient, I did scanning, which does not incorporate the acceleration or velocity terms.
Post Reply