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_2d3v_hs Module Reference

Description

Particle pusher based on Hamiltonian splitting for 2d3v Vlasov-Maxwell.

Author
Katharina Kormann, IPP

MPI parallelization by domain cloning. Periodic boundaries. Spline DoFs numerated by the point the spline starts. Reference: Kraus, Kormann, Sonnendrücker, Morrison: GEMPIC: Geometric ElectroMagnetic Particle-In-Cell Methods

Derived types and interfaces

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

Functions/Subroutines

subroutine strang_splitting_pic_vm_2d3v_hs (self, dt, number_steps)
 Finalization. More...
 
subroutine lie_splitting_pic_vm_2d3v_hs (self, dt, number_steps)
 Lie splitting. More...
 
subroutine lie_splitting_back_pic_vm_2d3v_hs (self, dt, number_steps)
 Lie splitting (oposite ordering) More...
 
subroutine operatorhp1_pic_vm_2d3v_hs (self, dt)
 Push Hp1: Equations to solve are TODO: UPDATE \partial_t f + v_1 \partial_{x_1} f = 0 -> X_new = X_old + dt V_1 V_new,2 = V_old,2 + \int_0 h V_old,1 B_old \partial_t E_1 = - \int v_1 f(t,x_1, v) dv -> E_{1,new} = E_{1,old} - \int \int v_1 f(t,x_1+s v_1,v) dv ds \partial_t E_2 = 0 -> E_{2,new} = E_{2,old} \partial_t B = 0 => B_new = B_old. More...
 
subroutine operatorhp2_pic_vm_2d3v_hs (self, dt)
 Push Hp2: Equations to solve are. More...
 
subroutine operatorhp3_pic_vm_2d3v_hs (self, dt)
 Push Hp3: Equations to solve are. More...
 
subroutine operatorhe_pic_vm_2d3v_hs (self, dt)
 Push H_E: Equations to be solved \partial_t f + E_1 \partial_{v_1} f + E_2 \partial_{v_2} f = 0 -> V_new = V_old + dt * E \partial_t E_1 = 0 -> E_{1,new} = E_{1,old} \partial_t E_2 = 0 -> E_{2,new} = E_{2,old} \partial_t B + \partial_{x_1} E_2 = 0 => B_new = B_old - dt \partial_{x_1} E_2. More...
 
subroutine operatorhb_pic_vm_2d3v_hs (self, dt)
 Push H_B: Equations to be solved V_new = V_old \partial_t E_1 = 0 -> E_{1,new} = E_{1,old} \partial_t E_2 = - \partial_{x_1} B -> E_{2,new} = E_{2,old}-dt*\partial_{x_1} B \partial_t B = 0 -> B_new = B_old. More...
 
subroutine initialize_pic_vm_2d3v_hs (self, maxwell_solver, particle_mesh_coupling, particle_group, efield_dofs, bfield_dofs, x_min, Lx, control_variate, betar)
 Constructor. More...
 
subroutine delete_pic_vm_2d3v_hs (self)
 Destructor. More...
 
subroutine, public sll_s_new_time_propagator_pic_vm_2d3v_hs (splitting, maxwell_solver, particle_mesh_coupling, particle_group, efield_dofs, bfield_dofs, x_min, Lx, control_variate, betar)
 Constructor for allocatable abstract type. More...
 
subroutine, public sll_s_new_time_propagator_pic_vm_2d3v_hs_ptr (splitting, maxwell_solver, particle_mesh_coupling, particle_group, efield_dofs, bfield_dofs, x_min, Lx)
 Constructor for pointer abstract type. More...
 

Function/Subroutine Documentation

◆ delete_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::delete_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), intent(inout)  self)
private

Destructor.

Parameters
[in,out]selftime propagator object

Definition at line 493 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ initialize_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::initialize_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), intent(out)  self,
type(sll_t_maxwell_2d_fem_fft), intent(in), pointer  maxwell_solver,
type(sll_t_particle_mesh_coupling_spline_2d_feec), intent(in), pointer  particle_mesh_coupling,
class(sll_t_particle_array), intent(in), pointer  particle_group,
real(kind=f64), dimension(:), intent(in), pointer  efield_dofs,
real(kind=f64), dimension(:), intent(in), pointer  bfield_dofs,
real(kind=f64), dimension(2), intent(in)  x_min,
real(kind=f64), dimension(2), intent(in)  Lx,
class(sll_t_control_variates), intent(in), optional, target  control_variate,
real(kind=f64), intent(in), optional  betar 
)
private

Constructor.

Parameters
[out]selftime propagator object
[in]maxwell_solverMaxwell solver
[in]particle_mesh_couplingParticle mesh coupling
[in]particle_groupParticle group
[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]control_variateControl variate (if delta f)
[in]betarreciprocal plasma beta

Definition at line 438 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ lie_splitting_back_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::lie_splitting_back_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), 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 propagator object
[in]dttime step
[in]number_stepsnumber of time steps

Definition at line 129 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ lie_splitting_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::lie_splitting_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), intent(inout)  self,
real(kind=f64), intent(in)  dt,
integer(kind=i32), intent(in)  number_steps 
)
private

Lie splitting.

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

