Dipole correction
- Author:
Chengcheng Xiao
- Date:
November 2025
Dipole correction
When the system has a net dipole, the electric field generated by it will incur spurious interaction across periodic images, especially when there’s not enough vacuum space. The goal of applying dipole correction to ONETEP is to eliminate this effect. An alternative way is to employ coulomb cut-off.
The net dipole moment \(\mu\) can be easily calculated as,
where the total charge density $rho(mathbf{r})$ can be decomposed as the contribution from the electrons and ions (in units of e*Bohr):
Correspondingly, the electric field created by this dipole moment can be expressed as (in units of Hartree/Bohr)
To eliminate this effect, we can insert a dipole layer (by directly manipulating the external potential) along certain direction. This is done in the spirit of Jörg Neugebauer and Matthias Scheffler. For now, the dipole correction only supports slab calculation (or equivlant) and can only be applied to the vacuum direction prependicular to the other two directions. Note that you cell can be tilted but as long as the Cartesian direction specified for the dipole correction is prependicular to the periodic cell direction, the result is correct. The added electric field generates a potential that takes the following form (assuming z direction):
Following the same logic, one can add an external electric field by:
and in this case, dipole correction could and should be added to make sure the results are correct.
Finally, after running ground state calculation with dipole correction, the total energy reported in the output file will contain the contribution from the dipole layer. Furthermore, the output potential will also include the dipole layer contribution.
In ONETEP, dipole correction can be added by
dipole_correction : T
and the correction direction is set by
dipole_correction_dir : 3
The location of the dipole layer is set by
efield_origin : 0.0 0.0 0.0
And a constant external electric field can be added as
constant_efield : 0.0 0.0 1.0
Keywords
dipole_correction: [Basic, bool, defaultF] Whether to use dipole correction or not.dipole_correction_dir: [Basic, integer, define3] Direction along which the dipole correction is applied.1,2,3correspond to x, y, z directions respectively.efield_origin: [Basic, float float float, default 0.0 0.0 0.0] Location of the dipole layer.constant_efield: [Basic, float float float, default 0.0 0.0 0.0] Constant external electric field to be added.