From b599a13f598d0aa508b8a501e8b3170c2fd715b6 Mon Sep 17 00:00:00 2001 From: Daniel Pozsar Date: Mon, 4 Nov 2024 12:54:28 +0100 Subject: [PATCH] added output file and saving output to pickled dict --- src/grogu_magn/useful.py | 4 +- test.ipynb | 616 ++++++--------------------------------- test.pickle | Bin 0 -> 4402 bytes 3 files changed, 86 insertions(+), 534 deletions(-) create mode 100644 test.pickle diff --git a/src/grogu_magn/useful.py b/src/grogu_magn/useful.py index 85b1486..d3fca9a 100644 --- a/src/grogu_magn/useful.py +++ b/src/grogu_magn/useful.py @@ -233,6 +233,8 @@ def print_parameters(simulation_parameters): ) print("Input file: ") print(simulation_parameters["path"]) + print("Output file: ") + print(simulation_parameters["outpath"]) print( "Number of nodes in the parallel cluster: ", simulation_parameters["parallel_size"], @@ -320,7 +322,7 @@ def print_atoms_and_pairs(magnetic_entities, pairs): ) -def print_runtime_informations(times): +def print_runtime_information(times): print("Runtime information: ") print(f"Total runtime: {times['end_time'] - times['start_time']} s") print( diff --git a/test.ipynb b/test.ipynb index 360b8e2..5bdf465 100644 --- a/test.ipynb +++ b/test.ipynb @@ -2,23 +2,16 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 11, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Mac:23435] shmem: mmap: an error occurred while determining whether or not /var/folders/yh/dx7xl94n3g52ts3td8qcxjcc0000gn/T//ompi.Mac.501/jf.0/46137344/sm_segment.Mac.501.2c00000.0 could be created.\n" - ] - }, { "data": { "text/plain": [ "'0.14.3'" ] }, - "execution_count": 1, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -38,6 +31,7 @@ "import sisl\n", "from src.grogu_magn.useful import *\n", "from mpi4py import MPI\n", + "import pickle\n", "from numpy.linalg import inv\n", "import warnings\n", "\n", @@ -52,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -62,6 +56,8 @@ "================================================================================================================================================================\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", @@ -91,6 +87,10 @@ "fdf = sisl.get_sile(\n", " \"/Users/danielpozsar/Downloads/nojij/Fe3GeTe2/monolayer/soc/lat3_791/Fe3GeTe2.fdf\"\n", ") # ./Jij_for_Marci_6p45ang/CrBr.fdf\n", + "\n", + "outfile = \"test\"\n", + "if not outfile.endswith(\".pickle\"):\n", + " outfile += \".pickle\"\n", "# this information needs to be given at the input!!\n", "scf_xcf_orientation = np.array([0, 0, 1]) # z\n", "# list of reference directions for around which we calculate the derivatives\n", @@ -109,22 +109,13 @@ " dict(atom=3, l=2),\n", " dict(atom=4, l=2),\n", " dict(atom=5, l=2),\n", - " # dict(atom=[3, 4],),\n", "]\n", "# pair information ./lat3_791/Fe3GeTe2.fdf\n", "pairs = [\n", " # isotropic should be -82 meV\n", " dict(ai=0, aj=1, Ruc=np.array([0, 0, 0])),\n", - " # dict(ai=1, aj=0, Ruc=np.array([0, 0, 0])),\n", " dict(ai=1, aj=2, Ruc=np.array([0, 0, 0])),\n", - " # dict(ai=2, aj=1, Ruc=np.array([0, 0, 0])),\n", " dict(ai=0, aj=2, Ruc=np.array([0, 0, 0])),\n", - " # dict(ai=2, aj=0, Ruc=np.array([0, 0, 0])),\n", - " # these should all be around -41.9 in the isotropic part\n", - " # dict(ai=0, aj=2, Ruc=np.array([0, 0, 0])),\n", - " # dict(ai=1, aj=2, Ruc=np.array([0, 0, 0])),\n", - " # dict(ai=0, aj=2, Ruc=np.array([-1, 0, 0])),\n", - " # dict(ai=1, aj=2, Ruc=np.array([-1, 0, 0])),\n", "]\n", "\n", "\"\"\"\n", @@ -166,6 +157,7 @@ "\n", "simulation_parameters = dict(\n", " path=\"Not yet specified.\",\n", + " outpath=outfile,\n", " scf_xcf_orientation=scf_xcf_orientation,\n", " ref_xcf_orientations=ref_xcf_orientations,\n", " kset=kset,\n", @@ -190,9 +182,18 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 13, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-12.806739\n", + "-0.01254111\n", + "xyz[-3:]: red, green, blue\n" + ] + }, { "name": "stderr", "output_type": "stream", @@ -205,19 +206,19 @@ }, { "data": { + "image/png": "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", "text/plain": [ - "-12.806739" + "
" ] }, - "execution_count": 3, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGiCAYAAAAba+fDAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA3T0lEQVR4nO3deXhU9aH/8c9km5BtQvYEEkgAQfZFjHErKrJorSi1bq1g3YWqoK3SX0XBalx6tddeqn1uRbRWqfa6VNuqiCxawhaIC0sEDCRAFkhIJguZJDPn9wdmdCRAApk5M5P363nmeZgzZ5JPjieZj9/zPedYDMMwBAAAECRCzA4AAADQnSg3AAAgqFBuAABAUKHcAACAoEK5AQAAQYVyAwAAggrlBgAABBXKDQAACCqUGwAAEFQoNwAAIKh4tdzk5+dr/Pjxio2NVUpKiqZNm6bi4mKPdZqbmzVr1iwlJiYqJiZG06dPV2VlpTdjAQCAIObVcrNq1SrNmjVLa9eu1bJly9Ta2qpJkyapsbHRvc6cOXP07rvv6o033tCqVau0f/9+XXnlld6MBQAAgpjFlzfOPHDggFJSUrRq1Sqdf/75qqurU3Jysl599VX9+Mc/liRt375dp59+ugoKCnTWWWf5KhoAAAgSYb78ZnV1dZKkhIQESVJhYaFaW1s1ceJE9zpDhgxRVlbWMcuNw+GQw+FwP3e5XKqpqVFiYqIsFouXfwIAANAdDMNQfX29MjIyFBLSvQeSfFZuXC6X7rnnHp1zzjkaPny4JKmiokIRERGKj4/3WDc1NVUVFRUdfp38/HwtWLDA23EBAIAPlJWVqW/fvt36NX1WbmbNmqUvv/xSn3766Sl9nXnz5mnu3Lnu53V1dcrKylJZWZni4uJONSYAdAuXy1De48vV6HDqrTvP1qDUWLMjAX7FbrcrMzNTsbHd/7vhk3Ize/Zsvffee1q9erVHO0tLS1NLS4tqa2s9Rm8qKyuVlpbW4deyWq2yWq1HLY+Li6PcAPAbpdVNOiyrIqNCNDInXeGhXHkD6Ig3ppR49bfNMAzNnj1bb731lj7++GNlZ2d7vD5u3DiFh4dr+fLl7mXFxcUqLS1VXl6eN6MBgFdtLbdLkgalxlBsAB/z6sjNrFmz9Oqrr+qdd95RbGysex6NzWZTr169ZLPZdNNNN2nu3LlKSEhQXFycfvGLXygvL48zpQAEtG3flJvT0xlRBnzNq+XmueeekyRNmDDBY/mLL76omTNnSpKeeeYZhYSEaPr06XI4HJo8ebL++Mc/ejMWAHiVo82p9SU1kig3gBl8ep0bb7Db7bLZbKqrq2PODQBTtTpd+tcX5frdh8UqqzksSfrH7HM0sm+8ucEAP+TNz2+fXucGAIJNq9Ol9z7frw+3VOrTHQdV72iTJKXEWvXA1CEUG8AElBsAOAkul6F3P9+vZ5Z9pd3VTe7lidERmnF2f918XraiIvgTC5iB3zwAOAm3v1KoD7ceuclvYnSErj+rny4ckqKRfWwKCeFq6YCZKDcA0EWtTpc+3l4lSbr7okG69fwcRVv5cwr4C34bAaCL9tceVpvLUERYiO6+aBAjNYCf4cpSANBFe76ZY5OVEEWxAfwQ5QYAumhPzZFy0z8xyuQkADpCuQGALiqtbpQkZSVEm5wEQEcoNwDQRe2HpfoxcgP4JcoNAHRR6TeHpbIoN4BfotwAQBcYhvHtyE0C5QbwR5QbAOiCA/UOHW51KsQi9e1NuQH8EeUGALqg/UypjPheigjjTyjgj/jNBIAuYDIx4P8oNwDQBZwGDvg/yg0AdEH7YSlGbgD/RbkBgC7gTCnA/1FuAKAL9nxzWKpfIoelAH9FuQGATrI3t+pQU6skLuAH+DPKDQB0Uuk3h6SSYiIUYw0zOQ2AY6HcAEAntc+3yWK+DeDXKDcA0El7aphvAwQCyg0AdEJVfbPe2rRPEqeBA/6Og8YAcAJlNU366QvrtKe6ScmxVv14XF+zIwE4DsoNABzH3kNNuur5AlXYm5WZ0Et/veksbpgJ+DnKDQAcQ5vTpXuWFqnC3qxBKTF65eZcpcZFmh0LwAkw5wYAjmHRil3auOeQYqxhWjxzPMUGCBCUGwDoQOGeQ3r24x2SpEemDVMmp38DAYNyAwDfU1HXrLte2yyny9DlozN0xRgmEAOBhHIDAN9R3eDQ9X9eq321h9U/MUqPTBtudiQAXUS5AYBv1B1u1c9eWK9dBxqVbovUKzfnKi4y3OxYALqIcgMAkgzD0F2vbdbWcruSYiL015tzOeUbCFCUGwCQtHRDmVZ9dUDWsBC9/PNc5STHmB0JwEmi3ADo8fYeatJv39sqSfrl5MEamhFnciIAp4JyA6BHc7kM/ervn6uxxakz+vXWjedkmx0JwCmi3ADo0f5euFdrdlUrMjxET101SqEhFrMjAThFlBsAPVaDo01PflAsSZp78WnKToo2ORGA7kC5AdBjPbdypw42ONQ/MUozz+ZwFBAsvFpuVq9ercsuu0wZGRmyWCx6++23PV6fOXOmLBaLx2PKlCnejAQAko5MIv7fT0okSfMuOV0RYfy/HhAsvPrb3NjYqFGjRmnRokXHXGfKlCkqLy93P1577TVvRgIASdKT7xerpc2l3OwETRqaanYcAN0ozJtffOrUqZo6depx17FarUpLS/NmDADwsOtAg/7x2X5ZLNKDPxwqi4VJxEAwMX0cduXKlUpJSdHgwYN1xx13qLq6+rjrOxwO2e12jwcAdMUbG/dKki4cnKLhfWwmpwHQ3UwtN1OmTNHLL7+s5cuX64knntCqVas0depUOZ3OY74nPz9fNpvN/cjMzPRhYgCBrs3p0pubjpSbq87gbt9AMPLqYakTueaaa9z/HjFihEaOHKkBAwZo5cqVuuiiizp8z7x58zR37lz3c7vdTsEB0Gmf7DioqnqHEqIjdOEQ5toAwcj0w1LflZOTo6SkJO3cufOY61itVsXFxXk8AKCz3igskyRdPjqDM6SAIOVXv9l79+5VdXW10tPTzY4CIAjVNLZo2dZKSdJV4xjxBYKVVw9LNTQ0eIzClJSUqKioSAkJCUpISNCCBQs0ffp0paWladeuXfrVr36lgQMHavLkyd6MBaCH+r/CvWp1GhreJ46bYwJBzKvlZuPGjbrgggvcz9vnysyYMUPPPfecPv/8c7300kuqra1VRkaGJk2apEceeURWq9WbsQAEuQZHmz7dcVBV9c1qbnWqyu7Qyq8OaGdVgyRGbYBg59VyM2HCBBmGcczXP/jgA29+ewBBrL65VfXNbTIkHW5xqrSmUSUHm1Swq1qrdxxQS5vrqPeEhVg0eViafnIG5QYIZqaeLQUAXVVlb9Z/L9+hpRvK5HQd+3+e+idGaUhanKIiQhVtDdOZ2Qn6weBkxUWG+zAtADNQbgD4tS/31emVtXvU0uZSi9Ol5duqdLj1yLWwIkJDZLFI4aEhykyIUnZSlE5Pi9OkYWk6LTWGKw8DPRTlBoBfW/DuFm3Yfchj2ZiseD0wZYhycxJNSgXAn1FuAPitwy1OFZXVSpLmTDxN0dZQDUiJ0YTTkhmVAXBMlBsAfmtT6SG1Og1l2CJ110UDKTQAOsWvLuIHAN+17usjN9LNzUmk2ADoNMoNAL+1tqRGkpSbnWByEgCBhHIDwC81t3473+ZMyg2ALqDcAPBLRWW1amlzKTnWquykaLPjAAgglBsAfmnd198ekmK+DYCuoNwA8EvrSr6dTAwAXUG5AeB3Wtpc2lR65MJ9ZzHfBkAXUW4A+J2Ne2rU3OpSYnSEBqbEmB0HQICh3ADwK+9/Wa7b/lIoSTpnYBLzbQB0GVcoBmCaspomrSyuUnFlvVrbDFU3OvTRtipJ0ujMeP36ktNNTgggEFFuAPhUS5tLf9tQqiVrdmvXgcYO17ntBzm6b9JghYcyuAyg6yg3AHziQL1DH26t0B9X7NK+2sOSpNAQi8b1663x/XurV3iowkJDNL5/b43rxyRiACePcgPAqz7YUqE/fLxDX+6zu5elxFo1+8KBmjamj+Iiw01MByAYUW4AeE1tU4t+8epmtThdkqThfeI0bXQfXZ/bT70iQk1OByBYUW4AeM07RfvV4nRpSFqs/nJTrpJjrWZHAtADMFsPgNe8vrFMknTN+EyKDQCfodwA8Iot++u0Zb9dEaEhunx0H7PjAOhBKDcAvOKNjXslSRcPTVXv6AiT0wDoSSg3ALqdo82pt4v2SZKuOqOvyWkA9DSUGwDd7t9fVKi2qVVpcZE6b1Cy2XEA9DCcLQWg27hchhb/p0RPvL9d0pFRm9AQ7g0FwLcoNwC6RXOrU3e8UqgVxQckSZOHpeqOCQNMTgWgJ6LcAOgWS9eXakXxAUWEhWj+D4fq+tws7ugNwBSUGwCnzDAM/e2bs6PmTR2in57Vz+REAHoyJhQDOGVb9tu1rfzINW2uGMM1bQCYi3ID4JS1X4l40rBUxUdxTRsA5qLcADglza1Ovb35yDVtfnJGpslpAIByA+AUfbClQvbmNvWJ76VzBiaZHQcAmFAMoOsOtzhVuOeQSmua9Je1eyRJ08dxTRsA/oFyA6DTGh1t+svaPfrzJ1/rYEOLe3mIRbpqHLdZAOAfKDcAjuuDLRVa/dUB7TrQoC377apvbpMkpcVFamhGnDJ799J5g5KVmRBlclIAOIJyA+CYKu3Nuv2VQhnGt8tykqI164KBunx0hsJCmbYHwP9QbgAcU8nBRhmGlBRj1a8vGaKBKTEalmFjbg0Av+bV/+1avXq1LrvsMmVkZMhisejtt9/2eN0wDM2fP1/p6enq1auXJk6cqB07dngzEoAu2HfosCRpcFqMrhzbVyP7xlNsAPg9r5abxsZGjRo1SosWLerw9SeffFLPPvusnn/+ea1bt07R0dGaPHmympubvRkLQCft/abc9I1nPg2AwOHVw1JTp07V1KlTO3zNMAz9/ve/129+8xtdfvnlkqSXX35Zqampevvtt3XNNdd4MxqATthX2yRJ6tO7l8lJAKDzTJsNWFJSooqKCk2cONG9zGazKTc3VwUFBcd8n8PhkN1u93gA8I59tUdGbvrEU24ABA7Tyk1FRYUkKTU11WN5amqq+7WO5Ofny2azuR+ZmVzuHfAW92EpRm4ABJCAO49z3rx5qqurcz/KysrMjgQEJZfLUHntkflvHJYCEEhMKzdpaWmSpMrKSo/llZWV7tc6YrVaFRcX5/EA0P0ONDjU4nQpNMSitLhIs+MAQKeZVm6ys7OVlpam5cuXu5fZ7XatW7dOeXl5ZsUC8I32Q1JpcZFcrA9AQPHq2VINDQ3auXOn+3lJSYmKioqUkJCgrKws3XPPPfrtb3+rQYMGKTs7Ww8++KAyMjI0bdo0b8YC0Al7D3GmFIDA5NVys3HjRl1wwQXu53PnzpUkzZgxQ0uWLNGvfvUrNTY26tZbb1Vtba3OPfdcvf/++4qMZAgcMFv7mVJ9OVMKQIDxarmZMGGCjO/elOZ7LBaLFi5cqIULF3ozBoCT0H51YkZuAAQaDqQD6BDXuAEQqCg3ADr07TVuuPUCgMBCuQFwFMMwOCwFIGBRbgAc5VBTqw63OiVJ6TYm+AMILJQbAEdpH7VJjrUqMjzU5DQA0DWUGwBHab/GDfeUAhCIKDcAjsKZUgACGeUGwFH2MpkYQACj3AA4ivuwFCM3AAKQV69QDCAw1Da1aE91kz7fV6e/F+7VZ2W1kqS+CVzjBkDgodwAPZRhGHqnaL9+92Gx+zBUu7AQi6aOSFdeTqJJ6QDg5FFugB6ktqlFew8dVmlNk174tESFew65X0uJtap/UrQmDU3VtDF9lBRjNTEpAJw8yg0QxFqdLv35kxJt2F2jL/fVqare4fF6r/BQzb5woGac3V8xVv4cAAgO/DUDgthbm/fpife3eyxLirGqT+9eGp4Rp9kXDlS6jUnDAIIL5QYIYu8U7ZMkXTmmj64/K0tD0uIUzQgNgCDHXzkgSFXam7VmV7Ukac7FpymTM58A9BBc5wYIUu9+tl+GIY3r15tiA6BHodwAQeqdov2SpMtHZ5icBAB8i3IDBKFdBxr0xb46hYZYdOmIdLPjAIBPUW6AIPSPb0ZtzhuUpESuVwOgh2FCMRAEDMPQ3kOHtan0kDbtOaR/fHak3Ewb3cfkZADge5QbIIBtLj2k//3ka60vOaSDDZ4X6EuIjtDFQ1NNSgYA5qHcAAGorKZJT35QrHe/GaGRpPBQi4Zm2DQ2K15js3rr7AGJXNMGQI/EXz4gQLhchv6z66BeWbtHH22rktNlyGKRpo/tq2vGZ2p4H5siw0PNjgkApqPcAAFgy/46/frNL/TZ3jr3snMHJmneJUM0LMNmYjIA8D+UG8CPNbc69cxHX+nPn5TI6TIUHRGq6eP66vrcfhqcFmt2PADwS5QbwE+1OV2a/eomfbStSpJ06Yh0PXTZUKXERZqcDAD8G+UG8EOGYWj+P7boo21VsoaF6Nlrx2jysDSzYwFAQKDcAH6mzenSohW79Oq6Ulks0n9fQ7EBgK6g3AB+wOUy9MnOg/pH0X4t316p2qZWSdLDlw3TlOEUGwDoCsoNYKL65la993m5Xvi0RDurGtzLe0eF6/YfDNCMs/ubFw4AAhTlBvAxp8vQ3wvL9M8vKlSw66BanYYkKcYapulj++iSEeka16+3wkK59RsAnAzKDeBDza1O3b10sz7YUulelpMUretys3T1+EzFRoabmA4AggPlBvCR2qYW3fzSRm3cc0gRoSGafeFAXTIiXQNTYsyOBgBBhXIDeFl53WG9vmGvXltfqgp7s2Ijw/S/N5yhs3ISzY4GAEGJcgN40csFu/XwP7bIdWRajfrE99LimeO5ujAAeBHlBvCSRkebnvqgWC5DOrN/gq7LzdKU4Wnc3BIAvIxyA3jJW5v3qb65TdlJ0Vp661kKCbGYHQkAegTONQW8wDAMvVywW5L0s7P6UWwAwIdMLzcPP/ywLBaLx2PIkCFmxwJOScHX1fqqskFREaH68Rl9zY4DAD2KXxyWGjZsmD766CP387Awv4gFnLSX1uyWJF05to/iuHYNAPiUX7SIsLAwpaV17v45DodDDofD/dxut3srFtBpza1ObdpzSKU1Taqqd2jZ1iMX6ZuR19/cYADQA/lFudmxY4cyMjIUGRmpvLw85efnKysrq8N18/PztWDBAh8nBDwdamxRUVmtNpfVakNJjQpLD6mlzeWxztkDEjUolVO+AcDXLIZhGGYG+Pe//62GhgYNHjxY5eXlWrBggfbt26cvv/xSsbFHfzB0NHKTmZmpuro6xcXF+TI6eqgPt1Tojr9uktPl+auTGmfVsAybkmIilBIbqavHZyozIcqklADg3+x2u2w2m1c+v00fuZk6dar73yNHjlRubq769eun119/XTfddNNR61utVlmtVl9GBDys3nFATpeh1DirzhmQpDFZ8cobkKQBydGyWDgrCgDMZnq5+b74+Hiddtpp2rlzp9lRgA5V1B0ZOfzFhYP007P6mZwGAPB9pp8K/n0NDQ3atWuX0tPTzY4CdKjS3ixJSouLNDkJAKAjppeb++67T6tWrdLu3bu1Zs0aXXHFFQoNDdW1115rdjSgQxXt5cZGuQEAf2T6Yam9e/fq2muvVXV1tZKTk3Xuuedq7dq1Sk5ONjsacJRWp0sHG44clkpl5AYA/JLp5Wbp0qVmRwA6rareIcOQwkMtSoyOMDsOAKADph+WAgJJRd2RQ1IpsZHcLwoA/BTlBuiCSubbAIDfo9wAXdA+csOZUgDgvyg3QBe0j9wwmRgA/BflBuiC8vaRGxtXyQYAf0W5AbqggpEbAPB7lBugC9oPS6XbepmcBABwLJQboJMMw2BCMQAEAMoN0El1h1vlaHNJklLimHMDAP6KcgN0Uvt8m95R4YoMDzU5DQDgWCg3QCe1nynFZGIA8G+UG6CTKuu4OjEABALKDdBJFe4zpSg3AODPKDdAJ3F1YgAIDJQboJM4DRwAAgPlBuikCrtDkpTKYSkA8GuUG6CTKuoOS2LkBgD8HeUG6ITmVqcONbVKotwAgL8LMzsA4M8cbU4VldZqc1mtJMkaFqL4qHBzQwEAjotyAxzDocYWXfWnAu2sanAv658YLYvFYmIqAMCJUG6ADrS0uXT7K4XaWdUgW69wjc2K18CUGF0xpq/Z0QAAJ0C5Ab7HMAz95u0vtK6kRjHWML1+W54Gp8WaHQsA0EmUG/R4DY42ldce1t5Dh7VxT43+s7NaRWW1CrFIf7huDMUGAAIM5QY9UpvTpX98tl/PrdylHd+ZU9POYpEW/GiYLhicYkI6AMCpoNygxyiuqNdne2u1o7JeH2ypVGlNk/u12MgwZdh6aXgfm3JzEpSXk6jMhCgT0wIAThblBj3CH1fu1JPvF3ssS4iO0M3nZeu6M7MUHxVhUjIAQHej3CDovVO0z11scrMTdHp6nIZmxOmHI9MVFcGvAAAEG/6yI6ht2F2jX77xuSTppnOz9eAPh5qcCADgbdx+AUHr/S8rdNOSDWpxujR5WKp+fcnpZkcCAPgAIzcIOo2ONv32n1v12voySdIZ/Xrr91ePUWgIVxYGgJ6AcoOA5XIZsje3qrapVYeaWlRa06QPt1ZqxfYqNbU4ZbFIt50/QHMvPk0RYQxSAkBPQblBQFj11QHl/2ubGlva5HQaamp1qu5wqwyj4/X7JUYp/8oROntAkm+DAgBMR7lBQHh+5S5tr6jv8LXoiFDFR0UoITpCZw9M1CXD0zWyr40bXAJAD0W5gd9ramnTxj01kqQ//Wyc0m2RigwPVXxUuGy9wmUNCzU5IQDAn1Bu4PfWldSo1WmoT3wvTRqayogMAOC4mGUJv/fpjoOSpHMHJlFsAAAnRLmB32svN+edxuRgAMCJUW7g16rszSqurJfFIp3DmU8AgE7wi3KzaNEi9e/fX5GRkcrNzdX69evNjgQ/8ck3ozbDM2zqHc3NLQEAJ2Z6ufnb3/6muXPn6qGHHtKmTZs0atQoTZ48WVVVVWZHgx/4dOc3820GMWoDAOgc08vN008/rVtuuUU33nijhg4dqueff15RUVFavHix2dFgMsMw3OXmvIGUGwBA55hablpaWlRYWKiJEye6l4WEhGjixIkqKCjo8D0Oh0N2u93jgeC0cc8hHah3KDI8ROP69zY7DgAgQJhabg4ePCin06nU1FSP5ampqaqoqOjwPfn5+bLZbO5HZmamL6LCx9aX1OjnSzZIki4cksKF+gAAnWb6Yamumjdvnurq6tyPsrIysyOhm73/ZYV+9sI61Te3aXz/3sq/YqTZkQAAAcTUKxQnJSUpNDRUlZWVHssrKyuVlpbW4XusVqusVqsv4sHHquqb9eg/t+mdov2SpImnp+p/rhujyHBGbQAAnWdquYmIiNC4ceO0fPlyTZs2TZLkcrm0fPlyzZ4928xo8JED9Q5t2F2jdV9X683N+1Tf3CaLRfr5OdmaN3WIwkIDbnARAGAy0+8tNXfuXM2YMUNnnHGGzjzzTP3+979XY2OjbrzxRrOjoZu1tLm0o6pe28rrVbjnkNaVVOvrA40e64zoY9OjVwzXyL7x5oQEAAQ808vN1VdfrQMHDmj+/PmqqKjQ6NGj9f777x81yRiBq6q+WY+8t03//qJcbS7jqNeHpMXqzOwEnT0gURcPTVNoCPePAgCcPIthGEd/2gQQu90um82muro6xcXFmR2nxzMMQ9WNLWp0tKnV6VLhnkN67F/bVXe4VZIUFxmmIelxGtnHptycRI3v31vxUVx5GAB6Gm9+fps+coPA19zq1O8+KNby7VXaV3tYLW2uo9YZ3idOj10xQiP62LizNwDAqyg3OCW7Dzbqzr9u0tZyz4spRkWEKiIsRDHWMP30rH66+dxsJgcDAHyCcoOTtuqrA5r1101qcLQpITpCCy8fplF945UaF6mIMIoMAMAclBuclKKyWt3+l0IdbnXqzP4JevbaMUqzRZodCwAAyg26bvfBRv18yQYdbnXq/NOS9cKMMxTOIScAgJ/gEwldUrinRjNeXK+axhaN6GPTc9ePpdgAAPwKIzc4oTanSxt2H9Lzq3Zp1VcHJEmZCb20eOZ4RVvZhQAA/oVPJnSopc2lj7dX6p9fVGj1Vwfc16kJDbHoqnF9Nefi05Qcyz2+AAD+h3IDD4caW/SHj3fqrc17daip1b08PipcU4al6Y4JA9QvMdrEhAAAHB/lBm4bdtfortc2q7yuWZKUEmvVFWP6aNKwVI3O7M1tEQAAAYFyAxmGoedXfa3ffVgsp8tQTlK0fvPD03X+oGQuvAcACDiUmx6u0dGmX/79M/3riwpJ0hVj+ui304YzURgAELD4BOvBiivqdffSzdpeUa/wUIsWXj5c14zP5N5PAICARrnpARxtTn3y1UFV2JvlaHPpQL1Dy7dVakdVgyQpKcaqP/1srMb1SzA5KQAAp45yE8T21x7Wi/8p0f9t2qeaxpajXg8PtegHp6XokWnDlG7rZUJCAAC6H+UmSDU62nTlH9eown7kzKfUOKtG9Y1XZHiooq2hys1O1AVDUmTrFW5yUgAAuhflJkj9+ZMSVdib1Se+lxb8aJgmDObMJwBAz0C5CUIH6h360+pdkqRfX3K6Jg5NNTkRAAC+w//KB6H/Xv6VmlqcGpUZr0tGpJkdBwAAn2LkJkg0tbRp76HD2lXVoNfWl0mS5k0dwmndAIAeh3ITBLaV23XlH9focKvTvWzi6Sk6KyfRxFQAAJiDchMEXi7YrcOtTkVHhCozIUpZCVF68IdDzY4FAIApKDcBrqmlTe9+Vi5JemHmeEZrAAA9HhOKA9y/v6hQg6NNWQlRys3mCsMAAFBuAtwbhUcmD181ri+ThwEAEOUmoO2pbtTar2tksUjTx/U1Ow4AAH6BchPA/l64V5J03qBkZcRzbygAACQmFAcUp8vQ3wvL9M8vKrS/9rD2VDdKOnJICgAAHEG5CQCGYeiTHQf12L+2aXtFvcdr2UnRupjbKwAA4Ea58VMtbS5tLbfrwy0V+ucX5dpT3SRJiosM020/GKDRmfFKt0UqMyFK4dwQEwAAN8qNn1mxvUq/X75D2/bb1eJ0uZdHhofomvFZuvuiQeodHWFiQgAA/Bvlxo/UNbVq9qub1Nhy5DYKtl7hystJ1KUj03XhkBRFW/nPBQDAifBp6Uf+sna3GlucOi01Rv97wxnKSoji2jUAAHQR5cZPNLc69eJ/dkuS7pwwUP0So80NBABAgGImqp94Y2OZqhtb1Ld3L/1wZLrZcQAACFiUGz/Q5nTpT6u/liTden6Owjj7CQCAk8anqB9Ysma39h46rMToCF01LtPsOAAABDTm3JjIMAwtWrFTv/vwK0nSbT/IUa+IUJNTAQAQ2Ewduenfv78sFovH4/HHHzczktfZm1v1/pcVenVdqea+/pm72My6YIBuOS/H5HQAAAQ+00duFi5cqFtuucX9PDY21sQ03nWosUWXPvuJ9tc1u5dZLNJDPxyqmedkm5gMAIDgYXq5iY2NVVpamtkxvM4wDP2/t7/Q/rpmJcdaNaqvTQnREfrhyAydf1qy2fEAAAgaFsMwDLO+ef/+/dXc3KzW1lZlZWXpuuuu05w5cxQWduzO5XA45HA43M/tdrsyMzNVV1enuLg4X8Q+KW9u2qu5r3+msBCL3rrzHI3oazM7EgAAprHb7bLZbF75/DZ15Oauu+7S2LFjlZCQoDVr1mjevHkqLy/X008/fcz35Ofna8GCBT5MeerKapr00DtbJEn3TBxEsQEAwIu6feTmgQce0BNPPHHcdbZt26YhQ4YctXzx4sW67bbb1NDQIKvV2uF7A23kZu3X1brrtc2qqndoXL/e+tutZ3EdGwBAj+fNkZtuLzcHDhxQdXX1cdfJyclRRMTRd7besmWLhg8fru3bt2vw4MGd+n7e3DinatGKnfqvD4vlMqSBKTFacuN49e0dZXYsAABMF1CHpZKTk5WcfHITZIuKihQSEqKUlJRuTuV7G3fX6KkPiiVJV47to99OG66oCNPnbwMAEPRM+7QtKCjQunXrdMEFFyg2NlYFBQWaM2eOfvrTn6p3795mxeo2u6ubJEl5OYl6+iejzQ0DAEAPYlq5sVqtWrp0qR5++GE5HA5lZ2drzpw5mjt3rlmRulVDc6skKSHm6MNvAADAe0wrN2PHjtXatWvN+vZe1+BokyTFWjkUBQCAL3HajpfUf1NuYig3AAD4FOXGSxqavyk3kZQbAAB8iXLjJY2M3AAAYArKjZe459wwcgMAgE9Rbrykvv2wlDXc5CQAAPQslBsvaR+5Yc4NAAC+Rbnxkgbm3AAAYArKjZe4z5ai3AAA4FOUGy+p57AUAACmoNx4gaPNqZY2lyRGbgAA8DXKjRc0Opzuf1NuAADwLcqNF7TPt4mKCFVoiMXkNAAA9CyUGy+odxy5IzijNgAA+B7lxgvaD0sxmRgAAN+j3HhBwzcjN7GM3AAA4HOUGy+o547gAACYhnLjBVydGAAA81BuvKD9bKloyg0AAD5HufGC9pEb5twAAOB7lBsvYM4NAADmodx4wbdzbsJNTgIAQM9DufGCBkZuAAAwDeXGC5hzAwCAeSg3XsCp4AAAmIdy4wXucsNhKQAAfI5y4wXuOTeM3AAA4HOUGy/gsBQAAOah3HQzl8vgsBQAACai3HSzxpY2978ZuQEAwPcoN92sfdQmPNQiaxibFwAAX+PTt5t9dzKxxWIxOQ0AAD0P5aab1TPfBgAAU1Fuutm3IzfcVwoAADNQbroZt14AAMBclJtuxmngAACYi3LTzbg6MQAA5qLcdLP2kZtoyg0AAKag3HQz95wbDksBAGAKr5WbRx99VGeffbaioqIUHx/f4TqlpaW69NJLFRUVpZSUFP3yl79UW1tbh+sGinoOSwEAYCqvfQK3tLToqquuUl5enl544YWjXnc6nbr00kuVlpamNWvWqLy8XDfccIPCw8P12GOPeSuW13HTTAAAzOW1kZsFCxZozpw5GjFiRIevf/jhh9q6dateeeUVjR49WlOnTtUjjzyiRYsWqaWlxVuxvK6huVUSZ0sBAGAW0+bcFBQUaMSIEUpNTXUvmzx5sux2u7Zs2XLM9zkcDtntdo+HP+E6NwAAmMu0clNRUeFRbCS5n1dUVBzzffn5+bLZbO5HZmamV3N2lXvODSM3AACYokvl5oEHHpDFYjnuY/v27d7KKkmaN2+e6urq3I+ysjKvfr+uYs4NAADm6tIn8L333quZM2ced52cnJxOfa20tDStX7/eY1llZaX7tWOxWq2yWq2d+h5m4FRwAADM1aVP4OTkZCUnJ3fLN87Ly9Ojjz6qqqoqpaSkSJKWLVumuLg4DR06tFu+hy852pxaX1LjvkIxF/EDAMAcXvsELi0tVU1NjUpLS+V0OlVUVCRJGjhwoGJiYjRp0iQNHTpUP/vZz/Tkk0+qoqJCv/nNbzRr1iy/HpnpyOsbyvTwu1vU1OKUJEWEhah3VITJqQAA6Jm8Vm7mz5+vl156yf18zJgxkqQVK1ZowoQJCg0N1Xvvvac77rhDeXl5io6O1owZM7Rw4UJvRfKal9fuVlOLU8mxVl0wOFk/HpepyPBQs2MBANAjWQzDMMwOcSrsdrtsNpvq6uoUFxfn8+/vchka+tD7am51acV9E5SdFO3zDAAABBpvfn5zb6lTVHaoSc2tLlnDQpSVEGV2HAAAejzKzSkqrqiXJA1IjlFoiMXkNAAAgHJzinZUNUiSTkuNMTkJAACQKDen7KvKIyM3g1JjTU4CAAAkys0p+6qyfeSGcgMAgD+g3JwCp8vQrgNHys1gyg0AAH6BcnMK9lQ3qqXNpV7hoerbu5fZcQAAgCg3p6R9vs3AlBiFcKYUAAB+gXJzCtrn2wziTCkAAPwG5eYUtI/cMJkYAAD/Qbk5BTsqmUwMAIC/odycpFanS18f5LAUAAD+hnJzkvZUN6rVaSg6IlR94jlTCgAAfxFmdoBAc6ixRSu/qtK7n5VLkgamxspi4UwpAAD8BeWmCyrtzbr02U91sMHhXnZWToKJiQAAwPdRbrrgfz7eqYMNDmXYIvWj0X107sAknT0g0exYAADgOyg3nVRW06SlG0olSf/1k9HKo9QAAOCXmFDcSX/4eIdanYbOGZhIsQEAwI9Rbjrh6wMN+r9N+yRJ904abHIaAABwPByWOobNpYe0Zle1tlfUq3B3jZwuQxcNSdHYrN5mRwMAAMdBuTmGdz8r1+L/lLifx0WG6b7JjNoAAODvKDfHkDcgUQcbHDo9PU5D0mM1um+8ekdHmB0LAACcAOXmGC4emqqLh6aaHQMAAHQRE4oBAEBQodwAAICgQrkBAABBhXIDAACCCuUGAAAEFcoNAAAIKpQbAAAQVCg3AAAgqFBuAABAUKHcAACAoEK5AQAAQYVyAwAAggrlBgAABBXKDQAACCqUGwAAEFS8Vm4effRRnX322YqKilJ8fHyH61gslqMeS5cu9VYkAADQA4R56wu3tLToqquuUl5enl544YVjrvfiiy9qypQp7ufHKkIAAACd4bVys2DBAknSkiVLjrtefHy80tLSvBUDAAD0MKbPuZk1a5aSkpJ05plnavHixTIM47jrOxwO2e12jwcAAEA7r43cdMbChQt14YUXKioqSh9++KHuvPNONTQ06K677jrme/Lz892jQgAAAN9nMU40VPIdDzzwgJ544onjrrNt2zYNGTLE/XzJkiW65557VFtbe8KvP3/+fL344osqKys75joOh0MOh8P93G63KzMzU3V1dYqLizvxDwEAAExnt9tls9m88vndpZGbe++9VzNnzjzuOjk5OScdJjc3V4888ogcDoesVmuH61it1mO+BgAA0KVyk5ycrOTkZG9lUVFRkXr37k15AQAAJ81rc25KS0tVU1Oj0tJSOZ1OFRUVSZIGDhyomJgYvfvuu6qsrNRZZ52lyMhILVu2TI899pjuu+8+b0UCAAA9gNfKzfz58/XSSy+5n48ZM0aStGLFCk2YMEHh4eFatGiR5syZI8MwNHDgQD399NO65ZZbvBUJAAD0AF2aUOyPvDkhCQAAeIc3P79Nv84NAABAd6LcAACAoEK5AQAAQYVyAwAAggrlBgAABBXKDQAACCqUGwAAEFQoNwAAIKhQbgAAQFCh3AAAgKBCuQEAAEGFcgMAAIIK5QYAAAQVyg0AAAgqlBsAABBUKDcAACCoUG4AAEBQCTM7wKkyDEOSZLfbTU4CAAA6q/1zu/1zvDsFfLmpr6+XJGVmZpqcBAAAdFV9fb1sNlu3fk2L4Y3K5EMul0v79+9XbGysLBZLt35tu92uzMxMlZWVKS4urlu/dqBhW3hie3yLbeGJ7fEttoUntse32rfF1q1bNXjwYIWEdO8smYAfuQkJCVHfvn29+j3i4uJ6/I7Yjm3hie3xLbaFJ7bHt9gWntge3+rTp0+3FxuJCcUAACDIUG4AAEBQodwch9Vq1UMPPSSr1Wp2FNOxLTyxPb7FtvDE9vgW28IT2+Nb3t4WAT+hGAAA4LsYuQEAAEGFcgMAAIIK5QYAAAQVyg0AAAgqlBsAABBUKDfHsGjRIvXv31+RkZHKzc3V+vXrzY7kdfn5+Ro/frxiY2OVkpKiadOmqbi42GOdCRMmyGKxeDxuv/12kxJ718MPP3zUzzpkyBD3683NzZo1a5YSExMVExOj6dOnq7Ky0sTE3tO/f/+jtoXFYtGsWbMkBf9+sXr1al122WXKyMiQxWLR22+/7fG6YRiaP3++0tPT1atXL02cOFE7duzwWKempkbXX3+94uLiFB8fr5tuukkNDQ0+/Cm6x/G2RWtrq+6//36NGDFC0dHRysjI0A033KD9+/d7fI2O9qfHH3/cxz9J9zjRvjFz5syjftYpU6Z4rNMT9g1JHf4NsVgseuqpp9zrdNe+QbnpwN/+9jfNnTtXDz30kDZt2qRRo0Zp8uTJqqqqMjuaV61atUqzZs3S2rVrtWzZMrW2tmrSpElqbGz0WO+WW25ReXm5+/Hkk0+alNj7hg0b5vGzfvrpp+7X5syZo3fffVdvvPGGVq1apf379+vKK680Ma33bNiwwWM7LFu2TJJ01VVXudcJ5v2isbFRo0aN0qJFizp8/cknn9Szzz6r559/XuvWrVN0dLQmT56s5uZm9zrXX3+9tmzZomXLlum9997T6tWrdeutt/rqR+g2x9sWTU1N2rRpkx588EFt2rRJb775poqLi/WjH/3oqHUXLlzosb/84he/8EX8bneifUOSpkyZ4vGzvvbaax6v94R9Q5LHNigvL9fixYtlsVg0ffp0j/W6Zd8wcJQzzzzTmDVrlvu50+k0MjIyjPz8fBNT+V5VVZUhyVi1apV72Q9+8APj7rvvNi+UDz300EPGqFGjOnyttrbWCA8PN9544w33sm3bthmSjIKCAh8lNM/dd99tDBgwwHC5XIZh9Kz9QpLx1ltvuZ+7XC4jLS3NeOqpp9zLamtrDavVarz22muGYRjG1q1bDUnGhg0b3Ov8+9//NiwWi7Fv3z6fZe9u398WHVm/fr0hydizZ497Wb9+/YxnnnnGu+FM0NH2mDFjhnH55Zcf8z09ed+4/PLLjQsvvNBjWXftG4zcfE9LS4sKCws1ceJE97KQkBBNnDhRBQUFJibzvbq6OklSQkKCx/K//vWvSkpK0vDhwzVv3jw1NTWZEc8nduzYoYyMDOXk5Oj6669XaWmpJKmwsFCtra0e+8mQIUOUlZUV9PtJS0uLXnnlFf385z+XxWJxL+9J+8V3lZSUqKKiwmNfsNlsys3Nde8LBQUFio+P1xlnnOFeZ+LEiQoJCdG6det8ntmX6urqZLFYFB8f77H88ccfV2JiosaMGaOnnnpKbW1t5gT0gZUrVyolJUWDBw/WHXfcoerqavdrPXXfqKys1D//+U/ddNNNR73WHftGwN8VvLsdPHhQTqdTqampHstTU1O1fft2k1L5nsvl0j333KNzzjlHw4cPdy+/7rrr1K9fP2VkZOjzzz/X/fffr+LiYr355psmpvWO3NxcLVmyRIMHD1Z5ebkWLFig8847T19++aUqKioUERFx1B/s1NRUVVRUmBPYR95++23V1tZq5syZ7mU9ab/4vvb/3h39zWh/raKiQikpKR6vh4WFKSEhIaj3l+bmZt1///269tprPe6Cfdddd2ns2LFKSEjQmjVrNG/ePJWXl+vpp582Ma13TJkyRVdeeaWys7O1a9cu/frXv9bUqVNVUFCg0NDQHrtvvPTSS4qNjT3qUH537RuUG3Ro1qxZ+vLLLz3mmEjyOA48YsQIpaen66KLLtKuXbs0YMAAX8f0qqlTp7r/PXLkSOXm5qpfv356/fXX1atXLxOTmeuFF17Q1KlTlZGR4V7Wk/YLdE5ra6t+8pOfyDAMPffccx6vzZ071/3vkSNHKiIiQrfddpvy8/OD7r5L11xzjfvfI0aM0MiRIzVgwACtXLlSF110kYnJzLV48WJdf/31ioyM9FjeXfsGh6W+JykpSaGhoUed9VJZWam0tDSTUvnW7Nmz9d5772nFihXq27fvcdfNzc2VJO3cudMX0UwVHx+v0047TTt37lRaWppaWlpUW1vrsU6w7yd79uzRRx99pJtvvvm46/Wk/aL9v/fx/makpaUddUJCW1ubampqgnJ/aS82e/bs0bJlyzxGbTqSm5urtrY27d692zcBTZSTk6OkpCT370ZP2zck6ZNPPlFxcfEJ/45IJ79vUG6+JyIiQuPGjdPy5cvdy1wul5YvX668vDwTk3mfYRiaPXu23nrrLX388cfKzs4+4XuKiookSenp6V5OZ76Ghgbt2rVL6enpGjdunMLDwz32k+LiYpWWlgb1fvLiiy8qJSVFl1566XHX60n7RXZ2ttLS0jz2BbvdrnXr1rn3hby8PNXW1qqwsNC9zscffyyXy+UugsGivdjs2LFDH330kRITE0/4nqKiIoWEhBx1eCYY7d27V9XV1e7fjZ60b7R74YUXNG7cOI0aNeqE6570vnHKU5KD0NKlSw2r1WosWbLE2Lp1q3Hrrbca8fHxRkVFhdnRvOqOO+4wbDabsXLlSqO8vNz9aGpqMgzDMHbu3GksXLjQ2Lhxo1FSUmK88847Rk5OjnH++eebnNw77r33XmPlypVGSUmJ8Z///MeYOHGikZSUZFRVVRmGYRi33367kZWVZXz88cfGxo0bjby8PCMvL8/k1N7jdDqNrKws4/777/dY3hP2i/r6emPz5s3G5s2bDUnG008/bWzevNl9BtDjjz9uxMfHG++8847x+eefG5dffrmRnZ1tHD582P01pkyZYowZM8ZYt26d8emnnxqDBg0yrr32WrN+pJN2vG3R0tJi/OhHPzL69u1rFBUVefwdcTgchmEYxpo1a4xnnnnGKCoqMnbt2mW88sorRnJysnHDDTeY/JOdnONtj/r6euO+++4zCgoKjJKSEuOjjz4yxo4dawwaNMhobm52f42esG+0q6urM6KiooznnnvuqPd3575BuTmGP/zhD0ZWVpYRERFhnHnmmcbatWvNjuR1kjp8vPjii4ZhGEZpaalx/vnnGwkJCYbVajUGDhxo/PKXvzTq6urMDe4lV199tZGenm5EREQYffr0Ma6++mpj586d7tcPHz5s3HnnnUbv3r2NqKgo44orrjDKy8tNTOxdH3zwgSHJKC4u9ljeE/aLFStWdPi7MWPGDMMwjpwO/uCDDxqpqamG1Wo1LrrooqO2U3V1tXHttdcaMTExRlxcnHHjjTca9fX1Jvw0p+Z426KkpOSYf0dWrFhhGIZhFBYWGrm5uYbNZjMiIyON008/3Xjsscc8PuwDyfG2R1NTkzFp0iQjOTnZCA8PN/r162fccsstR/2Pck/YN9r96U9/Mnr16mXU1tYe9f7u3DcshmEYXRvrAQAA8F/MuQEAAEGFcgMAAIIK5QYAAAQVyg0AAAgqlBsAABBUKDcAACCoUG4AAEBQodwAAICgQrkBAABBhXIDAACCCuUGAAAElf8P7Y3kKRa5/nAAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABNoAAAHACAYAAAB0/gUQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCsElEQVR4nO3df5hWdZ0//ucMyAwWM2rK8GMnf5b4E0iTMFu1Rln1YmU/5aLtAktqW9l+VLYfUiqWJqlpbEayaUbq9vG35ie9IGUjM1lNlNZMTRSElEH9qjOICjJzf//g47QToAOcmXtmeDyu61x5n/u87/v1PkznNfdzzn1ORalUKgUAAAAA2CqV5S4AAAAAAHoDQRsAAAAAFEDQBgAAAAAFELQBAAAAQAEEbQAAAABQAEEbAAAAABRA0AYAAAAABRC0AQAAAEAB+pa7gO6otbU1zz//fAYMGJCKiopylwPQ45VKpaxatSpDhgxJZaW/8egzAMXSZzak1wAUq6O9RtC2Ec8//3zq6+vLXQZAr7N8+fL81V/9VbnLKDt9BqBz6DN/ptcAdI536zWCto0YMGBAkvU7r6ampszVAPR8zc3Nqa+vbzu+buv0GYBi6TMb0msAitXRXiNo24i3T62uqanRlAAK5Ksr6+kzAJ1Dn/kzvQagc7xbr3EBAwAAAAAogKANAAAAAAogaAMAAACAAgjaAAAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAII2AAAAAChA33IX0KusWJHMnp388Y/JgAHJCSckhx2WVFSUuzIAeoM330xuvDG59971veXww5NPfSqpri53ZQAA0C2tW5fccUcyd+76//7wh5N/+If1sU1nELQV5fLLkzPPTEqlpLLyz+uOOCK5/faktrac1QHQ0/32t8lxxyUvvpj0/X/t+6qrki99KbnrruRDHypvfQAA0M0sXpyMGZM888yff4X+8Y+TL385ueWW5Oiji39PXx0twq23Jv/7fyctLUlr6/qIdN269c/9+tfJ+PHlrQ+Anm3FiuSoo5KXX17/+H/2mZdeShoakhdeKF99AADQzbz+evLxjyfPPrv+8du/QpdK658bOzb5wx+Kf19B29YqlZJvfGPTXw9taVl/fuKiRV1aFgC9yKxZyWuvre8pf6mlJWlqWn92GwAAkCS54YZk+fKN/wrd2rp++bd/K/59BW1b67nnkv/+7/WB26b07bv+66MAsCVuumnjvyG8rbV1/TYAAECS9V8+rHyH1GvduvWXPy6aoG1rvf76u29TUZG88Ubn1wJA77R6dTHbAADANmL16vV/j34nb75Z/PsK2rZWfX3ynve88zZvvZXsv3/X1ANA7zNy5J+v3roxffuu3wYAAEiSDB/+zr9CV1Z2TlQjaNta/fsnJ5+c9Omz8ecrKpIddkhOOKFLywKgF/nCF/5884ONWbcu+fznu64eAADo5v75n9/5V+jW1uSLXyz+fQVtRfjmN5NhwzYM2/r0Wb/8x38k1dXlqQ2Anu+oo5LTTlv/3//z5jtvX3RiypTkiCO6vCwAAOiuhg1LLr54/X//z2u1VVSsX/7X/0r+8R+Lf19BWxFqa5Pf/CY566xkp53Wr6usXH+v2PvvT449trz1AdCzVVQkl1+e/PjHyb77/nn9/vsn116bfOc75asNAAC6qS9/OfnZz5KPfOTP63bfff3dRm+8cdNfTtwaFaXSO90uc9vU3Nyc2traNDU1paamZvMGt7YmTU3J9tsnVVWdUyBAD7NVx9VeaKv3R3Pz+vBtwIDiiwPogfSZDdknAO2tXr3+q6Q1Ne2/JNJRHT2uvsNl4dgilZXJjjuWuwoAejMfmAAAYLO8230si+KrowAAAABQAEEbAAAAABRA0AYAAAAABRC0AQAAAEABBG0AAAAAUABBGwAAAAAUQNAGAAAAAAUQtAEAAABAAQRtAAAAAFCAsgZt9957b8aOHZshQ4akoqIit99+e7vnb7311hx99NF53/vel4qKiixatOhdX3P27NmpqKhot1RXV3fOBADo1vQZAACgK5U1aFu9enWGDx+emTNnbvL5ww47LBdddNFmvW5NTU1WrFjRtjz77LNFlAtAD6PPAAAAXalvOd/8mGOOyTHHHLPJ5ydMmJAkWbp06Wa9bkVFRQYNGrQ1pQHQC+gzAABAV+qV12h77bXXsuuuu6a+vj7HH398HnvssXfcfs2aNWlubm63AMCm6DMAAMDG9Lqgbe+9987VV1+dn/3sZ7nuuuvS2tqaQw89NH/60582OWb69Ompra1tW+rr67uwYgB6En0GAADYlF4XtI0ePToTJ07MiBEjcvjhh+fWW2/NLrvskn//93/f5JipU6emqampbVm+fHkXVgxAT6LPAAAAm1LWa7R1he222y4jR47M4sWLN7lNVVVVqqqqurAqAHoLfQYAAHhbrzuj7S+1tLTk0UcfzeDBg8tdCgC9kD4DAAC8raxntL322mvtzgBYsmRJFi1alJ122invf//78/LLL2fZsmV5/vnnkyRPPvlkkmTQoEFtd3ubOHFihg4dmunTpydJvvnNb+YjH/lI9tprr7z66qu55JJL8uyzz+aUU07p4tkBUG76DAAA0JXKGrQ99NBDOfLII9seT5kyJUkyadKkzJ49O3fccUcmT57c9vyJJ56YJJk2bVrOO++8JMmyZctSWfnnE/NeeeWVnHrqqWlsbMyOO+6Ygw46KPfff3/23XffLpgRAN2JPgMAAHSlilKpVCp3Ed1Nc3Nzamtr09TUlJqamnKXA9DjOa62Z38AFKu7H1fvvffeXHLJJVm4cGFWrFiR2267LePGjXvHMfPnz8+UKVPy2GOPpb6+PmeffXb+6Z/+qcPv2d33CUBP09Hjaq+/RhsAAEA5rV69OsOHD8/MmTM7tP2SJUty3HHH5cgjj8yiRYtyxhln5JRTTsncuXM7uVIAtlavv+soAABAOR1zzDE55phjOrz9rFmzsvvuu+fSSy9Nkuyzzz6577778t3vfjdjxozprDIBKIAz2gAAALqRBQsWpKGhod26MWPGZMGCBZscs2bNmjQ3N7dbAOh6gjYAAIBupLGxMXV1de3W1dXVpbm5OW+88cZGx0yfPj21tbVtS319fVeUCsBfELQBAAD0cFOnTk1TU1Pbsnz58nKXBLBNco02AACAbmTQoEFZuXJlu3UrV65MTU1N+vfvv9ExVVVVqaqq6oryAHgHzmgDAADoRkaPHp158+a1W3f33Xdn9OjRZaoIgI4StAEAAHSi1157LYsWLcqiRYuSJEuWLMmiRYuybNmyJOu/9jlx4sS27T/3uc/lmWeeyVe+8pU88cQT+cEPfpAbb7wxZ555ZjnKB2AzCNoAAAA60UMPPZSRI0dm5MiRSZIpU6Zk5MiROffcc5MkK1asaAvdkmT33XfPnXfembvvvjvDhw/PpZdemquuuipjxowpS/0AdJxrtAEAAHSiI444IqVSaZPPz549e6NjHnnkkU6sCoDO4Iw2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAAgjaAAAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAAgjaAAAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAAgjaAAAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAApQ1aLv33nszduzYDBkyJBUVFbn99tvbPX/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": {}, @@ -229,12 +230,33 @@ "\n", "plt.plot(np.sort(dh.eig()))\n", "plt.ylim(None, 20)\n", - "np.real(dh.eig()).min()" + "print(np.real(dh.eig()).min())\n", + "print(np.imag(dh.eig()).min())\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "coords = dh.xyz[-3:]\n", + "\n", + "\n", + "plt.figure(figsize=(15, 5))\n", + "plt.subplot(131)\n", + "plt.scatter(coords[:, 0], coords[:, 2], color=[\"r\", \"g\", \"b\"])\n", + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"z\")\n", + "plt.subplot(132)\n", + "plt.scatter(coords[:, 1], coords[:, 2], color=[\"r\", \"g\", \"b\"])\n", + "plt.xlabel(\"y\")\n", + "plt.ylabel(\"z\")\n", + "plt.subplot(133)\n", + "plt.scatter(coords[:, 0], coords[:, 1], color=[\"r\", \"g\", \"b\"])\n", + "plt.xlabel(\"x\")\n", + "plt.ylabel(\"y\")\n", + "print(\"xyz[-3:]: red, green, blue\")" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -327,7 +349,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -426,7 +448,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -448,7 +470,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -495,24 +517,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ + "Starting matrix inversions\n", "Total number of k points: 100\n", + "Number of energy samples per k point: 50\n", "Total number of directions: 3\n", - "Total number of matrix inversions: 300\n", - "The shape of the Hamiltonian and the Greens function is 84x84=7056\n" + "Total number of matrix inversions: 15000\n", + "The shape of the Hamiltonian and the Greens function is 84x84=7056\n", + "================================================================================================================================================================\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "k loop: 100%|██████████| 100/100 [00:27<00:00, 3.70it/s]\n" + "k loop: 100%|██████████| 100/100 [00:26<00:00, 3.77it/s]\n" ] } ], @@ -520,8 +545,11 @@ "if rank == root_node:\n", " print(\"Starting matrix inversions\")\n", " print(f\"Total number of k points: {kset.shape[0]}\")\n", + " print(f\"Number of energy samples per k point: {eset}\")\n", " print(f\"Total number of directions: {len(hamiltonians)}\")\n", - " print(f\"Total number of matrix inversions: {kset.shape[0] * len(hamiltonians)}\")\n", + " print(\n", + " 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", " print(\n", " \"================================================================================================================================================================\"\n", @@ -585,7 +613,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -596,6 +624,8 @@ "================================================================================================================================================================\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", @@ -683,14 +713,14 @@ "\n", "================================================================================================================================================================\n", "Runtime information: \n", - "Total runtime: 28.020738958 s\n", + "Total runtime: 27.572681459000023 s\n", "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "Initial setup: 0.16348762500000014 s\n", - "Hamiltonian conversion and XC field extraction: 0.739 s\n", - "Pair and site datastructure creatrions: 0.016 s\n", - "k set cration and distribution: 0.018 s\n", - "Rotating XC potential: 0.216 s\n", - "Greens function inversion: 26.841 s\n", + "Initial setup: 0.11676670900010322 s\n", + "Hamiltonian conversion and XC field extraction: 0.907 s\n", + "Pair and site datastructure creatrions: 0.011 s\n", + "k set cration and distribution: 0.006 s\n", + "Rotating XC potential: 0.230 s\n", + "Greens function inversion: 26.275 s\n", "Calculate energies and magnetic components: 0.027 s\n" ] } @@ -744,9 +774,9 @@ "\n", " print_parameters(simulation_parameters)\n", " print_atoms_and_pairs(magnetic_entities, pairs)\n", - " print_runtime_informations(times)\n", + " print_runtime_information(times)\n", "\n", - " # remove clutter to save magnetic entities and pair information\n", + " # remove clutter from magnetic entities and pair information\n", " for pair in pairs:\n", " del pair[\"Gij\"]\n", " del pair[\"Gij_tmp\"]\n", @@ -757,485 +787,32 @@ " del mag_ent[\"Gii_tmp\"]\n", " del mag_ent[\"Vu1\"]\n", " del mag_ent[\"Vu2\"]\n", + " # create output dictionary with all the relevant data\n", " results = dict(\n", " parameters=simulation_parameters,\n", " magnetic_entities=magnetic_entities,\n", " pairs=pairs,\n", " runtime=times,\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'parameters': {'path': 'Not yet specified.',\n", - " 'scf_xcf_orientation': array([0, 0, 1]),\n", - " 'ref_xcf_orientations': [{'o': array([1, 0, 0]),\n", - " 'vw': [array([0, 1, 0]), array([0, 0, 1])]},\n", - " {'o': array([0, 1, 0]), 'vw': [array([1, 0, 0]), array([0, 0, 1])]},\n", - " {'o': array([0, 0, 1]), 'vw': [array([1, 0, 0]), array([0, 1, 0])]}],\n", - " 'kset': 10,\n", - " 'kdirs': 'xy',\n", - " 'ebot': -15,\n", - " 'eset': 50,\n", - " 'esetp': 1000,\n", - " 'parallel_size': 1,\n", - " 'cell': array([[ 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", - " 'magnetic_entities': [{'atom': 3,\n", - " 'l': 2,\n", - " 'orbital_indeces': array([41, 42, 43, 44, 45, 46, 47, 48, 49, 50], dtype=int32),\n", - " 'spin_box_indeces': array([ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,\n", - " 95, 96, 97, 98, 99, 100, 101]),\n", - " 'tags': ['[3]Fe(2)'],\n", - " 'xyz': [array([-7.33915874e-06, 4.14927851e-06, 1.16575858e+01])],\n", - " 'energies': [[3.734465086018773, 3.7345045132387904],\n", - " [3.734496010868627, 3.7344992971735755],\n", - " [3.744098645200186, 3.744096314352881]]},\n", - " {'atom': 4,\n", - " 'l': 2,\n", - " 'orbital_indeces': array([56, 57, 58, 59, 60, 61, 62, 63, 64, 65], dtype=int32),\n", - " 'spin_box_indeces': array([112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,\n", - " 125, 126, 127, 128, 129, 130, 131]),\n", - " 'tags': ['[4]Fe(2)'],\n", - " 'xyz': [array([-7.32698766e-06, 4.15827452e-06, 8.91242254e+00])],\n", - " 'energies': [[3.734489896651657, 3.7345163491510975],\n", - " [3.7346033722527983, 3.73451361626319],\n", - " [3.744120742400213, 3.744123051274557]]},\n", - " {'atom': 5,\n", - " 'l': 2,\n", - " 'orbital_indeces': array([71, 72, 73, 74, 75, 76, 77, 78, 79, 80], dtype=int32),\n", - " 'spin_box_indeces': array([142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,\n", - " 155, 156, 157, 158, 159, 160, 161]),\n", - " 'tags': ['[5]Fe(2)'],\n", - " 'xyz': [array([ 1.89546671, 1.09439132, 10.2850027 ])],\n", - " 'energies': [[2.1707567909611734, 2.170785438112471],\n", - " [2.1708196859983695, 2.1707887369208603],\n", - " [2.171678783995076, 2.1716787861431013]]}],\n", - " 'pairs': [{'ai': 0,\n", - " 'aj': 1,\n", - " 'Ruc': array([0, 0, 0]),\n", - " 'tags': ['[3]Fe(2)', '[4]Fe(2)'],\n", - " 'energies': [[-0.03944557925189693,\n", - " -0.0003491314233520734,\n", - " 0.00034913266605597995,\n", - " -0.03918800351839513],\n", - " [-0.03962609204615879,\n", - " -2.5347725119651397e-07,\n", - " 2.5688392741602586e-07,\n", - " -0.03936559435457027],\n", - " [-0.032485913309031784,\n", - " 2.086482622369864e-08,\n", - " 2.1423482286665388e-08,\n", - " -0.03248588738966994]],\n", - " 'J_iso': -39.33305904162077,\n", - " 'J_S': array([-3.25353129e-02, -1.12520210e-01, -2.11441543e-05, 2.53477251e-04,\n", - " -6.21351953e-07]),\n", - " 'D': array([-3.49132045e-01, 2.55180589e-04, -2.79328031e-07])},\n", - " {'ai': 1,\n", - " 'aj': 2,\n", - " 'Ruc': array([0, 0, 0]),\n", - " 'tags': ['[4]Fe(2)', '[5]Fe(2)'],\n", - " 'energies': [[-0.06535922203590024,\n", - " -0.003620020827251614,\n", - " 0.0035330358091578322,\n", - " -0.06583864458582893],\n", - " [-0.065100875948478,\n", - " -0.006258992627124543,\n", - " 0.0060680126832299295,\n", - " -0.06546669860888496],\n", - " [-0.06595774697036409,\n", - " -3.700717915377913e-05,\n", - " -3.7042462582999624e-05,\n", - " -0.06591465478729451]],\n", - " 'J_iso': -65.55485507687138,\n", - " 'J_S': array([0.08815647, 0.19563304, 0.03702482, 6.25899263, 0.04349251]),\n", - " 'D': array([-3.57652832e+00, 6.16350266e+00, 1.76417146e-05])},\n", - " {'ai': 0,\n", - " 'aj': 2,\n", - " 'Ruc': array([0, 0, 0]),\n", - " 'tags': ['[3]Fe(2)', '[5]Fe(2)'],\n", - " 'energies': [[-0.0653574852836104,\n", - " 0.003608500059552775,\n", - " -0.0035089164454806124,\n", - " -0.06583553716382626],\n", - " [-0.06510265546673727,\n", - " 0.006248944319269189,\n", - " -0.006045943341346723,\n", - " -0.06546780758377949],\n", - " [-0.0659577276970226,\n", - " -3.700467282282758e-05,\n", - " -3.704868571469545e-05,\n", - " -0.06591463268052017]],\n", - " 'J_iso': -65.55361001040538,\n", - " 'J_S': array([ 0.08580243, 0.19612473, 0.03702668, -6.24894432, -0.04979181]),\n", - " 'D': array([ 3.55870825e+00, -6.14744383e+00, 2.20064459e-05])}],\n", - " 'runtime': {'start_time': 3.2424505,\n", - " 'setup_time': 3.405938125,\n", - " 'H_and_XCF_time': 4.145158916,\n", - " 'site_and_pair_dictionaries_time': 4.161620875,\n", - " 'k_set_time': 4.179151,\n", - " 'reference_rotations_time': 4.395303708,\n", - " 'green_function_inversion_time': 31.236585666,\n", - " 'end_time': 31.263189458}}" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "results" + " )\n", + " # save dictionary\n", + " with open(outfile, \"wb\") as output_file:\n", + " pickle.dump(results, output_file)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [ { "ename": "SyntaxError", - "evalue": "invalid syntax (4136980242.py, line 2)", + "evalue": "invalid syntax (3105939143.py, line 1)", "output_type": "error", "traceback": [ - "\u001b[0;36m Cell \u001b[0;32mIn[11], line 2\u001b[0;36m\u001b[0m\n\u001b[0;31m ================================================================================================================================================================\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + "\u001b[0;36m Cell \u001b[0;32mIn[10], line 1\u001b[0;36m\u001b[0m\n\u001b[0;31m ========================================\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], - "source": [ - "##################################################################### GROGU OUTPUT #############################################################################\n", - "================================================================================================================================================================\n", - "Input file: \n", - "Not yet specified.\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", - "number of k points: 20\n", - "k point directions: xy\n", - "================================================================================================================================================================\n", - "Parameters for the contour integral:\n", - "Ebot: -15\n", - "Eset: 50\n", - "Esetp: 10000\n", - "================================================================================================================================================================\n", - "Atomic informations: \n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "[atom index]Element(orbitals) x [Ang] y [Ang] z [Ang] Sx Sy Sz Q Lx Ly Lz Jx Jy Jz\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "[3]Fe(2) -7.339158738013707e-06 4.149278510690423e-06 11.657585837928032\n", - "\n", - "[4]Fe(2) -7.326987662162937e-06 4.158274523275774e-06 8.912422537596708\n", - "\n", - "[5]Fe(2) 1.8954667088117545 1.0943913231921656 10.285002698393109\n", - "\n", - "================================================================================================================================================================\n", - "Exchange [meV]\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "Magnetic entity1 Magnetic entity2 [i j k] d [Ang]\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "[3]Fe(2) [4]Fe(2) [0 0 0] d [Ang] Not yet.\n", - "Isotropic: -63.47396322818869\n", - "DMI: [-9.32946318e-01 -7.94980656e-04 -1.68626155e-06]\n", - "Symmetric-anisotropy: [-3.28657093e+00 1.26919731e+00 -5.25251097e-04 -7.51662131e-04\n", - " -1.69771318e-05]\n", - "Energies for debugging: \n", - "array([[-6.22047659e-02, -9.32929341e-04, 9.32963295e-04,\n", - " -6.14565896e-02],\n", - " [-6.75292273e-02, 7.51662131e-07, -8.38299181e-07,\n", - " -6.67605342e-02],\n", - " [-5.46814050e-02, 5.23564835e-07, 5.26937358e-07,\n", - " -5.46808408e-02]])\n", - "J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n", - "array([-0.06676053, -0.0546814 , -0.06220477])\n", - "Test J_xx = E(y,z) = E(z,y)\n", - "-0.06676053415896452 -0.05468084079537627\n", - "\n", - "[4]Fe(2) [5]Fe(2) [0 0 0] d [Ang] Not yet.\n", - "Isotropic: -60.97346468960899\n", - "DMI: [-3.79957858e+00 6.15341580e+00 1.98171298e-03]\n", - "Symmetric-anisotropy: [0.10023044 0.10625949 0.07113812 6.2430436 0.03640581]\n", - "Energies for debugging: \n", - "array([[-6.08672052e-02, -3.83598439e-03, 3.76317277e-03,\n", - " -6.11799546e-02],\n", - " [-6.06363005e-02, -6.24304360e-03, 6.06378800e-03,\n", - " -6.08732343e-02],\n", - " [-5.98939156e-02, -6.91564033e-05, -7.31198293e-05,\n", - " -5.98115156e-02]])\n", - "J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n", - "array([-0.06087323, -0.05989392, -0.06086721])\n", - "Test J_xx = E(y,z) = E(z,y)\n", - "-0.06087323425105703 -0.05981151560602731\n", - "\n", - "[3]Fe(2) [5]Fe(2) [0 0 0] d [Ang] Not yet.\n", - "Isotropic: -60.97783221534475\n", - "DMI: [ 3.78495282e+00 -6.14017205e+00 1.98157781e-03]\n", - "Symmetric-anisotropy: [ 0.09115149 0.10676698 0.07113987 -6.23329445 -0.04250828]\n", - "Energies for debugging: \n", - "array([[-6.08710652e-02, 3.82746110e-03, -3.74244454e-03,\n", - " -6.11757507e-02],\n", - " [-6.06489192e-02, 6.23329445e-03, -6.04704964e-03,\n", - " -6.08866807e-02],\n", - " [-5.98938645e-02, -6.91582962e-05, -7.31214518e-05,\n", - " -5.98114592e-02]])\n", - "J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n", - "array([-0.06088668, -0.05989386, -0.06087107])\n", - "Test J_xx = E(y,z) = E(z,y)\n", - "-0.06088668072635317 -0.05981145916679715\n", - "\n", - "================================================================================================================================================================\n", - "Runtime information: \n", - "Total runtime: 106.24268275 s\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "Initial setup: 0.12151341699999985 s\n", - "Hamiltonian conversion and XC field extraction: 0.664 s\n", - "Pair and site datastructure creatrions: 0.008 s\n", - "k set cration and distribution: 0.013 s\n", - "Rotating XC potential: 0.209 s\n", - "Greens function inversion: 105.202 s\n", - "Calculate energies and magnetic components: 0.025 s" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "##################################################################### GROGU OUTPUT #############################################################################\n", - "================================================================================================================================================================\n", - "Input file: \n", - "Not yet specified.\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", - "number of k points: 20\n", - "k point directions: xy\n", - "================================================================================================================================================================\n", - "Parameters for the contour integral:\n", - "Ebot: -15\n", - "Eset: 50\n", - "Esetp: 1000\n", - "================================================================================================================================================================\n", - "Atomic informations: \n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "[atom index]Element(orbitals) x [Ang] y [Ang] z [Ang] Sx Sy Sz Q Lx Ly Lz Jx Jy Jz\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "[3]Fe(2) -7.339158738013707e-06 4.149278510690423e-06 11.657585837928032\n", - "\n", - "[4]Fe(2) -7.326987662162937e-06 4.158274523275774e-06 8.912422537596708\n", - "\n", - "[5]Fe(2) 1.8954667088117545 1.0943913231921656 10.285002698393109\n", - "\n", - "================================================================================================================================================================\n", - "Exchange [meV]\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "Magnetic entity1 Magnetic entity2 [i j k] d [Ang]\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "[3]Fe(2) [4]Fe(2) [0 0 0] d [Ang] Not yet.\n", - "Isotropic: -63.613204102235464\n", - "DMI: [-9.33066197e-01 -9.12173634e-04 -2.66552375e-06]\n", - "Symmetric-anisotropy: [-3.41993761e+00 1.35139766e+00 -4.15748909e-03 -8.08118347e-04\n", - " 5.75970072e-05]\n", - "Energies for debugging: \n", - "array([[-6.22618064e-02, -9.33123794e-04, 9.33008600e-04,\n", - " -6.15446642e-02],\n", - " [-6.76703372e-02, 8.08118347e-07, -1.01622892e-06,\n", - " -6.70331417e-02],\n", - " [-5.07756491e-02, 4.15482357e-06, 4.16015462e-06,\n", - " -5.07708822e-02]])\n", - "J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n", - "array([-0.06703314, -0.05077565, -0.06226181])\n", - "Test J_xx = E(y,z) = E(z,y)\n", - "-0.06703314171283804 -0.05077088224506824\n", - "\n", - "[4]Fe(2) [5]Fe(2) [0 0 0] d [Ang] Not yet.\n", - "Isotropic: -60.981389719594276\n", - "DMI: [-3.79876136e+00 6.14996306e+00 4.52338839e-03]\n", - "Symmetric-anisotropy: [0.07285133 0.12581883 0.07081179 6.23894685 0.0361525 ]\n", - "Energies for debugging: \n", - "array([[-6.08555709e-02, -3.83491386e-03, 3.76260887e-03,\n", - " -6.11800599e-02],\n", - " [-6.06231936e-02, -6.23894685e-03, 6.06097927e-03,\n", - " -6.09085384e-02],\n", - " [-5.99055239e-02, -6.62883987e-05, -7.53351755e-05,\n", - " -5.98235127e-02]])\n", - "J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n", - "array([-0.06090854, -0.05990552, -0.06085557])\n", - "Test J_xx = E(y,z) = E(z,y)\n", - "-0.06090853838909634 -0.05982351269907684\n", - "\n", - "[3]Fe(2) [5]Fe(2) [0 0 0] d [Ang] Not yet.\n", - "Isotropic: -60.99043921106905\n", - "DMI: [ 3.78566701e+00 -6.13454413e+00 4.52301283e-03]\n", - "Symmetric-anisotropy: [ 0.06072775 0.1281154 0.07081275 -6.22754151 -0.04243893]\n", - "Energies for debugging: \n", - "array([[-6.08623238e-02, 3.82810594e-03, -3.74322808e-03,\n", - " -6.11792824e-02],\n", - " [-6.06338592e-02, 6.22754151e-03, -6.04154675e-03,\n", - " -6.09297115e-02],\n", - " [-5.99054929e-02, -6.62897359e-05, -7.53357616e-05,\n", - " -5.98234762e-02]])\n", - "J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n", - "array([-0.06092971, -0.05990549, -0.06086232])\n", - "Test J_xx = E(y,z) = E(z,y)\n", - "-0.06092971146100409 -0.05982347618612315\n", - "\n", - "================================================================================================================================================================\n", - "Runtime information: \n", - "Total runtime: 107.15435087500009 s\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "Initial setup: 0.11759866600004898 s\n", - "Hamiltonian conversion and XC field extraction: 0.737 s\n", - "Pair and site datastructure creatrions: 0.012 s\n", - "k set cration and distribution: 0.005 s\n", - "Rotating XC potential: 0.241 s\n", - "Greens function inversion: 106.014 s\n", - "Calculate energies and magnetic components: 0.028 s" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "##################################################################### GROGU OUTPUT #############################################################################\n", - "================================================================================================================================================================\n", - "Input file: \n", - "Not yet specified.\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", - "number of k points: 20\n", - "k point directions: xy\n", - "================================================================================================================================================================\n", - "Parameters for the contour integral:\n", - "Ebot: -15\n", - "Eset: 500\n", - "Esetp: 1000\n", - "================================================================================================================================================================\n", - "Atomic informations: \n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "[atom index]Element(orbitals) x [Ang] y [Ang] z [Ang] Sx Sy Sz Q Lx Ly Lz Jx Jy Jz\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "[3]Fe(2) -7.339158738013707e-06 4.149278510690423e-06 11.657585837928032\n", - "\n", - "[4]Fe(2) -7.326987662162937e-06 4.158274523275774e-06 8.912422537596708\n", - "\n", - "[5]Fe(2) 1.8954667088117545 1.0943913231921656 10.285002698393109\n", - "\n", - "================================================================================================================================================================\n", - "Exchange [meV]\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "Magnetic entity1 Magnetic entity2 [i j k] d [Ang]\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "[3]Fe(2) [4]Fe(2) [0 0 0] d [Ang] Not yet.\n", - "Isotropic: -63.440713197129476\n", - "DMI: [-9.32927095e-01 -6.78818440e-04 -1.30891264e-06]\n", - "Symmetric-anisotropy: [-3.23494810e+00 1.24125542e+00 -3.51321370e-05 -6.74519122e-04\n", - " -2.75924032e-05]\n", - "Energies for debugging: \n", - "array([[-6.21994578e-02, -9.32899503e-04, 9.32954688e-04,\n", - " -6.14470205e-02],\n", - " [-6.74870164e-02, 6.74519122e-07, -6.83117758e-07,\n", - " -6.66756613e-02],\n", - " [-5.57434879e-02, 3.38232244e-08, 3.64410497e-08,\n", - " -5.57434496e-02]])\n", - "J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n", - "array([-0.06667566, -0.05574349, -0.06219946])\n", - "Test J_xx = E(y,z) = E(z,y)\n", - "-0.06667566129701633 -0.05574344955698773\n", - "\n", - "[4]Fe(2) [5]Fe(2) [0 0 0] d [Ang] Not yet.\n", - "Isotropic: -60.970992244504004\n", - "DMI: [-3.79968813e+00 6.15433793e+00 2.99893936e-04]\n", - "Symmetric-anisotropy: [0.10892357 0.1011052 0.07120461 6.24418495 0.03644165]\n", - "Energies for debugging: \n", - "array([[-6.08698870e-02, -3.83612979e-03, 3.76324648e-03,\n", - " -6.11810210e-02],\n", - " [-6.06394618e-02, -6.24418495e-03, 6.06449091e-03,\n", - " -6.08620687e-02],\n", - " [-5.98919690e-02, -7.09047183e-05, -7.15045062e-05,\n", - " -5.98094909e-02]])\n", - "J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n", - "array([-0.06086207, -0.05989197, -0.06086989])\n", - "Test J_xx = E(y,z) = E(z,y)\n", - "-0.06086206867258083 -0.059809490859558875\n", - "\n", - "[3]Fe(2) [5]Fe(2) [0 0 0] d [Ang] Not yet.\n", - "Isotropic: -60.974228876874314\n", - "DMI: [ 3.78485228e+00 -6.14192269e+00 2.99131471e-04]\n", - "Symmetric-anisotropy: [ 0.10123774 0.10087947 0.07120733 -6.23504361 -0.04251795]\n", - "Energies for debugging: \n", - "array([[-6.08733494e-02, 3.82737022e-03, -3.74233433e-03,\n", - " -6.11763461e-02],\n", - " [-6.06540016e-02, 6.23504361e-03, -6.04880177e-03,\n", - " -6.08729911e-02],\n", - " [-5.98919105e-02, -7.09081946e-05, -7.15064575e-05,\n", - " -5.98094279e-02]])\n", - "J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n", - "array([-0.06087299, -0.05989191, -0.06087335])\n", - "Test J_xx = E(y,z) = E(z,y)\n", - "-0.060872991134857855 -0.05980942785099304\n", - "\n", - "================================================================================================================================================================\n", - "Runtime information: \n", - "Total runtime: 995.791283916 s\n", - "----------------------------------------------------------------------------------------------------------------------------------------------------------------\n", - "Initial setup: 0.10009837499999819 s\n", - "Hamiltonian conversion and XC field extraction: 0.522 s\n", - "Pair and site datastructure creatrions: 0.025 s\n", - "k set cration and distribution: 0.023 s\n", - "Rotating XC potential: 0.239 s\n", - "Greens function inversion: 994.703 s\n", - "Calculate energies and magnetic components: 0.178 s" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], "source": [ "========================================\n", " \n", @@ -1265,33 +842,6 @@ "Symmetric-anisotropy 0.26007 -0.00013243 0.12977 -0.069979 -0.042066\n", "--------------------------------------------------------------------------------\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "coords = dh.xyz[-3:]\n", - "\n", - "\n", - "plt.figure(figsize=(15, 5))\n", - "plt.subplot(131)\n", - "plt.scatter(coords[:, 0], coords[:, 2], color=[\"r\", \"g\", \"b\"])\n", - "plt.xlabel(\"x\")\n", - "plt.ylabel(\"z\")\n", - "plt.subplot(132)\n", - "plt.scatter(coords[:, 1], coords[:, 2], color=[\"r\", \"g\", \"b\"])\n", - "plt.xlabel(\"y\")\n", - "plt.ylabel(\"z\")\n", - "plt.subplot(133)\n", - "plt.scatter(coords[:, 0], coords[:, 1], color=[\"r\", \"g\", \"b\"])\n", - "plt.xlabel(\"x\")\n", - "plt.ylabel(\"y\")\n", - "print(\"xyz[-3:]: red, green, blue\")" - ] } ], "metadata": { diff --git a/test.pickle b/test.pickle new file mode 100644 index 0000000000000000000000000000000000000000..6eeee39b2df5b6e598376ff6459d38dd98dc92b9 GIT binary patch literal 4402 zcmchbe^eCL7035yz(t})8)@2zwjzr}Bt{MD!mchsU=4DhiMEQ9VfV2!%l>j^R(2_Z zV$i5_g2?#$N6;7*PhveaAtvau(3nbEQ*By_Nh@eL9Zn6b1M zSjh?!*fKaa&f{am%LxpinG7#!t#ks89Z6d&Fh4X8MFKa2Go;7Ou|IPAT;4#2)kA>{ zm(R(NI7Q(Bjvb0o!0K_+4CS*jTrEQ?+k;o5&7$zUYXqZ+?6HY9i329Z!s`w=Lj+UYZXW^qC95pzaj{-h8WFq;& z!7;m>aNp4m4w3r*Ka5uDN*aRD<^OWDQb$t9Vr>DdsiXnJS#+$n(ni8%!m9jm8f!qg zhv5pZ!$}9vg%(p-Eq~(Wp8rbCCh`l*=>$%UCaVEwQL-8V|Xc9@4MCmGy{k!~BX!e-Hv zO$V0>ya#e>cwxrA2YnhG^h9Xs(4K-e30elU$LNG=7ZiaN0|{v2u_9K3$K3 zUBiXhQUZhcqf~_A7lSf7wk$q%A(&0*`c3w;IW|}R=-(8l z3OeF!Ja7Zbj^yLlb3FS9ZN;591vg8=VU8a+Wc;kjeTgP+HQZ1M!KG6C>r1ob0(_9* z9^ZX>sZnx^uJp1?6K6}VaLZG}n(lu6ZA8uyUGIJHmE;2AzO>Y$At;NAprdb&pEA{J z&H5}@pBd0*LYoE604*C@4m2Y)6SUdT`1%pG(Rn2Oy|4{`EES=k5NSjP(TBJUu?o?T z7(lE>{54_?;&Q}V#5%+kh$|865mzA!<8Kh8pDIaDymCL;Kbm8Ux3pgf9({7cAHVjV z&AFD zqfvxn17Z{6M#N@B4sjFWX2dOsTM@S*Zb#gKxD#;~;%>y(5L*!UAj%}3_HYvCB^H1A zm(qUYq{){8E%n!p4JTTAuQZL1CGoU74aeUpQ_5HIr#q@UKagBu;k2sMwsVqO6mH&W zL(PYhE8H@Ncwy`|EFx!M`fFhqlo+sDFU~*s;9Oe{Uyf8b318449Q;#FUE;IeW8>mq zmQY=yAQeh4+XvyPv@Ss8GpgQ#h59{AgjmkHJs9Dm#r$s)P z)g8{=bL}t6gAw6RnE8tlvPP`jw=>hI@TUOm{JtPxcvhJk zBa`&3v6s|co3!v;hoe8aAnUzMV@-O?n`eU?g-HHY)1gtq1*~*vd8izZKt%7!e6okt zUlJYaFD;ru`tSPt&${vUBl7z0Sdeh3{eVmEI@Fx0FTU=S>%VB+{It`bp}?^I6FPtH zqYp*o`%p1!UEJ#ddA`osm7$ZL`Q`cC%`2`uyQ1wy3Dic`H(KH$jWiz$eI&~hPIZ!H$ZcNk(8S<*hK{n``GrZ!_JP`t>rB~kc?9bhAXy^ z9nIhrg9-o7HLYBKE7W(Oi`Bv3KR)k(m%V)1oRGvmnvdab8@AA#H*kfUkooqEk!&(e zGC;VXS{{T$g BpsfG^ literal 0 HcmV?d00001