From fd53e98c25a825e14c2ad7744e7607896535c8d9 Mon Sep 17 00:00:00 2001 From: Daniel Pozsar Date: Sat, 9 Nov 2024 18:44:50 +0100 Subject: [PATCH] trying module docstrings --- .../_build/doctrees/bibliography.doctree | Bin 2701 -> 2708 bytes .../_build/doctrees/changelog/index.doctree | Bin 2608 -> 2615 bytes docs/source/_build/doctrees/cite.doctree | Bin 2617 -> 2624 bytes docs/source/_build/doctrees/dev/index.doctree | Bin 2658 -> 2665 bytes .../source/_build/doctrees/environment.pickle | Bin 123890 -> 130523 bytes .../implementation/environment.doctree | Bin 2667 -> 2674 bytes .../implementation/grogupy.core.doctree | Bin 46942 -> 0 bytes .../doctrees/implementation/grogupy.doctree | Bin 4093 -> 172352 bytes .../implementation/grogupy.grogu.doctree | Bin 4818 -> 0 bytes .../implementation/grogupy.io.doctree | Bin 23496 -> 0 bytes .../implementation/grogupy.magnetism.doctree | Bin 29435 -> 0 bytes .../implementation/grogupy.utilities.doctree | Bin 59665 -> 0 bytes .../doctrees/implementation/modules.doctree | Bin 2812 -> 2819 bytes docs/source/_build/doctrees/index.doctree | Bin 11283 -> 11290 bytes .../_build/doctrees/introduction.doctree | Bin 4863 -> 4870 bytes .../_build/doctrees/quickstart/index.doctree | Bin 5084 -> 5091 bytes .../_build/doctrees/tutorials/index.doctree | Bin 2608 -> 2615 bytes .../_build/html/_modules/grogupy/core.html | 205 ++--- .../_build/html/_modules/grogupy/grogu.html | 186 ++++- .../_build/html/_modules/grogupy/io.html | 320 ++++++-- .../html/_modules/grogupy/magnetism.html | 13 +- .../html/_modules/grogupy/utilities.html | 23 +- .../implementation/grogupy.core.rst.txt | 7 - .../implementation/grogupy.grogu.rst.txt | 7 - .../implementation/grogupy.io.rst.txt | 7 - .../implementation/grogupy.magnetism.rst.txt | 7 - .../_sources/implementation/grogupy.rst.txt | 47 +- .../implementation/grogupy.utilities.rst.txt | 7 - docs/source/_build/html/genindex.html | 84 +- .../html/implementation/environment.html | 4 +- .../html/implementation/grogupy.core.html | 322 -------- .../html/implementation/grogupy.grogu.html | 153 ---- .../_build/html/implementation/grogupy.html | 774 ++++++++++++++++-- .../html/implementation/grogupy.io.html | 240 ------ .../implementation/grogupy.magnetism.html | 263 ------ .../implementation/grogupy.utilities.html | 381 --------- .../_build/html/implementation/modules.html | 75 +- docs/source/_build/html/objects.inv | Bin 1167 -> 1090 bytes docs/source/_build/html/py-modindex.html | 10 +- docs/source/_build/html/searchindex.js | 2 +- docs/source/implementation/grogupy.core.rst | 7 - docs/source/implementation/grogupy.grogu.rst | 7 - docs/source/implementation/grogupy.io.rst | 7 - .../implementation/grogupy.magnetism.rst | 7 - docs/source/implementation/grogupy.rst | 47 +- .../implementation/grogupy.utilities.rst | 7 - src/grogupy/__init__.py | 4 + src/grogupy/core.py | 4 +- src/grogupy/grogu.py | 3 + src/grogupy/io.py | 3 + src/grogupy/magnetism.py | 3 + src/grogupy/utilities.py | 3 + 52 files changed, 1418 insertions(+), 1821 deletions(-) delete mode 100644 docs/source/_build/doctrees/implementation/grogupy.core.doctree delete mode 100644 docs/source/_build/doctrees/implementation/grogupy.grogu.doctree delete mode 100644 docs/source/_build/doctrees/implementation/grogupy.io.doctree delete mode 100644 docs/source/_build/doctrees/implementation/grogupy.magnetism.doctree delete mode 100644 docs/source/_build/doctrees/implementation/grogupy.utilities.doctree delete mode 100644 docs/source/_build/html/_sources/implementation/grogupy.core.rst.txt delete mode 100644 docs/source/_build/html/_sources/implementation/grogupy.grogu.rst.txt delete mode 100644 docs/source/_build/html/_sources/implementation/grogupy.io.rst.txt delete mode 100644 docs/source/_build/html/_sources/implementation/grogupy.magnetism.rst.txt delete mode 100644 docs/source/_build/html/_sources/implementation/grogupy.utilities.rst.txt delete mode 100644 docs/source/_build/html/implementation/grogupy.core.html delete mode 100644 docs/source/_build/html/implementation/grogupy.grogu.html delete mode 100644 docs/source/_build/html/implementation/grogupy.io.html delete mode 100644 docs/source/_build/html/implementation/grogupy.magnetism.html delete mode 100644 docs/source/_build/html/implementation/grogupy.utilities.html delete mode 100644 docs/source/implementation/grogupy.core.rst delete mode 100644 docs/source/implementation/grogupy.grogu.rst delete mode 100644 docs/source/implementation/grogupy.io.rst delete mode 100644 docs/source/implementation/grogupy.magnetism.rst delete mode 100644 docs/source/implementation/grogupy.utilities.rst diff --git a/docs/source/_build/doctrees/bibliography.doctree b/docs/source/_build/doctrees/bibliography.doctree index 85e57e152a399a22dd29e7359335fd6d77c4e391..1974d1a04847f985c9f38e545405ae814dc42162 100644 GIT binary patch delta 31 ncmeAbog&K8z&f>aBa0U!WAtQyMi;i?{L-T2)XkF^e{%o;nbZna delta 24 gcmbOt+AGS^z&f>QBa0U!W5{HGMwiXA7=Lj909?TbxBvhE diff --git a/docs/source/_build/doctrees/changelog/index.doctree b/docs/source/_build/doctrees/changelog/index.doctree index 72fe06383c5f9abf8bc8dacd17530de607aed690..d8c770e4975bf0990fadff9bce25d9699f203e1e 100644 GIT binary patch delta 31 ncmdlWvR#Cwfpx0RMiv)F#<gvQvbmfpx0hMixItMxV*Sj4qq!F)rc&0A8U7W&i*H diff --git a/docs/source/_build/doctrees/dev/index.doctree b/docs/source/_build/doctrees/dev/index.doctree index 22fb2aa5855af3a4a85dc05b49235fbfda600c50..31d6493e86e471b936c4819a04f3506175725dd2 100644 GIT binary patch delta 31 ncmaDP@=}DQfpu!!MwSFd#)!$Oj4o`&`K3k4shd|Y?&1IdtWFBi delta 24 gcmaDU@<@cGfpu#5MwSFd#=yy`j4qouFz)040BW%aGXMYp diff --git a/docs/source/_build/doctrees/environment.pickle b/docs/source/_build/doctrees/environment.pickle index 9143607cbaa94a732af2609f7865fd9a911426ab..c3c0e65ef54cb45981381be4198d0246c5cdfe59 100644 GIT binary patch literal 130523 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%0Dcz1CWniKFw* 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 diff --git a/docs/source/_build/doctrees/implementation/grogupy.core.doctree b/docs/source/_build/doctrees/implementation/grogupy.core.doctree deleted file mode 100644 index 1603524e7eb64e39451deee652e97268b4273b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46942 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

~V)aEOcZ?q_vr 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

)9m^L}9%U zNuWB7I#l}F!h~u7>C|t^-f@l(Gc0Q5Es7xLN+7n)jTDemp&}Kgk9!If&Z$uG-zUkn z^C>nYJCfFkjCNt3fL-RJhnR6AZncxCLI){5@r}J+EO5KPdL8XzQBpTx7_qz3GLHJN zqgn=nf6r&?&?BI@WplKEw=q(Y5`8QKRd2G4vk3mK`{*%dS@;3M3R9(SSqYe%uRToM zm(6*%7aQEVux>}|ni#~I%P}!8lfpmXBfM(Mh(_Jd8oo z%vj|n+898n;-lwceCY&swV^dSQhMaYmV!vxN(Z&1dD&# zr?q1}4q??#u?Fu37T@0y7VklJ&*9{oJ!k<}9DhAc3(8dEVgp>BCLtjqt3xju*@gef zM;x^aPkmV(>bBKX+fXbaZE zRa1^>h*s>ua_w`I2)iWj0c2k)-_nn$?F6pXJ_L$RU#4OQ*AGOr;VY*IT$hST9@EgL zKBRTq>MiL4UmVHdkFrZ0lwO3diKFbZu)Qc=Qt@k7XuWP_Ed^Sy0Ffx2LutYGdMIBzk13YVT8_FO32>zDPEr#7Ob-coM4nk4L&vCTExJjWmI4bDO8Cv{Dv7OUu{L!g7>C0Dp?`jcYhfqS6Q=opnhq_4x%~ zeU_d?3c_8bK%H^d+ibWiPEe0C?3FLQNkT@5sbaAP;jg@$2|Ma=p2FYwNG#$GE;NQ# ze+l$PaIdotHYEYlxa1~*Qb5vw??DiZEPq6T^a7I39k7k}s(VGaki!*NFU$u~rA9p} zonxs{J%EQLA4rp4 zy&cddIRT(A2;jtEXri#CU-oI+nAIaJ_)6Bi-C#?XC$Xh&CH3rPztMxtZ0TT{%!)r= zi@wMxkLYri60+;P&xcjD>me@k+l)^i!$zt%GAbX#Mx8w5P?z5Ikm~ggR2(JZod~JO z=6pCrOU16|ff6a5R!-g~1toe4l;FAuQ?SAvKFls%7h#IPaa}1NTfZWL-Tp%tqFvMmTj|56Ya3jqKG!UYpP%&)*MMl zXpT@e!9n7u^mCbrcYi2I%3a!kuZcrJVxyRHUZ?AJ_{*(qrNBVDfXFs6R$-t)hq4OR zVitAsu$E20o*8SAoFuT8c|bG)SPRxoSj#Y8;ZK3J%oE){S~4dZ9{hYC6m-H_`jsVf z2(&bD#6|<&1_``;Yq%*k;))U5oj@9Pk#i&5u5~nKD9qINT|{7xM_N=SHCy4pFLqjH z4%WMot}xljbakrOEbz5n8M!UpgF@1aMxWduK&J=lP z4`O1Z^(cv{p)ae9?Ik*D%2R1!AM|302inL7%)77wj9OPZ%7t!P6#TjtmjZmoM*tQV zaJxa|=F?09t0xj6xk5$Fpidj)xD^k0ITbeEn;q)nae+ehhyxXm3lu8q4?Y}XFS>`- zrT33~hmf2wRa)j79V-kcWCjJ3SImhuuzJwme#87nr?Gz!j_TK!dpa!)`5~~Lo}u-pfz5@+ zNaqcjtCGt{fUXB*U;|dWe<0I<&xJOIvvBUuKxSl5|BitS{=0Po@q)WS)9E9C9WQu! zL>r!-BD{d9Ile!0Cc8^W0lSv&?teur`@;lM+|vE{nmA1Gtn>zBK3hHZZ~A_6po4z`;!4QCD)qwi)H_vXsO@Zs$y ztUPK$=%ap88MCu^@8*+1y_~Cwun6{pif_MFuwRrL$t8~aw!P<4!b zQ@yW&CobyYD8hCz{U^!Tyo@7%>|mot3wCX=Z?zZU3qWJgwz$enZ{EHUplG&gO%Dzb*i|Jb33XE)@|7f z$xiyP53>vb;1+;L;2RjXP6&WPMJi4ol9e@FoC+JJPMXoyaP2a5-VPntWJ;+M+z$MHs@dyEt`|Nr@1IPxHl3sic4PQBusb5TtsBc-KtJ`o-euJ80r202;fB zxglXKj)ru;v#P+F+zLx=E%#wwH7P_KmjJOX9#&SGa({zVq+lPD!e%j<)NQ6ge^Lhg zl(=$-kM?4=h6|HH!;QAdn(7Tx#c1iHJ6X&Vk48~+Nn6gu8hi6=7xMY#Ic-aj`q5EE|AxS^UW8M z%hP56cUv-T>NE-BC!C6(D4q-|VxryGan^67ie=#p87HUY+betwBi1Q#H}1=rZMdzR z)#IgbP#3(Do=oGL=al%@dJq=BVD|bnVU=mI9!4A5TXgTv1!edBO&`Y9?u%cBdne=C zr*j|`$?DTNP(!~;8qzw))p|R}W_n#3w`a?L)<=OcGhYF6Jx+2ZbIeN1Z+4JOG`>?= z+5Ug#!@k=7D}nbvWxV^eKT?szKJAZsqV~5_>Fyh?=5^j2A{DtFdtJKwMu&y&+ap1$ zIDUx*O-h1v{!aGyl~Gh`NVl>8j`@{q%L&fy}930#l^BLD$`;NH33Q!@H*_MH*=*xvF}; z@{F=k${pzf4@5%vCrzaSO8fCO@uX>=Y%-c? z<;~y(0^6ry4jrIXm1CCdS?!DO8!r-AyU2T;^0gSA%Ry z=6Jn2it4P54}#`ur&%JgsDD(vuO5_xler4J+i1cCWYww}P(S6^Sm1|=#}iR&l-Y~> zf;(F*8JW5Ak_;^1zw+`ZD>?Oy$VUE{ZzGpJiWHPalWOjqlz9dJrWt*s-INqVfQ4Bw z?Ih((HrY|Y{F*Q4?>iL$g33Nh6MgjKR8TxoXc8sMU}mZn);9Qs_-d=(O$zHvKDrUn z1y>IyFrENX73`8?(927x59kG3?Q~m7ZgaDTN_f5^3#WA zCGo|nu*v?Kbf!i2JCy!~>guX*rOr_{`=}|#T~wox6`XiZd6#0qfwpj zq9vNdL3YBaur#G>eVAt;0dHQ+Gdzze%Q|w4-4qHHso2MquwlrQ>{J{iPz>-}%m95j zM6)H=YOjlf1iUVE$e%M9`|~4=S07OLm>v!EaNZG47n;x?_^b=Y`D%R>R@&&8t#PDr z0&VL)EgkC_2+dbmW4nR2dR}rL$&Qvev2u6lnD_M{F&@cyPnyJv$KUQLmFTD5bh67n z;v<&YWf94Gn91bRA&`nR;nN{df3J3^OYgEsb+-c*PaN^ihg4*pJ{+P=W0&>7^_0#o zC#REw>wOWF;JWcau)>EEm_555pD7|kF^|yI=Ys3~E$~UW-rwOB!}ZwJ)Zuyqqq&hF z%O~cYp}q5x(4P8&9?-oV>U;Ww(PCxKwq39b0#0cg+p}X3uOK|!bLp;uOl{B3%XUm4 z@b}-)7~KMY{}IuKubv{{PgPtJ`&+0#CiqXkDV^n_OYEBXochrbX*_r|%I} zz?FRePV4)v%jDp zAq2Ds{E$-IVU;4KJ&v-ByOxstmA$4ent>SbX$E^) zW!sN=l$yLO$P!SFISV2=Nn}BO1e1yh$bw+qlm%IMDO}-Ckp)?-&I*)7h#0xS`TrZA z*}#~%8n#`CF|ja*t%Fj6x-HjaMyt4Op;{{x8+fE{6Sf2KDW%v6RINvlyK{MIV#|U5 z^ck8ueBo>a(;sKcWDGMPOE~x1)}Rl^wg%O5_1tIx8+>4+58&*GZNRC3uzzGMQl-E; z*oL51gAz@BHwCcSDqjz_-H>a+DtX9sRBtj`@Q-MxsqiIA?`y z3AAHuQ_yvkw1UUQ(blNgPQ<&Az7YuKihVe}5?Pm&H|54UzKI1@jVd#>>x24eF$3AP zpxlSE1tXV-Tcbmes)Nl=jT~AgZBK&}p2}7DU?f>AGZ&rXOLz6vjPE;A$kpH_!tlu? z^Fd>{UL4|C)I2y8_yyl^fD{tnWu;ZFR|SKV5%TMBzS8ABrXavRZViZK?gDyavZJGM zgnNxP;b#vt<*7)df5Aq`7dn3uK=aw|97E^^q`d!)kUhKsJPXl1RfZL$vjp|kg zrNJni-%GAYogk3bA(!h*wF$ zAM+7hwPQ?iy_+fD$BvPTn#{+Jv7v8Zb?Ld2!^W|z>v79$yckS#1Byr1pZ8H-%y@BY z#%D+-&3I!jl-C@)E8FiIUMz6K#d;kL_sZV13HI8<8>E8|i%ftxPY z>u9>SO^T9*FPNmaOOrp}M?I>^V@`4-YaV-}@;o7LRHULt^)Y!g1u}U%70+ZU^OAku zof2m=H1)RE#TOs&x^Tk2ozOZwUD^`hVKU((LYJ;;q4WD03=E8zirx0pRSBlq!pizg1QVG>e9P1QVls!>COhJ$XsEfNq-)`qPAzt*!bx!1DV6O9XhyY*F-KpcnXxBKJT(0%=oQ{ zcFLCfM`}v0JeaRMeYvgaQc`%+fe7ZwF3Sv7Sl@3=;qh9u6y9uR!$KJTOG>lRURxJwJYquk zNNTP|-D>qyXgLhQB*k-()u!fVl*WQJV$ zftON_7uf6RqA{p?pT@A4RdTB4UO0I<)$fC?m~*Opwq7ikt1U<= zovv1t@0WH*Ep6{UtL>>BSR`AgYRhY+a2$Lv)A}0Dx|V7E>As)_8PX!;sQ5mlleuy$ z5a}dz>V3KT3E0X9JIh8$!&n#;yK`U{?iafxlP|(kJZKTVAlncv666Q_4jhMPkh6_m zkgr1Os#1-1u4RHEG#1O6jSXbR@pY&Bav7Z5AO|@(#<6k&a%m&mY7mlS_*o6rdhrC* z4|P%A7OG;OYHe1V@WEO@AbBE=pCrh*LYqK$c+o{LWfAPsGD$$){vX$ZH19Y1ns@18 zq@cX7G_cO8y>HMiJ7ylcGmyuOrE2#T>%lN4Hly<+Woy!YxmXWJ3m6AWqa!1mg?bQV z;A~M?aS`wjM>O$3bw*RFfK>w5#GL*{NIuhmtY;fLw$^bP!gvJTY-vq~Dd@ z<4?U<;2AT+q9qsA6e?w`>zw=QeLwLBoV`}SZ zrbj1)N1>v|PoK3Z>0nNUCi4f>W?DMZM z@SAQiXMx$opOHX%AJCT}bjqPE^J0Pb0j$@t4_wxjDn-}rl3I50O+MnOwu$+y4M6O; zA(mSiQcE^nI@T?kh)NpF{~=4C!AQe6$6J~qbm<1-8* z6=~I{BV$_(JJhAS8l-xu0~JqnaHoM()K7dk#NLIj#v{?8I4K#lOiH5Ty`TiwM2BF7 z50ns9ZE`$SO`s>;Cpta@d{Uz0kMW8nI@s0JB|3K0gIqq_C$J+S2`r#~>p#5$$9)A(hhOe2T?Ur#3B@-V@lSL^1k$fOM<^PE! z^G}0Ft(5*5UlUJ*%;k+pZePLJwfi#bp_gABM!zMyGq12UVhYgyGhog(cT^Js|LIUx z!Jy45m^=*n8DP(hK}${&81&bHXaX>3teY_C9ncCT{3$T#<#E$fplD$lFqZrokhnq7 zZ0ATWPoJ+TS5JYb630@o-2(C?4)S7|dP{!t=d$jorIlT7w=z8z#OcFXxT$KABKqdi-ip~zJ<>2e!kmtZSC(=wenBxn5#1X*^mk7@we*w@Nu`Gjt`a&`> zWOB(c)_0dGaCEBT&P5G!sl+alhF_ArYSj4$`NHu@q#i^CFn@DUu+0mUzd`yCre@ zlDlXf4p{nT4?-a-{Pi@Ul+LsqJ5!+TCKSEM^hkD}fAV2Y?LLUp{XOH%r~4ok$>U?3 zsD-aN)TMVHr24W0mEL`jip^ux(Dil74F1gn0Ng? zw3u6VAE;jfd{Ur(DPFNaon1{`pngF!*UGj!N9X4xqjN^tLr6Z4s%}l-fk%fxt?BO7 zzUJ^iL>s<*iXw2XQHpXuCJrVDXY>0MYx7^y!@W3S+&{pULYH2IuZacNr5*T5c&t~( z*3(<$cx6;A?!b2pTS}(zPAgw2k@P4Kxkl0@hq6i}ZI*TNBI%a^d*(=5a*~Lo_W{ua zMABF{MbdA^EBq-U>ABSHJT(_q8(;CTCP z8hxC`fmlDs_~c@sH=1I{etxU2iOJG}XBz&79`u1x-rh8QC|&ciu4ENmxJzo;)$i~T zQSIs&XWz!;^XckHMOyLcNT|!J9qQ7%I#TU%pwhcKQjs0|aER8AUEL!(=dJ~vgdFiF zB|5(kl;E017p(As#UnZwQ&-_UboIIH7km`>r0D!@c*UY~cGYuqE_vxMed0oh3fAyw zdK;YoR4z6lO}=fkns1eZc2L+1(H7)?qB4U~890rOmB}gV1Pjpgg@qLJ76w3H{g9AZ zAVNoRrrlC;BV2Nby@MUS2HOInEntcJvX8zWw2>ZE$1uwRuIPAQM8R0v0W94iI3Sh^ z8}4fN7dC>ZTwEa%q+}~_FjmlLAA>>p~ z(5@&Qlzmz#J6yMMV+KBG0|7<@jxHP;r!Nt~Ycd-*3MXzYLt22>e+!i0+KXi)l>R@| z9RwEYVwnEYlW;Sk}R27K^m7`~b|5Uzw7Q>6hL7GTRm7PNh$4(e`$fdg`b+gjQO zr-k^LI94Xe!_O9OFq$4N9&Xj^AbOU+>u|VG+$k3;LHlqx4|dZu!D1Wja2d23x`M_a zd?NximT!l1UVs~Z8tvD&sl~%N)mF3CYPJs-mK+Y}LtZt2BNMB2c+>nme!;5==i9-L z1@&sR39JUki(~C@`u29XfLO>vy(3VdkN<4d%kXPavpSp|0-fPgU}ZM;(eZY;{5ZS@ zwgd&r!`Ft38W8rvPM+)-uKR4iHe8Iot_EkZkK#_G2E1?`-GQ%Ou{+sQu$3swj&B5E zpgvB3=Q*+)3+q9xT5o1qX1;xJM%Y)#m7|}t!)3u3bPV5oHh-naNv zu3iBxLJ3$#Fba3(v(FNtNXTEY0y@hEmEkIGrfP@tTg~I!uGrQn!u7fO!)#EmSL@kA zu97bYb!Y)(b-39MmyqU_x6Ed5X@~1$Phzhqo&Ox@42$W#k_SP3uKplK94v{OnC2kpmYS6_V4(CAUI}T!kMv8f1 z5QRD6;#{j)&B|Nhj3SuZqC9-ZEE}05D3;xTHRwUTk}Km2m#{m`*s=BHty&{!<*V7T zQ8cKf!C0-@2*9&RN@gX)&Fslyqev#ZBnzh`=7!4b7=Pk&uIMVz?G}PCa4Kts^*ea! zB0TLMie+)l0gfNxYP^C<8bO`)&7gvB%R`edsOL^WQ_;_Z)5B%h-@tMzC%_QP#nEE3 zeQ4>HaB(fDWucb@&`ZIGLM03F4&XRJ7Q05crqFEG8oRe|huaPC&~PqkWw2U50X=FJ zmShY-$!s%#osZB1+u=O8zwLq@mx4YQ*N+d!UXOR=>n{|qht8WrlN|}_gTC%uM7LmZPI+w1#5Eilb<|m^-aK5c-L1f(w(K^%?RfNK4!YDlyFV9i z(sh67-(bKi{Se2(y@jhw>zBf>XW^emmcgHg@z1gK@aKj2=Mk78mLA4Gzl~JCiGQBK zKmQDWTH$?v1C38f&dlnN-zDE`@mrnUwD zFjIRoUVQ@p*d)aQPLdWTP|{*GRm@^l$cX%N8NY*4d>8-RwgUdV5dVB&CH(ma{`vSS z`11$&=ke9>=X3byiF4r3m+{Ye&w@Xj@z30I;m<<+!#dzgu|M90e{A}}0#5olIf42C zCs_%a(EU=?6qOL#LTR|ReiLPSFa9}a1N=D`|Fkpk=Z*O1^PAw$7xB*}7r>t@@DFoC zZ$__#5v)}oSm2E7BZ`t!^%0d2`ao%f^`K1O#XpO;!k-oRXWzx}=K%hh2U*b4BK&h| z5dORz|KJCGOZdUx5*}*LJ`z*HqZmqfR6_|D#FlWuYzY&3B~17+_sv3M7XDZ@i1Cq= z2B$XAY=w)|Nd_DC77Z6+s)A!L425(D=aQlvjj!q*DhH!3OiD(Fs^w_j!iuhp-Hb}l z*WNf^)XIpKYww4!px$i5ByUyxUHl0|XE4(puC{PC3Zc+&wOpq81H?LW_wxI%hdID6 zw{L}68yxHn^FJ8=8!%C!3Zn_Hc6&i|o6R-g3(dpj7JO^ITs?u)jJ`b1$@%n^3~})P E0xh`r#sB~S delta 701 zcmYjP&1(}u6wgjJ*)*nXbE!(w)S{(nG^joJaZ$mWfmIPH1taXon75eyV6#KhgH$hp zz<|=3u*6I92NXh~um=%8{tm%|f;SJ|1!vo|@h~vI_vZb6@BQ9<{+j>0oPC`c{83W} zSxu6jvx6IVWy>==Y$R>4F)FZcQmYDcG-rB_?-AGHjIY1puXq(QkOig5Aw`wYGs6Jm z=*tk5nEy$Yp+pziSXwM{s$e$^Y~0~ZUe#zxM9=0;FTlLVHCj&KnO5Mn$PqrD;GFFp zfeQ&x9lhn^(C#?1*e(g}wjCy2|R^O*upgD=v@o@A@GJw z6;t;^+jE7o+-iFU@6#;UmW5q$o1fC0268TO3>;vKH&Qeo+M%HL-1ZLN?bCdqZ_frJ za2f8y5?p~wLxB?9BZdykiAgKMpo>jT)u~1G?LhZ^9B>_0MQTl)^(Ig1?})lOlp%f0 zqY(q2QqX*d7>;L=WI!F*GxR7LzeO7ex=gxNW7m*;j?8KsMPi7xWNg>M-IJv(MCv9g zC{*@!JK)j7cc`xRgyytPgNnu`vMCMO^&e$+HB*|8W?A}D{ESBQVT3L%r2p@%3WKP& zhaO19nCzjC2*JCq`N0nSnN~K_FCclP&#J@&pOZo?X5(Ciy diff --git a/docs/source/_build/doctrees/implementation/grogupy.grogu.doctree b/docs/source/_build/doctrees/implementation/grogupy.grogu.doctree deleted file mode 100644 index 5c6de74a7026f2448c8c8753a9df5be033cf2558..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4818 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 F{5O8JS5*K2 diff --git a/docs/source/_build/doctrees/implementation/grogupy.io.doctree b/docs/source/_build/doctrees/implementation/grogupy.io.doctree deleted file mode 100644 index ce8a75bee450090591b33f2ef40d0f0fc82c6c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23496 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 BjLrZ6 diff --git a/docs/source/_build/doctrees/implementation/grogupy.magnetism.doctree b/docs/source/_build/doctrees/implementation/grogupy.magnetism.doctree deleted file mode 100644 index 76be7085aa49f8e83c468d59fd43751808287ab1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29435 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 diff --git a/docs/source/_build/doctrees/implementation/modules.doctree b/docs/source/_build/doctrees/implementation/modules.doctree index a54b3cacb870774ad5971a9e4a7da41df1699684..cf3a011ece0ee5ab7263f5f2b763d6d384bf4790 100644 GIT binary patch delta 31 mcmew(+APM>z&iEEMivW3#?;BSj4o`&`K3k4shb-ZYd8U{Tnc&s delta 28 kcmZn``y)E# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +"""Docstring in core. +""" + import numpy as np from numpy.linalg import inv @@ -119,67 +122,30 @@ from grogupy.utilities import commutator -

