1 (edited by johnnyontheweb 18-02-2020 19:44:45)

Topic: CALMLS and its usage

Dear all,
I'm trying to correctly use CALM linear solver for a non-linear structure and I'm getting some problems. I have some things to ask you:

1. one limitation of CALMS is that one cannot use a restrained nodes in which displacement are applied to control the solution, because "dman->giveDofWithID(idofid)->giveEquationNumber(dn)" returns 0. This is not a problem anyway, but only a limitation;

2. with hpcmode 2, I always get:
In CylindricalALM::oofem::CylindricalALM::computeDeltaLambda:
zero denominator in linearized control

3. with hpcmode 1, in the line:
DeltaLambda = deltaLambda = sgn(XR) * deltaL / p;
I always get p = 0, and I cannot figure out why. I think this is something misplaced or wrong in the analisys setting:

NonLinearStatic nsteps 101 deltat 0.0100000 rtolv 1e-4 controlmode 0 psi 1 stepLength 0.0100000 minsteplength 0.0005000 reqIterations 5 maxrestarts 5 hpcmode 1 hpc 2 95 1 hpcw 1 1 maxiter 30 manrmsteps 1 linesearch 1 

With this settings, I always get increasing loadlevel and this is wrong (with or withtout line search):

Solving       [step number     1.0, time = 0.000000e+000]

CALMLS:       Initial step length: 1.000000e-002
CALMLS:       Iteration       LoadLevel       ForceError      DisplError
----------------------------------------------------------------------------
CALMLS:       1               2.000000e-002   0.000000e+000   0.000000e+000
CALMLS:       Adjusted step length: 1.000000e-002
Equilibrium reached at load level = 0.020000 in 1 iterations
EngngModel info: user time consumed by solution step 1: 2.00s
endStep


Solving       [step number     2.0, time = 1.000000e-002]

CALMLS:       Initial step length: 1.000000e-002
CALMLS:       Iteration       LoadLevel       ForceError      DisplError
----------------------------------------------------------------------------
CALMLS:       1               4.000000e-002   5.484458e-001   1.000000e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=2.000000e-002
CALMLS:       2               6.000000e-002   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=4.000000e-002
CALMLS:       3               1.000000e-001   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=8.000000e-002
CALMLS:       4               1.800000e-001   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=1.600000e-001
CALMLS:       5               3.400000e-001   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=3.200000e-001
CALMLS:       6               6.600000e-001   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=6.400000e-001
CALMLS:       7               1.300000e+000   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=1.280000e+000
CALMLS:       8               2.580000e+000   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=2.560000e+000
CALMLS:       9               5.140000e+000   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=5.120000e+000
CALMLS:       10              1.026000e+001   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=1.024000e+001
CALMLS:       11              2.050000e+001   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=2.048000e+001
CALMLS:       12              4.098000e+001   5.484458e-001   4.637997e+000
CALMLS:       Line search - err_id=2, eta=1.000000e+000, dlambda=4.096000e+001
CALMLS:       13              8.194000e+001   5.484458e-001   4.637997e+000
...

Finally, I cannot share the file because I'm using custom (Windows) code, but I'm asking if there's a 2-node non-linear spring to be used instead of my code to make shareable tests.
By now I cannot find any suitable sample.
thanks in advance

Re: CALMLS and its usage

Can you share the line where you specify the load? My guess is that your load is zero at the beginning of the analysis.

3 (edited by johnnyontheweb 21-02-2020 18:40:22)

Re: CALMLS and its usage

Yes, I'm using a ramp for loads, that are 0 at time 0. To be specific, in my test model I have imposed displacement and no forces. I believed that solver tried to increase the load gradually. Is it not like that? Do I have to apply all loads at 0?

EDIT: I tried by using ConstantFunction 1 f(t) 1.0 to apply displacement - same behaviour as before, load multiplier continues growing.


Another important info: I applied an imposed displacement by applying a BC. I read in the manual that: "But it is possible to apply direct displacement control without requiring BC applied (see nrsolver documentation). Therefore it is possible to combine direct displacement control with direct load control or indirect control."  - http://www.oofem.org/resources/doc/oofe … ml#foot603

I cannot find in NRSolver documentation how to do it.

4 (edited by johnnyontheweb 02-03-2020 20:32:54)

Re: CALMLS and its usage

There are news; I fixed the model I was talking about, I applied displacements in displacement control - I missed it.

One more thing in addition to the previous question: why the solver didn't stop when maxRestart are exceeded? It seems to the that I can obtain a solution by accumulating residuals, is it so?

Re: CALMLS and its usage

It looks like the status flag isn't set at line 285 nrsolver.C to signal failure, moreover the calling proceedStep function (nlinearstatic.C line 540+) doesn't care about the return value stored in numMetStatus at all.
So it seems this problem with reaching the maximum number of iterations is not for Calmls only.

Re: CALMLS and its usage

It seems a bug in code - solver cannot continue by giving results with cumulated residual forces.

Do you have other implementation than ours to manage this issue?

Re: CALMLS and its usage

this is a simple (elastic) multistorey frame with nodal forces that it's not working in displacement control.

can someone help on this?

Post's attachments

pushX.in 19.01 kb, 4 downloads since 2021-10-04 

You don't have the permssions to download the attachments of this post.

Re: CALMLS and its usage

