Running PyZFS with GPAW

This tutorial assumes that a density functional theory calculation with GPAW has already been completed.

1 Command line interface

[1]:
%%bash
pyzfs --wfcfmt gpaw --gpwfile c3h6.gpw

# Use the --ae flag to enable all-electron wavefunction reconstruction:
# pyzfs --wfcfmt gpaw --gpwfile c3h6.gpw --ae True
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PyZFS code 2.3
2026-03-14 00:01:16
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pyzfs.run: setting working directory as "."...

GPAWWavefunctionLoader: scanning current working directory "/pyzfs/examples/c3h6_gpaw"...

   nuwfcs = 10, ndwfcs = 8, nwfcs = 18
     spin = up     band = 0     file = None
     spin = up     band = 1     file = None
     spin = up     band = 2     file = None
     spin = up     band = 3     file = None
     spin = up     band = 4     file = None
     spin = up     band = 5     file = None
     spin = up     band = 6     file = None
     spin = up     band = 7     file = None
     spin = up     band = 8     file = None
     spin = up     band = 9     file = None
     spin = down     band = 0     file = None
     spin = down     band = 1     file = None
     spin = down     band = 2     file = None
     spin = down     band = 3     file = None
     spin = down     band = 4     file = None
     spin = down     band = 5     file = None
     spin = down     band = 6     file = None
     spin = down     band = 7     file = None

System Overview:
  Cell:
{   'G1': array([0.2313749, 0.       , 0.       ]),
    'G2': array([0.        , 0.28045443, 0.        ]),
    'G3': array([0.        , 0.        , 0.26214776]),
    'R1': array([27.15586346,  0.        ,  0.        ]),
    'R2': array([ 0.        , 22.40358735,  0.        ]),
    'R3': array([ 0.        ,  0.        , 23.96810648]),
    'ase_cell': Atoms(symbols='', pbc=True, cell=[14.370339824327978, 11.855530355070583, 12.683442587690196]),
    'omega': np.float64(14581.92655983419)}
  FFT Grid:
{   'N': np.int64(155520),
    'n1': np.int64(60),
    'n2': np.int64(48),
    'n3': np.int64(54)}


