add_gaussian_sources Subroutine

public subroutine add_gaussian_sources(a, b, c, src, box, n_src, inv_eps2, r_cut2, dx, dy, dz, nx, ny, nz, gx, gy, gz, ox, oy, oz, px, py, pz, n_i_pad)

a, b, c += src(4:6, s)*exp(-dist^2/eps^2) within r_cut of the point src(1:3, s), over the global index box box(1:3, s)..box(4:6, s); see source_index_boxes. Box indices are wrapped across periodic boundaries and skipped where this rank does not own them. Launch with blocks (n_src, box extent in z) and threads striding y within the box; sources overlap, so the adds are atomic.

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(inout), device, dimension(:, :, :) :: a
real(kind=dp), intent(inout), device, dimension(:, :, :) :: b
real(kind=dp), intent(inout), device, dimension(:, :, :) :: c
real(kind=dp), intent(in), device :: src(6,n_src)
integer, intent(in), device :: box(6,n_src)
integer, intent(in), value :: n_src
real(kind=dp), intent(in), value :: inv_eps2
real(kind=dp), intent(in), value :: r_cut2
real(kind=dp), intent(in), value :: dx
real(kind=dp), intent(in), value :: dy
real(kind=dp), intent(in), value :: dz
integer, intent(in), value :: nx
integer, intent(in), value :: ny
integer, intent(in), value :: nz
integer, intent(in), value :: gx
integer, intent(in), value :: gy
integer, intent(in), value :: gz
integer, intent(in), value :: ox
integer, intent(in), value :: oy
integer, intent(in), value :: oz
logical, intent(in), value :: px
logical, intent(in), value :: py
logical, intent(in), value :: pz
integer, intent(in), value :: n_i_pad

Calls

proc~~add_gaussian_sources~2~~CallsGraph proc~add_gaussian_sources~2 m_cuda_kernels_fieldops::add_gaussian_sources atomicadd atomicadd proc~add_gaussian_sources~2->atomicadd proc~local_index m_cuda_kernels_fieldops::local_index proc~add_gaussian_sources~2->proc~local_index

Called by

proc~~add_gaussian_sources~2~~CalledByGraph proc~add_gaussian_sources~2 m_cuda_kernels_fieldops::add_gaussian_sources proc~field_add_gaussian_sources_cuda m_cuda_backend::cuda_backend_t%field_add_gaussian_sources_cuda proc~field_add_gaussian_sources_cuda->proc~add_gaussian_sources~2