{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Running PyZFS with GPAW" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tutorial assumes that a density functional theory calculation with GPAW has already been completed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1 Command line interface" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", "PyZFS code 2.3\n", "2026-03-14 00:01:16\n", "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", "pyzfs.run: setting working directory as \".\"...\n", "\n", "GPAWWavefunctionLoader: scanning current working directory \"/pyzfs/examples/c3h6_gpaw\"...\n", "\n", " nuwfcs = 10, ndwfcs = 8, nwfcs = 18\n", " spin = up band = 0 file = None\n", " spin = up band = 1 file = None\n", " spin = up band = 2 file = None\n", " spin = up band = 3 file = None\n", " spin = up band = 4 file = None\n", " spin = up band = 5 file = None\n", " spin = up band = 6 file = None\n", " spin = up band = 7 file = None\n", " spin = up band = 8 file = None\n", " spin = up band = 9 file = None\n", " spin = down band = 0 file = None\n", " spin = down band = 1 file = None\n", " spin = down band = 2 file = None\n", " spin = down band = 3 file = None\n", " spin = down band = 4 file = None\n", " spin = down band = 5 file = None\n", " spin = down band = 6 file = None\n", " spin = down band = 7 file = None\n", "\n", "System Overview:\n", " Cell: \n", "{ 'G1': array([0.2313749, 0. , 0. ]),\n", " 'G2': array([0. , 0.28045443, 0. ]),\n", " 'G3': array([0. , 0. , 0.26214776]),\n", " 'R1': array([27.15586346, 0. , 0. ]),\n", " 'R2': array([ 0. , 22.40358735, 0. ]),\n", " 'R3': array([ 0. , 0. , 23.96810648]),\n", " 'ase_cell': Atoms(symbols='', pbc=True, cell=[14.370339824327978, 11.855530355070583, 12.683442587690196]),\n", " 'omega': np.float64(14581.92655983419)}\n", " FFT Grid: \n", "{ 'N': np.int64(155520),\n", " 'n1': np.int64(60),\n", " 'n2': np.int64(48),\n", " 'n3': np.int64(54)}\n", "\n", "\n", "pyzfs.run: instantializing ZFSCalculation with following arguments...\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 18 18 0 18 18 18 0 18 (18, 18, 6)\n", " Index map:\n", " [[[ 0 18 18 0 18 18]]]\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): 399.99 MB\n", " Total memory usage (all processes): 399.99 MB\n", " \n", " GPAWWavefunctionLoader: loading orbitals into memory... (memory mode: \"critical\")\n", " \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): 400.24 MB\n", " Total memory usage (all processes): 400.24 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.00 MB\n", " iorb_rhog_map 0.00 MB\n", " ddig 7.12 MB\n", " I 0.01 MB\n", " \n", " Total memory usage (on process 0): 420.42 MB\n", " Total memory usage (all processes): 420.42 MB\n", " \n", " Iterating over pairs...\n", " \n", " (process 0) 2 pairs (1%) computed in 0.020327s...\n", " (process 0) 4 pairs (2%) computed in 0.027563s...\n", " (process 0) 6 pairs (3%) computed in 0.025974s...\n", " (process 0) 8 pairs (4%) computed in 0.025781s...\n", " (process 0) 10 pairs (5%) computed in 0.025646s...\n", " (process 0) 12 pairs (7%) computed in 0.025764s...\n", " (process 0) 14 pairs (8%) computed in 0.025710s...\n", " (process 0) 16 pairs (9%) computed in 0.026038s...\n", " (process 0) 18 pairs (10%) computed in 0.025810s...\n", " (process 0) 20 pairs (11%) computed in 0.012974s...\n", " (process 0) 22 pairs (12%) computed in 0.025950s...\n", " (process 0) 24 pairs (14%) computed in 0.026118s...\n", " (process 0) 26 pairs (15%) computed in 0.025887s...\n", " (process 0) 28 pairs (16%) computed in 0.025714s...\n", " (process 0) 30 pairs (17%) computed in 0.025816s...\n", " (process 0) 32 pairs (18%) computed in 0.025526s...\n", " (process 0) 34 pairs (19%) computed in 0.025491s...\n", " (process 0) 36 pairs (21%) computed in 0.012665s...\n", " (process 0) 38 pairs (22%) computed in 0.025556s...\n", " (process 0) 40 pairs (23%) computed in 0.025527s...\n", " (process 0) 42 pairs (24%) computed in 0.025675s...\n", " (process 0) 44 pairs (25%) computed in 0.025225s...\n", " (process 0) 46 pairs (26%) computed in 0.025397s...\n", " (process 0) 48 pairs (28%) computed in 0.025561s...\n", " (process 0) 50 pairs (29%) computed in 0.025226s...\n", " (process 0) 52 pairs (30%) computed in 0.013080s...\n", " (process 0) 54 pairs (31%) computed in 0.025993s...\n", " (process 0) 56 pairs (32%) computed in 0.025420s...\n", " (process 0) 58 pairs (33%) computed in 0.025922s...\n", " (process 0) 60 pairs (35%) computed in 0.025743s...\n", " (process 0) 62 pairs (36%) computed in 0.025208s...\n", " (process 0) 64 pairs (37%) computed in 0.025340s...\n", " (process 0) 66 pairs (38%) computed in 0.025699s...\n", " (process 0) 68 pairs (39%) computed in 0.012806s...\n", " (process 0) 70 pairs (40%) computed in 0.025345s...\n", " (process 0) 72 pairs (42%) computed in 0.025223s...\n", " (process 0) 74 pairs (43%) computed in 0.025192s...\n", " (process 0) 76 pairs (44%) computed in 0.025225s...\n", " (process 0) 78 pairs (45%) computed in 0.025497s...\n", " (process 0) 80 pairs (46%) computed in 0.025490s...\n", " (process 0) 82 pairs (47%) computed in 0.012795s...\n", " (process 0) 84 pairs (49%) computed in 0.025488s...\n", " (process 0) 86 pairs (50%) computed in 0.025285s...\n", " (process 0) 88 pairs (51%) computed in 0.025293s...\n", " (process 0) 90 pairs (52%) computed in 0.025497s...\n", " (process 0) 92 pairs (53%) computed in 0.025468s...\n", " (process 0) 94 pairs (54%) computed in 0.012746s...\n", " (process 0) 96 pairs (56%) computed in 0.025421s...\n", " (process 0) 98 pairs (57%) computed in 0.025536s...\n", " (process 0) 100 pairs (58%) computed in 0.025330s...\n", " (process 0) 102 pairs (59%) computed in 0.025140s...\n", " (process 0) 104 pairs (60%) computed in 0.025969s...\n", " (process 0) 106 pairs (61%) computed in 0.012880s...\n", " (process 0) 108 pairs (63%) computed in 0.032462s...\n", " (process 0) 110 pairs (64%) computed in 0.025712s...\n", " (process 0) 112 pairs (65%) computed in 0.026369s...\n", " (process 0) 114 pairs (66%) computed in 0.026222s...\n", " (process 0) 116 pairs (67%) computed in 0.035829s...\n", " (process 0) 118 pairs (69%) computed in 0.014756s...\n", " (process 0) 120 pairs (70%) computed in 0.028481s...\n", " (process 0) 122 pairs (71%) computed in 0.026611s...\n", " (process 0) 124 pairs (72%) computed in 0.025509s...\n", " (process 0) 126 pairs (73%) computed in 0.025204s...\n", " (process 0) 128 pairs (74%) computed in 0.012682s...\n", " (process 0) 130 pairs (76%) computed in 0.025781s...\n", " (process 0) 132 pairs (77%) computed in 0.025099s...\n", " (process 0) 134 pairs (78%) computed in 0.025551s...\n", " (process 0) 136 pairs (79%) computed in 0.012666s...\n", " (process 0) 138 pairs (80%) computed in 0.025178s...\n", " (process 0) 140 pairs (81%) computed in 0.025211s...\n", " (process 0) 142 pairs (83%) computed in 0.025231s...\n", " (process 0) 144 pairs (84%) computed in 0.012814s...\n", " (process 0) 146 pairs (85%) computed in 0.025682s...\n", " (process 0) 148 pairs (86%) computed in 0.025557s...\n", " (process 0) 150 pairs (87%) computed in 0.025406s...\n", " (process 0) 152 pairs (88%) computed in 0.012986s...\n", " (process 0) 154 pairs (90%) computed in 0.025600s...\n", " (process 0) 156 pairs (91%) computed in 0.025279s...\n", " (process 0) 158 pairs (92%) computed in 0.012890s...\n", " (process 0) 160 pairs (93%) computed in 0.025229s...\n", " (process 0) 162 pairs (94%) computed in 0.012604s...\n", " (process 0) 164 pairs (95%) computed in 0.025602s...\n", " (process 0) 166 pairs (97%) computed in 0.012550s...\n", " (process 0) 168 pairs (98%) computed in 0.025426s...\n", " (process 0) 170 pairs (99%) computed in 0.012820s...\n", " \n", " \n", " Total D tensor (MHz): \n", " [[-8.93115239e+02 1.35223598e-12 -1.72876769e-08]\n", " [ 1.35223598e-12 -1.19850015e+03 -1.69043392e-12]\n", " [-1.72876769e-08 -1.69043392e-12 2.09161539e+03]]\n", " D eigenvalues (MHz): \n", " [ -893.11523938 2091.61538592 -1198.50014655]\n", " D eigenvectors: \n", " [1.00000000e+00 4.42797254e-15 5.79203924e-12]\n", " [-5.79203924e-12 -3.28702997e-16 1.00000000e+00]\n", " [-4.42797254e-15 1.00000000e+00 4.94135131e-16]\n", " Dx, Dy, Dz (|Dz| > |Dx| > |Dy|) (MHz): \n", " -1198.5001465474622 -893.1152393754155 2091.6153859228743\n", " Scalar D = 3137.42 MHz, E = -152.69 MHz\n", " Time elapsed for pair iteration: 2s\n" ] } ], "source": [ "%%bash\n", "pyzfs --wfcfmt gpaw --gpwfile c3h6.gpw\n", "\n", "# Use the --ae flag to enable all-electron wavefunction reconstruction:\n", "# pyzfs --wfcfmt gpaw --gpwfile c3h6.gpw --ae True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2 Python library interface\n", "### 2.1 Load PyZFS" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from pyzfs.common.wfc.qeh5loader import GPAWWavefunctionLoader\n", "from pyzfs.zfs.main import ZFSCalculation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 Construct wavefunction loader" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "GPAWWavefunctionLoader: scanning current working directory \"/pyzfs/examples/c3h6_gpaw\"...\n", "\n", " nuwfcs = 10, ndwfcs = 8, nwfcs = 18\n", " spin = up band = 0 file = None\n", " spin = up band = 1 file = None\n", " spin = up band = 2 file = None\n", " spin = up band = 3 file = None\n", " spin = up band = 4 file = None\n", " spin = up band = 5 file = None\n", " spin = up band = 6 file = None\n", " spin = up band = 7 file = None\n", " spin = up band = 8 file = None\n", " spin = up band = 9 file = None\n", " spin = down band = 0 file = None\n", " spin = down band = 1 file = None\n", " spin = down band = 2 file = None\n", " spin = down band = 3 file = None\n", " spin = down band = 4 file = None\n", " spin = down band = 5 file = None\n", " spin = down band = 6 file = None\n", " spin = down band = 7 file = None\n", "\n", "System Overview:\n", " Cell: \n", "{ 'G1': array([0.2313749, 0. , 0. ]),\n", " 'G2': array([0. , 0.28045443, 0. ]),\n", " 'G3': array([0. , 0. , 0.26214776]),\n", " 'R1': array([27.15586346, 0. , 0. ]),\n", " 'R2': array([ 0. , 22.40358735, 0. ]),\n", " 'R3': array([ 0. , 0. , 23.96810648]),\n", " 'ase_cell': Atoms(symbols='', pbc=True, cell=[14.370339824327978, 11.855530355070583, 12.683442587690196]),\n", " 'omega': np.float64(14581.92655983419)}\n", " FFT Grid: \n", "{ 'N': np.int64(155520),\n", " 'n1': np.int64(60),\n", " 'n2': np.int64(48),\n", " 'n3': np.int64(54)}\n" ] } ], "source": [ "wfcloader = GPAWWavefunctionLoader(gpwfile=\"c3h6.gpw\")\n", "\n", "# With all-electron wavefunction reconstruction:\n", "# wfcloader = GPAWWavefunctionLoader(gpwfile=\"c3h6.gpw\", ae=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.3 Construct ZFSCalculation" ] }, { "cell_type": "code", "execution_count": 4, "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 18 18 0 18 18 18 0 18 (18, 18, 6)\n", " Index map:\n", " [[[ 0 18 18 0 18 18]]]\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): 399.99 MB\n", " Total memory usage (all processes): 399.99 MB\n" ] } ], "source": [ "zfscalc = ZFSCalculation(wfcloader=wfcloader)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.4 Perform ZFS calculation" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", " GPAWWavefunctionLoader: loading orbitals into memory... (memory mode: \"critical\")\n", " \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): 400.24 MB\n", " Total memory usage (all processes): 400.24 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.00 MB\n", " iorb_rhog_map 0.00 MB\n", " ddig 7.12 MB\n", " I 0.01 MB\n", " \n", " Total memory usage (on process 0): 420.42 MB\n", " Total memory usage (all processes): 420.42 MB\n", " \n", " Iterating over pairs...\n", " \n", " (process 0) 2 pairs (1%) computed in 0.020327s...\n", " (process 0) 4 pairs (2%) computed in 0.027563s...\n", " (process 0) 6 pairs (3%) computed in 0.025974s...\n", " (process 0) 8 pairs (4%) computed in 0.025781s...\n", " (process 0) 10 pairs (5%) computed in 0.025646s...\n", " (process 0) 12 pairs (7%) computed in 0.025764s...\n", " (process 0) 14 pairs (8%) computed in 0.025710s...\n", " (process 0) 16 pairs (9%) computed in 0.026038s...\n", " (process 0) 18 pairs (10%) computed in 0.025810s...\n", " (process 0) 20 pairs (11%) computed in 0.012974s...\n", " (process 0) 22 pairs (12%) computed in 0.025950s...\n", " (process 0) 24 pairs (14%) computed in 0.026118s...\n", " (process 0) 26 pairs (15%) computed in 0.025887s...\n", " (process 0) 28 pairs (16%) computed in 0.025714s...\n", " (process 0) 30 pairs (17%) computed in 0.025816s...\n", " (process 0) 32 pairs (18%) computed in 0.025526s...\n", " (process 0) 34 pairs (19%) computed in 0.025491s...\n", " (process 0) 36 pairs (21%) computed in 0.012665s...\n", " (process 0) 38 pairs (22%) computed in 0.025556s...\n", " (process 0) 40 pairs (23%) computed in 0.025527s...\n", " (process 0) 42 pairs (24%) computed in 0.025675s...\n", " (process 0) 44 pairs (25%) computed in 0.025225s...\n", " (process 0) 46 pairs (26%) computed in 0.025397s...\n", " (process 0) 48 pairs (28%) computed in 0.025561s...\n", " (process 0) 50 pairs (29%) computed in 0.025226s...\n", " (process 0) 52 pairs (30%) computed in 0.013080s...\n", " (process 0) 54 pairs (31%) computed in 0.025993s...\n", " (process 0) 56 pairs (32%) computed in 0.025420s...\n", " (process 0) 58 pairs (33%) computed in 0.025922s...\n", " (process 0) 60 pairs (35%) computed in 0.025743s...\n", " (process 0) 62 pairs (36%) computed in 0.025208s...\n", " (process 0) 64 pairs (37%) computed in 0.025340s...\n", " (process 0) 66 pairs (38%) computed in 0.025699s...\n", " (process 0) 68 pairs (39%) computed in 0.012806s...\n", " (process 0) 70 pairs (40%) computed in 0.025345s...\n", " (process 0) 72 pairs (42%) computed in 0.025223s...\n", " (process 0) 74 pairs (43%) computed in 0.025192s...\n", " (process 0) 76 pairs (44%) computed in 0.025225s...\n", " (process 0) 78 pairs (45%) computed in 0.025497s...\n", " (process 0) 80 pairs (46%) computed in 0.025490s...\n", " (process 0) 82 pairs (47%) computed in 0.012795s...\n", " (process 0) 84 pairs (49%) computed in 0.025488s...\n", " (process 0) 86 pairs (50%) computed in 0.025285s...\n", " (process 0) 88 pairs (51%) computed in 0.025293s...\n", " (process 0) 90 pairs (52%) computed in 0.025497s...\n", " (process 0) 92 pairs (53%) computed in 0.025468s...\n", " (process 0) 94 pairs (54%) computed in 0.012746s...\n", " (process 0) 96 pairs (56%) computed in 0.025421s...\n", " (process 0) 98 pairs (57%) computed in 0.025536s...\n", " (process 0) 100 pairs (58%) computed in 0.025330s...\n", " (process 0) 102 pairs (59%) computed in 0.025140s...\n", " (process 0) 104 pairs (60%) computed in 0.025969s...\n", " (process 0) 106 pairs (61%) computed in 0.012880s...\n", " (process 0) 108 pairs (63%) computed in 0.032462s...\n", " (process 0) 110 pairs (64%) computed in 0.025712s...\n", " (process 0) 112 pairs (65%) computed in 0.026369s...\n", " (process 0) 114 pairs (66%) computed in 0.026222s...\n", " (process 0) 116 pairs (67%) computed in 0.035829s...\n", " (process 0) 118 pairs (69%) computed in 0.014756s...\n", " (process 0) 120 pairs (70%) computed in 0.028481s...\n", " (process 0) 122 pairs (71%) computed in 0.026611s...\n", " (process 0) 124 pairs (72%) computed in 0.025509s...\n", " (process 0) 126 pairs (73%) computed in 0.025204s...\n", " (process 0) 128 pairs (74%) computed in 0.012682s...\n", " (process 0) 130 pairs (76%) computed in 0.025781s...\n", " (process 0) 132 pairs (77%) computed in 0.025099s...\n", " (process 0) 134 pairs (78%) computed in 0.025551s...\n", " (process 0) 136 pairs (79%) computed in 0.012666s...\n", " (process 0) 138 pairs (80%) computed in 0.025178s...\n", " (process 0) 140 pairs (81%) computed in 0.025211s...\n", " (process 0) 142 pairs (83%) computed in 0.025231s...\n", " (process 0) 144 pairs (84%) computed in 0.012814s...\n", " (process 0) 146 pairs (85%) computed in 0.025682s...\n", " (process 0) 148 pairs (86%) computed in 0.025557s...\n", " (process 0) 150 pairs (87%) computed in 0.025406s...\n", " (process 0) 152 pairs (88%) computed in 0.012986s...\n", " (process 0) 154 pairs (90%) computed in 0.025600s...\n", " (process 0) 156 pairs (91%) computed in 0.025279s...\n", " (process 0) 158 pairs (92%) computed in 0.012890s...\n", " (process 0) 160 pairs (93%) computed in 0.025229s...\n", " (process 0) 162 pairs (94%) computed in 0.012604s...\n", " (process 0) 164 pairs (95%) computed in 0.025602s...\n", " (process 0) 166 pairs (97%) computed in 0.012550s...\n", " (process 0) 168 pairs (98%) computed in 0.025426s...\n", " (process 0) 170 pairs (99%) computed in 0.012820s...\n", " \n", " \n", " Total D tensor (MHz): \n", " [[-8.93115239e+02 1.35223598e-12 -1.72876769e-08]\n", " [ 1.35223598e-12 -1.19850015e+03 -1.69043392e-12]\n", " [-1.72876769e-08 -1.69043392e-12 2.09161539e+03]]\n", " D eigenvalues (MHz): \n", " [ -893.11523938 2091.61538592 -1198.50014655]\n", " D eigenvectors: \n", " [1.00000000e+00 4.42797254e-15 5.79203924e-12]\n", " [-5.79203924e-12 -3.28702997e-16 1.00000000e+00]\n", " [-4.42797254e-15 1.00000000e+00 4.94135131e-16]\n", " Dx, Dy, Dz (|Dz| > |Dx| > |Dy|) (MHz): \n", " -1198.5001465474622 -893.1152393754155 2091.6153859228743\n", " Scalar D = 3137.42 MHz, E = -152.69 MHz\n", " Time elapsed for pair iteration: 2s\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 }