51#if defined(HAVE_NETCDF)
99 complex(real64),
allocatable,
public :: k(:,:,:,:,:,:)
106 integer :: fs_n_global(1:3)
108 integer :: fs_istart(1:3)
110 real(real64) :: spacing(3)
112 type(mesh_t),
pointer,
public :: mesh => null()
115 real(real64),
allocatable,
public :: vec_pot(:,:)
117 real(real64),
allocatable,
public :: Mk(:,:,:)
118 type(cube_function_t) :: cM
119 real(real64),
allocatable,
public :: mask_R(:)
121 real(real64),
allocatable :: ufn(:)
124 real(real64),
allocatable,
public :: Lk(:,:)
126 real(real64) :: enlarge(3)
127 real(real64) :: enlarge_2p(3)
129 real(real64) :: start_time
130 real(real64) :: energyMax
131 real(real64) :: energyStep
134 logical :: back_action
139 integer :: pw_map_how
143 type(mesh_cube_parallel_map_t) :: mesh_cube_map
149 integer,
public,
parameter :: &
150 PES_MASK_MODE_MASK = 1, &
154 integer,
parameter :: &
155 PW_MAP_FFT = 3, & !< FFT - normally from fftw3
160 integer,
parameter :: &
165 integer,
parameter :: &
169 integer,
public,
parameter :: &
170 INTEGRATE_NONE = -1, &
183 subroutine pes_mask_init(mask, namespace, space, mesh, box, st, ext_partners, abs_boundaries, max_iter,dt)
184 type(pes_mask_t),
intent(out) :: mask
185 type(namespace_t),
intent(in) :: namespace
186 class(space_t),
intent(in) :: space
187 type(mesh_t),
target,
intent(in) :: mesh
188 class(box_t),
intent(in) :: box
189 type(states_elec_t),
intent(in) :: st
190 type(partner_list_t),
intent(in) :: ext_partners
191 type(absorbing_boundaries_t),
intent(in) :: abs_boundaries
192 integer,
intent(in) :: max_iter
193 real(real64),
intent(in) :: dt
197 integer :: il, it, ll(3)
198 real(real64) :: field(3)
199 real(real64) :: deltae, maxe, pcutoff, tmp
200 integer :: defaultmask,k1,k2,st1,st2
201 integer :: cols_pesmask_block, idim, ip
203 real(real64) :: xx(space%dim), r
204 real(real64) :: ufn_re, ufn_im
205 character(len=1024) :: user_def_expr
212 if (space%is_periodic())
then
217 write(
message(1),
'(a,i1,a)')
'Info: Calculating PES using mask technique.'
221 select type (box => box)
224 if (.not. space%is_periodic())
then
225 message(1) =
'PhotoElectronSpectrum = pes_mask usually requires BoxShape = sphere.'
226 message(2) =
'Unless you know what you are doing modify this parameter and rerun.'
232 message(1) =
'PhotoElectronSpectrum = pes_mask already contains absorbing boundaries.'
233 message(2) =
'Set AbsorbingBoundaries = no and rerun.'
257 call parse_variable(namespace,
'PESMaskMode', pes_mask_mode_mask, mask%mode)
261 select case (mask%mode)
264 mask%back_action = .false.
268 mask%back_action = .
true.
269 mask%mode = pes_mask_mode_mask
272 mask%back_action = .false.
313 call parse_variable(namespace,
'PESMaskPlaneWaveProjection', pw_map_fft, mask%pw_map_how)
321 if (mask%pw_map_how ==
pw_map_pfft .and. (.not. mask%mesh%parallel_in_domains))
then
322 message(1)=
"Trying to use PESMaskPlaneWaveProjection = pfft_map with no domain parallelization."
323 message(2)=
"Projection method changed to more efficient fft_map."
325 mask%pw_map_how = pw_map_fft
328 if (mask%pw_map_how ==
pw_map_pnfft .and. (.not. mask%mesh%parallel_in_domains))
then
329 message(1)=
"Trying to use PESMaskPlaneWaveProjection = pnfft_map with no domain parallelization."
330 message(2)=
"Projection method changed to more efficient nfft_map."
335#if !defined(HAVE_NFFT)
337 message(1) =
"PESMaskPlaneWaveProjection = nfft_map requires NFFT but that library was not linked."
342#if !defined(HAVE_PFFT)
344 message(1) =
"PESMaskPlaneWaveProjection = pfft_map requires PFFT but that library was not linked."
349#if !defined(HAVE_PNFFT)
351 message(1) =
"PESMaskPlaneWaveProjection = pnfft_map requires PNFFT but that library was not linked."
371 mask%enlarge(space%periodic_dim + 1:space%dim) = mask%enlarge(1)
372 mask%enlarge(1:space%periodic_dim) =
m_one
374 if (space%is_periodic())
then
381 if (mask%enlarge(1) <
m_one)
then
382 message(1) =
"PESMaskEnlargeFactor must be bigger than one."
403 mask%enlarge_2p =
m_one
409 mask%enlarge_2p(space%periodic_dim + 1:space%dim) = mask%enlarge_2p(1)
410 mask%enlarge_2p(1:space%periodic_dim) =
m_one
412 if (space%is_periodic())
then
419 message(1) =
"PESMask2PEnlargeFactor requires PESMaskPlaneWaveProjection = nfft_map"
420 message(2) =
"or pnfft_map in order to run properly."
425 if (mask%enlarge_2p(1) <
m_one)
then
426 message(1) =
"PESMask2PEnlargeFactor must be bigger than one."
434 mask%spacing = -
m_one
436 mask%spacing(1:space%dim) = mesh%spacing(1:space%dim)
437 mask%ll(1:space%dim) = mesh%idx%ll(1:space%dim)
440 mask%ll(1:space%dim) = int(mask%ll(1:space%dim) * mask%enlarge(1:space%dim))
442 mask%np = mesh%np_part
444 select case (mask%pw_map_how)
447 assert(mask%mesh%parallel_in_domains)
448 call cube_init(mask%cube, mask%ll, namespace, space, &
449 mesh%spacing, mesh%coord_system, &
451 mpi_grp = mask%mesh%mpi_grp, need_partition=.
true.)
464 mask%ll(1:3) = mask%cube%rs_n(1:3)
466 mask%fft = mask%cube%fft
467 if (mask%mesh%parallel_in_domains .and. mask%cube%parallel_in_domains)
then
472 call cube_init(mask%cube, mask%ll, namespace, space, &
473 mesh%spacing, mesh%coord_system, &
478 mask%fft = mask%cube%fft
485 if (.not.
is_close(mask%enlarge_2p(1),
m_one)) mask%ll(1:space%dim) = mask%ll(1:space%dim) + 2
487 call cube_init(mask%cube, mask%ll, namespace, space, &
488 mesh%spacing, mesh%coord_system, &
490 nn_out = ll, tp_enlarge = mask%enlarge_2p)
494 mask%fft = mask%cube%fft
499 if (.not.
is_close(mask%enlarge_2p(1),
m_one)) mask%ll(1:space%dim) = mask%ll(1:space%dim) + 2
501 call cube_init(mask%cube, mask%ll, namespace, space, &
502 mask%mesh%spacing, mask%mesh%coord_system, &
504 nn_out = ll, tp_enlarge = mask%enlarge_2p, &
505 mpi_grp = mask%mesh%mpi_grp, need_partition=.
true.)
508 mask%ll(1:3) = mask%cube%fs_n(1:3)
510 mask%fft = mask%cube%fft
511 if (mask%mesh%parallel_in_domains .and. mask%cube%parallel_in_domains)
then
517 write(
message(1),
'(a)')
"PESMaskPlaneWaveProjection unrecognized option."
525 mask%fs_istart = mask%cube%rs_istart
526 mask%fs_n = mask%cube%rs_n
527 mask%fs_n_global = mask%cube%rs_n_global
529 mask%fs_istart = mask%cube%fs_istart
530 mask%fs_n = mask%cube%fs_n
531 mask%fs_n_global = mask%cube%fs_n_global
535 print *,
mpi_world%rank,
"mask%ll ", mask%ll(:)
536 print *,
mpi_world%rank,
"mask%cube%fs_n_global(:) ", mask%cube%fs_n_global(:)
537 print *,
mpi_world%rank,
"mask%cube%fs_n(:) ", mask%cube%fs_n(:)
538 print *,
mpi_world%rank,
"mask%cube%fs_istart(:) ", mask%cube%fs_istart(:)
539 print *,
mpi_world%rank,
"mask%cube%rs_n_global(:) ", mask%cube%rs_n_global(:)
540 print *,
mpi_world%rank,
"mask%cube%rs_n(:) ", mask%cube%rs_n(:)
541 print *,
mpi_world%rank,
"mask%cube%rs_istart(:) ", mask%cube%rs_istart(:)
548 safe_allocate(mask%Lk(1:maxval(mask%fs_n_global(:)),1:3))
555 safe_allocate(mask%k(1:mask%ll(1),1:mask%ll(2),1:mask%ll(3),1:st%d%dim,st1:st2,k1:k2))
568 safe_allocate(mask%mask_R(1:2))
583 call parse_variable(namespace,
'PESMaskShape', defaultmask, mask%shape)
605 cols_pesmask_block = 0
606 if (
parse_block(namespace,
'PESMaskSize', blk) == 0)
then
610 mask%user_def = .false.
612 select case (cols_pesmask_block)
614 select type (box => box)
616 mask%mask_R(1) = box%radius/
m_two
617 mask%mask_R(2) = box%radius
618 message(1) =
"Input: PESMaskSize R(1) and R(2) not specified. Using default values for spherical mask."
620 mask%mask_R(1) = box%half_length(1)/
m_two
621 mask%mask_R(2) = box%half_length(1)
622 message(1) =
"Input: PESMaskSize R(1) and R(2) not specified. Using default values for cubic mask."
627 select type (box => box)
629 mask%mask_R(2) = box%radius
630 message(1) =
"Input: PESMaskSize R(2) not specified. Using default value for spherical mask."
632 mask%mask_R(2) = box%half_length(1)
633 message(1) =
"Input: PESMaskSize R(2) not specified. Using default value for cubic mask."
640 select type (box => box)
642 if (mask%mask_R(2) > box%radius) mask%mask_R(2) = box%radius
643 message(1) =
"Info: using spherical mask."
645 if (mask%mask_R(2) > box%half_length(1)) mask%mask_R(2) = box%half_length(1)
646 message(1) =
"Info: using cubic mask."
651 mask%user_def = .
true.
652 safe_allocate(mask%ufn(1:mask%np))
658 xx(1:space%dim) = mesh%x(1:space%dim, ip)
660 do idim = 1, space%dim
664 mask%ufn(ip) = ufn_re
666 message(1) =
"Input: using user-defined mask function from expression:"
667 write(
message(2),
'(a,a)')
' R = ', trim(user_def_expr)
673 write(
message(1),
'(a,es10.3,3a)') &
676 write(
message(2),
'(a,es10.3,3a)') &
696 mask%filter_k = .false.
698 if (pcutoff >
m_zero)
then
700 mask%filter_k = .
true.
702 safe_allocate(mask%Mk(1:mask%ll(1),1:mask%ll(2),1:mask%ll(3)))
723 call parse_variable(namespace,
'PESMaskIncludePsiA', .false., mask%add_psia)
724 if (mask%add_psia)
then
725 message(1)=
"Input: Include contribution from Psi_A."
738 do idim = 1, space%dim
739 tmp = maxval(mask%Lk(1:mask%ll(idim),1:space%dim))**
m_two/
m_two
740 if (tmp > maxe) maxe = tmp
751 deltae = minval(mask%Lk(2,1:space%dim) - mask%Lk(1,1:space%dim))**
m_two/
m_two
758 safe_allocate(mask%vec_pot(0:max_iter,1:3))
762 if(
associated(lasers))
then
763 do il = 1, lasers%no_lasers
771 mask%vec_pot(it,:)= mask%vec_pot(it,:) - field(:)
775 write(
message(1),
'(a)')
'PESMask should work only with TDExternalFields = vector_potential.'
776 write(
message(2),
'(a)')
'Unless PESMaskMode = passive_mode the results are likely to be wrong. '
788 mask%pw_map_how ==
pw_map_nfft) mask%Lk = - mask%Lk
801 safe_deallocate_a(mask%k)
803 safe_deallocate_a(mask%vec_pot)
804 safe_deallocate_a(mask%mask_R)
805 safe_deallocate_a(mask%Lk)
808 if (mask%filter_k)
then
809 safe_deallocate_a(mask%Mk)
812 if (mask%mesh%parallel_in_domains .and. mask%cube%parallel_in_domains)
then
819 if (mask%user_def)
then
820 safe_deallocate_a(mask%ufn)
835 dim = mask%mesh%box%dim
837 do ii = 1, maxval(mask%ll(:))
838 mask%Lk(ii,1:dim)= matmul(mask%cube%latt%klattice_primitive(1:dim,1:dim), mask%cube%Lfs(ii,1:dim))
849 real(real64),
intent(in) ::cutoff
852 integer :: kx,ky,kz, power
853 real(real64) :: kk(3), ee, emax
859 emax = maxval(mask%Lk(:,:))**2 /
m_two
863 do kx = 1, mask%ll(1)
864 kk(1) = mask%Lk(kx,1)
865 do ky = 1, mask%ll(2)
866 kk(2) = mask%Lk(ky,2)
867 do kz = 1, mask%ll(3)
868 kk(3) = mask%Lk(kz,3)
870 ee = sum(kk(1:mask%mesh%box%dim)**2) /
m_two
872 if (ee > cutoff .and. ee < emax)
then
875 if (ee <= cutoff) mask%Mk(kx,ky,kz) =
m_one
894 type(
mesh_t),
intent(in) :: mesh
911 type(
mesh_t),
intent(in) :: mesh
912 integer,
intent(in) :: shape
913 real(real64),
intent(in) :: r(2)
914 real(real64),
optional,
intent(out) :: mask_sq(:,:,:)
917 real(real64) :: width
918 real(real64) :: xx(1:mesh%box%dim), rr, dd, ddv(1:mesh%box%dim), tmp(1:mesh%box%dim)
919 complex(real64),
allocatable :: mask_fn(:)
925 safe_allocate(mask_fn(1:mask%np))
934 call mesh_r(mesh, ip, rr, coords=xx)
936 if (mask%user_def)
then
937 dd = mask%ufn(ip) - r(1)
939 if (mask%ufn(ip) < r(2))
then
948 select type (box => mesh%box)
965 do dir=1, mesh%box%dim
966 if (ddv(dir) >
m_zero)
then
967 if (ddv(dir) < width)
then
973 mask_fn(ip) = mask_fn(ip) * tmp(dir)
975 mask_fn(ip) =
m_one - mask_fn(ip)
983 call mesh_r(mesh, ip, rr, coords=xx)
997 message(1)=
"PhotoElectronSpectrum = pes_mask. Unrecognized mask type."
1008 if (
present(mask_sq)) mask_sq = real(mask%cM%zRS, real64)
1012 safe_deallocate_a(mask_fn)
1024 integer :: ik, ist, idim
1025 complex(real64),
allocatable :: mmask(:), psi(:)
1028 safe_allocate(mmask(1:mask%mesh%np))
1029 safe_allocate(psi(1:mask%mesh%np))
1033 do ik = st%d%kpt%start, st%d%kpt%end
1034 do ist = st%st_start, st%st_end
1035 do idim = 1, st%d%dim
1037 psi(1:mask%mesh%np) = psi(1:mask%mesh%np) * mmask(1:mask%mesh%np)
1043 safe_deallocate_a(mmask)
1068 class(
space_t),
intent(in) :: space
1069 type(
mesh_t),
intent(in) :: mesh
1071 real(real64),
intent(in) :: dt
1072 integer,
intent(in) :: iter
1073 complex(real64),
intent(inout) :: wf(:,:,:)
1074 integer,
intent(in) :: ikpoint
1076 integer :: ix, iy, iz
1078 real(real64) :: kk(1:3), kpoint(1:3)
1083 if (space%is_periodic())
then
1084 kpoint(1:mesh%box%dim) = kpoints%get_point(ikpoint)
1087 do ix = 1, mask%ll(1)
1088 kk(1) = mask%Lk(ix + mask%fs_istart(1) - 1, 1)
1089 do iy = 1, mask%ll(2)
1090 kk(2) = mask%Lk(iy + mask%fs_istart(2) - 1, 2)
1091 do iz = 1, mask%ll(3)
1092 kk(3) = mask%Lk(iz + mask%fs_istart(3) - 1, 3)
1095 vec = sum(( kk(1:mesh%box%dim) &
1096 - kpoint(1:mesh%box%dim) &
1097 - mask%vec_pot(iter,1:mesh%box%dim)/
p_c)**2) /
m_two
1098 wf(ix, iy, iz) = wf(ix, iy, iz) *
exp(-
m_zi * dt * vec)
1127 complex(real64),
intent(inout) :: wfin(:,:,:)
1128 complex(real64),
intent(out) :: wfout(:,:,:)
1131 real(real64) :: norm
1139 select case (mask%pw_map_how)
1153 wfout = wfout * norm
1168 wfout = wfout * norm
1188 complex(real64),
intent(inout) :: wfin(:,:,:)
1189 complex(real64),
intent(out) :: wfout(:,:,:)
1192 real(real64) :: norm
1200 select case (mask%pw_map_how)
1207 wfout = wfout / norm
1222 wfout = wfout / norm
1244 complex(real64),
contiguous,
intent(in) :: mf(:)
1249 if (mask%cube%parallel_in_domains)
then
1262 complex(real64),
contiguous,
intent(out):: mf(:)
1267 if (mask%cube%parallel_in_domains)
then
1282 subroutine pes_mask_calc(mask, namespace, space, mesh, st, kpoints, dt, iter)
1285 class(
space_t),
intent(in) :: space
1286 type(
mesh_t),
intent(in) :: mesh
1289 real(real64),
intent(in) :: dt
1290 integer,
intent(in) :: iter
1292 integer :: idim, ist, ik
1294 complex(real64),
allocatable :: mf(:), psi(:)
1296 real(real64) :: time
1305 if (time > mask%start_time)
then
1312 select case (mask%mode)
1313 case (pes_mask_mode_mask)
1314 if (mask%back_action .eqv. .
true.)
then
1315 safe_allocate(mf(1:mask%mesh%np_part))
1319 safe_allocate(psi(1:mask%mesh%np_part))
1321 do ik = st%d%kpt%start, st%d%kpt%end
1322 do ist = st%st_start, st%st_end
1323 do idim = 1, st%d%dim
1327 cf1%zRs(:,:,:) =
m_z0
1328 cf2%zRS(:,:,:) =
m_z0
1329 cf1%Fs(:,:,:) =
m_z0
1330 cf2%Fs(:,:,:) =
m_z0
1334 select case (mask%mode)
1338 case (pes_mask_mode_mask)
1340 cf1%zRs = (
m_one - mask%cM%zRs) * cf1%zRs
1344 if (mask%filter_k)
then
1345 assert(
allocated(mask%Mk))
1346 cf2%Fs = cf2%Fs * mask%Mk
1350 cf1%Fs(:,:,:) = mask%k(:,:,:, idim, ist, ik)
1351 mask%k(:,:,:, idim, ist, ik) = cf2%Fs(:,:,:)
1353 st%d%get_kpoint_index(ik))
1355 mask%k(:,:,:, idim, ist, ik) = mask%k(:,:,:, idim, ist, ik)&
1358 if (mask%back_action .eqv. .
true.)
then
1363 psi(1:mask%mesh%np) = psi(1:mask%mesh%np) + mf(1:mask%mesh%np)
1367 cf2%zRs= (mask%cM%zRs) * cf2%zRs
1370 mask%k(:,:,:, idim, ist, ik) = mask%k(:,:,:, idim, ist, ik) - cf1%Fs
1381 cf1%zRs = (
m_one-mask%cM%zRs) * cf1%zRs
1384 mask%k(:,:,:, idim, ist, ik) = cf2%Fs(:,:,:)
1389 write(
message(1),
'(a)')
"PhotoElectroSpectrum = pes_mask. Unrecognized calculation mode."
1399 safe_deallocate_a(psi)
1406 select case (mask%mode)
1407 case (pes_mask_mode_mask)
1408 if (mask%back_action .eqv. .
true.)
then
1409 safe_deallocate_a(mf)
1426#include "pes_mask_out_inc.F90"
Prints out to iunit a message in the form: ["InputVariable" = value] where "InputVariable" is given b...
double exp(double __x) __attribute__((__nothrow__
double sin(double __x) __attribute__((__nothrow__
integer, parameter, public not_absorbing
subroutine, public zmesh_to_cube(mesh, mf, cube, cf)
Convert a function from the mesh to the cube.
subroutine, public zcube_to_mesh_parallel(cube, cf, mesh, mf, map)
subroutine, public zcube_to_mesh(cube, cf, mesh, mf)
Convert a function from the cube to the mesh.
subroutine, public zmesh_to_cube_parallel(mesh, mf, cube, cf, map)
The next two subroutines convert a function between the normal mesh and the cube in parallel.
subroutine, public zcube_function_free_rs(cube, cf)
Deallocates the real space grid.
subroutine, public zcube_function_alloc_rs(cube, cf, in_device, force_alloc)
Allocates locally the real space grid, if PFFT library is not used. Otherwise, it assigns the PFFT re...
subroutine, public cube_init(cube, nn, namespace, space, spacing, coord_system, fft_type, fft_library, dont_optimize, nn_out, mpi_grp, need_partition, tp_enlarge, blocksize)
subroutine, public cube_end(cube)
subroutine, public cube_init_cube_map(cube, mesh)
type(debug_t), save, public debug
This module implements a calculator for the density and defines related functions.
type(lasers_t) function, pointer, public list_get_lasers(partners)
Fast Fourier Transform module. This module provides a single interface that works with different FFT ...
integer, parameter, public fft_complex
integer, parameter, public fftlib_nfft
integer, parameter, public fftlib_pnfft
integer, parameter, public fftlib_pfft
integer, parameter, public fftlib_fftw
subroutine, public cube_function_free_fs(cube, cf)
Deallocates the Fourier space grid.
subroutine, public cube_function_alloc_fs(cube, cf, force_alloc)
Allocates locally the Fourier space grid, if PFFT library is not used. Otherwise, it assigns the PFFT...
real(real64), parameter, public m_two
real(real64), parameter, public m_zero
real(real64), parameter, public m_pi
some mathematical constants
complex(real64), parameter, public m_z0
complex(real64), parameter, public m_zi
real(real64), parameter, public m_epsilon
real(real64), parameter, public p_c
Electron gyromagnetic ratio, see Phys. Rev. Lett. 130, 071801 (2023)
real(real64), parameter, public m_one
This module implements the underlying real-space grid.
This module defines classes and functions for interaction partners.
integer, parameter, public e_field_vector_potential
integer pure elemental function, public laser_kind(laser)
subroutine, public laser_field(laser, field, time)
Retrieves the value of either the electric or the magnetic field. If the laser is given by a scalar p...
System information (time, memory, sysname)
This module is intended to contain "only mathematical" functions and procedures.
subroutine, public mesh_cube_parallel_map_end(this)
subroutine, public mesh_cube_parallel_map_init(this, mesh, cube)
This module defines the meshes, which are used in Octopus.
pure subroutine, public mesh_r(mesh, ip, rr, origin, coords)
return the distance to the origin for a given grid point
subroutine, public messages_warning(no_lines, all_nodes, namespace)
subroutine, public messages_obsolete_variable(namespace, name, rep)
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
subroutine, public messages_input_error(namespace, var, details, row, column)
subroutine, public messages_experimental(name, namespace)
subroutine, public messages_info(no_lines, iunit, debug_only, stress, all_nodes, namespace)
type(mpi_grp_t), public mpi_world
this module contains the low-level part of the output system
subroutine, public parse_block_string(blk, l, c, res, convert_to_c)
integer function, public parse_block(namespace, name, blk, check_varinfo_)
subroutine, public pes_mask_calc(mask, namespace, space, mesh, st, kpoints, dt, iter)
integer, parameter, public pes_mask_mode_backaction
integer, parameter, public integrate_r
subroutine, public pes_mask_dump(mask, namespace, restart, st, ierr)
subroutine, public pes_mask_output_full_mapm(pesK, file, namespace, space, Lk, ll, how, mesh, pmesh)
subroutine pes_mask_volkov_time_evolution_wf(mask, space, mesh, kpoints, dt, iter, wf, ikpoint)
Propagate in time a wavefunction in momentum space with the Volkov Hamiltonian.
integer, parameter pw_map_pnfft
use PNFFT
subroutine, public pes_mask_cube_to_mesh(mask, cf, mf)
subroutine, public pes_mask_output_full_mapm_cut(pesK, file, namespace, ll, dim, pol, dir, integrate, pos, Lk, pmesh)
subroutine, public pes_mask_output(mask, gr, st, outp, namespace, space, file, ions, iter)
This routine is the main routine dedicated to the output of PES data.
integer, parameter pw_map_nfft
non-equispaced fft (NFFT)
subroutine pes_mask_apply_mask(mask, st)
integer, parameter, public integrate_kx
subroutine, public pes_mask_init(mask, namespace, space, mesh, box, st, ext_partners, abs_boundaries, max_iter, dt)
subroutine, public pes_mask_pmesh(namespace, dim, kpoints, ll, LG, pmesh, idxZero, krng, Lp)
subroutine, public pes_mask_generate_mask_function(mask, namespace, mesh, shape, R, mask_sq)
Generate the mask function on the cubic mesh containing the simulation box.
subroutine pes_mask_generate_mask(mask, namespace, mesh)
Generate the mask function on the cubic mesh containing the simulation box.
subroutine, public pes_mask_output_power_totalm(pesK, file, namespace, Lk, ll, dim, Emax, Estep, interpolate)
integer, parameter, public integrate_phi
subroutine pes_mask_generate_filter(mask, cutOff)
Generate the momentum-space filter.
subroutine, public pes_mask_output_ar_spherical_cut_m(pesK, file, namespace, Lk, ll, dim, dir, Emin, Emax, Estep)
subroutine, public pes_mask_load(mask, namespace, restart, st, ierr)
subroutine, public pes_mask_mesh_to_cube(mask, mf, cf)
subroutine, public pes_mask_x_to_k(mask, wfin, wfout)
Project the wavefunction on plane waves.
integer, parameter, public pes_mask_mode_passive
integer, parameter m_step
subroutine pes_mask_generate_lk(mask)
integer, parameter, public integrate_theta
subroutine, public pes_mask_output_ar_plane_m(pesK, file, namespace, Lk, ll, dim, dir, Emax, Estep)
integer, parameter pw_map_pfft
use PFFT
subroutine, public pes_mask_map_from_states(restart, st, ll, pesK, krng, Lp, istin)
subroutine, public pes_mask_end(mask)
integer, parameter, public integrate_ky
subroutine, public pes_mask_k_to_x(mask, wfin, wfout)
integer, parameter, public integrate_kz
subroutine, public pes_mask_read_info(dir, namespace, dim, Emax, Estep, ll, Lk, RR)
Read pes info.
subroutine, public pes_mask_output_ar_polar_m(pesK, file, namespace, Lk, ll, dim, dir, Emax, Estep)
subroutine, public profiling_out(label)
Increment out counter and sum up difference between entry and exit time.
subroutine, public profiling_in(label, exclude)
Increment in counter and save entry time.
This module is intended to contain "only mathematical" functions and procedures.
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
character(len=20) pure function, public units_abbrev(this)
This module defines the unit system, used for input and output.
type(unit_system_t), public units_out
type(unit_system_t), public units_inp
the units systems for reading and writing
Class implementing a parallelepiped box. Currently this is restricted to a rectangular cuboid (all th...
Class implementing a spherical box.
Describes mesh distribution to nodes.
The states_elec_t class contains all electronic wave functions.