66    real(real64),   
allocatable, 
public :: vpx(:)
 
   67    real(real64),         
public :: ex
 
   68    type(photon_mode_t)          :: pt
 
   69    real(real64)                 :: pxlda_kappa
 
   72    integer                      :: energy_method = 0
 
   73    logical                      :: lcorrelations = .false.    
 
   74    logical                      :: llamb_re_mass = .false.    
 
   75    logical                      :: llamb_freespace =.false.   
 
   76    real(real64)                 :: lamb_omega
 
   78    logical,              
public :: lpfmf = .false. 
 
   79    real(real64),   
allocatable, 
public :: mf_vector_potential(:)
 
   80    real(real64),   
allocatable         :: jp_proj_eo(:,:)
 
   96  integer, 
private, 
parameter ::  &
 
   97    XC_PHOTONS_NONE    = 0,       &
 
  106  subroutine xc_photons_init(xc_photons, namespace, xc_photon, space, gr, st)
 
  107    class(xc_photons_t),     
intent(out)   :: xc_photons
 
  108    type(namespace_t),       
intent(in)    :: namespace
 
  109    integer,                 
intent(in)    :: xc_photon
 
  110    class(space_t),          
intent(in)    :: space
 
  111    type(grid_t),            
intent(in)    :: gr
 
  112    type(states_elec_t),     
intent(in)    :: st
 
  116    xc_photons%lpfmf = .false.
 
  123    select case(xc_photon)
 
  124    case(option__xcphotonfunctional__photon_x_lda)
 
  126      xc_photons%lcorrelations = .false.
 
  127    case(option__xcphotonfunctional__photon_xc_lda)
 
  129      xc_photons%lcorrelations = .
true.
 
  130    case(option__xcphotonfunctional__photon_x_wfn)
 
  132      xc_photons%lcorrelations = .false.
 
  133    case(option__xcphotonfunctional__photon_xc_wfn)
 
  135      xc_photons%lcorrelations = .
true.
 
  137      xc_photons%method    = xc_photons_none
 
  185    call parse_variable(namespace, 
'PhotonXCEnergyMethod', 1, xc_photons%energy_method)
 
  187    if( xc_photons%method == 
xc_photons_wfs .and. xc_photons%energy_method == option__photonxcenergymethod__lda ) 
then 
  188      message(1) = 
"Calculating the electron-photon energy from the LDA expression" 
  189      message(2) = 
"is not implemented for wave function based electron-photon functionals" 
  194    if (xc_photons%lcorrelations) 
then 
  207        message(1) = 
"Defining PhotonXCEtaC is required for photon functionals containing correlation." 
  213      xc_photons%eta_c = 
m_one 
  218    safe_allocate(xc_photons%vpx(1:gr%np_part))
 
  230    call parse_variable(namespace, 
'PhotonXCLambShift', .false., xc_photons%llamb_freespace)
 
  233    if (xc_photons%llamb_freespace) 
then 
  253      call parse_variable(namespace, 
'PhotonXCLambShiftRenormalizeMass', .false., xc_photons%llamb_re_mass)
 
  272    safe_deallocate_a(this%vpx)
 
  274    if (
allocated(this%mf_vector_potential)) 
then 
  275      safe_deallocate_a(this%mf_vector_potential)
 
  277    if (
allocated(this%jp_proj_eo)) 
then 
  278      safe_deallocate_a(this%jp_proj_eo)
 
  290  subroutine xc_photons_v_ks(xc_photons, namespace, total_density, density, gr, space, psolver, ep, st)
 
  293    real(real64), 
pointer, 
contiguous,       
intent(in)    :: total_density(:)
 
  294    real(real64), 
allocatable,               
intent(in)    :: density(:, :)
 
  295    class(
grid_t),                    
intent(in)    :: gr
 
  296    type(
space_t),                    
intent(in)    :: space
 
  298    type(
epot_t),                     
intent(in)    :: ep
 
  305    xc_photons%lpfmf = xc_photons%method > 0
 
  310    if ( .not. 
allocated(xc_photons%mf_vector_potential) ) 
then 
  311      safe_allocate(xc_photons%mf_vector_potential(1:space%dim))
 
  312      xc_photons%mf_vector_potential = 
