Skip to content

Sigma code input keywords (sigma.inp)

Required keywords

Optional keywords

Keyword documentation

Specification of self-energy matrix elements to compute

The flags below control which matrix elements \langle \psi_n | \Sigma(E_l) | \psi_m \rangle will be computed, where n and m are band indices, and E_l is the energy at which to evaluate the self-energy operator. Note that E_l is irrelevant for Hatree-Fock and static COHSEX calculations, i.e., if frequency_dependence == -1 or 0.

In typical cases, you just want to compute diagonal (n=m) matrix elements of \Sigma between a lower and an uper bound. In this case, you can simply use the flags band_index_min and band_index_max to specify these bounds. Advanced users can also use the flags diag, offdiag and sigma_matrix in order to compute arbitrary diagonal and off-diagonal matrix elements.


band_index_min [integer]

Minimum band index for diagonal matrix elements (n=m) of \Sigma to be computed.


band_index_max [integer]

Maximum band index for diagonal matrix elements (n=m) of \Sigma to be computed.


number_diag

Number or diagonal matrix elements, i.e., for n=m.


begin diag ... end

Band indices for the diagonal matrix elements of Sigma (n=m=l)


number_offdiag

Number of off-diagonal matrix elements


begin offdiag ... end

The off-diagonal matrix elements of Sigma band_index_min <= n <= band_index_max band_index_min <= m <= band_index_max band_index_min <= l <= band_index_max NOTE: the offdiag utility only works with the sigma_matrix syntax, below.


sigma_matrix [array of integers]

Alternatively, select a specific value of l and let n and m vary in the range from band_index_min to band_index_max Set l to 0 to skip the off-diagonal calculation (default) If l = -1 then l_i is set to n_i (i = 1 ... noffdiag) i.e. each row is computed at different eigenvalue If l = -2 then l_i is set to m_i (i = 1 ... noffdiag) i.e. each column is computed at different eigenvalue For l > 0, all elements are computed at eigenvalue of band l. Set t to 0 for the full matrix (default) or to -1/+1 for the lower/upper triangle

Frequency grid used to evaluate the self-energy

In order to evaluate \Sigma(\omega), you have to specify a frequency grid for the frequencies \omega. You can control where to center/shift the grid.


frequency_grid_shift [integer]

Use this flag to control where the center of the frequency grid is. The options are:

  • 0 if you don't want any shift, i.e., \omega is an absolute energy
  • 1 if you want to shift the first frequency \omega=0 to the Fermi energy (this was the default behavior in BerkeleyGW-1.0)
  • 2 if you want to center the frequency grid around each mean-field QP energy (default)

delta_frequency_eval [float]

If frequency_grid_shift is 2 (default), specify the frequency spacing delta_frequency_eval in eV (default=0.2) and the width, in eV, of the evaluation grid centered around each QP state (default=2.0). The code will generate a frequency grid from -max_frequency_eval to max_frequency_eval. You should increase the value of max_frequency_eval if you expect the absolute QP corrections to be large, such as when dealing with molecules (the code will warn if the frequency grid is too small). Note for advanced users: the grids are actually centered around the outer mean-field energies, so you can use WFN_outer and eqp_outer_corrections or outer scissors parameters to fine-tune the frequency grid.


max_frequency_eval [float]

init_frequency_eval [float]

If frequency_grid_shift is 0 or 1, specify the initial frequency init_frequency_eval (before the shift), in eV, the frequency spacing delta_frequency_eval, in eV, and the number of frequency points number_frequency_eval.


delta_frequency_eval [float]

number_frequency_eval [integer]

Static subspace approximation

Within the contour deformation formalism (frequency_dependence==2 and frequency_dependence_method==2), this parameters activate the full-frequency static subspace approximation method in sigma. The full-frequency inverse dielectric matrix calculated by epsilon need to be computed using the static subspace method (set chi_eigenvalue_cutoff in epsilon.inp). For the method to be effective the epsilon matrices have to be written using the subspace basis (use write_subspace_epsinv in epsilon.inp). The implementation is different than the standard CD, making use of zgemm/dgemm calls.


