Report Typos and Errors    
Semi-Lagrangian Library
Modular library for kinetic and gyrokinetic simulations of plasmas in fusion energy devices.
Derived types and interfaces | Functions/Subroutines
sll_m_time_propagator_pic_vm_1d2v_subcyc Module Reference

Description

Particle pusher based on the subcycling algorithm for the 1d2v Vlasov-Maxwell equation.

Author
Katharina Kormann, IPP

MPI parallelization by domain cloning. Periodic boundaries. Spline DoFs numerated by the point the spline starts. Reference: Hirvijoki, Kormann, Zonta, Subcycling of particle orbits in variational, geometric electromagnetic particle-in-cell methods, Physics of Plasmas 27, 092506 (2020). Control variate: Note that we do not account for the analytic j at the moment (TODO: control_variate for current)

Derived types and interfaces

type  sll_t_time_propagator_pic_vm_1d2v_subcyc
 Hamiltonian splitting type for Vlasov-Maxwell 1d2v. More...
 

Functions/Subroutines

subroutine reinit_fields (self)
 Finalization. More...
 
subroutine strang_splitting_pic_vm_1d2v (self, dt, number_steps)
 Strang splitting. More...
 
subroutine lie_splitting_pic_vm_1d2v (self, dt, number_steps)
 Lie splitting. More...
 
subroutine lie_splitting_back_pic_vm_1d2v (self, dt, number_steps)
 Lie splitting (oposite ordering) More...
 
subroutine operatorhp_pic_vm_1d2v (self, dt)
 
subroutine operatorhp_pic_vm_1d2v_newton (self, dt)
 Implementation of the full time step with Newton iteration for the nonlinear part. More...
 
subroutine initialize_pic_vm_1d2v (self, maxwell_solver, kernel_smoother_0, kernel_smoother_1, particle_group, efield_dofs, bfield_dofs, x_min, Lx, n_sub_iter, file_prefix, filter, jmean, control_variate, i_weight)
 Constructor. More...
 
subroutine delete_pic_vm_1d2v (self)
 Destructor. More...
 
subroutine, public sll_s_new_time_propagator_pic_vm_1d2v_subcyc (splitting, maxwell_solver, kernel_smoother_0, kernel_smoother_1, particle_group, efield_dofs, bfield_dofs, x_min, Lx, n_sub_iter, file_prefix, filter, jmean, control_variate, i_weight)
 Constructor for allocatable abstract type. More...
 
subroutine, public sll_s_new_time_propagator_pic_vm_1d2v_subcyc_ptr (splitting, maxwell_solver, kernel_smoother_0, kernel_smoother_1, particle_group, efield_dofs, bfield_dofs, x_min, Lx, n_sub_iter, file_prefix, filter, jmean)
 Constructor for pointer abstract type. More...
 

Function/Subroutine Documentation

◆ delete_pic_vm_1d2v()

subroutine sll_m_time_propagator_pic_vm_1d2v_subcyc::delete_pic_vm_1d2v ( class(sll_t_time_propagator_pic_vm_1d2v_subcyc), intent(inout)  self)
private

Destructor.

Parameters
[in,out]selftime splitting object

Definition at line 730 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

◆ initialize_pic_vm_1d2v()

subroutine sll_m_time_propagator_pic_vm_1d2v_subcyc::initialize_pic_vm_1d2v ( class(sll_t_time_propagator_pic_vm_1d2v_subcyc), intent(out)  self,
class(sll_c_maxwell_1d_base), intent(in), target  maxwell_solver,
class(sll_c_particle_mesh_coupling_1d), intent(in), target  kernel_smoother_0,
class(sll_c_particle_mesh_coupling_1d), intent(in), target  kernel_smoother_1,
class(sll_t_particle_array), intent(in), target  particle_group,
real(kind=f64), dimension(:,:), intent(in), target  efield_dofs,
real(kind=f64), dimension(:), intent(in), target  bfield_dofs,
real(kind=f64), intent(in)  x_min,
real(kind=f64), intent(in)  Lx,
integer(kind=i32), intent(in)  n_sub_iter,
character(*), intent(in)  file_prefix,
type( sll_t_binomial_filter ), intent(in), target  filter,
logical, intent(in), optional  jmean,
class(sll_t_control_variates), intent(in), optional, target  control_variate,
integer(kind=i32), intent(in), optional  i_weight 
)
private

Constructor.

Parameters
[out]selftime splitting object
[in]maxwell_solverMaxwell solver
[in]kernel_smoother_0Kernel smoother
[in]kernel_smoother_1Kernel smoother
[in]efield_dofsarray for the coefficients of the efields
[in]bfield_dofsarray for the coefficients of the bfield
[in]x_minLower bound of x domain
[in]lxLength of the domain in x direction.
[in]n_sub_iterNumber of subcycling steps
[in]file_prefixFile prefix
[in]control_variateControl variate (if delta f)
[in]i_weightIndex of weight to be used by propagator

Definition at line 632 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

◆ lie_splitting_back_pic_vm_1d2v()

subroutine sll_m_time_propagator_pic_vm_1d2v_subcyc::lie_splitting_back_pic_vm_1d2v ( class(sll_t_time_propagator_pic_vm_1d2v_subcyc), intent(inout)  self,
real(kind=f64), intent(in)  dt,
integer(kind=i32), intent(in)  number_steps 
)
private

Lie splitting (oposite ordering)

Parameters
[in,out]selftime splitting object
[in]dttime step
[in]number_stepsnumber of time steps

Definition at line 147 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

◆ lie_splitting_pic_vm_1d2v()