m_zero 
  314    if ( .not. 
allocated(xc_photons%jp_proj_eo)) 
then 
  315      safe_allocate(xc_photons%jp_proj_eo(1:xc_photons%pt%nmodes,1:2))
 
  316      xc_photons%jp_proj_eo = 
m_zero 
  320    select case(xc_photons%method)
 
  325    case(xc_photons_none) 
 
  333    if (.not. xc_photons%llamb_freespace) 
then 
  335      do ia = 1, xc_photons%pt%nmodes
 
  336        xc_photons%ex = xc_photons%ex + 0.5_real64 * (xc_photons%pt%dressed_omega(ia)-xc_photons%pt%omega(ia))
 
  382    real(real64), 
pointer, 
contiguous,       
intent(in)    :: total_density(:)
 
  384    type(
space_t),                    
intent(in)    :: space
 
  387    integer :: ia, ip, iter
 
  388    real(real64) :: unit_volume, r, res,  presum, prefact
 
  389    real(real64) :: xx(space%dim), prefactor_lamb
 
  390    real(real64), 
allocatable :: prefactor(:)
 
  391    real(real64), 
allocatable :: rho_aux(:)
 
  392    real(real64), 
allocatable :: grad_rho_aux(:,:)
 
  393    real(real64), 
allocatable :: px_source(:)
 
  394    real(real64), 
allocatable :: tmp1(:)
 
  395    real(real64), 
allocatable :: tmp2(:,:)
 
  396    real(real64), 
allocatable :: tmp3(:)
 
  397    real(real64), 
allocatable :: grad_vpx(:,:)
 
  398    real(real64), 
allocatable :: epsgrad_epsgrad_rho_aux(:)
 
  399    real(real64), 
allocatable :: epx_force_module(:)
 
  401    real(real64), 
parameter :: threshold = 1e-7_real64
 
  405    if (xc_photons%energy_method == 2 .and. xc_photons%pt%n_electrons >1) 
then 
  412    safe_allocate(prefactor(1:xc_photons%pt%nmodes))
 
  415    safe_allocate(rho_aux(1:gr%np_part))
 
  416    safe_allocate(grad_rho_aux(1:gr%np, 1:xc_photons%pt%dim))
 
  417    safe_allocate(px_source(1:gr%np_part))
 
  418    safe_allocate(tmp1(1:gr%np_part))
 
  419    safe_allocate(tmp2(1:gr%np, 1:xc_photons%pt%dim))
 
  420    safe_allocate(tmp3(1:gr%np_part))
 
  421    safe_allocate(grad_vpx(1:gr%np, 1:xc_photons%pt%dim))
 
  423    safe_allocate(epx_force_module(1:gr%np_part))
 
  426    select case(xc_photons%pt%dim)
 
  439      rho_aux(ip) = ( abs(total_density(ip))/(
m_two*unit_volume) )**(
m_two/(xc_photons%pt%dim*
m_one))
 
  446    if (xc_photons%llamb_freespace) 
then 
  451      prefactor_lamb = -(8.0_real64*
m_pi*
m_third) * xc_photons%lamb_omega / (
p_c**3)
 
  455        xc_photons%vpx(ip) = prefactor_lamb*rho_aux(ip)
 
  461      do ia = 1, xc_photons%pt%nmodes
 
  462        prefactor(ia) = -
