ASPECT
Public Member Functions | List of all members
aspect::Particle::Integrator::Interface< dim > Class Template Referenceabstract
Inheritance diagram for aspect::Particle::Integrator::Interface< dim >:
Inheritance graph
[legend]

Public Member Functions

virtual void local_integrate_step (const typename ParticleHandler< dim >::particle_iterator &begin_particle, const typename ParticleHandler< dim >::particle_iterator &end_particle, const std::vector< Tensor< 1, dim >> &old_velocities, const std::vector< Tensor< 1, dim >> &velocities, const double dt)=0
 
virtual bool new_integration_step ()
 
virtual std::size_t get_data_size () const
 
virtual std::array< bool, 3 > required_solution_vectors () const =0
 
virtual const void * read_data (const typename ParticleHandler< dim >::particle_iterator &particle, const void *data)
 
virtual void * write_data (const typename ParticleHandler< dim >::particle_iterator &particle, void *data) const
 
- Public Member Functions inherited from aspect::Particle::ParticleInterfaceBase
 ParticleInterfaceBase ()
 
void set_particle_manager_index (unsigned int particle_manager_index)
 Set which particle manager the plugin belongs to. More...
 
unsigned int get_particle_manager_index () const
 Gets which particle manager the plugin belong to. More...
 
- Public Member Functions inherited from aspect::Plugins::InterfaceBase
virtual ~InterfaceBase ()=default
 
virtual void initialize ()
 
virtual void update ()
 
virtual void parse_parameters (ParameterHandler &prm)
 

Additional Inherited Members

- Static Public Member Functions inherited from aspect::Plugins::InterfaceBase
static void declare_parameters (ParameterHandler &prm)
 

Detailed Description

template<int dim>
class aspect::Particle::Integrator::Interface< dim >

An abstract class defining virtual methods for performing integration of particle paths through the simulation velocity field.

Definition at line 47 of file interface.h.

Member Function Documentation

§ local_integrate_step()

template<int dim>
virtual void aspect::Particle::Integrator::Interface< dim >::local_integrate_step ( const typename ParticleHandler< dim >::particle_iterator &  begin_particle,
const typename ParticleHandler< dim >::particle_iterator &  end_particle,
const std::vector< Tensor< 1, dim >> &  old_velocities,
const std::vector< Tensor< 1, dim >> &  velocities,
const double  dt 
)
pure virtual

Perform an integration step of moving the particles of one cell by the specified timestep dt. Implementations of this function must update the particle location. Between calls to this function the velocity at the updated particle positions is evaluated and passed as input argument during the next call.

Parameters
[in]begin_particleAn iterator to the first particle to be moved.
[in]end_particleAn iterator to the last particle to be moved.
[in]old_velocitiesThe velocities at t_n, i.e. before the particle movement, for all particles between begin_particle and end_particle at their current position.
[in]velocitiesThe velocities at the particle positions at t_{n+1}, i.e. after the particle movement. Note that this is the velocity at the old positions, but at the new time. It is the responsibility of this function to compute the new location of the particles.
[in]dtThe length of the integration timestep.

Implemented in aspect::Particle::Integrator::RK2< dim >, aspect::Particle::Integrator::RK4< dim >, and aspect::Particle::Integrator::Euler< dim >.

§ new_integration_step()

template<int dim>
virtual bool aspect::Particle::Integrator::Interface< dim >::new_integration_step ( )
virtual

This function is called at the end of every integration step. In case of multi-step integrators it signals the beginning of a new integration step. The default implementation always returns false, which is ok for single-step integration methods.

Returns
This function returns true if the integrator requires another integration step. The particle manager will continue to start new integration steps until this function returns false.

Reimplemented in aspect::Particle::Integrator::RK2< dim >, and aspect::Particle::Integrator::RK4< dim >.

§ get_data_size()

template<int dim>
virtual std::size_t aspect::Particle::Integrator::Interface< dim >::get_data_size ( ) const
virtual

Return data length of the integration related data required for communication in terms of number of bytes. When data about particles is transported from one processor to another, or stored on disk for snapshots, integrators get the chance to store whatever information they need with each particle. This function returns how many pieces of additional information a concrete integrator class needs to store for each particle.

Returns
The number of bytes required to store the relevant integrator data for one particle.

§ required_solution_vectors()

template<int dim>
virtual std::array<bool, 3> aspect::Particle::Integrator::Interface< dim >::required_solution_vectors ( ) const
pure virtual

Return a list of boolean values indicating which solution vectors are required for the integration. The first entry indicates if the particle integrator requires the solution vector at the old old time (k-1), the second entry indicates if the particle integrator requires the solution vector at the old time (k), and the third entry indicates if the particle integrator requires the solution vector at the new time (k+1).

Implemented in aspect::Particle::Integrator::RK2< dim >, aspect::Particle::Integrator::RK4< dim >, and aspect::Particle::Integrator::Euler< dim >.

§ read_data()

template<int dim>
virtual const void* aspect::Particle::Integrator::Interface< dim >::read_data ( const typename ParticleHandler< dim >::particle_iterator &  particle,
const void *  data 
)
virtual

Read integration related data for a particle specified by particle_id from the data array. This function is called after transferring a particle to the local domain during an integration step.

Parameters
[in]dataA pointer into the data array. The pointer marks the position where this function starts reading.
[in]particleAn iterator pointing to the particle to read the data for.
Returns
The updated position of the pointer into the data array. The return value is data advanced by get_data_size() bytes.

§ write_data()

template<int dim>
virtual void* aspect::Particle::Integrator::Interface< dim >::write_data ( const typename ParticleHandler< dim >::particle_iterator &  particle,
void *  data 
) const
virtual

Write integration related data to a vector for a particle specified by particle_id. This function is called in cases where particles leave the local domain during an integration step to transfer this data to another process.

Parameters
[in]particleAn iterator pointing to the particle to write the data for.
[in]dataA pointer into the array of integrator data.
Returns
The updated position of the pointer into the data array. The return value is data advanced by get_data_size() bytes.

The documentation for this class was generated from the following file: