Weighted triangulation
Recently we have found a way to allow non-circumcentric well-centered grid. The idea is based on a vertex weight that shift the circumcenter towards the barycenter. There is a prove of concept available in the examples/
directory.
What needs to be implemented is a way of assigning new coordinates to the cached circumcenters and to update the cached dual volumes. Also, there must be found a way to implement the shift of the circumcenter
c* = c^old - 1/2 * grad(w)
with grad(w)
constant on the element, and grad
the surface gradient in the tangent plane of the entity.
There is an explicit formula for an edge e_ij = (x_i, x_j)
:
c*_ij = x_i + (|e_ij|^2 + w_i - w_j) / (2 |e_ij|^2) * e_ij
Additionally we need a test for well-centeredness of a weighted triangulation and a local weight calculation (maybe based on a gauss-seidel relaxation of a laplace-beltrami equation, see "Weighted Triangulations for Geometry Processing" (de Geos, F. and Memari, P. and Mullen, P. and Desbrun, M.)