m_two*(
m_pi * xc_photons%pt%dressed_lambda(ia) / xc_photons%pt%dressed_omega(ia))**2
 
  465      select case(xc_photons%pt%dim)
 
  469        do ia = 1, xc_photons%pt%nmodes
 
  472            px_source(ip) = px_source(ip) +  prefactor(ia)
 
  479          xc_photons%vpx(ip) = px_source(ip)*rho_aux(ip)
 
  488        write(
message(1),
'(a,i6,a)')  
"Info: CG converged with ", iter, 
" iterations." 
  489        write(
message(2),
'(a,e14.6)')    
"Info: The residue is ", res
 
  500        call dpoisson_solve(psolver, namespace, xc_photons%vpx(:), px_source)
 
  508    call lalg_scal(gr%np, (xc_photons%eta_c * xc_photons%pxlda_kappa), xc_photons%vpx)
 
  512    select case (xc_photons%energy_method)
 
  515      do ia = 1, xc_photons%pt%nmodes
 
  520          epx_force_module(ip) = -prefactor(ia)*
m_two*abs(total_density(ip))*rho_aux(ip)/(xc_photons%pt%dim*
m_one+
m_two)
 
  525        call lalg_gemv(gr%np, xc_photons%pt%dim, 
m_one, tmp2, xc_photons%pt%dressed_pol(1:xc_photons%pt%dim, ia), 
m_zero, tmp1)
 
  529          call mesh_r(gr, ip, r, coords=xx)
 
  530          tmp3(ip) = tmp1(ip)*dot_product(xx(1:xc_photons%pt%dim), xc_photons%pt%dressed_pol(1:xc_photons%pt%dim, ia))
 
  537      xc_photons%ex = xc_photons%eta_c * xc_photons%pxlda_kappa * xc_photons%ex
 
  541      rho_aux(1:gr%np) = 
sqrt(abs( total_density(1:gr%np)))
 
  543      safe_allocate(epsgrad_epsgrad_rho_aux(1:gr%np))
 
  547      do ia = 1, xc_photons%pt%nmodes
 
  548        prefact = (xc_photons%pt%dressed_lambda(ia)**2) / (
m_two*xc_photons%pt%dressed_omega(ia)**2)
 
  550        call lalg_gemv(gr%np, xc_photons%pt%dim, 
m_one, grad_rho_aux, xc_photons%pt%dressed_pol(:, ia), 
m_zero, tmp1)
 
  552        call lalg_gemv(gr%np, xc_photons%pt%dim, 
m_one, tmp2, xc_photons%pt%dressed_pol(1:xc_photons%pt%dim, ia), 
m_zero, tmp1)
 
  556          epsgrad_epsgrad_rho_aux(ip) = epsgrad_epsgrad_rho_aux(ip) + prefact*tmp1(ip)
 
  562      xc_photons%ex = xc_photons%eta_c * 
dmf_dotp(gr, rho_aux(1:gr%np), epsgrad_epsgrad_rho_aux(1:gr%np))
 
  564      safe_deallocate_a(epsgrad_epsgrad_rho_aux)
 
  570        tmp1(ip) = abs( total_density(ip))**((
m_one*xc_photons%pt%dim+
m_two)/(xc_photons%pt%dim*
m_one))
 
  576      do ia = 1, xc_photons%pt%nmodes
 
  577        presum = presum + prefactor(ia)
 
  580      presum = presum * xc_photons%eta_c * xc_photons%pxlda_kappa
 
  582      xc_photons%ex = xc_photons%eta_c * xc_photons%pxlda_kappa * presum * 
dmf_integrate(gr, tmp1)
 
  586    safe_deallocate_a(prefactor)
 
  587    safe_deallocate_a(rho_aux)
 
  588    safe_deallocate_a(grad_rho_aux)
 
  589    safe_deallocate_a(px_source)
 
  590    safe_deallocate_a(tmp1)
 
  591    safe_deallocate_a(tmp2)
 
  592    safe_deallocate_a(tmp3)
 
  593    safe_deallocate_a(grad_vpx)
 
  594    safe_deallocate_a(epx_force_module)
 
  602      real(real64),     
intent(in)    :: x(:)
 
  603      real(real64), 
contiguous,
intent(out)   :: Hx(:)
 
  605      real(real64), 
