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))
659 xx(1:space%dim) = mesh%x(ip, 1:space%dim)
661 do idim = 1, space%dim
665 mask%ufn(ip) = ufn_re
667 message(1) =
"Input: using user-defined mask function from expression:"
668 write(
message(2),
'(a,a)')
' R = ', trim(user_def_expr)
674 write(
message(1),
'(a,es10.3,3a)') &
677 write(
message(2),
'(a,es10.3,3a)') &
697 mask%filter_k = .false.
699 if (pcutoff >
m_zero)
then
701 mask%filter_k = .
true.
703 safe_allocate(mask%Mk(1:mask%ll(1),1:mask%ll(2),1:mask%ll(3)))
724 call parse_variable(namespace,
'PESMaskIncludePsiA', .false., mask%add_psia)
725 if (mask%add_psia)
then
726 message(1)=
"Input: Include contribution from Psi_A."
739 do idim = 1, space%dim
740 tmp = maxval(mask%Lk(1:mask%ll(idim),1:space%dim))**
m_two/
m_two
741 if (tmp > maxe) maxe = tmp
752 deltae = minval(mask%Lk(2,1:space%dim) - mask%Lk(1,1:space%dim))**
m_two/
m_two
759 safe_allocate(mask%vec_pot(0:max_iter,1:3))
763 if(
associated(lasers))
then
764 do il = 1, lasers%no_lasers
772 mask%vec_pot(it,:)= mask%vec_pot(it,:) - field(:)
776 write(
message(1),
'(a)')
'PESMask should work only with TDExternalFields = vector_potential.'
777 write(
message(2),
'(a)')
'Unless PESMaskMode = passive_mode the results are likely to be wrong. '
789 mask%pw_map_how ==
pw_map_nfft) mask%Lk = - mask%Lk
802 safe_deallocate_a(mask%k)
804 safe_deallocate_a(mask%vec_pot)
805 safe_deallocate_a(mask%mask_R)
806 safe_deallocate_a(mask%Lk)
809 if (mask%filter_k)
then
810 safe_deallocate_a(mask%Mk)
813 if (mask%mesh%parallel_in_domains .and. mask%cube%parallel_in_domains)
then
820 if (mask%user_def)
then
821 safe_deallocate_a(mask%ufn)
836 dim = mask%mesh%box%dim
838 do ii = 1, maxval(mask%ll(:))
839 mask%Lk(ii,1:dim)= matmul(mask%cube%latt%klattice_primitive(1:dim,1:dim), mask%cube%Lfs(ii,1:dim))
850 real(real64),
intent(in) ::cutoff
853 integer :: kx,ky,kz, power
854 real(real64) :: kk(3), ee, emax
860 emax = maxval(mask%Lk(:,:))**2 /
m_two
864 do kx = 1, mask%ll(1)
865 kk(1) = mask%Lk(kx,1)
866 do ky = 1, mask%ll(2)
867 kk(2) = mask%Lk(ky,2)
868 do kz = 1, mask%ll(3)
869 kk(3) = mask%Lk(kz,3)
871 ee = sum(kk(1:mask%mesh%box%dim)**2) /
m_two
873 if (ee > cutoff .and. ee < emax)
then
876 if (ee <= cutoff) mask%Mk(kx,ky,kz) =
m_one
895 type(
mesh_t),
intent(in) :: mesh
912 type(
mesh_t),
intent(in) :: mesh
913 integer,
intent(in) :: shape
914 real(real64),
intent(in) :: R(2)
915 real(real64),
optional,
intent(out) :: mask_sq(:,:,:)
918 real(real64) :: width
919 real(real64) :: xx(1:mesh%box%dim), rr, dd, ddv(1:mesh%box%dim), tmp(1:mesh%box%dim)
920 complex(real64),
allocatable :: mask_fn(:)
926 safe_allocate(mask_fn(1:mask%np))
935 call mesh_r(mesh, ip, rr, coords=xx)
937 if (mask%user_def)
then
938 dd = mask%ufn(ip) - r(1)
940 if (mask%ufn(ip) < r(2))
then
949 select type (box => mesh%box)
966 do dir=1, mesh%box%dim
967 if (ddv(dir) >
m_zero)
then
968 if (ddv(dir) < width)
then
974 mask_fn(ip) = mask_fn(ip) * tmp(dir)
976 mask_fn(ip) =
m_one - mask_fn(ip)
984 call mesh_r(mesh, ip, rr, coords=xx)
998 message(1)=
"PhotoElectronSpectrum = pes_mask. Unrecognized mask type."
1004 mask_fn(:) =
m_one - mask_fn(:)
1009 if (
present(mask_sq)) mask_sq = real(mask%cM%zRS, real64)
1013 safe_deallocate_a(mask_fn)
1025 integer :: ik, ist, idim
1026 complex(real64),
allocatable :: mmask(:), psi(:)
1029 safe_allocate(mmask(1:mask%mesh%np))
1030 safe_allocate(psi(1:mask%mesh%np))
1034 do ik = st%d%kpt%start, st%d%kpt%end
1035 do ist = st%st_start, st%st_end
1036 do idim = 1, st%d%dim
1038 psi(1:mask%mesh%np) = psi(1:mask%mesh%np) * mmask(1:mask%mesh%np)
1044 safe_deallocate_a(mmask)
1069 class(
space_t),
intent(in) :: space
1070 type(
mesh_t),
intent(in) :: mesh
1072 real(real64),
intent(in) :: dt
1073 integer,
intent(in) :: iter
1074 complex(real64),
intent(inout) :: wf(:,:,:)
1075 integer,
intent(in) :: ikpoint
1077 integer :: ix, iy, iz
1079 real(real64) :: kk(1:3), kpoint(1:3)
1084 if (space%is_periodic())
then
1085 kpoint(1:mesh%box%dim) = kpoints%get_point(ikpoint)
1088 do ix = 1, mask%ll(1)
1089 kk(1) = mask%Lk(ix + mask%fs_istart(1) - 1, 1)
1090 do iy = 1, mask%ll(2)
1091 kk(2) = mask%Lk(iy + mask%fs_istart(2) - 1, 2)
1092 do iz = 1, mask%ll(3)
1093 kk(3) = mask%Lk(iz + mask%fs_istart(3) - 1, 3)
1096 vec = sum(( kk(1:mesh%box%dim) &
1097 - kpoint(1:mesh%box%dim) &
1098 - mask%vec_pot(iter,1:mesh%box%dim)/
p_c)**2) /
m_two
1099 wf(ix, iy, iz) = wf(ix, iy, iz) *
exp(-
m_zi * dt * vec)
1128 complex(real64),
intent(inout) :: wfin(:,:,:)
1129 complex(real64),
intent(out) :: wfout(:,:,:)
1132 real(real64) :: norm
1140 select case (mask%pw_map_how)
1154 wfout = wfout * norm
1162 call zfft_forward(mask%cube%fft, cf_tmp%zRs, cf_tmp%fs)
1169 wfout = wfout * norm
1189 complex(real64),
intent(inout) :: wfin(:,:,:)
1190 complex(real64),
intent(out) :: wfout(:,:,:)
1193 real(real64) :: norm
1201 select case (mask%pw_map_how)
1208 wfout = wfout / norm
1223 wfout = wfout / norm
1245 complex(real64),
contiguous,
intent(in) :: mf(:)
1250 if (mask%cube%parallel_in_domains)
then
1263 complex(real64),
contiguous,
intent(out):: mf(:)
1268 if (mask%cube%parallel_in_domains)
then
1283 subroutine pes_mask_calc(mask, namespace, space, mesh, st, kpoints, dt, iter)
1286 class(
space_t),
intent(in) :: space
1287 type(
mesh_t),
intent(in) :: mesh
1290 real(real64),
intent(in) :: dt
1291 integer,
intent(in) :: iter
1293 integer :: idim, ist, ik
1295 complex(real64),
allocatable :: mf(:), psi(:)
1297 real(real64) :: time
1306 if (time > mask%start_time)
then
1313 select case (mask%mode)
1314 case (pes_mask_mode_mask)
1315 if (mask%back_action .eqv. .
true.)
then
1316 safe_allocate(mf(1:mask%mesh%np_part))
1320 safe_allocate(psi(1:mask%mesh%np_part))
1322 do ik = st%d%kpt%start, st%d%kpt%end
1323 do ist = st%st_start, st%st_end
1324 do idim = 1, st%d%dim
1328 cf1%zRs(:,:,:) =
m_z0
1329 cf2%zRS(:,:,:) =
m_z0
1330 cf1%Fs(:,:,:) =
m_z0
1331 cf2%Fs(:,:,:) =
m_z0
1335 select case (mask%mode)
1339 case (pes_mask_mode_mask)
1341 cf1%zRs = (
m_one - mask%cM%zRs) * cf1%zRs
1345 if (mask%filter_k)
then
1346 assert(
allocated(mask%Mk))
1347 cf2%Fs = cf2%Fs * mask%Mk
1351 cf1%Fs(:,:,:) = mask%k(:,:,:, idim, ist, ik)
1352 mask%k(:,:,:, idim, ist, ik) = cf2%Fs(:,:,:)
1354 st%d%get_kpoint_index(ik))
1356 mask%k(:,:,:, idim, ist, ik) = mask%k(:,:,:, idim, ist, ik)&
1359 if (mask%back_action .eqv. .
true.)
then
1364 psi(1:mask%mesh%np) = psi(1:mask%mesh%np) + mf(1:mask%mesh%np)
1368 cf2%zRs= (mask%cM%zRs) * cf2%zRs
1371 mask%k(:,:,:, idim, ist, ik) = mask%k(:,:,:, idim, ist, ik) - cf1%Fs
1382 cf1%zRs = (
m_one-mask%cM%zRs) * cf1%zRs
1385 mask%k(:,:,:, idim, ist, ik) = cf2%Fs(:,:,:)
1390 write(
message(1),
'(a)')
"PhotoElectroSpectrum = pes_mask. Unrecognized calculation mode."
1400 safe_deallocate_a(psi)
1407 select case (mask%mode)
1408 case (pes_mask_mode_mask)
1409 if (mask%back_action .eqv. .
true.)
then
1410 safe_deallocate_a(mf)
1427#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)
The next two subroutines convert a function between the normal mesh and the cube.
subroutine, public zcube_to_mesh_parallel(cube, cf, mesh, mf, map)
subroutine, public zcube_to_mesh(cube, cf, mesh, mf)
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...
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)
subroutine, public messages_info(no_lines, iunit, verbose_limit, stress, all_nodes, namespace)
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)
type(mpi_grp_t), public mpi_world
this module contains the output system
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.