Semi-Lagrangian Library
Modular library for kinetic and gyrokinetic simulations of plasmas in fusion energy devices.
|
Kernel smoother for 1d with splines of arbitrary degree placed on a uniform mesh.
Spline with index i starts at point i
Derived types and interfaces | |
type | sll_t_particle_mesh_coupling_spline_1d |
Spline kernel smoother in1d. More... | |
Functions/Subroutines | |
subroutine | add_charge_single_spline_1d (self, position, marker_charge, rho_dofs) |
helper function to compute the integral of j using Gauss quadrature (needs to be provided for the derived type with smoothing) More... | |
subroutine | add_particle_mass_spline_1d (self, position, marker_charge, particle_mass) |
Add the contribution of one particle to the approximate mass matrix. More... | |
subroutine | add_particle_mass_spline_1d_full (self, position, marker_charge, particle_mass) |
Add the contribution of one particle to the approximate mass matrix. More... | |
subroutine | evaluate_field_single_spline_1d (self, position, field_dofs, field_value) |
Evaluate field at at position position. More... | |
subroutine | evaluate_multiple_spline_1d (self, position, components, field_dofs, field_value) |
Evaluate several fields at position position. More... | |
subroutine | add_current_spline_1d (self, position_old, position_new, marker_charge, j_dofs) |
Add current with integration over x. More... | |
subroutine | add_current_evaluate_spline_1d (self, position_old, position_new, marker_charge, vbar, field_dofs, j_dofs, field) |
Combines add_current and evaluate_int. More... | |
subroutine | evaluate_int_spline_1d (self, position_old, position_new, vbar, field_dofs, field) |
Evaluates the integral int_{poisition_old}^{position_new} field(x) d x. More... | |
subroutine | evaluate_int_quad_spline_1d (self, position_old, position_new, field_dofs, field) |
Evaluates an integrated field (between position_old and position_new) but with a quadrature formula for the integration. More... | |
subroutine | evaluate_int_spline_1d_subnewton (self, position_old, position_new, field_dofs, field) |
subroutine | add_current_update_v_spline_pp_1d (self, position_old, position_new, marker_charge, qoverm, bfield_dofs, vi, j_dofs) |
Add current for one particle and update v (according to H_p1 part in Hamiltonian splitting) More... | |
subroutine | update_jv_pp (self, lower, upper, index, marker_charge, qoverm, vi, j_dofs, bfield_dofs) |
Helper function for add_current_update_v. More... | |
subroutine | add_current_update_v_spline_1d (self, position_old, position_new, marker_charge, qoverm, bfield_dofs, vi, j_dofs) |
Add current for one particle and update v (according to H_p1 part in Hamiltonian splitting) More... | |
subroutine | update_jv (self, lower, upper, index, marker_charge, qoverm, sign, vi, j_dofs, bfield_dofs) |
Helper function for add_current_update_v. More... | |
subroutine | update_v_partial (self, upper, lower, uppert, lowert, index, field_dofs, bint) |
Helper function for evaluate_int_quad (despite the name it evaluates a field and does not update v) More... | |
subroutine | update_v_partial_newton (self, upper, lower, uppert, lowert, index, field_dofs, bint) |
Helper function for evaluate_int_quad_subnewton (despite the name it evaluates a field and does not update v) More... | |
subroutine | convert_x_to_xbox (self, position, xi, box) |
Helper function that identifies in which box the particle is found and its normalized poistion in the box. More... | |
subroutine | init_spline_1d (self, domain, n_cells, no_particles, spline_degree, smoothing_type) |
Initializer. More... | |
subroutine | free_spline_1d (self) |
Destructor. More... | |
subroutine, public | sll_s_new_particle_mesh_coupling_spline_1d_ptr (smoother, domain, n_cells, no_particles, spline_degree, smoothing_type) |
subroutine, public | sll_s_new_particle_mesh_coupling_spline_1d (smoother, domain, n_cells, no_particles, spline_degree, smoothing_type) |
subroutine | add_current_split_spline_1d (self, position_old, position_new, iter, total_iter, marker_charge, j_dofs) |
Add current version with tau and (1-tau) which is needed for the implicit subcycling scheme. More... | |
subroutine | update_current_partial (self, upper, lower, uppert, lowert, index, iter, total_iter, marker_charge, j_dofs) |
Helper function for add_current_split. More... | |
subroutine | evaluate_int_linear_quad_spline_1d (self, position_old, position_new, iter, total_iter, field_dofs_1, field_dofs_2, field) |
Evaluates the integrals with tau function for implicit subcycling. More... | |
subroutine | update_field_linear_partial (self, upper, lower, uppert, lowert, index, field_dofs_1, field_dofs_2, iter, total_iter, bint) |
Helper function for evaluate_int_linear_quad (implements part within one cell) More... | |
subroutine | evaluate_int_linear_quad_subnewton_spline_1d (self, position_old, position_new, iter, total_iter, field_dofs_1, field_dofs_2, field) |
For implicit subcycling propagator, evaluates the integral needed for Newtons's method in the evaluate_int_linear_quad part. More... | |
subroutine | update_field_linear_partial_newton (self, upper, lower, uppert, lowert, index, field_dofs_1, field_dofs_2, iter, total_iter, bint) |
Helper function for evaluate_int_linear_quad_subnewton (takes care of the per cell computations) More... | |
subroutine | add_charge_int_spline_1d (self, position_old, position_new, marker_charge, j_dofs) |
For explicit version of the subcycling propagator (to evaluate the charge as it comes out integrated from the formulation) More... | |
subroutine | update_charge_int_partial (self, upper, lower, uppert, lowert, index, marker_charge, j_dofs) |
Helper function for add_charge_int (takes care of the per cell computations) More... | |
|
private |
For explicit version of the subcycling propagator (to evaluate the charge as it comes out integrated from the formulation)
[in,out] | self | kernel smoother object |
Definition at line 1378 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
helper function to compute the integral of j using Gauss quadrature (needs to be provided for the derived type with smoothing)
Add charge of one particle
[in,out] | self | kernel smoother object |
Definition at line 103 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Combines add_current and evaluate_int.
[in,out] | self | kernel smoother object |
Definition at line 346 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Add current with integration over x.
[in,out] | self | kernel smoother object |
Definition at line 262 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Add current version with tau and (1-tau) which is needed for the implicit subcycling scheme.
[in,out] | self | kernel smoother object |
[in] | position_old | Position of the particle |
[in] | position_new | Position of the particle |
[in] | marker_charge | Particle weights time charge |
[in,out] | j_dofs | Coefficient vector of the current density |
Definition at line 1053 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Add current for one particle and update v (according to H_p1 part in Hamiltonian splitting)
[in,out] | self | kernel smoother object |
[in] | position_old | Position at time t |
[in] | position_new | Position at time t + \Delta t |
[in] | marker_charge | Particle weight time charge |
[in] | qoverm | charge to mass ration |
[in] | bfield_dofs | Coefficient of B-field expansion |
[in,out] | vi | Velocity of the particles |
[in,out] | j_dofs | Coefficients of current expansion |
Definition at line 700 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Add current for one particle and update v (according to H_p1 part in Hamiltonian splitting)
[in,out] | self | kernel smoother object |
[in] | position_old | Position at time t |
[in] | position_new | Position at time t + \Delta t |
[in] | marker_charge | Particle weight time charge |
[in] | qoverm | charge to mass ration |
[in] | bfield_dofs | Coefficient of B-field expansion |
[in,out] | vi | Velocity of the particles |
[in,out] | j_dofs | Coefficients of current expansion |
Definition at line 621 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Add the contribution of one particle to the approximate mass matrix.
[in,out] | self | kernel smoother object |
Definition at line 130 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Add the contribution of one particle to the approximate mass matrix.
[in,out] | self | kernel smoother object |
Definition at line 163 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Helper function that identifies in which box the particle is found and its normalized poistion in the box.
[in,out] | self | kernel smoother object |
[in] | position | Position of the particle |
[out] | xi | Position of the particle |
[out] | box | Position of the particle |
Definition at line 885 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Evaluate field at at position position.
[in,out] | self | Kernel smoother object |
Definition at line 197 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Evaluates the integrals with tau function for implicit subcycling.
[in,out] | self | kernel smoother object |
[in] | position_old | Position of the particle |
[in] | position_new | Position of the particle |
[in] | field_dofs_1 | Coefficient vector of the current density |
[in] | field_dofs_2 | Coefficient vector of the current density |
Definition at line 1166 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
For implicit subcycling propagator, evaluates the integral needed for Newtons's method in the evaluate_int_linear_quad part.
[in,out] | self | kernel smoother object |
Definition at line 1274 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Evaluates an integrated field (between position_old and position_new) but with a quadrature formula for the integration.
[in,out] | self | kernel smoother object |
Definition at line 528 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Evaluates the integral int_{poisition_old}^{position_new} field(x) d x.
[in,out] | self | kernel smoother object |
Definition at line 446 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
[in,out] | self | kernel smoother object |
[in] | position_old | Position of the particle |
[in] | position_new | Position of the particle |
[in] | field_dofs | Coefficient vector of the current density |
Definition at line 574 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Evaluate several fields at position position.
[in,out] | self | Kernel smoother object |
Definition at line 228 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Destructor.
[in,out] | self | Kernel smoother object |
Definition at line 990 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Initializer.
[out] | self | kernel smoother object |
[in] | n_cells | number of DoFs (spline coefficients) |
[in] | domain | x_min and x_max of the domain |
[in] | no_particles | number of particles |
[in] | spline_degree | Degree of smoothing kernel spline |
[in] | smoothing_type | Define if Galerkin or collocation smoothing for right scaling in accumulation routines |
Definition at line 899 of file sll_m_particle_mesh_coupling_spline_1d.F90.
subroutine, public sll_m_particle_mesh_coupling_spline_1d::sll_s_new_particle_mesh_coupling_spline_1d | ( | class( sll_c_particle_mesh_coupling_1d), intent(out), allocatable | smoother, |
real(kind=f64), dimension(2), intent(in) | domain, | ||
integer(kind=i32), intent(in) | n_cells, | ||
integer(kind=i32), intent(in) | no_particles, | ||
integer(kind=i32), intent(in) | spline_degree, | ||
integer(kind=i32), intent(in) | smoothing_type | ||
) |
[out] | smoother | kernel smoother object |
[in] | n_cells | number of DoFs (spline coefficients) |
[in] | domain | x_min and x_max of the domain |
[in] | no_particles | number of particles |
[in] | spline_degree | Degree of smoothing kernel spline |
[in] | smoothing_type | Define if Galerkin or collocation smoothing for right scaling in accumulation routines |
Definition at line 1027 of file sll_m_particle_mesh_coupling_spline_1d.F90.
subroutine, public sll_m_particle_mesh_coupling_spline_1d::sll_s_new_particle_mesh_coupling_spline_1d_ptr | ( | class( sll_c_particle_mesh_coupling_1d), intent(out), pointer | smoother, |
real(kind=f64), dimension(2), intent(in) | domain, | ||
integer(kind=i32), intent(in) | n_cells, | ||
integer(kind=i32), intent(in) | no_particles, | ||
integer(kind=i32), intent(in) | spline_degree, | ||
integer(kind=i32), intent(in) | smoothing_type | ||
) |
[out] | smoother | kernel smoother object |
[in] | n_cells | number of DoFs (spline coefficients) |
[in] | domain | x_min and x_max of the domain |
[in] | no_particles | number of particles |
[in] | spline_degree | Degree of smoothing kernel spline |
[in] | smoothing_type | Define if Galerkin or collocation smoothing for right scaling in accumulation routines |
Definition at line 1003 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Helper function for add_charge_int (takes care of the per cell computations)
[in,out] | self | kernel smoother object |
Definition at line 1434 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Helper function for add_current_split.
[in,out] | self | kernel smoother object |
[in] | marker_charge | Particle weights time charge |
[in,out] | j_dofs | Coefficient vector of the current density |
Definition at line 1111 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Helper function for evaluate_int_linear_quad (implements part within one cell)
[in,out] | self | kernel smoother object |
[in] | field_dofs_1 | Coefficient vector of the current density |
[in] | field_dofs_2 | Coefficient vector of the current density |
Definition at line 1230 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Helper function for evaluate_int_linear_quad_subnewton (takes care of the per cell computations)
[in,out] | self | kernel smoother object |
Definition at line 1335 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Helper function for add_current_update_v.
[in,out] | self | time splitting object |
Definition at line 751 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Helper function for add_current_update_v.
[in,out] | self | time splitting object |
Definition at line 666 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Helper function for evaluate_int_quad (despite the name it evaluates a field and does not update v)
[in,out] | self | kernel smoother object |
[in] | field_dofs | Coefficient vector of the current density |
Definition at line 794 of file sll_m_particle_mesh_coupling_spline_1d.F90.
|
private |
Helper function for evaluate_int_quad_subnewton (despite the name it evaluates a field and does not update v)
[in,out] | self | kernel smoother object |
[in] | field_dofs | Coefficient vector of the current density |
Definition at line 839 of file sll_m_particle_mesh_coupling_spline_1d.F90.