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