Tutorial

Here, we'll take a look at the basic usage of PseudoPotentialIO.jl: searching for, loading, and investigating the contents of pseudopotentials.

using PseudoPotentialIO
using CairoMakie
using Colors

1. Searching for pseudopotentials

PseudoPotentialIO provides easy access to a variety of pseudopotential families with zero setup using Julia Artifacts, LazyArtifacts.jl, and PseudoLibrary. In order to list the available pre-bundled families, use list_families

list_families(with_info=true)
Dict{String, Vector{Any}} with 3 entries:
  "name"   => ["pd_nc_sr_pbesol_standard_0.4.1_psp8", "pd_nc_sr_pbe_standard_0.…
  "format" => [missing, missing, missing, missing, missing, missing, missing, m…
  "n_psp"  => [missing, missing, missing, missing, missing, missing, missing, m…

Because families are downloaded lazily, detailed information on some of the families is missing (they need to be downloaded first). In order to download a pseudopotential family, you can load it using load_family.

Loading pseudopotential families

load_family can also load all the pseudopotentials in a local directory!

You can then see an overview of which elements the family supports with show_family_periodic_table.

family = load_family("hgh_lda_upf");
show_family_periodic_table(family)

Elements(…128 elements…):
H                                                  He
Li Be                               B  C  N  O  F  Ne
Na Mg                               Al Si P  S  Cl Ar
K  Ca Sc Ti V  Cr Mn Fe Co Ni Cu Zn Ga Ge As Se Br Kr
Rb Sr Y  Zr Nb Mo Tc Ru Rh Pd Ag Cd In Sn Sb Te I  Xe
Cs Ba    Hf Ta W  Re Os Ir Pt Au Hg Tl Pb Bi Po At Rn


      La Ce Pr Nd Pm Sm Eu Gd Tb Dy Ho Er Tm Yb Lu

For more detailed information, use show_family_list. You can restrict the output by providing a list of elements that you're interested in.

show_family_list(family)  # Show all the pseudopotentials
show_family_list(family; elements=["Ba", "Ti", "O"])  # Only show the pseudos for Ba, Ti, and O
┌─────────┬───────────────────┬────────────────┬───────┬────────────┬─────────┬───────────────────┬─────────────────────────────────────┐
│ Element │          Filename │ Valence Charge │  NLCC │ Spin Orbit │  Format │         Formalism │                                File │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ag │   Ag.pz-d-hgh.UPF │           11.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ag, z_valence=11.0) │
│      Ag │     Ag.pz-hgh.UPF │            1.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ag, z_valence=1.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Al │     Al.pz-hgh.UPF │            3.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Al, z_valence=3.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ar │     Ar.pz-hgh.UPF │            8.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ar, z_valence=8.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      As │     As.pz-hgh.UPF │            5.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=As, z_valence=5.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      At │     At.pz-hgh.UPF │            7.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=At, z_valence=7.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Au │   Au.pz-d-hgh.UPF │           11.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Au, z_valence=11.0) │
│      Au │     Au.pz-hgh.UPF │            1.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Au, z_valence=1.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       B │      B.pz-hgh.UPF │            3.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=B, z_valence=3.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ba │     Ba.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ba, z_valence=2.0) │
│      Ba │  Ba.pz-sp-hgh.UPF │           10.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ba, z_valence=10.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Be │     Be.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Be, z_valence=2.0) │
│      Be │   Be.pz-s-hgh.UPF │            4.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Be, z_valence=4.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Bi │     Bi.pz-hgh.UPF │            5.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Bi, z_valence=5.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Br │     Br.pz-hgh.UPF │            7.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Br, z_valence=7.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       C │      C.pz-hgh.UPF │            4.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=C, z_valence=4.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ca │     Ca.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ca, z_valence=2.0) │
│      Ca │  Ca.pz-sp-hgh.UPF │           10.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ca, z_valence=10.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Cd │   Cd.pz-d-hgh.UPF │           12.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Cd, z_valence=12.0) │
│      Cd │     Cd.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Cd, z_valence=2.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ce │  Ce.pz-sp-hgh.UPF │           12.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ce, z_valence=12.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Cl │     Cl.pz-hgh.UPF │            7.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Cl, z_valence=7.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Co │     Co.pz-hgh.UPF │            9.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Co, z_valence=9.0) │
│      Co │  Co.pz-sp-hgh.UPF │           17.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Co, z_valence=17.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Cr │     Cr.pz-hgh.UPF │            6.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Cr, z_valence=6.0) │
│      Cr │  Cr.pz-sp-hgh.UPF │           14.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Cr, z_valence=14.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Cs │     Cs.pz-hgh.UPF │            1.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Cs, z_valence=1.0) │
│      Cs │  Cs.pz-sp-hgh.UPF │            9.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Cs, z_valence=9.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Cu │   Cu.pz-d-hgh.UPF │           11.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Cu, z_valence=11.0) │
│      Cu │     Cu.pz-hgh.UPF │            1.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Cu, z_valence=1.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Dy │  Dy.pz-sp-hgh.UPF │           20.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Dy, z_valence=20.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Er │  Er.pz-sp-hgh.UPF │           22.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Er, z_valence=22.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Eu │  Eu.pz-sp-hgh.UPF │           17.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Eu, z_valence=17.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       F │      F.pz-hgh.UPF │            7.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=F, z_valence=7.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Fe │     Fe.pz-hgh.UPF │            8.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Fe, z_valence=8.0) │
│      Fe │  Fe.pz-sp-hgh.UPF │           16.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Fe, z_valence=16.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ga │   Ga.pz-d-hgh.UPF │           13.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ga, z_valence=13.0) │
│      Ga │     Ga.pz-hgh.UPF │            3.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ga, z_valence=3.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Gd │  Gd.pz-sp-hgh.UPF │           18.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Gd, z_valence=18.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ge │     Ge.pz-hgh.UPF │            4.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ge, z_valence=4.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       H │      H.pz-hgh.UPF │            1.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=H, z_valence=1.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      He │     He.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=He, z_valence=2.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Hf │     Hf.pz-hgh.UPF │           12.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Hf, z_valence=12.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Hg │   Hg.pz-d-hgh.UPF │           12.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Hg, z_valence=12.0) │
│      Hg │     Hg.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Hg, z_valence=2.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ho │  Ho.pz-sp-hgh.UPF │           21.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ho, z_valence=21.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       I │      I.pz-hgh.UPF │            7.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=I, z_valence=7.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      In │   In.pz-d-hgh.UPF │           13.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=In, z_valence=13.0) │
│      In │     In.pz-hgh.UPF │            3.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=In, z_valence=3.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ir │     Ir.pz-hgh.UPF │            9.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ir, z_valence=9.0) │
│      Ir │  Ir.pz-sp-hgh.UPF │           17.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ir, z_valence=17.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       K │      K.pz-hgh.UPF │            1.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=K, z_valence=1.0) │
│       K │   K.pz-sp-hgh.UPF │            9.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=K, z_valence=9.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Kr │     Kr.pz-hgh.UPF │            8.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Kr, z_valence=8.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      La │     La.pz-hgh.UPF │           11.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=La, z_valence=11.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Lu │  La.pz-sp-hgh.UPF │           25.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Lu, z_valence=25.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Li │     Li.pz-hgh.UPF │            1.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Li, z_valence=1.0) │
│      Li │   Li.pz-s-hgh.UPF │            3.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Li, z_valence=3.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Mg │     Mg.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Mg, z_valence=2.0) │
│      Mg │  Mg.pz-sp-hgh.UPF │           10.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Mg, z_valence=10.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Mn │     Mn.pz-hgh.UPF │            7.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Mn, z_valence=7.0) │
│      Mn │  Mn.pz-sp-hgh.UPF │           15.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Mn, z_valence=15.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Mo │     Mo.pz-hgh.UPF │            6.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Mo, z_valence=6.0) │
│      Mo │  Mo.pz-sp-hgh.UPF │           14.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Mo, z_valence=14.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       N │      N.pz-hgh.UPF │            5.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=N, z_valence=5.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Na │     Na.pz-hgh.UPF │            1.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Na, z_valence=1.0) │
│      Na │  Na.pz-sp-hgh.UPF │            9.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Na, z_valence=9.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Nb │     Nb.pz-hgh.UPF │            5.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Nb, z_valence=5.0) │
│      Nb │  Nb.pz-sp-hgh.UPF │           13.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Nb, z_valence=13.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Nd │  Nd.pz-sp-hgh.UPF │           14.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Nd, z_valence=14.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ne │     Ne.pz-hgh.UPF │            8.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ne, z_valence=8.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ni │     Ni.pz-hgh.UPF │           10.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ni, z_valence=10.0) │
│      Ni │  Ni.pz-sp-hgh.UPF │           18.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ni, z_valence=18.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       O │      O.pz-hgh.UPF │            6.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=O, z_valence=6.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Os │     Os.pz-hgh.UPF │            8.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Os, z_valence=8.0) │
│      Os │  Os.pz-sp-hgh.UPF │           16.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Os, z_valence=16.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       P │      P.pz-hgh.UPF │            5.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=P, z_valence=5.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Pb │     Pb.pz-hgh.UPF │            4.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Pb, z_valence=4.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Pd │     Pd.pz-hgh.UPF │           10.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Pd, z_valence=10.0) │
│      Pd │  Pd.pz-sp-hgh.UPF │           18.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Pd, z_valence=18.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Pm │  Pm.pz-sp-hgh.UPF │           15.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Pm, z_valence=15.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Po │     Po.pz-hgh.UPF │            6.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Po, z_valence=6.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Pr │  Pr.pz-sp-hgh.UPF │           13.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Pr, z_valence=13.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Pt │     Pt.pz-hgh.UPF │           10.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Pt, z_valence=10.0) │
│      Pt │  Pt.pz-sp-hgh.UPF │           18.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Pt, z_valence=18.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Rb │     Rb.pz-hgh.UPF │            1.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Rb, z_valence=1.0) │
│      Rb │  Rb.pz-sp-hgh.UPF │            9.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Rb, z_valence=9.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Re │     Re.pz-hgh.UPF │            7.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Re, z_valence=7.0) │
│      Re │  Re.pz-sp-hgh.UPF │           15.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Re, z_valence=15.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Rh │     Rh.pz-hgh.UPF │            9.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Rh, z_valence=9.0) │
│      Rh │  Rh.pz-sp-hgh.UPF │           17.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Rh, z_valence=17.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Rn │     Rn.pz-hgh.UPF │            8.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Rn, z_valence=8.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ru │     Ru.pz-hgh.UPF │            8.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ru, z_valence=8.0) │
│      Ru │  Ru.pz-sp-hgh.UPF │           16.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ru, z_valence=16.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       S │      S.pz-hgh.UPF │            6.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=S, z_valence=6.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Sb │     Sb.pz-hgh.UPF │            5.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Sb, z_valence=5.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Sc │     Sc.pz-hgh.UPF │            3.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Sc, z_valence=3.0) │
│      Sc │  Sc.pz-sp-hgh.UPF │           11.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Sc, z_valence=11.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Se │     Se.pz-hgh.UPF │            6.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Se, z_valence=6.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Si │     Si.pz-hgh.UPF │            4.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Si, z_valence=4.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Sm │  Sm.pz-sp-hgh.UPF │           16.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Sm, z_valence=16.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Sn │     Sn.pz-hgh.UPF │            4.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Sn, z_valence=4.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Sr │     Sr.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Sr, z_valence=2.0) │
│      Sr │  Sr.pz-sp-hgh.UPF │           10.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Sr, z_valence=10.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ta │     Ta.pz-hgh.UPF │            5.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ta, z_valence=5.0) │
│      Ta │  Ta.pz-sp-hgh.UPF │           13.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ta, z_valence=13.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Tb │  Tb.pz-sp-hgh.UPF │           19.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Tb, z_valence=19.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Tc │     Tc.pz-hgh.UPF │            7.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Tc, z_valence=7.0) │
│      Tc │  Tc.pz-sp-hgh.UPF │           15.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Tc, z_valence=15.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Te │     Te.pz-hgh.UPF │            6.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Te, z_valence=6.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ti │     Ti.pz-hgh.UPF │            4.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ti, z_valence=4.0) │
│      Ti │  Ti.pz-sp-hgh.UPF │           12.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ti, z_valence=12.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Tl │   Tl.pz-d-hgh.UPF │           13.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Tl, z_valence=13.0) │
│      Tl │     Tl.pz-hgh.UPF │            3.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Tl, z_valence=3.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Tm │  Tm.pz-sp-hgh.UPF │           23.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Tm, z_valence=23.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       V │      V.pz-hgh.UPF │            5.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=V, z_valence=5.0) │
│       V │   V.pz-sp-hgh.UPF │           13.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=V, z_valence=13.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       W │      W.pz-hgh.UPF │            6.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=W, z_valence=6.0) │
│       W │   W.pz-sp-hgh.UPF │           14.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=W, z_valence=14.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Xe │     Xe.pz-hgh.UPF │            8.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Xe, z_valence=8.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       Y │      Y.pz-hgh.UPF │            3.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=Y, z_valence=3.0) │
│       Y │   Y.pz-sp-hgh.UPF │           11.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Y, z_valence=11.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Yb │  Yb.pz-sp-hgh.UPF │           24.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Yb, z_valence=24.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Zn │   Zn.pz-d-hgh.UPF │           12.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Zn, z_valence=12.0) │
│      Zn │     Zn.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Zn, z_valence=2.0) │
│      Zn │ Zn.pz-spd-hgh.UPF │           20.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Zn, z_valence=20.0) │
├─────────┼───────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Zr │     Zr.pz-hgh.UPF │            4.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Zr, z_valence=4.0) │
│      Zr │  Zr.pz-sp-hgh.UPF │           12.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Zr, z_valence=12.0) │
└─────────┴───────────────────┴────────────────┴───────┴────────────┴─────────┴───────────────────┴─────────────────────────────────────┘
┌─────────┬──────────────────┬────────────────┬───────┬────────────┬─────────┬───────────────────┬─────────────────────────────────────┐
│ Element │         Filename │ Valence Charge │  NLCC │ Spin Orbit │  Format │         Formalism │                                File │
├─────────┼──────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ba │    Ba.pz-hgh.UPF │            2.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ba, z_valence=2.0) │
│      Ba │ Ba.pz-sp-hgh.UPF │           10.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ba, z_valence=10.0) │
├─────────┼──────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│       O │     O.pz-hgh.UPF │            6.0 │ false │      false │ UpfFile │ NormConservingPsP │   UpfFile(element=O, z_valence=6.0) │
├─────────┼──────────────────┼────────────────┼───────┼────────────┼─────────┼───────────────────┼─────────────────────────────────────┤
│      Ti │    Ti.pz-hgh.UPF │            4.0 │ false │      false │ UpfFile │ NormConservingPsP │  UpfFile(element=Ti, z_valence=4.0) │
│      Ti │ Ti.pz-sp-hgh.UPF │           12.0 │ false │      false │ UpfFile │ NormConservingPsP │ UpfFile(element=Ti, z_valence=12.0) │
└─────────┴──────────────────┴────────────────┴───────┴────────────┴─────────┴───────────────────┴─────────────────────────────────────┘

