-------------------------
* Added the possibility to compute the stiffness for the shape gradient based on the distance to the boundary using the eikonal equation
* Cashocs now supports the tracking of scalar quantities, which are given as integrals of the states / controls / geometric properties. Input parameter is :python:`scalar_tracking_forms`, which is a dictionary consisting of :python:`'integrand'`, which is the integrand of the scalar quantity, and :python:`'tracking_goal'`, which is the (scalar) value that shall be achieved. This feature is documented at `<https://cashocs.readthedocs.io/en/stable/user/demos/optimal_control/demo_scalar_control_tracking>`_.
* Fixed a bug concerning cashocs' memory management, which would occur if several OptimizationProblems were created one after the other
* Changed the coding style to "black"
* Switched printing to f-string syntax for better readability
* Config files are now copied when they are passed to OptimizationProblems, so that manipulation of them is only possible before the instance is created
* New configuration file parameters:
* Section ShapeGradient
* :ini:`use_distance_mu` is a boolean flag which enables stiffness computation based on distances
* :ini:`dist_min` and :ini:`dist_max` describe the minimal and maximum distance to the boundary for which a certain stiffness is used (see below)
* :ini:`mu_min` and :ini:`mu_max` describe the stiffness values: If the boundary distance is smaller than :ini:`dist_min`, then :python:`mu = mu_min` and if the distance is larger than :ini:`dist_max`, we have :python:`mu = mu_max`
* :ini:`smooth_mu` is a boolean flag, which determines how :python:`mu` is interpolated between :ini:`dist_min` and :ini:`dist_max`: If this is set to `False`, linear interpolation is used, otherwise, a cubic spline is used
* :ini:`boundaries_dist` is a list of boundary indices to which the distance shall be computed
* Small bugfixes and other improvements:
* Switched to pseudo random numbers for the tests for the sake of reproduceability
* fixed some tolerances for the tests
* replaced :python:`os.system()` calls by :python:`subprocess.run()`