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.
REFERENCE:
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):
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:
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. |
cnvgtest
number needs to be specified, otherwise cnvgtest
=3 is employed.