do_sigma_subspace

Activate the full-frequency static subspace approximation method in sigma.


sub_collective_redistr

Use collective MPI calls to perform the redistribution of subspace epsilon matrices and eigenvector, less efficient than the default cyclic scheme, but alternative if MPI non blocking send/receive are not working.

Options for the generalized plasmon-pole (GPP) calculations

The matrix element of the self-energy operator is expanded to first order in the energy around Ecor.


finite_difference_form [integer]

This flag controls the finite difference form for numerical derivative of \Sigma(\omega):

  • grid = -3 : Calculate Sigma(w) on a grid, using the same frequency grid as in full-frequency calculations.
  • none = -2 : dSigma/dE = 0 [skip the expansion].
  • backward = -1 : dSigma/dE = (Sigma(Ecor) - Sigma(Ecor-dE)) / dE
  • central = 0 : dSigma/dE = (Sigma(Ecor+dE) - Sigma(Ecor-dE)) / (2dE)
  • forward = 1 : dSigma/dE = (Sigma(Ecor+dE) - Sigma(Ecor)) / dE
  • default = 2 : forward for diagonal and none for off-diagonal

finite_difference_spacing [float]

Finite difference spacing given in eV (defaults to 1.0)

GPUs Parameters

Input parameters controlling the execution when running with GPU support. For the default algorithm (keys ending with _algo) the hierarchy depends on which programming models are compiled in (OpenACC, OpenMP-target and/or CPU (threaded or not)): if all possible implementations have been compiled then the hierarchy is OPENACC_ALGO > OMP_TARGET_ALGO > CPU_ALGO.


mtxel_algo

Controlling which algorithm to use for the GPU offload of the mtxel kernel calculating transition matrix elements. Possible values are CPU_ALGO, OPENACC_ALGO and OMP_TARGET_ALGO (See section header for default values).


sigma_gpp_algo

Controlling which algorithm to use for the GPU offload of the sigma_gpp kernel calculating the GPP self-energy. Possible values are CPU_ALGO, OPENACC_ALGO and OMP_TARGET_ALGO (See section header for default values).


accel_mtxel_band_block_size [integer]

Control the inner block size in the band by band mtxel kernel, the larger the better, but uses more memory (Default 20).


accel_gpp_band_block_size

Parameter for fine tuning the performance of the sigma_gpp kernel. Define the stride size of the inner most loop over bands (default 16).


accel_gpp_ig_block_size

Parameter for fine tuning the performance of the sigma_gpp kernel. Define the stride size of the inner most loop over G vectors (default 512).

Options for Hartree-Fock & hybrid calculations

For Hartree-Fock/hybrid functional, no epsmat/eps0mat files are needed. Instead provide a list of q-points and the grid size. The list of q-points should not be reduced with time reversal symmetry - because BerkeleyGW never uses time reversal symmetry to unfold the q/k-points. Instead, inversion symmetry does the job in the real version of the code. You can generate this list with kgrid.x: just set the shifts to zero and use same grid numbers as for WFN_inner.


begin qpoints ... end

qx qy qz 1/scale_factor is_q0

Reduced coordinates of q-points. scale_factor is for specifying values such as 1/3 is_q0 indicated whether a q-point is Gamma (1) or not (0)


qgrid [array of integers]

The regular grid of q-points corresponding to the list.

Scissors operator

Scissors operator (linear fit of the quasiparticle energy corrections) for the bands in WFN and WFNq. For valence-band energies:

  • ev_cor = ev_in + evs + evdel * (ev_in - ev0)

For conduction-band energies:

  • ec_cor = ec_in + ecs + ecdel * (ec_in - ec0)

Defaults is zero for all entries, i.e., no scissors corrections. evs, ev0, ecs, ec0 are in eV. If you have eqp.dat and eqp_q.dat files this information is ignored in favor of the eigenvalues in eqp.dat and eqp_q.dat. One can specify all parameters for scissors operator in a single line with cvfit evs ev0 evdel ecs ec0 ecdel


