Unified Pseudopotential File (UPF) Specifications - 2002-01-03 1) general structure - The file is formatted - The file contains "fields". A field whose name is "FOO" is delimited by a starting line containing and an ending line containing , as in the example below: (content of field FOO) and are "delimiters" of field FOO. Note that - a field name is case-insensitive - a field name can contain only letters and digits - spaces are not allowed between the <> and the field name - a delimiter may not start at the beginning of a line - trailing characters in the line after the > of a delimiter are ignored - fields may contain numeric data, comments (a character strings), or other fields ("subfields") Blank lines in a field are ignored. Maximum line length is 80 characters Data in fields must be readable using fortran free format 2) Defined fields: PP_INFO PP_HEADER PP_MESH PP_NLCC PP_LOCAL PP_NONLOCAL PP_PSWFC PP_PSRHOATOM PP_INFO should be the first field, but only for human readers: it is meant to contain info that would allow to generate again the pseudopotential, not data to be read. The field should NOT contain characters "<" and ">" in order to avoid potential problems when reading using XML-compliant libraries. PP_HEADER must precede PP_MESH that must precede all the others. (PP_INFO excepted). Fields PP_NLCC, PP_PSWFC, PP_PSRHOATOM are optional. Fields that are not defined are ignored 3) Field specifications: In the following, comments are enclosed in quotes to distinguish them from the rest, but quotes are not actually written to file The max length of a comment is 80 characters The meaning of variables is explained at the end of each field Long do loops, indicated by lines with ..., can be written with any numbers per line (in the limit of 80 characters) All quantities are in atomic Rydberg units: e^2=2, m=1/2, hbar=1. Lengths are in Bohr (0.529177 A), energies in Ry (13.6058 eV) Potentials are multiplied by e so they have the units of energy. "generating program" "date, author" "whatever comment you have about the PP" rel "non/scalar/full relativistic calculation" Any info that may be useful to reconstruct the PP, such as: "nl, pn, l, occ, Rcut, Rcut US, E pseu" els(1), nns(1), lchi(1), oc(1), rcut(1), rcutus(1), epseu(1) ... els(n), nns(n), lchi(n), oc(n), rcut(n), rcutus(n), epseu(n) rcloc "Local Potential cutoff radius" ------------------------------------------------------------------- rel : rel=0 if calculation is non relativistic rel=1 if calculation is scalar relativistic rel=2 if calculation is full relativistic n : the number of states used in the generation of the PP els(i) : label for i-th pseudo-state (4s, 4p, etc) nns(i) : principal quantum number lchi(i) : angular momentum (l, not l+1) oc(i) : occupancy (non-integer values allowed) rcut(i) : matching radius (norm-conserving, NC) rcutus(i): matching radius (ultra-soft, US) epseu(i) : energy of the pseudo-orbital ------------------------------------------------------------------- n "Version Number" psd "Element" US|NC "Ultrasoft|Norm conserving pseudopotentials" nlcc "Nonlinear Core Correction" dft "Exch-Corr" zp "Z valence" etotps "Total Energy" ecutwfc, ecutrho "Suggested Cutoff for wfc and rho" lmax "Max angular momentum component" mesh "Number of points in mesh" natwfc, nbeta "Number of wavefunctions, projectors" "Wavefunctions nl l occ" els(1) lchi(1) oc(1) ... els(natwfc) lchi(natwfc) oc(natwfc) ------------------------------------------------------------------- n : version number of the UPF file This document refers to version 0. dft (character(len=20)) : four space-separated strings identifying the exch-corr functional exch correlations exch-grad.corr. correlations-grad.corr. The last lines are the list of atomic pseudo-orbitals included in field PP_PSWFC (not necessarily the same used in the construction of the PP) ecutwfc, ecutrho: set to 0 if no cutoff is suggested natwfc: is the number of atomic (pseudo-)orbitals in section PP_PSWFC and may not coincide with the number of atomic states used in the generation of the PP (n in PP_INFO) els(i) : label for the i-th atomic orbital (4s, 4p, etc) lchi(i): angular momentum of the i-th atomic orbital (l, not l+1) oc(i) : occupancy of the i-th atomic orbital (non-integer values allowed) ------------------------------------------------------------------ r(1) r(2) ... r(mesh) rab(1) rab(2) ... rab(mesh) ------------------------------------------------------------------- r (mesh) : radial mesh points (a.u.) rab(mesh) : rab(i) = (dr(x)/dx)_{x=i} This is the factor required for discrete integration: \int f(r) dr => \sum_i f_i rab_i ------------------------------------------------------------------- rho_atc(1) rho_atc(2) ... rho_atc(mesh) ------------------------------------------------------------------- rho_atc(mesh) : core charge for nonlinear core correction (true charge, not 4*pi*r^2*charge) ------------------------------------------------------------------- vloc(1) vloc(2) ... vloc(mesh) ------------------------------------------------------------------- vloc(mesh) : local potential (Ry a.u.) ------------------------------------------------------------------- 1 lll(1) "Beta L" kkbeta(1) beta(1,1) beta(2,1) ... beta(kkbeta(1),1) ... nbeta lll(nbeta) "Beta L" kkbeta(nbeta) beta(1,nbeta) beta(2,nbeta) ... beta(kkbeta(nbeta),nbeta) nd, "Number of nonzero Dij" do nb=1,nbeta do mb=nb,nbeta if (abs (dion (nb, mb) ) > 0) then nb mb dion(nb,mb) "Q_int" end if end do end do nqf "nqf" rinner(0) rinner(1) ... rinner(2*lmax) do nb=1,nbeta do mb=nb,nbeta nb mb lll(mb) "i j (l)" qqq(nb,mb) "Q_int" qfunc(1, nb,mb) qfunc(2, nb,mb) ... qfunc(mesh, nb,mb) do l=0,2*lmax do i=1,nqf qfcoef(i,l,nb,mb) end do end do end do end do ------------------------------------------------------------------- lll(i) : angular momentum of projector i kkbeta(i) : number of mesh points for projector i (must be .le.mesh ) beta(i) : projector |\beta_i> (Ry a.u.) multiplied by r dion(i,j) : the D_ij factors (Ry^{-1}) of the nonlocal PP: V_NL = \sum_{i,j} D_{i,j} |\beta_i><\beta_j| nqf : number of expansion coefficients for q_{ij} (may be zero) rinner(i) : for r < rinner(i) Q functions are pseudized (not read if nqf=0) qqq(i,j) : Q_{ij} = \int q_{ij}(r) dr qfunc : q_{ij}(r) for r > rinner(i) qfcoef : expansion coefficients of q_{ij}(r) for r < rinner(i) (not read if nqf=0) ------------------------------------------------------------------- els(1) lchi(1) oc(1) "Wavefunction" chi(1,1) chi(2,1) ... chi(mesh,1) .......... els(natwfc) lchi(natwfc) oc(natwfc) "Wavefunction" chi(1,natwfc) chi(2,natwfc) ... chi(mesh,natwfc) ------------------------------------------------------------------- chi(mesh,i) : i-th radial atomic (pseudo-)orbital (radial part of the KS equation, multiplied by r) els(natwf), lchi(natwf), oc(natwf) : as in PP_HEADER ------------------------------------------------------------------- rho_at(1) rho_at(2) ... rho_at(mesh) ------------------------------------------------------------------- rho_at(mesh) : radial atomic (pseudo-)charge rho_at(:) = \sum_i oc(i) * chi(:,i)**2 This is 4pi*r^2 times the true charge -------------------------------------------------------------------