2. Loading pseudopotential files

To load an individual pseudopotential file, use load_psp_file, specifying the family name or directory and the filename of the pseudopotential

Ba_psp_file = load_psp_file("hgh_lda_upf", "Ba.pz-sp-hgh.UPF")
UpfFile

PseudoPotentialIO distinguishes between pseudopotential files and the pseudopotentials themselves. Structures like HghFile, UpfFile, and Psp8File correspond to pseudopotential file formats and make the quantities that these files contain directly available, with no unit conversion or processing. For example, we can take a look at the author field from the header in the barium UPF pseudopotential we just loaded

Ba_psp_file.header.author
"Goedecker/Hartwigsen/Hutter/Teter"

We can also check that the properties of Bapspfile match up with the sections of a UPF file

propertynames(Ba_psp_file)
(:checksum, :version, :info, :header, :mesh, :nlcc, :local_, :nonlocal, :pswfc, :full_wfc, :rhoatom, :spin_orb, :paw, :gipaw)

3. Loading pseudopotentials

Once you've decided that you would like to use a given pseudopotential for a calculation, either convert its PsPFile struct a corresponding pseudopotential structure

Ba_psp_from_File = load_psp(Ba_psp_file)
NormConservingPsP{Float64}

, or load the pseudopotential structure directly from the file using load_psp