evs [float]

ev0 [float]

evdel [float]

ecs [float]

ec0 [float]

ecdel [float]

cvfit [array of integers]

Screening type

How does the screening of the system behaves? (default=screening_semiconductor) BerkeleyGW uses this information to apply a different numerical procedure to computing the diverging q\rightarrow 0 contribution to the screened Coulomb potential W_{GG'}(q). These models are not used in Hartree-Fock calculations.


screening_semiconductor

Use this flag on gapped system (default).


screening_metal

Use this flag on metallic system, i.e., constant DOS at the Fermi energy.


screening_graphene

Use this flag on systems with vanishing linear DOS at the Fermi level, such as graphene.

Truncation schemes for the Coulomb potential

Since BerkerleyGW is a plane-wave-based code, one must truncate the Coulomb potential to avoid spurious interactions between repeated supercells when dealing with systems with reduced dimensionality. Make sure you understand how to setup your mean-field calculation so that the supercell is large enough to perform a truncation of the Coulomb potential.


cell_box_truncation

Truncate the Coulomb potential based on the Wigner-Seitz cell. This is the recommended truncation for 0D systems.


cell_wire_truncation

Truncation scheme for 1D systems, such as carbon nanotubes. The z direction is assumed to be periodic, and x and y confined.


cell_slab_truncation

Truncation scheme for 2D systems, such as graphene or monolayer MoS2. The z direction is assumed to be confined, and x and y periodic.


spherical_truncation

Truncate the Coulomb potential based on an analytical scheme. This is ok for quasi-spherical systems, such as CH4 molecule or C60, but the cell_box_truncation is the most general and recommended scheme. When using spherical truncation, you must also specify the radius for the truncation in spherical_truncation.


coulomb_truncation_radius [float]

This specifies the radius of for spherical truncation, in Bohr, so that the Coulomb potential v(r) is zero for r larger than these values. This flag is to be used together with spherical_truncation.

Misc. parameters

screened_coulomb_cutoff [float]

Energy cutoff for the screened Coulomb interaction, in Ry. The screened Coulomb interaction W_{GG'}(q) will contain all G-vectors with kinetic energy |q+G|^2 up to this cutoff. Default is the epsilon_cutoff used in the epsilon code. This value cannot be larger than the epsilon_cutoff or the bare_coulomb_cutoff.

bare_coulomb_cutoff [float]

Energy cutoff for the bare Coulomb interaction, in Ry. The bare Coulomb interaction v(G+q) will contain all G-vectors with kinetic energy |q+G|^2 up to this cutoff. Default is the WFN cutoff.

number_bands [integer]

Total number of bands (valence+conduction) to sum over. Defaults to the number of bands in the WFN file minus 1.

The range of spin indices for which Sigma is calculated The default is the first spin component


spin_index_min [integer]

spin_index_max [integer]

cell_average_cutoff [float]

Cutoff energy (in Ry) for averaging the Coulomb Interaction in the mini-Brillouin Zones around the Gamma-point without Truncation or for Cell Wire or Cell Slab Truncation.

frequency_dependence [integer]

Frequency dependence of the inverse dielectric matrix.

  • Set to -1 for the Hartree-Fock and hybrid functional approximation.
  • Set to 0 for the static COHSEX approximation.
  • Set to 1 for the Generalized Plasmon Pole model (default).
  • Set to 2 for the full frequency dependence.
  • Set to 3 for the Generalized Plasmon Pole model in the Godby-Needs flavor. Note: does not work with parallelization in frequencies.

frequency_dependence_method [integer]

Full frequency dependence method for the polarizability. set to 0 for the real-axis integration method. set to 2 for the contour-deformation method (default).

cd_integration_method [integer]

For contour deformation calculations, specify the integration method on the imaginary axis (default is 0). Options are:

  • 0 for piecewise constant matrix elements centered at each imaginary frequency
  • 2 for piecewise quadratic matrix elements over each integration segment
  • 3 for cubic Hermite matrix elements over each integration segment

invalid_gpp_mode [integer]

What should we do when we perform a HL-GPP or a GN-GPP calculations and we find an invalid mode frequency with \omega_{GG'}^2 < 0 Options are: -1: Default, same as 3. 0: Skip invalid mode and ignore its contribution to the self energy. 1: "Find" a purely complex mode frequency. This was the default behavior in BGW-1.x. 2: Set the mode frequency to a fixed value of 2 Ry. 3: Treat that mode within the static COHSEX approximation (move frequency to infinity).

use_epsilon_remainder

Add remainder from tail of epsilon for full frequency.

full_ch_conv_log [integer]

Logging the convergence of the CH term with respect to the number of bands in the output file "ch_converge.dat". Options are:

  • 0 to log only the real part of VBM, CBM and the gap (default).
  • 1 to log the real and imag. parts of all bands for which we compute Sigma.

use_xdat

Use precalculated matrix elements of bare exchange from x.dat. The default is not to use them.

dont_use_vxcdat

The default behavior is to load the precalculated exchange-correlation matrix elements \langle n | \hat{V}_{xc} | m \rangle from file vxc.dat. Use this flag to load the whole exchange-correlation matrix in reciprocal space, V_{xc}(G), which should be provided in the file VXC.

use_kihdat

This flag controls a different way to construct quasiparticle energies It needs kih.dat file generated from pw2bgw.x KIH = Kinetic + Ion + Hartree In this way, we avoid the use of VXC or vxc.dat and it enables BerkeleyGW to interface with many other functionals such as hybrid, metaGGA (including SCAN), etc.

bare_exchange_fraction [float]

Fraction of bare exchange. Set to 1.0 if you use the exchange-correlation matrix elements read from file vxc.dat. Set to 1.0 for local density functional, 0.0 for HF, 0.75 for PBE0, 0.80 for B3LYP if you use the local part of the exchange-correlation potential read from file VXC. For functionals such as HSE whose nonlocal part is not some fraction of bare exchange, use vxc.dat and not this option. This is set to 1.0 by default.

short_range_frac_fock

The alpha parameter used when constructing the range-separated hybrid TDDFT kernel. For definition of alpha and its relation to the TDDFT kernel see Eqs. 1-4 in PhysRevB.92.081204

long_range_frac_fock

The beta parameter used when constructing the range-separated hybrid TDDFT kernel. For definition of beta and its relation to the TDDFT kernel see Eqs. 1-4 PhysRevB.92.081204

screening_length

The (range-separation) parameter gamma used when constructing the range-separated hybrid TDDFT kernel. For definition of beta and its relation to the TDDFT kernel see Eqs. 1-4 PhysRevB.92.081204

set_tolerant

Expert only. If set, then it allows for input data files (e.g., WFN_inner vs RHO) to have inconsistent information (e.g. crystal structures, etc.). You must know what you are doing.

gpp_broadening [float]

Broadening for the energy denominator in CH and SX within GPP. If it is less than this value, the sum is better conditioned than either CH or SX directly, and will be assigned to SX while CH = 0. This is given in eV, the default value is 0.5

gpp_sexcutoff [float]

Cutoff for the poles in SX within GPP. Divergent contributions that are supposed to sum to zero are removed. This is dimensionless, the default value is 4.0

begin kpoints ... end

kx ky kz 1/scale_factor

scale_factor is for specifying values such as 1/3

fermi_level [float]

Specify the Fermi level (in eV), if you want implicit doping Note that value refers to energies after scissor shift or eqp corrections. See also fermi_level_absolute and fermi_level_relative to control the meaning of the Fermi level.

The Fermi level in keyword fermi_level can be treated as an absolute value or relative to that found from the mean field (default). Using fermi_level_absolute will force the code to recompute the Fermi level regardless of existing occupations/ifmax array.


fermi_level_absolute

fermi_level_relative

dont_use_hdf5

Read from traditional simple binary format for epsmat/eps0mat instead of HDF5 file format. Relevant only if code is compiled with HDF5 support.

verbosity [integer]

Verbosity level, options are:

  • 1: default
  • 2: medium - info about k-points, symmetries, and eqp corrections.
  • 3: high - full dump of the reduced and unfolded k-points.
  • 4: log - log of various function calls. Use to debug code.
  • 5: debug - extra debug statements. Use to debug code.
  • 6: max - only use if instructed to, severe performance downgrade. Note that verbosity levels are cumulative. Most users will want to stick with level 1 and, at most, level 3. Only use level 4+ if debugging the code.

use_wfn_hdf5

Read WFN_inner in HDF5 format (i.e. read from WFN_inner.h5).

comm_nonblocking_cyclic

Employs a non-blocking cyclic communication scheme overlapping computation and communication in the evaluation of the self-energy matrix elements (reduce the time spent in communication for large pool size, but require more memory).

Scissors operator (linear fit of the quasiparticle energy corrections) for the bands in WFN_outer. Has no effect if WFN_outer is not supplied. For valence-band energies: ev_cor = ev_in + evs_outer + evdel_outer (ev_in - ev0_outer) For conduction-band energies: ec_cor = ec_in + ecs_outer + ecdel_outer (ec_in - ec0_outer) Defaults below. evs_outer, ev0_outer, ecs_outer, ec0_outer are in eV


evs_outer [float]

ev0_outer [float]

evdel_outer [float]

ecs_outer [float]

ec0_outer [float]

ecdel_outer [float]

cvfit_outer [array of integers]

One can specify these parameters in a single line as (evs_outer ev0_outer evdel_outer ecs_outer ec0_outer ecdel_outer)

eqp_corrections

Set this to use eigenvalues in eqp.dat If not set, this file will be ignored.

eqp_outer_corrections

Set this to use eigenvalues in eqp_outer.dat If not set, this file will be ignored. Has no effect if WFN_outer is not supplied.

spline_scissors

Read quasiparticle corrections for the inner wavefunction, WFN_inner, as a general spline representation.

The quasiparticle corrections \Delta E = E_{QP} - E_{mf} = \Delta E(E_{mf}) are represented by a spline curve stored in spline_scissors.dat. The file format is the following:

  • First line: number of knots
  • Second line: array with knot positions (t)
  • Third line: array with coefficients (c)
  • Fourth line: degree of the spline (k)

The arrays t and c, together with the scalar k, form the tck tuple returned by the FITPACK's curfit routine and SciPy's splrep routine.

See also: spline_scissors_outer

spline_scissors_outer

Read quasiparticle corrections for the outer wavefunction, WFN_outer, as a general spline representation.

See spline_scissors for details.

avgpot [float]

The average potential on the faces of the unit cell in the non-periodic directions for the bands in WFN_inner This is used to correct for the vacuum level The default is zero, avgpot is in eV

avgpot_outer [float]

The average potential on the faces of the unit cell in the non-periodic directions for the bands in WFN_outer This is used to correct for the vacuum level. Has no effect if WFN_outer is not supplied. The default is zero, avgpot_outer is in eV

write_vcoul

Write the bare Coulomb potential v(q+G) to file

number_sigma_pools [integer]

Number of pools for parallel sigma calculations The default is chosen to minimize memory in calculation

tol_degeneracy

Threshold for considering bands degenerate, for purpose of making sure all of degenerate subspaces are included, for band-averaging, and for setting offdiagonals to zero by symmetry. (Ry)

'unfolded BZ' is from the kpoints in the WFN_inner file 'full BZ' is generated from the kgrid parameters in the WFN_inner file See comments in Common/checkbz.f90 for more details


fullbz_replace

Replace unfolded BZ with full BZ


fullbz_write

Write unfolded BZ and full BZ to files

degeneracy_check_override

The requested number of bands cannot break degenerate subspace Use the following keyword to suppress this check Note that you must still provide one more band in wavefunction file in order to assess degeneracy Automatically enabled if pseudobands are detected.

The sum over q-points runs over the full Brillouin zone. For diagonal matrix elements between non-degenerate bands and for spherically symmetric Coulomb potential (no truncation or spherical truncation), the sum over q-points runs over the irreducible wedge folded with the symmetries of a subgroup of the k-point. The latter is the default. In both cases, WFN_inner should have the reduced k-points from an unshifted grid, i.e. same as q-points in Epsilon. With no_symmetries_q_grid, any calculation can be done; use_symmetries_q_grid is faster but only diagonal matrix elements of non-degenerate or band-averaged states can be done.


no_symmetries_q_grid

use_symmetries_q_grid

dont_symmetrize

If no_symmetries_q_grid is used, this flag skips the averaging of the degenerate subspace. This might be useful for treating accidental degeneracies.

no_symmetries_offdiagonals

Off-diagonal elements are zero if the two states belong to different irreducible representations. As a simple proxy, we use the size of the degenerate subspaces of the two states: if the sizes are different, the irreps are different, and the matrix element is set to zero without calculation. Turn off this behavior for testing by setting flag below. Using WFN_outer effectively sets no_symmetries_offdiagonals.

Rotation of the k-points may bring G-vectors outside of the sphere. Use the following keywords to specify whether to die if some of the G-vectors fall outside of the sphere. The default is to die. Set to die in case screened_coulomb_cutoff = epsilon_cutoff. Set to ignore in case screened_coulomb_cutoff < epsilon_cutoff.


die_outside_sphere

ignore_outside_sphere

exact_static_ch [integer]

Dealing with the convergence of the CH term. Set to 0 to compute a partial sum over empty bands. Set to 1 to compute the exact static CH. In case of exact_static_ch = 1 and frequency_dependence = 1 (GPP) or 2 (FF), the partial sum over empty bands is corrected with the static remainder which is equal to 1/2 (exact static CH - partial sum static CH), additional columns in sigma_hp.log labeled ch', sig', eqp0', eqp1' are computed with the partial sum without the static remainder, and ch_converge.dat contains the static limit of the partial sum. In case of exact_static_ch = 0 and frequency_dependence = 0 (COHSEX), columns ch, sig, eqp0, eqp1 contain the exact static CH, columns ch', sig', eqp0', eqp1' contain the partial sum static CH, and ch_converge.dat contains the static limit of the partial sum. For exact_static_ch = 1 and frequency_dependence = 0 (COHSEX), columns ch', sig', eqp0', eqp1' are not printed and file ch_converge.dat is not written. Default is 0 for frequency_dependence = 1 and 2; 1 for frequency_dependence = 0; has no effect for frequency_dependence = -1. It is important to note that the exact static CH answer depends not only on the screened Coulomb cutoff but also on the bare Coulomb cutoff because G-G' for G's within the screened Coulomb cutoff can be outside the screened Coulomb cutoff sphere. And, therefore, the bare Coulomb cutoff sphere is used.

skip_averagew

Do not average W over the minibz, and do not replace the head of eps0mat with averaged value. Only use this option for debugging purposes.

subsample

By default, the code reads the dielectric matrix for a single q->0 q-point. The following flag enables the subsampling of Voronoi cell containing Gamma. Your eps0mat file should contain a list of radial q-points (which will not be unfolded by symmetries) instead of a single q->0 point. You should provide a file subweights.dat containing the weights w(q) associated to each subsampled q-point (which will be renormalized so that \sum w(q)=1). Using this subsampling allows one to accelerate the convergence with respect to the number of q-points, and is especially helpful when dealing with large unit cells, truncated Coulomb potential and birefringent materials.

dont_check_norms

Whether we want to check WFN norms. Automatically enabled if pseudobands are detected.

occ_broadening [float]

Apply the first order Methfessel-Paxton smearing scheme to the band occupations. Note that this keyword must be used with fermi_level_absolute.