You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1133 lines
152 KiB
1133 lines
152 KiB
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[Daniels-Air:55387] shmem: mmap: an error occurred while determining whether or not /var/folders/yh/dx7xl94n3g52ts3td8qcxjcc0000gn/T//ompi.Daniels-Air.501/jf.0/1750007808/sm_segment.Daniels-Air.501.684f0000.0 could be created.\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"'0.14.3'"
|
|
]
|
|
},
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from tqdm import tqdm\n",
|
|
"from sys import getsizeof\n",
|
|
"from timeit import default_timer as timer\n",
|
|
"\n",
|
|
"import numpy as np\n",
|
|
"import sisl\n",
|
|
"import sisl.viz\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",
|
|
"\"\"\" \n",
|
|
"# Some input parsing\n",
|
|
"parser = argparse.ArgumentParser()\n",
|
|
"parser.add_argument('--kset' , dest = 'kset' , default = 2 , type=int , help = 'k-space resolution of Jij calculation')\n",
|
|
"parser.add_argument('--kdirs' , dest = 'kdirs' , default = 'xyz' , help = 'Definition of k-space dimensionality')\n",
|
|
"parser.add_argument('--eset' , dest = 'eset' , default = 42 , type=int , help = 'Number of energy points on the contour')\n",
|
|
"parser.add_argument('--eset-p' , dest = 'esetp' , default = 10 , type=int , help = 'Parameter tuning the distribution on the contour')\n",
|
|
"parser.add_argument('--input' , dest = 'infile' , required = True , help = 'Input file name')\n",
|
|
"parser.add_argument('--output' , dest = 'outfile', required = True , help = 'Output file name')\n",
|
|
"parser.add_argument('--Ebot' , dest = 'Ebot' , default = -20.0 , type=float, help = 'Bottom energy of the contour')\n",
|
|
"parser.add_argument('--npairs' , dest = 'npairs' , default = 1 , type=int , help = 'Number of unitcell pairs in each direction for Jij calculation')\n",
|
|
"parser.add_argument('--adirs' , dest = 'adirs' , default = False , help = 'Definition of pair directions')\n",
|
|
"parser.add_argument('--use-tqdm', dest = 'usetqdm', default = 'not' , help = 'Use tqdm for progressbars or not')\n",
|
|
"parser.add_argument('--cutoff' , dest = 'cutoff' , default = 100.0 , type=float, help = 'Real space cutoff for pair generation in Angs')\n",
|
|
"parser.add_argument('--pairfile', dest = 'pairfile', default = False , help = 'File to read pair information')\n",
|
|
"args = parser.parse_args()\n",
|
|
"\"\"\"\n",
|
|
"# runtime information\n",
|
|
"times = dict()\n",
|
|
"times[\"start_time\"] = timer()\n",
|
|
"########################\n",
|
|
"# it works if data is in downloads folder\n",
|
|
"########################\n",
|
|
"sisl.__version__"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"-12.806878959999999"
|
|
]
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"dat = sisl.io.siesta.eigSileSiesta(\n",
|
|
" \"/Users/danielpozsar/Downloads/nojij/Fe3GeTe2/monolayer/soc/lat3_791/Fe3GeTe2.EIG\"\n",
|
|
")\n",
|
|
"siesta_eigs = dat.read_data()\n",
|
|
"siesta_eigs.min()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"================================================================================================================================================================\n",
|
|
"Input file: \n",
|
|
"/Users/danielpozsar/Downloads/nojij/Fe3GeTe2/monolayer/soc/lat3_791/Fe3GeTe2.fdf\n",
|
|
"Output file: \n",
|
|
"./Fe3GeTe2.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: 10000\n",
|
|
"================================================================================================================================================================\n",
|
|
"Setup done. Elapsed time: 3.879105916 s\n",
|
|
"================================================================================================================================================================\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"################################################################################\n",
|
|
"#################################### INPUT #####################################\n",
|
|
"################################################################################\n",
|
|
"path = (\n",
|
|
" \"/Users/danielpozsar/Downloads/nojij/Fe3GeTe2/monolayer/soc/lat3_791/Fe3GeTe2.fdf\"\n",
|
|
")\n",
|
|
"outfile = \"./Fe3GeTe2\"\n",
|
|
"\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",
|
|
"# o is the quantization axis, v and w are two axes perpendicular to it\n",
|
|
"# at this moment the user has to supply o,v,w on the input.\n",
|
|
"# we can have some default for this\n",
|
|
"ref_xcf_orientations = [\n",
|
|
" dict(o=np.array([1, 0, 0]), vw=[np.array([0, 1, 0]), np.array([0, 0, 1])]),\n",
|
|
" dict(o=np.array([0, 1, 0]), vw=[np.array([1, 0, 0]), np.array([0, 0, 1])]),\n",
|
|
" dict(o=np.array([0, 0, 1]), vw=[np.array([1, 0, 0]), np.array([0, 1, 0])]),\n",
|
|
"]\n",
|
|
"magnetic_entities = [\n",
|
|
" dict(atom=3, l=2),\n",
|
|
" dict(atom=4, l=2),\n",
|
|
" dict(atom=5, l=2),\n",
|
|
"]\n",
|
|
"pairs = [\n",
|
|
" dict(ai=0, aj=1, Ruc=np.array([0, 0, 0])),\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, -1, 0])),\n",
|
|
" dict(ai=1, aj=2, Ruc=np.array([-1, -1, 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",
|
|
"# Brilloun zone sampling and Green function contour integral\n",
|
|
"kset = 20\n",
|
|
"kdirs = \"xy\"\n",
|
|
"ebot = -13\n",
|
|
"eset = 100\n",
|
|
"esetp = 10000\n",
|
|
"################################################################################\n",
|
|
"#################################### INPUT #####################################\n",
|
|
"################################################################################\n",
|
|
"\n",
|
|
"# MPI parameters\n",
|
|
"comm = MPI.COMM_WORLD\n",
|
|
"size = comm.Get_size()\n",
|
|
"rank = comm.Get_rank()\n",
|
|
"root_node = 0\n",
|
|
"\n",
|
|
"# rename outfile\n",
|
|
"if not outfile.endswith(\".pickle\"):\n",
|
|
" outfile += \".pickle\"\n",
|
|
"\n",
|
|
"simulation_parameters = dict(\n",
|
|
" path=path,\n",
|
|
" outpath=outfile,\n",
|
|
" scf_xcf_orientation=scf_xcf_orientation,\n",
|
|
" ref_xcf_orientations=ref_xcf_orientations,\n",
|
|
" kset=kset,\n",
|
|
" kdirs=kdirs,\n",
|
|
" ebot=ebot,\n",
|
|
" eset=eset,\n",
|
|
" esetp=esetp,\n",
|
|
" parallel_size=size,\n",
|
|
")\n",
|
|
"\n",
|
|
"# digestion of the input\n",
|
|
"# read sile\n",
|
|
"fdf = sisl.get_sile(path)\n",
|
|
"# read in hamiltonian\n",
|
|
"dh = fdf.read_hamiltonian()\n",
|
|
"simulation_parameters[\"cell\"] = fdf.read_geometry().cell\n",
|
|
"\n",
|
|
"# unit cell index\n",
|
|
"uc_in_sc_idx = dh.lattice.sc_index([0, 0, 0])\n",
|
|
"\n",
|
|
"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\")\n",
|
|
" print(\n",
|
|
" \"================================================================================================================================================================\"\n",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"xyz[-3:]: red, green, blue\n",
|
|
"2.745163300331324\n",
|
|
"2.5835033632437767\n",
|
|
"2.583501767937866\n",
|
|
"2.583541444641373\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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l7rwwgs1Y8YMWZalH/3oRzn7jTG66aabNH36dFVXV+ucc87RK6+8UprKjrA1a9boL/7iL1RXV6empiZ9+MMf1ssvv5xTpre3V8uXL9eUKVNUW1urj370o9q9e3eJajxy1q1bp+OPP1719fWqr69XS0uLfvrTn2b2V2q7C7n99ttlWZauvfbazLZKbv/NN98sy7Jypnnz5mX2V3LbJenNN9/U5ZdfrilTpqi6uloLFizQ7373u8z+Sv6Zd+SRR/b72luWpeXLl0uq/K89Sm+4n62+//3va968eaqqqtKCBQv0yCOPjFFNR95QPnPkW79+fb/v16qqqjGq8cgb7PdPIZX0HpAG/zmcrxLeA6P1t8Z4+VttoPYnEgndcMMNWrBggSZMmKAZM2boE5/4hN56660Bz3kw30ulNNh7YOnSpf3a09raOuh5x8t7QBr8NSj0c8GyLH31q18tes7x9j4YCkKxMvLd735X1113nVatWqVnn31WJ5xwgpYsWaI9e/aUumoj7sCBAzrhhBN05513Ftz/la98RV//+tf1zW9+U08//bQmTJigJUuWqLe3d4xrOvKefPJJLV++XL/5zW+0ceNGJRIJnXfeeTpw4ECmzIoVK7RhwwZ9//vf15NPPqm33npLH/nIR0pY65Fx+OGH6/bbb9czzzyj3/3udzrrrLN08cUX68UXX5RUue3O99vf/lZ33XWXjj/++Jztld7+Y489Vm1tbZnpv//7vzP7Krnt7733nk477TSFw2H99Kc/1bZt2/S///f/1qRJkzJlKvln3m9/+9ucr/vGjRslSZdccomkyv7ao/SG+9nqqaee0sc+9jFdffXVeu655/ThD39YH/7wh/XCCy+Mcc1HxlA+cxRSX1+f8327c+fOMarx6Bjo90++SnsPSIP/HC5kvL8HRuNvjfH0t9pA7e/u7tazzz6rL33pS3r22Wf1X//1X3r55Zd10UUXDXre4Xwvldpg7wFJam1tzWnPf/7nfw54zvH0HpAGfw2y297W1qZ77rlHlmXpox/96IDnHU/vgyExKBsLFy40y5cvz6y7rmtmzJhh1qxZU8JajT5J5oc//GFm3fM809zcbL761a9mtu3bt89Eo1Hzn//5nyWo4ejas2ePkWSefPJJY4zf1nA4bL7//e9nymzfvt1IMps3by5VNUfNpEmTzL//+78Hpt1dXV3m6KOPNhs3bjQf+tCHzOc//3ljTOV/3VetWmVOOOGEgvsqve033HCD+cu//Mui+4P2M+/zn/+8Oeqoo4zneRX/tUfpDfez1aWXXmouuOCCnG2LFi0yn/rUp0a1nmMl/zNHIffee6+ZOHHi2FVqlA30+6eQSn8PGJP7c7iQSnsPjNTfGuP1b7X89heyZcsWI8ns3LmzaJnhfi+Vk0KvwZVXXmkuvvjiYZ1nvL4HjBna++Diiy82Z5111oBlxvP7oBh6ipWJeDyuZ555Ruecc05mm23bOuecc7R58+YS1mzs7dixQ+3t7TmvxcSJE7Vo0aKKfC06OjokSZMnT5YkPfPMM0okEjntnzdvno444oiKar/runrwwQd14MABtbS0BKbdy5cv1wUXXJDTTikYX/dXXnlFM2bM0Jw5c/Txj39cu3btklT5bX/ooYd06qmn6pJLLlFTU5NOOukk/du//Vtmf5B+5sXjcT3wwAO66qqrZFlWxX/tUVoH89lq8+bN/X4+L1mypGLej/mfOYrZv3+/Zs2apZkzZ+b06B6viv3+KaTS3wP5P4eLqbT3QLaD+b1b6X+rdXR0yLIsNTQ0DFhuON9L48ETTzyhpqYmHXPMMVq2bJnefffdomUr/T2we/duPfzww7r66qsHLVtp7wNCsTLxzjvvyHVdTZs2LWf7tGnT1N7eXqJalUa6vUF4LTzP07XXXqvTTjtNxx13nCS//ZFIpN8vpUpp//PPP6/a2lpFo1F9+tOf1g9/+EPNnz+/4tstSQ8++KCeffZZrVmzpt++Sm//okWLtH79ej366KNat26dduzYodNPP11dXV0V3/Y///nPWrdunY4++mg99thjWrZsmT73uc/pvvvukxSsn3k/+tGPtG/fPi1dulRS5b/vUVoH89mqvb29Yr8XC33mKOSYY47RPffcox//+Md64IEH5HmeFi9erDfeeGMMaztyBvr9U0glvwek/j+HC6m090C+g/m9W8l/q/X29uqGG27Qxz72MdXX1xctN9zvpXLX2tqq+++/Xz//+c+1du1aPfnkkzr//PPlum7B8pX8HpCk++67T3V1dYMOYVFp7wNJCpW6AkCQLV++XC+88ML4vw97GI455hht3bpVHR0d+sEPfqArr7xSTz75ZKmrNepef/11ff7zn9fGjRvH3WC1I+H888/PLB9//PFatGiRZs2ape9973uqrq4uYc1Gn+d5OvXUU/XlL39ZknTSSSfphRde0De/+U1deeWVJa7d2Lr77rt1/vnna8aMGaWuChA4Q/3M0dLSopaWlsz64sWL9f73v1933XWXbr311tGu5ogb6PfPUHpEVJqh/ByutPcAikskErr00ktljNG6desGLFtp30t/93d/l1lesGCBjj/+eB111FF64okndPbZZ5ewZqVxzz336OMf//igf6dU2vtAoqdY2Zg6daocx+n3xK3du3erubm5RLUqjXR7K/21+OxnP6uf/OQn2rRpkw4//PDM9ubmZsXjce3bty+nfKW0PxKJaO7cuTrllFO0Zs0anXDCCfrXf/3Xim/3M888oz179ujkk09WKBRSKBTSk08+qa9//esKhUKaNm1aRbc/X0NDg973vvfp1Vdfrfiv/fTp0zV//vycbe9///szXc2D8jNv586d+tnPfqZ/+Id/yGyr9K89SutgPls1NzdX5Pdisc8cQxEOh3XSSSfp1VdfHaXaja3s3z+FVOp7QCr8c3goKu09cDC/dyvxb7V0ILZz505t3LhxwF5ihQz2vTTezJkzR1OnTi3ankp8D6T96le/0ssvvzzsnw1SZbwPCMXKRCQS0SmnnKKf//znmW2e5+nnP/95zv/UBMHs2bPV3Nyc81p0dnbq6aefrojXwhijz372s/rhD3+oX/ziF5o9e3bO/lNOOUXhcDin/S+//LJ27dpVEe3P53meYrFYxbf77LPP1vPPP6+tW7dmplNPPVUf//jHM8uV3P58+/fv15/+9CdNnz694r/2p512ml5++eWcbX/84x81a9YsSZX/My/t3nvvVVNTky644ILMtkr/2qO0DuazVUtLS055Sdq4ceO4fT8O9pljKFzX1fPPP6/p06ePQg3HXvbvn0Iq7T2QrdDP4aGotPfAwfzerbS/1dKB2CuvvKKf/exnmjJlyrDPMdj30njzxhtv6N133y3ankp7D2S7++67dcopp+iEE04Y9rEV8T4o8UD/yPLggw+aaDRq1q9fb7Zt22Y++clPmoaGBtPe3l7qqo24rq4u89xzz5nnnnvOSDJ33HGHee655zJPPLn99ttNQ0OD+fGPf2z+8Ic/mIsvvtjMnj3b9PT0lLjmh27ZsmVm4sSJ5oknnjBtbW2Zqbu7O1Pm05/+tDniiCPML37xC/O73/3OtLS0mJaWlhLWemSsXLnSPPnkk2bHjh3mD3/4g1m5cqWxLMs8/vjjxpjKbXcx2U+fNKay23/99debJ554wuzYscP8+te/Nuecc46ZOnWq2bNnjzGmstu+ZcsWEwqFzG233WZeeeUV8+1vf9vU1NSYBx54IFOmkn/mGeM/nemII44wN9xwQ799lfy1R+kN9tnqiiuuMCtXrsyU//Wvf21CoZD52te+ZrZv325WrVplwuGwef7550vVhEMylM8c+a/B6tWrzWOPPWb+9Kc/mWeeecb83d/9namqqjIvvvhiKZpwyAb7/VPp74G0gX4OV+J7YCT+1jjrrLPMN77xjcz6ePpbbaD2x+Nxc9FFF5nDDz/cbN26NednQywWy5wjv/2DfS+Vm4Feg66uLvOFL3zBbN682ezYscP87Gc/MyeffLI5+uijTW9vb+Yc4/k9YMzg3wfGGNPR0WFqamrMunXrCp5jvL8PhoJQrMx84xvfMEcccYSJRCJm4cKF5je/+U2pqzQqNm3aZCT1m6688kpjjP+o5C996Utm2rRpJhqNmrPPPtu8/PLLpa30CCnUbknm3nvvzZTp6ekxn/nMZ8ykSZNMTU2N+eu//mvT1tZWukqPkKuuusrMmjXLRCIR09jYaM4+++xMIGZM5ba7mPxQrJLb/7d/+7dm+vTpJhKJmMMOO8z87d/+rXn11Vcz+yu57cYYs2HDBnPccceZaDRq5s2bZ771rW/l7K/kn3nGGPPYY48ZSQXbVOlfe5TeQJ+tPvShD2U+e6R973vfM+973/tMJBIxxx57rHn44YfHuMYjZyifOfJfg2uvvTbzek2bNs38j//xP8yzzz479pUfIYP9/qn090DaQD+HK/E9MBJ/a8yaNcusWrUqZ9t4+VttoPbv2LGj6M+GTZs2Zc6R3/7BvpfKzUCvQXd3tznvvPNMY2OjCYfDZtasWeaaa67pF26N5/eAMYN/HxhjzF133WWqq6vNvn37Cp5jvL8PhsIyxpiR7n0GAAAAAAAAlDPGFAMAAAAAAEDgEIoBAAAAAAAgcAjFAAAAAAAAEDiEYgAAAAAAAAgcQjEAAAAAAAAEDqEYAAAAAAAAAodQDAAAAAAAAIFDKAYAAAAAAIDAIRQDAAAAAABA4BCKAQAAAAAAIHAIxQAAAAAAABA4hGIAAAAAAAAInP8faJJQcGLApyMAAAAASUVORK5CYII=",
|
|
"text/plain": [
|
|
"<Figure size 1500x500 with 2 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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APRo6xvqfQyAttlyy855Hl8dBQAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAAgjaAAAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAKUNWi77777cuSRR2bw4MGpqKjIHXfc0Wr9bbfdlkMPPTQf+MAHUlFRkfnz57/nY15zzTWpqKhotfTr169jOgBAl2acAQAAOlNZg7bly5dn6NChmTp16jrXH3jggfnJT37Srsft379/XnjhhZblmWeeKaJcALoZ4wwAANCZ+pTzyQ877LAcdthh61x/3HHHJUkWLlzYrsetqKjIwIEDN6Y0AHoA4wwAANCZeuQ12pYtW5YddtghNTU1Oeqoo/LXv/51vduvWLEiDQ0NrRYAWBfjDAAAsDY9LmjbbbfdcvXVV+e3v/1trr/++jQ1NeWAAw7Is88+u859Jk+enKqqqpalpqamEysGoDsxzgAAAOvS44K2kSNHZuzYsRk2bFgOOuig3Hbbbdl2223zT//0T+vcZ+LEiamvr29ZFi9e3IkVA9CdGGcAAIB1Kes12jrDZpttluHDh+fJJ59c5zaVlZWprKzsxKoA6CmMMwAAwGo97oy2d2tsbMzDDz+cQYMGlbsUAHog4wwAALBaWc9oW7ZsWaszABYsWJD58+dnm222yQc/+MG88sorWbRoUZ5//vkkyeOPP54kGThwYMvd3saOHZvtt98+kydPTpL88Ic/zMc+9rHsuuuuee2113LhhRfmmWeeyQknnNDJvQOg3IwzAABAZypr0Pbggw9m1KhRLT9PmDAhSTJu3Lhcc801+d3vfpfx48e3rP/iF7+YJJk0aVLOOeecJMmiRYvSq9fbJ+a9+uqrOfHEE1NXV5f3v//92XfffXP//fdnjz326IQeAdCVGGcAAIDOVFEqlUrlLqKraWhoSFVVVerr69O/f/9ylwPQ7Tmutub1AChWVz+u3nfffbnwwgszd+7cvPDCC7n99tszZsyY9e4ze/bsTJgwIX/9619TU1OTM888M1/5ylfa/Jxd/TUB6G7aelzt8ddoAwAAKKfly5dn6NChmTp1apu2X7BgQY444oiMGjUq8+fPzymnnJITTjghd999dwdXCsDG6vF3HQUAACinww47LIcddlibt582bVp22mmnXHTRRUmS3XffPX/605/ys5/9LKNHj+6oMgEogDPa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8ODB2XnnnfPlL385ixYtWu/2K1asSENDQ6sFgJ6vs8Ya4wwAAGwaumzQVldXlySprq5u1V5dXd2ybm1GjBiRa665JjNmzMgVV1yRBQsW5BOf+ESWLl26zn0mT56cqqqqlqWmpqaYTgDQpXXWWGOcAQCATUOXDdo21GGHHZajjz46++yzT0aPHp277rorr732Wm666aZ17jNx4sTU19e3LIsXL+7EigHobto71hhnAABg09Blg7bV171ZsmRJq/YlS5a065o473vf+/LhD384Tz755Dq3qaysTP/+/VstAPR8nTXWGGcAAGDT0GWDtp122ikDBw7MrFmzWtoaGhryl7/8JSNHjmzz4yxbtixPPfVUBg0a1BFlAtCNGWsAAIAilTVoW7ZsWebPn5/58+cnab4o9fz587No0aJUVFTklFNOybnnnpvf/e53efjhhzN27NgMHjw4Y8aMaXmMT37yk7nssstafv7ud7+be++9NwsXLsz999+fz372s+ndu3eOPfbYTu4dAF2BsQYAAOgsfcr55A8++GBGjRrV8vOECROSJOPGjcs111yT0047LcuXL89Xv/rVvPbaaznwwAMzY8aM9OvXr2Wfp556Ki+//HLLz88++2yOPfbY/M///E+23XbbHHjggfnzn/+cbbfdtvM6BkCXYawBAAA6S0WpVCqVu4iupqGhIVVVVamvr3cdHYACOK625vUAKFZ3OK5OnTo1F154Yerq6jJ06NBceuml2X///de5/WuvvZYzzjgjt912W1555ZXssMMOmTJlSg4//PA2PV93eE0AupO2HlfLekYbAABATzd9+vRMmDAh06ZNy4gRIzJlypSMHj06jz/+eLbbbrs1tl+5cmU+9alPZbvttsstt9yS7bffPs8880ze9773dX7xALSLoA0AAKADXXzxxTnxxBMzfvz4JMm0adNy55135uqrr87pp5++xvZXX311Xnnlldx///3ZbLPNkiQ77rhjZ5YMwAbqsncdBQAA6O5WrlyZuXPnpra2tqWtV69eqa2tzZw5c9a6z+9+97uMHDkyJ510Uqqrq7PXXnvl/PPPT2Nj4zqfZ8WKFWloaGi1AND5BG0AAAAd5OWXX05jY2Oqq6tbtVdXV6eurm6t+zz99NO55ZZb0tjYmLvuuitnnXVWLrroopx77rnrfJ7JkyenqqqqZampqSm0HwC0jaANAACgC2lqasp2222XX/ziF9l3331zzDHH5Iwzzsi0adPWuc/EiRNTX1/fsixevLgTKwZgNddoAwAA6CADBgxI7969s2TJklbtS5YsycCBA9e6z6BBg7LZZpuld+/eLW2777576urqsnLlyvTt23eNfSorK1NZWVls8QC0mzPaAAAAOkjfvn2z7777ZtasWS1tTU1NmTVrVkaOHLnWfT7+8Y/nySefTFNTU0vbf//3f2fQoEFrDdkA6DoEbQAAAB1owoQJufLKK/PrX/86jz76aL7xjW9k+fLlLXchHTt2bCZOnNiy/Te+8Y288sor+da3vpX//u//zp133pnzzz8/J510Urm6AEAb+eooAABABzrmmGPy0ksv5eyzz05dXV2GDRuWGTNmtNwgYdGiRenV6+1zIGpqanL33Xfn29/+dvbZZ59sv/32+da3vpXvfe975eoCAG1UUSqVSuUuoqtpaGhIVVVV6uvr079//3KXA9DtOa625vUAKJbj6pq8JgDFautx1VdHAQAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAH3KXQB0tDvuSHbfPdlttzXX/epXyRFHJNtt1+llQbfx+OPJr3+dPP98MnBgctxxyZ57lrsqALq75cuTa65Jjj02ue665D//M6msTI48Mtlnn2TWrGTcuHJXCQDtI2ijR/v//r/k859Ptt02mT27ddj2058mp56a7LFH8sADyZZblq1M6JKampJvfSu57LKkT5+kVEoqKpKf/CQ5/vhk2rTmdgBor6am5DOfaf589q1vJY2Nb48p06Y1B24rViSrVjWPOQDQXfjqKD3aRz/aHKTV1SUHH9x8Zk7ydsiWJEcfLWSDtTnvvOaQLWme6DQ2Nv+ZJFdfnZxxRvlqA6B769UrOeCA5v9vbGz+c9Wqt8eZFSuag7dPfKI89QHAhtqgoO2QQw7JD37wgzXaX3311RxyyCEbXRQUZcCA5F//Ndl777fDthNPfDtkmzQpOeecclYIXdPrrycXXrju9aVScsklSX19xzy/cQag5/vb35oDt3VZtSp57LHOq+fdxo0bl/vuu698BQDQLW1Q0DZ79uxcdtllGTNmTJYvX97SvnLlytx7772FFQdFeHfYdtVVze1CNli3++5Lli5d/zZvvpnMnNkxz2+cAejZGhuTf/mX5q+Qrkuf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NgAAAAAogKANAAAAAAogaAMAAACAAgjaAAAAAKAAgjYAAAAAKICgDQAAAAAKIGgDAAAAgAII2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAArQ5YO2pUuX5pRTTskOO+yQzTffPAcccED+4z/+Y53bz549OxUVFWssdXV1nVg1AN2JsQYAAChCn3IX8F5OOOGEPPLII7nuuusyePDgXH/99amtrc3f/va3bL/99uvc7/HHH0///v1bft5uu+06o1wAuiFjDQAAUIQufUbbG2+8kVtvvTUXXHBB/s//+T/Zddddc84552TXXXfNFVdcsd59t9tuuwwcOLBl6dWrS3cVgDIx1gAAAEXp0jOCVatWpbGxMf369WvVvvnmm+dPf/rTevcdNmxYBg0alE996lP593//9/Vuu2LFijQ0NLRaANg0dMZYY5wBAIBNQ5cO2rbeeuuMHDkyP/rRj/L888+nsbEx119/febMmZMXXnhhrfsMGjQo06ZNy6233ppbb701NTU1Ofjgg/PQQw+t83kmT56cqqqqlqWmpqajugRAF9MZY41xBgAANg0VpVKpVO4i1uepp57K//2//zf33XdfevfunY985CP58Ic/nLlz5+bRRx9t02McdNBB+eAHP5jrrrturetXrFiRFStWtPzc0NCQmpqa1NfXt7r2DgAbpqGhIVVVVV32uNrRY41xBqBjdfVxphy8JgDFautxtUuf0ZYku+yyS+69994sW7YsixcvzgMPPJC33norO++8c5sfY//998+TTz65zvWVlZXp379/qwWATUdHjzXGGQAA2DR0+aBttS233DKDBg3Kq6++mrvvvjtHHXVUm/edP39+Bg0a1IHVAdATGGsAAICN0afcBbyXu+++O6VSKbvttluefPLJnHrqqRkyZEjGjx+fJJk4cWKee+65XHvttUmSKVOmZKeddsqee+6ZN998M1dddVX+9V//NX/4wx/K2Q0AujBjDQAAUIQuH7TV19dn4sSJefbZZ7PNNtvkc5/7XM4777xsttlmSZIXXnghixYtatl+5cqV+c53vpPnnnsuW2yxRfbZZ5/88Y9/zKhRo8rVBQC6OGMNAABQhC5/M4RycOFQgGI5rrbm9QAoluPqmrwmAMXqMTdDAAAA6O6mTp2aHXfcMf369cuI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WpU+vfoUWSL0OKVSKQ0rGtK7V+9s1XercpdDwTbkuNqTbcjr8c6xpGFFQypSka0rt15jHcCmqDuMM5dddlkuvPDC1NXVZdiwYbnkkksyYsSIJMnBBx+cHXfcMddcc03L9jfffHPOPPPMLFy4MB/60IdywQUX5PDD2z5hb+9rsmrlm+nTt1+71wFve+vN17P0lRey9TaDslm/LcpdDgVr63FV0LYW3WGgBuhOHFdb83oAFMtxdU1eE4BitfW46qujAAAAAFAAQRsAAAAAFEDQBgAAAAAFELQBAAAAQAEEbQAAAABQAEEbAAAAABRA0AYAAAAABRC0AQAAAEABBG0AAAAAUABBGwAAAAAUoE+5C+iKSqVSkqShoaHMlQD0DKuPp6uPr5s64wxAsYwzazLWABSrrWONoG0tli5dmiSpqakpcyUAPcvSpUtTVVVV7jLKzjgD0DGMM28z1gB0jPcaaypKfu2zhqampjz//PPZeuutU1FRkYaGhtTU1GTx4sXp379/ucsrlL51Pz21X4m+dUdt7VepVMrSpUszePDg9OrlqgXvHmfaq6f+e3onfez+enr/En3sSowzazKn6f56ar8SfeuOemq/kuLnNM5oW4tevXrl7/7u79Zo79+/f4/7B7WavnU/PbVfib51R23plzMM3raucaa9euq/p3fSx+6vp/cv0ceuwjjTmjlNz9FT+5XoW3fUU/uVFDen8eseAAAAACiAoA0AAAAACiBoa4PKyspMmjQplZWV5S6lcPrW/fTUfiX61h311H51dZvC666P3V9P71+ij3QvPfnvsqf2raf2K9G37qin9ispvm9uhgAAAAAABXBGGwAAAAAUQNAGAAAAAAUQtAEAAABAAQRtAAAAAFAAQdtGWLFiRYYNG5aKiorMnz+/3OVstL//+7/PBz/4wfTr1y+DBg3Kcccdl+eff77cZW20hQsX5vjjj89OO+2UzTffPLvssksmTZqUlStXlru0jXbeeeflgAMOyBZbbJH3ve995S5no0ydOjU77rhj+vXrlxEjRuSBBx4od0mFuO+++3LkkUdm8ODBqaioyB133FHukgoxefLkfPSjH83WW2+d7bbbLmPGjMnjjz9e7rJ6lPa+J26++eYMGTIk/fr1y95775277rqrkyrdcO3p45VXXplPfOITef/735/3v//9qa2t7RbHiQ09tt14442pqKjImDFjOrbAjdTe/r322ms56aSTMmjQoFRWVubDH/5wl/+32t4+TpkyJbvttls233zz1NTU5Nvf/nbefPPNTqq2/TZknJo9e3Y+8pGPpLKyMrvuumuuueaaDq+TjtHT5jNJz5zT9OT5TGJO09WZz7SfoG0jnHbaaRk8eHC5yyjMqFGjctNNN+Xxxx/Prbfemqeeeiqf//zny13WRnvsscfS1NSUf/qnf8pf//rX/OxnP8u0adPy/e9/v9ylbbSVK1fm6KOPzje+8Y1yl7JRpk+fngkTJmTSpEl56KGHMnTo0IwePTovvvhiuUvbaMuXL8/QoUMzderUcpdSqHvvvTcnnXRS/vznP2fmzJl56623cuihh2b58uXlLq1HaO974v7778+xxx6b448/PvPmzcuYMWMyZsyYPPLII51cedu1t4+zZ8/Osccem3vuuSdz5sxJTU1NDj300Dz33HOdXHnbbeixbeHChfnud7+bT3ziE51U6YZpb/9WrlyZT33qU1m4cGFuueWWPP7447nyyiuz/fbbd3LlbdfePt5www05/fTTM2nSpDz66KP55S9/menTp3fpzxztHacWLFiQI444IqNGjcr8+fNzyimn5IQTTsjdd9/dwZXSEXrafCbpmXOanjyfScxpujrzmQ1QYoPcddddpSFDhpT++te/lpKU5s2bV+6SCvfb3/62VFFRUVq5cmW5SyncBRdcUNppp53KXUZhfvWrX5WqqqrKXcYG23///UsnnXRSy8+NjY2lwYMHlyZPnlzGqoqXpHT77beXu4wO8eKLL5aSlO69995yl9IjtPc98YUvfKF0xBFHtGobMWJE6Wtf+1qH1rkxNvZ9v2rVqtLWW29d+vWvf91RJW60DenjqlWrSgcccEDpqquuKo0bN6501FFHdUKlG6a9/bviiitKO++8c7f6XNHePp500kmlQw45pFXbhAkTSh//+Mc7tM6itGWcOu2000p77rlnq7ZjjjmmNHr06A6sjI6wKcxnSqWeO6fpafOZUsmcpjswn2kbZ7RtgCVLluTEE0/Mddddly222KLc5XSIV155Jb/5zW9ywAEHZLPNNit3OYWrr6/PNttsU+4ySPNvsObOnZva2tqWtl69eqW2tjZz5swpY2W0R319fZJ4XxVgQ94Tc+bMabV9kowePbrLvoeKeN+//vrreeutt7rsv7kN7eMPf/jDbLfddjn++OM7o8wNtiH9+93vfpeRI0fmpJNOSnV1dfbaa6+cf/75aWxs7Kyy22VD+njAAQdk7ty5LV8Vevrpp3PXXXfl8MMP75SaO0N3O96wdpvCfCbp2XMa85muxZym+ytyPiNoa6dSqZSvfOUr+frXv5799tuv3OUU7nvf+1623HLLfOADH8iiRYvy29/+ttwlFe7JJ5/MpZdemq997WvlLoUkL7/8chobG1NdXd2qvbq6OnV1dWWqivZoamrKKaecko9//OPZa6+9yl1Ot7ch74m6urpu9R4q4n3/ve99L4MHD15jwt9VbEgf//SnP+WXv/xlrrzyys4ocaNsSP+efvrp3HLLLWlsbMxdd92Vs846KxdddFHOPffczii53Takj1/60pfywx/+MAceeGA222yz7LLLLjn44IN7zNe7knUfbxoaGvLGG2+UqSrao6fPZ5KeP6cxn+l6zGm6t6LnM4K2/3X66aenoqJivctjjz2WSy+9NEuXLs3EiRPLXXKbtLVfq5166qmZN29e/vCHP6R3794ZO3ZsSqVSGXuwbu3tW5I899xz+fSnP52jjz46J554YpkqX78N6ReU00knnZRHHnkkN954Y7lLYRPx4x//ODfeeGNuv/329OvXr9zlFGLp0qU57rjjcuWVV2bAgAHlLqdDNDU1ZbvttssvfvGL7LvvvjnmmGNyxhlnZNq0aeUurTCzZ8/O+eefn8svvzwPPfRQbrvtttx555350Y9+VO7S2AT01PlM0nPnND11PpOY09C9FD2f6VPIo/QA3/nOd/KVr3xlvdvsvPPO+dd//dfMmTMnlZWVrdbtt99++fKXv5xf//rXHVhl+7W1X6sNGDAgAwYMyIc//OHsvvvuqampyZ///OeMHDmygyttv/b27fnnn8+oUaNywAEH5Be/+EUHV7fh2tuv7m7AgAHp3bt3lixZ0qp9yZIlGThwYJmqoq1OPvnk/P73v899992Xv/u7vyt3OT3ChrwnBg4c2K3eQxvzvv/pT3+aH//4x/njH/+YffbZpyPL3Cjt7eNTTz2VhQsX5sgjj2xpa2pqSpL06dMnjz/+eHbZZZeOLbodNuTvcNCgQdlss83Su3fvlrbdd989dXV1WblyZfr27duhNbfXhvTxrLPOynHHHZcTTjghSbL33ntn+fLl+epXv5ozzjgjvXp1/99xr+t4079//2y++eZlqoqk585nkp47p+mp85nEnGa1rvx5jGYdMZ8RtP2vbbfdNttuu+17bnfJJZe0+orD888/n9GjR2f69OkZMWJER5a4Qdrar7VZ/QF/xYoVRZZUmPb07bnnnsuoUaOy77775le/+lWX/qC7MX9n3VHfvn2z7777ZtasWRkzZkyS5n97s2bNysknn1ze4linUqmUb37zm7n99tsze/bs7LTTTuUuqcfYkPfEyJEjM2vWrJxyyiktbTNnzuxyE4rVNvR9f8EFF+S8887L3Xff3eW/7tTePg4ZMiQPP/xwq7YzzzwzS5cuzc9//vPU1NR0RtlttiF/hx//+Mdzww03pKmpqWUc/u///u8MGjSoy4VsyYb18fXXX1/jM8bqYLErnk2zIUaOHJm77rqrVVtXPt5sSnrqfCbpuXOanjqfScxpEnOarq5D5zMbfTuFTdyCBQt6xF16/vznP5cuvfTS0rx580oLFy4szZo1q3TAAQeUdtlll9Kbb75Z7vI2yrPPPlvaddddS5/85CdLzz77bOmFF15oWbq7Z555pjRv3rzSD37wg9JWW21VmjdvXmnevHmlpUuXlru0drnxxhtLlZWVpWuuuab0t7/9rfTVr3619L73va9UV1dX7tI22tKlS1v+XpKULr744tK8efNKzzzzTLlL2yjf+MY3SlVVVaXZs2e3ek+9/vrr5S6tR3iv98Rxxx1XOv3001u2//d///dSnz59Sj/96U9Ljz76aGnSpEmlzTbbrPTwww+Xqwvvqb19/PGPf1zq27dv6ZZbbmn1b64rH+/a28d36+p3HW1v/xYtWlTaeuutSyeffHLp8ccfL/3+978vbbfddqVzzz23XF14T+3t46RJk0pbb7116Z//+Z9LTz/9dOkPf/hDaZdddil94QtfKFcX3tN7jVOnn3566bjjjmvZ/umnny5tscUWpVNPPbX06KOPlqZOnVrq3bt3acaMGeXqAhupp8xnSqWeO6fpyfOZUsmcpqszn2k/QdtG6ikD03/913+VRo0aVdpmm21KlZWVpR133LH09a9/vfTss8+Wu7SN9qtf/aqUZK1Ldzdu3Li19uuee+4pd2ntdumll5Y++MEPlvr27Vvaf//9S3/+85/LXVIh7rnnnrX+HY0bN67cpW2Udb2nfvWrX5W7tB5jfe+Jgw46aI1/QzfddFPpwx/+cKlv376lPffcs3TnnXd2csXt154+7rDDDmv9Nzdp0qTOL7wd2vv3+E5dPWgrldrfv/vvv780YsSIUmVlZWnnnXcunXfeeaVVq1Z1ctXt054+vvXWW6VzzjmntMsuu5T69etXqqmpKf3jP/5j6dVXX+38wtvovcapcePGlQ466KA19hk2bFipb9++pZ133tmxv5vrKfOZUqnnzml68nymVDKn6erMZ9qv4n+fAAAAAADYCF37i90AAAAA0E0I2gAAAACgAII2AAAAACiAoA0AAAAACiBoAwAAAIACCNoAAAAAoACCNgAAAAAogKANAAAAAAogaAMAAACAAgjaAAAAAKAAgjboZl566aUMHDgw559/fkvb/fffn759+2bWrFllrAyAnuLaa6/NBz7wgaxYsaJV+5gxY3LccceVqSoAegpzGnqyilKpVCp3EUD73HXXXRkzZkzuv//+7Lbbbhk2bFiOOuqoXHzxxeUuDYAe4I033sigQYNy5ZVX5uijj06SvPjii9l+++3zhz/8IaNGjSpzhQB0d+Y09FSCNuimTjrppPzxj3/Mfvvtl4cffjj/8R//kcrKynKXBUAP8Y//+I9ZuHBh7rrrriTJxRdfnKlTp+bJJ59MRUVFmasDoCcwp6EnErRBN/XGG29kr732yuLFizN37tzsvffe5S4JgB5k3rx5+ehHP5pnnnkm22+/ffbZZ58cffTROeuss8pdGgA9hDkNPZFrtEE39dRTT+X5559PU1NTFi5cWO5yAOhhhg8fnqFDh+baa6/N3Llz89e//jVf+cpXyl0WAD2IOQ09kTPaoBtauXJl9t9//wwbNiy77bZbpkyZkocffjjbbbdduUsDoAe54oorMmXKlHzqU5/KE088kbvvvrvcJQHQQ5jT0FMJ2qAbOvXUU3PLLbfkP//zP7PVVlvloIMOSlVVVX7/+9+XuzQAepD6+voMHjw4q1atyrXXXptjjjmm3CUB0EOY09BT+eoodDOzZ8/OlClTct1116V///7p1atXrrvuuvzbv/1brrjiinKXB0APUlVVlc997nPZaqutMmbMmHKXA0APYU5DT+aMNgAA1umTn/xk9txzz1xyySXlLgUAoMsTtAEAsIZXX301s2fPzuc///n87W9/y2677VbukgAAurw+5S4AAICuZ/jw4Xn11Vfzk5/8RMgGANBGzmgDAAAAgAK4GQIAAAAAFEDQBgAAAAAFELQBAAAAQAEEbQAAAABQAEEbAAAAABRA0AYAAAAABRC0AQAAAEABBG0AAAAAUABBGwAAAAAU4P8HqnKZxz5MACQAAAAASUVORK5CYII=",
|
|
"text/plain": [
|
|
"<Figure size 1500x500 with 3 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"plt.figure(figsize=(15, 5))\n",
|
|
"plt.subplot(121)\n",
|
|
"plt.plot(np.sort(dh.eigh()), marker=\"o\", linestyle=\" \", label=\"sisl\")\n",
|
|
"plt.plot(np.sort(siesta_eigs[0, 0]), marker=\"o\", linestyle=\" \", label=\"siesta\")\n",
|
|
"plt.ylim(None, 10)\n",
|
|
"plt.xlim(None, 75)\n",
|
|
"plt.legend()\n",
|
|
"plt.grid()\n",
|
|
"plt.subplot(122)\n",
|
|
"DOS = sisl.physics.electron.DOS(np.linspace(-15, 85, 1000), dh.eigh())\n",
|
|
"plt.plot(DOS, np.linspace(-15, 85, 1000))\n",
|
|
"DOS = sisl.physics.electron.DOS(np.linspace(-15, 85, 1000), siesta_eigs[0, 0])\n",
|
|
"plt.plot(DOS, np.linspace(-15, 85, 1000))\n",
|
|
"plt.ylim(None, 10)\n",
|
|
"\n",
|
|
"coords = dh.xyz[-3:]\n",
|
|
"\n",
|
|
"shift = np.array([-1, 0, 0]) @ simulation_parameters[\"cell\"]\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.scatter(\n",
|
|
" (coords + shift)[:, 0], (coords + shift)[:, 2], color=[\"r\", \"g\", \"b\"], marker=\"x\"\n",
|
|
")\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.scatter(\n",
|
|
" (coords + shift)[:, 1], (coords + shift)[:, 2], color=[\"r\", \"g\", \"b\"], marker=\"x\"\n",
|
|
")\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.scatter(\n",
|
|
" (coords + shift)[:, 0], (coords + shift)[:, 1], color=[\"r\", \"g\", \"b\"], marker=\"x\"\n",
|
|
")\n",
|
|
"plt.xlabel(\"x\")\n",
|
|
"plt.ylabel(\"y\")\n",
|
|
"print(\"xyz[-3:]: red, green, blue\")\n",
|
|
"\n",
|
|
"print(np.linalg.norm(coords[0] - coords[1]))\n",
|
|
"print(np.linalg.norm(coords[0] - coords[2]))\n",
|
|
"print(np.linalg.norm(coords[2] - coords[1]))\n",
|
|
"print(np.linalg.norm(coords[0] - (coords + shift)[2]))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Hamiltonian and exchange field rotated. Elapsed time: 4.926466833 s\n",
|
|
"================================================================================================================================================================\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"NO = dh.no # shorthand for number of orbitals in the unit cell\n",
|
|
"\n",
|
|
"# preprocessing Hamiltonian and overlap matrix elements\n",
|
|
"h11 = dh.tocsr(dh.M11r)\n",
|
|
"h11 += dh.tocsr(dh.M11i) * 1.0j\n",
|
|
"h11 = h11.toarray().reshape(NO, dh.n_s, NO).transpose(0, 2, 1).astype(\"complex128\")\n",
|
|
"\n",
|
|
"h22 = dh.tocsr(dh.M22r)\n",
|
|
"h22 += dh.tocsr(dh.M22i) * 1.0j\n",
|
|
"h22 = h22.toarray().reshape(NO, dh.n_s, NO).transpose(0, 2, 1).astype(\"complex128\")\n",
|
|
"\n",
|
|
"h12 = dh.tocsr(dh.M12r)\n",
|
|
"h12 += dh.tocsr(dh.M12i) * 1.0j\n",
|
|
"h12 = h12.toarray().reshape(NO, dh.n_s, NO).transpose(0, 2, 1).astype(\"complex128\")\n",
|
|
"\n",
|
|
"h21 = dh.tocsr(dh.M21r)\n",
|
|
"h21 += dh.tocsr(dh.M21i) * 1.0j\n",
|
|
"h21 = h21.toarray().reshape(NO, dh.n_s, NO).transpose(0, 2, 1).astype(\"complex128\")\n",
|
|
"\n",
|
|
"sov = (\n",
|
|
" dh.tocsr(dh.S_idx)\n",
|
|
" .toarray()\n",
|
|
" .reshape(NO, dh.n_s, NO)\n",
|
|
" .transpose(0, 2, 1)\n",
|
|
" .astype(\"complex128\")\n",
|
|
")\n",
|
|
"\n",
|
|
"\n",
|
|
"# Reorganization of Hamiltonian and overlap matrix elements to SPIN BOX representation\n",
|
|
"U = np.vstack(\n",
|
|
" [np.kron(np.eye(NO, dtype=int), [1, 0]), np.kron(np.eye(NO, dtype=int), [0, 1])]\n",
|
|
")\n",
|
|
"# This is the permutation that transforms ud1ud2 to u12d12\n",
|
|
"# That is this transforms FROM SPIN BOX to ORBITAL BOX => U\n",
|
|
"# the inverse transformation is U.T u12d12 to ud1ud2\n",
|
|
"# That is FROM ORBITAL BOX to SPIN BOX => U.T\n",
|
|
"\n",
|
|
"# From now on everything is in SPIN BOX!!\n",
|
|
"hh, ss = np.array(\n",
|
|
" [\n",
|
|
" U.T @ np.block([[h11[:, :, i], h12[:, :, i]], [h21[:, :, i], h22[:, :, i]]]) @ U\n",
|
|
" for i in range(dh.lattice.nsc.prod())\n",
|
|
" ]\n",
|
|
"), np.array(\n",
|
|
" [\n",
|
|
" U.T\n",
|
|
" @ np.block([[sov[:, :, i], sov[:, :, i] * 0], [sov[:, :, i] * 0, sov[:, :, i]]])\n",
|
|
" @ U\n",
|
|
" for i in range(dh.lattice.nsc.prod())\n",
|
|
" ]\n",
|
|
")\n",
|
|
"\n",
|
|
"\n",
|
|
"# symmetrizing Hamiltonian and overlap matrix to make them hermitian\n",
|
|
"for i in range(dh.lattice.sc_off.shape[0]):\n",
|
|
" j = dh.lattice.sc_index(-dh.lattice.sc_off[i])\n",
|
|
" h1, h1d = hh[i], hh[j]\n",
|
|
" hh[i], hh[j] = (h1 + h1d.T.conj()) / 2, (h1d + h1.T.conj()) / 2\n",
|
|
" s1, s1d = ss[i], ss[j]\n",
|
|
" ss[i], ss[j] = (s1 + s1d.T.conj()) / 2, (s1d + s1.T.conj()) / 2\n",
|
|
"\n",
|
|
"# identifying TRS and TRB parts of the Hamiltonian\n",
|
|
"TAUY = np.kron(np.eye(NO), tau_y)\n",
|
|
"hTR = np.array([TAUY @ hh[i].conj() @ TAUY for i in range(dh.lattice.nsc.prod())])\n",
|
|
"hTRS = (hh + hTR) / 2\n",
|
|
"hTRB = (hh - hTR) / 2\n",
|
|
"\n",
|
|
"# extracting the exchange field\n",
|
|
"traced = [spin_tracer(hTRB[i]) for i in range(dh.lattice.nsc.prod())] # equation 77\n",
|
|
"XCF = np.array(\n",
|
|
" [\n",
|
|
" np.array([f[\"x\"] for f in traced]),\n",
|
|
" np.array([f[\"y\"] for f in traced]),\n",
|
|
" np.array([f[\"z\"] for f in traced]),\n",
|
|
" ]\n",
|
|
") # equation 77\n",
|
|
"\n",
|
|
"# Check if exchange field has scalar part\n",
|
|
"max_xcfs = abs(np.array(np.array([f[\"c\"] for f in traced]))).max()\n",
|
|
"if max_xcfs > 1e-12:\n",
|
|
" warnings.warn(\n",
|
|
" f\"Exchange field has non negligible scalar part. Largest value is {max_xcfs}\"\n",
|
|
" )\n",
|
|
"\n",
|
|
"if rank == root_node:\n",
|
|
" 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",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Site and pair dictionaries created. Elapsed time: 4.962375291 s\n",
|
|
"================================================================================================================================================================\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# for every site we have to store 3 Greens function (and the associated _tmp-s) in the 3 reference directions\n",
|
|
"for mag_ent in magnetic_entities:\n",
|
|
" parsed = parse_magnetic_entity(dh, **mag_ent) # parse orbital indexes\n",
|
|
" mag_ent[\"orbital_indeces\"] = parsed\n",
|
|
" mag_ent[\"spin_box_indeces\"] = blow_up_orbindx(parsed) # calculate spin box indexes\n",
|
|
" # if orbital is not set use all\n",
|
|
" if \"l\" not in mag_ent.keys():\n",
|
|
" mag_ent[\"l\"] = \"all\"\n",
|
|
" if isinstance(mag_ent[\"atom\"], int):\n",
|
|
" mag_ent[\"tags\"] = [\n",
|
|
" f\"[{mag_ent['atom']}]{dh.atoms[mag_ent['atom']].tag}({mag_ent['l']})\"\n",
|
|
" ]\n",
|
|
" mag_ent[\"xyz\"] = [dh.xyz[mag_ent[\"atom\"]]]\n",
|
|
" if isinstance(mag_ent[\"atom\"], list):\n",
|
|
" mag_ent[\"tags\"] = []\n",
|
|
" mag_ent[\"xyz\"] = []\n",
|
|
" # iterate over atoms\n",
|
|
" for atom_idx in mag_ent[\"atom\"]:\n",
|
|
" mag_ent[\"tags\"].append(\n",
|
|
" f\"[{atom_idx}]{dh.atoms[atom_idx].tag}({mag_ent['l']})\"\n",
|
|
" )\n",
|
|
" mag_ent[\"xyz\"].append(dh.xyz[atom_idx])\n",
|
|
"\n",
|
|
" # calculate size for Greens function generation\n",
|
|
" spin_box_shape = len(mag_ent[\"spin_box_indeces\"])\n",
|
|
"\n",
|
|
" mag_ent[\"energies\"] = [] # we will store the second order energy derivations here\n",
|
|
"\n",
|
|
" # These will be the perturbed potentials from eq. 100\n",
|
|
" mag_ent[\"Vu1\"] = [] # so they are independent in memory\n",
|
|
" mag_ent[\"Vu2\"] = []\n",
|
|
"\n",
|
|
" mag_ent[\"Gii\"] = [] # Greens function\n",
|
|
" mag_ent[\"Gii_tmp\"] = [] # Greens function for parallelization\n",
|
|
" for i in ref_xcf_orientations:\n",
|
|
" # Rotations for every quantization axis\n",
|
|
" mag_ent[\"Vu1\"].append([])\n",
|
|
" mag_ent[\"Vu2\"].append([])\n",
|
|
" # Greens functions for every quantization axis\n",
|
|
" mag_ent[\"Gii\"].append(\n",
|
|
" np.zeros((eset, spin_box_shape, spin_box_shape), dtype=\"complex128\")\n",
|
|
" )\n",
|
|
" mag_ent[\"Gii_tmp\"].append(\n",
|
|
" np.zeros((eset, spin_box_shape, spin_box_shape), dtype=\"complex128\")\n",
|
|
" )\n",
|
|
"\n",
|
|
"# for every site we have to store 2x3 Greens function (and the associated _tmp-s)\n",
|
|
"# in the 3 reference directions, because G_ij and G_ji are both needed\n",
|
|
"for pair in pairs:\n",
|
|
" # calculate distance\n",
|
|
" xyz_ai = magnetic_entities[pair[\"ai\"]][\"xyz\"]\n",
|
|
" xyz_aj = magnetic_entities[pair[\"aj\"]][\"xyz\"]\n",
|
|
" xyz_aj = xyz_aj + pair[\"Ruc\"] @ simulation_parameters[\"cell\"]\n",
|
|
" pair[\"dist\"] = np.linalg.norm(xyz_ai - xyz_aj)\n",
|
|
"\n",
|
|
" # calculate size for Greens function generation\n",
|
|
" spin_box_shape_i = len(magnetic_entities[pair[\"ai\"]][\"spin_box_indeces\"])\n",
|
|
" spin_box_shape_j = len(magnetic_entities[pair[\"aj\"]][\"spin_box_indeces\"])\n",
|
|
" pair[\"tags\"] = []\n",
|
|
" for mag_ent in [magnetic_entities[pair[\"ai\"]], magnetic_entities[pair[\"aj\"]]]:\n",
|
|
" tag = \"\"\n",
|
|
" # get atoms of magnetic entity\n",
|
|
" atoms_idx = mag_ent[\"atom\"]\n",
|
|
" orbitals = mag_ent[\"l\"]\n",
|
|
"\n",
|
|
" # if magnetic entity contains one atoms\n",
|
|
" if isinstance(atoms_idx, int):\n",
|
|
" tag += f\"[{atoms_idx}]{dh.atoms[atoms_idx].tag}({orbitals})\"\n",
|
|
"\n",
|
|
" # if magnetic entity contains more than one atoms\n",
|
|
" if isinstance(atoms_idx, list):\n",
|
|
" # iterate over atoms\n",
|
|
" atom_group = \"{\"\n",
|
|
" for atom_idx in atoms_idx:\n",
|
|
" atom_group += f\"[{atom_idx}]{dh.atoms[atom_idx].tag}({orbitals})--\"\n",
|
|
" # end {} of the atoms in the magnetic entity\n",
|
|
" tag += atom_group[:-2] + \"}\"\n",
|
|
" pair[\"tags\"].append(tag)\n",
|
|
" pair[\"energies\"] = [] # we will store the second order energy derivations here\n",
|
|
"\n",
|
|
" pair[\"Gij\"] = [] # Greens function\n",
|
|
" pair[\"Gji\"] = []\n",
|
|
" pair[\"Gij_tmp\"] = [] # Greens function for parallelization\n",
|
|
" pair[\"Gji_tmp\"] = []\n",
|
|
" for i in ref_xcf_orientations:\n",
|
|
" # Greens functions for every quantization axis\n",
|
|
" pair[\"Gij\"].append(\n",
|
|
" np.zeros((eset, spin_box_shape_i, spin_box_shape_j), dtype=\"complex128\")\n",
|
|
" )\n",
|
|
" pair[\"Gij_tmp\"].append(\n",
|
|
" np.zeros((eset, spin_box_shape_i, spin_box_shape_j), dtype=\"complex128\")\n",
|
|
" )\n",
|
|
" pair[\"Gji\"].append(\n",
|
|
" np.zeros((eset, spin_box_shape_j, spin_box_shape_i), dtype=\"complex128\")\n",
|
|
" )\n",
|
|
" pair[\"Gji_tmp\"].append(\n",
|
|
" np.zeros((eset, spin_box_shape_j, spin_box_shape_i), dtype=\"complex128\")\n",
|
|
" )\n",
|
|
"\n",
|
|
"if rank == root_node:\n",
|
|
" 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",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"k loop: 0%| | 0/400 [00:00<?, ?it/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"k set created. Elapsed time: 4.990981666 s\n",
|
|
"================================================================================================================================================================\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"kset = make_kset(dirs=kdirs, NUMK=kset) # generate k space sampling\n",
|
|
"wkset = np.ones(len(kset)) / len(kset) # generate weights for k points\n",
|
|
"kpcs = np.array_split(kset, size) # split the k points based on MPI size\n",
|
|
"kpcs[root_node] = tqdm(kpcs[root_node], desc=\"k loop\")\n",
|
|
"\n",
|
|
"if rank == root_node:\n",
|
|
" times[\"k_set_time\"] = timer()\n",
|
|
" print(f\"k set created. Elapsed time: {times['k_set_time']} s\")\n",
|
|
" print(\n",
|
|
" \"================================================================================================================================================================\"\n",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Rotations done perpendicular to quantization axis. Elapsed time: 5.319766625 s\n",
|
|
"================================================================================================================================================================\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# this will contain the three hamiltonians in the reference directions needed to calculate the energy variations upon rotation\n",
|
|
"hamiltonians = []\n",
|
|
"\n",
|
|
"# iterate over the reference directions (quantization axes)\n",
|
|
"for i, orient in enumerate(ref_xcf_orientations):\n",
|
|
" # obtain rotated exchange field\n",
|
|
" R = RotMa2b(scf_xcf_orientation, orient[\"o\"])\n",
|
|
" rot_XCF = np.einsum(\"ij,jklm->iklm\", R, XCF)\n",
|
|
" rot_H_XCF = sum(\n",
|
|
" [np.kron(rot_XCF[i], tau) for i, tau in enumerate([tau_x, tau_y, tau_z])]\n",
|
|
" )\n",
|
|
" rot_H_XCF_uc = rot_H_XCF[uc_in_sc_idx]\n",
|
|
"\n",
|
|
" # obtain total Hamiltonian with the rotated exchange field\n",
|
|
" rot_H = (\n",
|
|
" hTRS + rot_H_XCF\n",
|
|
" ) # equation 76 #######################################################################################\n",
|
|
"\n",
|
|
" hamiltonians.append(\n",
|
|
" dict(orient=orient[\"o\"], H=rot_H)\n",
|
|
" ) # store orientation and rotated Hamiltonian\n",
|
|
"\n",
|
|
" # these are the rotations (for now) perpendicular to the quantization axis\n",
|
|
" for u in orient[\"vw\"]:\n",
|
|
" Tu = np.kron(np.eye(NO, dtype=int), tau_u(u)) # section 2.H\n",
|
|
"\n",
|
|
" Vu1 = 1j / 2 * commutator(rot_H_XCF_uc, Tu) # equation 100\n",
|
|
" Vu2 = 1 / 8 * commutator(commutator(Tu, rot_H_XCF_uc), Tu) # equation 100\n",
|
|
"\n",
|
|
" for mag_ent in magnetic_entities:\n",
|
|
" idx = mag_ent[\"spin_box_indeces\"]\n",
|
|
" # fill up the perturbed potentials (for now) based on the on-site projections\n",
|
|
" mag_ent[\"Vu1\"][i].append(Vu1[:, idx][idx, :])\n",
|
|
" mag_ent[\"Vu2\"][i].append(Vu2[:, idx][idx, :])\n",
|
|
"\n",
|
|
"if rank == root_node:\n",
|
|
" 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",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Starting matrix inversions\n",
|
|
"Total number of k points: 400\n",
|
|
"Number of energy samples per k point: 100\n",
|
|
"Total number of directions: 3\n",
|
|
"Total number of matrix inversions: 120000\n",
|
|
"The shape of the Hamiltonian and the Greens function is 84x84=7056\n",
|
|
"Memory taken by a single Hamiltonian is: 0.015625 KB\n",
|
|
"Expected memory usage per matrix inversion: 0.5 KB\n",
|
|
"Expected memory usage per k point for parallel inversion: 150.0 KB\n",
|
|
"Expected memory usage on root node: 58.59375 MB\n",
|
|
"================================================================================================================================================================\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"k loop: 100%|██████████| 400/400 [04:23<00:00, 1.52it/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Calculated Greens functions. Elapsed time: 268.00303675 s\n",
|
|
"================================================================================================================================================================\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"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(\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",
|
|
" # 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",
|
|
"\n",
|
|
"comm.Barrier()\n",
|
|
"# ----------------------------------------------------------------------\n",
|
|
"\n",
|
|
"# make energy contour\n",
|
|
"# we are working in eV now !\n",
|
|
"# and sisl shifts E_F to 0 !\n",
|
|
"cont = make_contour(emin=ebot, enum=eset, p=esetp)\n",
|
|
"eran = cont.ze\n",
|
|
"\n",
|
|
"# ----------------------------------------------------------------------\n",
|
|
"# sampling the integrand on the contour and the BZ\n",
|
|
"for k in kpcs[rank]:\n",
|
|
" wk = wkset[rank] # weight of k point in BZ integral\n",
|
|
" # iterate over reference directions\n",
|
|
" for i, hamiltonian_orientation in enumerate(hamiltonians):\n",
|
|
" # calculate Greens function\n",
|
|
" H = hamiltonian_orientation[\"H\"]\n",
|
|
" HK, SK = hsk(H, ss, dh.sc_off, k)\n",
|
|
" # Gk = inv(SK * eran.reshape(eset, 1, 1) - HK)\n",
|
|
"\n",
|
|
" # solve Greens function sequentially for the energies, because of memory bound\n",
|
|
" Gk = np.zeros(shape=(eset, HK.shape[0], HK.shape[1]), dtype=\"complex128\")\n",
|
|
" for j in range(eset):\n",
|
|
" Gk[j] = inv(SK * eran[j] - HK)\n",
|
|
"\n",
|
|
" # store the Greens function slice of the magnetic entities (for now) based on the on-site projections\n",
|
|
" for mag_ent in magnetic_entities:\n",
|
|
" mag_ent[\"Gii_tmp\"][i] += (\n",
|
|
" Gk[:, mag_ent[\"spin_box_indeces\"], :][:, :, mag_ent[\"spin_box_indeces\"]]\n",
|
|
" * wk\n",
|
|
" )\n",
|
|
"\n",
|
|
" for pair in pairs:\n",
|
|
" # add phase shift based on the cell difference\n",
|
|
" phase = np.exp(1j * 2 * np.pi * k @ pair[\"Ruc\"].T)\n",
|
|
"\n",
|
|
" # get the pair orbital sizes from the magnetic entities\n",
|
|
" ai = magnetic_entities[pair[\"ai\"]][\"spin_box_indeces\"]\n",
|
|
" aj = magnetic_entities[pair[\"aj\"]][\"spin_box_indeces\"]\n",
|
|
"\n",
|
|
" # store the Greens function slice of the magnetic entities (for now) based on the on-site projections\n",
|
|
" pair[\"Gij_tmp\"][i] += Gk[:, ai][..., aj] * phase * wk\n",
|
|
" pair[\"Gji_tmp\"][i] += Gk[:, aj][..., ai] / phase * wk\n",
|
|
"\n",
|
|
"# summ reduce partial results of mpi nodes\n",
|
|
"for i in range(len(hamiltonians)):\n",
|
|
" for mag_ent in magnetic_entities:\n",
|
|
" comm.Reduce(mag_ent[\"Gii_tmp\"][i], mag_ent[\"Gii\"][i], root=root_node)\n",
|
|
"\n",
|
|
" for pair in pairs:\n",
|
|
" comm.Reduce(pair[\"Gij_tmp\"][i], pair[\"Gij\"][i], root=root_node)\n",
|
|
" comm.Reduce(pair[\"Gji_tmp\"][i], pair[\"Gji\"][i], root=root_node)\n",
|
|
"\n",
|
|
"if rank == root_node:\n",
|
|
" 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",
|
|
" )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Magnetic entities integrated.\n",
|
|
"Pairs integrated.\n",
|
|
"Magnetic parameters calculated.\n",
|
|
"##################################################################### GROGU OUTPUT #############################################################################\n",
|
|
"================================================================================================================================================================\n",
|
|
"Input file: \n",
|
|
"/Users/danielpozsar/Downloads/nojij/Fe3GeTe2/monolayer/soc/lat3_791/Fe3GeTe2.fdf\n",
|
|
"Output file: \n",
|
|
"./Fe3GeTe2.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: 10000\n",
|
|
"================================================================================================================================================================\n",
|
|
"Atomic information: \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] 2.745163300331324\n",
|
|
"Isotropic: -61.498296406506675\n",
|
|
"DMI: [-9.32930006e-01 -6.96988637e-04 -1.36689594e-06]\n",
|
|
"Symmetric-anisotropy: [ 3.64026416e-01 -9.75305726e-05 1.03837928e-05 -9.75305726e-05\n",
|
|
" 2.98408661e+00 -2.59876808e-05 1.03837928e-05 -2.59876808e-05\n",
|
|
" -3.34811302e+00]\n",
|
|
"J: [-6.11342700e+01 -9.75305726e-05 1.03837928e-05 -9.75305726e-05\n",
|
|
" -5.85142098e+01 -2.59876808e-05 1.03837928e-05 -2.59876808e-05\n",
|
|
" -6.48464094e+01]\n",
|
|
"Energies for debugging: \n",
|
|
"array([[-6.21997924e-02, -9.32904018e-04, 9.32955993e-04,\n",
|
|
" -6.14479990e-02],\n",
|
|
" [-6.74930265e-02, 6.86604844e-07, -7.07372430e-07,\n",
|
|
" -6.66882231e-02],\n",
|
|
" [-5.55804206e-02, 9.61636767e-08, 9.88974686e-08,\n",
|
|
" -5.55803169e-02]])\n",
|
|
"J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n",
|
|
"array([-0.06668822, -0.05558042, -0.06219979])\n",
|
|
"Test J_xx = E(y,z) = E(z,y)\n",
|
|
"-0.06668822305594396 -0.055580316925466514\n",
|
|
"\n",
|
|
"[3]Fe(2) [5]Fe(2) [0 0 0] d [Ang] 2.5835033632437767\n",
|
|
"Isotropic: -60.54618555554936\n",
|
|
"DMI: [ 3.78486756e+00 -6.14165405e+00 5.59099134e-04]\n",
|
|
"Symmetric-anisotropy: [ 0.20417082 0.07119707 -0.09312132 0.07119707 0.01235531 -0.04251649\n",
|
|
" -0.09312132 -0.04251649 -0.21652613]\n",
|
|
"J: [-6.03420147e+01 7.11970660e-02 -9.31213222e-02 7.11970660e-02\n",
|
|
" -6.05338303e+01 -4.25164858e-02 -9.31213222e-02 -4.25164858e-02\n",
|
|
" -6.07627117e+01]\n",
|
|
"Energies for debugging: \n",
|
|
"array([[-6.08726017e-02, 3.82738404e-03, -3.74235107e-03,\n",
|
|
" -6.11758535e-02],\n",
|
|
" [-6.06528217e-02, 6.23477538e-03, -6.04853273e-03,\n",
|
|
" -6.08746935e-02],\n",
|
|
" [-5.98918070e-02, -7.06379668e-05, -7.17561651e-05,\n",
|
|
" -5.98093360e-02]])\n",
|
|
"J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n",
|
|
"array([-0.06087469, -0.05989181, -0.0608726 ])\n",
|
|
"Test J_xx = E(y,z) = E(z,y)\n",
|
|
"-0.06087469345892933 -0.05980933600539501\n",
|
|
"\n",
|
|
"[4]Fe(2) [5]Fe(2) [0 0 0] d [Ang] 2.583501767937866\n",
|
|
"Isotropic: -60.54212757392337\n",
|
|
"DMI: [-3.79967167e+00 6.15419703e+00 5.59764090e-04]\n",
|
|
"Symmetric-anisotropy: [ 0.20573682 0.0711945 0.08981327 0.0711945 0.0059668 0.03643624\n",
|
|
" 0.08981327 0.03643624 -0.21170362]\n",
|
|
"J: [-6.03363908e+01 7.11945020e-02 8.98132684e-02 7.11945020e-02\n",
|
|
" -6.05361608e+01 3.64362362e-02 8.98132684e-02 3.64362362e-02\n",
|
|
" -6.07538312e+01]\n",
|
|
"Energies for debugging: \n",
|
|
"array([[-6.08690792e-02, -3.83610790e-03, 3.76323543e-03,\n",
|
|
" -6.11804573e-02],\n",
|
|
" [-6.06385832e-02, -6.24401030e-03, 6.06438376e-03,\n",
|
|
" -6.08633835e-02],\n",
|
|
" [-5.98918643e-02, -7.06347379e-05, -7.17542661e-05,\n",
|
|
" -5.98093980e-02]])\n",
|
|
"J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n",
|
|
"array([-0.06086338, -0.05989186, -0.06086908])\n",
|
|
"Test J_xx = E(y,z) = E(z,y)\n",
|
|
"-0.0608633834990491 -0.059809398001364436\n",
|
|
"\n",
|
|
"[3]Fe(2) [5]Fe(2) [-1 -1 0] d [Ang] 2.5834973202859075\n",
|
|
"Isotropic: -60.53930274234898\n",
|
|
"DMI: [-7.20262359e+00 3.30922312e-04 -5.12682125e-04]\n",
|
|
"Symmetric-anisotropy: [-4.62470099e-02 -1.05109909e-04 1.11455444e-04 -1.05109909e-04\n",
|
|
" 2.54462404e-01 1.15662485e-01 1.11455444e-04 1.15662485e-01\n",
|
|
" -2.08215394e-01]\n",
|
|
"J: [-6.05855498e+01 -1.05109909e-04 1.11455444e-04 -1.05109909e-04\n",
|
|
" -6.02848403e+01 1.15662485e-01 1.11455444e-04 1.15662485e-01\n",
|
|
" -6.07475181e+01]\n",
|
|
"Energies for debugging: \n",
|
|
"array([[-6.06216770e-02, -7.31828608e-03, 7.08696111e-03,\n",
|
|
" -6.08002127e-02],\n",
|
|
" [-6.08733593e-02, -4.42377757e-07, 2.19466868e-07,\n",
|
|
" -6.12370668e-02],\n",
|
|
" [-5.97694679e-02, -4.07572216e-07, 6.17792035e-07,\n",
|
|
" -5.99340327e-02]])\n",
|
|
"J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n",
|
|
"array([-0.06123707, -0.05976947, -0.06062168])\n",
|
|
"Test J_xx = E(y,z) = E(z,y)\n",
|
|
"-0.061237066792013795 -0.05993403271250145\n",
|
|
"\n",
|
|
"[4]Fe(2) [5]Fe(2) [-1 -1 0] d [Ang] 2.583495745338251\n",
|
|
"Isotropic: -60.54260994469562\n",
|
|
"DMI: [ 7.20261281e+00 -7.79978899e-04 -5.10345027e-04]\n",
|
|
"Symmetric-anisotropy: [-4.49940133e-02 -1.04644259e-04 1.76885445e-05 -1.04644259e-04\n",
|
|
" 2.57575083e-01 -1.15643556e-01 1.76885445e-05 -1.15643556e-01\n",
|
|
" -2.12581070e-01]\n",
|
|
"J: [-6.05876040e+01 -1.04644259e-04 1.76885445e-05 -1.04644259e-04\n",
|
|
" -6.02850349e+01 -1.15643556e-01 1.76885445e-05 -1.15643556e-01\n",
|
|
" -6.07551910e+01]\n",
|
|
"Energies for debugging: \n",
|
|
"array([[-6.06219750e-02, 7.31825637e-03, -7.08696926e-03,\n",
|
|
" -6.08004936e-02],\n",
|
|
" [-6.08884070e-02, 7.62290354e-07, -7.97667443e-07,\n",
|
|
" -6.12410736e-02],\n",
|
|
" [-5.97695761e-02, -4.05700767e-07, 6.14989286e-07,\n",
|
|
" -5.99341343e-02]])\n",
|
|
"J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n",
|
|
"array([-0.06124107, -0.05976958, -0.06062198])\n",
|
|
"Test J_xx = E(y,z) = E(z,y)\n",
|
|
"-0.06124107359965607 -0.059934134316324196\n",
|
|
"\n",
|
|
"[3]Fe(2) [5]Fe(2) [-1 0 0] d [Ang] 2.583541444641373\n",
|
|
"Isotropic: -60.53142529259683\n",
|
|
"DMI: [ 3.79939696e+00 6.14174265e+00 -4.60077462e-05]\n",
|
|
"Symmetric-anisotropy: [ 0.2042796 -0.07107711 0.09303406 -0.07107711 0.01020684 -0.03654049\n",
|
|
" 0.09303406 -0.03654049 -0.21448644]\n",
|
|
"J: [-6.03271457e+01 -7.10771078e-02 9.30340570e-02 -7.10771078e-02\n",
|
|
" -6.05212185e+01 -3.65404867e-02 9.30340570e-02 -3.65404867e-02\n",
|
|
" -6.07459117e+01]\n",
|
|
"Energies for debugging: \n",
|
|
"array([[-6.08543628e-02, 3.83593745e-03, -3.76285647e-03,\n",
|
|
" -6.11652643e-02],\n",
|
|
" [-6.06374606e-02, -6.23477670e-03, 6.04870859e-03,\n",
|
|
" -6.08592084e-02],\n",
|
|
" [-5.98771726e-02, 7.10311000e-05, 7.11231155e-05,\n",
|
|
" -5.97950830e-02]])\n",
|
|
"J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n",
|
|
"array([-0.06085921, -0.05987717, -0.06085436])\n",
|
|
"Test J_xx = E(y,z) = E(z,y)\n",
|
|
"-0.06085920839939711 -0.059795082988255574\n",
|
|
"\n",
|
|
"[4]Fe(2) [5]Fe(2) [-1 0 0] d [Ang] 2.5835398672184064\n",
|
|
"Isotropic: -60.52706082282313\n",
|
|
"DMI: [-3.78470017e+00 -6.15374066e+00 -4.69844827e-05]\n",
|
|
"Symmetric-anisotropy: [ 0.2054248 -0.07107452 -0.08989469 -0.07107452 0.00801517 0.04261804\n",
|
|
" -0.08989469 0.04261804 -0.21343998]\n",
|
|
"J: [-6.03216360e+01 -7.10745234e-02 -8.98946890e-02 -7.10745234e-02\n",
|
|
" -6.05190457e+01 4.26180387e-02 -8.98946890e-02 4.26180387e-02\n",
|
|
" -6.07405008e+01]\n",
|
|
"Energies for debugging: \n",
|
|
"array([[-6.08579041e-02, -3.82731821e-03, 3.74208213e-03,\n",
|
|
" -6.11607909e-02],\n",
|
|
" [-6.06230975e-02, 6.24363535e-03, -6.06384598e-03,\n",
|
|
" -6.08480575e-02],\n",
|
|
" [-5.98773004e-02, 7.10275389e-05, 7.11215079e-05,\n",
|
|
" -5.97952145e-02]])\n",
|
|
"J_ii for debugging: (check if this is the same as in calculate_exchange_tensor)\n",
|
|
"array([-0.06084806, -0.0598773 , -0.0608579 ])\n",
|
|
"Test J_xx = E(y,z) = E(z,y)\n",
|
|
"-0.060848057523824294 -0.05979521451219277\n",
|
|
"\n",
|
|
"================================================================================================================================================================\n",
|
|
"Runtime information: \n",
|
|
"Total runtime: 264.50463125 s\n",
|
|
"----------------------------------------------------------------------------------------------------------------------------------------------------------------\n",
|
|
"Initial setup: 0.17141095800000006 s\n",
|
|
"Hamiltonian conversion and XC field extraction: 1.047 s\n",
|
|
"Pair and site datastructure creatrions: 0.036 s\n",
|
|
"k set cration and distribution: 0.029 s\n",
|
|
"Rotating XC potential: 0.329 s\n",
|
|
"Greens function inversion: 262.683 s\n",
|
|
"Calculate energies and magnetic components: 0.209 s\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"if rank == root_node:\n",
|
|
" # iterate over the magnetic entities\n",
|
|
" for tracker, mag_ent in enumerate(magnetic_entities):\n",
|
|
" # iterate over the quantization axes\n",
|
|
" for i, Gii in enumerate(mag_ent[\"Gii\"]):\n",
|
|
" storage = []\n",
|
|
" # iterate over the first and second order local perturbations\n",
|
|
" for Vu1, Vu2 in zip(mag_ent[\"Vu1\"][i], mag_ent[\"Vu2\"][i]):\n",
|
|
" # The Szunyogh-Lichtenstein formula\n",
|
|
" traced = np.trace((Vu2 @ Gii + 0.5 * Gii @ Vu1 @ Gii), axis1=1, axis2=2)\n",
|
|
" # evaluation of the contour integral\n",
|
|
" storage.append(np.trapz(-1 / np.pi * np.imag(traced * cont.we)))\n",
|
|
"\n",
|
|
" # fill up the magnetic entities dictionary with the energies\n",
|
|
" magnetic_entities[tracker][\"energies\"].append(storage)\n",
|
|
" # convert to np array\n",
|
|
" magnetic_entities[tracker][\"energies\"] = np.array(\n",
|
|
" magnetic_entities[tracker][\"energies\"]\n",
|
|
" )\n",
|
|
" print(\"Magnetic entities integrated.\")\n",
|
|
"\n",
|
|
" # iterate over the pairs\n",
|
|
" for tracker, pair in enumerate(pairs):\n",
|
|
" # iterate over the quantization axes\n",
|
|
" for i, (Gij, Gji) in enumerate(zip(pair[\"Gij\"], pair[\"Gji\"])):\n",
|
|
" site_i = magnetic_entities[pair[\"ai\"]]\n",
|
|
" site_j = magnetic_entities[pair[\"aj\"]]\n",
|
|
"\n",
|
|
" storage = []\n",
|
|
" # iterate over the first order local perturbations in all possible orientations for the two sites\n",
|
|
" for Vui in site_i[\"Vu1\"][i]:\n",
|
|
" for Vuj in site_j[\"Vu1\"][i]:\n",
|
|
" # The Szunyogh-Lichtenstein formula\n",
|
|
" traced = np.trace((Vui @ Gij @ Vuj @ Gji), axis1=1, axis2=2)\n",
|
|
" # evaluation of the contour integral\n",
|
|
" storage.append(np.trapz(-1 / np.pi * np.imag(traced * cont.we)))\n",
|
|
" # fill up the pairs dictionary with the energies\n",
|
|
" pairs[tracker][\"energies\"].append(storage)\n",
|
|
" # convert to np array\n",
|
|
" pairs[tracker][\"energies\"] = np.array(pairs[tracker][\"energies\"])\n",
|
|
"\n",
|
|
" print(\"Pairs integrated.\")\n",
|
|
"\n",
|
|
" # calculate magnetic parameters\n",
|
|
" for pair in pairs:\n",
|
|
" J_iso, J_S, D, J = calculate_exchange_tensor(pair)\n",
|
|
" pair[\"J_iso\"] = J_iso * sisl.unit_convert(\"eV\", \"meV\")\n",
|
|
" pair[\"J_S\"] = J_S * sisl.unit_convert(\"eV\", \"meV\")\n",
|
|
" pair[\"D\"] = D * sisl.unit_convert(\"eV\", \"meV\")\n",
|
|
" pair[\"J\"] = J * sisl.unit_convert(\"eV\", \"meV\")\n",
|
|
"\n",
|
|
" print(\"Magnetic parameters calculated.\")\n",
|
|
"\n",
|
|
" times[\"end_time\"] = timer()\n",
|
|
" print(\n",
|
|
" \"##################################################################### GROGU OUTPUT #############################################################################\"\n",
|
|
" )\n",
|
|
"\n",
|
|
" print_parameters(simulation_parameters)\n",
|
|
" print_atoms_and_pairs(magnetic_entities, pairs)\n",
|
|
" print_runtime_information(times)\n",
|
|
"\n",
|
|
" # remove clutter from magnetic entities and pair information\n",
|
|
" for pair in pairs:\n",
|
|
" del pair[\"Gij\"]\n",
|
|
" del pair[\"Gij_tmp\"]\n",
|
|
" del pair[\"Gji\"]\n",
|
|
" del pair[\"Gji_tmp\"]\n",
|
|
" for mag_ent in magnetic_entities:\n",
|
|
" del mag_ent[\"Gii\"]\n",
|
|
" 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",
|
|
" )\n",
|
|
" # save dictionary\n",
|
|
" with open(outfile, \"wb\") as output_file:\n",
|
|
" pickle.dump(results, output_file)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"ename": "SyntaxError",
|
|
"evalue": "invalid syntax (3105939143.py, line 1)",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;36m Cell \u001b[0;32mIn[11], 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": [
|
|
"========================================\n",
|
|
" \n",
|
|
"Atom Angstrom\n",
|
|
"# Label, x y z Sx Sy Sz #Q Lx Ly Lz Jx Jy Jz\n",
|
|
"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n",
|
|
"Te1 1.8955 1.0943 13.1698 -0.0000 0.0000 -0.1543 # 5.9345 -0.0000 0.0000 -0.0537 -0.0000 0.0000 -0.2080 \n",
|
|
"Te2 1.8955 1.0943 7.4002 0.0000 -0.0000 -0.1543 # 5.9345 0.0000 -0.0000 -0.0537 0.0000 -0.0000 -0.2080 \n",
|
|
"Ge3 -0.0000 2.1887 10.2850 0.0000 0.0000 -0.1605 # 3.1927 -0.0000 0.0000 0.0012 0.0000 0.0000 -0.1593 \n",
|
|
"Fe4 -0.0000 0.0000 11.6576 0.0001 -0.0001 2.0466 # 8.3044 0.0000 -0.0000 0.1606 0.0001 -0.0001 2.2072 \n",
|
|
"Fe5 -0.0000 0.0000 8.9124 -0.0001 0.0001 2.0466 # 8.3044 -0.0000 0.0000 0.1606 -0.0001 0.0001 2.2072 \n",
|
|
"Fe6 1.8955 1.0944 10.2850 0.0000 0.0000 1.5824 # 8.3296 -0.0000 -0.0000 0.0520 -0.0000 0.0000 1.6344 \n",
|
|
"==================================================================================================================================\n",
|
|
" \n",
|
|
"Exchange meV\n",
|
|
"--------------------------------------------------------------------------------\n",
|
|
"# at1 at2 i j k # d (Ang)\n",
|
|
"--------------------------------------------------------------------------------\n",
|
|
"Fe4 Fe5 0 0 0 # 2.7452\n",
|
|
"Isotropic -82.0854\n",
|
|
"DMI 0.12557 -0.00082199 6.9668e-08\n",
|
|
"Symmetric-anisotropy -0.60237 -0.83842 -0.00032278 -1.2166e-05 -3.3923e-05\n",
|
|
"--------------------------------------------------------------------------------\n",
|
|
"Fe4 Fe6 0 0 0 # 2.5835\n",
|
|
"Isotropic -41.9627\n",
|
|
"DMI 1.1205 -1.9532 0.0018386\n",
|
|
"Symmetric-anisotropy 0.26007 -0.00013243 0.12977 -0.069979 -0.042066\n",
|
|
"--------------------------------------------------------------------------------\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"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.9.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|