[Pw_forum] about electric field potential in pp.x

xywu xywu at imr.ac.cn
Sat Mar 26 06:58:28 CET 2005

Dear all,

 I add a sawlike electric potential in SCF and want to get the electric 
potential from pp.x.
But when i use the pp.x with plot_num=12, the electric field potential 
in output file is zero.

But if i get the electric potential from pp.x without adding electric 
field in SCF, the error occurs as follows;

     from punch_plot : error #        -1
     e_field is not calculated
what's the wrong with it.

Please give me some advice.

! plot_num    selects what is saved in filplot:
  !                0=charge
  !                1=total potential V_bare+V_H + V_xc
  !                2=local ionic potential
  !                3=local density of states at e_fermi
  !                4=local density of electronic entropy
  !                5=STM images
  !                6=spin polarization (rho(up)-rho(down))
  !                7=|psi|^2
  !                8=electron localization function (ELF)
  !                9=planar average of all |psi|^2
  !               10=integrated local density of states (ILDOS) from
  !                  emin to emax (emin, emax in eV)
  !                  if emax is not specified, emax=E_fermi
  !               11=the V_bare + V_H potential
  !               12=the electric field potential
  !               13=the noncolinear magnetization.

BTW, still another question about add_efield.

In the file add_efield.f90

" !--------------------------------------------------------------------------
  subroutine add_efield(rho,vpoten,etotefield)
!   This routine adds an electric field to the local potential. The
!   field is made artificially periodic by introducing a saw-tooth
!   potential. The field is parallel to a reciprocal lattice vector bg, 
!   according to the index edir.
!   if dipfield is false the electric field correction is added to the
!   potential given as input (the bare local potential) only
!   at the first call to this routine. In the following calls
!   the routine exit.
!   if dipfield is true the dipole moment per unit surface is calculated
!   and used to cancel the electric field due to periodic boundary
!   conditions. This potential is added to the Hartree and xc potential
!   in v_of_rho. NB: in this case the electric field contribution to the 
!   band energy is subtracted by deband.
"  if (first) then
     WRITE( stdout,*)
     WRITE( stdout,'(5x,"Adding an external electric field")')
     WRITE( stdout,'(5x,"Intensity [a.u.]: ",f15.8)') eamp
  if (dipfield) WRITE( stdout,'(5x,"Dipole field [a.u.]: ", f15.8)') dip
  if (first) then
     WRITE( stdout,'(5x,"Potential amplitude [Ry]: ", f15.8)') vamp
     WRITE( stdout,'(5x,"Total length [points]: ", i5)') npoints
     WRITE( stdout,'(5x,"Total length [bohr rad]: ", f15.8)') length
     WRITE( stdout,'(5x,"Field is reversed between points: ",2i6)')nmax, nmax+ndesc

And in a typical output file of PW.x with efield:
     Adding an external electric field
     Intensity [a.u.]:      0.01000000
     Potential amplitude [Ry]:      0.24480000
     Total length [points]:   200
     Total length [bohr rad]:     61.20000000
     Field is reversed between points:      1   161

>From the output file and the code in add_efield.f90, the "first" in the code is TRUE and the "dipfield" is  FALSE, which means that the subroutine is only running only at the first call and the dipole correction in periodic boundary conditions is never used! Is it the truth?

Best regards

Xiyong Wu(X.Y.Wu) 
E_mail:xywu at imr.ac.cn

More information about the users mailing list