Spring-based Smoothing#

Spring-based smoothing methods can be used both to more evenly distribute nodes and to allow for controlled mesh deformation by treating the mesh as a network of springs.

Node Spring-based#

Blom [Blo00]

See NodeSpringSmoothing()

For a node \(i\) connected by springs to its \(n_i\) neighbors, the net force on the node is

\[\bar{F}_i = \sum_{j=1}^{n_i} k_{ij}(\bar{x}_j - \bar{x}_i) + \bar{F}_i^{applied}\]

where \(k_{ij}\) is the stiffness in units of [force/distance] of the spring connecting node \(i\) to its \(j^{th}\) neighbor, \(\bar{x}_i\) is the coordinates \((x_i, y_i, z_i)\) of the \(i^{th}\), and \(\bar{F}_i^{applied}\) is an externally applied load.

For a spring network in equilibrium, \(\bar{F}_i = 0\) and

\[\bar{x}_i = \frac{\sum_{j=1}^{n_i} k_{ij} \bar{x}_j + \bar{F}_i^{applied}}{\sum_{j=1}^{n_i} k_{ij}}\]

Since the neighboring nodes are also repositioned, this system can be solved iteratively as

\[\bar{x}_i^{m+1} = \frac{\sum_{j=1}^{n_i} k_{ij} \bar{x}_j^m + \bar{F}_i^{applied}}{\sum_{j=1}^{n_i} k_{ij}}\]

until the change between \(\bar{x}_i^{m+1}\) and \(\bar{x}_i^{m+1}\) becomes sufficiently small. Since achieving equilibrium isn’t strictly necessary for smoothing, sufficient smoothing can often be achieved in a small number of iterations.