pyzfs.run: instantializing ZFSCalculation with following arguments...
{ 'comm': <mpi4py.MPI.Intracomm object at 0x7f1995ccad30>,
  'memory': 'critical',
  'prefix': 'pwscf',
  'wfcloader': <pyzfs.common.wfc.gpawloader.GPAWWavefunctionLoader object at 0x7f198e1ce510>}


  Zero Field Splitting Calculation Created...


    ProcessGrid (square) info:
    rank -> (irow, icol) mapping:
    [[0 0]]
    (irow, icol) -> rank mapping:
    [[0]]
    rank  onroot  nrow  ncol  size  irow  icol  is_active  rowcomm_rank  colcomm_rank
      0    True      1    1    1    0    0    True    0    0

  Creating I array...

    DistributedMatrix info: I
    irow  icol  nrow  ncol  m  mloc  mstart  mend  n  nloc  nstart  nend  val.shape
      0    0    1    1    18    18    0    18    18    18    0    18     (18, 18, 6)
    Index map:
    [[[ 0 18 18  0 18 18]]]

  Memory usage (on process 0):
    iorb_psir_map 0.00 MB
    iorb_rhog_map 0.00 MB
    I          0.01 MB

  Total memory usage (on process 0): 399.99 MB
  Total memory usage (all processes): 399.99 MB

  GPAWWavefunctionLoader: loading orbitals into memory... (memory mode: "critical")


  Memory usage (on process 0):
    iorb_psir_map 0.00 MB
    iorb_rhog_map 0.00 MB
    I          0.01 MB

  Total memory usage (on process 0): 400.24 MB
  Total memory usage (all processes): 400.24 MB
  Time elapsed for loading wfc: 0s

  Computing dipole-dipole interaction tensor in G space...


  Memory usage (on process 0):
    iorb_psir_map 0.00 MB
    iorb_rhog_map 0.00 MB
    ddig       7.12 MB
    I          0.01 MB

  Total memory usage (on process 0): 420.42 MB
  Total memory usage (all processes): 420.42 MB

  Iterating over pairs...

  (process 0) 2 pairs (1%) computed in 0.020327s...
  (process 0) 4 pairs (2%) computed in 0.027563s...
  (process 0) 6 pairs (3%) computed in 0.025974s...
  (process 0) 8 pairs (4%) computed in 0.025781s...
  (process 0) 10 pairs (5%) computed in 0.025646s...
  (process 0) 12 pairs (7%) computed in 0.025764s...
  (process 0) 14 pairs (8%) computed in 0.025710s...
  (process 0) 16 pairs (9%) computed in 0.026038s...
  (process 0) 18 pairs (10%) computed in 0.025810s...
  (process 0) 20 pairs (11%) computed in 0.012974s...
  (process 0) 22 pairs (12%) computed in 0.025950s...
  (process 0) 24 pairs (14%) computed in 0.026118s...
  (process 0) 26 pairs (15%) computed in 0.025887s...
  (process 0) 28 pairs (16%) computed in 0.025714s...
  (process 0) 30 pairs (17%) computed in 0.025816s...
  (process 0) 32 pairs (18%) computed in 0.025526s...
  (process 0) 34 pairs (19%) computed in 0.025491s...
  (process 0) 36 pairs (21%) computed in 0.012665s...
  (process 0) 38 pairs (22%) computed in 0.025556s...
  (process 0) 40 pairs (23%) computed in 0.025527s...
  (process 0) 42 pairs (24%) computed in 0.025675s...
  (process 0) 44 pairs (25%) computed in 0.025225s...
  (process 0) 46 pairs (26%) computed in 0.025397s...
  (process 0) 48 pairs (28%) computed in 0.025561s...
  (process 0) 50 pairs (29%) computed in 0.025226s...
  (process 0) 52 pairs (30%) computed in 0.013080s...
  (process 0) 54 pairs (31%) computed in 0.025993s...
  (process 0) 56 pairs (32%) computed in 0.025420s...
  (process 0) 58 pairs (33%) computed in 0.025922s...
  (process 0) 60 pairs (35%) computed in 0.025743s...
  (process 0) 62 pairs (36%) computed in 0.025208s...
  (process 0) 64 pairs (37%) computed in 0.025340s...
  (process 0) 66 pairs (38%) computed in 0.025699s...
  (process 0) 68 pairs (39%) computed in 0.012806s...
  (process 0) 70 pairs (40%) computed in 0.025345s...
  (process 0) 72 pairs (42%) computed in 0.025223s...
  (process 0) 74 pairs (43%) computed in 0.025192s...
  (process 0) 76 pairs (44%) computed in 0.025225s...
  (process 0) 78 pairs (45%) computed in 0.025497s...
  (process 0) 80 pairs (46%) computed in 0.025490s...
  (process 0) 82 pairs (47%) computed in 0.012795s...
  (process 0) 84 pairs (49%) computed in 0.025488s...
  (process 0) 86 pairs (50%) computed in 0.025285s...
  (process 0) 88 pairs (51%) computed in 0.025293s...
  (process 0) 90 pairs (52%) computed in 0.025497s...
  (process 0) 92 pairs (53%) computed in 0.025468s...
  (process 0) 94 pairs (54%) computed in 0.012746s...
  (process 0) 96 pairs (56%) computed in 0.025421s...
  (process 0) 98 pairs (57%) computed in 0.025536s...
  (process 0) 100 pairs (58%) computed in 0.025330s...
  (process 0) 102 pairs (59%) computed in 0.025140s...
  (process 0) 104 pairs (60%) computed in 0.025969s...
  (process 0) 106 pairs (61%) computed in 0.012880s...
  (process 0) 108 pairs (63%) computed in 0.032462s...
  (process 0) 110 pairs (64%) computed in 0.025712s...
  (process 0) 112 pairs (65%) computed in 0.026369s...
  (process 0) 114 pairs (66%) computed in 0.026222s...
  (process 0) 116 pairs (67%) computed in 0.035829s...
  (process 0) 118 pairs (69%) computed in 0.014756s...
  (process 0) 120 pairs (70%) computed in 0.028481s...
  (process 0) 122 pairs (71%) computed in 0.026611s...
  (process 0) 124 pairs (72%) computed in 0.025509s...
  (process 0) 126 pairs (73%) computed in 0.025204s...
  (process 0) 128 pairs (74%) computed in 0.012682s...
  (process 0) 130 pairs (76%) computed in 0.025781s...
  (process 0) 132 pairs (77%) computed in 0.025099s...
  (process 0) 134 pairs (78%) computed in 0.025551s...
  (process 0) 136 pairs (79%) computed in 0.012666s...
  (process 0) 138 pairs (80%) computed in 0.025178s...
  (process 0) 140 pairs (81%) computed in 0.025211s...
  (process 0) 142 pairs (83%) computed in 0.025231s...
  (process 0) 144 pairs (84%) computed in 0.012814s...
  (process 0) 146 pairs (85%) computed in 0.025682s...
  (process 0) 148 pairs (86%) computed in 0.025557s...
  (process 0) 150 pairs (87%) computed in 0.025406s...
  (process 0) 152 pairs (88%) computed in 0.012986s...
  (process 0) 154 pairs (90%) computed in 0.025600s...
  (process 0) 156 pairs (91%) computed in 0.025279s...
  (process 0) 158 pairs (92%) computed in 0.012890s...
  (process 0) 160 pairs (93%) computed in 0.025229s...
  (process 0) 162 pairs (94%) computed in 0.012604s...
  (process 0) 164 pairs (95%) computed in 0.025602s...
  (process 0) 166 pairs (97%) computed in 0.012550s...
  (process 0) 168 pairs (98%) computed in 0.025426s...
  (process 0) 170 pairs (99%) computed in 0.012820s...


  Total D tensor (MHz):
  [[-8.93115239e+02  1.35223598e-12 -1.72876769e-08]
   [ 1.35223598e-12 -1.19850015e+03 -1.69043392e-12]
   [-1.72876769e-08 -1.69043392e-12  2.09161539e+03]]
  D eigenvalues (MHz):
  [ -893.11523938  2091.61538592 -1198.50014655]
  D eigenvectors:
  [1.00000000e+00 4.42797254e-15 5.79203924e-12]
  [-5.79203924e-12 -3.28702997e-16  1.00000000e+00]
  [-4.42797254e-15  1.00000000e+00  4.94135131e-16]
  Dx, Dy, Dz (|Dz| > |Dx| > |Dy|) (MHz):
   -1198.5001465474622 -893.1152393754155 2091.6153859228743
  Scalar D = 3137.42 MHz, E = -152.69 MHz
  Time elapsed for pair iteration: 2s

