Add analytic jacobians

Description

Right now, we are using numerical jacobians to solve the problem. From initial profiling, this is one of the causes for slowness in the program.

Proposal

First implement the missing jacobians, then add a template switch to decide whether the class uses analytical or numerical one.

How to test the implementation?

Analytical and numerical jacobian have to give the same results up to some precision: it's very unlikely that residuals and jacobian coincide on a wrong solution for the two options. Hence, a new test can be added comparing the two cases.

Related issues