![]() |
Semi-Lagrangian Library
Modular library for kinetic and gyrokinetic simulations of plasmas in fusion energy devices.
|
Particle pusher based on the subcycling algorithm for the 1d2v Vlasov-Maxwell equation.
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... | |
|
private |
Destructor.
| [in,out] | self | time splitting object |
Definition at line 730 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
|
private |
Constructor.
| [out] | self | time splitting object |
| [in] | maxwell_solver | Maxwell solver |
| [in] | kernel_smoother_0 | Kernel smoother |
| [in] | kernel_smoother_1 | Kernel smoother |
| [in] | efield_dofs | array for the coefficients of the efields |
| [in] | bfield_dofs | array for the coefficients of the bfield |
| [in] | x_min | Lower bound of x domain |
| [in] | lx | Length of the domain in x direction. |
| [in] | n_sub_iter | Number of subcycling steps |
| [in] | file_prefix | File prefix |
| [in] | control_variate | Control variate (if delta f) |
| [in] | i_weight | Index of weight to be used by propagator |
Definition at line 632 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
|
private |
Lie splitting (oposite ordering)
| [in,out] | self | time splitting object |
| [in] | dt | time step |
| [in] | number_steps | number of time steps |
Definition at line 147 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
|
private |
Lie splitting.
| [in,out] | self | time splitting object |
| [in] | dt | time step |
| [in] | number_steps | number of time steps |
Definition at line 132 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
|
private |
| [in,out] | self | time splitting object |
| [in] | dt | time step |
Definition at line 164 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
|
private |
Implementation of the full time step with Newton iteration for the nonlinear part.
| [in,out] | self | time splitting object |
| [in] | dt | time step |
Definition at line 360 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
|
private |
Finalization.
Apply the filter to find the filtered field values
| [in,out] | self | time splitting object |
Definition at line 107 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
| 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.
| [out] | splitting | time splitting object |
| [in] | maxwell_solver | Maxwell solver |
| [in] | kernel_smoother_0 | Kernel smoother |
| [in] | kernel_smoother_1 | Kernel smoother |
| [in] | efield_dofs | array for the coefficients of the efields |
| [in] | bfield_dofs | array for the coefficients of the bfield |
| [in] | x_min | Lower bound of x domain |
| [in] | lx | Length of the domain in x direction. |
| [in] | n_sub_iter | Number of subcycling steps |
| [in] | file_prefix | File prefix |
| [in] | jmean | Should jmean be substracted in Ampere's law? |
| [in] | control_variate | Control variate (if delta f) |
Definition at line 747 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
| 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.
| [out] | splitting | time splitting object |
| [in] | maxwell_solver | Maxwell solver |
| [in] | kernel_smoother_0 | Kernel smoother |
| [in] | kernel_smoother_1 | Kernel smoother |
| [in] | file_prefix | File prefix |
| [in] | jmean | Should jmean be substracted in Ampere's law? |
Definition at line 831 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
|
private |
Strang splitting.
| [in,out] | self | time splitting object |
| [in] | dt | time step |
| [in] | number_steps | number of time steps |
Definition at line 117 of file sll_m_time_propagator_pic_vm_1d2v_subcyc.F90.
1.9.1