Running PyZFS with Qbox
This tutorial assumes that a density functional theory calculation with Qbox has already been completed.
[1]:
%cd ../../examples/o2_qbox_xml
/pyzfs/examples/o2_qbox_xml
1 Command line interface
[2]:
%%bash
pyzfs --wfcfmt qbox --filename o2.xml
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PyZFS code 2.3
2026-03-14 22:43:42
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pyzfs.run: setting working directory as "."...
QboxWavefunctionLoader: scanning current working directory "/pyzfs/examples/o2_qbox_xml"...
Reading wavefunction from file o2.xml
nuwfcs = 7, ndwfcs = 5, nwfcs = 12
spin = up band = 1 file = o2.xml
spin = up band = 2 file = o2.xml
spin = up band = 3 file = o2.xml
spin = up band = 4 file = o2.xml
spin = up band = 5 file = o2.xml
spin = up band = 6 file = o2.xml
spin = up band = 7 file = o2.xml
spin = down band = 1 file = o2.xml
spin = down band = 2 file = o2.xml
spin = down band = 3 file = o2.xml
spin = down band = 4 file = o2.xml
spin = down band = 5 file = o2.xml
System Overview:
Cell:
{ 'G1': array([0.66497797, 0. , 0. ]),
'G2': array([0. , 0.66497797, 0. ]),
'G3': array([0. , 0. , 0.66497797]),
'R1': array([9.448712, 0. , 0. ]),
'R2': array([0. , 9.448712, 0. ]),
'R3': array([0. , 0. , 9.448712]),
'ase_cell': Atoms(symbols='O2', pbc=True, cell=[5.00006941616, 5.00006941616, 5.00006941616]),
'omega': 843.5636071689257}
FFT Grid:
{'N': 4096, 'n1': 16, 'n2': 16, 'n3': 16}
pyzfs.run: instantializing ZFSCalculation with following arguments...
{ 'ae': False,
'ae_reduce': 4,
'comm': <mpi4py.MPI.Intracomm object at 0x102a003b0>,
'memory': 'critical',
'prefix': 'pwscf',
'wfcloader': <pyzfs.common.wfc.qboxloader.QboxWavefunctionLoader object at 0x102a4b260>}
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 12 12 0 12 12 12 0 12 (12, 12, 6)
Index map:
[[[ 0 12 12 0 12 12]]]
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): 62.28 MB
Total memory usage (all processes): 62.28 MB
(process 0) 2 orbitals (16%) loaded in 0.000315s...
(process 0) 4 orbitals (33%) loaded in 0.000201s...
(process 0) 6 orbitals (50%) loaded in 0.000195s...
(process 0) 8 orbitals (66%) loaded in 0.000186s...
(process 0) 10 orbitals (83%) loaded in 0.000196s...
(process 0) 12 orbitals (100%) loaded in 0.000175s...
Memory usage (on process 0):
iorb_psir_map 0.38 MB
iorb_rhog_map 0.00 MB
I 0.01 MB
Total memory usage (on process 0): 63.03 MB
Total memory usage (all processes): 63.03 MB
Time elapsed for loading wfc: 0s
Computing dipole-dipole interaction tensor in G space...
Memory usage (on process 0):
iorb_psir_map 0.38 MB
iorb_rhog_map 0.00 MB
ddig 0.19 MB
I 0.01 MB
Total memory usage (on process 0): 63.61 MB
Total memory usage (all processes): 63.61 MB
Iterating over pairs...
(process 0) 1 pairs (1%) computed in 0.000017s...
(process 0) 2 pairs (2%) computed in 0.001132s...
(process 0) 3 pairs (3%) computed in 0.000422s...
(process 0) 4 pairs (5%) computed in 0.000346s...
(process 0) 5 pairs (6%) computed in 0.000336s...
(process 0) 6 pairs (7%) computed in 0.000335s...
(process 0) 7 pairs (8%) computed in 0.000468s...
(process 0) 8 pairs (10%) computed in 0.000331s...
(process 0) 9 pairs (11%) computed in 0.000327s...
(process 0) 10 pairs (12%) computed in 0.000326s...
(process 0) 11 pairs (14%) computed in 0.000325s...
(process 0) 12 pairs (15%) computed in 0.000324s...
(process 0) 13 pairs (16%) computed in 0.000002s...
(process 0) 14 pairs (17%) computed in 0.000329s...
(process 0) 15 pairs (19%) computed in 0.000330s...
(process 0) 16 pairs (20%) computed in 0.000328s...
(process 0) 17 pairs (21%) computed in 0.000328s...
(process 0) 18 pairs (23%) computed in 0.000326s...
(process 0) 19 pairs (24%) computed in 0.000323s...
(process 0) 20 pairs (25%) computed in 0.000721s...
(process 0) 21 pairs (26%) computed in 0.000334s...
(process 0) 22 pairs (28%) computed in 0.000329s...
(process 0) 23 pairs (29%) computed in 0.000324s...
(process 0) 24 pairs (30%) computed in 0.000001s...
(process 0) 25 pairs (32%) computed in 0.000326s...
(process 0) 26 pairs (33%) computed in 0.000324s...
(process 0) 27 pairs (34%) computed in 0.000328s...
(process 0) 28 pairs (35%) computed in 0.000326s...
(process 0) 29 pairs (37%) computed in 0.000325s...
(process 0) 30 pairs (38%) computed in 0.001191s...
(process 0) 31 pairs (39%) computed in 0.000327s...
(process 0) 32 pairs (41%) computed in 0.000326s...
(process 0) 33 pairs (42%) computed in 0.000324s...
(process 0) 34 pairs (43%) computed in 0.000002s...
(process 0) 35 pairs (44%) computed in 0.000324s...
(process 0) 36 pairs (46%) computed in 0.000784s...
(process 0) 37 pairs (47%) computed in 0.000987s...
(process 0) 38 pairs (48%) computed in 0.000807s...
(process 0) 39 pairs (50%) computed in 0.000796s...
(process 0) 40 pairs (51%) computed in 0.000802s...
(process 0) 41 pairs (52%) computed in 0.000789s...
(process 0) 42 pairs (53%) computed in 0.000795s...
(process 0) 43 pairs (55%) computed in 0.000005s...
(process 0) 44 pairs (56%) computed in 0.000786s...
(process 0) 45 pairs (57%) computed in 0.000794s...
(process 0) 46 pairs (58%) computed in 0.000786s...
(process 0) 47 pairs (60%) computed in 0.000791s...
(process 0) 48 pairs (61%) computed in 0.000784s...
(process 0) 49 pairs (62%) computed in 0.000788s...
(process 0) 50 pairs (64%) computed in 0.000554s...
(process 0) 51 pairs (65%) computed in 0.000008s...
(process 0) 52 pairs (66%) computed in 0.000360s...
(process 0) 53 pairs (67%) computed in 0.000348s...
(process 0) 54 pairs (69%) computed in 0.000345s...
(process 0) 55 pairs (70%) computed in 0.000337s...
(process 0) 56 pairs (71%) computed in 0.000708s...
(process 0) 57 pairs (73%) computed in 0.000333s...
(process 0) 58 pairs (74%) computed in 0.000003s...
(process 0) 59 pairs (75%) computed in 0.000332s...
(process 0) 60 pairs (76%) computed in 0.000333s...
(process 0) 61 pairs (78%) computed in 0.000334s...
(process 0) 62 pairs (79%) computed in 0.000334s...
(process 0) 63 pairs (80%) computed in 0.000332s...
(process 0) 64 pairs (82%) computed in 0.000004s...
(process 0) 65 pairs (83%) computed in 0.000332s...
(process 0) 66 pairs (84%) computed in 0.000340s...
(process 0) 67 pairs (85%) computed in 0.000332s...
(process 0) 68 pairs (87%) computed in 0.000331s...
(process 0) 69 pairs (88%) computed in 0.000003s...
(process 0) 70 pairs (89%) computed in 0.000329s...
(process 0) 71 pairs (91%) computed in 0.000330s...
(process 0) 72 pairs (92%) computed in 0.000328s...
(process 0) 73 pairs (93%) computed in 0.000001s...
(process 0) 74 pairs (94%) computed in 0.000329s...
(process 0) 75 pairs (96%) computed in 0.000328s...
(process 0) 76 pairs (97%) computed in 0.000002s...
(process 0) 77 pairs (98%) computed in 0.000330s...
(process 0) 78 pairs (100%) computed in 0.000001s...
Total D tensor (MHz):
[[-8.35479598e+03 6.04449841e-01 2.29018026e-01]
[ 6.04449841e-01 -8.35479606e+03 1.24204179e-01]
[ 2.29018026e-01 1.24204179e-01 1.67095920e+04]]
D eigenvalues (MHz):
[-8355.40047224 -8354.19157483 16709.59204707]
D eigenvectors:
[ 7.07082904e-01 -7.07130657e-01 -2.95655974e-06]
[-7.07130657e-01 -7.07082904e-01 9.96530782e-06]
[9.13730752e-06 4.95562477e-06 1.00000000e+00]
Dx, Dy, Dz (|Dz| > |Dx| > |Dy|) (MHz):
-8355.400472244126 -8354.191574829296 16709.59204707317
Scalar D = 25064.39 MHz, E = -0.60 MHz
Time elapsed for pair iteration: 0s
2 Python library interface
2.1 Load PyZFS
[3]:
from pyzfs.common.wfc.qboxloader import QboxWavefunctionLoader
from pyzfs.zfs.main import ZFSCalculation
2.2 Construct wavefunction loader
[4]:
wfcloader = QboxWavefunctionLoader(filename="o2.xml")
QboxWavefunctionLoader: scanning current working directory "/pyzfs/examples/o2_qbox_xml"...
Reading wavefunction from file o2.xml
nuwfcs = 7, ndwfcs = 5, nwfcs = 12
spin = up band = 1 file = o2.xml
spin = up band = 2 file = o2.xml
spin = up band = 3 file = o2.xml
spin = up band = 4 file = o2.xml
spin = up band = 5 file = o2.xml
spin = up band = 6 file = o2.xml
spin = up band = 7 file = o2.xml
spin = down band = 1 file = o2.xml
spin = down band = 2 file = o2.xml
spin = down band = 3 file = o2.xml
spin = down band = 4 file = o2.xml
spin = down band = 5 file = o2.xml
System Overview:
Cell:
{ 'G1': array([0.66497797, 0. , 0. ]),
'G2': array([0. , 0.66497797, 0. ]),
'G3': array([0. , 0. , 0.66497797]),
'R1': array([9.448712, 0. , 0. ]),
'R2': array([0. , 9.448712, 0. ]),
'R3': array([0. , 0. , 9.448712]),
'ase_cell': Atoms(symbols='O2', pbc=True, cell=[5.00006941616, 5.00006941616, 5.00006941616]),
'omega': 843.5636071689257}
FFT Grid:
{'N': 4096, 'n1': 16, 'n2': 16, 'n3': 16}
2.3 Construct ZFSCalculation
[5]:
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 12 12 0 12 12 12 0 12 (12, 12, 6)
Index map:
[[[ 0 12 12 0 12 12]]]
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): 96.16 MB
Total memory usage (all processes): 96.16 MB
2.4 Perform ZFS calculation
[6]:
zfscalc.solve()
(process 0) 2 orbitals (16%) loaded in 0.004308s...
(process 0) 4 orbitals (33%) loaded in 0.003059s...
(process 0) 6 orbitals (50%) loaded in 0.001334s...
(process 0) 8 orbitals (66%) loaded in 0.001345s...
(process 0) 10 orbitals (83%) loaded in 0.001702s...
(process 0) 12 orbitals (100%) loaded in 0.001397s...
Memory usage (on process 0):
iorb_psir_map 0.38 MB
iorb_rhog_map 0.00 MB
I 0.01 MB
Total memory usage (on process 0): 97.00 MB
Total memory usage (all processes): 97.00 MB
Time elapsed for loading wfc: 0s
Computing dipole-dipole interaction tensor in G space...
Memory usage (on process 0):
iorb_psir_map 0.38 MB
iorb_rhog_map 0.00 MB
ddig 0.19 MB
I 0.01 MB
Total memory usage (on process 0): 97.91 MB
Total memory usage (all processes): 97.91 MB
Iterating over pairs...
(process 0) 1 pairs (1%) computed in 0.000040s...
(process 0) 2 pairs (2%) computed in 0.011990s...
(process 0) 3 pairs (3%) computed in 0.001393s...
(process 0) 4 pairs (5%) computed in 0.003238s...
(process 0) 5 pairs (6%) computed in 0.003851s...
(process 0) 6 pairs (7%) computed in 0.001558s...
(process 0) 7 pairs (8%) computed in 0.003500s...
(process 0) 8 pairs (10%) computed in 0.001206s...
(process 0) 9 pairs (11%) computed in 0.000735s...
(process 0) 10 pairs (12%) computed in 0.000854s...
(process 0) 11 pairs (14%) computed in 0.000749s...
(process 0) 12 pairs (15%) computed in 0.000895s...
(process 0) 13 pairs (16%) computed in 0.000010s...
(process 0) 14 pairs (17%) computed in 0.000733s...
(process 0) 15 pairs (19%) computed in 0.000779s...
(process 0) 16 pairs (20%) computed in 0.001832s...
(process 0) 17 pairs (21%) computed in 0.001529s...
(process 0) 18 pairs (23%) computed in 0.002410s...
(process 0) 19 pairs (24%) computed in 0.000934s...
(process 0) 20 pairs (25%) computed in 0.000796s...
(process 0) 21 pairs (26%) computed in 0.002261s...
(process 0) 22 pairs (28%) computed in 0.001467s...
(process 0) 23 pairs (29%) computed in 0.001356s...
(process 0) 24 pairs (30%) computed in 0.000017s...
(process 0) 25 pairs (32%) computed in 0.000904s...
(process 0) 26 pairs (33%) computed in 0.000693s...
(process 0) 27 pairs (34%) computed in 0.000679s...
(process 0) 28 pairs (35%) computed in 0.000645s...
(process 0) 29 pairs (37%) computed in 0.000635s...
(process 0) 30 pairs (38%) computed in 0.000641s...
(process 0) 31 pairs (39%) computed in 0.000624s...
(process 0) 32 pairs (41%) computed in 0.000622s...
(process 0) 33 pairs (42%) computed in 0.000623s...
(process 0) 34 pairs (43%) computed in 0.000007s...
(process 0) 35 pairs (44%) computed in 0.000634s...
(process 0) 36 pairs (46%) computed in 0.000621s...
(process 0) 37 pairs (47%) computed in 0.000624s...
(process 0) 38 pairs (48%) computed in 0.000623s...
(process 0) 39 pairs (50%) computed in 0.000620s...
(process 0) 40 pairs (51%) computed in 0.000624s...
(process 0) 41 pairs (52%) computed in 0.000620s...
(process 0) 42 pairs (53%) computed in 0.002299s...
(process 0) 43 pairs (55%) computed in 0.000011s...
(process 0) 44 pairs (56%) computed in 0.000541s...
(process 0) 45 pairs (57%) computed in 0.001330s...
(process 0) 46 pairs (58%) computed in 0.000479s...
(process 0) 47 pairs (60%) computed in 0.000569s...
(process 0) 48 pairs (61%) computed in 0.000468s...
(process 0) 49 pairs (62%) computed in 0.000563s...
(process 0) 50 pairs (64%) computed in 0.000467s...
(process 0) 51 pairs (65%) computed in 0.000006s...
(process 0) 52 pairs (66%) computed in 0.000559s...
(process 0) 53 pairs (67%) computed in 0.000467s...
(process 0) 54 pairs (69%) computed in 0.000542s...
(process 0) 55 pairs (70%) computed in 0.000448s...
(process 0) 56 pairs (71%) computed in 0.000538s...
(process 0) 57 pairs (73%) computed in 0.000446s...
(process 0) 58 pairs (74%) computed in 0.000005s...
(process 0) 59 pairs (75%) computed in 0.000535s...
(process 0) 60 pairs (76%) computed in 0.000466s...
(process 0) 61 pairs (78%) computed in 0.000538s...
(process 0) 62 pairs (79%) computed in 0.000452s...
(process 0) 63 pairs (80%) computed in 0.000510s...
(process 0) 64 pairs (82%) computed in 0.000005s...
(process 0) 65 pairs (83%) computed in 0.000422s...
(process 0) 66 pairs (84%) computed in 0.000508s...
(process 0) 67 pairs (85%) computed in 0.000425s...
(process 0) 68 pairs (87%) computed in 0.000509s...
(process 0) 69 pairs (88%) computed in 0.000005s...
(process 0) 70 pairs (89%) computed in 0.001238s...
(process 0) 71 pairs (91%) computed in 0.000504s...
(process 0) 72 pairs (92%) computed in 0.000418s...
(process 0) 73 pairs (93%) computed in 0.000004s...
(process 0) 74 pairs (94%) computed in 0.000502s...
(process 0) 75 pairs (96%) computed in 0.000416s...
(process 0) 76 pairs (97%) computed in 0.000004s...
(process 0) 77 pairs (98%) computed in 0.000501s...
(process 0) 78 pairs (100%) computed in 0.000005s...
Total D tensor (MHz):
[[-8.35479598e+03 6.04449841e-01 2.29018026e-01]
[ 6.04449841e-01 -8.35479606e+03 1.24204179e-01]
[ 2.29018026e-01 1.24204179e-01 1.67095920e+04]]
D eigenvalues (MHz):
[-8355.40047224 -8354.19157483 16709.59204707]
D eigenvectors:
[ 7.07082904e-01 -7.07130657e-01 -2.95655974e-06]
[-7.07130657e-01 -7.07082904e-01 9.96530782e-06]
[9.13730752e-06 4.95562477e-06 1.00000000e+00]
Dx, Dy, Dz (|Dz| > |Dx| > |Dy|) (MHz):
-8355.40047224412 -8354.19157482929 16709.59204707317
Scalar D = 25064.39 MHz, E = -0.60 MHz
Time elapsed for pair iteration: 0s