2 Python library interface

2.1 Load PyZFS

[2]:
from pyzfs.common.wfc.qeh5loader import GPAWWavefunctionLoader
from pyzfs.zfs.main import ZFSCalculation

2.2 Construct wavefunction loader

[3]:
wfcloader = GPAWWavefunctionLoader(gpwfile="c3h6.gpw")

# With all-electron wavefunction reconstruction:
# wfcloader = GPAWWavefunctionLoader(gpwfile="c3h6.gpw", ae=True)

GPAWWavefunctionLoader: scanning current working directory "/pyzfs/examples/c3h6_gpaw"...

   nuwfcs = 10, ndwfcs = 8, nwfcs = 18
     spin = up     band = 0     file = None
     spin = up     band = 1     file = None
     spin = up     band = 2     file = None
     spin = up     band = 3     file = None
     spin = up     band = 4     file = None
     spin = up     band = 5     file = None
     spin = up     band = 6     file = None
     spin = up     band = 7     file = None
     spin = up     band = 8     file = None
     spin = up     band = 9     file = None
     spin = down     band = 0     file = None
     spin = down     band = 1     file = None
     spin = down     band = 2     file = None
     spin = down     band = 3     file = None
     spin = down     band = 4     file = None
     spin = down     band = 5     file = None
     spin = down     band = 6     file = None
     spin = down     band = 7     file = None

System Overview:
  Cell:
{   'G1': array([0.2313749, 0.       , 0.       ]),
    'G2': array([0.        , 0.28045443, 0.        ]),
    'G3': array([0.        , 0.        , 0.26214776]),
    'R1': array([27.15586346,  0.        ,  0.        ]),
    'R2': array([ 0.        , 22.40358735,  0.        ]),
    'R3': array([ 0.        ,  0.        , 23.96810648]),
    'ase_cell': Atoms(symbols='', pbc=True, cell=[14.370339824327978, 11.855530355070583, 12.683442587690196]),
    'omega': np.float64(14581.92655983419)}
  FFT Grid:
{   'N': np.int64(155520),
    'n1': np.int64(60),
    'n2': np.int64(48),
    'n3': np.int64(54)}