Definition at line 110 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ operatorhb_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::operatorhb_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), intent(inout)  self,
real(kind=f64), intent(in)  dt 
)
private

Push H_B: Equations to be solved V_new = V_old \partial_t E_1 = 0 -> E_{1,new} = E_{1,old} \partial_t E_2 = - \partial_{x_1} B -> E_{2,new} = E_{2,old}-dt*\partial_{x_1} B \partial_t B = 0 -> B_new = B_old.

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

Definition at line 425 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ operatorhe_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::operatorhe_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), intent(inout)  self,
real(kind=f64), intent(in)  dt 
)
private

Push H_E: Equations to be solved \partial_t f + E_1 \partial_{v_1} f + E_2 \partial_{v_2} f = 0 -> V_new = V_old + dt * E \partial_t E_1 = 0 -> E_{1,new} = E_{1,old} \partial_t E_2 = 0 -> E_{2,new} = E_{2,old} \partial_t B + \partial_{x_1} E_2 = 0 => B_new = B_old - dt \partial_{x_1} E_2.

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

Definition at line 363 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ operatorhp1_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::operatorhp1_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), intent(inout)  self,
real(kind=f64), intent(in)  dt 
)
private

Push Hp1: Equations to solve are TODO: UPDATE \partial_t f + v_1 \partial_{x_1} f = 0 -> X_new = X_old + dt V_1 V_new,2 = V_old,2 + \int_0 h V_old,1 B_old \partial_t E_1 = - \int v_1 f(t,x_1, v) dv -> E_{1,new} = E_{1,old} - \int \int v_1 f(t,x_1+s v_1,v) dv ds \partial_t E_2 = 0 -> E_{2,new} = E_{2,old} \partial_t B = 0 => B_new = B_old.

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

Definition at line 155 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ operatorhp2_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::operatorhp2_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), intent(inout)  self,
real(kind=f64), intent(in)  dt 
)
private

Push Hp2: Equations to solve are.

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

Definition at line 226 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ operatorhp3_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::operatorhp3_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), intent(inout)  self,
real(kind=f64), intent(in)  dt 
)
private

Push Hp3: Equations to solve are.

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

Definition at line 289 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ sll_s_new_time_propagator_pic_vm_2d3v_hs()

subroutine, public sll_m_time_propagator_pic_vm_2d3v_hs::sll_s_new_time_propagator_pic_vm_2d3v_hs ( class(sll_c_time_propagator_base), intent(out), allocatable  splitting,
type(sll_t_maxwell_2d_fem_fft), intent(in), pointer  maxwell_solver,
type(sll_t_particle_mesh_coupling_spline_2d_feec), intent(in), pointer  particle_mesh_coupling,
class(sll_t_particle_array), intent(in), pointer  particle_group,
real(kind=f64), dimension(:), intent(in), pointer  efield_dofs,
real(kind=f64), dimension(:), intent(in), pointer  bfield_dofs,
real(kind=f64), dimension(2), intent(in)  x_min,
real(kind=f64), dimension(2), intent(in)  Lx,
class(sll_t_control_variates), intent(in), optional, target  control_variate,
real(kind=f64), intent(in), optional  betar 
)

Constructor for allocatable abstract type.

Parameters
[out]splittingtime propagator object
[in]maxwell_solverMaxwell solver
[in]particle_mesh_couplingParticle mesh coupling
[in]particle_groupParticle group
[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]control_variateControl variate (if delta f)
[in]betarreciprocal of plasma beta

Definition at line 509 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

Here is the call graph for this function:

◆ sll_s_new_time_propagator_pic_vm_2d3v_hs_ptr()

subroutine, public sll_m_time_propagator_pic_vm_2d3v_hs::sll_s_new_time_propagator_pic_vm_2d3v_hs_ptr ( class(sll_c_time_propagator_base), intent(out), pointer  splitting,
type(sll_t_maxwell_2d_fem_fft), intent(in), pointer  maxwell_solver,
type(sll_t_particle_mesh_coupling_spline_2d_feec), intent(in), pointer  particle_mesh_coupling,
class(sll_t_particle_array), intent(in), pointer  particle_group,
real(kind=f64), dimension(:), intent(in), pointer  efield_dofs,
real(kind=f64), dimension(:), intent(in), pointer  bfield_dofs,
real(kind=f64), dimension(2), intent(in)  x_min,
real(kind=f64), dimension(2), intent(in)  Lx 
)

Constructor for pointer abstract type.

Parameters
[out]splittingtime propagator object
[in]maxwell_solverMaxwell solver
[in]particle_mesh_couplingParticle mesh coupling
[in]particle_groupParticle group
[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.

Definition at line 590 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

◆ strang_splitting_pic_vm_2d3v_hs()

subroutine sll_m_time_propagator_pic_vm_2d3v_hs::strang_splitting_pic_vm_2d3v_hs ( class(sll_t_time_propagator_pic_vm_2d3v_hs), intent(inout)  self,
real(kind=f64), intent(in)  dt,
integer(kind=i32), intent(in)  number_steps 
)
private

Finalization.

Strang splitting

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

Definition at line 87 of file sll_m_time_propagator_pic_vm_2d3v_hs.F90.

    Report Typos and Errors