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),       
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.