allocatable :: tmpx(:)
 
  607      safe_allocate(tmpx(1:gr%np_part))
 
  610      safe_deallocate_a(tmpx)
 
  615      real(real64), 
contiguous, 
intent(out) :: px_source(:)
 
  620      do ia = 1, xc_photons%pt%nmodes
 
  621        call lalg_gemv(gr%np, xc_photons%pt%dim, 
m_one, grad_rho_aux, xc_photons%pt%dressed_pol(:, ia), 
m_zero, tmp1)
 
  623        call lalg_gemv(gr%np, xc_photons%pt%dim, 
m_one, tmp2, xc_photons%pt%dressed_pol(1:xc_photons%pt%dim, ia), 
m_zero, tmp1)
 
  624        call lalg_axpy(gr%np, prefactor(ia), tmp1, px_source)
 
  665    real(real64), 
pointer, 
contiguous,       
intent(in)    :: total_density(:)
 
  666    class(
grid_t),                    
intent(in)    :: gr
 
  667    type(
space_t),                    
intent(in)    :: space
 
  671    real(real64) :: prefactor_lamb
 
  672    real(real64) :: xx(space%dim), r
 
  673    real(real64), 
allocatable :: prefactor(:)
 
  674    real(real64), 
allocatable :: rho_aux(:)
 
  675    real(real64), 
allocatable :: grad_rho_aux(:,:)
 
  676    real(real64), 
allocatable :: grad_vpx(:,:)
 
  677    real(real64), 
allocatable :: epsgrad_epsgrad_rho_aux(:)
 
  678    real(real64), 
allocatable :: tmp1(:)
 
  679    real(real64), 
allocatable :: tmp2(:,:)
 
  680    real(real64)              ::  shift
 
  684    if (st%d%nspin >1) 
then 
  685      call messages_not_implemented(
"PhotonXCXCMethod = wavefunction for polarized and spinor cases", namespace=namespace)
 
  688    if (xc_photons%pt%n_electrons >1) 
then 
  695    safe_allocate(prefactor(1:xc_photons%pt%nmodes))
 
  697    safe_allocate(rho_aux(1:gr%np_part))
 
  699    safe_allocate(grad_rho_aux(1:gr%np, 1:xc_photons%pt%dim))
 
  701    safe_allocate(epsgrad_epsgrad_rho_aux(1:gr%np))
 
  702    safe_allocate(grad_vpx(1:gr%np, 1:xc_photons%pt%dim))
 
  703    safe_allocate(tmp1(1:gr%np_part))
 
  704    safe_allocate(tmp2(1:gr%np_part, 1:xc_photons%pt%dim))
 
  707    rho_aux(1:gr%np) = 
sqrt(abs( total_density(1:gr%np)))
 
  710      rho_aux(ip) = safe_tol(rho_aux(ip),1e-18_real64)
 
  714    if (xc_photons%llamb_freespace) 
then 
  720      call lalg_scal(gr%np, prefactor_lamb, epsgrad_epsgrad_rho_aux)
 
  724      do ia = 1, xc_photons%pt%nmodes
 
  725        prefactor(ia) = (xc_photons%pt%dressed_lambda(ia)**2) / (
m_two*xc_photons%pt%dressed_omega(ia)**2)
 
  730      epsgrad_epsgrad_rho_aux = 
m_zero 
  731      do ia = 1, xc_photons%pt%nmodes
 
  733        call lalg_gemv(gr%np, xc_photons%pt%dim, 
m_one, grad_rho_aux, xc_photons%pt%dressed_pol(:, ia), 
m_zero, tmp1)
 
  735        call lalg_gemv(gr%np, xc_photons%pt%dim, prefactor(ia), tmp2, xc_photons%pt%dressed_pol(:, ia), &
 
  736          m_one, epsgrad_epsgrad_rho_aux)
 
  743      xc_photons%vpx(ip) = epsgrad_epsgrad_rho_aux(ip)/rho_aux(ip)
 
  747    if(st%eigenval(1,1) < 
m_huge .and. .not. space%is_periodic()) 
then 
  748      shift = 
