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