Seismo-VLAB  1.3
An Open-Source Finite Element Software for Meso-Scale Simulations

Background

The NewtonRaphson keyword creates an algorithm class that solves the linear system between two states in several steps. The algorithm and its variables is displayed in the Figure below. The Newton-Raphson method solves a nonlinear system of equations written in the following manner:

\[ \textbf{f} \left( \textbf{U} \right) = \,^{t + \Delta t} \textbf{R} - \,^{t + \Delta t} \textbf{F} = 0 \,. \]

Provided with the displacement at \(^{t + \Delta t} \textbf{U}^{(i-1)}\), then a Taylor series expansion about that point is:

\[ \textbf{f} \left( \textbf{U} \right) = \textbf{f} \left( ^{t + \Delta t} \textbf{U}^{(i-1)} \right) + \left. \frac{\partial \textbf{f}}{\partial \textbf{U}} \right|_{^{t + \Delta t} \textbf{U}^{(i-1)}} \left( \textbf{U} - \,^{t + \Delta t} \textbf{U}^{(i-1)} \right) + \textrm{H.O.T.} \]

Substituting the latter two equations and neglecting the higher order terms, one can write:

\[ \left. \frac{\partial \textbf{F}}{\partial \textbf{U}} \right|_{^{t + \Delta t} \textbf{U}^{(i-1)}} \left( \textbf{U} - \,^{t + \Delta t} \textbf{U}^{(i-1)} \right) = \,^{t + \Delta t} \textbf{R} - \,^{t + \Delta t} \textbf{F}^{(i-1)} \,. \]

The latter expression can be re-written in the following manner:

\[ ^{t + \Delta t} \textbf{K}^{(i-1)} \Delta \textbf{U}^{(i)} = \,^{t + \Delta t} \textbf{R} - \,^{t + \Delta t} \textbf{F}^{(i-1)} \,, \]

where \(^{t + \Delta t} \textbf{K}^{(i-1)}\) is the known tangent stiffness matrix at iteration \(^{(i-1)}\):

\[ ^{t + \Delta t} \textbf{K}^{(i-1)} = \left. \frac{\partial \textbf{F}}{\partial \textbf{U}} \right|_{^{t + \Delta t} \textbf{U}^{(i-1)}} \,, \]

and the effective force becomes:

\[ {\textrm{F}}_{{\textrm{eff}}}(\textbf{U}) = \,^{t + \Delta t} \textbf{R} - \,^{t + \Delta t} \textbf{F}^{(i-1)} \,. \]

The improved displacement solution becomes:

\[ ^{t + \Delta t} \textbf{U}^{(i)} = \; ^{t + \Delta t} \textbf{U}^{(i-1)} + \Delta \textbf{U}^{(i)} \,. \]

Therefore, this method is meant to be used in non-linear analysis for which the system \(\textbf{K}_{{\textrm{eff}}} \, \Delta U = {\textrm{F}}_{{\textrm{eff}}}(\textbf{U})\) is solved.

NewtonRaphson.png

REFERENCE:

  • Bathe K. Jurgen, "Finite Element Procedures", Chapter 8: pages 755-759, Prentice-Hall, 1996.

Pre-Analysis

The python Pre-Analysis in the 01-Pre_Process/Method/Attach.py file provides with an interface to create a Linear. We use the addAlgorithm() as follows:

  • addAlgorithm(tag, attributes):

    • tag : The identifier of this algorithm, i.e., tag > -1
    • attributes : Specific properties for the created algorithm, for example
      • 'name' : The algorithm's name
      • 'nstep' : The algorithm's number of increment steps
      • 'cnvgtol' : Tolerance to accept the solution has converged
      • 'cnvgtest' : The converge test to apply, these can be
        • 'UnbalanceForce'
        • 'IncrementalDisplacement'
        • 'RelativeUnbalanceForce'
        • 'RelativeIncrementalDisplacement'

    Example

    A ALGORITHM can be defined using the python interface as follows:
    SVL.addAlgorithm(tag=1, attributes={'name': 'Newton', 'nstep': 50, 'cnvgtol': 1E-06, 'cnvgtest': 'IncrementalDisplacement'})

    Application Please refer to C09-ST_kin_3DCantilever_Elastic_Truss2 file located at 03-Validations/01-Debugging/ to see an example on how to define a NEWTON algorithm using the addAlgorithm function.

On the contrary, the 01-Pre_Process/Method/Remove.py file provides with an interface to depopulate the Entities dictionary. For example, to remove an already define Algorithm, use:

  • delAlgorithm(tag):
    • tag : The identifier of the algorithm to be removed, i.e., tag > -1

Run-Analysis

The C++ Run-Analysis in the 02-Run_Process/09-Algorithms/02-Newton/NewtonRaphson.cpp file provides the class implementation. A Linear is created using the built-in json parse-structure provided in the Driver.hpp and is defined inside the "Simulations" json field indicating its "Tag" as follows,

  • {
        "Simulations": {
            "Tag": {
                "combo": int,
                "attributes": {
                    "algorithm": {
                        "name": "NEWTON",
                        "nstep": int,
                        "cnvgtol": double,
                        "cnvgtest": int
                    }
                }
            }
        }
    }
    
    Variable Description
    combo The combination to which this Algorithm will be defined.
    cnvgtol The minimum tolerance allowed to stop iterating.
    nstep Maximum number of iterations for which the algorithm will be forced to stop.
    cnvgtest Test number to compute the residual error.

    Attention
    This method can be used for large-deformation or non-linear material.
    The cnvgtest number needs to be specified, otherwise cnvgtest=3 is employed.