m_two * st%eigenval(1,1) * prefactor(1)
 
  751        xc_photons%vpx(ip) = xc_photons%vpx(ip) + shift
 
  756    call lalg_scal(gr%np, xc_photons%eta_c, xc_photons%vpx(:))
 
  758    select case (xc_photons%energy_method)
 
  764        call mesh_r(gr, ip, r, coords=xx)
 
  765        tmp1(ip) = - total_density(ip)*dot_product(xx(1:xc_photons%pt%dim), grad_vpx(ip,1:xc_photons%pt%dim))
 
  772      xc_photons%ex = xc_photons%eta_c * 
dmf_dotp(gr, rho_aux(1:gr%np), epsgrad_epsgrad_rho_aux)
 
  778    safe_deallocate_a(prefactor)
 
  779    safe_deallocate_a(rho_aux)
 
  780    safe_deallocate_a(grad_rho_aux)
 
  781    safe_deallocate_a(grad_vpx)
 
  782    safe_deallocate_a(epsgrad_epsgrad_rho_aux)
 
  783    safe_deallocate_a(tmp1)
 
  784    safe_deallocate_a(tmp2)
 
  805    class(
grid_t),                    
intent(in)    :: gr
 
  806    class(
space_t),                   
intent(in)    :: space
 
  809    real(real64),                     
intent(in)    :: time
 
  810    real(real64),                     
intent(in)    :: dt
 
  813    integer :: ia, idir, ispin
 
  814    real(real64)   :: pol_dot_jp
 
  815    real(real64), 
allocatable :: current(:,:,:)
 
  816    real(real64), 
allocatable :: jp(:)
 
  821    xc_photons%mf_vector_potential = 
m_zero 
  823    safe_allocate(current(1:gr%np_part, 1:space%dim, 1:st%d%nspin))
 
  830    safe_allocate(jp(1:space%dim))
 
  831    do idir = 1, space%dim
 
  833      do ispin = 1, st%d%spin_channels
 
  834        jp(idir) = jp(idir) + 
dmf_integrate(gr%der%mesh, current(:,idir,ispin))
 
  839    do ia = 1, xc_photons%pt%nmodes
 
  840      pol_dot_jp = dot_product(xc_photons%pt%dressed_pol(1:space%dim, ia),jp(1:space%dim))
 
  841      xc_photons%jp_proj_eo(ia,1) = xc_photons%jp_proj_eo(ia,1) + &
 
  842        cos(xc_photons%pt%dressed_omega(ia)*( time-dt))*pol_dot_jp*dt
 
  843      xc_photons%jp_proj_eo(ia,2) = xc_photons%jp_proj_eo(ia,2) + &
 
  844        sin(xc_photons%pt%dressed_omega(ia)*( time-dt))*pol_dot_jp*dt
 
  847    do ia = 1, xc_photons%pt%nmodes
 
  848      xc_photons%mf_vector_potential(1:xc_photons%pt%dim) = xc_photons%mf_vector_potential(1:xc_photons%pt%dim) &
 
  849        + (-
p_c*(xc_photons%pt%dressed_lambda(ia)**2) / xc_photons%pt%dressed_omega(ia)) &
 
  850        * (xc_photons%jp_proj_eo(ia,1)*
sin(xc_photons%pt%dressed_omega(ia)* time) &
 
  851        - xc_photons%jp_proj_eo(ia,2)*
cos(xc_photons%pt%dressed_omega(ia)* time)) &
 
  852        * xc_photons%pt%dressed_pol(1:xc_photons%pt%dim, ia)
 
  855    safe_deallocate_a(current)
 
  856    safe_deallocate_a(jp)
 
  868  logical pure function xc_photons_wants_to_renormalize_mass(xc_photons) result (renorm)
 
  871    renorm = (xc_photons%method>0) .and. xc_photons%llamb_freespace .and. xc_photons%llamb_re_mass
 
  876  real(real64) 