Ba_psp_from_disk = load_psp("hgh_lda_upf", "Ba.pz-sp-hgh.UPF")
NormConservingPsP{Float64}

We can confirm that these pseudopotentials are identical

Ba_psp_from_File == Ba_psp_from_disk
true

This procedure has processed the contents of the UPF file (on disk) or the UpfFile struct into a common and consistent data representation that PseudoPotentialIO uses for calculations. We can see that the contents have changed by looking at the property names of our new UpfPsP struct

propertynames(Ba_psp_from_disk)
(:checksum, :Zatom, :Zval, :lmax, :r, :dr, :Vloc, :β, :D, :χ, :ρcore, :ρval)

4. Inspecting pseudopotential quantities

One thing that we might want to do with a processed pseudopotential is to visualize some of the quantities it contains. Let's plot the Kleinman-Bylander projectors from a PseudoDojo barium pseudopotential

Ba_psp = load_psp("pd_nc_sr_pbesol_standard_0.4.1_upf", "Ba.upf");
let
    linestyles = [:solid, :dash, :dot]
    colors = Colors.JULIA_LOGO_COLORS
    fig = Figure(); ax = Axis(fig[1,1], xlabel="r [a₀]", ylabel="β(r)")
    for l in angular_momenta(Ba_psp)                  # Iterate over each angular momentum 0:lmax
        color = colors[l+1]
        for n in projector_radial_indices(Ba_psp, l)  # Iterate over each projector at l 1:nmax
            linestyle = linestyles[n]
            r²βln = Ba_psp.β[l][n]                    # Projector multiplied by r²
            i_rc_ln = lastindex(r²βln)                # Cutoff radius index
            βln = r²βln ./ Ba_psp.r[1:i_rc_ln].^2     # Remove the r² prefactor
            lines!(ax, Ba_psp.r[1:i_rc_ln], βln, label="|β[$l][$n]⟩",
                   linestyle=linestyle, color=color)
        end
    end
    axislegend()
    fig
end