subroutine sll_m_time_propagator_pic_vm_1d2v_subcyc::lie_splitting_pic_vm_1d2v ( class(sll_t_time_propagator_pic_vm_1d2v_subcyc), intent(inout)  self,
real(kind=f64), intent(in)  dt,
integer(kind=i32), intent(in)  number_steps 
)
private

Lie splitting.

Parameters
[in,out]selftime splitting object
[in]dttime step
[in]number_stepsnumber of time steps

Definition at line 132 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

◆ operatorhp_pic_vm_1d2v()

subroutine sll_m_time_propagator_pic_vm_1d2v_subcyc::operatorhp_pic_vm_1d2v ( class(sll_t_time_propagator_pic_vm_1d2v_subcyc), intent(inout)  self,
real(kind=f64), intent(in)  dt 
)
private
Parameters
[in,out]selftime splitting object
[in]dttime step

Definition at line 164 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

◆ operatorhp_pic_vm_1d2v_newton()

subroutine sll_m_time_propagator_pic_vm_1d2v_subcyc::operatorhp_pic_vm_1d2v_newton ( class(sll_t_time_propagator_pic_vm_1d2v_subcyc), intent(inout)  self,
real(kind=f64), intent(in)  dt 
)
private

Implementation of the full time step with Newton iteration for the nonlinear part.

Parameters
[in,out]selftime splitting object
[in]dttime step

Definition at line 360 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

◆ reinit_fields()

subroutine sll_m_time_propagator_pic_vm_1d2v_subcyc::reinit_fields ( class(sll_t_time_propagator_pic_vm_1d2v_subcyc), intent(inout)  self)
private

Finalization.

Apply the filter to find the filtered field values

Parameters
[in,out]selftime splitting object

Definition at line 107 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

◆ sll_s_new_time_propagator_pic_vm_1d2v_subcyc()

subroutine, public sll_m_time_propagator_pic_vm_1d2v_subcyc::sll_s_new_time_propagator_pic_vm_1d2v_subcyc ( class(sll_c_time_propagator_base), intent(out), allocatable  splitting,
class(sll_c_maxwell_1d_base), intent(in), target  maxwell_solver,
class(sll_c_particle_mesh_coupling_1d), intent(in), target  kernel_smoother_0,
class(sll_c_particle_mesh_coupling_1d), intent(in), target  kernel_smoother_1,
class(sll_t_particle_array), intent(in), target  particle_group,
real(kind=f64), dimension(:,:), intent(in), target  efield_dofs,
real(kind=f64), dimension(:), intent(in), target  bfield_dofs,
real(kind=f64), intent(in)  x_min,
real(kind=f64), intent(in)  Lx,
integer(kind=i32), intent(in)  n_sub_iter,
character(*), intent(in)  file_prefix,
type( sll_t_binomial_filter ), intent(in), target  filter,
logical, intent(in), optional  jmean,
class(sll_t_control_variates), intent(in), optional, target  control_variate,
intent(in)  i_weight 
)

Constructor for allocatable abstract type.

Parameters
[out]splittingtime splitting object
[in]maxwell_solverMaxwell solver
[in]kernel_smoother_0Kernel smoother
[in]kernel_smoother_1Kernel smoother
[in]efield_dofsarray for the coefficients of the efields
[in]bfield_dofsarray for the coefficients of the bfield
[in]x_minLower bound of x domain
[in]lxLength of the domain in x direction.
[in]n_sub_iterNumber of subcycling steps
[in]file_prefixFile prefix
[in]jmeanShould jmean be substracted in Ampere's law?
[in]control_variateControl variate (if delta f)

Definition at line 747 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

Here is the call graph for this function:

◆ sll_s_new_time_propagator_pic_vm_1d2v_subcyc_ptr()

subroutine, public sll_m_time_propagator_pic_vm_1d2v_subcyc::sll_s_new_time_propagator_pic_vm_1d2v_subcyc_ptr ( class(sll_c_time_propagator_base), intent(out), pointer  splitting,
class(sll_c_maxwell_1d_base), intent(in), target  maxwell_solver,
class(sll_c_particle_mesh_coupling_1d), intent(in), target  kernel_smoother_0,
class(sll_c_particle_mesh_coupling_1d), intent(in), target  kernel_smoother_1,
class(sll_t_particle_array), intent(in), target  particle_group,
dimension(:,:), intent(in)  efield_dofs,
dimension(:), intent(in)  bfield_dofs,
intent(in)  x_min,
intent(in)  Lx,
intent(in)  n_sub_iter,
character(*), intent(in)  file_prefix,
type( sll_t_binomial_filter ), intent(in), target  filter,
logical, intent(in), optional  jmean 
)

Constructor for pointer abstract type.

Parameters
[out]splittingtime splitting object
[in]maxwell_solverMaxwell solver
[in]kernel_smoother_0Kernel smoother
[in]kernel_smoother_1Kernel smoother
[in]file_prefixFile prefix
[in]jmeanShould jmean be substracted in Ampere's law?

Definition at line 831 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

◆ strang_splitting_pic_vm_1d2v()

subroutine sll_m_time_propagator_pic_vm_1d2v_subcyc::strang_splitting_pic_vm_1d2v ( class(sll_t_time_propagator_pic_vm_1d2v_subcyc), intent(inout)  self,
real(kind=f64), intent(in)  dt,
integer(kind=i32), intent(in)  number_steps 
)
private

Strang splitting.

Parameters
[in,out]selftime splitting object
[in]dttime step
[in]number_stepsnumber of time steps

Definition at line 117 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.

    Report Typos and Errors