Change refloadmode 1 to refloadmode 0; refloadmode 1 means that the load is calculated in an incremental way and since your load is constant, its increment is zero.

Re: CALMLS and its usage

Hello, thanks for the reply. Unfortunately it's not that simple in the NL model I have.
I'm using UEL and I was told to use refloadmode 1, see this: http://www.oofem.org/forum/viewtopic.php?pid=4764#p4764

Can you clarify the cited post and if, in your opinion, code changes are needed?

Re: CALMLS and its usage

IMHO, It doesn't make any sense to set refloadmode to 1 for calms. So my guess is that it should work fine.

11 (edited by johnnyontheweb 06-11-2021 12:32:52)

Re: CALMLS and its usage

Thanks for your reply, I got it to work.
I defined 2 meta steps, one for vertical loading (with direct control) and one for lateral forces (with pure displ. control), like this:

NonLinearStatic nsteps 111 nmsteps 2
nsteps 11 deltat 0.1 rtold 1e-3 controlmode 1 refloadmode 1 initialGuess 1 miniter 1 maxiter 10
nsteps 100 deltat 0.01 rtold 1e-2 controlmode 0 refloadmode 0 psi 0 stepLength 0.001 minsteplength 0.001 maxrestarts 4 hpcmode 1 hpc 2 23 1 hpcw 1 1 maxiter 10

When vertical loading is done, at the 1st step of second meta-step the vertical displacement (and hence axial force) increases suddenly by 2 orders of magnitude !!! (for instance compare results at t=1 and t=1.01).

What's happening? It seems refloadmode is not working properly, since in the 2nd meta-steps only lateral loading is applied.

Deformed shape at t=1.00: https://i.ibb.co/9V52MvS/t100.jpg

Deformed shape at t=1.01: https://i.ibb.co/9HZ5y2t/t101.jpg

Post's attachments

frameModel.in 14.76 kb, 3 downloads since 2021-11-05 

You don't have the permssions to download the attachments of this post.

Re: CALMLS and its usage

Found, the point was that refloadmode 0 should not see the previous load.

13 (edited by johnnyontheweb 25-11-2021 20:11:29)

Re: CALMLS and its usage

Hi all,
again on this - results are not satisfactory to me and I cannot understand how ALM in OOFEM works.

Consider again the corrected frame model. I used this line to set to zero the vertical loads when ALM step begins:

PiecewiseLinFunction 4 npoints 3 t 3 0e0 1e0 1.0000001 f(t) 3 0e0 1e0 0

There's something not working, it's not easy to find out exactly what.
Consider the shear Vy beam diagrams at t=1 (end of direct control vertical loading)

https://i.ibb.co/4WtM2X1/shear-Vy-t-1.jpg

and at t=1.01 (first increment in ALM).

https://i.ibb.co/WBVkjmf/shear-Vy-t-1-01.jpg

I expected the shear to be still linear, and not constant - the step is small and change should be gradual.

The axial force diagrams are more self-explicative: at t=1 we have trapezoidal diagrams:

https://i.ibb.co/g6XKGrK/axial-N-t-1.jpg

while at t=1.01 we have uniform diagrams, with similar constant values:
https://i.ibb.co/J7MtSMJ/axial-N-t-1-01.jpg

What's happening here? In the code I found a keyword "keepll" (keep load level?) - is it needed in this case?
Thanks in advance

EDIT:
forgot about the diagrams, the displacements seems continuous across the end of 1st analysis. I kindly ask your feedback on the methodology adopted for the analysis sequence and for time series.

Post's attachments

frameModel2.in 14.77 kb, 6 downloads since 2021-11-18 

You don't have the permssions to download the attachments of this post.

Re: CALMLS and its usage

Anyone? I try to better explain the problem.

Nonlinear static analysis is conducted in 2 steps:
(1) vertical loading (direct control)
(2) pushover (indirect control ALM)

Before (2), I put to zero all vertical loads to not influence ALM, with:

PiecewiseLinFunction 4 npoints 3 t 3 0e0 1e0 1.0000001 f(t) 3 0e0 1e0 0

Unfortunately I need vertical loads active at their final value in (1) to be able to retrieve correct beams diagrams during (2), but now diagrams are not correct since vertical loads have been zeroed by their PiecewiseLinFunction reported above before starting (2).

In other words, I need to keep constant the already applied loads. Is there a solution for this?

Or is there a way to get all the loading applied to an element during previous steps?

15

Re: CALMLS and its usage

Hi,
to create a loading scenario with nonproportional loading, you have to use metasteps, as you did.
The total load vector in every solution step is f=fp+a*fi, where fp is permanent (so called initial) load. For the first metastep the permanent load is zero, in subsequent metasteps the fp is corresponding to reached load in previous metastep (unless turned off by using donotfixload keyword). The a is load multiplier (for direct load control a is always 1, for indirect control a is determined by the solver and is reported as load level). fi is proportional load vector, assembled either for each step (direct control) or once for each metastep for indirect control, as proportional loading is kept fixed. fi can be obtained from total or incremental values of applied loads (see refloadmode). You can consult control_switch_1.in and control_switch_2.in test files in tests/sm folder.

Re: CALMLS and its usage

nitramkaroh wrote:

IMHO, It doesn't make any sense to set refloadmode to 1 for calms. So my guess is that it should work fine.

Thanks for your reply, I was thinking too that refloadmode 1 was a non-sense for ALM.