pure function xc_photons_get_renormalized_emass(xc_photons) result(mass)
 
  879    mass = m_one - (m_four*xc_photons%lamb_omega) / (3.0*m_pi * p_c**3)
 
  887    type(restart_t),          
intent(in)  :: restart
 
  888    integer,                  
intent(out) :: ierr
 
  890    character(len=80), 
allocatable :: lines(:)
 
  891    integer :: iunit, err, jj, nmodes
 
  894    push_sub(photon_free_mf_dump)
 
  895    nmodes = xc_photons%pt%nmodes
 
  896    pt_dim = xc_photons%pt%dim
 
  898    safe_allocate(lines(1:nmodes+pt_dim))
 
  902    iunit = restart_open(restart, 
'photon_free_mf')
 
  905      write(lines(jj), 
'(2x, es19.12)') xc_photons%mf_vector_potential(jj)
 
  909      write(lines(jj+pt_dim), 
'(a10,1x,I8,a1,2x,2(es19.12,2x))') 
'Mode ', jj, 
":", xc_photons%jp_proj_eo(jj,1:2)
 
  912    call restart_write(restart, iunit, lines, nmodes+pt_dim, err)
 
  913    if (err /= 0) ierr = ierr + 1
 
  914    call restart_close(restart, iunit)
 
  916    safe_deallocate_a(lines)
 
  918    pop_sub(photon_free_mf_dump)
 
  927    type(restart_t),          
intent(in)    :: restart
 
  928    class(space_t),           
intent(in)    :: space
 
  929    integer,                  
intent(out)   :: ierr
 
  931    character(len=80), 
allocatable :: lines(:)
 
  932    character(len=7) :: sdummy
 
  934    integer :: iunit, err, jj, nmodes
 
  937    push_sub(photon_free_mf_load)
 
  940    nmodes = xc_photons%pt%nmodes
 
  941    pt_dim = xc_photons%pt%dim
 
  943    if (restart_skip(restart)) 
then 
  945      pop_sub(photon_free_mf_load)
 
  950      message(1) = 
"Debug: Reading Photon-Free Photons restart." 
  951      call messages_info(1, namespace=restart%namespace)
 
  954    if ( .not. 
allocated(xc_photons%jp_proj_eo)) 
then 
  955      safe_allocate(xc_photons%jp_proj_eo(1:xc_photons%pt%nmodes, 1:2))
 
  956      xc_photons%jp_proj_eo = m_zero
 
  958    if ( .not. 
allocated(xc_photons%mf_vector_potential)) 
then 
  959      safe_allocate(xc_photons%mf_vector_potential(1:space%dim))
 
  960      xc_photons%mf_vector_potential = m_zero
 
  963    safe_allocate(lines(1:nmodes+pt_dim))
 
  964    iunit = restart_open(restart, 
'photon_free_mf')
 
  965    call restart_read(restart, iunit, lines, nmodes+pt_dim, err)
 
  970        read(lines(jj),
'(2x, es19.12)') xc_photons%mf_vector_potential(jj)
 
  974        read(lines(jj+pt_dim), 
'(a10,1x,I8,a1,2x,2(es19.12,2x))') sdummy, idummy, sdummy, xc_photons%jp_proj_eo(jj,1:2)
 
  977    call restart_close(restart, iunit)
 
  980      message(1) = 
"Debug: Reading Photons restart done." 
  981      call messages_info(1, namespace=restart%namespace)
 
  984    safe_deallocate_a(lines)
 
  986    pop_sub(photon_free_mf_load)
 
constant times a vector plus a vector
 
Copies a vector x, to a vector y.
 
scales a vector by a constant
 
