32  use, 
intrinsic :: iso_fortran_env
 
  101    real(real64), 
allocatable :: dmatrix(:, :)
 
  102    complex(real64), 
allocatable :: zmatrix(:, :)
 
  109    type(states_elec_t),  
intent(inout) :: st
 
  110    class(space_t),       
intent(in)    :: space
 
  111    type(grid_t),         
intent(in)    :: gr
 
  112    type(lr_t),           
intent(inout) :: lr
 
  113    type(lr_t), 
optional, 
intent(inout) :: lr_m
 
  115    integer :: idir, ist, ispin, idim, ndim, np
 
  117    complex(real64), 
allocatable :: psi(:, :), gpsi(:,:), gdl_psi(:,:), gdl_psi_m(:,:)
 
  121    if (.not. 
allocated(lr%dl_j)) 
then 
  122      safe_allocate(lr%dl_j(1:gr%np, 1:space%dim, 1:st%d%nspin))
 
  128    safe_allocate(psi(1:gr%np_part, 1:ndim))
 
  129    safe_allocate(gpsi(1:np, 1:ndim))
 
  130    safe_allocate(gdl_psi(1:np, 1:ndim))
 
  131    if (
present(lr_m)) 
then 
  132      safe_allocate(gdl_psi_m(1:np, 1:ndim))
 
  137    do ispin = 1, st%d%nspin
 
  142        do idim = 1, st%d%dim
 
  147          if (
present(lr_m)) 
then 
  151            do idir = 1, space%dim
 
  153              lr%dl_j(1:np, idir, ispin) = lr%dl_j(1:np, idir, ispin) + (           &
 
  154                + conjg(psi(1:np, idim))*gdl_psi(1:np, idir)   &
 
  155                -       psi(1:np, idim)*conjg(gdl_psi_m(1:np, idir))  &
 
  156                + conjg(lr_m%zdl_psi(1:np, idim, ist, ispin)) *       gpsi(1:np, idir)   &
 
  157                -       lr%zdl_psi  (1:np, idim, ist, ispin)  * conjg(gpsi(1:np, idir))  &
 
  163            do idir = 1, space%dim
 
  165              lr%dl_j(1:np, idir, ispin) = lr%dl_j(1:np, idir, ispin) + (           &
 
  166                + conjg(psi(1:np, idim))*gdl_psi(1:np, idir)   &
 
  167                -       psi(1:np, idim)*conjg(gdl_psi(1:np, idir))  &
 
  168                + conjg(lr%zdl_psi(1:np, idim, ist, ispin)) *       gpsi(1:np, idir)   &
 
  169                -       lr%zdl_psi(1:np, idim, ist, ispin)  * conjg(gpsi(1:np, idir))  &
 
  180    safe_deallocate_a(psi)
 
  181    safe_deallocate_a(gpsi)
 
  182    safe_deallocate_a(gdl_psi)
 
  183    if (
present(lr_m)) 
then 
  184      safe_deallocate_a(gdl_psi_m)
 
  193  character(len=12) function freq2str(freq) 
result(str)
 
  194    real(real64), 
intent(in) :: freq
 
  201    write(str, 
'(f11.4)') freq
 
  204      if (freq >= 
m_zero .and. str(1:1) /= 
'0') str = 
"0"//trim(str)
 
  205      if (freq <  
m_zero .and. str(2:2) /= 
'0') str = 
"-0"//trim(str(2:))
 
  207    str = trim(adjustl(str))
 
  215  character(len=100) function em_rho_tag(freq, dir, dir2, ipert) 
result(str)
 
  216    real(real64),      
intent(in) :: freq
 
  217    integer,           
intent(in) :: dir
 
  218    integer, 
optional, 
intent(in) :: dir2
 
  219    integer, 
optional, 
intent(in) :: ipert
 
  221    character(len=12) :: str_tmp
 
  228    write(str, 
'(3a,i1)') 
'rho_', trim(str_tmp), 
'_', dir
 
  229    if (
present(dir2)) 
write(str, 
'(2a,i1)') trim(str), 
"_", dir2
 
  230    if (
present(ipert)) 
write(str, 
'(3a)') trim(str), 
"_", 
index2pert(ipert)
 
  238  character(len=100) function em_wfs_tag(idir, ifactor, idir2, ipert) 
result(str)
 
  239    integer,           
intent(in) :: idir
 
  240    integer,           
intent(in) :: ifactor
 
  241    integer, 
optional, 
intent(in) :: idir2
 
  242    integer, 
optional, 
intent(in) :: ipert
 
  246    write(str, 
'(3a,i1)') 
"wfs_", 
index2axis(idir), 
"_f", ifactor
 
  247    if (
present(idir2)) 
write(str, 
'(3a)') trim(str), 
"_", 
index2axis(idir2)
 
  248    if (
present(ipert)) 
write(str, 
'(3a)') trim(str), 
"_", 
index2pert(ipert)
 
  260  integer pure function 
magn_dir(dir, ind) result(dir_out)
 
  261    integer, 
intent(in) :: dir, ind
 
  291  character(len=2) pure function 
index2pert(ipert) result(ch)
 
  292    integer, 
intent(in) :: ipert
 
  311#include "em_resp_calc_inc.F90" 
  314#include "complex.F90" 
  315#include "em_resp_calc_inc.F90" 
This module implements batches of mesh functions.
This module implements a calculator for the density and defines related functions.
This module calculates the derivatives (gradients, Laplacians, etc.) of a function.
subroutine, public zderivatives_grad(der, ff, op_ff, ghost_update, set_bc, to_cartesian)
apply the gradient to a mesh function
subroutine, public dinhomog_kb_tot(sh, namespace, space, gr, st, hm, ions, idir, idir1, idir2, lr_k, lr_b, lr_k1, lr_k2, lr_kk1, lr_kk2, psi_out)
subroutine, public zlr_calc_magneto_optics_finite(sh, sh_mo, namespace, space, gr, st, hm, ions, nsigma, nfactor, lr_e, lr_b, chi)
subroutine, public dlr_calc_magnetization_periodic(namespace, space, mesh, st, hm, lr_k, magn)
integer pure function, public magn_dir(dir, ind)
subroutine, public dpost_orthogonalize(space, mesh, st, nfactor, nsigma, freq_factor, omega, eta, em_lr, kdotp_em_lr)
subroutine, public zlr_calc_magneto_optics_periodic(sh, sh2, namespace, space, gr, st, hm, ions, nsigma, nfactor, nfactor_ke, freq_factor, lr_e, lr_b, lr_k, lr_ke, lr_kb, frequency, zpol, zpol_kout)
subroutine, public zinhomog_k2_tot(namespace, space, gr, st, hm, ions, idir1, idir2, lr_k1, lr_k2, psi_out)
subroutine, public dlr_calc_beta(sh, namespace, space, gr, st, hm, xc, em_lr, dipole, beta, kdotp_lr, kdotp_em_lr, occ_response, dl_eig)
See (16) in X Andrade et al., J. Chem. Phys. 126, 184106 (2006) for finite systems and (10) in A Dal ...
subroutine, public dlr_calc_susceptibility(namespace, space, gr, st, hm, lr, nsigma, pert, chi_para, chi_dia)
subroutine, public lr_calc_current(st, space, gr, lr, lr_m)
subroutine, public dinhomog_ke_tot(sh, namespace, space, gr, st, hm, ions, idir, nsigma, lr_k, lr_e, lr_kk, psi_out)
subroutine, public dlr_calc_elf(st, space, gr, kpoints, lr, lr_m)
subroutine, public dem_resp_calc_eigenvalues(space, mesh, latt, st, dl_eig)
subroutine, public zinhomog_b(sh, namespace, space, gr, st, hm, ions, idir1, idir2, lr_k1, lr_k2, psi_out)
subroutine, public zcalc_polarizability_periodic(space, mesh, symm, st, em_lr, kdotp_lr, nsigma, zpol, ndir, zpol_k)
alpha_ij(w) = -e sum(m occ, k) [(<u_mk(0)|-id/dk_i)|u_mkj(1)(w)> + <u_mkj(1)(-w)|(-id/dk_i|u_mk(0)>)]
subroutine, public dinhomog_b(sh, namespace, space, gr, st, hm, ions, idir1, idir2, lr_k1, lr_k2, psi_out)
subroutine, public zlr_calc_elf(st, space, gr, kpoints, lr, lr_m)
character(len=2) pure function index2pert(ipert)
subroutine, public dcalc_polarizability_periodic(space, mesh, symm, st, em_lr, kdotp_lr, nsigma, zpol, ndir, zpol_k)
alpha_ij(w) = -e sum(m occ, k) [(<u_mk(0)|-id/dk_i)|u_mkj(1)(w)> + <u_mkj(1)(-w)|(-id/dk_i|u_mk(0)>)]
subroutine, public zpost_orthogonalize(space, mesh, st, nfactor, nsigma, freq_factor, omega, eta, em_lr, kdotp_em_lr)
character(len=100) function, public em_wfs_tag(idir, ifactor, idir2, ipert)
subroutine, public zlr_calc_magnetization_periodic(namespace, space, mesh, st, hm, lr_k, magn)
subroutine, public zinhomog_ke_tot(sh, namespace, space, gr, st, hm, ions, idir, nsigma, lr_k, lr_e, lr_kk, psi_out)
character(len=12) function, public freq2str(freq)
subroutine, public dlr_calc_susceptibility_periodic(namespace, space, symm, mesh, st, hm, lr_k, lr_b, lr_kk, lr_kb, magn)
subroutine, public zlr_calc_susceptibility_periodic(namespace, space, symm, mesh, st, hm, lr_k, lr_b, lr_kk, lr_kb, magn)
subroutine, public zlr_calc_susceptibility(namespace, space, gr, st, hm, lr, nsigma, pert, chi_para, chi_dia)
subroutine, public dlr_calc_magneto_optics_finite(sh, sh_mo, namespace, space, gr, st, hm, ions, nsigma, nfactor, lr_e, lr_b, chi)
character(len=100) function, public em_rho_tag(freq, dir, dir2, ipert)
subroutine, public dinhomog_k2_tot(namespace, space, gr, st, hm, ions, idir1, idir2, lr_k1, lr_k2, psi_out)
subroutine, public zlr_calc_beta(sh, namespace, space, gr, st, hm, xc, em_lr, dipole, beta, kdotp_lr, kdotp_em_lr, occ_response, dl_eig)
See (16) in X Andrade et al., J. Chem. Phys. 126, 184106 (2006) for finite systems and (10) in A Dal ...
subroutine, public zcalc_polarizability_finite(namespace, space, gr, st, hm, lr, nsigma, pert, zpol, doalldirs, ndir)
alpha_ij(w) = - sum(m occ) [<psi_m(0)|r_i|psi_mj(1)(w)> + <psi_mj(1)(-w)|r_i|psi_m(0)>] minus sign is...
subroutine, public dcalc_polarizability_finite(namespace, space, gr, st, hm, lr, nsigma, pert, zpol, doalldirs, ndir)
alpha_ij(w) = - sum(m occ) [<psi_m(0)|r_i|psi_mj(1)(w)> + <psi_mj(1)(-w)|r_i|psi_m(0)>] minus sign is...
subroutine, public dlr_calc_magneto_optics_periodic(sh, sh2, namespace, space, gr, st, hm, ions, nsigma, nfactor, nfactor_ke, freq_factor, lr_e, lr_b, lr_k, lr_ke, lr_kb, frequency, zpol, zpol_kout)
subroutine, public zinhomog_kb_tot(sh, namespace, space, gr, st, hm, ions, idir, idir1, idir2, lr_k, lr_b, lr_k1, lr_k2, lr_kk1, lr_kk2, psi_out)
subroutine, public zem_resp_calc_eigenvalues(space, mesh, latt, st, dl_eig)
real(real64), parameter, public m_two
real(real64), parameter, public m_zero
complex(real64), parameter, public m_zi
real(real64), parameter, public m_one
This module implements the underlying real-space grid.
This module defines functions over batches of mesh functions.
This module defines various routines, operating on mesh functions.
This module defines the meshes, which are used in Octopus.
This module handles spin dimensions of the states and the k-point distribution.
This module is intended to contain simple general-purpose utility functions and procedures.
character pure function, public index2axis(idir)