Particle trackers and streamlines serve as important tools in multiple scientific domains such as fluid dynamics, thermodynamics, medicine, and biology. Since the creation of the Visualization Toolkit (VTK) and ParaView, support for these tools has improved. Tools such as the StreamTracer filter in ParaView have become widely used in the VTK and ParaView communities of users. Such tools have specific uses, and they are not quite configurable in terms of equations. VTK and ParaView have a new filter, however, called LagrangianParticleTracker, which offers a completely configurable implementation of the Lagrangian Particle Tracking (LPT) algorithm.
The idea behind particle tracking is to inject, integrate, record, and display particle trajectories. The work for the new filter focused on providing a particle-centered implementation of the LPT algorithm that includes a dynamic equation model and optional surface interactions, among other features.
The inputs of the filter include the following: seed (source) input, flow input, and optional surface input. Seed input contains a dataset with a point on which to generate particles, any kind of data object, and support for distributed input. This input only uses the first leaf of a composite dataset. Flow input contains a volumetric dataset that integrates with particles, any kind of data object, and support for distributed input. Optional surface input contains a dataset that interacts with particles, any kind of data object, and support for distributed input.
To begin the process of particle tracking, seed input injects particles in the flow. The particles then integrate with specific equations and with data from flow input. Particle tracking continues until the particles meet terminal conditions and stop.
In addition to three inputs, LagrangianParticleTracker has two outputs: ParticlePaths and ParticleInteractions. ParticlePaths is a vtkPolyData data object of polylines that shows the paths of particles in the flow. ParticleInteractions is a vtkPolyData data object of vertices with the same composite layout of surface input. ParticleInteractions shows all interactions between particles and surface input. It remains empty if no surface input exists.
Dynamic Integration Model
The main parameter of LagrangianParticleTracker is its integration model. VTK already implements a model, vtkLagrangianMatidaIntegrationModel . While it is possible to implement other models within the toolkit, one of the design strengths of LagrangianParticleTracker is that it allows developers to create their own models as ParaView plug-ins, load them into ParaView, and use them on the go.
Example plug-ins exist in ParaView that demonstrate how to implement and utilize new models. For instance, the models must inherit code from the base model,
vtkLagrangianBasicIntegrationModel. In addition, the models must implement their respective FunctionValues methods to integrate particles.
Integration models make it possible to set which equations to employ. The models also come with various features. While most of these features remain empty in vtkLagrangianBasicIntegrationModel and vtkLagrangianMatidaIntegrationModel, other models can implement them. The features are as follows: user-defined equation variables, free-flight termination, PreProcess and PostProcess methods, manual integration and manual particle-shifting capabilities, access to data from all three inputs, and surface interactions.
The surface interactions that the base model supports include terminate, bounce, break up, and pass through. Terminate stops the integration of a particle when it reaches a terminating surface. Bounce makes the particle ricochet off the surface with basic reflection code. Break up derives from bounce. Break up terminates the initial particle and creates two new particles. Pass through allows a particle to go undisturbed and records its advance in surface interaction output.
LagrangianParticleTracker supports many other features. The filter makes it possible to select the type of integrators to use as well as the type of locator to use to find cells in flow input and surface input. The filter also makes it possible to select different types of cell-length computation (e.g., a divergence theorem-based algorithm) to plan when to integrate particles. In addition, LagrangianParticleTracker supports reseeding, which means that it can use the surface interaction output from one case of particle tracking as seed input for a second case of particle tracking.
LagrangianParticleTracker also has a parallel implementation, which streams particles between domains and offers ghost cell management. For this parallel implementation, LagrangianParticleTracker can distribute seed input, surface input, and flow input and make any necessary reductions.
On the ParaView side, LagrangianParticleTracker comes as a default plug-in that contains helpers. One helper sets the necessary variables on the surface for use as surface input. A second helper interpolates or manually sets variables on the point of a dataset on which particles will generate for use as seed input. Both of these helpers are model dependent; they have dynamic interfaces that adapt to the model in use.
For those interested in learning more about and leveraging LagrangianParticleTracker, Kitware offers consulting and support services for VTK and ParaView. For more information on LPT, please contact firstname.lastname@example.org.
 Matida, Edgar Akio, Warren H. Finlay, Carlos F. Lange, and Biljana Grgic. “Improved numerical simulation of aerosol deposition in an idealized mouth–throat.” Journal of Aerosol Science 35, no. 1 (January 2004): 1-19. doi: http://dx.doi.org/10.1016/S0021-8502(03)00381-1.
Mathieu Westphal is developer for VTK and ParaView. His areas of experience include fluid dynamics, adaptive optics, and visualization pipelines.