# Solid Mechanics Application Strategies

## Definition of a Solving Strategy

A solving strategy is the class that asks to the C++ code to solve the problem. The main class is located in the kratos core and is called solving_strategy.h.

The main method of the class is the Solve() method, which is composed by a sequential call of Initialize(), InitializeSolutionStep(), Predict(), SolveSolutionStep(), FinalizeSolutionStep(). Look at the base class virtual method definition:

```virtual double Solve()
{
Initialize();
InitializeSolutionStep();
Predict();
SolveSolutionStep();
FinalizeSolutionStep();
return 0.00;
}
```

If the solving strategy name starts with "Residual-Based", means that an implicit solution of a system as (r(u) = Fext - Fint = 0) have to be solved. The linearized residual produces the LHS( Left Hand Side ) of the linear system of equations and the residual itself is the RHS( Right Hand Side ). That is LHS = -A(u) and RHS = r(u). The Dof's (usually displacements u) are the knows to be calculated in the linear system.

If the solution is linear the forces define the RHS = f, and the stiffness matrix the LHS = K. Only a linear system has to be solved.

When the solving strategy name starts with "Explicit" a explicit solution of the problem is going to be performed (u = M^-1*r)

There is an special case of "Component-Wise" Strategies where the implicit solution is performed but the forces in the residuals are computed separately.It allows to check and perform other types of convergence criteria but is computationally more expensive than the "Residual-Based" ones. Therefore we recommend to use the "Residual-Based" solving strategies.

The solution strategy or solving strategy can be build in python in a custom manner or some of the avaliable C++ coded strategies can be used. We list them next.