Skip to content
  • Mathieu Westphal (Kitware)'s avatar
    Introduce LagrangianParticleTracker · 2e8040c5
    Mathieu Westphal (Kitware) authored
    This is a very flexible and adaptive filter to inject and track particles in a flow. It takes three inputs :
     * port 0 : Flow Input, a volumic dataset containing data to integrate with, any kind of data object, support distributed input.
     * port 1 : Seed (source) Input, a dataset containing point to generate particles with, any kind of data object, support distributed input. Only first leaf of composite dataset is used.
     * port 2 : Optional Surface Input, containing dataset to interact with, any kind of data object, support distributed input.
    
    It has two outputs :
     * port 0 : ParticlePaths : a polyData of polyLines showing the paths of particles in the flow
     * port 1 : ParticleInteractions : empty if no surface input, contains a polydata of vertex
       with the same composite layout of surface input if any, showing all interactions between particles and the surface input
    
    It has a parallel implementation wich streams particle between domains.
    
    The most important parameters of this filter is it's integrationModel. Only one integration model implementation exist currently in ParaView
    ,vtkLagrangianMatidaIntegrationModel but the design enables plugin developpers to expand this tracker by creating new models.
    A model can define  :
     * The number of integration variable and new user defined integration variable
     * the way the particle are integrated
     * the way particles intersect and interact with the surface
     * the way freeFlight termination is handled
     * PreProcess and PostProcess methods
     * Manual Integration, Manual partichle shifting
    see vtkLagrangianBasicIntegrationModel and vtkLagrangianMatidaIntegrationModel for more information
    
    It also let the user choose the Locator to use when integrating in the flow, as well as the Integrator to use. Integration steps are also highly configurable, step, step min and step max are passed down to the integrator (hence min and max does not matter with a non adaptive integrator like RK4/5)
    
    a IntegrationModel is a very specific vtkFunctionSet with a lot of features allowing inherited classes to concentrate on the mathematical part of the code.
    a Particle is basically a class wrapper around three table containing variables about the particle at previous, current and next position.
    The particle is passed to the integrator, which use the integration model to integrate the particle in the flow.
    
    It has other features also, including :
     * Adaptative Step Reintegration, to retry the step with different time step when the next position is too far
     * Different kind of cell length computation, including a divergence theorem based computation
     * Optional lines rendering controlled by a treshold
     * Ghost cell support
     * Non planar quad interactionn support
     * Built-in support for surface interaction including, terminate, bounce, break-up and pass-trough surface
    
     The serial and parallel filters are fully tested.
    2e8040c5