The essential boundary conditions can be applied in several ways. Here we describe the implementation used in SfePy.
Let us solve a linear system with matrix with values in the vector known. The known values can be for example EBC values on a boundary, if comes from a PDE discretization. If we put the known fixed values into a vector , that has the same size as , and has zeros in positions that are not fixed, we can easily construct a matrix that maps the reduced vector of size , where the fixed values are removed, to the full vector :
With that the reduced linear system with a can be formed:
that can be solved by a linear solver. We can see, that the (non-zero) known values are now on the right-hand side of the linear system. When the known values are all zero, we have simply
which is convenient, as it allows simply throwing away the A and b entries corresponding to the known values already during the finite element assembling.
All PDEs in SfePy are solved in a uniform way as a system of non-linear equations
where is the nonlinear function and the vector of unknown DOFs. This system is solved iteratively by the Newton method
until a convergence criterion is met. Each iteration involves solution of the system of linear equations
where the tangent matrix and the residual are
If the initial (old) vector contains the values of EBCs at correct positions, the increment is zero at those positions. This allows us to assemble directly the reduced matrix , the right-hand side , and ignore the values of EBCs during assembling. The EBCs are satisfied automatically by applying them to the initial guess , that is given to the Newton solver.
For linear problems we have
and so the Newton method converges in a single iteration:
The evaluation of the residual as well as the tangent matrix within the Newton solver proceeds in the following steps: