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

Public Member Functions

 RK4 ()
 
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)
 
virtual bool new_integration_step ()
 
virtual std::size_t get_data_size () const
 
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::Integrator::Interface< dim >
virtual ~Interface ()
 
virtual void parse_parameters (ParameterHandler &prm)
 

Private Attributes

unsigned int integrator_substep
 
std::map< types::particle_index, Point< dim > > loc0
 
std::map< types::particle_index, Tensor< 1, dim > > k1
 
std::map< types::particle_index, Tensor< 1, dim > > k2
 
std::map< types::particle_index, Tensor< 1, dim > > k3
 

Additional Inherited Members

- Static Public Member Functions inherited from aspect::Particle::Integrator::Interface< dim >
static void declare_parameters (ParameterHandler &prm)
 

Detailed Description

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

Runge Kutta fourth order integrator. This scheme requires storing the original location and intermediate k1, k2, k3, k4 values, so the read/write_data functions reflect this.

Definition at line 40 of file rk_4.h.

Constructor & Destructor Documentation

§ RK4()

template<int dim>
aspect::Particle::Integrator::RK4< dim >::RK4 ( )

Member Function Documentation

§ local_integrate_step()

template<int dim>
virtual void aspect::Particle::Integrator::RK4< 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 
)
virtual

Perform an integration step of moving the particles of one cell by the specified timestep dt. This class implements a Runge- Kutta integration scheme that is fourth order accurate in space.

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.

Implements aspect::Particle::Integrator::Interface< dim >.

§ new_integration_step()

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

This function is called at the end of every integration step. For the current class it will either increment the step variable and return true to request another integration step, or reset the step variable to 0 and return false if we are already in step 4.

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

Reimplemented from aspect::Particle::Integrator::Interface< dim >.

§ get_data_size()

template<int dim>
virtual std::size_t aspect::Particle::Integrator::RK4< 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.

Reimplemented from aspect::Particle::Integrator::Interface< dim >.

§ read_data()

template<int dim>
virtual const void* aspect::Particle::Integrator::RK4< 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.

Reimplemented from aspect::Particle::Integrator::Interface< dim >.

§ write_data()

template<int dim>
virtual void* aspect::Particle::Integrator::RK4< 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.

Reimplemented from aspect::Particle::Integrator::Interface< dim >.

Member Data Documentation

§ integrator_substep

template<int dim>
unsigned int aspect::Particle::Integrator::RK4< dim >::integrator_substep
private

The current integration step, i.e. for RK4 a number between 0 and 3.

Definition at line 118 of file rk_4.h.

§ loc0

template<int dim>
std::map<types::particle_index, Point<dim> > aspect::Particle::Integrator::RK4< dim >::loc0
private

The particle location before the first integration step. This is used in the following steps and transferred to another process if the particle leaves the domain during one of the steps.

Definition at line 125 of file rk_4.h.

§ k1

template<int dim>
std::map<types::particle_index, Tensor<1,dim> > aspect::Particle::Integrator::RK4< dim >::k1
private

The intermediate values of the RK4 scheme. These are used in the following steps and transferred to another process if the particle leaves the domain during one of the steps.

Definition at line 132 of file rk_4.h.

§ k2

template<int dim>
std::map<types::particle_index, Tensor<1,dim> > aspect::Particle::Integrator::RK4< dim >::k2
private

Definition at line 132 of file rk_4.h.

§ k3

template<int dim>
std::map<types::particle_index, Tensor<1,dim> > aspect::Particle::Integrator::RK4< dim >::k3
private

Definition at line 132 of file rk_4.h.


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