28 use,
intrinsic :: iso_fortran_env
54 real(real64),
allocatable :: dop(:, :, :)
55 complex(real64),
allocatable :: zop(:, :, :)
56 type(accel_mem_t) :: op_buffer
58 logical :: in_device_memory = .false.
61 real(real64),
allocatable,
public :: qq(:)
62 real(real64),
public :: singularity =
m_zero
63 real(real64),
public :: mu =
m_zero
64 real(real64),
public :: alpha =
m_zero
65 real(real64),
public :: beta =
m_zero
75 real(real64),
parameter,
public :: VANISHING_Q = 1.0e-5_real64
76 real(real64),
parameter :: TOL_VANISHING_Q = 1e-6_real64
88 class(fourier_space_op_t),
intent(inout) :: this
89 class(space_t),
intent(in) :: space
90 real(real64),
intent(in) :: qvector(:)
91 type(xc_cam_t),
intent(in) :: cam
92 real(real64),
optional,
intent(in) :: singularity
96 safe_allocate(this%qq(1:space%dim))
97 this%qq(1:space%periodic_dim) = qvector(1:space%periodic_dim)
98 this%qq(space%periodic_dim+1:space%dim) = vanishing_q
103 this%alpha = cam%alpha
112 class(fourier_space_op_t),
intent(inout) :: this
116 if (this%in_device_memory)
then
118 this%in_device_memory = .false.
120 safe_deallocate_a(this%dop)
121 safe_deallocate_a(this%zop)
122 safe_deallocate_a(this%qq)
129#include "fourier_space_inc.F90"
132#include "complex.F90"
133#include "fourier_space_inc.F90"
subroutine, public accel_free_buffer(this, async)
Fast Fourier Transform module. This module provides a single interface that works with different FFT ...
subroutine, public zfourier_space_op_apply(this, cube, cf)
Applies a multiplication factor to the Fourier space grid. This is a local function.
subroutine, public dfourier_space_op_apply(this, cube, cf)
Applies a multiplication factor to the Fourier space grid. This is a local function.
subroutine fourier_space_op_end(this)
Finalize an instance of fourier_space_op_t.
subroutine zfourier_space_op_set_op(this, cube, op, in_device, op_move)
Set the op buffer, which defines the kernel on the cube, in Fourier space.
subroutine fourier_space_op_init(this, space, qvector, cam, singularity)
Initialise a Fourier space Op instance.
subroutine dfourier_space_op_set_op(this, cube, op, in_device, op_move)
Set the op buffer, which defines the kernel on the cube, in Fourier space.
real(real64), parameter, public m_zero
This module is intended to contain "only mathematical" functions and procedures.
The low level module to work with the PFFT library. http:
Definition of a Fourier Space Coulomb Kernel.