2.3 Construct ZFSCalculation

[4]:
zfscalc = ZFSCalculation(wfcloader=wfcloader)


  Zero Field Splitting Calculation Created...


    ProcessGrid (square) info:
    rank -> (irow, icol) mapping:
    [[0 0]]
    (irow, icol) -> rank mapping:
    [[0]]
    rank  onroot  nrow  ncol  size  irow  icol  is_active  rowcomm_rank  colcomm_rank
      0    True      1    1    1    0    0    True    0    0

  Creating I array...

    DistributedMatrix info: I
    irow  icol  nrow  ncol  m  mloc  mstart  mend  n  nloc  nstart  nend  val.shape
      0    0    1    1    18    18    0    18    18    18    0    18     (18, 18, 6)
    Index map:
    [[[ 0 18 18  0 18 18]]]

  Memory usage (on process 0):
    iorb_psir_map 0.00 MB
    iorb_rhog_map 0.00 MB
    I          0.01 MB

  Total memory usage (on process 0): 399.99 MB
  Total memory usage (all processes): 399.99 MB

2.4 Perform ZFS calculation

[5]:
zfscalc.solve()

  GPAWWavefunctionLoader: loading orbitals into memory... (memory mode: "critical")


  Memory usage (on process 0):
    iorb_psir_map 0.00 MB
    iorb_rhog_map 0.00 MB
    I          0.01 MB

  Total memory usage (on process 0): 400.24 MB
  Total memory usage (all processes): 400.24 MB
  Time elapsed for loading wfc: 0s

  Computing dipole-dipole interaction tensor in G space...


  Memory usage (on process 0):
    iorb_psir_map 0.00 MB
    iorb_rhog_map 0.00 MB
    ddig       7.12 MB
    I          0.01 MB

  Total memory usage (on process 0): 420.42 MB
  Total memory usage (all processes): 420.42 MB

  Iterating over pairs...

  (process 0) 2 pairs (1%) computed in 0.020327s...
  (process 0) 4 pairs (2%) computed in 0.027563s...
  (process 0) 6 pairs (3%) computed in 0.025974s...
  (process 0) 8 pairs (4%) computed in 0.025781s...
  (process 0) 10 pairs (5%) computed in 0.025646s...
  (process 0) 12 pairs (7%) computed in 0.025764s...
  (process 0) 14 pairs (8%) computed in 0.025710s...
  (process 0) 16 pairs (9%) computed in 0.026038s...
  (process 0) 18 pairs (10%) computed in 0.025810s...
  (process 0) 20 pairs (11%) computed in 0.012974s...
  (process 0) 22 pairs (12%) computed in 0.025950s...
  (process 0) 24 pairs (14%) computed in 0.026118s...
  (process 0) 26 pairs (15%) computed in 0.025887s...
  (process 0) 28 pairs (16%) computed in 0.025714s...
  (process 0) 30 pairs (17%) computed in 0.025816s...
  (process 0) 32 pairs (18%) computed in 0.025526s...
  (process 0) 34 pairs (19%) computed in 0.025491s...
  (process 0) 36 pairs (21%) computed in 0.012665s...
  (process 0) 38 pairs (22%) computed in 0.025556s...
  (process 0) 40 pairs (23%) computed in 0.025527s...
  (process 0) 42 pairs (24%) computed in 0.025675s...
  (process 0) 44 pairs (25%) computed in 0.025225s...
  (process 0) 46 pairs (26%) computed in 0.025397s...
  (process 0) 48 pairs (28%) computed in 0.025561s...
  (process 0) 50 pairs (29%) computed in 0.025226s...
  (process 0) 52 pairs (30%) computed in 0.013080s...
  (process 0) 54 pairs (31%) computed in 0.025993s...
  (process 0) 56 pairs (32%) computed in 0.025420s...
  (process 0) 58 pairs (33%) computed in 0.025922s...
  (process 0) 60 pairs (35%) computed in 0.025743s...
  (process 0) 62 pairs (36%) computed in 0.025208s...
  (process 0) 64 pairs (37%) computed in 0.025340s...
  (process 0) 66 pairs (38%) computed in 0.025699s...
  (process 0) 68 pairs (39%) computed in 0.012806s...
  (process 0) 70 pairs (40%) computed in 0.025345s...
  (process 0) 72 pairs (42%) computed in 0.025223s...
  (process 0) 74 pairs (43%) computed in 0.025192s...
  (process 0) 76 pairs (44%) computed in 0.025225s...
  (process 0) 78 pairs (45%) computed in 0.025497s...
  (process 0) 80 pairs (46%) computed in 0.025490s...
  (process 0) 82 pairs (47%) computed in 0.012795s...
  (process 0) 84 pairs (49%) computed in 0.025488s...
  (process 0) 86 pairs (50%) computed in 0.025285s...
  (process 0) 88 pairs (51%) computed in 0.025293s...
  (process 0) 90 pairs (52%) computed in 0.025497s...
  (process 0) 92 pairs (53%) computed in 0.025468s...
  (process 0) 94 pairs (54%) computed in 0.012746s...
  (process 0) 96 pairs (56%) computed in 0.025421s...
  (process 0) 98 pairs (57%) computed in 0.025536s...
  (process 0) 100 pairs (58%) computed in 0.025330s...
  (process 0) 102 pairs (59%) computed in 0.025140s...
  (process 0) 104 pairs (60%) computed in 0.025969s...
  (process 0) 106 pairs (61%) computed in 0.012880s...
  (process 0) 108 pairs (63%) computed in 0.032462s...
  (process 0) 110 pairs (64%) computed in 0.025712s...
  (process 0) 112 pairs (65%) computed in 0.026369s...
  (process 0) 114 pairs (66%) computed in 0.026222s...
  (process 0) 116 pairs (67%) computed in 0.035829s...
  (process 0) 118 pairs (69%) computed in 0.014756s...
  (process 0) 120 pairs (70%) computed in 0.028481s...
  (process 0) 122 pairs (71%) computed in 0.026611s...
  (process 0) 124 pairs (72%) computed in 0.025509s...
  (process 0) 126 pairs (73%) computed in 0.025204s...
  (process 0) 128 pairs (74%) computed in 0.012682s...
  (process 0) 130 pairs (76%) computed in 0.025781s...
  (process 0) 132 pairs (77%) computed in 0.025099s...
  (process 0) 134 pairs (78%) computed in 0.025551s...
  (process 0) 136 pairs (79%) computed in 0.012666s...
  (process 0) 138 pairs (80%) computed in 0.025178s...
  (process 0) 140 pairs (81%) computed in 0.025211s...
  (process 0) 142 pairs (83%) computed in 0.025231s...
  (process 0) 144 pairs (84%) computed in 0.012814s...
  (process 0) 146 pairs (85%) computed in 0.025682s...
  (process 0) 148 pairs (86%) computed in 0.025557s...
  (process 0) 150 pairs (87%) computed in 0.025406s...
  (process 0) 152 pairs (88%) computed in 0.012986s...
  (process 0) 154 pairs (90%) computed in 0.025600s...
  (process 0) 156 pairs (91%) computed in 0.025279s...
  (process 0) 158 pairs (92%) computed in 0.012890s...
  (process 0) 160 pairs (93%) computed in 0.025229s...
  (process 0) 162 pairs (94%) computed in 0.012604s...
  (process 0) 164 pairs (95%) computed in 0.025602s...
  (process 0) 166 pairs (97%) computed in 0.012550s...
  (process 0) 168 pairs (98%) computed in 0.025426s...
  (process 0) 170 pairs (99%) computed in 0.012820s...


  Total D tensor (MHz):
  [[-8.93115239e+02  1.35223598e-12 -1.72876769e-08]
   [ 1.35223598e-12 -1.19850015e+03 -1.69043392e-12]
   [-1.72876769e-08 -1.69043392e-12  2.09161539e+03]]
  D eigenvalues (MHz):
  [ -893.11523938  2091.61538592 -1198.50014655]
  D eigenvectors:
  [1.00000000e+00 4.42797254e-15 5.79203924e-12]
  [-5.79203924e-12 -3.28702997e-16  1.00000000e+00]
  [-4.42797254e-15  1.00000000e+00  4.94135131e-16]
  Dx, Dy, Dz (|Dz| > |Dx| > |Dy|) (MHz):
   -1198.5001465474622 -893.1152393754155 2091.6153859228743
  Scalar D = 3137.42 MHz, E = -152.69 MHz
  Time elapsed for pair iteration: 2s