double sin(double __x) __attribute__((__nothrow__
 
double sqrt(double __x) __attribute__((__nothrow__
 
double cos(double __x) __attribute__((__nothrow__
 
This module calculates the derivatives (gradients, Laplacians, etc.) of a function.
 
subroutine, public dderivatives_grad(der, ff, op_ff, ghost_update, set_bc, to_cartesian)
apply the gradient to a mesh function
 
subroutine, public dderivatives_lapl(der, ff, op_ff, ghost_update, set_bc, factor)
apply the Laplacian to a mesh function
 
real(real64), parameter, public m_two
 
real(real64), parameter, public m_huge
 
real(real64), parameter, public m_zero
 
real(real64), parameter, public m_four
 
real(real64), parameter, public m_third
 
real(real64), parameter, public m_pi
some mathematical constants
 
real(real64), parameter, public m_half
 
real(real64), parameter, public p_c
Electron gyromagnetic ratio, see Phys. Rev. Lett. 130, 071801 (2023)
 
real(real64), parameter, public m_one
 
real(real64), parameter, public m_three
 
This module implements the underlying real-space grid.
 
This module defines various routines, operating on mesh functions.
 
class(mesh_t), pointer, public mesh_aux
Globally-scoped pointer to the mesh instance.
 
real(real64) function, public dmf_dotp_aux(f1, f2)
dot product between two vectors (mesh functions)
 
real(real64) function, public dmf_integrate(mesh, ff, mask, reduce)
Integrate a function on the mesh.
 
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_not_implemented(feature, namespace)
 
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_experimental(name, namespace)
 
logical function, public parse_is_defined(namespace, name)
 
subroutine, public photon_mode_end(this)
 
subroutine, public photon_mode_dressed(this)
 
subroutine, public photon_mode_set_n_electrons(this, qtot)
 
subroutine, public photon_mode_init(this, namespace, dim, photon_free)
 
subroutine, public dpoisson_solve(this, namespace, pot, rho, all_nodes, kernel)
Calculates the Poisson equation. Given the density returns the corresponding potential.
 
This module is intended to contain "only mathematical" functions and procedures.
 
subroutine, public states_elec_calc_quantities(gr, st, kpoints, nlcc, kinetic_energy_density, paramagnetic_current, density_gradient, density_laplacian, gi_kinetic_energy_density, st_end)
calculated selected quantities
 
This module implements the "photon-free" electron-photon exchange-correlation functional.
 
subroutine photon_free_vpx_wfc(namespace, xc_photons, total_density, gr, space, st)
compute the electron-photon exchange potential based on wave functions
 
subroutine xc_photons_v_ks(xc_photons, namespace, total_density, density, gr, space, psolver, ep, st)
evaluate the KS potential and energy for the given functional
 
logical pure function xc_photons_wants_to_renormalize_mass(xc_photons)
indicate whether the photon-exchange requires a renormalized electron mass
 
subroutine xc_photons_init(xc_photons, namespace, xc_photon, space, gr, st)
initialize the photon-exchange functional
 
subroutine xc_photons_add_mean_field(xc_photons, gr, space, kpoints, st, time, dt)
accumulate the results of time integral the paramagnetic current.
 
subroutine xc_photons_mf_dump(xc_photons, restart, ierr)
write restart information
 
real(real64) pure function xc_photons_get_renormalized_emass(xc_photons)
return the renormalized electron mass for the electron-photon exhange
 
integer, parameter, private xc_photons_lda
 
subroutine photon_free_vpx_lda(namespace, xc_photons, total_density, gr, space, psolver)
compute the electron-photon exchange potential within the LDA
 
subroutine xc_photons_end(this)
 
integer, parameter, private xc_photons_wfs
 
subroutine xc_photons_mf_load(xc_photons, restart, space, ierr)
load restart information
 
Description of the grid, containing information on derivatives, stencil, and symmetries.
 
The states_elec_t class contains all electronic wave functions.
 
This class described the 'photon-exchange' electron-photon xc functionals, based on QEDFT.
 
subroutine laplacian_op(x, hx)
Computes Hx = (\Laplacian) x.
 
subroutine get_px_source(px_source)