diff --git a/test.ipynb b/test.ipynb index aa8ed8c..933a369 100644 --- a/test.ipynb +++ b/test.ipynb @@ -2,12 +2,31 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Mac:27855] shmem: mmap: an error occurred while determining whether or not /var/folders/yh/dx7xl94n3g52ts3td8qcxjcc0000gn/T//ompi.Mac.501/jf.0/204800000/sm_segment.Mac.501.c350000.0 could be created.\n" + ] + }, + { + "data": { + "text/plain": [ + "'0.14.3'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import os\n", "from tqdm import tqdm\n", + "from sys import getsizeof\n", "from timeit import default_timer as timer\n", "\n", "os.environ[\"OMP_NUM_THREADS\"] = \"1\" # export OMP_NUM_THREADS=4\n", @@ -35,9 +54,44 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "================================================================================================================================================================\n", + "Input file: \n", + "Not yet specified.\n", + "Output file: \n", + "test.pickle\n", + "Number of nodes in the parallel cluster: 1\n", + "================================================================================================================================================================\n", + "Cell [Ang]: \n", + "[[ 3.79100000e+00 0.00000000e+00 0.00000000e+00]\n", + " [-1.89550000e+00 3.28310231e+00 0.00000000e+00]\n", + " [ 1.25954923e-15 2.18160327e-15 2.05700000e+01]]\n", + "================================================================================================================================================================\n", + "DFT axis: \n", + "[0 0 1]\n", + "Quantization axis and perpendicular rotation directions:\n", + "[1 0 0] --» [array([0, 1, 0]), array([0, 0, 1])]\n", + "[0 1 0] --» [array([1, 0, 0]), array([0, 0, 1])]\n", + "[0 0 1] --» [array([1, 0, 0]), array([0, 1, 0])]\n", + "================================================================================================================================================================\n", + "Parameters for the contour integral:\n", + "Number of k points: 20\n", + "k point directions: xy\n", + "Ebot: -13\n", + "Eset: 100\n", + "Esetp: 100\n", + "================================================================================================================================================================\n", + "Setup done. Elapsed time: 1.811041458 s\n", + "================================================================================================================================================================\n" + ] + } + ], "source": [ "# this cell mimicks an input file\n", "fdf = sisl.get_sile(\n", @@ -102,7 +156,7 @@ "kdirs = \"xy\"\n", "ebot = -13\n", "eset = 100\n", - "esetp = 1000\n", + "esetp = 100\n", "\n", "\n", "# MPI parameters\n", @@ -135,14 +189,57 @@ "if rank == root_node:\n", " print_parameters(simulation_parameters)\n", " times[\"setup_time\"] = timer()\n", - " print(f\"Setup done. Elapsed time: {times['setup_time']} s\")" + " print(f\"Setup done. Elapsed time: {times['setup_time']} s\")\n", + " print(\n", + " \"================================================================================================================================================================\"\n", + " )" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/danielpozsar/Documents/oktatás/elte/phd/grogu_project/.venv/lib/python3.9/site-packages/matplotlib/cbook.py:1762: ComplexWarning: Casting complex values to real discards the imaginary part\n", + " return math.isfinite(val)\n", + "/Users/danielpozsar/Documents/oktatás/elte/phd/grogu_project/.venv/lib/python3.9/site-packages/matplotlib/cbook.py:1398: ComplexWarning: Casting complex values to real discards the imaginary part\n", + " return np.asarray(x, float)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-12.806739\n", + "-0.01254111\n", + "xyz[-3:]: red, green, blue\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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gjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAAgjaAAAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAAgjaAAAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAApQ1aLv33nszduzYDBkyJBUVFbn99tvbPX/rrbfm6KOPzvve975UVFRk0aJFHXrdm266KcOGDUt1dXUOOOCA3HXXXcUXD0C3p88AAABdqaxB2+rVqzN8+PDMnDlzk88fdthhueiiizr8mvfff39OOumknHzyyXnkkUcybty4jBs3Lr///e+LKhuAHkKfAQAAulJFqVQqlbuIJKmoqMhtt92WcePGbfDc0qVLs/vuu+eRRx7JiBEj3vF1xo8fn9WrV+fnP/9527qPfOQjGTFiRGbNmtWhWpqbm1NbW5umpqbU1NRszjQA2IjucFzVZwB6L8fVDdknAMXq6HG1112jbcGCBWloaGi3bsyYMVmwYMEmx6xZsybNzc3tFgDYGH0GAADYlF4XtDU2Nqaurq7durq6ujQ2Nm5yzPTp01NbW9u21NfXd3aZAPRQ+gwAALApvS5o2xJTp05NU1NT27J8+fJylwRAL6LPAADAtqFvuQso2qBBg7Jy5cp261auXJlBgwZtckxVVVWqqqo6uzQAegF9BgAA2JRed0bb6NGjM2/evHbr7r777owePbpMFQHQm+gzAADAppT1jLbXXnstixcvbnu8ZMmSLFq0KDvttFPe//735+WXX86yZcvy/PPPJ0mefPLJJOvPJnj7zIGJEydm6NChmT59epLk9NNPz+GHH55LL700xx13XK6//vo89NBD+eEPf9jFswOg3PQZAACgK5X1jLaHHnooI0eOzMiRI5MkU6ZMyciRI3PuuecmSe64446MHDkyxx13XJLkxBNPzMiRIzNr1qy211i2bFlWrFjR9vjQQw/NT3/60/zwhz/M8OHDc/PNN+f222/P/vvv34UzA6A70GcAAICuVFEqlUrlLqK7aW5uTm1tbZqamlJTU1PucgB6PMfV9uwPgGL1hOPqzJkzc8kll6SxsTHDhw/P5ZdfnkMOOWST28+YMSNXXHFFli1blp133jmf+tSnMn369FRXV3fo/XrCPgHoSTp6XO1112gDAADoTm644YZMmTIl06ZNy8MPP5zhw4dnzJgxeeGFFza6/U9/+tOcddZZmTZtWh5//PH86Ec/yg033JCvfe1rXVw5AJtL0AYAANCJLrvsspx66qmZPHly9t1338yaNSvbb799rr766o1uf//99+ejH/1oPv3pT2e33XbL0UcfnZNOOikPPvhgF1cOwOYStAEAAHSStWvXZuHChWloaGhbV1lZmYaGhixYsGCjYw499NAsXLiwLVh75plnctddd+XYY4/d5PusWbMmzc3N7RYAul5Z7zoKAADQm7300ktpaWlJXV1du/V1dXV54oknNjrm05/+dF566aUcdthhKZVKWbduXT73uc+941dHp0+fnm984xuF1g7A5nNGGwAAQDcyf/78XHjhhfnBD36Qhx9+OLfeemvuvPPOnH/++ZscM3Xq1DQ1NbUty5cv78KKAXibM9oAAAA6yc4775w+ffpk5cqV7davXLkygwYN2uiYc845JxMmTMgpp5ySJDnggAOyevXqfPazn83Xv/71VFZueL5EVVVVqqqqip8AAJvFGW0AAACdpF+/fjnooIMyb968tnWtra2ZN29eRo8evdExr7/++gZhWp8+fZIkpVKp84oFYKs5ow0AAKATTZkyJZMmTcrBBx+cQw45JDNmzMjq1aszefLkJMnEiRMzdOjQTJ8+PUkyduzYXHbZZRk5cmRGjRqVxYsX55xzzsnYsWPbAjcAuidBGwAAQCcaP358XnzxxZx77rlpbGzMiBEjMmfOnLYbJCxbtqzdGWxnn312KioqcvbZZ+e5557LLrvskrFjx+Zb3/pWuaYAQAdVlJx7vIHm5ubU1tamqakpNTU15S4HoMdzXG3P/gAoluPqhuwTgGJ19LjqGm0AAAAAUABBGwAAAAAUQNAGAAAAAAUQtAEAAABAAQRtAAAAAFAAQRsAAAAAFEDQBgAAAAAFELQBAAAAQAEEbQAAAABQAEEbAAAAABRA0AYAAAAABRC0AQAAAEABBG0AAAAAUABBGwAA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tAEAAABAAQRtAAAAAFAAQRsAAAAAFEDQBgAAAAAFELQBAAAAQAEEbQAAAABQAEEbAAAAABRA0AYAAAAABRC0AQAAAEABBG0AAAAAUABBGwAAAAAUQNAGAAAAAAUQtAEAAABAAQRtAAAAAFAAQRsAAAAAFEDQBgAAAAAFELQBAAAAQAEEbQAAAABQAEEbAAAAABRA0AYAAAAABRC0AQAAAEABBG0AAAAAUABBGwAAAAAUQNAGAAAAAAUQtAEAAABAAQRtAAAAAFAAQRsAAAAAFEDQBgAAAAAFELQBAAAAQAEEbQAAAABQAEEbAAAAABRA0AYAAAAABRC0AQAAAEABBG0AAAAAUIBuH7StWrUqZ5xxRnbdddf0798/hx56aH7729++45j58+fnQx/6UKqqqrLXXntl9uzZXVMsAD2SXgMAABSh2wdtp5xySu6+++5ce+21efTRR3P00UenoaEhzz333Ea3X7JkSY477rgceeSRWbRoUc4444yccsopmTt3bhdXDkBPodcAAABFqCiVSqVyF7Epb7zxRgYMGJCf/exnOe6449rWH3TQQTnmmGNywQUXbDDmq1/9au688878/ve/b1t34okn5tVXX82cOXM69L7Nzc2pra1NU1NTampqtn4iANu47nxcLUev6c77A6AnclzdkH0CUKyOHle79Rlt69atS0tLS6qrq9ut79+/f+67776NjlmwYEEaGhrarRszZkwWLFiwyfdZs2ZNmpub2y0AbBu6otfoMwAAsG3o1kHbgAEDMnr06Jx//vl5/vnn09LSkuuuuy4LFizIihUrNjqmsbExdXV17dbV1dWlubk5b7zxxkbHTJ8+PbW1tW1LfX194XMBoHvqil6jzwAAwLahWwdtSXLttdemVCpl6NChqaqqyve+972cdNJJqawsrvSpU6emqampbVm+fHlhrw1A99fZvUafAQCAbUPfchfwbvbcc8/86le/yurVq9Pc3JzBgwdn/Pjx2WOPPTa6/aBBg7Jy5cp261auXJmampr0799/o2OqqqpSVVVVeO0A9Ayd3Wv0GQAA2DZ0+zPa3vae97wngwcPziuvvJK5c+fm+OOP3+h2o0ePzrx589qtu/vuuzN69OiuKBOAHkyvAQAAtka3D9rmzp2bOXPmZMmSJbn77rtz5JFHZtiwYZk8eXKS9V/HmThxYtv2n/vc5/LM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nXbaaW2PW1paSkOGDClNnz59o9v//d//fem4445rt27UqFGlf/7nf+7UOru7zd2PP/7xj0u1tbVdVF3Pk6R02223veM2X/nKV0r77bdfu3Xjx48vjRkzphMr61k6sh9/+ctflpKUXnnllS6piW3PttBnNneOf2ndunWlAQMGlH7yk590VolbbUvmuG7dutKhhx5auuqqq0qTJk0qHX/88V1Q6ZbZ3PldccUVpT322KO0du3aripxq23uHE877bTSxz/+8XbrpkyZUvroRz/aqXUWxe8S245toc90BZ9niuc4VAyfacrLGW2bae3atVm4cGEaGhra1lVWVqahoSELFizY6JgFCxa02z5JxowZs8nttwVbsh+T5LXXXsuuu+6a+vr6HH/88Xnssce6otxew89isUaMGJHBgwfnqKOOym9+85tyl0MvsS30mS3tAf/T66+/nrfeeis77bRTZ5W5VbZ0jt/85jczcODAnHzyyV1R5hbbkvndcccdGT16dE477bTU1dVl//33z4UXXpiWlpauKnuzbMkcDz300CxcuLDtq2PPPPNM7rrrrhx77LFdUnNX6GnHGza0LfSZruDzTPn4eSyWzzTFE7RtppdeeiktLS2pq6trt76urm6T32VubGzcrO23BVuyH/fee+9cffXV+dnPfpbrrrsura2tOfTQQ/OnP/2pK0ruFTb1s9jc3Jw33nijTFX1PIMHD86sWbNyyy235JZbbkl9fX2OOOKIPPzww+UujV5gW+gzWzLHv/TVr341Q4YM2eAX7e5iS+Z433335Uc/+lGuvPLKrihxq2zJ/J555pncfPPNaWlpyV133ZVzzjknl156aS644IKuKHmzbckcP/3pT+eb3/xmDjvssGy33XbZc889c8QRR3Trr45uLr9L9HzbQp/pCj7PlI/jUDF8puk8fctdAHTU6NGjM3r06LbHhx56aPbZZ5/8+7//e84///wyVsa2Zu+9987ee+/d9vjQQw/N008/ne9+97u59tpry1gZbBu+/e1v5/rrr8/8+fN7zUWkV61alQkTJuTKK6/MzjvvXO5yOkVra2sGDhyYH/7wh+nTp08OOuigPPfcc7nkkksybdq0cpdXiPnz5+fCCy/MD37wg4waNSqLFy/O6aefnvPPPz/nnHNOucsDysznGboTn2k6j6BtM+28887p06dPVq5c2W79ypUrM2jQoI2OGTRo0GZtvy3Ykv34l7bbbruMHDkyixcv7owSe6VN/SzW1NSkf//+ZaqqdzjkkENy3333lbsMeoFtoc9sTQ/4zne+k29/+9u55557cuCBB3ZmmVtlc+f49NNPZ+nSpRk7dmzbutbW1iRJ37598+STT2bPPffs3KI3w5b8Gw4ePDjbbbdd+vTp07Zun332SWNjY9auXZt+/fp1as2ba0vmeM4552TChAk55ZRTkiQHHHBAVq9enc9+9rP5+te/nsrKnv9lEr9L9HzbQp/pCj7PlI/jUOfxmaYYPb/bd7F+/frloIMOyrx589rWtba2Zt68ee3+OvE/jR49ut32SXL33XdvcvttwZbsx7/U0tKSRx99NIMHD+6sMnsdP4udZ9GiRX4WKcS20Ge2tAdcfPHFOf/88zNnzpwcfPDBXVHqFtvcOQ4bNiyPPvpoFi1a1Lb87d/+bdsd1err67uy/He1Jf+GH/3oR7N48eK2ADFJ/vjHP2bw4MHdLmRLtmyOr7/++gZh2tvBYqlU6rxiu1BPO96woW2hz3QFn2fKx89j5/GZpiDlvhtDT3T99deXqqqqSrNnzy794Q9/KH32s58t7bDDDqXGxsZSqVQqTZgwoXTWWWe1bf+b3/ym1Ldv39J3vvOd0uOPP16aNm1aabvttis9+uij5ZpCt7C5+/Eb3/hGae7cuaWnn366tHDhwtKJJ55Yqq6uLj322GPlmkLZrVq1qvTII4+UHnnkkVKS0mWXXVZ65JFHSs8++2ypVCqVzjrrrNKECRPatn/mmWdK22+/fenLX/5y6fHHHy/NnDmz1KdPn9KcOXPKNYVuYXP343e/+93S7bffXnrqqadKjz76aOn0008vVVZWlu65555yTYFeZlvoM5s7x29/+9ulfv36lW6++ebSihUr2pZVq1aVawrvanPn+Je6+11HN3d+y5YtKw0YMKD0xS9+sfTkk0+Wfv7zn5cGDhxYuuCCC8o1hXe1uXOcNm1aacCAAaX/83/+T+mZZ54p/eIXvyjtueeepb//+78v1xTeld8ltk3bQp/pCj7PFMNxqBg+03QfgrYtdPnll5fe//73l/r161c65JBDSv/1X//V9tzhhx9emjRpUrvtb7zxxtIHP/jBUr9+/Ur77bdf6c477+ziirunzdmPZ5xxRtu2dXV1pWOPPbb08MMPl6Hq7uPtWzL/5fL2fps0aVLp8MMP32DMiBEjSv369SvtsccepR//+MddXnd3s7n78aKLLirtueeeperq6tJOO+1UOuKII0r/+Z//WZ7i6bW2hT6zOXPcddddN/r/02nTpnV94Zthc/8d/6fuHrSVSps/v/vvv780atSoUlVVVWmPPfYofetb3yqtW7eui6vePJszx7feeqt03nnntfWI+vr60he+8IXSK6+80vWFd5DfJbZd20Kf6Qo+z2w9x6Fi+EzTfVSUSr3kPHYAAAAAKCPXaAMAAACAAgjaAAAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNuhhXnzxxQwaNCgXXnhh27r7778//fr1y7x588pYGQC9xTXXXJP3ve99WbNmTbv148aNy4QJE8pUFQC9hc809GYVpVKpVO4igM1z1113Zdy4cbn//vuz9957Z8SIETn++ONz2WWXlbs0AHqBN954I4MHD86VV16ZE044IUnywgsvZOjQofnFL36RI488sswVAtDT+UxDbyVogx7qtNNOyz333JODDz44jz76aH7729+mqqqq3GUB0Et84QtfyNKlS3PXXXclSS677LLMnDkzixcvTkVFRZmrA6A38JmG3kjQBj3UG2+8kf333z/Lly/PwoULc8ABB5S7JAB6kUceeSQf/vCH8+yzz2bo0KE58MADc8IJJ+Scc84pd2kA9BI+09AbuUYb9FBPP/10nn/++bS2tmbp0qXlLgeAXmbkyJEZPnx4rrnmmixcuDCPPfZY/umf/qncZQHQi/hMQ2/kjDbogdauXZtDDjkkI0aMyN57750ZM2bk0UcfzcCBA8tdGgC9yBVXXJEZM2bkqKOOylNPPZW5c+eWuyQAegmfaeitBG3QA335y1/OzTffnN/97nd573vfm8MPPzy1tbX5+c9/Xu7SAOhFmpqaMmTIkKxbty7XXHNNxo8fX+6SAOglfKaht/LVUehh5s+fnxkzZuTaa69NTU1NKisrc+211+bXv/51rrjiinKXB0AvUltbm09+8pN573vfm3HjxpW7HAB6CZ9p6M2c0QYAwCZ94hOfyH777Zfvfe975S4FAKDbE7QBALCBV155JfPnz8+nPvWp/OEPf8jee+9d7pIAALq9vuUuAACA7mfkyJF55ZVXctFFFwnZAAA6yBltAAAAAFAAN0MAAAAAgAII2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAAvz/e/gHozxT/KgAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -266,6 +363,9 @@ " times[\"H_and_XCF_time\"] = timer()\n", " print(\n", " f\"Hamiltonian and exchange field rotated. Elapsed time: {times['H_and_XCF_time']} s\"\n", + " )\n", + " print(\n", + " \"================================================================================================================================================================\"\n", " )" ] }, @@ -369,6 +469,9 @@ " times[\"site_and_pair_dictionaries_time\"] = timer()\n", " print(\n", " f\"Site and pair dictionaries created. Elapsed time: {times['site_and_pair_dictionaries_time']} s\"\n", + " )\n", + " print(\n", + " \"================================================================================================================================================================\"\n", " )" ] }, @@ -385,7 +488,10 @@ "\n", "if rank == root_node:\n", " times[\"k_set_time\"] = timer()\n", - " print(f\"k set created. Elapsed time: {times['k_set_time']} s\")" + " print(f\"k set created. Elapsed time: {times['k_set_time']} s\")\n", + " print(\n", + " \"================================================================================================================================================================\"\n", + " )" ] }, { @@ -436,6 +542,9 @@ " times[\"reference_rotations_time\"] = timer()\n", " print(\n", " f\"Rotations done perpendicular to quantization axis. Elapsed time: {times['reference_rotations_time']} s\"\n", + " )\n", + " print(\n", + " \"================================================================================================================================================================\"\n", " )" ] }, @@ -454,6 +563,19 @@ " f\"Total number of matrix inversions: {kset.shape[0] * len(hamiltonians) * eset}\"\n", " )\n", " print(f\"The shape of the Hamiltonian and the Greens function is {NO}x{NO}={NO*NO}\")\n", + " # https://stackoverflow.com/questions/70746660/how-to-predict-memory-requirement-for-np-linalg-inv\n", + " # memory is O(64 n**2) for complex matrices\n", + " memory_size = getsizeof(hamiltonians[0][\"H\"].base) / 1024\n", + " print(\n", + " f\"Memory taken by a single Hamiltonian is: {getsizeof(hamiltonians[0]['H'].base) / 1024} KB\"\n", + " )\n", + " print(f\"Expected memory usage per matrix inversion: {memory_size * 32} KB\")\n", + " print(\n", + " f\"Expected memory usage per k point for parallel inversion: {memory_size * len(hamiltonians) * eset * 32} KB\"\n", + " )\n", + " print(\n", + " f\"Expected memory usage on root node: {len(np.array_split(kset, size)[0]) * memory_size * len(hamiltonians) * eset * 32 / 1024} MB\"\n", + " )\n", " print(\n", " \"================================================================================================================================================================\"\n", " )\n", @@ -515,6 +637,9 @@ " times[\"green_function_inversion_time\"] = timer()\n", " print(\n", " f\"Calculated Greens functions. Elapsed time: {times['green_function_inversion_time']} s\"\n", + " )\n", + " print(\n", + " \"================================================================================================================================================================\"\n", " )" ] }, diff --git a/test.pickle b/test.pickle index edb0a42..bbb3a28 100644 Binary files a/test.pickle and b/test.pickle differ