General solver structure

The description of solvers in this section follows the nomenclature given in Section sec:generalnotation. Both in the static as well as in the dynamic case, the solvers run in a loop to solve a nonlinear system of (differential and/or algebraic) equations over a given time or load interval. Explicit solvers only perform a factorization of the mass matrix, but the Newton loop, see Fig. 34, is replaced by an explicit computation of the time step according to a given Runge-Kutta tableau.

In case of an implicit time integration, Fig. 30 shows the basic loops for the solution process. The inner loops are shown in Fig. 32 andFig. 33. The static solver behaves very similar, while no velocities or accelerations need to be solved and time is replaced by load steps.

Settings for the solver substructures, like timer, output, iterations, etc., are described in Sections CSolverTimerSolverOutputData. The description of interfaces for solvers starts in Section MainSolverStatic.

../../_images/solverTimeIntegration.png

Fig. 30 Basic solver flow chart for SolveSystem(). This flow chart is the same for static solver and for time integration.

../../_images/solverInitializeSolver.png

Fig. 31 Basic solver flow chart for function InitializeSolver().

../../_images/solverSolveSteps.png

Fig. 32 Flow chart for SolveSteps(), which is the inner loop of the solver.

../../_images/solverDiscontinuousIteration.png

Fig. 33 Solver flow chart for DiscontinuousIteration(), which is run for every solved step inside the static/dynamic solvers. If the DiscontinuousIteration() returns False, SolveSteps() will try to reduce the step size.

../../_images/solverNewton.png

Fig. 34 Solver flow chart for Newton(), which is run inside the DiscontinuousIteration(). The shown case is valid for newtonResidualMode = 0.