52#if defined(HAVE_NETCDF)
100 complex(real64),
allocatable,
public :: k(:,:,:,:,:,:)
107 integer :: fs_n_global(1:3)
109 integer :: fs_istart(1:3)
111 real(real64) :: spacing(3)
113 type(mesh_t),
pointer,
public :: mesh => null()
116 real(real64),
allocatable,
public :: vec_pot(:,:)
118 real(real64),
allocatable,
public :: Mk(:,:,:)
119 type(cube_function_t) :: cM
120 real(real64),
allocatable,
public :: mask_R(:)
122 real(real64),
allocatable :: ufn(:)
125 real(real64),
allocatable,
public :: Lk(:,:)
127 real(real64) :: enlarge(3)
128 real(real64) :: enlarge_2p(3)
130 real(real64) :: start_time
131 real(real64) :: energyMax
132 real(real64) :: energyStep
135 logical :: back_action
140 integer :: pw_map_how
144 type(mesh_cube_parallel_map_t) :: mesh_cube_map
150 integer,
public,
parameter :: &
151 PES_MASK_MODE_MASK = 1, &
155 integer,
parameter :: &
156 PW_MAP_FFT = 3, & !< FFT - normally from fftw3
161 integer,
parameter :: &
166 integer,
parameter :: &
170 integer,
public,
parameter :: &
171 INTEGRATE_NONE = -1, &
184 subroutine pes_mask_init(mask, namespace, space, mesh, box, st, ext_partners, abs_boundaries, max_iter,dt)
185 type(pes_mask_t),
intent(out) :: mask
186 type(namespace_t),
intent(in) :: namespace
187 class(space_t),
intent(in) :: space
188 type(mesh_t),
target,
intent(in) :: mesh
189 class(box_t),
intent(in) :: box
190 type(states_elec_t),
intent(in) :: st
191 type(partner_list_t),
intent(in) :: ext_partners
192 type(absorbing_boundaries_t),
intent(in) :: abs_boundaries
193 integer,
intent(in) :: max_iter
194 real(real64),
intent(in) :: dt
198 integer :: il, it, ll(3)
199 real(real64) :: field(3)
200 real(real64) :: deltae, maxe, pcutoff, tmp
201 integer :: defaultmask,k1,k2,st1,st2
202 integer :: cols_pesmask_block, idim, ip
204 real(real64) :: xx(space%dim), r
205 real(real64) :: ufn_re, ufn_im
206 character(len=1024) :: user_def_expr
213 if (space%is_periodic())
then
218 write(
message(1),
'(a,i1,a)')
'Info: Calculating PES using mask technique.'
222 select type (box => box)
225 if (.not. space%is_periodic())
then
226 message(1) =
'PhotoElectronSpectrum = pes_mask usually requires BoxShape = sphere.'
227 message(2) =
'Unless you know what you are doing modify this parameter and rerun.'
233 message(1) =
'PhotoElectronSpectrum = pes_mask already contains absorbing boundaries.'
234 message(2) =
'Set AbsorbingBoundaries = no and rerun.'
258 call parse_variable(namespace,
'PESMaskMode', pes_mask_mode_mask, mask%mode)
262 select case (mask%mode)
265 mask%back_action = .false.
269 mask%back_action = .
true.
270 mask%mode = pes_mask_mode_mask
273 mask%back_action = .false.
314 call parse_variable(namespace,
'PESMaskPlaneWaveProjection', pw_map_fft, mask%pw_map_how)
322 if (mask%pw_map_how ==
pw_map_pfft .and. (.not. mask%mesh%parallel_in_domains))
then
323 message(1)=
"Trying to use PESMaskPlaneWaveProjection = pfft_map with no domain parallelization."
324 message(2)=
"Projection method changed to more efficient fft_map."
326 mask%pw_map_how = pw_map_fft
329 if (mask%pw_map_how ==
pw_map_pnfft .and. (.not. mask%mesh%parallel_in_domains))
then
330 message(1)=
"Trying to use PESMaskPlaneWaveProjection = pnfft_map with no domain parallelization."
331 message(2)=
"Projection method changed to more efficient nfft_map."
336#if !defined(HAVE_NFFT)
338 message(1) =
"PESMaskPlaneWaveProjection = nfft_map requires NFFT but that library was not linked."
343#if !defined(HAVE_PFFT)
345 message(1) =
"PESMaskPlaneWaveProjection = pfft_map requires PFFT but that library was not linked."
350#if !defined(HAVE_PNFFT)
352 message(1) =
"PESMaskPlaneWaveProjection = pnfft_map requires PNFFT but that library was not linked."
372 mask%enlarge(space%periodic_dim + 1:space%dim) = mask%enlarge(1)
373 mask%enlarge(1:space%periodic_dim) =
m_one
375 if (space%is_periodic())
then
382 if (mask%enlarge(1) <
m_one)
then
383 message(1) =
"PESMaskEnlargeFactor must be bigger than one."
404 mask%enlarge_2p =
m_one
410 mask%enlarge_2p(space%periodic_dim + 1:space%dim) = mask%enlarge_2p(1)
411 mask%enlarge_2p(1:space%periodic_dim) =
m_one
413 if (space%is_periodic())
then
420 message(1) =
"PESMask2PEnlargeFactor requires PESMaskPlaneWaveProjection = nfft_map"
421 message(2) =
"or pnfft_map in order to run properly."
426 if (mask%enlarge_2p(1) <
m_one)
then
427 message(1) =
"PESMask2PEnlargeFactor must be bigger than one."
435 mask%spacing = -
m_one
437 mask%spacing(1:space%dim) = mesh%spacing(1:space%dim)
438 mask%ll(1:space%dim) = mesh%idx%ll(1:space%dim)
441 mask%ll(1:space%dim) = int(mask%ll(1:space%dim) * mask%enlarge(1:space%dim))
443 mask%np = mesh%np_part
445 select case (mask%pw_map_how)
448 assert(mask%mesh%parallel_in_domains)
449 call cube_init(mask%cube, mask%ll, namespace, space, &
450 mesh%spacing, mesh%coord_system, &
452 mpi_grp = mask%mesh%mpi_grp, need_partition=.
true.)
463 mask%ll(1:3) = mask%cube%rs_n(1:3)
465 mask%fft = mask%cube%fft
466 if (mask%mesh%parallel_in_domains .and. mask%cube%parallel_in_domains)
then
471 call cube_init(mask%cube, mask%ll, namespace, space, &
472 mesh%spacing, mesh%coord_system, &
477 mask%fft = mask%cube%fft
484 if (.not.
is_close(mask%enlarge_2p(1),
m_one)) mask%ll(1:space%dim) = mask%ll(1:space%dim) + 2
486 call cube_init(mask%cube, mask%ll, namespace, space, &
487 mesh%spacing, mesh%coord_system, &
489 nn_out = ll, tp_enlarge = mask%enlarge_2p)
493 mask%fft = mask%cube%fft
498 if (.not.
is_close(mask%enlarge_2p(1),
m_one)) mask%ll(1:space%dim) = mask%ll(1:space%dim) + 2
500 call cube_init(mask%cube, mask%ll, namespace, space, &
501 mask%mesh%spacing, mask%mesh%coord_system, &
503 nn_out = ll, tp_enlarge = mask%enlarge_2p, &
504 mpi_grp = mask%mesh%mpi_grp, need_partition=.
true.)
507 mask%ll(1:3) = mask%cube%fs_n(1:3)
509 mask%fft = mask%cube%fft
510 if (mask%mesh%parallel_in_domains .and. mask%cube%parallel_in_domains)
then
516 write(
message(1),
'(a)')
"PESMaskPlaneWaveProjection unrecognized option."
524 mask%fs_istart = mask%cube%rs_istart
525 mask%fs_n = mask%cube%rs_n
526 mask%fs_n_global = mask%cube%rs_n_global
528 mask%fs_istart = mask%cube%fs_istart
529 mask%fs_n = mask%cube%fs_n
530 mask%fs_n_global = mask%cube%fs_n_global
536 safe_allocate(mask%Lk(1:maxval(mask%fs_n_global(:)),1:3))
543 safe_allocate(mask%k(1:mask%ll(1),1:mask%ll(2),1:mask%ll(3),1:st%d%dim,st1:st2,k1:k2))
556 safe_allocate(mask%mask_R(1:2))
571 call parse_variable(namespace,
'PESMaskShape', defaultmask, mask%shape)
593 cols_pesmask_block = 0
594 if (
parse_block(namespace,
'PESMaskSize', blk) == 0)
then
598 mask%user_def = .false.
600 select case (cols_pesmask_block)
602 select type (box => box)
604 mask%mask_R(1) = box%radius/
m_two
605 mask%mask_R(2) = box%radius
606 message(1) =
"Input: PESMaskSize R(1) and R(2) not specified. Using default values for spherical mask."
608 mask%mask_R(1) = box%half_length(1)/
m_two
609 mask%mask_R(2) = box%half_length(1)
610 message(1) =
"Input: PESMaskSize R(1) and R(2) not specified. Using default values for cubic mask."
615 select type (box => box)
617 mask%mask_R(2) = box%radius
618 message(1) =
"Input: PESMaskSize R(2) not specified. Using default value for spherical mask."
620 mask%mask_R(2) = box%half_length(1)
621 message(1) =
"Input: PESMaskSize R(2) not specified. Using default value for cubic mask."
628 select type (box => box)
630 if (mask%mask_R(2) > box%radius) mask%mask_R(2) = box%radius
631 message(1) =
"Info: using spherical mask."
633 if (mask%mask_R(2) > box%half_length(1)) mask%mask_R(2) = box%half_length(1)
634 message(1) =
"Info: using cubic mask."
639 mask%user_def = .
true.
640 safe_allocate(mask%ufn(1:mask%np))
646 xx(1:space%dim) = mesh%x(1:space%dim, ip)
648 do idim = 1, space%dim
652 mask%ufn(ip) = ufn_re
654 message(1) =
"Input: using user-defined mask function from expression:"
655 write(
message(2),
'(a,a)')
' R = ', trim(user_def_expr)
661 write(
message(1),
'(a,es10.3,3a)') &
664 write(
message(2),
'(a,es10.3,3a)') &
684 mask%filter_k = .false.
686 if (pcutoff >
m_zero)
then
688 mask%filter_k = .
true.
690 safe_allocate(mask%Mk(1:mask%ll(1),1:mask%ll(2),1:mask%ll(3)))
711 call parse_variable(namespace,
'PESMaskIncludePsiA', .false., mask%add_psia)
712 if (mask%add_psia)
then
713 message(1)=
"Input: Include contribution from Psi_A."
726 do idim = 1, space%dim
727 tmp = maxval(mask%Lk(1:mask%ll(idim),1:space%dim))**2/
m_two
728 if (tmp > maxe) maxe = tmp
739 deltae = minval(mask%Lk(2,1:space%dim) - mask%Lk(1,1:space%dim))**2/
m_two
746 safe_allocate(mask%vec_pot(0:max_iter,1:3))
750 if(
associated(lasers))
then
751 do il = 1, lasers%no_lasers
759 mask%vec_pot(it,:)= mask%vec_pot(it,:) - field(:)
763 write(
message(1),
'(a)')
'PESMask should work only with TDExternalFields = vector_potential.'
764 write(
message(2),
'(a)')
'Unless PESMaskMode = passive_mode the results are likely to be wrong. '
776 mask%pw_map_how ==
pw_map_nfft) mask%Lk = - mask%Lk
789 safe_deallocate_a(mask%k)
791 safe_deallocate_a(mask%vec_pot)
792 safe_deallocate_a(mask%mask_R)
793 safe_deallocate_a(mask%Lk)
796 if (mask%filter_k)
then
797 safe_deallocate_a(mask%Mk)
800 if (mask%mesh%parallel_in_domains .and. mask%cube%parallel_in_domains)
then
807 if (mask%user_def)
then
808 safe_deallocate_a(mask%ufn)
823 dim = mask%mesh%box%dim
825 do ii = 1, maxval(mask%ll(:))
826 mask%Lk(ii,1:dim)= matmul(mask%cube%latt%klattice_primitive(1:dim,1:dim), mask%cube%Lfs(ii,1:dim))
837 real(real64),
intent(in) ::cutoff
840 integer :: kx,ky,kz, power
841 real(real64) :: kk(3), ee, emax
847 emax = maxval(mask%Lk(:,:))**2 /
m_two
851 do kx = 1, mask%ll(1)
852 kk(1) = mask%Lk(kx,1)
853 do ky = 1, mask%ll(2)
854 kk(2) = mask%Lk(ky,2)
855 do kz = 1, mask%ll(3)
856 kk(3) = mask%Lk(kz,3)
858 ee = sum(kk(1:mask%mesh%box%dim)**2) /
m_two
860 if (ee > cutoff .and. ee < emax)
then
863 if (ee <= cutoff) mask%Mk(kx,ky,kz) =
m_one
882 type(
mesh_t),
intent(in) :: mesh
899 type(
mesh_t),
intent(in) :: mesh
900 integer,
intent(in) :: shape
901 real(real64),
intent(in) :: r(2)
902 real(real64),
optional,
intent(out) :: mask_sq(:,:,:)
905 real(real64) :: width
906 real(real64) :: xx(1:mesh%box%dim), rr, dd, ddv(1:mesh%box%dim), tmp(1:mesh%box%dim)
907 complex(real64),
allocatable :: mask_fn(:)
911 assert(mask%cM%batch_size == 1)
914 safe_allocate(mask_fn(1:mask%np))
923 call mesh_r(mesh, ip, rr, coords=xx)
925 if (mask%user_def)
then
926 dd = mask%ufn(ip) - r(1)
928 if (mask%ufn(ip) < r(2))
then
937 select type (box => mesh%box)
954 do dir=1, mesh%box%dim
955 if (ddv(dir) >
m_zero)
then
956 if (ddv(dir) < width)
then
962 mask_fn(ip) = mask_fn(ip) * tmp(dir)
964 mask_fn(ip) =
m_one - mask_fn(ip)
972 call mesh_r(mesh, ip, rr, coords=xx)
986 message(1)=
"PhotoElectronSpectrum = pes_mask. Unrecognized mask type."
990 mask_fn(:) =
m_one - mask_fn(:)
993 if (
present(mask_sq)) mask_sq = real(mask%cM%zRS(1, :, :, :), real64)
995 safe_deallocate_a(mask_fn)
1007 integer :: ik, ist, idim, ip
1008 complex(real64),
allocatable :: mmask(:), psi(:)
1011 safe_allocate(mmask(1:mask%mesh%np))
1012 safe_allocate(psi(1:mask%mesh%np))
1016 do ik = st%d%kpt%start, st%d%kpt%end
1017 do ist = st%st_start, st%st_end
1018 do idim = 1, st%d%dim
1021 do ip = 1, mask%mesh%np
1022 psi(ip) = psi(ip) * mmask(ip)
1030 safe_deallocate_a(mmask)
1055 class(
space_t),
intent(in) :: space
1056 type(
mesh_t),
intent(in) :: mesh
1058 real(real64),
intent(in) :: dt
1059 integer,
intent(in) :: iter
1060 complex(real64),
intent(inout) :: wf(:,:,:)
1061 integer,
intent(in) :: ikpoint
1063 integer :: ix, iy, iz
1065 real(real64) :: kk(1:3), kpoint(1:3)
1070 if (space%is_periodic())
then
1071 kpoint(1:mesh%box%dim) = kpoints%get_point(ikpoint)
1074 do ix = 1, mask%ll(1)
1075 kk(1) = mask%Lk(ix + mask%fs_istart(1) - 1, 1)
1076 do iy = 1, mask%ll(2)
1077 kk(2) = mask%Lk(iy + mask%fs_istart(2) - 1, 2)
1078 do iz = 1, mask%ll(3)
1079 kk(3) = mask%Lk(iz + mask%fs_istart(3) - 1, 3)
1082 vec = sum(( kk(1:mesh%box%dim) &
1083 - kpoint(1:mesh%box%dim) &
1084 - mask%vec_pot(iter,1:mesh%box%dim)/
p_c)**2) /
m_two
1085 wf(ix, iy, iz) = wf(ix, iy, iz) *
exp(-
m_zi * dt * vec)
1114 complex(real64),
intent(inout) :: wfin(:,:,:)
1115 complex(real64),
intent(out) :: wfout(:,:,:)
1118 real(real64) :: norm
1124 assert(cf_tmp%batch_size == 1)
1128 select case (mask%pw_map_how)
1141 wfout = wfout * norm
1146 cf_tmp%zRs(1, :, :, :) = wfin
1147 call zfft_forward(mask%cube%fft, cf_tmp%zRs, cf_tmp%fs)
1148 wfout = cf_tmp%fs(1, :, :, :)
1154 wfout = wfout * norm
1168 complex(real64),
intent(inout) :: wfin(:,:,:)
1169 complex(real64),
intent(out) :: wfout(:,:,:)
1172 real(real64) :: norm
1178 assert(cf_tmp%batch_size == 1)
1182 select case (mask%pw_map_how)
1189 wfout = wfout / norm
1194 cf_tmp%fs(1, :, :, :) = wfin
1196 wfout = cf_tmp%zRs(1, :, :, :)
1202 wfout = wfout / norm
1217 complex(real64),
contiguous,
intent(in) :: mf(:)
1222 if (mask%cube%parallel_in_domains)
then
1235 complex(real64),
contiguous,
intent(out):: mf(:)
1240 if (mask%cube%parallel_in_domains)
then
1255 subroutine pes_mask_calc(mask, namespace, space, mesh, st, kpoints, dt, iter)
1258 class(
space_t),
intent(in) :: space
1259 type(
mesh_t),
intent(in) :: mesh
1262 real(real64),
intent(in) :: dt
1263 integer,
intent(in) :: iter
1265 integer :: idim, ist, ik
1267 complex(real64),
allocatable :: mf(:), psi(:)
1269 real(real64) :: time
1278 if (time > mask%start_time)
then
1285 select case (mask%mode)
1286 case (pes_mask_mode_mask)
1287 if (mask%back_action .eqv. .
true.)
then
1288 safe_allocate(mf(1:mask%mesh%np_part))
1292 safe_allocate(psi(1:mask%mesh%np_part))
1294 do ik = st%d%kpt%start, st%d%kpt%end
1295 do ist = st%st_start, st%st_end
1296 do idim = 1, st%d%dim
1307 select case (mask%mode)
1311 case (pes_mask_mode_mask)
1313 cf1%zRs = (
m_one - mask%cM%zRs) * cf1%zRs
1316 if (mask%filter_k)
then
1317 assert(
allocated(mask%Mk))
1318 cf2%Fs(1, :, :, :) = cf2%Fs(1, :, :, :) * mask%Mk
1321 cf1%Fs(1, :,:,:) = mask%k(:,:,:, idim, ist, ik)
1322 mask%k(:,:,:, idim, ist, ik) = cf2%Fs(1, :,:,:)
1324 call pes_mask_volkov_time_evolution_wf(mask, space, mesh, kpoints, dt,iter-1, cf1%Fs(1, :, :, :), &
1325 st%d%get_kpoint_index(ik))
1328 mask%k(:,:,:, idim, ist, ik) = mask%k(:,:,:, idim, ist, ik) + cf1%Fs(1, :,:,:)
1330 if (mask%back_action .eqv. .
true.)
then
1338 cf2%zRs= (mask%cM%zRs) * cf2%zRs
1341 mask%k(:,:,:, idim, ist, ik) = mask%k(:,:,:, idim, ist, ik) - cf1%Fs(1, :, :, :)
1348 cf1%zRs = (
m_one-mask%cM%zRs) * cf1%zRs
1350 mask%k(:,:,:, idim, ist, ik) = cf2%Fs(1, :,:,:)
1354 write(
message(1),
'(a)')
"PhotoElectroSpectrum = pes_mask. Unrecognized calculation mode."
1363 safe_deallocate_a(psi)
1370 select case (mask%mode)
1371 case (pes_mask_mode_mask)
1372 if (mask%back_action .eqv. .
true.)
then
1373 safe_deallocate_a(mf)
1386#include "pes_mask_out_inc.F90"
constant times a vector plus a vector
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 zcube_to_mesh_parallel(cube, cf, mesh, mf, map)
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_end(cube)
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, batch_size, batch_axis)
subroutine, public cube_init_cube_map(cube, mesh)
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)
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.