- - - -
-[docs] -def sequential_GK(HK, SK, eran, eset): - """Calculates the Greens function by inversion. +
+[docs] +def onsite_projection(matrix, idx1, idx2): + """It produces the slices of a matrix for the on site projection. - It calculates sequentially over the energy levels. + The slicing is along the last two axes as these contains the orbital indexing. Args: - HK : (NO, NO), np.array_like - Hamiltonian at a given k point - SK : (NO, NO), np.array_like - Overlap Matrix at a given k point - eran : (eset) np.array_like - Energy sample along the contour - eset : int - Number of energy samples along the contour + matrix : (..., :, :) np.array_like + Some matrix + idx : np.array_like + The indexes of the orbitals Returns: - Gk : (eset, NO, NO), np.array_like - Green's function at a given k point + np.array_like + Reduced matrix based on the projection """ - # creates an empty holder - Gk = np.zeros(shape=(eset, HK.shape[0], HK.shape[1]), dtype="complex128") - # fills the holder sequentially by the Greens function on a given energy - for j in range(eset): - Gk[j] = inv(SK * eran[j] - HK) - - return Gk
+ return matrix[..., idx1, :][..., idx2]
-[docs] +[docs] def calc_Vu(H, Tu): """Calculates the local perturbation in case of a spin rotation. @@ -203,45 +169,8 @@ -
-[docs] -def remove_clutter_for_save(pairs, magnetic_entities): - """Removes unimportant data from the dictionaries. - - It is used before saving to throw away data that - is not needed for post processing. - - Args: - pairs : dict - Contains all the pair information - magnetic_entities : dict - Contains all the magnetic entity information - - Returns: - pairs : dict - Contains all the reduced pair information - magnetic_entities : dict - Contains all the reduced magnetic entity information - """ - - # remove clutter from magnetic entities and pair information - for pair in pairs: - del pair["Gij"] - del pair["Gij_tmp"] - del pair["Gji"] - del pair["Gji_tmp"] - for mag_ent in magnetic_entities: - del mag_ent["Gii"] - del mag_ent["Gii_tmp"] - del mag_ent["Vu1"] - del mag_ent["Vu2"] - - return pairs, magnetic_entities
- - -
-[docs] +[docs] def build_hh_ss(dh): """It builds the Hamiltonian and Overlap matrix from the sisl.dh class. @@ -300,7 +229,7 @@ [ U.T
-[docs] +[docs] @ np.block([[h11[:, :, i], h12[:, :, i]], [h21[:, :, i], h22[:, :, i]]]) @ U for i in range(dh.lattice.nsc.prod()) @@ -474,25 +403,99 @@ -
-[docs] -def onsite_projection(matrix, idx1, idx2): - """It produces the slices of a matrix for the on site projection. +
+[docs] +def parallel_Gk(HK, SK, eran, eset): + """Calculates the Greens function by inversion. - The slicing is along the last two axes as these contains the orbital indexing. + It calculates the Greens function on all the energy levels at the same time. Args: - matrix : (..., :, :) np.array_like - Some matrix - idx : np.array_like - The indexes of the orbitals + HK : (NO, NO), np.array_like + Hamiltonian at a given k point + SK : (NO, NO), np.array_like + Overlap Matrix at a given k point + eran : (eset) np.array_like + Energy sample along the contour + eset : int + Number of energy samples along the contour Returns: - np.array_like - Reduced matrix based on the projection + Gk : (eset, NO, NO), np.array_like + Green's function at a given k point """ - return matrix[..., idx1, :][..., idx2]
+ # Calculates the Greens function on all the energy levels + return inv(SK * eran.reshape(eset, 1, 1) - HK)
+ + + +
+[docs] +def sequential_GK(HK, SK, eran, eset): + """Calculates the Greens function by inversion. + + It calculates sequentially over the energy levels. + + Args: + HK : (NO, NO), np.array_like + Hamiltonian at a given k point + SK : (NO, NO), np.array_like + Overlap Matrix at a given k point + eran : (eset) np.array_like + Energy sample along the contour + eset : int + Number of energy samples along the contour + + Returns: + Gk : (eset, NO, NO), np.array_like + Green's function at a given k point + """ + + # creates an empty holder + Gk = np.zeros(shape=(eset, HK.shape[0], HK.shape[1]), dtype="complex128") + # fills the holder sequentially by the Greens function on a given energy + for j in range(eset): + Gk[j] = inv(SK * eran[j] - HK) + + return Gk
+ + + +
+[docs] +def remove_clutter_for_save(pairs, magnetic_entities): + """Removes unimportant data from the dictionaries. + + It is used before saving to throw away data that + is not needed for post processing. + + Args: + pairs : dict + Contains all the pair information + magnetic_entities : dict + Contains all the magnetic entity information + + Returns: + pairs : dict + Contains all the reduced pair information + magnetic_entities : dict + Contains all the reduced magnetic entity information + """ + + # remove clutter from magnetic entities and pair information + for pair in pairs: + del pair["Gij"] + del pair["Gij_tmp"] + del pair["Gji"] + del pair["Gji_tmp"] + for mag_ent in magnetic_entities: + del mag_ent["Gii"] + del mag_ent["Gii_tmp"] + del mag_ent["Vu1"] + del mag_ent["Vu2"] + + return pairs, magnetic_entities
diff --git a/docs/source/_build/html/_modules/grogupy/grogu.html b/docs/source/_build/html/_modules/grogupy/grogu.html index 233f699..903290d 100644 --- a/docs/source/_build/html/_modules/grogupy/grogu.html +++ b/docs/source/_build/html/_modules/grogupy/grogu.html @@ -112,7 +112,11 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +"""Docstring in grogupy. +""" + import warnings +from argparse import ArgumentParser from sys import getsizeof from timeit import default_timer as timer @@ -140,48 +144,97 @@ from grogupy import * -
-[docs] -def main(): - # runtime information - times = dict() - times["start_time"] = timer() +
+[docs] +def parse_command_line(): + """This function can read input from the command line.""" - # input output stuff - ###################################################################### - ###################################################################### - ###################################################################### + parser = ArgumentParser() - infile = "/Users/danielpozsar/Downloads/nojij/Fe3GeTe2/monolayer/soc/lat3_791/Fe3GeTe2.fdf" - outfile = "./Fe3GeTe2_notebook" + parser.add_argument( + "-i", + "--input", + dest="infile", + default=None, + type=str, + help="Input file name", + required=True, + ) + parser.add_argument( + "-o", + "--output", + dest="outfile", + default=None, + type=str, + help="Output file name", + ) - magnetic_entities = [ - dict(atom=3, l=2), - dict(atom=4, l=2), - dict(atom=5, l=2), - ] - pairs = [ - dict(ai=0, aj=1, Ruc=np.array([0, 0, 0])), - dict(ai=0, aj=2, Ruc=np.array([0, 0, 0])), - dict(ai=1, aj=2, Ruc=np.array([0, 0, 0])), - dict(ai=0, aj=2, Ruc=np.array([-1, -1, 0])), - dict(ai=1, aj=2, Ruc=np.array([-1, -1, 0])), - dict(ai=0, aj=2, Ruc=np.array([-1, 0, 0])), - dict(ai=1, aj=2, Ruc=np.array([-1, 0, 0])), - dict(ai=1, aj=2, Ruc=np.array([-2, 0, 0])), - dict(ai=1, aj=2, Ruc=np.array([-3, 0, 0])), - ] - simulation_parameters = default_args - simulation_parameters["infile"] = infile - simulation_parameters["outfile"] = outfile - simulation_parameters["kset"] = 20 - simulation_parameters["kdirs"] = "xy" - simulation_parameters["eset"] = 600 - simulation_parameters["esetp"] = 10000 + # parser.add_argument('--scf-orientation', dest = 'scf_xcf_orientation', default = None, help = 'Output file name') + # parser.add_argument('--ref-orientation', dest = 'ref_xcf_orientations', default = None, help = 'Output file name') - ###################################################################### - ###################################################################### - ###################################################################### + parser.add_argument( + "--kset", + dest="kset", + default=None, + type=int, + help="k-space resolution of calculation", + ) + parser.add_argument( + "--kdirs", + dest="kdirs", + default=None, + type=str, + help="Definition of k-space dimensionality", + ) + parser.add_argument( + "--ebot", + dest="ebot", + default=None, + type=float, + help="Bottom energy of the contour", + ) + parser.add_argument( + "--eset", + dest="eset", + default=None, + type=int, + help="Number of energy points on the contour", + ) + parser.add_argument( + "--eset-p", + dest="esetp", + default=None, + type=int, + help="Parameter tuning the distribution on the contour", + ) + + parser.add_argument( + "--parallel-green", + dest="parallel_solver_for_Gk", + default=None, + type=bool, + help="Whether to use the parallel or sequential solver for Greens function", + ) + parser.add_argument( + "--padawan-mode", + dest="padawan_mode", + default=None, + type=bool, + help="If it is on it turns on extra helpful information for new users", + ) + + cmd_line_args = parser.parse_args() + + return cmd_line_args
+ + + +
+[docs] +def main(simulation_parameters, magnetic_entities, pairs): + # runtime information + times = dict() + times["start_time"] = timer() # MPI parameters comm = MPI.COMM_WORLD @@ -555,7 +608,62 @@ if __name__ == "__main__": - main() + # loading parameters + # it is not clear how to give grogu.fdf path... + command_line_arguments = parse_command_line() + fdf_arguments, magnetic_entities, pairs = read_fdf(command_line_arguments["infile"]) + + # right now we do not use any of these input, but it shows + # the order of priority when processing arguments + default_arguments = False + fdf_arguments = False + command_line_arguments = False + simulation_parameters = process_input_args( + default_arguments, fdf_arguments, command_line_arguments, ACCEPTED_INPUTS + ) + + #################################################################################################### + # This is the input file for now # + #################################################################################################### + magnetic_entities = [ + dict(atom=3, l=2), + dict(atom=4, l=2), + dict(atom=5, l=2), + ] + pairs = [ + dict(ai=0, aj=1, Ruc=np.array([0, 0, 0])), + dict(ai=0, aj=2, Ruc=np.array([0, 0, 0])), + dict(ai=1, aj=2, Ruc=np.array([0, 0, 0])), + dict(ai=0, aj=2, Ruc=np.array([-1, -1, 0])), + dict(ai=1, aj=2, Ruc=np.array([-1, -1, 0])), + dict(ai=0, aj=2, Ruc=np.array([-1, 0, 0])), + dict(ai=1, aj=2, Ruc=np.array([-1, 0, 0])), + dict(ai=1, aj=2, Ruc=np.array([-2, 0, 0])), + dict(ai=1, aj=2, Ruc=np.array([-3, 0, 0])), + ] + simulation_parameters = dict() + simulation_parameters["infile"] = ( + "/Users/danielpozsar/Downloads/nojij/Fe3GeTe2/monolayer/soc/lat3_791/Fe3GeTe2.fdf" + ) + simulation_parameters["outfile"] = "./Fe3GeTe2_notebook" + simulation_parameters["scf_xcf_orientation"] = np.array([0, 0, 1]) + simulation_parameters["ref_xcf_orientations"] = [ + dict(o=np.array([1, 0, 0]), vw=[np.array([0, 1, 0]), np.array([0, 0, 1])]), + dict(o=np.array([0, 1, 0]), vw=[np.array([1, 0, 0]), np.array([0, 0, 1])]), + dict(o=np.array([0, 0, 1]), vw=[np.array([1, 0, 0]), np.array([0, 1, 0])]), + ] + simulation_parameters["kset"] = 20 + simulation_parameters["kdirs"] = "xy" + simulation_parameters["ebot"] = None + simulation_parameters["eset"] = 600 + simulation_parameters["esetp"] = 10000 + simulation_parameters["parallel_solver_for_Gk"] = False + simulation_parameters["padawan_mode"] = True + #################################################################################################### + # This is the input file for now # + #################################################################################################### + + main(simulation_parameters, magnetic_entities, pairs)
diff --git a/docs/source/_build/html/_modules/grogupy/io.html b/docs/source/_build/html/_modules/grogupy/io.html index 96ec00d..f765126 100644 --- a/docs/source/_build/html/_modules/grogupy/io.html +++ b/docs/source/_build/html/_modules/grogupy/io.html @@ -112,12 +112,30 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from argparse import ArgumentParser +"""Docstring in io. +""" + from pickle import dump, load import numpy as np - -default_args = dict( +from sisl.io import fdfSileSiesta + +# list of accepted input parameters +ACCEPTED_INPUTS = [ + "infile", + "outfile", + "scf_xcf_orientation", + "ref_xcf_orientations", + "kset", + "kdirs", + "ebot", + "eset", + "esetp", + "parallel_solver_for_Gk", + "padawan_mode", +] + +default_arguments = dict( infile=None, outfile=None, scf_xcf_orientation=np.array([0, 0, 1]), @@ -135,22 +153,168 @@ padawan_mode=True, ) -# parser = ArgumentParser() -# parser.add_argument('--input' , dest = 'infile' , default=None , help = 'Input file name') -# parser.add_argument('--output' , dest = 'outfile', default=None , help = 'Output file name') +
+[docs] +def read_fdf(path): + """It reads the simulation parameters, magnetic entities and pairs from the fdf. -# parser.add_argument('--kset' , dest = 'kset' , default = 2 , type=int , help = 'k-space resolution of Jij calculation') -# parser.add_argument('--kdirs' , dest = 'kdirs' , default = 'xyz' , help = 'Definition of k-space dimensionality') -# parser.add_argument('--ebot' , dest = 'ebot' , default = None , type=float, help = 'Bottom energy of the contour') -# parser.add_argument('--eset' , dest = 'eset' , default = 42 , type=int , help = 'Number of energy points on the contour') -# parser.add_argument('--eset-p' , dest = 'esetp' , default = 1000 , type=int , help = 'Parameter tuning the distribution on the contour') + Args: + path : string + The path to the .fdf file + + Returns: + fdf_arguments : dict + The read input arguments from the fdf file + magnetic_entities : list + It contains the dictionaries associated with the magnetic entities + pairs : dict + It contains the dictionaries associated with the pair information + """ + + # read fdf file + fdf = fdfSileSiesta(path) + fdf_arguments = dict() + + InputFile = fdf.get("InputFile") + if InputFile is not None: + fdf_arguments["infile"] = InputFile + + OutputFile = fdf.get("OutputFile") + if OutputFile is not None: + fdf_arguments["outfile"] = OutputFile + + ScfXcfOrientation = fdf.get("ScfXcfOrientation") + if ScfXcfOrientation is not None: + fdf_arguments["scf_xcf_orientation"] = np.array(ScfXcfOrientation) + + XCF_Rotation = fdf.get("XCF_Rotation") + if XCF_Rotation is not None: + rotations = [] + # iterate over rows + for rot in XCF_Rotation: + # convert row to dictionary + dat = np.array(rot.split()[:9], dtype=float) + o = dat[:3] + vw = dat[3:].reshape(2, 3) + rotations.append(dict(o=o, vw=vw)) + fdf_arguments["ref_xcf_orientations"] = rotations + + Kset = fdf.get("INTEGRAL.Kset") + if Kset is not None: + fdf_arguments["kset"] = Kset + + Kdirs = fdf.get("INTEGRAL.Kdirs") + if Kdirs is not None: + fdf_arguments["kdirs"] = Kdirs + + # This is permitted because it means automatic Ebot definition + fdf_arguments["ebot"] = fdf.get("INTEGRAL.Ebot") + + Eset = fdf.get("INTEGRAL.Eset") + if Eset is not None: + fdf_arguments["eset"] = Eset + + Esetp = fdf.get("INTEGRAL.Esetp") + if Esetp is not None: + fdf_arguments["esetp"] = Esetp + + ParallelSolver = fdf.get("GREEN.ParallelSolver") + if ParallelSolver is not None: + fdf_arguments["parallel_solver_for_Gk"] = ParallelSolver + + PadawanMode = fdf.get("PadawanMode") + if PadawanMode is not None: + fdf_arguments["padawan_mode"] = PadawanMode + + Pairs = fdf.get("Pairs") + if Pairs is not None: + pairs = [] + # iterate over rows + for fdf_pair in Pairs: + # convert data + dat = np.array(fdf_pair.split()[:5], dtype=int) + # create pair dictionary + my_pair = dict(ai=dat[0], aj=dat[1], Ruc=np.array(dat[2:])) + pairs.append(my_pair) + + MagneticEntities = fdf.get("MagneticEntities") + if MagneticEntities is not None: + magnetic_entities = [] + for mag_ent in MagneticEntities: + row = mag_ent.split() + dat = [] + for string in row: + if string.find("#") != -1: + break + dat.append(string) + if dat[0] in {"Cluster", "cluster"}: + magnetic_entities.append(dict(atom=[int(_) for _ in dat[1:]])) + continue + elif dat[0] in {"AtomShell", "Atomshell", "atomShell", "atomshell"}: + magnetic_entities.append( + dict(atom=int(dat[1]), l=[int(_) for _ in dat[2:]]) + ) + continue + elif dat[0] in {"AtomOrbital", "Atomorbital", "tomOrbital", "atomorbital"}: + magnetic_entities.append( + dict(atom=int(dat[1]), orb=[int(_) for _ in dat[2:]]) + ) + continue + elif dat[0] in {"Orbitals", "orbitals"}: + magnetic_entities.append(dict(orb=[int(_) for _ in dat[1:]])) + continue + else: + raise Exception("Unrecognizable magnetic entity in .fdf!") + + return fdf_arguments, magnetic_entities, pairs
+ + + +
+[docs] +def process_input_args( + default_arguments, + fdf_arguments, + command_line_arguments, + accepted_inputs=ACCEPTED_INPUTS, +): + """It returns the final simulation parameters based on the inputs. + + The merging is done in the order of priority: + 1. command line arguments + 2. fdf arguments + 3. default arguments + + Args: + default_arguments : dict + Default arguments from grogupy + fdf_arguments : dict + Arguments read from the fdf input file + command_line_arguments : dict + Arguments from the command line + + Returns: + dict + The final simulation parameters + """ + + # iterate over fdf_arguments and update default arguments + for key, value in fdf_arguments.values(): + if value is not None and key in accepted_inputs: + default_arguments[key] = value + + # iterate over command_line_arguments and update default arguments + for key, value in command_line_arguments.values(): + if value is not None and key in accepted_inputs: + default_arguments[key] = value + + return default_arguments
-# cmd_line_args = parser.parse_args()
-[docs] +[docs] def save_pickle(outfile, data): """Saves the data in the outfile with pickle. @@ -168,7 +332,7 @@
-[docs] +[docs] def load_pickle(infile): """Loads the data from the infile with pickle. @@ -189,8 +353,69 @@ + + + + diff --git a/docs/source/_build/html/_modules/grogupy/magnetism.html b/docs/source/_build/html/_modules/grogupy/magnetism.html index c2ce206..0038c4c 100644 --- a/docs/source/_build/html/_modules/grogupy/magnetism.html +++ b/docs/source/_build/html/_modules/grogupy/magnetism.html @@ -112,11 +112,14 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +"""Docstring in magnetism. +""" + import numpy as np
-[docs] +[docs] def blow_up_orbindx(orb_indices): """Function to blow up orbital indices to make SPIN BOX indices. @@ -136,7 +139,7 @@
-[docs] +[docs] def spin_tracer(M): """Spin tracer utility. @@ -173,7 +176,7 @@
-[docs] +[docs] def parse_magnetic_entity(dh, atom=None, l=None, **kwargs): """Function to define orbital indexes of a given magnetic entity. @@ -215,7 +218,7 @@
-[docs] +[docs] def calculate_anisotropy_tensor(mag_ent): """Calculates the renormalized anisotropy tensor from the energies. @@ -248,7 +251,7 @@
-[docs] +[docs] def calculate_exchange_tensor(pair): """Calculates the exchange tensor from the energies. diff --git a/docs/source/_build/html/_modules/grogupy/utilities.html b/docs/source/_build/html/_modules/grogupy/utilities.html index 54e615b..50243b0 100644 --- a/docs/source/_build/html/_modules/grogupy/utilities.html +++ b/docs/source/_build/html/_modules/grogupy/utilities.html @@ -112,6 +112,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +"""Docstring in utilities. +""" + import numpy as np from scipy.special import roots_legendre from sisl.io.siesta import eigSileSiesta @@ -124,7 +127,7 @@
-[docs] +[docs] def commutator(a, b): """Shorthand for commutator. @@ -147,7 +150,7 @@ # define some useful functions
-[docs] +[docs] def hsk(H, ss, sc_off, k=(0, 0, 0)): """Speed up Hk and Sk generation. @@ -186,7 +189,7 @@
-[docs] +[docs] def make_kset(dirs="xyz", NUMK=20): """Simple k-grid generator to sample the Brillouin zone. @@ -227,7 +230,7 @@
-[docs] +[docs] def make_contour(emin=-20, emax=0.0, enum=42, p=150): """A more sophisticated contour generator. @@ -276,7 +279,7 @@
-[docs] +[docs] def tau_u(u): """Pauli matrix in direction u. @@ -300,7 +303,7 @@ #
-[docs] +[docs] def crossM(u): """Definition for the cross-product matrix. @@ -319,7 +322,7 @@
-[docs] +[docs] def RotM(theta, u, eps=1e-10): """Definition of rotation matrix with angle theta around direction u. @@ -352,7 +355,7 @@
-[docs] +[docs] def RotMa2b(a, b, eps=1e-10): """Definition of rotation matrix rotating unit vector a to unit vector b. @@ -382,7 +385,7 @@
-[docs] +[docs] def read_siesta_emin(eigfile): """It reads the lowest energy level from the siesta run. @@ -405,7 +408,7 @@
-[docs] +[docs] def int_de_ke(traced, we): """It numerically integrates the traced matrix. diff --git a/docs/source/_build/html/_sources/implementation/grogupy.core.rst.txt b/docs/source/_build/html/_sources/implementation/grogupy.core.rst.txt deleted file mode 100644 index 0634729..0000000 --- a/docs/source/_build/html/_sources/implementation/grogupy.core.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.core module -=================== - -.. automodule:: grogupy.core - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/_build/html/_sources/implementation/grogupy.grogu.rst.txt b/docs/source/_build/html/_sources/implementation/grogupy.grogu.rst.txt deleted file mode 100644 index c51783a..0000000 --- a/docs/source/_build/html/_sources/implementation/grogupy.grogu.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.grogu module -==================== - -.. automodule:: grogupy.grogu - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/_build/html/_sources/implementation/grogupy.io.rst.txt b/docs/source/_build/html/_sources/implementation/grogupy.io.rst.txt deleted file mode 100644 index b0f4f60..0000000 --- a/docs/source/_build/html/_sources/implementation/grogupy.io.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.io module -================= - -.. automodule:: grogupy.io - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/_build/html/_sources/implementation/grogupy.magnetism.rst.txt b/docs/source/_build/html/_sources/implementation/grogupy.magnetism.rst.txt deleted file mode 100644 index a510e36..0000000 --- a/docs/source/_build/html/_sources/implementation/grogupy.magnetism.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.magnetism module -======================== - -.. automodule:: grogupy.magnetism - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/_build/html/_sources/implementation/grogupy.rst.txt b/docs/source/_build/html/_sources/implementation/grogupy.rst.txt index 211bd28..18af50d 100644 --- a/docs/source/_build/html/_sources/implementation/grogupy.rst.txt +++ b/docs/source/_build/html/_sources/implementation/grogupy.rst.txt @@ -4,14 +4,45 @@ grogupy package Submodules ---------- -.. toctree:: - :maxdepth: 4 - - grogupy.core - grogupy.grogu - grogupy.io - grogupy.magnetism - grogupy.utilities +grogupy.core module +------------------- + +.. automodule:: grogupy.core + :members: + :undoc-members: + :show-inheritance: + +grogupy.grogu module +-------------------- + +.. automodule:: grogupy.grogu + :members: + :undoc-members: + :show-inheritance: + +grogupy.io module +----------------- + +.. automodule:: grogupy.io + :members: + :undoc-members: + :show-inheritance: + +grogupy.magnetism module +------------------------ + +.. automodule:: grogupy.magnetism + :members: + :undoc-members: + :show-inheritance: + +grogupy.utilities module +------------------------ + +.. automodule:: grogupy.utilities + :members: + :undoc-members: + :show-inheritance: Module contents --------------- diff --git a/docs/source/_build/html/_sources/implementation/grogupy.utilities.rst.txt b/docs/source/_build/html/_sources/implementation/grogupy.utilities.rst.txt deleted file mode 100644 index d4b00f7..0000000 --- a/docs/source/_build/html/_sources/implementation/grogupy.utilities.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.utilities module -======================== - -.. automodule:: grogupy.utilities - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/_build/html/genindex.html b/docs/source/_build/html/genindex.html index 7e8d1b9..65abc8a 100644 --- a/docs/source/_build/html/genindex.html +++ b/docs/source/_build/html/genindex.html @@ -111,11 +111,11 @@

B

@@ -123,17 +123,17 @@

C

@@ -152,14 +152,14 @@ grogupy.core
  • grogupy.grogu
  • @@ -168,21 +168,21 @@ grogupy.io
  • grogupy.magnetism
  • grogupy.utilities
  • @@ -191,7 +191,7 @@

    H

    @@ -199,7 +199,7 @@

    I

    @@ -207,7 +207,7 @@

    L

    @@ -215,11 +215,11 @@

    M

    @@ -244,7 +244,7 @@

    O

    @@ -252,19 +252,23 @@

    P

    @@ -272,15 +276,17 @@

    R

    @@ -288,15 +294,15 @@

    S

    @@ -304,7 +310,7 @@

    T

    diff --git a/docs/source/_build/html/implementation/environment.html b/docs/source/_build/html/implementation/environment.html index 8be167f..43d6a63 100644 --- a/docs/source/_build/html/implementation/environment.html +++ b/docs/source/_build/html/implementation/environment.html @@ -22,7 +22,7 @@ - + @@ -103,7 +103,7 @@
    diff --git a/docs/source/_build/html/implementation/grogupy.core.html b/docs/source/_build/html/implementation/grogupy.core.html deleted file mode 100644 index eee07d1..0000000 --- a/docs/source/_build/html/implementation/grogupy.core.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - - - - grogupy.core module — grogupy 1.0.0 documentation - - - - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -

    grogupy.core module

    -
    -
    -grogupy.core.build_hh_ss(dh)[source]
    -

    It builds the Hamiltonian and Overlap matrix from the sisl.dh class.

    -

    It restructures the data in the SPIN BOX representation, where NS is -the number of supercells and NO is the number of orbitals.

    -
    -
    Args:
    -
    dhsisl.physics.Hamiltonian

    Hamiltonian read in by sisl

    -
    -
    -
    -
    Returns:
    -
    hh(NS, NO, NO) np.array_like

    Hamiltonian in SPIN BOX representation

    -
    -
    ss(NS, NO, NO) np.array_like

    Overlap matrix in SPIN BOX representation

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.core.calc_Vu(H, Tu)[source]
    -

    Calculates the local perturbation in case of a spin rotation.

    -
    -
    Args:
    -
    H(NO, NO) np.array_like

    Hamiltonian

    -
    -
    Tu(NO, NO) array_like

    Rotation around u

    -
    -
    -
    -
    Returns:
    -
    Vu1(NO, NO) np.array_like

    First order perturbed matrix

    -
    -
    Vu2(NO, NO) np.array_like

    Second order perturbed matrix

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.core.onsite_projection(matrix, idx1, idx2)[source]
    -

    It produces the slices of a matrix for the on site projection.

    -

    The slicing is along the last two axes as these contains the orbital indexing.

    -
    -
    Args:
    -
    matrix(…, :, :) np.array_like

    Some matrix

    -
    -
    idxnp.array_like

    The indexes of the orbitals

    -
    -
    -
    -
    Returns:
    -
    np.array_like

    Reduced matrix based on the projection

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.core.parallel_Gk(HK, SK, eran, eset)[source]
    -

    Calculates the Greens function by inversion.

    -

    It calculates the Greens function on all the energy levels at the same time.

    -
    -
    Args:
    -
    HK(NO, NO), np.array_like

    Hamiltonian at a given k point

    -
    -
    SK(NO, NO), np.array_like

    Overlap Matrix at a given k point

    -
    -
    eran(eset) np.array_like

    Energy sample along the contour

    -
    -
    esetint

    Number of energy samples along the contour

    -
    -
    -
    -
    Returns:
    -
    Gk(eset, NO, NO), np.array_like

    Green’s function at a given k point

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.core.remove_clutter_for_save(pairs, magnetic_entities)[source]
    -

    Removes unimportant data from the dictionaries.

    -

    It is used before saving to throw away data that -is not needed for post processing.

    -
    -
    Args:
    -
    pairsdict

    Contains all the pair information

    -
    -
    magnetic_entitiesdict

    Contains all the magnetic entity information

    -
    -
    -
    -
    Returns:
    -
    pairsdict

    Contains all the reduced pair information

    -
    -
    magnetic_entitiesdict

    Contains all the reduced magnetic entity information

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.core.sequential_GK(HK, SK, eran, eset)[source]
    -

    Calculates the Greens function by inversion.

    -

    It calculates sequentially over the energy levels.

    -
    -
    Args:
    -
    HK(NO, NO), np.array_like

    Hamiltonian at a given k point

    -
    -
    SK(NO, NO), np.array_like

    Overlap Matrix at a given k point

    -
    -
    eran(eset) np.array_like

    Energy sample along the contour

    -
    -
    esetint

    Number of energy samples along the contour

    -
    -
    -
    -
    Returns:
    -
    Gk(eset, NO, NO), np.array_like

    Green’s function at a given k point

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.core.setup_pairs_and_magnetic_entities(magnetic_entities, pairs, dh, simulation_parameters)[source]
    -

    It creates the complete structure of the dictionaries and fills some basic data.

    -

    It creates orbital indexes, spin box indexes, coordinates and tags for magnetic entities. -Furthermore it creates the structures for the energies, the perturbed potentials and -the Greens function calculation. It dose the same for the pairs.

    -
    -
    Args:
    -
    pairsdict

    Contains the initial pair information

    -
    -
    magnetic_entitiesdict

    Contains the initial magnetic entity information

    -
    -
    dhsisl.physics.Hamiltonian

    Hamiltonian read in by sisl

    -
    -
    simulation_parametersdict

    A set of parameters from the simulation

    -
    -
    -
    -
    Returns:
    -
    pairsdict

    Contains the initial information and the complete structure

    -
    -
    magnetic_entitiesdict

    Contains the initial information and the complete structure

    -
    -
    -
    -
    -
    - -
    - - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/docs/source/_build/html/implementation/grogupy.grogu.html b/docs/source/_build/html/implementation/grogupy.grogu.html deleted file mode 100644 index 4b837a4..0000000 --- a/docs/source/_build/html/implementation/grogupy.grogu.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - grogupy.grogu module — grogupy 1.0.0 documentation - - - - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -

    grogupy.grogu module

    -
    -
    -grogupy.grogu.main()[source]
    -
    - -
    - - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/docs/source/_build/html/implementation/grogupy.html b/docs/source/_build/html/implementation/grogupy.html index 0e3f671..ea0f6f4 100644 --- a/docs/source/_build/html/implementation/grogupy.html +++ b/docs/source/_build/html/implementation/grogupy.html @@ -21,7 +21,7 @@ - + @@ -58,12 +58,52 @@
    • src
    • grogupy package
        -
      • Submodules
          -
        • grogupy.core module
        • -
        • grogupy.grogu module
        • -
        • grogupy.io module
        • -
        • grogupy.magnetism module
        • -
        • grogupy.utilities module
        • +
        • Submodules
        • +
        • grogupy.core module +
        • +
        • grogupy.grogu module +
        • +
        • grogupy.io module +
        • +
        • grogupy.magnetism module +
        • +
        • grogupy.utilities module
        • Module contents
        • @@ -110,57 +150,679 @@

          grogupy package

          Submodules

          - +
          +
          +

          grogupy.core module

          +

          Docstring in core.

          +
          +
          +grogupy.core.build_hh_ss(dh)[source]
          +

          It builds the Hamiltonian and Overlap matrix from the sisl.dh class.

          +

          It restructures the data in the SPIN BOX representation, where NS is +the number of supercells and NO is the number of orbitals.

          +
          +
          Args:
          +
          dhsisl.physics.Hamiltonian

          Hamiltonian read in by sisl

          +
          +
          +
          +
          Returns:
          +
          hh(NS, NO, NO) np.array_like

          Hamiltonian in SPIN BOX representation

          +
          +
          ss(NS, NO, NO) np.array_like

          Overlap matrix in SPIN BOX representation

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.core.calc_Vu(H, Tu)[source]
          +

          Calculates the local perturbation in case of a spin rotation.

          +
          +
          Args:
          +
          H(NO, NO) np.array_like

          Hamiltonian

          +
          +
          Tu(NO, NO) array_like

          Rotation around u

          +
          +
          +
          +
          Returns:
          +
          Vu1(NO, NO) np.array_like

          First order perturbed matrix

          +
          +
          Vu2(NO, NO) np.array_like

          Second order perturbed matrix

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.core.onsite_projection(matrix, idx1, idx2)[source]
          +

          It produces the slices of a matrix for the on site projection.

          +

          The slicing is along the last two axes as these contains the orbital indexing.

          +
          +
          Args:
          +
          matrix(…, :, :) np.array_like

          Some matrix

          +
          +
          idxnp.array_like

          The indexes of the orbitals

          +
          +
          +
          +
          Returns:
          +
          np.array_like

          Reduced matrix based on the projection

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.core.parallel_Gk(HK, SK, eran, eset)[source]
          +

          Calculates the Greens function by inversion.

          +

          It calculates the Greens function on all the energy levels at the same time.

          +
          +
          Args:
          +
          HK(NO, NO), np.array_like

          Hamiltonian at a given k point

          +
          +
          SK(NO, NO), np.array_like

          Overlap Matrix at a given k point

          +
          +
          eran(eset) np.array_like

          Energy sample along the contour

          +
          +
          esetint

          Number of energy samples along the contour

          +
          +
          +
          +
          Returns:
          +
          Gk(eset, NO, NO), np.array_like

          Green’s function at a given k point

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.core.remove_clutter_for_save(pairs, magnetic_entities)[source]
          +

          Removes unimportant data from the dictionaries.

          +

          It is used before saving to throw away data that +is not needed for post processing.

          +
          +
          Args:
          +
          pairsdict

          Contains all the pair information

          +
          +
          magnetic_entitiesdict

          Contains all the magnetic entity information

          +
          +
          +
          +
          Returns:
          +
          pairsdict

          Contains all the reduced pair information

          +
          +
          magnetic_entitiesdict

          Contains all the reduced magnetic entity information

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.core.sequential_GK(HK, SK, eran, eset)[source]
          +

          Calculates the Greens function by inversion.

          +

          It calculates sequentially over the energy levels.

          +
          +
          Args:
          +
          HK(NO, NO), np.array_like

          Hamiltonian at a given k point

          +
          +
          SK(NO, NO), np.array_like

          Overlap Matrix at a given k point

          +
          +
          eran(eset) np.array_like

          Energy sample along the contour

          +
          +
          esetint

          Number of energy samples along the contour

          +
          +
          +
          +
          Returns:
          +
          Gk(eset, NO, NO), np.array_like

          Green’s function at a given k point

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.core.setup_pairs_and_magnetic_entities(magnetic_entities, pairs, dh, simulation_parameters)[source]
          +

          It creates the complete structure of the dictionaries and fills some basic data.

          +

          It creates orbital indexes, spin box indexes, coordinates and tags for magnetic entities. +Furthermore it creates the structures for the energies, the perturbed potentials and +the Greens function calculation. It dose the same for the pairs.

          +
          +
          Args:
          +
          pairsdict

          Contains the initial pair information

          +
          +
          magnetic_entitiesdict

          Contains the initial magnetic entity information

          +
          +
          dhsisl.physics.Hamiltonian

          Hamiltonian read in by sisl

          +
          +
          simulation_parametersdict

          A set of parameters from the simulation

          +
          +
          +
          +
          Returns:
          +
          pairsdict

          Contains the initial information and the complete structure

          +
          +
          magnetic_entitiesdict

          Contains the initial information and the complete structure

          +
          +
          +
          +
          +
          + +
          +
          +

          grogupy.grogu module

          +

          Docstring in grogupy.

          +
          +
          +grogupy.grogu.main(simulation_parameters, magnetic_entities, pairs)[source]
          +
          + +
          +
          +grogupy.grogu.parse_command_line()[source]
          +

          This function can read input from the command line.

          +
          + +
          +
          +

          grogupy.io module

          +

          Docstring in io.

          +
          +
          +grogupy.io.load_pickle(infile)[source]
          +

          Loads the data from the infile with pickle.

          +
          +
          Args:
          +
          infilestr

          Path to infile

          +
          +
          +
          +
          Returns:
          +
          datadict

          A dictionary of data

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.io.print_atoms_and_pairs(magnetic_entities, pairs)[source]
          +

          It prints the pair and magnetic entity information for the grogu out.

          +
          +
          Args:
          +
          magnetic_entitiesdict

          It contains the data on the magnetic entities

          +
          +
          pairsdict

          It contains the data on the pairs

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.io.print_job_description(simulation_parameters)[source]
          +

          It prints the parameters and the description of the job.

          +
          +
          Args:
          +
          simulation_parametersdict

          It contains the simulations parameters

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.io.print_parameters(simulation_parameters)[source]
          +

          It prints the simulation parameters for the grogu out.

          +
          +
          Args:
          +
          simulation_parametersdict

          It contains the simulations parameters

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.io.print_runtime_information(times)[source]
          +

          It prints the runtime information for the grogu out.

          +
          +
          Args:
          +
          timesdict

          It contains the runtime data

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.io.process_input_args(default_arguments, fdf_arguments, command_line_arguments, accepted_inputs=['infile', 'outfile', 'scf_xcf_orientation', 'ref_xcf_orientations', 'kset', 'kdirs', 'ebot', 'eset', 'esetp', 'parallel_solver_for_Gk', 'padawan_mode'])[source]
          +

          It returns the final simulation parameters based on the inputs.

          +

          The merging is done in the order of priority: +1. command line arguments +2. fdf arguments +3. default arguments

          +
          +
          Args:
          +
          default_argumentsdict

          Default arguments from grogupy

          +
          +
          fdf_argumentsdict

          Arguments read from the fdf input file

          +
          +
          command_line_argumentsdict

          Arguments from the command line

          +
          +
          +
          +
          Returns:
          +
          dict

          The final simulation parameters

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.io.read_fdf(path)[source]
          +

          It reads the simulation parameters, magnetic entities and pairs from the fdf.

          +
          +
          Args:
          +
          pathstring

          The path to the .fdf file

          +
          +
          +
          +
          Returns:
          +
          fdf_argumentsdict

          The read input arguments from the fdf file

          +
          +
          magnetic_entitieslist

          It contains the dictionaries associated with the magnetic entities

          +
          +
          pairsdict

          It contains the dictionaries associated with the pair information

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.io.save_pickle(outfile, data)[source]
          +

          Saves the data in the outfile with pickle.

          +
          +
          Args:
          +
          outfilestr

          Path to outfile

          +
          +
          datadict

          Contains the data

          +
          +
          +
          +
          +
          + +
          +
          +

          grogupy.magnetism module

          +

          Docstring in magnetism.

          +
          +
          +grogupy.magnetism.blow_up_orbindx(orb_indices)[source]
          +

          Function to blow up orbital indices to make SPIN BOX indices.

          +
          +
          Args:
          +
          orb_indicesnp.array_like

          These are the indices in ORBITAL BOX

          +
          +
          +
          +
          Returns:
          +
          orb_indicesnp.array_like

          These are the indices in SPIN BOX

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.magnetism.calculate_anisotropy_tensor(mag_ent)[source]
          +

          Calculates the renormalized anisotropy tensor from the energies.

          +

          It uses the grogu convention for output.

          +
          +
          Args:
          +
          mag_entdict

          An element from the magnetic entities

          +
          +
          +
          +
          Returns:
          +
          Knp.array_like

          elements of the anisotropy tensor

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.magnetism.calculate_exchange_tensor(pair)[source]
          +

          Calculates the exchange tensor from the energies.

          +

          It produces the isotropic exchange, the relevant elements +from the Dzyaloshinskii-Morilla (Dm) tensor, the symmetric-anisotropy +and the complete exchange tensor.

          +
          +
          Args:
          +
          pairdict

          An element from the pairs

          +
          +
          +
          +
          Returns:
          +
          J_isofloat

          Isotropic exchange (Tr[J] / 3)

          +
          +
          J_Snp.array_like

          Symmetric-anisotropy (J_S = J - J_iso * I ––> Jxx, Jyy, Jxy, Jxz, Jyz)

          +
          +
          Dnp.array_like

          DM elements (Dx, Dy, Dz)

          +
          +
          Jnp.array_like

          Complete exchange tensor flattened (Jxx, Jxy, Jxz, Jyx, Jyy, Jyz, Jzx, Jzy, Jzz)

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.magnetism.parse_magnetic_entity(dh, atom=None, l=None, **kwargs)[source]
          +

          Function to define orbital indexes of a given magnetic entity.

          +
          +
          Args:
          +
          dhsisl.physics.Hamiltonian

          Hamiltonian from sisl

          +
          +
          atominteger or list of integers, optional

          Defining atom (or atoms) in the unit cell forming the magnetic entity. Defaults to None

          +
          +
          linteger, optional

          Defining the angular momentum channel. Defaults to None

          +
          +
          +
          +
          Returns:
          +
          list

          The orbital indexes of the given magnetic entity

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.magnetism.spin_tracer(M)[source]
          +

          Spin tracer utility.

          +

          This takes an operator with the orbital-spin sequence: +orbital 1 up, +orbital 1 down, +orbital 2 up, +orbital 2 down, +that is in the SPIN-BOX representation, +and extracts orbital dependent Pauli traces.

          +
          +
          Args:
          +
          Mnp.array_like

          Traceable matrix

          +
          +
          +
          +
          Returns:
          +
          dict

          It contains the traced matrix with “x”, “y”, “z” and “c”

          +
          +
          +
          +
          +
          + +
          +
          +

          grogupy.utilities module

          +

          Docstring in utilities.

          +
          +
          +grogupy.utilities.RotM(theta, u, eps=1e-10)[source]
          +

          Definition of rotation matrix with angle theta around direction u.

          +
          +
          Args:
          +
          thetafloat

          The angle of rotation

          +
          +
          unp.array_like

          The rotation axis

          +
          +
          epsfloat, optional

          Cutoff for small elements in the resulting matrix. Defaults to 1e-10

          +
          +
          +
          +
          Returns:
          +
          np.array_like

          The rotation matrix

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.utilities.RotMa2b(a, b, eps=1e-10)[source]
          +

          Definition of rotation matrix rotating unit vector a to unit vector b.

          +

          Function returns array R such that R @ a = b holds.

          +
          +
          Args:
          +
          anp.array_like

          First vector

          +
          +
          bnp.array_like

          Second vector

          +
          +
          epsfloat, optional

          Cutoff for small elements in the resulting matrix. Defaults to 1e-10

          +
          +
          +
          +
          Returns:
          +
          np.array_like

          The rotation matrix with the above property

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.utilities.commutator(a, b)[source]
          +

          Shorthand for commutator.

          +

          Commutator of two matrices in the mathematical sense.

          +
          +
          Args:
          +
          anp.array_like

          The first matrix

          +
          +
          bnp.array_like

          The second matrix

          +
          +
          +
          +
          Returns:
          +
          np.array_like

          The commutator of a and b

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.utilities.crossM(u)[source]
          +

          Definition for the cross-product matrix.

          +

          It acts as a cross product with vector u.

          +
          +
          Args:
          +
          ulist or np.array_like

          The second vector in the cross product

          +
          +
          +
          +
          Returns:
          +
          np.array_like

          The matrix that represents teh cross product with a vector

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.utilities.hsk(H, ss, sc_off, k=(0, 0, 0))[source]
          +

          Speed up Hk and Sk generation.

          +

          Calculates the Hamiltonian and the Overlap matrix at a given k point. It is faster that the sisl version.

          +
          +
          Args:
          +
          Hnp.array_like

          Hamiltonian in spin box form

          +
          +
          ssnp.array_like

          Overlap matrix in spin box form

          +
          +
          sc_offlist

          supercell indexes of the Hamiltonian

          +
          +
          ktuple, optional

          The k point where the matrices are set up. Defaults to (0, 0, 0)

          +
          +
          +
          +
          Returns:
          +
          np.array_like

          Hamiltonian at the given k point

          +
          +
          np.array_like

          Overlap matrix at the given k point

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.utilities.int_de_ke(traced, we)[source]
          +

          It numerically integrates the traced matrix.

          +

          It is a wrapper from numpy.trapz and it contains the +relevant constants to calculate the energy integral from +equation 93 or 96.

          +
          +
          Args:
          +
          tracednp.array_like

          The trace of a matrix or a matrix product

          +
          +
          wefloat

          The weight of a point on the contour

          +
          +
          +
          +
          Returns:
          +
          float

          The energy calculated from the integral formula

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.utilities.make_contour(emin=-20, emax=0.0, enum=42, p=150)[source]
          +

          A more sophisticated contour generator.

          +

          Calculates the parameters for the complex contour integral. It uses the +Legendre-Gauss quadrature method. It returns a class that contains +the information for the contour integral.

          +
          +
          Args:
          +
          eminint, optional

          Energy minimum of the contour. Defaults to -20

          +
          +
          emaxfloat, optional

          Energy maximum of the contour. Defaults to 0.0, so the Fermi level

          +
          +
          enumint, optional

          Number of sample points along the contour. Defaults to 42

          +
          +
          pint, optional

          Shape parameter that describes the distribution of the sample points. Defaults to 150

          +
          +
          +
          +
          Returns:
          +
          ccont

          Contains all the information for the contour integral

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.utilities.make_kset(dirs='xyz', NUMK=20)[source]
          +

          Simple k-grid generator to sample the Brillouin zone.

          +

          Depending on the value of the dirs +argument k sampling in 1,2 or 3 dimensions is generated. +If dirs argument does not contain either of x, y or z +a kset of a single k-pont at the origin is returned. The total number of k points is the NUMK**(dimensions)

          +
          +
          Args:
          +
          dirsstr, optional

          Directions of the k points in the Brillouin zone. They are the three lattice vectors. Defaults to “xyz”

          +
          +
          NUMKint, optional

          The number of k points in a direction. Defaults to 20

          +
          +
          +
          +
          Returns:
          +
          np.array_like

          An array of k points that uniformly sample the Brillouin zone in the given directions

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.utilities.read_siesta_emin(eigfile)[source]
          +

          It reads the lowest energy level from the siesta run.

          +

          It uses the .EIG file from siesta that contains the eigenvalues.

          +
          +
          Args:
          +
          eigfilestr

          The path to the .EIG file

          +
          +
          +
          +
          Returns:
          +
          float

          The energy minimum

          +
          +
          +
          +
          +
          + +
          +
          +grogupy.utilities.tau_u(u)[source]
          +

          Pauli matrix in direction u.

          +

          Returns the vector u in the basis of the Pauli matrices.

          +
          +
          Args:
          +
          ulist or np.array_like

          The direction

          +
          +
          +
          +
          Returns:
          +
          np.array_like

          Arbitrary direction in the base of the Pauli matrices

          +
          +
          +
          +
          +
          +

          Module contents

          +

          Docstring in init.

          @@ -169,7 +831,7 @@

    diff --git a/docs/source/_build/html/implementation/grogupy.io.html b/docs/source/_build/html/implementation/grogupy.io.html deleted file mode 100644 index 3eda28f..0000000 --- a/docs/source/_build/html/implementation/grogupy.io.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - - grogupy.io module — grogupy 1.0.0 documentation - - - - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -

    grogupy.io module

    -
    -
    -grogupy.io.load_pickle(infile)[source]
    -

    Loads the data from the infile with pickle.

    -
    -
    Args:
    -
    infilestr

    Path to infile

    -
    -
    -
    -
    Returns:
    -
    datadict

    A dictionary of data

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.io.print_atoms_and_pairs(magnetic_entities, pairs)[source]
    -

    It prints the pair and magnetic entity information for the grogu out.

    -
    -
    Args:
    -
    magnetic_entitiesdict

    It contains the data on the magnetic entities

    -
    -
    pairsdict

    It contains the data on the pairs

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.io.print_job_description(simulation_parameters)[source]
    -

    It prints the parameters and the description of the job.

    -
    -
    Args:
    -
    simulation_parametersdict

    It contains the simulations parameters

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.io.print_parameters(simulation_parameters)[source]
    -

    It prints the simulation parameters for the grogu out.

    -
    -
    Args:
    -
    simulation_parametersdict

    It contains the simulations parameters

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.io.print_runtime_information(times)[source]
    -

    It prints the runtime information for the grogu out.

    -
    -
    Args:
    -
    timesdict

    It contains the runtime data

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.io.save_pickle(outfile, data)[source]
    -

    Saves the data in the outfile with pickle.

    -
    -
    Args:
    -
    outfilestr

    Path to outfile

    -
    -
    datadict

    Contains the data

    -
    -
    -
    -
    -
    - -
    - - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/docs/source/_build/html/implementation/grogupy.magnetism.html b/docs/source/_build/html/implementation/grogupy.magnetism.html deleted file mode 100644 index ab83b56..0000000 --- a/docs/source/_build/html/implementation/grogupy.magnetism.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - - - grogupy.magnetism module — grogupy 1.0.0 documentation - - - - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -

    grogupy.magnetism module

    -
    -
    -grogupy.magnetism.blow_up_orbindx(orb_indices)[source]
    -

    Function to blow up orbital indices to make SPIN BOX indices.

    -
    -
    Args:
    -
    orb_indicesnp.array_like

    These are the indices in ORBITAL BOX

    -
    -
    -
    -
    Returns:
    -
    orb_indicesnp.array_like

    These are the indices in SPIN BOX

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.magnetism.calculate_anisotropy_tensor(mag_ent)[source]
    -

    Calculates the renormalized anisotropy tensor from the energies.

    -

    It uses the grogu convention for output.

    -
    -
    Args:
    -
    mag_entdict

    An element from the magnetic entities

    -
    -
    -
    -
    Returns:
    -
    Knp.array_like

    elements of the anisotropy tensor

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.magnetism.calculate_exchange_tensor(pair)[source]
    -

    Calculates the exchange tensor from the energies.

    -

    It produces the isotropic exchange, the relevant elements -from the Dzyaloshinskii-Morilla (Dm) tensor, the symmetric-anisotropy -and the complete exchange tensor.

    -
    -
    Args:
    -
    pairdict

    An element from the pairs

    -
    -
    -
    -
    Returns:
    -
    J_isofloat

    Isotropic exchange (Tr[J] / 3)

    -
    -
    J_Snp.array_like

    Symmetric-anisotropy (J_S = J - J_iso * I ––> Jxx, Jyy, Jxy, Jxz, Jyz)

    -
    -
    Dnp.array_like

    DM elements (Dx, Dy, Dz)

    -
    -
    Jnp.array_like

    Complete exchange tensor flattened (Jxx, Jxy, Jxz, Jyx, Jyy, Jyz, Jzx, Jzy, Jzz)

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.magnetism.parse_magnetic_entity(dh, atom=None, l=None, **kwargs)[source]
    -

    Function to define orbital indexes of a given magnetic entity.

    -
    -
    Args:
    -
    dhsisl.physics.Hamiltonian

    Hamiltonian from sisl

    -
    -
    atominteger or list of integers, optional

    Defining atom (or atoms) in the unit cell forming the magnetic entity. Defaults to None

    -
    -
    linteger, optional

    Defining the angular momentum channel. Defaults to None

    -
    -
    -
    -
    Returns:
    -
    list

    The orbital indexes of the given magnetic entity

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.magnetism.spin_tracer(M)[source]
    -

    Spin tracer utility.

    -

    This takes an operator with the orbital-spin sequence: -orbital 1 up, -orbital 1 down, -orbital 2 up, -orbital 2 down, -that is in the SPIN-BOX representation, -and extracts orbital dependent Pauli traces.

    -
    -
    Args:
    -
    Mnp.array_like

    Traceable matrix

    -
    -
    -
    -
    Returns:
    -
    dict

    It contains the traced matrix with “x”, “y”, “z” and “c”

    -
    -
    -
    -
    -
    - -
    - - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/docs/source/_build/html/implementation/grogupy.utilities.html b/docs/source/_build/html/implementation/grogupy.utilities.html deleted file mode 100644 index 3c122e7..0000000 --- a/docs/source/_build/html/implementation/grogupy.utilities.html +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - - - - grogupy.utilities module — grogupy 1.0.0 documentation - - - - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -

    grogupy.utilities module

    -
    -
    -grogupy.utilities.RotM(theta, u, eps=1e-10)[source]
    -

    Definition of rotation matrix with angle theta around direction u.

    -
    -
    Args:
    -
    thetafloat

    The angle of rotation

    -
    -
    unp.array_like

    The rotation axis

    -
    -
    epsfloat, optional

    Cutoff for small elements in the resulting matrix. Defaults to 1e-10

    -
    -
    -
    -
    Returns:
    -
    np.array_like

    The rotation matrix

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.utilities.RotMa2b(a, b, eps=1e-10)[source]
    -

    Definition of rotation matrix rotating unit vector a to unit vector b.

    -

    Function returns array R such that R @ a = b holds.

    -
    -
    Args:
    -
    anp.array_like

    First vector

    -
    -
    bnp.array_like

    Second vector

    -
    -
    epsfloat, optional

    Cutoff for small elements in the resulting matrix. Defaults to 1e-10

    -
    -
    -
    -
    Returns:
    -
    np.array_like

    The rotation matrix with the above property

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.utilities.commutator(a, b)[source]
    -

    Shorthand for commutator.

    -

    Commutator of two matrices in the mathematical sense.

    -
    -
    Args:
    -
    anp.array_like

    The first matrix

    -
    -
    bnp.array_like

    The second matrix

    -
    -
    -
    -
    Returns:
    -
    np.array_like

    The commutator of a and b

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.utilities.crossM(u)[source]
    -

    Definition for the cross-product matrix.

    -

    It acts as a cross product with vector u.

    -
    -
    Args:
    -
    ulist or np.array_like

    The second vector in the cross product

    -
    -
    -
    -
    Returns:
    -
    np.array_like

    The matrix that represents teh cross product with a vector

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.utilities.hsk(H, ss, sc_off, k=(0, 0, 0))[source]
    -

    Speed up Hk and Sk generation.

    -

    Calculates the Hamiltonian and the Overlap matrix at a given k point. It is faster that the sisl version.

    -
    -
    Args:
    -
    Hnp.array_like

    Hamiltonian in spin box form

    -
    -
    ssnp.array_like

    Overlap matrix in spin box form

    -
    -
    sc_offlist

    supercell indexes of the Hamiltonian

    -
    -
    ktuple, optional

    The k point where the matrices are set up. Defaults to (0, 0, 0)

    -
    -
    -
    -
    Returns:
    -
    np.array_like

    Hamiltonian at the given k point

    -
    -
    np.array_like

    Overlap matrix at the given k point

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.utilities.int_de_ke(traced, we)[source]
    -

    It numerically integrates the traced matrix.

    -

    It is a wrapper from numpy.trapz and it contains the -relevant constants to calculate the energy integral from -equation 93 or 96.

    -
    -
    Args:
    -
    tracednp.array_like

    The trace of a matrix or a matrix product

    -
    -
    wefloat

    The weight of a point on the contour

    -
    -
    -
    -
    Returns:
    -
    float

    The energy calculated from the integral formula

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.utilities.make_contour(emin=-20, emax=0.0, enum=42, p=150)[source]
    -

    A more sophisticated contour generator.

    -

    Calculates the parameters for the complex contour integral. It uses the -Legendre-Gauss quadrature method. It returns a class that contains -the information for the contour integral.

    -
    -
    Args:
    -
    eminint, optional

    Energy minimum of the contour. Defaults to -20

    -
    -
    emaxfloat, optional

    Energy maximum of the contour. Defaults to 0.0, so the Fermi level

    -
    -
    enumint, optional

    Number of sample points along the contour. Defaults to 42

    -
    -
    pint, optional

    Shape parameter that describes the distribution of the sample points. Defaults to 150

    -
    -
    -
    -
    Returns:
    -
    ccont

    Contains all the information for the contour integral

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.utilities.make_kset(dirs='xyz', NUMK=20)[source]
    -

    Simple k-grid generator to sample the Brillouin zone.

    -

    Depending on the value of the dirs -argument k sampling in 1,2 or 3 dimensions is generated. -If dirs argument does not contain either of x, y or z -a kset of a single k-pont at the origin is returned. The total number of k points is the NUMK**(dimensions)

    -
    -
    Args:
    -
    dirsstr, optional

    Directions of the k points in the Brillouin zone. They are the three lattice vectors. Defaults to “xyz”

    -
    -
    NUMKint, optional

    The number of k points in a direction. Defaults to 20

    -
    -
    -
    -
    Returns:
    -
    np.array_like

    An array of k points that uniformly sample the Brillouin zone in the given directions

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.utilities.read_siesta_emin(eigfile)[source]
    -

    It reads the lowest energy level from the siesta run.

    -

    It uses the .EIG file from siesta that contains the eigenvalues.

    -
    -
    Args:
    -
    eigfilestr

    The path to the .EIG file

    -
    -
    -
    -
    Returns:
    -
    float

    The energy minimum

    -
    -
    -
    -
    -
    - -
    -
    -grogupy.utilities.tau_u(u)[source]
    -

    Pauli matrix in direction u.

    -

    Returns the vector u in the basis of the Pauli matrices.

    -
    -
    Args:
    -
    ulist or np.array_like

    The direction

    -
    -
    -
    -
    Returns:
    -
    np.array_like

    Arbitrary direction in the base of the Pauli matrices

    -
    -
    -
    -
    -
    - -
    - - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/docs/source/_build/html/implementation/modules.html b/docs/source/_build/html/implementation/modules.html index aae51f2..8b02d4a 100644 --- a/docs/source/_build/html/implementation/modules.html +++ b/docs/source/_build/html/implementation/modules.html @@ -102,51 +102,52 @@
    • grogupy package
        -
      • Submodules
          -
        • grogupy.core module
            -
          • build_hh_ss()
          • -
          • calc_Vu()
          • -
          • onsite_projection()
          • -
          • parallel_Gk()
          • -
          • remove_clutter_for_save()
          • -
          • sequential_GK()
          • -
          • setup_pairs_and_magnetic_entities()
          • +
          • Submodules
          • +
          • grogupy.core module
          • -
          • grogupy.grogu module
              -
            • main()
            • +
            • grogupy.grogu module
            • -
            • grogupy.io module
                -
              • load_pickle()
              • -
              • print_atoms_and_pairs()
              • -
              • print_job_description()
              • -
              • print_parameters()
              • -
              • print_runtime_information()
              • -
              • save_pickle()
              • +
              • grogupy.io module
              • -
              • grogupy.magnetism module -
              • -
              • grogupy.utilities module
                  -
                • RotM()
                • -
                • RotMa2b()
                • -
                • commutator()
                • -
                • crossM()
                • -
                • hsk()
                • -
                • int_de_ke()
                • -
                • make_contour()
                • -
                • make_kset()
                • -
                • read_siesta_emin()
                • -
                • tau_u()
                • +
                • grogupy.magnetism module
                • +
                • grogupy.utilities module
                • Module contents
                • diff --git a/docs/source/_build/html/objects.inv b/docs/source/_build/html/objects.inv index 72c5beeb0a636a80adac23cf04b320e5c9fc7b1c..b095cbbd1c7c44815d357bafd796421e66a88a88 100644 GIT binary patch delta 987 zcmV<110?*93Bm}Fb$_jwOK;ma5XbNO6a<>9+-;9JZc!A)qCj?2?3JLTiOiZJRX)7& zx8I?t2PrFVD&}OHp8rq7d68jT1orAY3-^d^p-pybEjP9Vv@8SRQJn zAvN!M0Ub!oELZaVWOqw{s2mp!Jsznsp7rEp?ZxE7P1+TvW`Cll|GFH6l7?HLy;eUU z05V`b(@Y2u^vfv+qoGr0ptW$;f~HSOQ^U@XgEa8dp($tR+h2Jg>w4NVt_@|fp&e@_ zSYA_4w;cB7bNI}utKsv|F)njF@F_GHdewD)cY@2kVdpAmH(VWrVh!zieG>a!IP{uJ zOPN(&NY{|KTz}jTRnZ1at$Cl(F*DA0O$S)%*^X(4Mc4u55__g&xz4E?j6qoMFoe3z za8Co~@~L^+Pw)dEuNuZqHC;|!&X7YT)PEF5fzlNo7|*#*4YS+{hO?MSZj{xkzfcR( zDE)?Pc&?93w(wTuFfP&|c*&-ko=a*qt6{H)&T=u2Sl>L_L$pB#=t89)R z&JN9$&PQowO#aS}=9JCw^Q!@Rf^1U9PW}XwRyqAPuoIs8*`#3x8vJG%g>LsTy#Ot9 z^mp%m6|V$Wt!Dl4LX2(h8 ?1BurMYw~BbaxD|A04*V(wy9^;R4 z60TnP#zW-QxbZwm80+hPCNn^iD|aRl30oJYOzHyKI-oP*3uuPllW;dDcnc=e-N)DO zbWibJ33$Em@O9BH?KBlcfRzXd{rTSgxak^wB&R&E&Tu(cZ0yk4wL;#_UYW3d6I>tp)N zuog@o!~YL{hgj=3!y7loP(j93aXY;#EqCN`Ru$IaI{{~6rJtA6n0%j>iNNlW delta 1065 zcmV+^1lIe)2#*Pnb$_*&O>f*b5Qgvi6$Ij|oTf(~8x%zl1aRV_SAvolEwdD<@Wb`~ z`wo}-ASG&-n^jNtQZvtt$a#mOR>{`(C)A&wI@wrG(Qk-}hQ2)>Ovm5(wekU#Me8je zYpG~#-u0YzR2X8I6z@a3i;&04GTz|B0c-7m->s+}0e!fRTz|1@!fX7Gy_+M2W`^Qk z$sg2H?j`m_5zZ;ce;w~;DcZ?bife9-p$dPO3TyI8@8)Xy(}F!CkmctcXvX%qCroKf zM1woh3Tjx5T?oVIU8jBin^S-1zncZp}JPA&lki+qLV~Np@R2FPg$s{j$$T24js8WMJK4c zk7Fo#-Q|?WWV~4=vqi<_zZlddRRwMOEic1GfHc{4P|FE4KO&fxM#=t!4Ha6d|0N22 zs}Dr9bpIGoUYaht&S^)!?wPQnvX{v8#A zdQu?cvuOrGJusMtc+k& z3V$y*q)=>&DHQJ&$!&-$y{i|vp>EJZaK!~tWFRN)poIF0OS;H_&-y_r4Hld7$Y2i| zLMsIp*R+uVk9CB$G+A8JM@FbvOK3}%%TRvxQh>q2W3{S_)zuU9@?R8*XjlzNxVzM( zZlqbdgK6n*;=%OO${T<%!Ex@twIkF|3x6NZ@KBj}fGLac#*g1_F$qAxd1dW(VT5>y zU14Vvmm~D0@qrKb#Wz%cO%C1FjSO%?I{%uCo9hT2IYs)~O}xSL&@O^BujK!HG6&e3 z=r!hJ$UB~|(|WNq3C}9&9y)7ERDFnJ`ZaI*;-5deH-uWhxV@n;&K0C>70M~=SRx+K j%j8uU3m=<|@P+@h9Pi2B<8rYu2zMmq8+iT))atuJYp)kk diff --git a/docs/source/_build/html/py-modindex.html b/docs/source/_build/html/py-modindex.html index 4d1b244..1556446 100644 --- a/docs/source/_build/html/py-modindex.html +++ b/docs/source/_build/html/py-modindex.html @@ -113,27 +113,27 @@     - grogupy.core + grogupy.core     - grogupy.grogu + grogupy.grogu     - grogupy.io + grogupy.io     - grogupy.magnetism + grogupy.magnetism     - grogupy.utilities + grogupy.utilities diff --git a/docs/source/_build/html/searchindex.js b/docs/source/_build/html/searchindex.js index 3a44374..536e81b 100644 --- a/docs/source/_build/html/searchindex.js +++ b/docs/source/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"Bibliography": [[0, null]], "Changelog": [[1, null]], "Citing grogupy": [[2, null]], "Command line usage": [[13, "command-line-usage"]], "Contributing to grogupy": [[3, null]], "Environment variables": [[4, null]], "Indices and tables": [[12, "indices-and-tables"]], "Introduction": [[13, null]], "Module contents": [[5, "module-grogupy"]], "Package": [[13, "package"]], "Quickstart": [[14, null]], "Submodules": [[5, "submodules"]], "Tutorials": [[15, null]], "grogupy package": [[5, null]], "grogupy.core module": [[6, null]], "grogupy.grogu module": [[7, null]], "grogupy.io module": [[8, null]], "grogupy.magnetism module": [[9, null]], "grogupy.utilities module": [[10, null]], "grogupy: Script for calculating magnetic interactions": [[12, null]], "installation": [[14, "installation"]], "src": [[11, null]]}, "docnames": ["bibliography", "changelog/index", "cite", "dev/index", "implementation/environment", "implementation/grogupy", "implementation/grogupy.core", "implementation/grogupy.grogu", "implementation/grogupy.io", "implementation/grogupy.magnetism", "implementation/grogupy.utilities", "implementation/modules", "index", "introduction", "quickstart/index", "tutorials/index"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9}, "filenames": ["bibliography.rst", "changelog/index.rst", "cite.rst", "dev/index.rst", "implementation/environment.rst", "implementation/grogupy.rst", "implementation/grogupy.core.rst", "implementation/grogupy.grogu.rst", "implementation/grogupy.io.rst", "implementation/grogupy.magnetism.rst", "implementation/grogupy.utilities.rst", "implementation/modules.rst", "index.rst", "introduction.rst", "quickstart/index.rst", "tutorials/index.rst"], "indexentries": {"blow_up_orbindx() (in module grogupy.magnetism)": [[9, "grogupy.magnetism.blow_up_orbindx", false]], "build_hh_ss() (in module grogupy.core)": [[6, "grogupy.core.build_hh_ss", false]], "calc_vu() (in module grogupy.core)": [[6, "grogupy.core.calc_Vu", false]], "calculate_anisotropy_tensor() (in module grogupy.magnetism)": [[9, "grogupy.magnetism.calculate_anisotropy_tensor", false]], "calculate_exchange_tensor() (in module grogupy.magnetism)": [[9, "grogupy.magnetism.calculate_exchange_tensor", false]], "commutator() (in module grogupy.utilities)": [[10, "grogupy.utilities.commutator", false]], "crossm() (in module grogupy.utilities)": [[10, "grogupy.utilities.crossM", false]], "grogupy": [[5, "module-grogupy", false], [12, "module-grogupy", false]], "grogupy.core": [[6, "module-grogupy.core", false]], "grogupy.grogu": [[7, "module-grogupy.grogu", false]], "grogupy.io": [[8, "module-grogupy.io", false]], "grogupy.magnetism": [[9, "module-grogupy.magnetism", false]], "grogupy.utilities": [[10, "module-grogupy.utilities", false]], "hsk() (in module grogupy.utilities)": [[10, "grogupy.utilities.hsk", false]], "int_de_ke() (in module grogupy.utilities)": [[10, "grogupy.utilities.int_de_ke", false]], "load_pickle() (in module grogupy.io)": [[8, "grogupy.io.load_pickle", false]], "main() (in module grogupy.grogu)": [[7, "grogupy.grogu.main", false]], "make_contour() (in module grogupy.utilities)": [[10, "grogupy.utilities.make_contour", false]], "make_kset() (in module grogupy.utilities)": [[10, "grogupy.utilities.make_kset", false]], "module": [[5, "module-grogupy", false], [6, "module-grogupy.core", false], [7, "module-grogupy.grogu", false], [8, "module-grogupy.io", false], [9, "module-grogupy.magnetism", false], [10, "module-grogupy.utilities", false], [12, "module-grogupy", false]], "onsite_projection() (in module grogupy.core)": [[6, "grogupy.core.onsite_projection", false]], "parallel_gk() (in module grogupy.core)": [[6, "grogupy.core.parallel_Gk", false]], "parse_magnetic_entity() (in module grogupy.magnetism)": [[9, "grogupy.magnetism.parse_magnetic_entity", false]], "print_atoms_and_pairs() (in module grogupy.io)": [[8, "grogupy.io.print_atoms_and_pairs", false]], "print_job_description() (in module grogupy.io)": [[8, "grogupy.io.print_job_description", false]], "print_parameters() (in module grogupy.io)": [[8, "grogupy.io.print_parameters", false]], "print_runtime_information() (in module grogupy.io)": [[8, "grogupy.io.print_runtime_information", false]], "read_siesta_emin() (in module grogupy.utilities)": [[10, "grogupy.utilities.read_siesta_emin", false]], "remove_clutter_for_save() (in module grogupy.core)": [[6, "grogupy.core.remove_clutter_for_save", false]], "rotm() (in module grogupy.utilities)": [[10, "grogupy.utilities.RotM", false]], "rotma2b() (in module grogupy.utilities)": [[10, "grogupy.utilities.RotMa2b", false]], "save_pickle() (in module grogupy.io)": [[8, "grogupy.io.save_pickle", false]], "sequential_gk() (in module grogupy.core)": [[6, "grogupy.core.sequential_GK", false]], "setup_pairs_and_magnetic_entities() (in module grogupy.core)": [[6, "grogupy.core.setup_pairs_and_magnetic_entities", false]], "spin_tracer() (in module grogupy.magnetism)": [[9, "grogupy.magnetism.spin_tracer", false]], "tau_u() (in module grogupy.utilities)": [[10, "grogupy.utilities.tau_u", false]]}, "objects": {"": [[12, 0, 0, "-", "grogupy"]], "grogupy": [[6, 0, 0, "-", "core"], [7, 0, 0, "-", "grogu"], [8, 0, 0, "-", "io"], [9, 0, 0, "-", "magnetism"], [10, 0, 0, "-", "utilities"]], "grogupy.core": [[6, 1, 1, "", "build_hh_ss"], [6, 1, 1, "", "calc_Vu"], [6, 1, 1, "", "onsite_projection"], [6, 1, 1, "", "parallel_Gk"], [6, 1, 1, "", "remove_clutter_for_save"], [6, 1, 1, "", "sequential_GK"], [6, 1, 1, "", "setup_pairs_and_magnetic_entities"]], "grogupy.grogu": [[7, 1, 1, "", "main"]], "grogupy.io": [[8, 1, 1, "", "load_pickle"], [8, 1, 1, "", "print_atoms_and_pairs"], [8, 1, 1, "", "print_job_description"], [8, 1, 1, "", "print_parameters"], [8, 1, 1, "", "print_runtime_information"], [8, 1, 1, "", "save_pickle"]], "grogupy.magnetism": [[9, 1, 1, "", "blow_up_orbindx"], [9, 1, 1, "", "calculate_anisotropy_tensor"], [9, 1, 1, "", "calculate_exchange_tensor"], [9, 1, 1, "", "parse_magnetic_entity"], [9, 1, 1, "", "spin_tracer"]], "grogupy.utilities": [[10, 1, 1, "", "RotM"], [10, 1, 1, "", "RotMa2b"], [10, 1, 1, "", "commutator"], [10, 1, 1, "", "crossM"], [10, 1, 1, "", "hsk"], [10, 1, 1, "", "int_de_ke"], [10, 1, 1, "", "make_contour"], [10, 1, 1, "", "make_kset"], [10, 1, 1, "", "read_siesta_emin"], [10, 1, 1, "", "tau_u"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:function"}, "terms": {"": 6, "0": 10, "1": [9, 10, 13], "10": 10, "150": 10, "1e": 10, "2": [9, 10], "20": 10, "3": [9, 10], "42": 10, "93": 10, "96": 10, "A": [6, 8, 10], "If": 10, "It": [6, 8, 9, 10], "NO": 6, "The": [6, 9, 10, 13], "These": 9, "abov": 10, "act": 10, "all": [6, 10], "along": [6, 10], "an": [9, 10], "angl": 10, "angular": 9, "anisotropi": 9, "ar": [9, 10], "arbitrari": 10, "arg": [6, 8, 9, 10], "argument": 10, "around": [6, 10], "arrai": 10, "array_lik": [6, 9, 10], "atom": 9, "awai": 6, "ax": 6, "axi": 10, "b": 10, "background": 12, "base": [6, 10, 12, 13], "basi": 10, "basic": [6, 12], "befor": 6, "blow": 9, "blow_up_orbindx": [5, 9, 11], "box": [6, 9, 10], "brillouin": 10, "build": 6, "build_hh_ss": [5, 6, 11], "c": 9, "calc_vu": [5, 6, 11], "calcul": [6, 9, 10], "calculate_anisotropy_tensor": [5, 9, 11], "calculate_exchange_tensor": [5, 9, 11], "can": [12, 14], "case": 6, "ccont": 10, "cell": 9, "channel": 9, "class": [6, 10], "come": [1, 2, 3, 4, 13, 14, 15], "commut": [5, 10, 11], "complet": [6, 9], "complex": 10, "constant": 10, "contain": [6, 8, 9, 10], "content": 11, "contour": [6, 10], "convent": 9, "coordin": 6, "core": [5, 11], "creat": 6, "cross": 10, "crossm": [5, 10, 11], "cutoff": 10, "d": 9, "data": [6, 8], "default": [9, 10], "defin": 9, "definit": 10, "depend": [9, 10], "describ": 10, "descript": [8, 12], "detail": 12, "dft": 12, "dh": [6, 9], "dict": [6, 8, 9], "dictionari": [6, 8], "dimens": 10, "dir": 10, "direct": 10, "distribut": 10, "dm": 9, "document": 13, "doe": 10, "dose": 6, "down": 9, "dx": 9, "dy": 9, "dz": 9, "dzyaloshinskii": 9, "eig": 10, "eigenvalu": 10, "eigfil": 10, "either": 10, "element": [9, 10], "emax": 10, "emin": 10, "energi": [6, 9, 10], "entiti": [6, 8, 9], "enum": 10, "ep": 10, "equat": 10, "eran": 6, "eset": 6, "exchang": 9, "extract": 9, "faster": 10, "fermi": 10, "file": 10, "fill": 6, "first": [6, 10], "flatten": 9, "float": [9, 10], "form": [9, 10], "format": 13, "formula": 10, "from": [6, 8, 9, 10, 14], "function": [6, 9, 10], "furthermor": 6, "gauss": 10, "gener": [10, 12], "given": [6, 9, 10], "gk": 6, "go": 13, "green": 6, "grid": 10, "grogu": [5, 8, 9, 11, 12], "grogupi": [11, 14], "groupi": 12, "guid": 12, "h": [6, 10], "hamiltonian": [6, 9, 10], "here": 12, "hh": 6, "hk": [6, 10], "hold": 10, "how": 12, "hsk": [5, 10, 11], "http": 14, "i": [6, 9, 10, 12], "idx": 6, "idx1": 6, "idx2": 6, "implement": 12, "index": [6, 9, 10, 12, 14], "indic": 9, "infil": 8, "inform": [6, 8, 10], "initi": 6, "inspir": 13, "instal": 13, "int": [6, 10], "int_de_k": [5, 10, 11], "integ": 9, "integr": 10, "invers": 6, "io": [5, 11], "isotrop": 9, "j": 9, "j_": 9, "j_iso": 9, "job": 8, "jxx": 9, "jxy": 9, "jxz": 9, "jyi": 9, "jyx": 9, "jyz": 9, "jzx": 9, "jzy": 9, "jzz": 9, "k": [6, 9, 10], "kset": 10, "kwarg": 9, "l": 9, "last": 6, "lattic": 10, "legendr": 10, "level": [6, 10], "list": [9, 10], "load": 8, "load_pickl": [5, 8, 11], "local": 6, "lowest": 10, "m": [9, 14], "mag_ent": 9, "magnet": [5, 6, 8, 11], "magnetic interact": 12, "magnetic_ent": [6, 8], "main": [5, 7, 11], "make": 9, "make_contour": [5, 10, 11], "make_kset": [5, 10, 11], "mathemat": 10, "matlab": 12, "matric": 10, "matrix": [6, 9, 10], "maximum": 10, "method": 10, "minimum": 10, "modul": [11, 12], "momentum": 9, "more": [10, 12], "morilla": 9, "n": 6, "need": 6, "none": 9, "np": [6, 9, 10], "number": [6, 10], "numer": 10, "numk": 10, "numpi": 10, "onsite_project": [5, 6, 11], "oper": 9, "option": [9, 10], "orb_indic": 9, "orbit": [6, 9], "order": 6, "org": 14, "origin": 10, "out": 8, "outfil": 8, "output": 9, "over": 6, "overlap": [6, 10], "p": 10, "packag": 11, "page": 12, "pair": [6, 8, 9], "parallel_gk": [5, 6, 11], "paramet": [6, 8, 10], "parse_magnetic_ent": [5, 9, 11], "path": [8, 10], "pauli": [9, 10], "perturb": 6, "physic": [6, 9, 12], "pickl": 8, "pip": 14, "point": [6, 10], "pont": 10, "post": 6, "potenti": 6, "print": 8, "print_atoms_and_pair": [5, 8, 11], "print_job_descript": [5, 8, 11], "print_paramet": [5, 8, 11], "print_runtime_inform": [5, 8, 11], "process": 6, "produc": [6, 9], "product": 10, "project": 6, "properti": 10, "pypi": 14, "python": 12, "python3": 14, "quadratur": 10, "quick": 12, "quickstart": 12, "r": 10, "read": [6, 10], "read_siesta_emin": [5, 10, 11], "reduc": 6, "relev": [9, 10], "remov": 6, "remove_clutter_for_sav": [5, 6, 11], "renorm": 9, "repres": 10, "represent": [6, 9], "restructur": 6, "result": 10, "return": [6, 8, 9, 10], "rotat": [6, 10], "rotm": [5, 10, 11], "rotma2b": [5, 10, 11], "run": 10, "runtim": 8, "same": 6, "sampl": [6, 10], "save": [6, 8], "save_pickl": [5, 8, 11], "sc_off": 10, "search": 12, "second": [6, 10], "seen": 12, "sens": 10, "sequenc": 9, "sequenti": 6, "sequential_gk": [5, 6, 11], "set": [6, 10], "setup_pairs_and_magnetic_ent": [5, 6, 11], "shape": 10, "shorthand": 10, "siesta": [10, 12], "simpl": [10, 14], "simul": [6, 8], "simulation_paramet": [6, 8], "singl": 10, "sisl": [6, 9, 10, 13], "site": 6, "sk": [6, 10], "slice": 6, "small": 10, "so": 10, "some": 6, "soon": [1, 2, 3, 4, 13, 14, 15], "sophist": 10, "sourc": [6, 7, 8, 9, 10], "speed": 10, "spin": [6, 9, 10], "spin_trac": [5, 9, 11], "src": 12, "ss": [6, 10], "start": 12, "str": [8, 10], "structur": 6, "submodul": 11, "supercel": [6, 10], "symmetr": 9, "tag": 6, "take": 9, "tau_u": [5, 10, 11], "teh": 10, "tensor": 9, "test": 14, "thei": 10, "theoret": 12, "theta": 10, "thi": 9, "three": 10, "throw": 6, "time": [6, 8], "total": 10, "tr": 9, "trace": [9, 10], "traceabl": 9, "tracer": 9, "trapz": 10, "tu": 6, "tupl": 10, "tutori": 12, "two": [6, 10], "u": [6, 10], "uniformli": 10, "unimport": 6, "unit": [9, 10], "up": [9, 10], "url": 14, "us": [6, 9, 10, 12], "util": [5, 9, 11], "valu": 10, "vector": 10, "version": 10, "via": 14, "vu1": 6, "vu2": 6, "wa": 13, "we": 10, "weight": 10, "where": [6, 10], "wrapper": 10, "x": [9, 10], "xyz": 10, "y": [9, 10], "z": [9, 10], "zone": 10}, "titles": ["Bibliography", "Changelog", "Citing grogupy", "Contributing to grogupy", "Environment variables", "grogupy package", "grogupy.core module", "grogupy.grogu module", "grogupy.io module", "grogupy.magnetism module", "grogupy.utilities module", "src", "grogupy: Script for calculating magnetic interactions", "Introduction", "Quickstart", "Tutorials"], "titleterms": {"bibliographi": 0, "calcul": 12, "changelog": 1, "cite": 2, "command": 13, "content": 5, "contribut": 3, "core": 6, "environ": 4, "grogu": 7, "grogupi": [2, 3, 5, 6, 7, 8, 9, 10, 12], "indic": 12, "instal": 14, "interact": 12, "introduct": 13, "io": 8, "line": 13, "magnet": [9, 12], "modul": [5, 6, 7, 8, 9, 10], "packag": [5, 13], "quickstart": 14, "script": 12, "src": 11, "submodul": 5, "tabl": 12, "tutori": 15, "usag": 13, "util": 10, "variabl": 4}}) \ No newline at end of file +Search.setIndex({"alltitles": {"Bibliography": [[0, null]], "Changelog": [[1, null]], "Citing grogupy": [[2, null]], "Command line usage": [[8, "command-line-usage"]], "Contributing to grogupy": [[3, null]], "Environment variables": [[4, null]], "Indices and tables": [[7, "indices-and-tables"]], "Introduction": [[8, null]], "Module contents": [[5, "module-grogupy"]], "Package": [[8, "package"]], "Quickstart": [[9, null]], "Submodules": [[5, "submodules"]], "Tutorials": [[10, null]], "grogupy package": [[5, null]], "grogupy.core module": [[5, "module-grogupy.core"]], "grogupy.grogu module": [[5, "module-grogupy.grogu"]], "grogupy.io module": [[5, "module-grogupy.io"]], "grogupy.magnetism module": [[5, "module-grogupy.magnetism"]], "grogupy.utilities module": [[5, "module-grogupy.utilities"]], "grogupy: Script for calculating magnetic interactions": [[7, null]], "installation": [[9, "installation"]], "src": [[6, null]]}, "docnames": ["bibliography", "changelog/index", "cite", "dev/index", "implementation/environment", "implementation/grogupy", "implementation/modules", "index", "introduction", "quickstart/index", "tutorials/index"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9}, "filenames": ["bibliography.rst", "changelog/index.rst", "cite.rst", "dev/index.rst", "implementation/environment.rst", "implementation/grogupy.rst", "implementation/modules.rst", "index.rst", "introduction.rst", "quickstart/index.rst", "tutorials/index.rst"], "indexentries": {"blow_up_orbindx() (in module grogupy.magnetism)": [[5, "grogupy.magnetism.blow_up_orbindx", false]], "build_hh_ss() (in module grogupy.core)": [[5, "grogupy.core.build_hh_ss", false]], "calc_vu() (in module grogupy.core)": [[5, "grogupy.core.calc_Vu", false]], "calculate_anisotropy_tensor() (in module grogupy.magnetism)": [[5, "grogupy.magnetism.calculate_anisotropy_tensor", false]], "calculate_exchange_tensor() (in module grogupy.magnetism)": [[5, "grogupy.magnetism.calculate_exchange_tensor", false]], "commutator() (in module grogupy.utilities)": [[5, "grogupy.utilities.commutator", false]], "crossm() (in module grogupy.utilities)": [[5, "grogupy.utilities.crossM", false]], "grogupy": [[5, "module-grogupy", false], [7, "module-grogupy", false]], "grogupy.core": [[5, "module-grogupy.core", false]], "grogupy.grogu": [[5, "module-grogupy.grogu", false]], "grogupy.io": [[5, "module-grogupy.io", false]], "grogupy.magnetism": [[5, "module-grogupy.magnetism", false]], "grogupy.utilities": [[5, "module-grogupy.utilities", false]], "hsk() (in module grogupy.utilities)": [[5, "grogupy.utilities.hsk", false]], "int_de_ke() (in module grogupy.utilities)": [[5, "grogupy.utilities.int_de_ke", false]], "load_pickle() (in module grogupy.io)": [[5, "grogupy.io.load_pickle", false]], "main() (in module grogupy.grogu)": [[5, "grogupy.grogu.main", false]], "make_contour() (in module grogupy.utilities)": [[5, "grogupy.utilities.make_contour", false]], "make_kset() (in module grogupy.utilities)": [[5, "grogupy.utilities.make_kset", false]], "module": [[5, "module-grogupy", false], [5, "module-grogupy.core", false], [5, "module-grogupy.grogu", false], [5, "module-grogupy.io", false], [5, "module-grogupy.magnetism", false], [5, "module-grogupy.utilities", false], [7, "module-grogupy", false]], "onsite_projection() (in module grogupy.core)": [[5, "grogupy.core.onsite_projection", false]], "parallel_gk() (in module grogupy.core)": [[5, "grogupy.core.parallel_Gk", false]], "parse_command_line() (in module grogupy.grogu)": [[5, "grogupy.grogu.parse_command_line", false]], "parse_magnetic_entity() (in module grogupy.magnetism)": [[5, "grogupy.magnetism.parse_magnetic_entity", false]], "print_atoms_and_pairs() (in module grogupy.io)": [[5, "grogupy.io.print_atoms_and_pairs", false]], "print_job_description() (in module grogupy.io)": [[5, "grogupy.io.print_job_description", false]], "print_parameters() (in module grogupy.io)": [[5, "grogupy.io.print_parameters", false]], "print_runtime_information() (in module grogupy.io)": [[5, "grogupy.io.print_runtime_information", false]], "process_input_args() (in module grogupy.io)": [[5, "grogupy.io.process_input_args", false]], "read_fdf() (in module grogupy.io)": [[5, "grogupy.io.read_fdf", false]], "read_siesta_emin() (in module grogupy.utilities)": [[5, "grogupy.utilities.read_siesta_emin", false]], "remove_clutter_for_save() (in module grogupy.core)": [[5, "grogupy.core.remove_clutter_for_save", false]], "rotm() (in module grogupy.utilities)": [[5, "grogupy.utilities.RotM", false]], "rotma2b() (in module grogupy.utilities)": [[5, "grogupy.utilities.RotMa2b", false]], "save_pickle() (in module grogupy.io)": [[5, "grogupy.io.save_pickle", false]], "sequential_gk() (in module grogupy.core)": [[5, "grogupy.core.sequential_GK", false]], "setup_pairs_and_magnetic_entities() (in module grogupy.core)": [[5, "grogupy.core.setup_pairs_and_magnetic_entities", false]], "spin_tracer() (in module grogupy.magnetism)": [[5, "grogupy.magnetism.spin_tracer", false]], "tau_u() (in module grogupy.utilities)": [[5, "grogupy.utilities.tau_u", false]]}, "objects": {"": [[7, 0, 0, "-", "grogupy"]], "grogupy": [[5, 0, 0, "-", "core"], [5, 0, 0, "-", "grogu"], [5, 0, 0, "-", "io"], [5, 0, 0, "-", "magnetism"], [5, 0, 0, "-", "utilities"]], "grogupy.core": [[5, 1, 1, "", "build_hh_ss"], [5, 1, 1, "", "calc_Vu"], [5, 1, 1, "", "onsite_projection"], [5, 1, 1, "", "parallel_Gk"], [5, 1, 1, "", "remove_clutter_for_save"], [5, 1, 1, "", "sequential_GK"], [5, 1, 1, "", "setup_pairs_and_magnetic_entities"]], "grogupy.grogu": [[5, 1, 1, "", "main"], [5, 1, 1, "", "parse_command_line"]], "grogupy.io": [[5, 1, 1, "", "load_pickle"], [5, 1, 1, "", "print_atoms_and_pairs"], [5, 1, 1, "", "print_job_description"], [5, 1, 1, "", "print_parameters"], [5, 1, 1, "", "print_runtime_information"], [5, 1, 1, "", "process_input_args"], [5, 1, 1, "", "read_fdf"], [5, 1, 1, "", "save_pickle"]], "grogupy.magnetism": [[5, 1, 1, "", "blow_up_orbindx"], [5, 1, 1, "", "calculate_anisotropy_tensor"], [5, 1, 1, "", "calculate_exchange_tensor"], [5, 1, 1, "", "parse_magnetic_entity"], [5, 1, 1, "", "spin_tracer"]], "grogupy.utilities": [[5, 1, 1, "", "RotM"], [5, 1, 1, "", "RotMa2b"], [5, 1, 1, "", "commutator"], [5, 1, 1, "", "crossM"], [5, 1, 1, "", "hsk"], [5, 1, 1, "", "int_de_ke"], [5, 1, 1, "", "make_contour"], [5, 1, 1, "", "make_kset"], [5, 1, 1, "", "read_siesta_emin"], [5, 1, 1, "", "tau_u"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:function"}, "terms": {"": 5, "0": 5, "1": [5, 8], "10": 5, "150": 5, "1e": 5, "2": 5, "20": 5, "3": 5, "42": 5, "93": 5, "96": 5, "A": 5, "If": 5, "It": 5, "NO": 5, "The": [5, 8], "These": 5, "abov": 5, "accepted_input": 5, "act": 5, "all": 5, "along": 5, "an": 5, "angl": 5, "angular": 5, "anisotropi": 5, "ar": 5, "arbitrari": 5, "arg": 5, "argument": 5, "around": 5, "arrai": 5, "array_lik": 5, "associ": 5, "atom": 5, "awai": 5, "ax": 5, "axi": 5, "b": 5, "background": 7, "base": [5, 7, 8], "basi": 5, "basic": [5, 7], "befor": 5, "blow": 5, "blow_up_orbindx": [5, 6], "box": 5, "brillouin": 5, "build": 5, "build_hh_ss": [5, 6], "c": 5, "calc_vu": [5, 6], "calcul": 5, "calculate_anisotropy_tensor": [5, 6], "calculate_exchange_tensor": [5, 6], "can": [5, 7, 9], "case": 5, "ccont": 5, "cell": 5, "channel": 5, "class": 5, "come": [1, 2, 3, 4, 8, 9, 10], "command": 5, "command_line_argu": 5, "commut": [5, 6], "complet": 5, "complex": 5, "constant": 5, "contain": 5, "content": 6, "contour": 5, "convent": 5, "coordin": 5, "core": 6, "creat": 5, "cross": 5, "crossm": [5, 6], "cutoff": 5, "d": 5, "data": 5, "default": 5, "default_argu": 5, "defin": 5, "definit": 5, "depend": 5, "describ": 5, "descript": [5, 7], "detail": 7, "dft": 7, "dh": 5, "dict": 5, "dictionari": 5, "dimens": 5, "dir": 5, "direct": 5, "distribut": 5, "dm": 5, "docstr": 5, "document": 8, "doe": 5, "done": 5, "dose": 5, "down": 5, "dx": 5, "dy": 5, "dz": 5, "dzyaloshinskii": 5, "ebot": 5, "eig": 5, "eigenvalu": 5, "eigfil": 5, "either": 5, "element": 5, "emax": 5, "emin": 5, "energi": 5, "entiti": 5, "enum": 5, "ep": 5, "equat": 5, "eran": 5, "eset": 5, "esetp": 5, "exchang": 5, "extract": 5, "faster": 5, "fdf": 5, "fdf_argument": 5, "fermi": 5, "file": 5, "fill": 5, "final": 5, "first": 5, "flatten": 5, "float": 5, "form": 5, "format": 8, "formula": 5, "from": [5, 9], "function": 5, "furthermor": 5, "gauss": 5, "gener": [5, 7], "given": 5, "gk": 5, "go": 8, "green": 5, "grid": 5, "grogu": [6, 7], "grogupi": [6, 9], "groupi": 7, "guid": 7, "h": 5, "hamiltonian": 5, "here": 7, "hh": 5, "hk": 5, "hold": 5, "how": 7, "hsk": [5, 6], "http": 9, "i": [5, 7], "idx": 5, "idx1": 5, "idx2": 5, "implement": 7, "index": [5, 7, 9], "indic": 5, "infil": 5, "inform": 5, "init": 5, "initi": 5, "input": 5, "inspir": 8, "instal": 8, "int": 5, "int_de_k": [5, 6], "integ": 5, "integr": 5, "invers": 5, "io": 6, "isotrop": 5, "j": 5, "j_": 5, "j_iso": 5, "job": 5, "jxx": 5, "jxy": 5, "jxz": 5, "jyi": 5, "jyx": 5, "jyz": 5, "jzx": 5, "jzy": 5, "jzz": 5, "k": 5, "kdir": 5, "kset": 5, "kwarg": 5, "l": 5, "last": 5, "lattic": 5, "legendr": 5, "level": 5, "line": 5, "list": 5, "load": 5, "load_pickl": [5, 6], "local": 5, "lowest": 5, "m": [5, 9], "mag_ent": 5, "magnet": 6, "magnetic interact": 7, "magnetic_ent": 5, "main": [5, 6], "make": 5, "make_contour": [5, 6], "make_kset": [5, 6], "mathemat": 5, "matlab": 7, "matric": 5, "matrix": 5, "maximum": 5, "merg": 5, "method": 5, "minimum": 5, "modul": [6, 7], "momentum": 5, "more": [5, 7], "morilla": 5, "n": 5, "need": 5, "none": 5, "np": 5, "number": 5, "numer": 5, "numk": 5, "numpi": 5, "onsite_project": [5, 6], "oper": 5, "option": 5, "orb_indic": 5, "orbit": 5, "order": 5, "org": 9, "origin": 5, "out": 5, "outfil": 5, "output": 5, "over": 5, "overlap": 5, "p": 5, "packag": 6, "padawan_mod": 5, "page": 7, "pair": 5, "parallel_gk": [5, 6], "parallel_solver_for_gk": 5, "paramet": 5, "parse_command_lin": [5, 6], "parse_magnetic_ent": [5, 6], "path": 5, "pauli": 5, "perturb": 5, "physic": [5, 7], "pickl": 5, "pip": 9, "point": 5, "pont": 5, "post": 5, "potenti": 5, "print": 5, "print_atoms_and_pair": [5, 6], "print_job_descript": [5, 6], "print_paramet": [5, 6], "print_runtime_inform": [5, 6], "prioriti": 5, "process": 5, "process_input_arg": [5, 6], "produc": 5, "product": 5, "project": 5, "properti": 5, "pypi": 9, "python": 7, "python3": 9, "quadratur": 5, "quick": 7, "quickstart": 7, "r": 5, "read": 5, "read_fdf": [5, 6], "read_siesta_emin": [5, 6], "reduc": 5, "ref_xcf_orient": 5, "relev": 5, "remov": 5, "remove_clutter_for_sav": [5, 6], "renorm": 5, "repres": 5, "represent": 5, "restructur": 5, "result": 5, "return": 5, "rotat": 5, "rotm": [5, 6], "rotma2b": [5, 6], "run": 5, "runtim": 5, "same": 5, "sampl": 5, "save": 5, "save_pickl": [5, 6], "sc_off": 5, "scf_xcf_orient": 5, "search": 7, "second": 5, "seen": 7, "sens": 5, "sequenc": 5, "sequenti": 5, "sequential_gk": [5, 6], "set": 5, "setup_pairs_and_magnetic_ent": [5, 6], "shape": 5, "shorthand": 5, "siesta": [5, 7], "simpl": [5, 9], "simul": 5, "simulation_paramet": 5, "singl": 5, "sisl": [5, 8], "site": 5, "sk": 5, "slice": 5, "small": 5, "so": 5, "some": 5, "soon": [1, 2, 3, 4, 8, 9, 10], "sophist": 5, "sourc": 5, "speed": 5, "spin": 5, "spin_trac": [5, 6], "src": 7, "ss": 5, "start": 7, "str": 5, "string": 5, "structur": 5, "submodul": 6, "supercel": 5, "symmetr": 5, "tag": 5, "take": 5, "tau_u": [5, 6], "teh": 5, "tensor": 5, "test": 9, "thei": 5, "theoret": 7, "theta": 5, "thi": 5, "three": 5, "throw": 5, "time": 5, "total": 5, "tr": 5, "trace": 5, "traceabl": 5, "tracer": 5, "trapz": 5, "tu": 5, "tupl": 5, "tutori": 7, "two": 5, "u": 5, "uniformli": 5, "unimport": 5, "unit": 5, "up": 5, "url": 9, "us": [5, 7], "util": 6, "valu": 5, "vector": 5, "version": 5, "via": 9, "vu1": 5, "vu2": 5, "wa": 8, "we": 5, "weight": 5, "where": 5, "wrapper": 5, "x": 5, "xyz": 5, "y": 5, "z": 5, "zone": 5}, "titles": ["Bibliography", "Changelog", "Citing grogupy", "Contributing to grogupy", "Environment variables", "grogupy package", "src", "grogupy: Script for calculating magnetic interactions", "Introduction", "Quickstart", "Tutorials"], "titleterms": {"bibliographi": 0, "calcul": 7, "changelog": 1, "cite": 2, "command": 8, "content": 5, "contribut": 3, "core": 5, "environ": 4, "grogu": 5, "grogupi": [2, 3, 5, 7], "indic": 7, "instal": 9, "interact": 7, "introduct": 8, "io": 5, "line": 8, "magnet": [5, 7], "modul": 5, "packag": [5, 8], "quickstart": 9, "script": 7, "src": 6, "submodul": 5, "tabl": 7, "tutori": 10, "usag": 8, "util": 5, "variabl": 4}}) \ No newline at end of file diff --git a/docs/source/implementation/grogupy.core.rst b/docs/source/implementation/grogupy.core.rst deleted file mode 100644 index 0634729..0000000 --- a/docs/source/implementation/grogupy.core.rst +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.core module -=================== - -.. automodule:: grogupy.core - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/implementation/grogupy.grogu.rst b/docs/source/implementation/grogupy.grogu.rst deleted file mode 100644 index c51783a..0000000 --- a/docs/source/implementation/grogupy.grogu.rst +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.grogu module -==================== - -.. automodule:: grogupy.grogu - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/implementation/grogupy.io.rst b/docs/source/implementation/grogupy.io.rst deleted file mode 100644 index b0f4f60..0000000 --- a/docs/source/implementation/grogupy.io.rst +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.io module -================= - -.. automodule:: grogupy.io - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/implementation/grogupy.magnetism.rst b/docs/source/implementation/grogupy.magnetism.rst deleted file mode 100644 index a510e36..0000000 --- a/docs/source/implementation/grogupy.magnetism.rst +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.magnetism module -======================== - -.. automodule:: grogupy.magnetism - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/implementation/grogupy.rst b/docs/source/implementation/grogupy.rst index 211bd28..18af50d 100644 --- a/docs/source/implementation/grogupy.rst +++ b/docs/source/implementation/grogupy.rst @@ -4,14 +4,45 @@ grogupy package Submodules ---------- -.. toctree:: - :maxdepth: 4 - - grogupy.core - grogupy.grogu - grogupy.io - grogupy.magnetism - grogupy.utilities +grogupy.core module +------------------- + +.. automodule:: grogupy.core + :members: + :undoc-members: + :show-inheritance: + +grogupy.grogu module +-------------------- + +.. automodule:: grogupy.grogu + :members: + :undoc-members: + :show-inheritance: + +grogupy.io module +----------------- + +.. automodule:: grogupy.io + :members: + :undoc-members: + :show-inheritance: + +grogupy.magnetism module +------------------------ + +.. automodule:: grogupy.magnetism + :members: + :undoc-members: + :show-inheritance: + +grogupy.utilities module +------------------------ + +.. automodule:: grogupy.utilities + :members: + :undoc-members: + :show-inheritance: Module contents --------------- diff --git a/docs/source/implementation/grogupy.utilities.rst b/docs/source/implementation/grogupy.utilities.rst deleted file mode 100644 index d4b00f7..0000000 --- a/docs/source/implementation/grogupy.utilities.rst +++ /dev/null @@ -1,7 +0,0 @@ -grogupy.utilities module -======================== - -.. automodule:: grogupy.utilities - :members: - :undoc-members: - :show-inheritance: diff --git a/src/grogupy/__init__.py b/src/grogupy/__init__.py index b6939fc..c055582 100644 --- a/src/grogupy/__init__.py +++ b/src/grogupy/__init__.py @@ -18,6 +18,10 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +"""Docstring in init. +""" + + from grogupy.core import * from grogupy.io import * from grogupy.magnetism import * diff --git a/src/grogupy/core.py b/src/grogupy/core.py index 509a200..0c632d2 100644 --- a/src/grogupy/core.py +++ b/src/grogupy/core.py @@ -18,9 +18,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -"""This contains the core functions for the grogupy script. - - +"""Docstring in core. """ import numpy as np diff --git a/src/grogupy/grogu.py b/src/grogupy/grogu.py index a79c39f..be77b4c 100644 --- a/src/grogupy/grogu.py +++ b/src/grogupy/grogu.py @@ -18,6 +18,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +"""Docstring in grogupy. +""" + import warnings from argparse import ArgumentParser from sys import getsizeof diff --git a/src/grogupy/io.py b/src/grogupy/io.py index 330df0b..01bf9f4 100644 --- a/src/grogupy/io.py +++ b/src/grogupy/io.py @@ -18,6 +18,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +"""Docstring in io. +""" + from pickle import dump, load import numpy as np diff --git a/src/grogupy/magnetism.py b/src/grogupy/magnetism.py index 90e01ce..de58489 100644 --- a/src/grogupy/magnetism.py +++ b/src/grogupy/magnetism.py @@ -18,6 +18,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +"""Docstring in magnetism. +""" + import numpy as np diff --git a/src/grogupy/utilities.py b/src/grogupy/utilities.py index 0cb86f7..fe63038 100644 --- a/src/grogupy/utilities.py +++ b/src/grogupy/utilities.py @@ -18,6 +18,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +"""Docstring in utilities. +""" + import numpy as np from scipy.special import roots_legendre from sisl.io.siesta import eigSileSiesta
    -[docs] -def parallel_Gk(HK, SK, eran, eset): - """Calculates the Greens function by inversion. - - It calculates the Greens function on all the energy levels at the same time. - - Args: - HK : (NO, NO), np.array_like - Hamiltonian at a given k point - SK : (NO, NO), np.array_like - Overlap Matrix at a given k point - eran : (eset) np.array_like - Energy sample along the contour - eset : int - Number of energy samples along the contour - - Returns: - Gk : (eset, NO, NO), np.array_like - Green's function at a given k point - """ - - # Calculates the Greens function on all the energy levels - return inv(SK * eran.reshape(eset, 1, 1) - HK)