Execute *solver* of the solver framework.
Uses :meth:`getMachine <femsolver.solverbase.Proxy.getMachine>` to obtain a
:class:`Machine` instance of the solver. It than executes the Machine with
using the ``RESULTS`` target (see :class:`Machine` for infos about
different targets). This method is blocking, it waits for the solver to
finished before returning. Be aware of :class:`Machine` caching when using
the function.
:param solver:
A document object which must be a framework compliant solver. This means
that it should be derived from the document object provided by
:mod:`femsolver.solverbase` and implement all required methods
correctly. Of particular importance is :meth:`getMachine
<femsolver.solverbase.Proxy.getMachine>` as it is used by this method
the get the :class:`Machine` used to execute the solver.
:param working_dir:
If specified it overwrites the automatic and user configurable working
directory management of the Solver framework. Should always be a
absolute path because the location of the binary is not consistent
among platforms. If ``None`` the automatic working directory management
is used.
:note:
There is some legacy code to execute the old Calculix solver
(pre-framework) which behaives differently because it does not
use a :class:`Machine`.
References femsolver.report.display(), femsolver.report.displayLog(), and femsolver.run.getMachine().