From 7d8e8ab00dc28d28ed5da01ac86df3e80b1edf7f Mon Sep 17 00:00:00 2001 From: HTP-tools Developers Date: Thu, 28 Dec 2023 06:26:08 +0000 Subject: [PATCH] Deploy docs to v1.0-alpha by GitHub Actions triggered by b5c45ce2fac3729209f55b0189f045957d898ab2 --- manual/v1.0-alpha/en/cif2x-usersguide.pdf | Bin 0 -> 80977 bytes manual/v1.0-alpha/en/html/.buildinfo | 4 + .../html/_sources/cif2x/about/index.rst.txt | 75 ++ .../_sources/cif2x/appendix/index.rst.txt | 47 + .../html/_sources/cif2x/basic-usage.rst.txt | 100 ++ .../html/_sources/cif2x/command/index.rst.txt | 54 + .../_sources/cif2x/filespec/index.rst.txt | 271 +++++ .../en/html/_sources/cif2x/index.rst.txt | 15 + .../_sources/cif2x/tutorial/index.rst.txt | 67 ++ .../v1.0-alpha/en/html/_sources/index.rst.txt | 20 + .../v1.0-alpha/en/html/_static/alabaster.css | 703 +++++++++++++ manual/v1.0-alpha/en/html/_static/basic.css | 925 ++++++++++++++++++ manual/v1.0-alpha/en/html/_static/custom.css | 1 + manual/v1.0-alpha/en/html/_static/doctools.js | 156 +++ .../en/html/_static/documentation_options.js | 13 + manual/v1.0-alpha/en/html/_static/file.png | Bin 0 -> 286 bytes .../en/html/_static/language_data.js | 199 ++++ manual/v1.0-alpha/en/html/_static/minus.png | Bin 0 -> 90 bytes manual/v1.0-alpha/en/html/_static/plus.png | Bin 0 -> 90 bytes .../v1.0-alpha/en/html/_static/pygments.css | 75 ++ .../v1.0-alpha/en/html/_static/searchtools.js | 574 +++++++++++ .../en/html/_static/sphinx_highlight.js | 154 +++ .../v1.0-alpha/en/html/cif2x/about/index.html | 172 ++++ .../en/html/cif2x/appendix/index.html | 147 +++ .../v1.0-alpha/en/html/cif2x/basic-usage.html | 214 ++++ .../en/html/cif2x/command/index.html | 164 ++++ .../en/html/cif2x/filespec/index.html | 367 +++++++ manual/v1.0-alpha/en/html/cif2x/index.html | 149 +++ .../en/html/cif2x/tutorial/index.html | 215 ++++ manual/v1.0-alpha/en/html/genindex.html | 102 ++ manual/v1.0-alpha/en/html/index.html | 119 +++ manual/v1.0-alpha/en/html/objects.inv | 5 + manual/v1.0-alpha/en/html/search.html | 121 +++ manual/v1.0-alpha/en/html/searchindex.js | 1 + manual/v1.0-alpha/ja/cif2x-usersguide.pdf | Bin 0 -> 82296 bytes manual/v1.0-alpha/ja/html/.buildinfo | 4 + .../html/_sources/cif2x/about/index.rst.txt | 77 ++ .../_sources/cif2x/appendix/index.rst.txt | 50 + .../html/_sources/cif2x/basic-usage.rst.txt | 96 ++ .../html/_sources/cif2x/command/index.rst.txt | 55 ++ .../_sources/cif2x/filespec/index.rst.txt | 262 +++++ .../ja/html/_sources/cif2x/index.rst.txt | 15 + .../_sources/cif2x/tutorial/index.rst.txt | 65 ++ .../v1.0-alpha/ja/html/_sources/index.rst.txt | 20 + .../v1.0-alpha/ja/html/_static/alabaster.css | 703 +++++++++++++ manual/v1.0-alpha/ja/html/_static/basic.css | 925 ++++++++++++++++++ manual/v1.0-alpha/ja/html/_static/custom.css | 1 + manual/v1.0-alpha/ja/html/_static/doctools.js | 156 +++ .../ja/html/_static/documentation_options.js | 13 + manual/v1.0-alpha/ja/html/_static/file.png | Bin 0 -> 286 bytes .../ja/html/_static/language_data.js | 26 + manual/v1.0-alpha/ja/html/_static/minus.png | Bin 0 -> 90 bytes manual/v1.0-alpha/ja/html/_static/plus.png | Bin 0 -> 90 bytes .../v1.0-alpha/ja/html/_static/pygments.css | 75 ++ .../v1.0-alpha/ja/html/_static/searchtools.js | 574 +++++++++++ .../ja/html/_static/sphinx_highlight.js | 154 +++ .../ja/html/_static/translations.js | 60 ++ .../v1.0-alpha/ja/html/cif2x/about/index.html | 174 ++++ .../ja/html/cif2x/appendix/index.html | 151 +++ .../v1.0-alpha/ja/html/cif2x/basic-usage.html | 212 ++++ .../ja/html/cif2x/command/index.html | 165 ++++ .../ja/html/cif2x/filespec/index.html | 366 +++++++ manual/v1.0-alpha/ja/html/cif2x/index.html | 150 +++ .../ja/html/cif2x/tutorial/index.html | 215 ++++ manual/v1.0-alpha/ja/html/genindex.html | 103 ++ manual/v1.0-alpha/ja/html/index.html | 120 +++ manual/v1.0-alpha/ja/html/objects.inv | Bin 0 -> 567 bytes manual/v1.0-alpha/ja/html/search.html | 121 +++ manual/v1.0-alpha/ja/html/searchindex.js | 1 + 69 files changed, 10338 insertions(+) create mode 100644 manual/v1.0-alpha/en/cif2x-usersguide.pdf create mode 100644 manual/v1.0-alpha/en/html/.buildinfo create mode 100644 manual/v1.0-alpha/en/html/_sources/cif2x/about/index.rst.txt create mode 100644 manual/v1.0-alpha/en/html/_sources/cif2x/appendix/index.rst.txt create mode 100644 manual/v1.0-alpha/en/html/_sources/cif2x/basic-usage.rst.txt create mode 100644 manual/v1.0-alpha/en/html/_sources/cif2x/command/index.rst.txt create mode 100644 manual/v1.0-alpha/en/html/_sources/cif2x/filespec/index.rst.txt create mode 100644 manual/v1.0-alpha/en/html/_sources/cif2x/index.rst.txt create mode 100644 manual/v1.0-alpha/en/html/_sources/cif2x/tutorial/index.rst.txt create mode 100644 manual/v1.0-alpha/en/html/_sources/index.rst.txt create mode 100644 manual/v1.0-alpha/en/html/_static/alabaster.css create mode 100644 manual/v1.0-alpha/en/html/_static/basic.css create mode 100644 manual/v1.0-alpha/en/html/_static/custom.css create mode 100644 manual/v1.0-alpha/en/html/_static/doctools.js create mode 100644 manual/v1.0-alpha/en/html/_static/documentation_options.js create mode 100644 manual/v1.0-alpha/en/html/_static/file.png create mode 100644 manual/v1.0-alpha/en/html/_static/language_data.js create mode 100644 manual/v1.0-alpha/en/html/_static/minus.png create mode 100644 manual/v1.0-alpha/en/html/_static/plus.png create mode 100644 manual/v1.0-alpha/en/html/_static/pygments.css create mode 100644 manual/v1.0-alpha/en/html/_static/searchtools.js create mode 100644 manual/v1.0-alpha/en/html/_static/sphinx_highlight.js create mode 100644 manual/v1.0-alpha/en/html/cif2x/about/index.html create mode 100644 manual/v1.0-alpha/en/html/cif2x/appendix/index.html create mode 100644 manual/v1.0-alpha/en/html/cif2x/basic-usage.html create mode 100644 manual/v1.0-alpha/en/html/cif2x/command/index.html create mode 100644 manual/v1.0-alpha/en/html/cif2x/filespec/index.html create mode 100644 manual/v1.0-alpha/en/html/cif2x/index.html create mode 100644 manual/v1.0-alpha/en/html/cif2x/tutorial/index.html create mode 100644 manual/v1.0-alpha/en/html/genindex.html create mode 100644 manual/v1.0-alpha/en/html/index.html create mode 100644 manual/v1.0-alpha/en/html/objects.inv create mode 100644 manual/v1.0-alpha/en/html/search.html create mode 100644 manual/v1.0-alpha/en/html/searchindex.js create mode 100644 manual/v1.0-alpha/ja/cif2x-usersguide.pdf create mode 100644 manual/v1.0-alpha/ja/html/.buildinfo create mode 100644 manual/v1.0-alpha/ja/html/_sources/cif2x/about/index.rst.txt create mode 100644 manual/v1.0-alpha/ja/html/_sources/cif2x/appendix/index.rst.txt create mode 100644 manual/v1.0-alpha/ja/html/_sources/cif2x/basic-usage.rst.txt create mode 100644 manual/v1.0-alpha/ja/html/_sources/cif2x/command/index.rst.txt create mode 100644 manual/v1.0-alpha/ja/html/_sources/cif2x/filespec/index.rst.txt create mode 100644 manual/v1.0-alpha/ja/html/_sources/cif2x/index.rst.txt create mode 100644 manual/v1.0-alpha/ja/html/_sources/cif2x/tutorial/index.rst.txt create mode 100644 manual/v1.0-alpha/ja/html/_sources/index.rst.txt create mode 100644 manual/v1.0-alpha/ja/html/_static/alabaster.css create mode 100644 manual/v1.0-alpha/ja/html/_static/basic.css create mode 100644 manual/v1.0-alpha/ja/html/_static/custom.css create mode 100644 manual/v1.0-alpha/ja/html/_static/doctools.js create mode 100644 manual/v1.0-alpha/ja/html/_static/documentation_options.js create mode 100644 manual/v1.0-alpha/ja/html/_static/file.png create mode 100644 manual/v1.0-alpha/ja/html/_static/language_data.js create mode 100644 manual/v1.0-alpha/ja/html/_static/minus.png create mode 100644 manual/v1.0-alpha/ja/html/_static/plus.png create mode 100644 manual/v1.0-alpha/ja/html/_static/pygments.css create mode 100644 manual/v1.0-alpha/ja/html/_static/searchtools.js create mode 100644 manual/v1.0-alpha/ja/html/_static/sphinx_highlight.js create mode 100644 manual/v1.0-alpha/ja/html/_static/translations.js create mode 100644 manual/v1.0-alpha/ja/html/cif2x/about/index.html create mode 100644 manual/v1.0-alpha/ja/html/cif2x/appendix/index.html create mode 100644 manual/v1.0-alpha/ja/html/cif2x/basic-usage.html create mode 100644 manual/v1.0-alpha/ja/html/cif2x/command/index.html create mode 100644 manual/v1.0-alpha/ja/html/cif2x/filespec/index.html create mode 100644 manual/v1.0-alpha/ja/html/cif2x/index.html create mode 100644 manual/v1.0-alpha/ja/html/cif2x/tutorial/index.html create mode 100644 manual/v1.0-alpha/ja/html/genindex.html create mode 100644 manual/v1.0-alpha/ja/html/index.html create mode 100644 manual/v1.0-alpha/ja/html/objects.inv create mode 100644 manual/v1.0-alpha/ja/html/search.html create mode 100644 manual/v1.0-alpha/ja/html/searchindex.js diff --git a/manual/v1.0-alpha/en/cif2x-usersguide.pdf b/manual/v1.0-alpha/en/cif2x-usersguide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a363fc685c9af2c8a4a0d4cc4d3e19792b66663f GIT binary patch literal 80977 zcma&NQ;?>?vIW|Yh|cW&JKaCV&Yu;0Fij4!HIWUX9T zwUS&>>=!*V13L`);qBEc3`XRrtAWnUg~S0~C~I;veaa1p#+$zls;qlbCZmkk zTy5TRb}7Mty-b~3B@#JKQG)oxPa%d)R@6sYafm~;(XYmIoRBU|8YbDiqp91Puwn@h zJz_>eV%25612Ly|{I`8&8jIdjC!_6}013CX1U?Ks=-VIqjTqZ~$VRU55vijEN9$wL ziPL+mHIqs+M$TN893k%%f*;*)BZOjOqgkb&^6@lH^YHn-H*y z!Cn@y$rw3u}9$&D?`xm+RaxPGMJdn zczi#IYm315sbpn%YnSNX9xn$xeaw@9M6`Ap#9-s+(?MCW-^%8W2jE4q`zVL=Cm!nJ zgrigYGf9ymNsmrka}Ui}uu9Q{GB0&9kzcQ;UtM^>S*1ZG?A!|DGdq_tN~<%@@4r>? zqn()yYlL7n+c=jV=!Nenok0|#2Kz$~LfvxkNQ;K%!qKaTTwe-t;50Km8?HC9x!>%U zJ)49|10hrlGkC4r{~RA@pgH|M=B3q5?lwQ2Yvwx4T<{oz35V%FoPM94x0LkM@}ogT zw6quDR+P^1D(jH>W5x_~@Fid`<}oCm<8T@C;*?o?HKl@mL!x4xJmuDLlNi6oi^LG* zXwmY;24L~M!hZnPS>5Zwoz_E`x#KM%yHdqrnbQ^NvTlos*9?L

k?A zV#YA}r(xerO>Q8ZLmUKl>=yunE@6Ua+y8o$j1J@8J0qWlqflH82)VTa90g)X>S%_ED=TEN@#ZN2bhbq0`Uql)x>T1rv9Sj3agq9meK0g^F1-zN84^7B z1%KwqNLR9Z*_Z>IOgoUwPR}r1#Mwpm-e3nFb^M8w87KF3vTKf4Bb%{0 zoh2xi?YjBiwI6|TOc1Yp6bJvg@3;dKAXQp|&lP2g_MU)DY^l0;hpP}XM~j}qyhqGH zHue)}_{Hr7={fwJuUk$IqR;jJgEu(;E8gJZV)>uEv8}nSvc-WEaAUA9(KQ6Eb3fLx zWED|LE&3onSYlWDD7+r*a<>srE?OJl=h1SXi&#rOof_eaQeU!S?Gf-{)t#V!7{l+3=eAYMeIH1obB3kVZx~MLOlOm?02}(nlXLsA^}zoyXXEuQjalI->&I zCywKF6aQlSEHBDLV@?9`kEZVFNB7BlY0aL-Ll@yDsl`NkCzrS4GO;0Wn;*-yR}N$B?a9^lB7{av2RJmJEz9x@I6$S z|Dn4aimIGH0bWR3#P5U&q!=(>jx6(E;OL}LV`Q`zrz~a;BoD=dHJ76K9C0Q?8=0Rn zmZOCw;qwp<#k~oJvXEY>C|wpapuxV~>Z>>p{L^-64w#p6U0vQ>)`o5OXiVooG|zFN z&2ibELbxN)GelF8Lxj-Y_bg5Q#nR3HOU3(0NEuSneLqOI1ZHnsjtIqI#jdRpm>u1G z6QgjH{z7p}1%6|(4W32Qxfvd(YKE#HUGHeURx#B&wdt%kphmVF4OJz1K1;-b!)>pE zNm;Fow<{F*fKdF;GRFmgreJ zBxT}8tOBR#(lm6*$w0R;ZU%b_yo@Ev3<&S{@G4)D(BFBKq%wGu7|32ZqUMSeC{+-) za|lsgON*K&_P3#!7PO~^1>r08zd!gxFX6Msf7_2{3l2uiwk(&{ zD26TE=7+V@K#}kA1^nS?)$V1579H4BvM;1&Rn8K;ak8+Fy?Va+=9y&YSGIAI#G2{-46kuA5Vy3?othyTAC%3Gey_FTyaI>Nt2@({Pml z{kkjJanphC%V(PGQCk9MkB*v2&F!&De{RE~MoKJ-5#4&lL;H+F1#Ve+@t$hK+of|C zi!rPdMd7A{U?Him#;jGA%QQ9%peURjF0y`zSX@QV)ROjK2r*dX#R{iutuclog2Mg76^34U?SaS&*i0%)bB=T(gpi@U ztu1r#dAdydwOVv`Kft!GK34V>LA0BNze#s9X~w9pK*mO&wlBAwc-U*X`dBAgddz*; zt8q-cF|5J9t<|>@EKfxjyaI{ywqB^QgS2Ax`29T=qv9MDpKZnI|65&ibpnFN zKLlfP=y~ZXwE+6`YlzNIs4F{Wm$an<3Vb}EX(x9FbAYd{hAdq52XgmPluFKalOLrJ zdW~e9h&h(v7h8OFPx%-Qpk8-^k&xV0e&Vx%O0Hc1j7bVXaj|eIA?UF(Y(wPmhcIK2 zDKr_6AElIfjke+lrMF8eF25iLkx3dDLiDURsn682hrIP4cj?RB)mDR zC{+ARK(Ws5X47{GXbwuxEF3vyp`Dbix41606zk$gN(F%z6kU!c&{nCU6zivVJ{31q zNGbZcv<6W1gta9>xr!O{u!r2gU!P~10B%3{1QKT*Cwf_I+m~VZemdaEqR$zFE z{%3g}Q3u2WIFS5qG;Wh@Ny9btqKkyO>@cig4;yDi7p_1}rf63iPbHV_TMc##C4E|K zFy#Xw!sxSEbBO11G7BRGh~lw)xoE(Av9;}mJ3~(>_|qZZ#=yP5gA1e8JH{7`<5;wh zL85Y^Q4UuKUk7VPB$A_w`UN|V+G}_fSmNT^YJD&s$^CWOTCmTl94A?pu5m=abw7js z^$QRqCo7jv?fY5_vYeX5X&6tUG4u*KSqoSLy&)87D`8TdguV3Tp!#-h9>*nSeVxVK z$O*Xh*bkWOq3Rs_YiK^Ju%}mFjlh&xed7Ws)xw0`M8QHF<=A{A#KL%eWQs@K1T_N! zGTL#ks%DyZ5M!Z>}$-uBl0Ej@X~Dil)W~WPvXUOMmUo- z?Rf{-UJC5Sl*SLGZwm!-3wmFq>}QP&xuVtT+Gs31(x4@B`ZTS{6};sM`G)8r%oRP? z-#Vcb1?h~vWpvE&E5UUgd^osxo=#?+><^aX2!_riCrQ9Y z6cKSs|Wx5Q?&BsZfQ z7!5b;w{WxxkN`t7HIR@?Ej>f2J0}`pvD&WHC&#_O#S*6Km9igd2b6^0JHd!VTfzwa znaV)bcbfbiE#@~CYP3rzdYmJzPR>H;tv+2v2-eh@Tkk%_(+eByOmc5(cwo2#;9x+T5IAv-!+4^LT&AYe z;7jJ@!pl-k7F-Z;_xcFB3-qK0G;O~!BlJZDbXAP{9`L-mK9#Led3K2yrCWD58$kIBZ zV$8n$aKOfaEk+yJGM$ytr%0koG=RQ33-<(wfWrw<$k4tIi0TU5p!?dcUlwfuFBesN ze=TqnV~dMP+B>0*Q>Af+qX&7RYg+@t1$WHs#2mR!8KS8*h~vIH-&Yo$Qj4LPUAZE| zgrZ1LXBgcC#TsCm8mGgHDuNXEn5x>IO;Vo3?FGjKy5b^Xo(5Hk$t!ZaD2RgO_;x*h z!P@1&AS3T5TT+@f}(LO9}IK;{L+0~21LMg7CCSh_u zHf6UgY89qRaYC=BAE-Ojd=|AD@96h%T91e>rS{;T_Y1;oEm^HGZ&~dIH`i~&(Ldz4KY-`_kh#I$fajq1rCY4)IFygI``a88$$n`Y}a=b zGYY`|UQ6Bk6WaTwn=!|3gsX%ufZ(yz8vHdre{w>bs3?XeC=8r1PoroCYKsi4GhC^} z4ro}OTN5)9vvdxoASl!eX0CFLB8XGhQp+obAEF+-KbrJ(<%C&Faa|{5{4F1pYfKsW z0(JA`3nsr1$XZ;^B@CKSPe9wnF0TV3rAV`gs(K5h!&S5q#UQzi(q}-iOIn@f?a3$C z9jvIJz?CVm-=)4**A%DkFm(38W2=oC-E_~x6U@$>P6f`uER|@?G2b16#P~qsB2nok zxe~BKL6Rs*c54b3rRujp5la=c7tf_~Yifn_>F!nB%OJw!n@587#|mh zlpvv|zv1AN4;u{Da@=P{5~Rpmw86 zxHo8W^JWwTB5Q1UoN6t5i=xb18+8EV^#PP&nFeop`<)vw&KqZ{6qG2i>A-EX#04@H zB=Aen4Rzf)UNl!Zvn}TQ*U_ zjEv%2lBtj%#eITF5jH7f#-R9;CrqMnwfHzZG!y8DjEi)$P@c{qF4I7T(g7)aT3p;^t z>by?OR4$qv6@dNfwO#sf!&?K~oPaU5;&8!&u8U4TIA-18TQs{@@)=6|qs>uYNW8O% zphvL9q>6Rp-4)Y&*eYQIab@Y6Jlw8D9#H;#m|q^t>&VRf7CrIKo=HS++4(liPEb)K z)T7F8C@i!Vi31-&@@6Y_;68xo6WRDi6nktvlZ63bx|y0IQ=ZbZcQHl{-t0 zt-j1=FZMd0i%g3X1qByP!c8ftb%ih;>IEhK?V%@LvcQcbTZ|_)*-IZRoWm1)ql!Q5 z5svuxW6=y`eNl68eKEx2^HzR`Q?&l4I&4musfm)xv}+e_fXMqD3PK(r$`sDe49ENO z8qe%6X#oc6|HBdtO`YhP4nj$samUF70)Hu1x4|Fe(7Wa9qp9|ZngO~mT`OJ?v;CxM zs}Ac-C@7GJ*)0yzK4K@nB)`UYN%x5g?L(^fkWkfBua0I^zPeh8d8OrvDzcwloe4T9 zyXT1k94vZ0um&=p)HR-wF;1od9VV`r6TYeHlusHinwucnnmK8oGtF5U@seMU$0yb2 z{skTMdv+}!!C82H6j~3sX23N$JU|T0C0jZ0l_q-$+;Z7F*n|iV&e)`X_v$&)y1uW> zb~-xlpkZwr`G^QTc<<7DV+wq#r*#&qS~by)N<>m@MoLg~h94Q}a#3qo!bbst!QYoj zOKwT)$RrIW6@+D-)e4gWAnW!-$*Ke}{ZoE|(!D0pSVt~im2EU@E3K2GFm=w7S@OoG{Kw+ zV7eXL@e9n57QbcMH4}Oc0lTySV$7`Vn%wgc3O}PV{E?Po875MTE>Wc#;COHF6DI8a zz-8{9rTgE-i=FAexl3ZXC_I6auWKvcmD~8L%)Y|%znXhaky{9Zd>pg z#9MEcI>gqmsoa-mzddp?Xsy$2es33)h-njIBj#qzpU1jriDwfI3#G#!ZF7KHuf4g; zS(%(t?QZ$^df!C4m-b1guoRO*`icwB$IG@s&js&IwuC2&%#BaPOe9=++r1dpL41kF zh2OSZsv?C?fP(VZf)ICe#|08O;p$6bQc#GnoWgj*zMZI!ht^9z6P=(EcLXB6z#Il8A~|9` zhx&hbx_z|)Y-qhRYx^q#_2k{ci1f~^;hYsUBu|gux9jp5)YQ;|KZg1F?$61LrO85R z=$f@`JVpc=7ZrN{BxXWFr!iU#Oiqj` zUvq}i#7a5pYBr}dEgWK8VGc;mCh1{gUjXV(SrRB^ol=%J&Eb;s#9C4t#T~&r#!9Z_ z+$f=*+e+`ZoP9*ZwV}rINfVX5(1KdZw1_i8@WDu)+|1TlvX+lMnXcp`A#plTbKgc_ zCY7d&`^ZqK*(}M|U;-_*R|$ooSg7yGGZ}Z1{7ZC3y1R>cQPk0w&t)}fd~3Hl=I?hQ z%x%l_m%risWViYz3tPO#B~8bC@&d}=bNbEOf`~xf0`b3OIVxak|_7i5X?CP zg10bc#^IWlgv!Fq2=;2d2H#klo@cn(jAJlII%!tqAQ4kFs})ITyp~3e3dOWpA{aF| z8qF|;zhOc+47^_LMBeKZsqs&t=y-e>)FLwU7!u@LSZJeb=62oW$jC$`DbyfekUFs^ z=#7k=1$v0BApx(`FWP@A)j(jTZ$K)gHIEZUP=S>)J2O{Opbuu+!xl%v$eyLkfOG4n zb&j&iJVIJxfi>zhUd1|OYD!d9uf=^L+X&k_f0o6%PpwIlD%7;)X$vJ2{>x>}J>0zI z9BI`N#-!(D1LvHfBYCdVYZqd1Bp`g0q$CYz(=ezgVDW#_M5nJufks{3EDX_HG7cmsw}`!^F07q1gzHa2 zvB@}c;hg4oqTHn+{%r^DAMn`!fS(8~hQpquF{tyG-3cS!b7?h_wB^Ak0;6PemVx{i zhwv{B|6kl$U~%bP;AkjCbHeHQGcjVIX%fI^fPtCUu5mLoYKISX=?V>N0C2K~(-ZXN%xX{9Z2j_fjmhputIY^TbMKJFfOg z9D$O+dAu?IpTWA;ID%)!NZG0GRTBaWzPqWJ>*-SUkZdn-zZzS0Rd2TDWeXO7*$287 zy?%Paj0by?Yf8$7Zgl_8dWKi&kCmEQ_5^m+wrMKJvH6UPv=qrqgy$KB-jN&vs-duD zX;nO_V2ztWWwso`XW&s)-GwrAy5{MUCi^dA#Acv{%|O1gxNF@K*0fhaw*&FIO10oK zZ=o`cih=tW*Nquz1HtnusoaUlmgm5Nwng#6aH=z|M?%gcX+krc*Rm{NP0?VQ^r?F* z4uwxSZT>dXP@|Y;Dd7_lrk?|C5B9kZfpQM7ZT~_oc71ca<%S9XBZtlA6BP`?zfS4a zJ~T&oKB;L({Wl4`Y`s+(;hRC*S?5L;y6&!jM@MhZ*XJ+JfP5vax9jIAx}X{fXRKo z*3ftZQeYj12%qfoN--JV{4Sh#-EB-tl9r^pii)8x1?vD6!!!NgX_9OvGx^UiDkxP&3gm z-lBHXtzw+JfMcZ|dbeN(hxWo z%gkk~GD|TFG8^VI?kOf&nQB^V<>$U#R3~Z`)r!qnmX{qlslb$}R`NU4=q{rWrIXnF zJZiI^xY5nk$2B~QUeRqB>Q~Y>Lpj?=`0UMH&Y-}UwLqqcy|c!yjEj|IpcgGJS6n5v zuKnih1?34$kLL#;*p}aM9R2BYZ5q}!H}4u1aD8T zQwekFuKD1g=k05}hZkOQu#%n982iO?T+E6FE$y|;t? zxRsr=g50$`9|^xJ<#W1fL|$#V%KVn?SsL4-AFajy*o`?-mf^=L>~R}0*Ru;N9W4ZF z)Zl?+M&2UZ_~|7_vL%e6)N7fYk+KC+uF2!Te#^|Nd%5Q3M(gD;^I+GPP?0CqOA$8c zRnKJ{Db>Bm7gnNl0#+@jZ+7M<$b4tmQIoNDyf~b+xSd=nAJi4;YQJ7b|AX9U+4YOn ztoxVkp$dox78DA!p4Gz=C?`gjlFV)``$?m7i?Y3&y(K(0>9J2g{!Zb5l?WMs;bRf= z1w`gqIj)9K&#@Mv)z={KszZOnSa}nN?qGv>LnCOAAkrA9;A3`w-MsZfE$OTJT2~^X z)G})siRN}V)cNj=@vX9+)MFc~L^Lki30W;X8A9IIqKYee1JAk)z1@>?OI|=RnLO8R zebbcg7ZXyXUyp!!PDbbzV`a13olA#aR_E1zfyma+K!Fz(DT#QnKg+oL86iB*EBYTV zEQ*@^a+~O97P?Zh%TlMO9Cg-ug6>U4Z1Kv_%!vNugbVGT>4n8KNhRAw2t2-w9tONt zpKWe<1kNslpL@aaP7B`uLq48@$i zeAiY_`f9WW1LYm998)Xw%?Z?JWBZsFbc;TRnC-zC$p|s5M_U~ji;rAyxL#&P^ReR0 z%cMa=55A7JY?sod?Y1u-;VsHi|DMhZ#vD(1qIg~Nzd_V_-;?UOICMMMe5#4r3$q0| zfp^3ZNzLHv?)cf-7_Fs348E9kPqHq8h1;Y=tVra6ZsMcRs9~r(v3Q+F&E?(yXr{hM zFqmbsMznuVZ4uh96BP@y6;*r8Sc}0rb8ih>6-55LQ43T{WBEV#`la&)`T2TIH zm53`sKoVUFLs14dxqNVugA^oHokf{SeRv3Jb*V0MmzLg=ZB-(1(9IpxqK>3nxI8|# zCmhk!caJtW-E_w1qxC?}b|e64pF|bc6Am1+GlkyBG9rS$Fz#!Neqh3Dn|wO3C%?v9?-s)Y4Al?66r`i~of(8^!^i3Qh1%88%a~hr90<8p zN!*=b1qmo+9*Ug77X;sNv)liXtX%(1va&F7{D+BaMq4KVF#7-Xdf?UO+#1fG#~8Iq zMZ%YtMUshNuvs`>S}J5iQ?Zf*C)Of;jWK9Vt>HC=c&wY zIisTSV|NDo625l<8|!*M-ne={x#D!h(#+V~_J7zX&|+4z2H4~5Is1kKy5<1ra(@S0 ztJqO_j;nUr)m4LB(f|=R5f!zs6AqCW~^tZ z;{dhP)8?0#i6f#1rDFoJTOZkt`bx-c2Z2Lm-|YKE_Xz^E8If{!op{AQ3mdX*Ghl_# zpy-OOO7G~bcgQ5W}9zw zgj7TcLnAt z#m4YURdf`e>JpDSIo7h*^>8S9YTcDz48CTZLQQQe!4AMh5Ymt~5t8v2j!c-{o(bCV z(SQ2FXp0-d!G7oK_4xQWf|m1hEgEG1BHM$O-h`JjcuMtC)aLvqfFwSqNj!+ABy zuH$i>wu&l77!luxo?xod*~5H9{IjFxez8QMk!cMZvgOj)VRHxmp|YVcSt_SXCjUme zn!Y<91~~m%E|hXWjPsr(op|ICUHik*E~}`IfKNnM5Yw;*TA_)$zkP4!ieMNj%naHn zdWcbj?fvd5X<~K=kLVAPE>P!{5dw&uYqHjN&O9Z`ED>~a>IA6LO@9OuiO%`r2*VIh zo5t;qcjXz~b4)?422usOc?B(Nf;S|M4*0RaV;V>@()CE+FDaVrAu5EEQ{bV%O4&0k z6u^PR+rTl`bO&B=7?4FIggr(QTpjF=u$Dr{9BDz`x-Ys`l5J2m7jvBm-49*1tjk$~ z9ql3GCV-F{JaCJkx$Spu@g1ZJyW~eZh^bg9TTCDB7OPH}dW0Cah* zS~|=tdZshD7Z)~+^0ZSVtB4VJeQM~!Wt5)IunI1P(a@uE5U@yyVUOv0_Tb4`6T&(c zl*f^t#h*Y&Kvt2M9gIVV&6kxl%DP336-@5bRhF&Gd<t6VBZ z3`+Ufc0@g@J0RGvE(e|1)~nXn5)mWQ2>Tu~#?UbAW&pw+Wkyv;!iRb#*_5vR0`nBH zp8M@864UaRC5F4CaMI)re+^Wj-m=oNq5Bb`@GZ&Km|Vq7@`BN(knwdkhpSA->l3{z zH#B;e;8-hJ7dea6l~=eWn;e<_#K1g(XR;+Gv?OJkR9u=y6LJV?G*?E@WHL<% zwRm%2E~%_A!=R?TjH9mD)~*_|tMb55i0K^Z9SBU-ucx1qX%6p%?_?+wPc5#j6xl_G z2Ui$LTK1RGFywIoEZU-AD>T_Ah<-^~*ha(EK`NVwvK9(_ELUrF{*6UB9bP^-lxSY= z{RvFg!iZB+pGvr?dC>3qw_cxWgXtIzp{@c~sV{2-3hMkXO*ahI?Vs{a3T2bJ#g7M0 zw)?Jo(R9J?avlg0GnsP-;`fMfx)p1QH*)LB9cWY`y98=zlXO=FZGx8_K{=h zC+1K~QwN|E8M#wz$~H%GLFt90F*93x0BI{{1#D&f2^OV`8BPd!9S~2Oy`46K8C|s> zk2ejJ;y;dQ%i&9{it?L@FZu77{QU(Z=j8idct}M>+{n{c#A}!`(BYa+M1E_w(`RM^ zqCNd&TOfkg2-b?yLx45Aw>R+-N}!CSyb4|yJ}pA3Cr>HI%&larWU8m#Yb&ckDVoFN z?|Wf2=&%vC$5<6MMB&_&JkD~L*~9mSGXcGBS#&e8G6tHjbb`%M>QfSA^poNM5ur?? zEZ*HrV?2VkktyUSoeb`)DhvIBGD98Xp9`S10Z{i+RR3~hNM`J; zDrVj(y9@EVuQu<){l!PDJ>1k2P69Lx5}B+0dT&03zO3?;!ke&npPyTW3S7c5pj9Q} z@6OMWAhhFP^#7I=9RHQoftB??-#%w>^;`fP_h0^DdCFE4B0|1Nr?P~Ld4RhoQme~M zA4?wWtRlO3Y9;cD_V1Ur7;tLEB3j;tqihZeV34kuFMXh_PxdGZyzdx_hQOaUG98f% z%2$u0pReV%KEeF%w@6N0lm@7}R=DBia(Lkgt1Pb;QV`yIxE3&t6#Ne66A<1!;wOxhaX-4W%SUNQFpXrfOHfreko3hra9P*scm3jgs-mqt zVQ5bQTerevt_xqPbZ^#P$lo`OWf0pX#xQPF5 z10Fp3^1g4+F25!a%P0|v4H~fmBZ%VVdw~gQoa(eqBzYt~;22`22BsNFe0KA|#8}yZa#lR#veU*eY>Eb`hvS3ug^SAi za`X8^=@-Wbwhm;Lf-S-a42Wh7kC&ubfpY9Ot)aaX++BOcwpc2pXf)g!xW+N+rEsJ6 zhs*Y1&!OS4g}zN78)f$tia^Ho6!;;KKRI`UGVtQ{i3lsgoAd+F@v#u&yy@`OS&W`k z7LADe(BB(e+dYdsO25uZjlR3_p+M1CmEeL5n5QP3@(o0v8A$o*)te;c*0M3OZ!wPGuhhL)P2C~PHx`fGSgi#X@S<*{s4$J@UA0GE?3kE^KIC8*#p_re8+y1pS_t-6-zKmOR~3r~sO*?9G-pBVK0_ zj%}d(VjX^3jWr*xK2oByF5qJVd-R*nR&DF@OyIB8QZ_czXp$YNM8)r=#V#D2r3JKh zN<1*@P+OI7g#a-u`xYiT1=bv2IV2-hp}uUa>KRn0w&(olaPL-%jsiqXR!1NYFy|a( z7dj$m=2?acn;)_8E< zW5tk5UQy;v`n;rdNR3s470k-M=ND-Hz`Q%!< zGAXcvAz^!(dt6u2y9^0gcbu1VioULz^AS)IJ~5@T69f(^41I=48qr33oFeep?&+@r zx*E*huAXZQR`U9z{ImWN~eTY5}`ZHY#Hgw<`Q) zE1v~6c~`^PJ!dwmvVc3ZL4bH>t^MsvV3+REA;jYD3($NEZ7$;l(Uv{L!$yYJ`vyDgL!D8=C4T#h_HS(S|`e^3fN)XB9}G;Ni6 zZhd%2vCL)%55~zdVbHH3^(Vb3r`)9Q5O>y-R@=Dl88;-A(Bio6LptGt(vPt{qDq1jBK^_F`xp?k}KBa1D)qfY?m!eSFb z$K%~NFxJLPN0)8er<=NAGnvrD=v@XR~!kKKygRg8J<-U?Rc!N+(7RT zJ(+T)KRxcT+eMtDr@6i&Fu0Bij~v&d+c;|%cwex+27w5@*Pk-evMi?hK6*wR3?@?L z{kX_9p3q)ch{~#;ooalRiG{?eu!0*l`f$^bGgU4Q*4&odP{`Bi;g|$KVjrdLR9~i# z@&r)u7iw07Ef2Ht{>y4N9yxZ;`g004m1Y8eStHLf61fxm=kyoEEwGF&Jq8ili9wo> zQ*lT#)bbedP}yE-tNrVnBHC&n!lxD2XRAaU<&6r*$trlZn5aX)op{VWMTG1eS|`|O z)$_H1*ww4YWM4WzoPH^0+l=)B&}-gF7%Svv2J6aaRVIxC^V7(k69X3-a}Cm2uEn3T zY%_<+4(yeDCK2+tN`ZYRIPAb>(v|@(ogp_84i9&B4upU3+hxv+9x|}W61Ov_ZQgI) zONDudhT_*q-+});x}L}mlvo>QUkJ&(JHl=Y^UGLeogz5@sZ|ZB^#OtN#fE2^zX63S zD#BB`z9OC%av;KT6ldeNt5^e9&1kAjto{mn|5VzrL;8#zHsX8AX8nU}!hG0S>hkVs z?%|Ue$2$}`6@lrpf3^!n#$JAs*y?kY-$>BIemQ_6te|7i{$|>=`|$bK#Fdmh<|<@1 zutN}39wK5xPiBu`xSlc!YmEY0zFRyvVh!-%XnnxV-Sc}JnTh=k1L6gWMdH`nkNC8x zJfJUd;clud6qj{pi`_PpUpgIzO4Cn^6zy}2n*g0MS5j}+T>w!Mnd z#p)IO#>`^hAi*rmF$JwSiB3X_7XTkIa>doZTH+;K9y;Uk2$*w%^wIB7e?crF z@@$3rVI!-$dQp>|^4od-7&%0$n2_MwR`REelMJ-qo_u6KbNxN9rWN}RUPVuK>hE07 z22}Q9r~D4>&*W?Jf}XIIwO-+%Pt}`24h?(3XvZ@Cxt3a6+jfCwu5aBryp$U1P3{zo zvRr#QZ>&t1=mq*b?;yWPR-zMPi}#-V9-g??RePi`BIT*Y7; zyQS4sU;$g%Vpj~mX}BWXCs2XQ~Wc{3e2!5*mN)7 zu^bhzW>tt?rQAYjUTz@Be+21MyIof=v9QVffPj|mOoZA;QC{`z7$YAX2k^Yw5U3(om-_n~1 zrToglxuMuct(&z9Sc1#)N7A<$!1ZwTrv2OA^%y9l_^YA3kGow1?fbj#2N?H96zKnG zu-N~rJ6pE@G?UM0Z#w|Sk^jwl4MgxM2Da=tBtt%ySfS{`J~A`}3Fv}^lv-x}2L1rHdJuQkLbJMQ!b0Urt|MPCKZ>2tbnT-J%GS?dL;o;Ar3M`CaVZyg%&V#r{N@9$pNw#`<#H?SFPVz{}5KXQF0 zrh9E3E+fS9N3dCHi#L#+n2-eo94U=DmF6_5g}AvKT% z3lJ3qD~*E55NAZ?h7t}{*KQVV9?>EV+}@h&)ScNk&0s1=yomSM1Qw+@rtFZA|FoYT zURaolWKEnzc(4v%*)d^xR$wQljRs4OZe)^MO3hS^>7(*cwFjOj0fT0XiTvxW%%ake zTV2sUD1)hM4kHVKZI>65t+1vdaE}DOm;(0g2QPovui$H`WZ<%}7*PS#7`Xefl(Bwk zcWg^UvF9yF1!2zGV&77A;u1vkooQ+M5v1%~tE>ts5;QyjwH^!}wXQ+$HRw@|kH%eBj zGe`-M)K1a$YpUzx%YJMqh%Ls0|1%6$!z=#l)N` zrzI8}TfV>Ke;3&1i5_C%L!@7gER#s>?ri@}rYcPz(i$0V|8~!QTaf|kCk_vK%#y`M zRC?FRw9y1;%62dUZU%9XI^v$`?!RX|jPQk1BW!t%deSj^-C&4OF(?;Y<4p$Nl&K7_ z6Wh$836G4y?|icZ^o7EyTQlgB>aFg#EA{QqF{J;3EG4lNDSXr}Y^`)Ti@&UK>v5W8 zxzQo95Y_ZNAZqjr*jzAd;FnTi+pII`B^#fR4ac%**K2y5p`E*;zu87VJU^hXOo{?a z+}v{u6n(aA=_jzUjN$}C<3!=RlmI<)O05vQr0k*V9QI zxIg{8AOfxV0c4iT;ZtiIia-9JtC*>H|Vhtv50fMxRS-0?Ka;|MgMN7Nyu zAZ2binGtb0p=s}8(C;geOD!>LrQMFgLxxEZ?g{wZQCCScdHXlZcL}juU2e|Snk>F5 z%dxuiw!yjTjM5*n(3_?bU`o%Kbq3-wG-F~g7KGY4X`jp3KZil#dW|JsUx5!i_}(C% z`&ZFxo^F;k6)xL5PNoj6T04dF6mimcT}U}4WeEcdr@jrqbZdA?A#^Pyw>5+h_Qkl`c$pog`xW0JhiTnIDrMFX%K1Jo*g@jgLjN*b&+c^`d z9jq{@-!(=9g=LMZe7}d<*E^z^qk)Z(j8=ZjbF8N-kGdg2+s?V)ssCg{>9-y2S5R3q zARVn80_Q0SA;0)%3L1~e#tfZnTxbmk2a@yI10rv( zyWqTFLm7@vz59pgV z073m7V4XlTU{E=W1O#Y1L)*zQA(#)3Vgddh!2~-jLF3C*n7mxy4BVmqVZG&Im_`{I z(@yb>S}()M50@V|vY4eachEvnrRU+pM{6FsIfTGO?pqfC!kPh#&5{6%&65Djc2b@8 z6}Hd(n$lZe9QRo9+eD2J$fPZb(kFapE+?;004ecV3V+4TfnHl8dvoFTVRoM=W}?vFFr%iM=xS% z6Eq+x62Dy^@1=OZE*|$P{rzIisf+!kNnO9JWT6KN^K63%A`EhWh}dz9qr-mgbY=*v z`q=4@vw@g3gn*`H?J|i?DGNf{x6vwVvA|~2kr@8GeZvqPB|lc~0=NNtehlk9VRrH6 zysLVH)%K7aWqke$+xTTj)k#%p67p~?{cD%tReL#f5M5dpL~h;X(we^khyI&wQ<@HU z9|^8k_Mb79XUpd}UVS>ij`ZOZjEM|ZKK5CYWQaT{@iXi0Qd$g!DO z(wTc$(~n=l6s{M?0b`VbI;gQofHx?-HGPZz5Mu2~8w5P1e3HJ?@$67aT9d!RpQh*m zAd$O=z=2=mGsH2F*rN(w)Y_?gBQ(yzK#;>QpErLF?w&JS4!us9+WWW06};<-+t+_J zNqZ?lJJ{R)*D2b0$eo#!KKW(}xxn_4r&D;=LtFTy?q&BkW_BSH;^NZyi7GEwxcAZH zAWTfk3K`9zBI7*D9Q2LyyjRHEC(SmW6mRty>aHsUv{QSHIJlemE*#|k-{E!p4;Cq2 z@DBc8wA_E?zca8g{)hj5tiI{^{{;iH>k+mf->PMDqPb*j#4?*Qh?5M=H%^i}(u)pG zZaby?*&S99-+Y`u14$0YmuEhH!os@pS|*S-fk$PoMLzb9<=+(QDoN zDCRRO^&L>B!sofuHQ;91)wO*g^md4|!sqK|Cd@~QVNISa?z6PWB&-cXFU{$dB8O7j zSuT$mHFP@OO^gSxD3O>!Ao0nyiZzH1jOVe1F;?%UoBizyH11xWh0V@oLUkkwiPbl< zrZCA8Gemodt>p%p%nvf{oBvWy*S_(+Qeq!a14&hZ@sLX(QId!!Mq|*OyR=M96wLsz zhzxq8GGN-aGy~rgp*D-=u7iD~hcsLCoST+PB-ln3&8$+bDpc2A zbcRpTQ{)iw!__N;Goc|<2^&r0{CW9_3tzmu^7iHAyLo|7FQ0D(x8H&UctMN+EIH68 z#UKLm)i+0q(igutxnec|awk*=OQafzVcg5f_fI87>!~AYzbC?1g5o_x5a6`d2$yP$?^bdK}y`e}4}X zDCpvgQTQl9o%`i#D@}rwDJo-vIur>rDgsBukm1b|2ICo~8F}3&Gs34adkz*Afd0?r zPhA%FtExpFPH3g6o|h9mBY|nK0Pi2j&n7(^xTNy_q?0)tOi`5V)cY3Oyf&J$QROx8 z)@S$G8w>qp$u&^uB5`S{c&3mZq-^=l@v3;i*Q1dg5g4=|ZoarG zsJN{QFjXAxP2);7Kg3n`>KuR0cP=36Z2J|hlRm0Q7h+}iwAz}i>v@NUb6VZL$0+Y( zI^;{(K=p+2!eTH1e1AlPAD|f#a<{bhxa@iG${gi4r>;5ldx!M-c^Y8*U?wdVT(*km z$uyUg)m?2hWK~fw@IiPt)0Rq3y^mZIRh5XSIjBLwg}d1->tir6vyzN%8cP^PIFC_ zHXe!kZBVRG*8tNJNKG6`<=Ai-e{>B^H!M;|3z&8ky4}|>806q6R;G4&UdR4@ z!9OV59DYHG1-;wbD+k@VF*z%v0PHnUfL}g`TyBN{o*NkESlyd;MA){ERlI$ts>s#D z$lko_XXEQpYL4M3VKk0$DDu=@-Fjk*AsR|LC6dj02ZqBTO7H}>Xq3^wpnm@1W2*>2 z_(njO9ARq_?wugWqQ@j9xTOmg4VEQ*P zw2rMLX28mw6OYuO`;^1vnIjRH_2sc-J`-U>{7834(h^<9AL{wqJlf!+8V)4a%%_r z1xA#}Sx@M3W}8R+^G1&44R1Y{kisTycbzc4+G3;a3iBtq4EH^*_OpHSsl%Tc(~mwV zL2SEUH)ziI{5?P=J*V57{t#Bm_NzU&EAbI1?q-pCLneBaQ_46P6U^Y~+9_;0QeP+5Jl8PHZL_T1l*Xxq|tc zy3*PKu3ADZ(=3wM_~j!oFM+yx&ZVJPz~nN$0MD`Vb(WQS#=KhKIc?8;o^TQem|V<`K&GzR@{9 z8l#`x(Lwj;z2iHa*Lt4DaKaR9o9{h!%02+AD9M_lY~IYd5x)c991TQeqG>rCYFyaR zERu`jZP9}6sv#tYb^kF$=a7_7xyIB(W$H!Es=00tKsH0g5-hHJw(^hKMjS%fggtNH z#63|0R-7;fcRQ!0e(61krNKQzUaXLKOoRI^DLP`m+%;x_q-Iw}VF#9+6}CX-G$)j+ zyUTu62N#0n{oY5z1d;tB8b~TF?)DT*WKUlbfcas>!CNjlaQ-b9Qi_>qL4_uWz?j5X zp#Dla2lTe`N8j+BQzbc0oX_qw0Qb93vJVl$k&(Tn1D_x87eBy(mTSFj+Jz1O6W;NU zh3F*Tio0Hn&o!Y=KAY%FaqTBYgq0kD02YgHS;_tFyVf9M(w7$iG?(P<7ky}E4{rFE z48B{y^Y|cj8SNKcudwq@FEaxL(*`Z)n+A&4TS|do(ojS4WyU@Qu%xkcVC<-dQb#WT zCBhp^D7zCgvjmW`n$F_T(_l2_0LTOAJQK{0&CRUEZr3|tUl0e&|FW?Dt8O|5W>%*E zKZRSZW@GnHSN-(p6~rMSI2}|D`Cf)HpVb*iA?ssg8pfM&qLql(5Rc0Eecy;nrW%6E zF5uIpj&bd5JB^;s^soAZF?`M88{A=ozyImd>D#UT?ZoKroYkud%Hyl^9~Pz{4Z3ux z!!I}N7i4;q4!m4Gy<3%Oi804^FYK;PTymlDN9WNs!UDG)>3=|fTq z9v3U&Rh<_M-P8dmAhl?l#`2!MktQCXO)Q8o4_7CVa7T6ml;?Jw%G?hi)eM0D>kdLv z&h~&CO^+HTf~v3|BM~#w7e5Jl_3?Q9IMKvG8#J@f)cwMFknV3T-~ypRZs})h;<(t7 zq2z9FrE|?|M?@;9ltFqqRfRrN)yklL=9Y;T(mA}MK~vGS2Djj$deZ55B(7E4$%8e8 z1&)%8^nVdZ2X#@LZzqzpSo)ygIc0xl$>ZTnpGQF>eF7hph0|d1roHSCJR1akcct5j z6fa$@R}ZZ%F&rbeWi4gf_dIgM{ZBsMTPshX^Ngf%N^!}CKe9D#l$2MU<8Ra8+nst;`#=_g+)ty6C;8W%NaHFS=w9I7`H{P zM>vDS(PL1gEUftru3ekwJwkki52A;j9{gT?(NG=L5Ai(uj){&d(D~9#@){eAe=l)M z7c^iN+yBZEHdn4xpAEI#N-iRGXLrL#o9B49XsqZO7|E4US^I?u-YS8^nN4l1Y8g~` z>&R%0adQ+Xog^2Xuy-1`aI77=gbgjLuCcUc=YbSoi{=?_&T(!e6M{LQwwh0N4cCodnf?Wh z5+pqXI|HQo2Saq5sCWimQ#B@YJlKQ^pgwxe)*W(EsyRdo*yfcG|ER>rzdlvUmh6>wo?D8vP3|a_pQ^%s086QD~>PAX=P)EWnl!-9i-ihi0=|to^vUVw!+0=1@zmEGoIj$m5xyk9l4_r!Tj z(6!a(hT8vm7(wHTylHIj#?3y(FLYy>x3g)8(OOmGvq3aEEw7%9B=IT9u@3oZj5?UT z02|`$&2A88X4&zt2pkX(ymaxZ6lME)$moHYExNJLG>6}kywvUy>eKQ zxL6_RO{&5otE%PAwzzH+er}!2;6}kS)}3GtD%7lz1FQCOb~#(%B5mXS;;z6cf$Y7E zeUjWGsShGAOvdeEU9Kb!fVgo#)2bmFQw{~kXy()cf+MVFcy2&DNG$Q3rS-vU1sV1k zG?n&O;lm0*hc>0Z2QS(HjY#oqj~0QxOFDI8kFxD*bjv}61OWl2Ski*)cH=fv4EXt2 z?iU!dB!T{a`S^4EH>!e>ne{(pMYF~~gM=N)ueWyqJ}d-gi2Gg&>9x9Z6|Eb%!v=Y4 z(zIUQniG*yN>@rYlWXhOR|rl*fpyW?t@bQTI1*sqEqUKq7XUE2noN)gq%A8LRS!_Ifc*Sh6u(s6i#@zbl9_r{rx zR*kW8wB(j{$~(npp}Gb<23YbzW&7s#;+RhDSG}u8^Q#44TgCBy&w`22sbh^sSYa6X z`oQs?!ElKO5_H6I01EE+F_4zGTSgi;kUSZQge1#YLqXKMpo%_Get_HPclIwki3zQ# z+4E=dRCMaa%ad?tUY>=|FtlR*!p%Sa5=`D)!8Ax0o047qbz7Y+=hJ!fg^hok279!m z(?yT7n$0ulc9TR+!;e0Q5c`&SM)y=3CzJ$ry=`MqtfHYri|tdD3+b{$2XE7p)9bAD za4<2Vir2hB`(6?tEmpJJn6gukkv_Vl+D!ROII;CviL=eNh zorUzg#-3CD>;9vn$)Hqq#0iOl_Q(nG!&tU{-TVj)r`K_y<|WXtE7d0r?>*EW(-vg< z@)`tHkg;!u?`dS<;3E62nDZT6>-s6<*?O3dtEMKo*ITxyl=MzFlnIIc&T|D^ z=X>Oqhq!t#H2L8q_)G1z1aZ2U__Q7qQ`Ofh3D*n)jt2hmY5pc#6)vlGbJwS)6YPj6 zIQ=#4GrYK$w%j-I#j9y}yxl!rU+13h%SlF#f|+XU8j^|=gp6KriXg-T`*o|ABU@3f zyVX}O#}2nUQ#P4qAi?%L4HXS;+v6qA^IAm_v8E?GWtjHxe~HuP5BA%3xu9{UQPbP= z3)=;N2wTP4oJzaZ=e3a_6$@WNpIHm^H4#P2wG`d5Ku|RihKsZoipSHvkaDMtd+>LE z3^dB3)1UgzqwWbi#4+BYh}peQSJVf?PV2drLo=E;>g>>D_BggzPX-#=6a(dF%r>B2 zu!jYo;+*-e8k}FX-#s^u3Yk|qW?8T3Igk&zZQ*blLo+5c*@C? zhDL%GX_n>5T(2o%pG(o+XV+HaN*i7O2hA4#n-(-ZFexx~2DKL(H%#GHu}`6o5grGf z0sv_C@$Ne(;bN{8k~1(-QrcOSJ1qlu6{O3Dq|ZBXZ-k04efOv-L6D6=T*Ff%Q1^;r z01T!w0=Fr8rtN^4Or^$jLw6M%+)H*63=@BBcw9UuQlDf9^+w=2uh;kOeEYL<@>E&> z$Q9*Jn_cFosZ$jXW7wuk`I5s~mxKkBhRyCHG(sd%3gSdSer710V2|&bh z*)>p>m#-q{Etnn7o9PUt{*{%O!uiyp`}O_A z)hs4d{FPJD<0wE$$$=Zd*)AyUllcZ6mtx-SE+E!;Mfw51fP9_K1Un9g;yB>l1Q-a~ zkTOI|!2u%E1K-x=@N*zg%atV$E;pEyF^xGo(4OV??t<$q zQ_nJLk(&nDtVHQCwb8;@cn^#VhMYl6;a$Q+db3zpt40c z9Oy?(CH5Ecb^^2Rz6IWJpSkMf`qGi?WkZPo`I+Pi8e+>{5oXbu5x~yx*TRI{)D(jiu)~1z9 zrH~|}98i&j;a3!v4uO&Th?+5XY__qLS-zYrsa6CNYRy=>5vOW=Pt56) z=Lj%V!2#wdo(|n14bOrfCVdmE4^c|>K^_w~Iu>uJgYwH}SNr?uyaxfz4R~-JCFeTx zlJ=}^LHfU!Mv9D!%kmg`1X9eIkOyc>dCCeVP!>JhsxdDgCl$#%S0G@j)VM~mKzghM zhp31s&zP#e1%pHj&>r=VWJ*dlqEZM3q$UIH_&_xYt;K(%r@#8!O z4L+Vz`?;^#$uo9cU>*iA*k!K%RB-QP-f6C!UFeSUd&j%7ZoT-Q8jt*7oaaL?wpn3qhXv#llbM952@e~;J*Rtufk?^S zLmrk&bOAzpdjO{|`|?q{Xx0Mzd@W<_UwO0>f1Y#)d*g0)FYA8?uMaxaoD-6`kIxTW zJNGh?CeXP_w1EvCtsWY79_S`fXPqBjYq)PJT-9ro6=7Ufbu~UZE6O8#8vcl$RhYlH z4L|U;{;F&5()wy4Bv>`K=~acx2C$JuHVoSmDE&do9G*U~!7ukh0!vgFPy+N5nLxYM z6$=k@pp!--2%xeasc8k0G<_|EcvbY7bh&F4yLE|>0YEp5^{ zk#OsCP3_`AySCq2M_*;L+tJzG`tqhM)ldP+bj(Uhq)*8bvAg95r8a{sgV0zks_`tk zE84{J-R)ig1W!SP>SS{2S1Gpb#%9!d_J)for-%xh5S@Eg?RhilOUt<&WYp zqheOrYTQ0FaNs7RtMP!V`#T1NBfSL8i}GE{JCJL&mK`p!eOuY!D;Gk&O_<{oYuPtb z2G%(*WHP?2ICeDILvhj4;HBq~f<(z;o|mAl@myP3q6L+*MaPsGe=G@+`vo!SBr=^V z{g?Y7SH+PYHzav>tef*`q;ckTT3xp2#8>W^wZWz&LjLE@Z5wPg@ts75A@M{P)Fzt% zUHBY16yI_wUs!T&%+61)XXstxRV?XfU z(xiovrh*h@q#P{n_(ozi{xjLu!8RmS88(BPOP!`~gk%F#B-hNd_Z?=lt(@kb0}4}K z2gx0bzXckNbr3X0{DB8j0VssxDu!OZ{gR<;@Q40sg@GRk~N_37==2qO2>`ln6@ z3j0hw_bRgAsgb7Xy98qfEx_4uF}lEan~M?ao*ltW#!R;Lw(_t<>zWIOy_v(Ij+(0A zUSOYR*U9M&`E>+ug+F|u&SF09RL`0M(dq3sSu*fynkX*Ja zV{ZcLhNQ>QdJA%}!Nh6HJ$2ha2VP{cv%AawehAhSMRB^vp@9t{@5-vtz}>gX#@RxL z-yha}5b#p9v3KU^RG9u9QiC5tH6u{RT!MKTW(c1{GqcEbN&+1$e{oQ68bFgg=Dsrk zm#qDW;sxZc!4AV%wI4W8J$c_sqygv0>?Cd|T0F(nqYufj;163hN234klEqgfQHbo< zS(9#r;($44Y%9Fwi|P;Fm3zd!%s|-RPJ>8)JbY3m6pfqj?%Dhugu&DfK(tC+Ls{aw+=~OT1DK!ZuUwxDljuWq( zS+E5|p4+onEbS>+|1`!#*zp)s;)D{%$2VypqM9@yBj^%jdE`;N?#O10{)Dl{=D#ZIQ;E^&2 zw+m=4(&Uq^ja^?bAqvT_=i|hQIa2=;72IM*y-H%I5mlT}>oza^cR%M4AZb)6hPDFG zTi7<{ml0-TX`mg@+vozM$Ua7}AG`6tXAkB_!?s0)?2S$9NIOa#c9l^aA)-`VKIRm7 z5OgO%Ap~D;9)~I@Tm3`|q3P9d0fxB-9 zkM((f91QXl{7NwDC^H0YoFz|-7^%uPe?L}tv#|dPRUCM=dL~t{=OfMBYpvrlGsXx_ z0ZqQTVa}X*HVJRLX=9q>r3QeWt^1QJsLqKFj2XykN<=?q&8-;Jd%hZ6ONBnECCt|B zoG33mxgDZdx;zD`OjI&G=x0OK%S#Bb!_2F^$3;=x$mWI*6?Y;?ZmgSQtuN{h^+)?{_MazYSv~qgc{g;i`ZVAWj)j z7_My$&1P>Ys{^m_TrK1VR-Z4d9H|I-#$wk=6pxz8lMR+^M-zS$DSSsrr(;H0jj4Hm zNAZ$Xa~w(dD1#}t_eJlsU}HEa5sBBeI;&;~<`WXL6d@{Wgtq<#2F7@!kchHL$TrI2-a|($ARKsa+dr@E(lg$)CNrn`2DD=3LT76bm3`$j4utPvLiHeJ z#`AxV1-sQaa*-zx%f&dDR*J){aC%erW2StPH5u9t3PJ1=RvCjg??P z`3XVQK)mcg>TT&gvSa?mq&6EUK((x1;Q)wD8`cR$-QCS(L$bVNB8YD4vf6X(sZm;A zn1jb(PCk(*Ol70wGraM^%{Ny&9TY^SOvfqnW8E`7{lXkZB&tjXLZL zM;-FV?nMqfECRDj>;bqjeedz8ob9>V_aiALmS62hokuVBOW=?Lc*+7!`E?t3T(t}h zM1ebBT(g(HHqu|#X73O%n|ar`fkVjag{WyO*=)b&xhOT|eWhgZ$q#vWd@su3?NB#z zd)(g)^VQnb?rwAIe!fL8_=G-`dfaU0EfLg=)IbO7m)o$dg+_$leT9btzK#nS1mQ>5 z80`jRNEcM&0#?*x6c023Q`>ALyn~jNhT{&-ha`_tjJL~q#Dgi`J>&^Yu8`ec;_{Wt z=;7RZtwVep-|!9^9rsBnvm3)nrV39X#(s+MpZfOh2?dJ%j<(=_>Fs6V*Do^Ehj||$B6l)8Bd;PY#{4?))74ffV`5{4b*VzjDnO+1dW%;`CZm>mOPE|3ozrsQO{MgShQ{ zn6<5a=eoNQ(dQfr7>xoeV&qbyGE%9zpVw>#G)I$Y1ocq?d8Cfm;QrQ3hFy;n=FCre zJ!Z)78uk7iUk(l1-4oW&&DHMZ{`=|W`a2cpq(cDE7}N2f#M8WG;#@Jcazy8dsNMCPrJLXlgsd8W(X+g6py0nvN(p%}~@CQ#5u>XCALL0R!)oH`cr@9yu-Hg@BuG#VViX@5xLf?*yF5lHQT*St* zs#T{1kuu7;UD2S4uKwbv^sHhd(2Byw;TC$jtW93JOGA^2RT@e}sTSn8)HZNt&-5T# zfm?^Azf*)I3G1Ltx3=rITk)dk&?JctDYEVAqQ|bTFVF1QlmS5OnB#^-hdmVR;#i%g9?%`<0&w!T_x6%Vi4OP9 z>>l5~y>tL9+$Dpm(!&XT5?c~~-SqWPXv2*MTIMAy?xM%37fNwPbWzo-=R@O8U<3`; zm%;~ZwF79IhVh*IRm<5>M*AaXLq&6JULaeUYh58It)JVgC?8K&TGm`_C9^>kw2r6@ zMeZ;i6DSD}K;$7R5DyqcbbGox+IrkSFYk%R)A1!Td424@VpB;K@Z(4Y764>EKCsK+ z;VTJ-#UjH>Ospa=S@j6rj#4(0N_0|OcF?!)#f<|Kf*X;Co;fY4Z-nB>gaZU&x+Xe1 zETXWUL7{nC0*V0vT?wm8!)w_|n6=T6$GIgn*|tA`CRQ`@W)A zAi|b{SziF^Bu(8wK0oA}r(Z#J=qUx1S@#DVeHv{91EB;Kh9Ei9frP`{gh@Ml{dhYH zTiwlpE)B8~hl_Ip!B!BEY14h+r|3Z9Xs^QI+7A)4tL~?vmDbf!LaieU0x5rijPs{A zl>o~1ubH_3<8?=WlMV$Ozp(8OhHF>l@P}ZaBDf8Nx?)2S`iDM(!{a`K$<;06@KE61 zB=1D?wBEkWeOqKSUI7|KsFPg`?X$yd7;Jc>x2`^}Yg!xEEXZa8b*miEoH?S23s4lM z{uG;5qPM}9gjktj2=X}MQiD0Vl|9Cl5r+Afv|!ijXyGY}a;Pj%iNNre-}*w`#KuKn zq)Sfq{gn-uXT`|phI@GgRY@Ge%yaFUWXsx{R|p>7x;P>$LJ!DyF&-neF-nBsz+u8N ztV|}RcEClqW#-V71|XU}KpuMHq}>dI^Em@ZIV_1(kk5EHgPXNeK&QbnjQ=Co_)AC{Z;xpF=#0{?cp*7qG_GxJVSsLNG0pZc5;A`h189?v9JOHLV0B_HAgBG0n;9(qfdKO?W zp+4AL`fBI==|raZ4P1?Y-c}{>`k`>?9Bp9!N}@&b$mYJ-oO1#2C@7(Dpp4>i!Lh`O z;{eWRftrg$NN6sv#~q`E^K7ay2|Ozs>g)z#$uStHu_k;M_Z{|Klwh%(47#YyU~TnE zieg5iR%XrASj|S2kdtm)Y9T}&G8%EdGp{gtf3X3k=UL_PQOdtw2v7rrF5I~5IO^Dh z&Ya%xjX!aW#*ukq%ee%3UP?wv<|1SY9HV9T{5_%&`(iSTc*8VC%n%$%2wCm{`n>v| zY>ocX6*%ZqWn{+0{J`8PQ*z^HV@Qw*@dk$`a~kuyjMWkt2Gbbsgqy8wTk$jxE3{5k zZmGh;xtRy>k23odwOin)kgQ{fk4uZx&bc`~V)`MoO{m*woBa8|b4IMxV;j$bHnNI`{)qm_{*SRq$$syiaxzpNn%Vt_t5NFWS&HGO!xNX}i zRmHO25uOlFzd>&8yKqla4Pb-Jf&!EO*am-Ar~;C#Zm&OO z)?r>;q!IBL0Uc4DAxC?ML!{5h$n|W4@ad3r;D=&LIx_;g0IXk~6es4v_qfp_9TiM$ zL6_~Yfr-SPd}RhB!P%kAc)|* ztyHO`{Ri@h0Ql4tE=LjW{gw0niy4TbJf+BC(I4N`qWVDl+XGJ?uM9_v1Ek~>FRC=% zpSj2Jc+0)FrwG!P$JiZi7Lr+h6;+2Zx39UktCza$8k{L?XO1AHDQj+Az;`Ojh9can;j z$hP6`_4fM4S$|#UdYCPwyz>h2^9di@UWIqsb|YY9Kef)Rz{n1K-)Ox~eNGch>xVWRxj^Q14V|0tjsPV2 zvi1kT?`Nzl7*yG1QviHn1>Tcw-!%w4vxnA| zCuXaJZWx@5%u&<_(8X4($Jg2J{qi||JWD6knu`z(BjMi|&lB7h?lt)RAPA2RB|?CN zE#3a?8RaVhr;*l;Q}nq(E<4}lcpDX)C6?uE-W2auSw`r9^!a)q!P@>Q?lW^M9kO0$ zT*p$rE%m#6*gf=?6rhwmg8Tui zmly<1BFC+<^W7>XbF$(=!Df=O>6X=110TE@$A_Rzo-J&;Ll!8M@-BYYrxpcW%y@mi zzmdN52tgvwd9;?dd#Z(=vnEbFQroSsQ9Ds_cZlM@d>HccQu+%pmM>iTzo_s33R_@c zVf>Hg$ZmCwf5kZn|F3tQ1DSA0B+y4{n^cA=iM^%7r;H0rGnhEmgPho8^!lmS%^^OJ zdO{()?J#Jl9(r%n4u0o?}`M(m&i^*;1c$$`f4|;{(EuC>z(sKF?ode#Z)RT z971G>h=CA@^MUWX(NKaHoIoP@*Qs$$wc#cx{!>Gb`5AiAk3cHJWr3MKa-eFfs&TJ& z-EN1D={70MoU+aBG(>zTKMNn%p!PwXdMkFJ^NIK7Hky-*X@GzfVzhi`9nVT*Fq8V_ zvw5kq+nWXl60IN^d9H-ij zxnAP{y_<{ZzBOk`MsDT$r8rDqqx}rKnDOB@tbdA9oz2A7MLlBehHZdu`TI`ddT^ocP%ec*3W+v0TQlF_AY%5`uAqJY+fZT8j8dCsKj(SV$yw68E$_iv;xf0#+j1eri8np@Xv_=N$W@8}s zQm7&!j6X{Nv2k=%|_wzO-PSsBjls`9FvDboZ z1(?tucHieVy_Alt=Gb=69}ptQI#^tKpD(7~?cTJo@y}q=I<&)I05k+;n0}7Ja2%uc z)+!MO$vtzgD8K}awpW?>kL^L0xKL`*e!8;arUy~P_wFiIla)&}+%r=w4J)t4njrVA ztWd*rPu)#{c-?e{;~&?V4LIB(>@z2z^yQ*IJGN$wfeYgK>98w*TD*fH8N{>!JrRTj zz6Xn+K3JyCO2oyHL&cM?Lh4&@XLWU?tDrLe<=}pXmC^Xi`&_@a-@{sO&C-x9&7%#a z<&>R%_8mQ$`YAQYDl081w;4tiVU z{3Lro2W-w_vR>wRIrBjgdI9ZdsA@Y+=w3>>sI=_K{2&tnIp`+R%Np`$FkHyr@zHTr zd1dWlC>3YjkbvzQ1Ko9N9=qtLI9Y6>yHKF@g5{Dmlukv}jtN_Q%0ZK8$0>FElckLKx}zs?h;dtoW3ZhMS1r?;j1v#&zS}$gu_sbjO+uZ$?`CNup?8 zKy)$tu&Db&y1$PoJy+#C$L99nqY3T<^Emy$Nwc-Lr>!#YIfsKp@xve_41T;|_E0EN zYpa7tP_hHc6Q0GiC%bWAqK8EKB=(>xF8{_UqK=BsJwfVo1aj3)6sD>qP1+eD#~}~_ z3q2gPoGq~x3#G_+K)kGNQwm6A#)e=5_!I>OHBpFWX$z!OT_X0TY?qWf={(jAc}E$H z*VhJ82pw3hI#!4jtNSo0&FV!hb21-eN`Puhzg#v>epYyvuJEh%3kC6fkz&)k zrJZ^vMMLXkrzaf(SNMGG^BwDEX#dZ%gX6!lLplBvq;F1@iu-qT_}~5;8!g#qInY{k z$a-$8m2ZyAi((!XNHyP#ps}FonDq4thxaf+1!^7%(#bl`z`=y$%S7x!94-H4M11-t zC*d+Q&*S?OoA){S_W8%dK}-U&_$2e{g*ZsiX@KPpX!QAZeA0B5uLN`U@km84C$1%H zL7K$W^5bS?JnE?0rW(@*gFZjQA}mPack5f)cP&8-sE``vo&NG9pPWdH(4`)w>FAF~ zqdjv=-y8#!HuM)-Wgi042j2D6cC5kGs|_Gc{!C(tx`t1Qs(~a zyrG|@ilI`f`#c6vv)p76U&z=G=h{u$Ztmv^O~mrPu_BOCF z-h9!nmk-@dWC)lFziw*THq8yVTX;##V`}PLFaqNYw#_jqSaV4w+tUQjL*Vec%B~Dt zQnRMQKRQJgTRXUIU~lT@!*zhh1_J>@>yMhOsW+c(*(s{0Vaas<0jme2`)}NfAd!&5|@lUG3<35=B3L z>BEF7AASZjR0}n&g*Gl^8b3+JATnrw+p1dD_!mq1`5lK1RY|d<&e8y;eL3NBOi&v& z4pF*5l1ou?l+jcCU;T$Kqf)1c6R%t%>&ug1kS78v-s#0@6wk1p>c4QMwaxQ;yr>K` zInVRCm%L0$e%2Lb-%oSWB{5Q`#`$NxaZUhS)YzVBps=!`%*cYod?E{#y#9U-hjVVv z?lDKKztT$bh2hq{9oyRjmz&#hTIE`S3l9{dhF=H=cKtMq9A^)Tx&eMt_Gu&92@WbO zD;d9_w&Mcih(IBA%zrD<^`L0Yo*Xs6>_LsB>>1c<`dxtFYkr4i4MGlAAaeyyh2`ej z6{1)%b|`9CAwyAnp&xWI4}BizHqL;c4M)pv@2t3P4Slp9qp%lhuFm77)tY1++H6fu)s8k-5f-tGc^ALjZ7W{2jFEgA}5>ek-z_qU;s^?0Ru*Ky+m8gU+12_&6`HAm$mGac9V?0LV@JD^T1_+K{qe^>s&!ulT~@mh1!c8eX!XSWvN z#bnt(3-MOb-)9UYx37~aDe9XQml>sb1Fg{3Me~AvME}>PQe3id$#?= z3KMnTQNy~XkEeRjrFqKAJ7&<*B+u^kykx!BX8-AHx^waIan~}HiyBdRoACOBi5O@(^;w3lpAuMJ=1>yObAH9-@YK3SP_e?k+Iqe zm;glTUrpj9i6?UZ*b8LMNevWt<374q-@G{TumNXvhfXf*J5bE#O~n;sS2hPG-c>LX zq6JyQhF!zR2vxL#HR%XKq%fuH_odDYHI?esV`JQVBQ*^Z6W02UER3*+aFcX4@p&Nt zkUX4kXBm#Fpz;fq7cD+k5Jwn*fnX-8EE0~GaLZ&F#2@^QAQ${5V(L`LAVo+L5u|?R z)Zkbh=#c!=smeWplN4rJySLdfx0FnXa_58cVAjoAyvE82els=lO~lU3vQ_lwLlgPE zIWEi3PBCNe$saJ>n!r}}Mx<9*Zy3SAB=rL!VPdoo1qOm}fJ=`s4A9p$0qM?ExcZg> z!j;q}=0qI@L=uCTrw->USYS}-ICz+Yy&;4IaKrn#VkdhP=h<+GfbX`1=g4b@cxmgY zGs(g!PTiBrL1Y@kGT=DW1obR1mTF5st$@ZfU?|}2zp&O1TX!zR3=!=Z7j4X0OjnnQ z5qCzu99}z>9?7@*`XHUF*~3tTtGTzs7rI&OwrNBRO=l6RvopppHIvYpddeceVKz3kt)Ot{nmydI1oU%snz)~In|$qo%u!< zdfdfOM3Bs2SV0ljyZ3hC*9C}Egvwh>%_j`KoGf1AYPWdVn>AQ1XC^s&SBcqY6Vu^9 z^W=!*#0H|6MA?0)b$gNrFDZAAItjVp%yE!-ZG3i*r+wXiW64nGlVL@`5n{;0mV_;% z(FGF67<-_n_B3#IGx~*$7K*1VG?-gk{8mw+Ju(U8I$B5?pR-yETORc1qNDDV43s|A z!^*8Bt_Klt!Pei%u2x+cwfkMmRFN$>!AC-wklvjhcwGS5oOS!Dg>4LNQT|O@3CBP% zuYL-pT5;;Mxxs^)yPVa>$Q;&t!$kJB;a;HNTI&5%mt-7s) zK~f(x;hGdaqCVVThPmnsnOh$fl26kF-W~#sPn74}`myI8(s~ii(g19oWo_x_#Hys< z)LQ8TKC(%IP5I;N$*+dYzXw)HX^n?b)_%+qQAGZQHhO+qP}nwr$&}^M9w_8+9AE zlg-u26(b@tVor|3_23SRU8~pV!prBbvRDD9;HdD39;W$VpwBo^2_Jr-V)i_LZIp+s znz{Py8q$krk#D!%=(8VV9xw3u;WWK@SJDppI$0+YEF^6)f)D*Xz5RQC0cahVWR!4dS&>gou~ZaYX-yNyy8H8}%GNYh9dTG^#U16J@p?MCRt_;x`_6 zZ)O)kVQGto)aoFnbXLf!C8u~QuIMa;1iu=0yz71XL&az`Csb-TyAZ9VXexn#3btgY zsQ9z2ZZysMMPUY(PhQHe5I4Ok__NKNc5K`>Y#9d%o%pP%VK&O#yPU6}E;Q6!Wj69o zTGy9TN0&MNweYgVDAe!11t+_(SDLCPL={xoMpnUqYdwc8$pa{vdy&XyNI}8Z9>@C2 zzdAfpCtKFUj^S9N-E002x`wQ$7VF1Bxbi@f7kLAWEqHVl@a6IETR2G@k@X&#ro+ZV zBA)-)uo|6x0qV4-@J+2MMB;C$!1fmgsXvi(DJDx*WTQybLR7h{=Unab_(>hRT>gd{{DNEES_8BbG zG1KbI7G95+Oku-Y0j*^_Ev)2F$^DSv1kA~B3%9*G)6nTxgh^t*IQiQzZ$Aw}7$|bx zE!9bzY@pa?TiSLva8aeo>Ljgg0}@2K8R0a~KrSk({ye6{Pz{b7@sfN%RW=}OG~Mrj z2y$U}sgZ3%o_THv^;H)yx1l_>H9vVQLteQ$?@+eJO2^bYF|pJ}0NRWf+O0Sp5Mr(B zwl;crjxdhG0JSt3(mM^~TPl2wDnG?mp2g%FO4*V4YKh=Q=8uL#Yg5V)Qr<{e;<-aD zJOJv_w6iIjz&jG<&kH;SeWHsRkcLR$+2IW`e1t0a@_ytbh$_bM&k<8HQ2sh6We%aT z%HB^d>iVd6{eKe&wWVmKw==oiQ++^~_65ORqrngt$ceyir~Fs##lNaCcGL}B)M(x> zZVtp%hHGnSZ=hjc@X%N=8= zq>Hn$pv*txVLzw>*Ay=Nz3$#VF7_`Ut%V}aSUI{6`Uj7&#MJX*SFlyB%G&5Rj>JtU z(NlP5*f`d@_r3sUjk~llK@AIbf9^e{_`V#mK*4^+ETaCg%3If%VK>`DvOS$rKYH)k z@qh-9)^=<+7G?LVo5koI5s2CYisJY+O%5_=B-CqFV!Q72xvlo z-WKADFV+Oo@DqzXAc^Pm7=#Us%1!T=mTd<(fmP04-cb8$6)w|={PT36XxPe$V-6#z z2C?D0?%qAO?aPXcUt;=dY#gr4^pKOV`e>b0=Goq%aj84jiR%TWm~6n5yw(3i*{qnw zhRsC_$Cj>TiA~I*Dp#~CNu5!3_`;C>08n9&Nu7(e;Nln0VcW(yV%fn8AiF7oN28$u zhiD#lRI$yJNbAzWprKbaYICy8#Jf0eY8e?xAjm`XL9D~pXgBAhR(5L-ml?fgb<=WS zAQh#opW8nP89WKe_ykB_tXo|}+}_~=DHat_hF)Gea_vP7*w*C1>2QT{7X&jyz-7az;!W{Ms3ykh()nck1?UhuKn)YN}X z(3$SF)fS-K77GOINJL3Ly*{e$8^oV=kcK5E#pq-R%sBp*Wp&Ny$ux7gWjaIf*o#b} z%e*X{V~KduyfE%B8Ih{pb)%d>D6^JzoqbPw-J>YKUQSe+&l`Qdxlfy16<+l;?3Sx+ z-uL@>AW_U*ZjPd^j`RpFpQv%RReRZg6#@AvXmGg@s5B?^PkZD3pjZD$Fr!@eG+N(i ztAES)1p;CV?fL)SB}T^oF*~B@Y~bW>XH2K`?_dz36E(MTGIpR7wbFMo7B)7tH8Q4? zGPW^wGQ($LXZv5q`(#yjC1ll=TF{P)wG4hmnlP1C^2!APc>nm77QrYG6 z3fEol*PokP+G4$_DfD2$eRdLRgOjNA!BXQHXgaE?s4;44@&`y-wKxL04+)tlW-$U7 z)_7sX@trBTNbA6)``%YdFs7)2ah0CXwK3OMwzF&uSzDJBm#B2X{u^r!CW+f?9uJ59 zfrf!B_x0fp`JJ5}ou`x9NlNmic_8P9@Qx|h2&TtK2grXaImbz-eh+OW4G$Xub9tK> zS{gnfwBp$1%L7P>^GWP%Pk|mA8xxm}0BUUkmE4H)@O(ui=Y7S)QZizXGiN3T#>mIT z2gXQ7=ks;*VDt0g^k9*W1t||14N*~(5HDe2jUF2f7t-#9hsNjM+56s}yc~5n1JN|M zOj#pRhQw*Ybaas}cg);MYG%*B{q*ipEQJPE=$a!j@=PyLeP;g{?LdcP&_+&COiWSs z`dS!lBiZ*xUFbZA(@{pE47^ijCeTbN_r_o7zNBgCQ$h6kQs_uC!u0V{$Vh`jjP_F8 ziG5P~i0S52P9~s_s7#UK24B+XAciAG44rADCtZSaz~n9IcBF~YF6kChh0?WYAnD5) z+X^3)tCX=6xApl}h?)be4%n%E-ow4)czgebSkhuyb^qy>2Nn(5hm9rCCK)G9sNgEC zD&eX(s%eWC zWzUg_fWv*uI5aEcT_aSEjapWyJl3{}ST<7a5On#-M6|M66#Qfm06HlEgW-gL3wX;} z@Mq`y7uM>4E8%_HQ$A7p>)ADT{>hm~TY{kPRq*T2;zZ$@PgW+|(jKm;6n`7I3Uc6$ z=jzILncTS$`sA~~Uv)>>3U;zn=z|bL>w~bI3s*$2Q$<~5ZS)i1o ze38Fo;y0!A2JVH3ST27%%RXD&>LRj_uQXa31P9x}1OzL$~cu_dIg-SEGT--X9%G08Q?3 z8{4hs$K2JvlOKP@BM93ka0lFeC%Fxl08B*kj1y++TQN-nUHsNl94PiRXE$4-^P~QO zQ%cy8{*Uo8v`K-%Z>7yS?-E)v0wbHAT(z6w3M$>~iA?lNMlxE)?)wN-u==wvGvv0u zJKY<9vnO;>Ksph*)Y-|JE5CTayTl^!r_;I#_!40#v%Yxbt$6GUKQ#K3U^Vu_D>f&l zv>rgsVI6pa&9EOZz_uu_FrcAUahLZkkk0;XfS7>l{*Y(}vt+$do66eFd8xO_X$r$H z1qH#whL_ysg0TZES+DXGgx@cat|6am%Rb_p{jo&Tyw!q3 z2YrKwtF^PFLe<(hv z6VMD;%{KWAVeTOT#ruW()|WQ<+Arvtm^HO=JUl4p0s&m`0q`O3-)-{o2p&9*#*MX@>-@3~lerKR^LH#z6je(6HHWU3 z*R%Wv1Artp#}XJj8$C<{A-fEg3^mCV&^}6K`IB@RQt|9qmc^IOl4Wr&YJS0$&Mevu z;3t8_`{yZ^yQbD+aM)-4wyerY(}Q+yS;C`?O#40M<_-0W!i{U9A2&pCUIaOURQ=j2 zni)J+P9gR%#XUA0PsF+z_dCl5YuyoUX+yJ!$aPmOeb0C=ykZnx5TwD5yxOw34Ll^D zZEAs+MElv)qotFhtU}V`Q33_WL1bqB=_J2&o)@Fwv^WB*!FrXs;d{aHP~+BhghqRh z;@sGiH@-F5&dl~q0Id9P_;3S~0vQw#bhgBukw6@0a>$I2X%So*QD~W8W!JklJ$M~_ zGd-xI9WU&_pQ#})^eA5XTvQ^OXor}v927v0D6AM2Gn_l%uDe5+8;vI|TB(T%*gWr`n}vEd%!WWS za93*D^<7)NM@yhxOJu;B=9X(;shkBZVFa(Td=ByhG3q|RxdZYs)Y=55&6(w0oKt#n zOxn1&V)01DuUalC>{TQ!EnZ&{T6^J2-p+0t?h=>E9#xhKP8&@`piE=+3c%l>Sz#liV8E+kOsB{Mh8 zA%GcwwvrUjn!whzVLL8BmXC;iJDPh=@7tfm35UU-#tc<>-C5}Wu zC3Md@R#Tr|6l~3P(O)O;xCSu=C`Dw2C{CHkrY9|B7G({7nLzz5pn>OdFKB@=-0_hb zSIgOC`}V0n&|?nN&dU;hLRlQ@G*mRLB{kf(5^jc3ILW3DSzMw#5*3 z%&ZzE-uzknH8z3{_3O%&s^5dCwz>_l%8&Pn!AJ#6=ahw285vwSHXfduq)lCHZ%Mz( zyNw^4j4U=r<{pNOVLM!RBuH_)9$g!6BCU^}a#oOv^t9(!dhc%sc7yEC#|dmtZTW~3 z20L4_Hyyeb^7R)-n(=(aHnDJmr}9H}oJ8L;GU}9UD0c@&0o|fO{yL!&ja?07opUSY z#~@0s&UnXrRox+8;}0mx{d4O&V}ZmLrPal?&h~nFbbV*ute~^q)A@MoXK@{XV2`Dc zpi*bayu~dw*5+Kde!N2)Zm|^LX@n@mU{W;7e%3?qy<8dergj7o`Eq(nRSp+EICOW=l z5+@e_v^u83{V|$9&i8A#I$r)5ye^7nHnz&ZpKbOQdOcKy*V3NVN7HWdXIBW2_Hac~wax$A{;zLM+S|0ET0A>y$Ijj=2W z^EK|jUGzw6fS#@#7vDE1V|bSzYRR{-aDVI{+)uc3Vip;Pd2|cK)sc$IpWT7A!1A37 zY2j-3GdU`_d$%kHneNTZlpJGbhq@JrE|#1KDa0U20dvhqlEmeR3#?Uhbt`~oOuhJN zK=YcuTOBP*wNYjjch7izy(H$cRe9!OG-SuvNls%wAAbHxC`K(#C!RB+D_otQKkHuu z6uJ>}t(ityu-}{8?t3V(nFFg}#FhEkR~OY4l!Y#pfLb#8xN7|S@uI`N;8cFy_&!g# zbNoSWQRKy=y+v$$6MzFK-1!@EIKR6b%!%=`g)-v5JBdag?vmCVaH+{4fMn{@<>g** zs4<&bFLV^PSA{rsMb_WGD%A_!34+dpN^Ku@rQ;*R?HgE7A5z2Ss5^v57tf^d2+V$0 zh|!*5Vq~RucJ(-$i^nH>j!U+<9p6y`CT(1f<1BMcQ=d@!XJ+dYB8mfgroT}9mG zK6m-r3WY9VHj*;o$e((e)6;<|_Uwclf)=L|Zzz-bPKLzt~%>1bv+b3E8vljKh5Y-rYHyaI1LM z*THNZ1vbkqxao$+DFN=C%@}3jR3Q-G6(Cq3@+3j!2AqC)E)SUPg-_5KGs+JW+~0x( zw4rc*70m0{7d~Ja-JeAQ+{ibi4-B1L)tlOFoh$05B2^jAaDIv&ou;^7VyQ9C%1p85 zz{JFaI9&2P)MOoWC%sZfx%mX?A*{(~;VwZHMxOkR7%IQsXFfkJ>5gHMhUyUy zdp0~k9@eKPl(b05DR4@TUqDWnXhn@wNZ8LI(pZ*0K4f%nj74jrkC$@VP&jE5J^s}I zclx_O&T;z6{rfwJ-;BusZ73xpE;b>h8Ao7JTj>;GGEb2_LM$fIQp9K(&ok?49E=@s zBqs{{nCPC&t*Kr4?8z!t8)9+s11gO!C}k5T%Le@6^iC}@PbtEj-!C>ze-#e3ikfL) zm`W-^k}UK262Pc$Z*}#6E^-j$HBLcp)E|mE6u~$zZ;^^!END|4r-!(r`3Om(YM!rM z$7wa-u_&4tN8O%OpdFTkEm)(bM>By|^o6EtRMKlHj<%w%z^J%bC?%MpP3@=_IjkT* zMpegI?QUGqsALxoIcm`u&Wbl+l_Wo!9L5;G8qXjOGZ-J~p@4xjI{iWN`SPBtma&X8PZtahA5IYc z4a4Wu4DK?I0P{@W8Tf=Lj=mJ`#L|peQ~1=<=|PO=>_}9O$$?O~>}b=04a^_HwLGO1 z(?BCv{JWK=VUgqrMhfV5D3A{>?TeKc5L@ zn`jhN)&&}#+v{S`ifH|;U?U+|t=~C$ayc>2mBHcpiF9V@geG=V)OpC5vCo3_K)o3h zScNTnR~c3a9vBrIGDQ=g5v1U$vE(#o&qBksHDPw#$F;Jw84FMoR16Md%l_cor7Abb zkLuJmp6?Fm(T)Aric}Jfhi-+R`I86Qe9u~ik7Y$O-Ilo7)8e94wd$LAw>xmjJ0aI74C?qsO#2Ox;bKf~xYkB6{!j@eshCCYk z&dUWy6#BC(hv*3Yhrv7z^zli$VSsR+1O24oy3jlO5LlO6L(z)(cp0z#LaTWw@y%YN z+y6rQwu*S3U7z|B!Z#S&*Z%n-M_ao2NKxU`-0U4)2wJjPZumNCGs%$DO;X&lHy+y8 z{Y!LnnpMbG(lD_VrPs=KhPcd&;6;GN^-Oa(MF4uLV)TinBi#T~Hu1dbZzVxkXu6Tb z*Mg#yyNl_$$|-69&B3}n5l7qV_Eu!RPeLKd)qJ?4Hyb!E&$U)z6r6;SIOIT;Q42tU z@&oYK;PvI5TR7UTB$oO_Ey20Mil^#cnm;6+G};;#{fdw8(E@uqn^%`nV|{r^c}M-0 zlr5&$yGybxS|@rNm-bZmgRsE7^f7*qljhEq<`~%oWZ(`r!c3;PhrNu&=MdCH!>M!+ z+3H?qp}Nol4I^9%0N8w-VG#lf_Hr!)&Ey8}8xZjB`(ytx6JFKvZzRJTfv^C%umZ6D z2Vgr+1N(#aPI_w$%^8akUbziP_S+Nx>X=z?WgHodbhPIsLr~pk*G*s%%r7FJM4znPyEV>}qGFoxY7SW3FI}$E!{sbChy}75+2(i#;Xz{i`#V+kcMvo%%5gHVc@SLj$@ZjI2N|fOs=MlO)xH596L|$8&uau z7t*KcA2eZSg^K?WH<{@FFDUH4j+-n@^#5!9&0Eb~O;L5D7h#-7IdbB;rD!>`$+=%% zzSL#DL$mTAB!DZ7+P@AIk=Ty_f}jeFK!4Xr@{h49{8B}ka;e3rMs*8QGq3jb+PRnZ z)#~fQ;OhGfh-psxspj7JH_%M`?d^AWuWMu!23Jb_xY2C2r{nXBG}Z}lnQN`&ayiga z2Ya*6j)k>V+tcpq&?$y}g;W-+DDu`2g<&XO++W3Ql-{2s-e`Rz>%`*IjqnA>8R8G4 zl)2GH?VKsKbg3POi-}urRBE**(agAt$cQE4a-Uwk{>sNQ!+J`=N=5ld%JCwJ?1Z9! zfPVAC=ZZO{WedDyTQRk$mAu$+h2WvkN-uBL&$1RXn5S5IN?YqLN~LOu@Mt-6B2k_C zLEmc^-{p>LP1m>g*%$fiCcvWE3kx!0ZY>#Y-smv*j6B-ko#+>!O zH^$7g=_ynbs>4w$!xp9=sXvW@>*H4@FZ7=2siX9aCe(wITgI2h+J>mn46*M6*14J1 zRhw%-hQ3a*cE3tJLO$X@Seku40bcS@AJ-IzZTE*Bqu;DP2XBQ)+@xh>UXM>NrL!JI zo?rC#&qGj1z8OauUtdRclV;<1k z!!q_8e}HixyI>^X&;9~%@9T5EUe67iW?3ESE3({(94NW?JNwpv7NQ;16_q^BFqE#7 z>t*F8=4Kj>vluc(So6AR?S;g)vUk$eUJ@E6ZQA9DBqk|}`NEB2L(r}JtM2u~>N@z^4d?+5 z_604$PEcfxVTc6VEVfc=h@4TrblqL#5rsOWv?mlT>Fs_*Hmpio8&|VwZO3gF>Ysxt zs2s$H3*;G8or*e7A?H#w|H949<2g4>E36;P@j!}){<7aY%^jMhQ8>QgeJ?`W=*oeQ z5fur9u(F5XCNDr7?iZ*8(&$DdCyHtGx>!$PlJR1JlaY7Gw|^Bo^&iMQrlNo{%7zsr zF7>ZDVyAwFlvEKf3|#^kQg)}Lj_csM9Rv}0Vq)LE&8sa*5XrclFQkuUJje=MtT?p9PCmAIs@`c>1nQ;b#CXRDTYG5V%tEz=yOPXWx<&B2sH|Zk=WPk0t zhoH7qd@PO6s7RQRlnNaB^s`}7y6UX65ZUt6^u@O zdRIJlstL&|IgvlwXE`MO=FLEW$hd~SoUMT?X~1rMhiHY(Mh3J2#4Vj24?%s=-+AAC z+$7Je$JhC#oJOYl)thsedvENiyC>-1JIEqk9GsGoY%ik9zWi=>cASJ-<42(oXAf|eX@(Sy$r#lbc%#*M2>qDVIadK(mCj4!PYF|F9 zaC@v0^)-@STjJ_(F)0CzYSZN*I|04-@DfT%mqLK;gr^qHSJ73RM6iN`7}T&U7%j*0 zp|dlzF zA)@29fsfg9I~)VQm0An%aQj^Ms0Lm0r*SMa7f3Z zgmAIMQUHKNo?Q)2a(=6K>*Q$D;Ap@wyUC6qzo@y|=PAm}ya%OCQUJlfeaI8yPG{UqGi80-Y+j?Gr z&axIC5?BlKqN=Y)H;PX;av0r}RCR08%SRDs`yl^(l$+1m5Zyisqbnz>$D5CxkCaUH z0C*EKQPCv!#5+(0>Rz24CpFnQ9^~#WM|e5%-8J#tpBuw96g*1dvxIBYEp2_N=oe2e zR4wFn6g*sqf_K#7ssS7POZuJP#80p4%}$g1s$V%c4|tC+hx zF(HTQUE682`yhdl+Bz8;Wcr!o5kG_8H`RpMK(wkVJ*uL?TB!>RN6Q440nK-jNo}Ef zRJgEl>-3?(2rScFwumwVdZ_6j`cJN?ZbE7ND;sWz4e3z?)cS0T!aH#Fs{r$QvF!pm zr27M9a+@7{*|d~Px8?@4`NiTSK4cp1{Eolm%lV!TH$5@m_>~v%I*}n1wwcl)eN|dn z@uu+!k5FixO;Z{Xe8P3X!KYB1P+&1zwpebduy97ktg&qA%i-c4LQU7w6?>p5nLA3F z^Y?i~X)=EbgIjBHX2i__7sBcgRP0_u1I+Uj>c`{d#RK-*R+l+djVmwBB&F$igZ-X+ zWLOo{IN!IgD2a5K0?eI7M;OD0Lw}>_uWa-QqQ2(6*`7gcnL|d2$x1}lRgQ?r_3I1E zI_CV_&SM%dJE00~Jz%@UK9@lx9vrPfKxYBs1W=<+zlIpW_wKvDU%fWRtKhm*o^YKM zaCEuczr6R6dD9ng=F7{&YhQ~Wp-KbV*jG~Y8jB66SkXw)h;9z^HqigF(?lui>dLT_ zte}vfVPU%HKz~s`nMAFo63hs9A$2#ixwY59+&Wh5#@veEN_9pbK=4w!GN&dj?ICLA zY?^Upt{7tFJ-Pe-Vz^QMT@e2A?1aWvSdb|QCV>ms3hhliO~8LGe9%DWbHgM>$=4@~ zR8^<0m2)15i_|`x8qr)IkcH+sOQ{-v@< zdf5+a3bO-7F)GdBv8HK0plAMS3;2HIDi!L4%N~T3`#NTrQb|xR=SDd2VhbT|>Zaj` z(cIM4UG$%CZh1aZrv&JI$}A|5J_$hULn3Vtuf%&O|4S%{xF}R_Am4{Z|6KZV890Hd zm3>|}hZ$lo)}ONxILg4ee#LEX{k<7E)}&6CfFb<8Y?W5^h2Fd9a(n~+<_gOiez=o= zM^V3n+>`Jxt$g-E!csD;7$S>z3mrOJ&s;BN-S{38ed#-I%fP41W{6Za3Q1^;E5~#H zrPk`hVfiKm*3GQT_>J*Vn4mU2xTB{Xxl+ zfZYkC>8Tfgl(`_SB{M4Lt$eoAwgjY>KVsh;GL!T&HIoGgzjmw+7gcH~JCp@(byo^b z+Iu1mc9)(z<1aq(`DV5084I5dNagmB)df$Aea;gZdq5N_VQ@_m+8pXi1o!6U= zS~$6Ad}oJ*a*+D9Z0%hOd3jIkEqEsoO@rL~FsnRj06S3vC7qe5?YXAqzbj<-80jyv z*RNAyamA}(!vw|7MK_tE&vIg<2en=Hl+8n{8jD}f)|4ILG=N3}@7cd`vi@;P>nHc#aWJ`voIpe_6jWqH|pS#k6*OR;8L{VRJEvW>@>3)`GI#%byeP zc$l__Sxpqx!Tr+=u0O+4gnylxb|vM<+kt%ICA zoB){E zQi!qovpT7rnhZ;yP4y5L_?eoPl9r0f+R8zNS$|16bFY?oojQgdCn8}*5YDWS6pi!N zFZL9#FEqwn;zpZ1pOwYM5rsEqNIW4PfFe*3fn)GMPSYeVc;^VUPv;)Z2fyO5&%f+! zZ*S)8=VvAcKz}KGm(9Od@x}j$pUyiS#1u`#oK`S!^_7neuU#h~L(BmSX}+QCOMr*au3 z)4l{SbFs1M{rAokoWq!{{2YO=019?lyz*Vus59q!qFQ_yf#^0$j7j)df=x8Vb2c-6 z#`ossNvLy%#Dn9jt{Cu@h#Zr|hf9U*dIQ~6`*16WZ9fnAS!F1@`|lTpfco)?FT7Db zu&F{FYq(J4P(CuqUukV)jDs7tr6tr=1E&H`^Gh*&L7EcqaTX*VZDB)Jj}6*vn<^X* zk1maWTZ7C)1}d@mK7>dSZ#PIyw-MWj8v{|0;-s>3Hp2oN;Cw^RQG`v&CVO!RLBFvw z@UJ(&6et@|8$-ql{b?d-WE!?e_{m_)S))N@S+9{slK|$>L=Op%9#uo!T7Xy`h(xp+LjJo$enmJnq(9AI$C6C#RHb$42qicHj5WNcosK@?clMbGoyO&z+M~Q< z8SlM5!B#yr4PL~ffw}e>r}AL=^6oV#dPpeW73FdK2XL!oz_nxxpD5N#Og|eZq??qZ z&&Umx{yNLJNXEA#>I&6G<5*qa!b{kdSAW6Nyf{NFub4!6WN6CDAw@jN+&{yrPrl-R zEyMgk0psqfz)f9fx++}`WS12#J8PNsPp6C=feN`xJOgydOtF*CGMX4?+M%}K@*2fb z$WlrSnDvKD*HYYv^yJ~eZbewm@1rB*rnc#-MFz@{`1&^))l2H^?2*$ByJ#h-rZ_Hn z?JPvh4_>bJs4Q66_Q3q>-ZBO*rEc#v-nwhI3wV?BU{E!sZ0L|^c`?(&rJS$P)COI@ z!tg@`9vQB*@?E9aA-&>WemWI#^`LDML(0s)=8S0)xkywqywMl?n;g5{3MZ&SJ8!|+;sN$;)vJK14xt^r1m#}DUq|4oW=0`8;?;w00|FJNg_f*I&8Z@zQ zXq%+K+90vn%RX}F*-TW-2~VtBM@HyWVw$CbWFMr_q@q>c%V7Mx7d#>+{mAl^)jSV+w5$|#srs8grRuXitWml3434NV=wE;WV8 z_V64kLWnq#b3ajDtHafNs8ZSHMBHlzWyP9VEH4%IucVaF4z+~r66I$;=5)YW5%jWf zu?CmIxAiQ(k=jf|PYgm?nMzO~>6TZMQ`4iXJ0$#9w=b{$6(J_B2=pkVgUWt06A=;; zQuMZ6B}${|*;DpxsH&=lcSpY%j`LVkrb8Qv_Wr&_%Aw4mhm}RY#RQwUmj-##ekv_n zyq^z(7{y(ego4Bd5eX()M#>2pp!kKUC(v8{PrcCpu|fJ@_d?m&{`a0)v^$uR(&@?z zMmz@@s?vyfNZOPgQZy-PgecL-P92q4JRzZktxzsT8YHx}VyHhw-yGLMB)J8(n!&1? zp`a99iJfEbC+^MU_sT2mPNwJYZ|9}%uZBm8-OT#u`X~42x@WILS-BzwZ0O_1O!cSN zRyV5WKlEPeFqkLs=wC3hE?0bZW(rFBosT|B7u?~V5q;g<0Z41L{-tmYuP>HO)!!A% zPfij0o-D)en=IpQ+Dz%1B?|}l!zvz@prEoh$ zsmn102X224mgX;(8Pqb+u@m8GW5n&aDIK@EhU``M>c#4b2^hB+=t;-yR};D=v0uYU zj#BqyB8M1a{ss;L77Ahy6C{#yZ@1#uxo-LB^_EtCZc1Wz4+J6^0*a&e$BYgD9sh~Yn>Pf97{GxyT{!>!yJh^9yWDPg6%4Mc)yZ9vW zq40zBRN%9f$j>iHE-_nxvLrSXn#ebnb0qN$7oI41T^L`WNbqyW)haxa|Gj{@khb7$ z_Vb9;5ThyBDcQ;2Dc&hek&~n#v%qN1^2pT?s4n8oQ<0xpvbYekplQz85VJ06k<%=< zPJ(LA-VnGha*^*W=ULLRz-!KRDBdaqO5!>ea97Y-5}3$*$oHb)yMT92+u#a5kW(xd zh=D5gdo-FzqR1?9lNQecRLt3|svFO|U|%-9IBmggaiASkb^tq%b^@yyV;m)NeIQCzpR( zvj?(hHOvi6_pZbNVYTB0@g@I)dh*;)r0l`)a_peCdN zLhqcM+)T*zQiv88c<~F-{$Om-CT1OE3C+0p&S#1OY&2wq2L#qNg~>k?e(+26CvwfK zS=E}h7U#}fi|*qW#DwNKDZ@f^ETwu_9@DKe8+`CqeK zQfPH^{tJs89prYXpWTg&5X~X6WsoT${>&BD z;i6vPADU)SpC@z>5pj^nvN(IdVD1>@^!(xRj~@laN=YQX0`>t$K`Nw8OKuxrYIR)v z>Sz{jlI8H_@Gtu5P5$-LScoIo`dVH#(AP>^$l2LjTUpx2+dqTjheqWEFc zVX91rD@c|&x<3=W-26I&Lk|{%p9y26;~P7BpZ)QKU+=$XUKhZ1ZY&;uYx}x5_CJqr zn?ts5Ojs&nZw;(;&B!tgSB{)Kc(-;9%5xzF4FdyT651mA6!{@KxD*+8`2>VK3@p+) zC1bEt%|6x!rv#dwxq&?-E<n1#q3J#?6lMYJ^i^=yn#Iwf5Vgf{1~(D3(+ea4Nabt9 zV6ntHh&+I0F=bw|uPo91GlN9dm&eVfSyrSCVr95>e#2gQu!2|aYH9Sg0nNM|2c})v zIAd111uf59q-Z>(XU0$1)FH-N@Fo4=>-$Io%sbnbM6Y(;_+4 z5;K9;|G=gPuagY0o=u-A5^^3DcGrceciA3t<^wA@&9gw$Q8%#GGh?Ko2UGIC84Uo< zlW$padz+jIKa045zZMDcmI8soEghIIf9rzBv9)4DK0-OEJVlVYT);0#vXA!u4c=X= z(5+Fiq3RuWGh+eG@#v6)fYMZ1mfKWI7O@h z3^d{UM1T;P9C&w=nCr2=_5ATmf!vo8S4?j2=u+MVm}*?qyu&7xSsyWa`TWFQar{#D zc?V8)8HS=-0JBlXoDBquI5F4_zqPKFMeH%(su}+o7_@$ke`^^P%3-?<9eJ)ydFcHc5^zM9e|Pl(hh~Y z-Pq%KD2A_Deu~ZN!p46)($gkyV}eXst;=Az2ncc;UHzzKkw8Vm1T_J|meLT}{o(0t7!xC`*R1G0b_>yCJ z0Jl9cGqh0$yQ(3pmtwPd=~YEot~`{fttu~12AH^lU#sUft6U<*lSFSVL^GHw>wXO% z(7Qm?FVv-p|GfNm0!ojv)sTtOtxXn6`zNhpGbB2DZgfu_$^I+l?IZ1MC}=D#qbQ|i zBLg*m+YMYTP8P3IVF2URV_guBb}lJod-VOv**_>UkW{JjUX!w2w4kdT%hVimig9gJGqv@~f)8qp7B&XJku+zOa1q?;Rpe= z!KmpsDWl0$Wt)u-rVR}2mq1fvz0ga$AvQmB(CaVU?jTg~@F22RT+2x2NSe+x4I4~} z7U>g2hiBHm^84LN-8sp)6PXr>i{K?VMy z$>#%VTsWIrB6KHIZRb>eC+Ken9(K%(h{Osu!%Y=dC#qE&S#oTg&ul@G*3!vI>ZxU+ z)W0+W*F=e!CI)VaY>5#?bvo9Cm#}b;x%#6y^Lv^pOSY@j$7*7L1v7Jj*59gm_8bg} zv}GsCEcDkly6#TS-7bkXr(tUO)u{1wvE~K?`-#*<2 z_mQC+E@||{-$Jk%XCp%;6GR04;}^4q)(KLp5!Pmw3-4q0;bP}z_hxZO)Ana@A!iQN z-ree(cfj8X*&=gjS;9ENXuy97F#V=(z4wT|-wwPt9PNOJ(5=({5M(uzmJg(m;tqN) zD`p246lBhBTo0SVqaT!+JFJ5`t2ZVe%8>OCOw8GaS_N~Tb}%7on~KV_$dI~CS%PnZ zTyYQ;)N>zd?2>Q0{=__4w0S0@bcL@fukZ|z_iYsC5*a+@z8n>{VAN`k=D@~TpaOz7 z-RU)aoLxgKDko(@_p1_?jZ(R?p}JOMU#5pM6CZ}87I#W9iIZm(QVE|QEbg-U@|dJG z0-Jh`x)`RtSPq1Jyv>r4hk}rn>nA&w`x!6lD)0J-^%1Y%9&}v-arc(EXIdo4 zlCEb+yYRjTr3o+kko4cLpJ^NEUA#5R7)`l0CDkP~=oP%AE(s{7&XJ)2)yr@th>0ST z)x=^SpVMtG6YSG9Kjiua%*p!#^=c!4%@Ude*;iZ+YbhwO7VJL@p$`4VB(#Ea@9 z39fg@Yv0~|_F6eR5<+|X-qMZt1+CxHTIO_1^u-J32?c}LYtC{E;XRU`Ef%gu0&Tp% z=`HDPXsE7kkdf{#bTC=J8Z4C12gnG>PaX%!3RgETxHzQbB&nyiK@deGZv=C%p=yX%uW9Byg0+xfkV5I;80|`mL^V)(8FoqA=3j_n3;Sd7e%tmDr!Ec{(KX}+iebLFx}~4*3F))lQQp15y5Jr4KlFuA7Au;lqG`r1m22>OoHpChaAKu7@~=+6M zNDHVWUse!+v8tA%U9Mvwi}tkE4iUvSez(&1?8kf=s|LrsAiKPGEn}MSl*q z_~~G{B@5Hah%EdLl`?t_=jtQu=r%c`%3(#)O8q#TRy!X&Azw1(Qx0`!hf4TlvVOq@ zm+DUkI}4|(-J7!LIux%<1KEiU#*RHhP;bWaj$94p*2E?g8u{&M=pLCvX<606|HIik z1d9S}OPkxaZQHhO+qP}nwr%rl+qP}vZ1m|-zZ-G;k3ZhHW~-tGl`Av97op)ma9rN@ z%g-0#`v^fYtWlVg{8TO9G_v@9!-JT++-Ee3(m8YWDnXb^%*HB<9*04(0Q6#eVm`@w z&}Lu_nNr)2&=8$6p2G>E(r{;)sK65ncOwad(;^SIl5a`PjY=T!?tWWe!*~1HUBflT1#m9)HOtlFeSbZ6yG}qp69`ZQtZ#u)Z0#sycn+g8-hJ3Brv9HKhl5uBrpQ7z$=*2 zTh3TdAZgxvQu^|ADSt7e5y0ya_D$EFKk}KHdz!~}sv73)LJS3zOzQ5igq9YF2IAKn zciNe@xzZ<-A*q0iFiXA73mb**})6b}3?h^=oF=&M*)cdR| zIF-*CJn5A9>*~*ZUgp7aN94XfQ(Z)?M8hq7KzFQI+93NY#|r)Xhric?EpR=V!g)CT zAj3!bi?^nf2Sxn#1;r^-6bDToR!^YkIA_I zt#7ii z4DA%_=*082fw;;VYs=g_7)O;m;zy-l%S!Me%{)XUkwiH}7`(xN>Y%_2>pv$qi0Y*z z@o~bfgvHr|)BR?{E2djaNQa&z6e5-;F0sk@_z0*-o@DjOvp6kuZCP!vpW_poJrxE! zd80`5HPg3f__A6L!b1mr_tB^xOy^0tnE4g(vi&435R&b(rO?k%gWxjse6-!6m0t*=5WB5pZ1JYOF!T-Rs2Y%Oma+h%e;#o20*wZ_%Y zzuQ8|Z~($fz4=6+@6PUcP+fx*b+MFkNGKvJWhw#73OAL!4Ywv#i-h;dxzP?hIW|Fa zFsJ>SKsF%23$|Q(Dog9CI&UsbNX!SO|zw z`Bl%_4TKG*X}e9itC5c)ww-_?q=oRfF> zSK=#{1Q)u0yhF5KPdF~h)eGdVcMN(Nhz04coAKIyKUKg^VW0JI2qi!o=Cu9&VCFJzC`-TeBp{A1G46~$jEipVP_`!3~X%&qB( z?Z#tedr(ub1)<)1uPz}api8(&k_N3Wt`~6_q}gm9k_7R_4zLr&;UM3aDIhXRL1xk= z!&dP@4oxZA^I~8F62`0@1>lFm?>i1{{M@cav7Luihkvr88u&E^yrG_?;@5{eRao6w z&@7x?Izj(QGM=UlqdRA9XKQ2671PzyFjk0{T=^9!qFI#ZsCqrXGU%K^T_7yKH=# z?X3uw7hB*TskN=V0?}QJnL&(_g&lg0$m=1DK_384i60T__fO>)| zfXE0;dL}N4l)!4UT-sig94(%1(QX_yXe}uH8?Hs=6~L*B-z6L3D~Z2EvD1=#)>k|H zQPcF4q(6F{A4`jQ;u{+kd6z4CQMyVAxS$E@Q5jyF)3B0YKfM$zoXf{55OQL2v0R}$ zUS8@6)ROp}w3niSO)MvaGPX>{%DT2Jlb3XuadZtl#995I|1a?7llejp*g*zHt!r8W z5%oCvB)@#+i9v<5b(?rDio?e<_5HyIXgM#EL2<@Nw$DoAmd%RD9@58Gc<60O-q$zQJR@{ zj5|fHY!ME;DNHQh(@#Ln&&}UWuvI9cTo5WlMk`y5Bz3Zle(^&MIQrqa43>(d(+#~+ zY7%DTPml*!24bxf!Gf}6>KVpU1Z!IwC0rEAfyIM5$(wxke1vASk7_)s`PaPIBK`&5 z-lHdHJ#s33R$Waf9+*q2*itZk4SMGf_w16a8)MG`GLS%x!|o7I0rR7+r+jbeffYPw zvJf`3)Z=8t@`duZNXPo6*lnJ)P!#);-p3=;xuF6$tb)<}1;(y}?~Q;cI72Y2VTg!{ zqmz0yyoNRRf(-t6vicv@un4;;0q+w826SrUTv3jcFyM;|JIr4W=Qg6Xoc3QA6kFUA z)@CN4t+lRMSY`>aUjzrkJek9u8){+>WysmXASLQqvfgd=kf#X6*1@ey z&S@EM^hwzHiGm}R`j6#EEMabjAy-9iQI3o--bs}F8uUI^+3QC#xhMAV=U74)HVK+$?Y(wNSO%76@QRz4khRTeZ%}M&U%e`wvSl_ z4+PF@#*ioFj{c54;g1m8_Zix!1WR67(IwlozEHiY^mPS3< zBDM%MjVfD$%3)!(?#i0OtiEu`&34Yt5({6By!Ga4beScfLsuUzR#xBYDB*#qMP!xE zXl94zHKR5&Ga)%OPRg7gjK=bDS#+E-Fww}q z5IV$_JdUw)ePVni73~yzyh$-lx!iVf)m#<$>3(w@_e!(=l!m()_JK5qyTohD?mpF2 z(y`J~avy=nzJpANx4*Sl^i#`HPOwa&dO~7K0{Q_0J~FwQxkYPU$W2d95bg<)Z%lW^ z$wb5htLtiWPEHP zlPcEG6%x5f;@mKZDBc}s$ z(heur%)Ac^@Eg=)D<~%D#YofPvk?VY?!tEHY0=-HQ|*ziG@vWFr@^83I!XBEwZh>PLI8%O+#(rwC2<~*@ryc|;I7H$N!|UBZ!|(>HA^|l6t0B8 zrehC6Powahx*5uaWshRdckw{NE)hi;Ed9uZc>ya@;d@%OY$2%Dk^O>TB41B>q#}Kg z)NfExRj$)~-M}F-gqcVnNzY}1yyza#{9??s(X_`l9&lzox^itNsn!y}3Khu*#Z0YK z8A?SJ$l>p%BLk3R#kC}H1Dxcm3p5J#e^4jDIdlU$JzQUvWW>Z90&(c+77bMs6v4(> zn;NemGem{B&`qDmhY7T#MAXD5p%{m03h$+1!;$2VOz}PePpvA5Ca2a7%)5Ovz%s?g z)fCel9p34#K%c|ciXgl3Duwitf|YmnK)O-|&Y3~;#$w8vvZ{i5f_{dIfrg_p zDhzM_0HY0ii2rR@&GNs=?QpRF2Mg9#9oz-kybbR_0teIu=A*Hlt{rcLK$mz!-Ag?^+(fC3Px(8O6NAcVAgVoO)(760{Z>&?&e zt+)9um)DuaeAZ&t|L*&?cki1n-0KuGYUrQ`1-s32=5ysvgxp@gK7mY}T)H{w>CA>E zVopXL=Bq!&H_=G{uz_CQU_`Ly81v;A(pa?PgVgSNPtH-ljAC}+BJeNy63`pzTq1XC z$hHV{FeP31kTpK1yQklIk0-SH*)dhgMWrPu;nUfSHcR++T1d&UgmA=8Lcl@7aZ%9m z_1AOG^;ZIj=y=t9Lc{xT434Ltn3u%AB!`5?`RRPZJr1X5CLR+rIX4L*CoLZ{DG9mh zSA?zhnwTxDCO&E-t<%+3AtB?%1n9;CNz!q`aEphfkC9*#3%^L7%=IuiDJeOqj7`KG zT%?>dS^xWW%e+7O@2@9%9`Q`n9EqTuZ)6rSOMY|8XMmPmZON(Y#Y zqUN%S71j$5Yc7()oHD%c2HL8>-Yy@owp){ayEk1@Wk7}DzXFb zsq`ARGf{WM^^hhuv+_cz^5wG|)Tx$&CXHTFBnqp+WiW;8y{>M>mBZQ6qJ(%+M- ztDBpv2k&tX4{8y!^3qXzl=9;~!FuD&<_>pHG*%naB0ap={iV^$W)yE|mL&q!wYN@? z9l3VxYs#0;0qJ%s%abNlrh-=XyM_<&4lm_~D1Nv*2J#h%p9J;uG zA1-daJ<2>F-?-*>OUetpD87NgSqd!;mq6%e_bk~R$}bcVOL0L#3GW3B-1W57(o{3! zcByX9Ev+t*q7qxk@mbml-)ZFEpvKXQuy@2Irmy^znU8a6zJMM$v43*>O?C$ z02Yfx;71rTe3&m^i=PY)oX_4l-9hIW?upS6ZjbZzG-kU!EgUEQ=yeD|XJ99ir$?;` zdMxfT^rvpHFK#&`9Dlql{485Q4o^w;kC={F?y4?Sq4oWFoywGuktCQ&shXgd*v?G` z5LM8~TM>a~GhwfiiVm1nv@DqrZn{cZawxhKm|7E$+X=k`h9ue$kU~N6fdNevA8AT%kv|tVjBjC8riqxIPB$}YJ$47(l`iA+{Vj>n6>oYO(>q}O zSr>XnllIejT#p&*%>MX&1e`?llhZ49xYgq8M(Af1^E-B=ivAO?^xD`wE`DbI{-LPn zoOwHn^9qzaHUvIqgKv;1m~VkpsSuLizhnI}${;!$K;1lE+LS zboXjaOj6)lfjcS2y%c-uFh;`@s6O($tz;aeGq1^1P168ZCZ2ri9wRvuZ@&9-s&EvB3Dmey~x`P)t#F zs^L9k9!S5b@&%n{g=`YMNydKiGb9tTf@N8vIxZ>O!;8$8@T|@t8i8I{8C_P1ETCcd-Xjn{`Y~2@5gT% zVFs(iqd3ZadbKDVhyk^l7RngSc&VRB%)GBG&EJR+GMW_fX`H$cn2LvXmy0D*cPa;; zd%X6fQF*;tgQHCyl~_GIQxx!uGD`3Dt~bY7J}6JDAv&b=JXO-l*j-}a)ZwryYp};bi{L>f6= zyf9AZ!G-_=P-$-VoQOLL8z!99Ic+l*+C8;8GcauM$?yU|uG;XHv((~IK@L#$ExBv^ z%K9q1t8(=wTOp5JgHBGCfD@>K^lPrSY7o3{ehTwnV5!%1N1PLR5cQ4d5{uW4lU7l3 zp~T!y-7W3j`ttT>JARxp{93L!eVlN1kr8wq+%^wf)KewvNVw+$>e=7?tk@QfA|O`l zrziGwO&*X_Cw0${Kb9%eI!#5E?`&^G+GIH&4{kiVH2}%Vmz^OfGLpusmhkg?coLd| zIZc$G8;yG9JQ%(A0J8n`5hm)z41_vVI5}^BJ>g|n98&ridVZrk0J>aaKV}x2T-L(4 zu!$isg}6IFd19w6XhCStx0{%>9JEiju4X_!TT`!g)Bdz&T|48eTUN8EUVcAJOW3I5 z4KLt}ir4!1Kc(|W7ozac8bam`_h-}zhfMGq{?FsW79#H_^ z@_%y5m-G0Fa;#27j}^L(6h~ZEiaK8teSK9*`F%K^_ z_Fe&q=(Pf*e?(;N0@o^fZ)sHki;9Ywn6 zWLE$U<`ZEgpLJu!uOX{RFFC|-Rmp;Uv7q&eMd}YsXG}b&_4RJVuM(NRe9MK(s8oHJ z)3Szn>Gm7(Gkc(+8Hjc+Ve|^R(c||IUtFUK%u@1i#qSMPW6<9xErp7QS|%E2(_q({ zAR$C8+dssTu!AAK91JlxVCWGjVxY~P;h^XP3-`(=FgKC5E=y1fO5H^5iYvm{y1eHj zaYUd(81mMBBzdL22xRYP*TsZ=zC0L5jKs0=`*a_A@I>r8)W+wn%vXYVP5km#L(#b%Rxf9mK`CRgxUAddP}(F^E6A z)eRcs{0mD~T3p!o?|5FH0}pigKKnz@26-`lr2U}9+Q$~4VF~WekG7i^^QP_=4SZc^ zJlh@;j=A%XOhCl02?M2|2}7!?)StarvRA@e{{|N0m(g=&T6}F0sUJ%3N?4Nu$8{FQ z5(vzthQWLhk!zS92=PNrq=70{VaN1g^?il8RQ?P8*6M-)v~%b0D7KEV9 zahVl71Y6k+_o$LhRo&I41H<{6QGNRXUN4U78|5#q#DwSvZfSYDUg94lJ9uBW&{^?s zp>Z0inQ19WX|*2mYTn^z-`|y+BLQ}`>L*f>;zI|_zvXx;%fkcqz5{jrSi^pQ_)y_W zT!y3E1)6AF<;{w0%vZObw*yvx0^1F290ALi+D3vU%&A@^{~Wm>hUyBTxJ~e*wiOZ7 z##3D19bC>0Sv++Np59A&bz~g67JUG($pP!?nz2d(;HYUgt{gW6MV82|EbHj6k-*tt zL&}~D5=U+5?}!XLhs-+~jupCVy{R036o%DV+EpU~d;GbfXjbR;xkteBJ?a4V(+(~T zuY4a=Lm=BTs$?nbGGHKm018ypq{X6A8t66ueqmu{H~%Jf78^bxn8w z&2-SZZ_nRJ7cqfs7bT_BZ!^9x!qDnz{rRlgJlJJos^5l7FJ2n|>T)L->x^bA<{lgj znI3d0NQUMXBZ=F~|JfnM2>A3llapAwQ7i$sn&Ak_!x87U-aNr^*|&bnB~bemsi@s< z(<@gG9Jin&hL#HbecD9U<^y~O77KfI#Oe*@N4E?r8Z9WA3(6Fm|U!?vCU!Oc~# zwnE1b?|XfEi7P*1607R(sV+GH?3!5D zu}7P*m1HBbmgDkaO9-AQYeBjBV~wdALW+It5~aUOiU&x9al06F2G;;(XfCL2SJ%V9 zT&%acvAVsDs1f2|A~}qp^;Kf`5hcesA0$U0O$7P!XN*_zYzg{Jta=5i0Co*& zNZ@2I?5@`{oOkqxy73OIn5+Re+m_7xNu%1RnL~!eTgfuoON6|D{#hwMSO^AXkG|aX zGk9_TZlCwmOY44i`GS1NrIes7Eo7^XC(&* zWdA70VV*wox_c0skMn1@bNSzZIx5zx@rXHJQn!f$%b(9}2y?fBfpYpfph_|n!I4bB$%jluQ zhQ45YidxalwJoH8R3Uh4vkOO8&m0F zw}Z5w-)e+4vpJ~fX*jtl-QefBnSf6HyN-9`t%c6vUGRXu4aB5W1z?Un__fvM{>}`g zWEr`yz=?k^&a3X_w#TgoF}Ru9Xl}%Cz^?JK*9BYn;b>hdJ9WPWIE2%~Mk+O0La%Sb zbg^`Ef+3dPv3}%CHIqTAtnJyh?N(M%*^!}qkVA`1Eeelyvk}-%>Ehtyw@|VXh1u*p zVLw{x@n_DvB%#gP^f|qsGj0lc`QVGr9oH`BvlQK=kjr265dJd7p|4VYP!iC$uLW#f zIHnhhUbC8^%J(X}irmU$q$5HzZv3oX@A(QolK$h1@_P9Z;+eHXQWKlO@Y08j zU^klhn&=6}sX@79)mV!F>E{X{)A=s!>}an+y4Y*q>H)=8D2CyEb6zjzZ5jkk^1QMS z))kH7I07D5JvkvCBDGf_u~wSQO+%6FMxUKJrGDKC+QS(t1FU?Oh8WvD#1+GT35WL; zff9b7aeH3@VRfuq6C{<%XqwpqbWQ26AvcuTw@j_C%m8Z6b~+xX8IW-W=b;YzZ4Bg^ zCyT4>%*(y8vOOp3T}x5^CcHj@%&`(cst+++PLEhI1TLtGyjQDhl{r!d>UA>P1%ohQ z9fh^u?CE8LZ9Lc2O!FSrCb$Z`fNPB)*CZT)>hRC0Up=TGAnK`a8K8m8mKw89b$g@=vH3}Dn@KJZZ`+0Wldc} zm;_8;`bPLhw;ZIft>T=dS-b}yIJwu9zSbko7%-V(zLg!QXA-TZ$y5+2U#9$wOvB`j ze7Dd>%PW8j7D`H;<}x+7WLeSw<|IhlW^%JEwIjgT@oxFXklWk zkaBUQQfgP_s)vMWV1|*`=w)IKW-LapEpJVaMlhvkOgdS;X4tS8_<(Wl@@&sseWcFe zqaYXVRZ{FMdMuXuA`4j(O}IjCAB6Y!4BEZsUv)zSgWQ{iUB`zoljqxh&=%ZYO4mqi zsBWO7)~`*C7Cd78SZUd>($_Ttz#T3f+eg1Ygn16BZ0M#nqF%pNLyj9Y&o~6fVi9%T zSu}RPFzmK#g@drk{gR_-O(|8ot{D8c_B97Ql5)!Q31Q1GuqE&e(7PBh*Xg9wri_T_ zKC$iPYtomPZ^E{q(!o(rDleKV3NKd%3j&S39vl;r&72TWX_iw-C}p>hM8>F|#&ydd zx^g)At>A`a4Y#}FRuNCSX#S{4JyqgnB#W@AsI#Vgs zva5K;<$eRs8g@CDP|a7V^cG-&u%$Kkhwz9)mJ{`#YEx-Vu={&EHcU8Rl(d04NM~uS z7AU1F!K7_wF~1lD{PL+p3`xT1`r-YqO2mlq@}|9D#5zC1Q+#A=8W!5(Q`$YPDJbTU z+r`)B`%S3>5LrOKs_8;@b1NaL7?{G70Myd)Vxq5CT*uWT^o`zlrGoo5Fq$hX3dcv`vtfK^DXqbGHpdr6P&~B%UJC z^BD$@P4CN~jElkz&q@+TEwK9@fHu(1$ zN2LGfp|dJV*VKWRERmk1RnXd^57E_qf(DKx@aRmx%4zfCOB<2{H;&2I?;Q`Om1V3s5+gRP zH?FJQGXf#ctr`Aj6hza&iTR`9z)qB)sT1C)rD z7@0AU?I%QJ2KfyYMDje$-W1>yX?I%vV2!szo=g?rhBlx{x{JVz+ZNY_)Ti+9)TweT z`7HSEgfpw4EcI{F6yBX^?K?ZGt0#BVc{71a2c7S^5>^a=M=D*slu=Pciw(}>$b8t% zVKxn+m(!fdX-H{*4_($AxJyVx(WVIeYyTmPM1OB?Q`m3m?VP6kl;bimWtIAJ0&q~gaCc9UemnUv^U8-q$W!wqN-Z%i`h6av-tznr z`AUj76MrV4E$3jRCt_}_&Qv9I`RX8hvfn+k6$#S^w)g?7xg;H_+ghC^XEY%L2aI=aHa~$-wB)w7Z=dQ}gtD z*sc=h26~#BdpkXHuph)X#*-VPlF1CnV~SG;rO~=|-Ow=yHm3a>X_`5f@f!weUR-a} zimnXq&h}aadM=o^ajC*Wx2Tiy8HQM57?^%mrz4T}PGX=&3%)bS?4gNpOjBL84NUpt z3k{s)!uxC0nl6f11_p>X&gf{vNh(KcAK9MfKFodmvdf4!PU;w$!^1TSoOu`-tv+mG z-a52U>NAz**Kdj?r*}{D{?!w`whvG>j!zYa*PqEXAhQryx7_`YK7>h0DxEDbI zMMP0VK!Kc4FicBz>%aUDqddCCPG1kM@bvRE>)&CXadGk4Rn=A1cWIdEc7u^-%Ka%5 z0}+kI&+t7Y`tR%yLoIpn3)7MpW{cfT%kDK5(t33FU#$}_W|*zHD80-axldO)^Y2SZ zdbS!?V}lL18}AMnCo90HjL(IhOv_5&^JZiGeuK~`w2ZK?Fz#HOe zqYMqQJjv@kO9KqxA;t*HxeR7pOzAS@rOZa7noK$wbukm03_BV3GVrD3#Q&EbLiAFs z@frin9N?MnXu@Xz#u$uAekweg>1Y_nAe?y+L(LrIXfDQBj7dM5{b1;m*%*V*9QR-j zlp!Ey7&Glb76EA{l%YTtlldov8BvA=c|?R6Ia5-lo})^$0CR}RY+9f!hPBCh9qX0! zFTa`Y3|NM*otgy$Mj1vM243rvb^7itDY+Bfw$v^7Zm|Ar{*it$Mhj?aVLynrVN?Qn zj|G2+uiW48Q{$PlY|XaIIZ{znRYb&@|mE#5P?s@>{P z2ba<;oa}zeUuQz1CL~y0LYVQo4O24_)R91%A!Y}f*k<-flc?eGI&fY7_omLONNNuE$CH`E^$r8<7KXX0^4MV5t+?KXY`Z$-%02Y9^LV2IogOx zH8;&4(adM^yEq`BiHq!Z6C7O+BAdOV!}aewj!UbbH%$qlzwfYHM2tw)h?%MgAU=&9 z%KEV|0P@5^xiS*uU`P;>9X^49AHqYP*_*OX7=q0p|BApEh5!>sZV`tNV6Z+RVFpAp ze}g9em@LEiGWfx_1OvbzyBIc*tV;Z4)Vun4_f>NOYud2+7jS;M#$5Q1lN?=T7d;PfPSRe0obzeh%?c2*L4Ig;XC9uq^bJ4v=dN`_hvID=0Pf0z(9<&#Z29sv=P*T$=+YgO; zl4?&iEbQ_yLpZ=y>lzn4AKOb$l*?08%yYtto06SI9W6MNmsU$raGvq+g3&!etJbTm zS>4$wC=KYYfLpWKL7ZTHIrbr3TU8HaS$RWsQWs?k42M)0Z@qNciVmfVZFm$8Mgxd~ zxI-L5H6jkAE@4k(a>D!W0_36@6+!VS^XQhA^q5?|=nP_~(s48TknG~|@jPPl-Rlu~K;J|6Eg`_+rREd^I7Q$Pvaf_dr{~L~)Dcc@C$otw?=HrWguoOz zJ~E++0jw_5AJB1|LIGCh5#yfg@qW5&?9z7ccY8^7L4IoC-`2FPQX^%{;_4pqWXWIO69wH81bqE(9zLXswGDfVinAax6`uqH23nY+E z6#;MDO6rnHrL2OnSR~{liTjzb=G<2*%HQ!5-QX@$kz)Gx=e`4 zpfU{aLl^&5WhkB+RS#Kz9i2~-CuaVJwAizGH5Y~YZqjwVc&5ni!h9)jR35pv;2<-*+AYE}xDO1&>)dS<0blzURToZUpJ z6Lu-6$kkftQba-NS204kUpQDT@Op3TA*;*}z9^b1qjHO=p3>;GkOgDqsZM?lrwhoc zwC0i)zyGBg-W*cFwkFcn5oYZe3*JJGAJDB6NpDlNPWPvU?Ie!+UdFJ$8{D*xHV~=E zRK1!+tdgvG+$Ceh%YG70kw6SKu#+Ko8rG6o=8a~$u$AFoZIU-F_O)tqDbQ<~jnQvB zrFzyu6<%omRz+b1$sn9VaH&o#oX!L?eN$HO3hk5*i)nZpT{GfIeF`5uz=ey@=R9K zEL8>az%KSEqB_%H_&XvvQ$eDKaj(V7e#*5oD#bsVn=u!A=BWp+kZX$|__jgs`KciwsIwH;LuT(; zX+QNg%aIY!p&x5dRF@Cmc=L%F_;@6VDgNg<4#D9IB=OJ-NFwcu$YW9u_l~6gAKjpK zcPe%&2bi$~D(?Yo=!nN+cwu%zx;JT17ZiM5kJh|L{-Ot4f&+wTC$q`mP=NuB0g5`g-`jC%L228Vn{){&9kgZh@i z)(f8;p<7F7LV*!3;otLsXbvw_kZN*|#S;Ab=VQ1_g(`Sl2`epY8{;2Wl_(>>&^>p^ z_I6&<8OYQxFFIK*gt9D_mcSKB32UNJamD^U{xVxFW6$4LM<(4sg#Mh#t0K&+ zO`BZB8rG8xm+{n>gtSPjRM#Wn4k>m!n>daiohQ~!YUT%ckR25IVGbZd*N}tKg&Z!H z??MCMsW-fDE1opVxS!+ta#13$C1Wf`7jCS#T|S8FI6SHiwv&OLBOdI#t%mAx0%1K! z$xBI#lq+Mh{0eUP(`;3bd^<^|ty$IV*Q)E;GxH+AzI-*PzcK}*+R{H9REB090Oppc zO0t{m6!ld8S{LHxj_?Uoff4VPMy48moazRk~{|jbwX)BqFhpX+O;U6-lW#yMG8`eI{q!HY(Nq7N`~{5 zON29^T|0_Os-J@vM(Ek2Bc-F`1A!J!@2%Kp0Zfl5wVa+@MYF-HNj^kjPKk{#pyKk-Nf&ren+Hw6Jd2DCj? z{<7}w^QcoNOuht1&hO|VF`>SJJ*zMyPlau(0vE(SJTQtS`5Sfi@JuQ!bjj$Hs)t=iYnD=!GNOe>3dmvx&-9Z>H? zFonrMfFBZr^!qTB#FDm`y%sr!Df{4OB% z$4=C;`iz1k63k{7S{Dwi;XLT4lPr~FL8lzaBVoB`V&5dGvLixmwG~2)C__lhNzxv| zM)mK|WWClJy`T6*8AucWbp+qZ?PezmJ-4>;tS& zjSBUM;WjA5%mf@c*ZG}}wwYKt3V$idE<6ic)j?9}XB~m{K$oSYxRN&2$fPu?#?n@) zb7`FwFlw6z^dmEaaF{(k^??U~>5X);4Ws4kFLBPk!BoV=ak{Ts{}!$}44OrABnP+$@|o$TECu}PRi@vEr(324456t&NzZ}@&o-4XIN}`iExL5s$gnM%)fxL+iZTwwwU2u z(=Fx8pM)x?M&N|Yu9iJ4z+<*DyEHiuchOYotG-T%(D8*&iU!B4zD>#o>q2Nemc1E< zPq0~?MyFMn8ut>jwrPf#Fsc*t`8v4g2N)ns@QHflW%Ebwh;*Na$Di(IyB**oDg!v! zmjc?p#u8{*xftAuNxpv`7onMQ$lP2Uc%3Hj-;}I|QOV;}mp&`}aiv(Aye*@Zq$|Fx zX5>oPN0CIl->|$sD-Pn;k`hOkcsMe4k8Yp#D|*+&mc@v>Qzu!koUpf!>k2#`VM)!2 zYmUV3kH(uS6$Vz$A;jOO$hdFm{Bhfq)B1$koZa8SX5y^BuT9KN=;w*Ak&s0Gif3;k zh;#`7WDFS8b)|t|N`Ev0kM-_LJ^!`Bn~p$kB>d57K>R0deuNu*1ZX%ti1o2nv~2#4 z6$y!GIIW|>IfuKtQh8t)T&Ap>e;64BdQ+UE>-6`%vqLNzb+`NAE3W7NY1-H-__*MS zCjz7ECOvBAp4)HkFq^HM$5rKqM?1jM={tv^L$~ACcN0`HPQ3aP>T8PAMvfB>Nj&O< zNJ3e0`iXAG1ScE+r!eSy>chQ+9Y2w&4#R?S#XH3D*8=Z6dYSB<-pF#E$ADCq!(#f9 zo2hQo8BiUPAAbFaY=rVF)Lh?doWsiyCT?^9oLpZAB`c8)6a46$hl?o2>5EB7Nv^n? z|MZ*cDEi{;LG)nuS^)S5o;W0!`SXwVCON{3sOO!*HzF7K^_A2T}j+6@7Gc zL)4w$J1?3YzI_jswqKK|^!9cO?56Eu*uEk%OUCM(y)zvNgF3#$kx7e*L7Y&xY^}`ZeddmE?U5)YNNO5PYv= zR;+U`N*1}J8cw0;cD*JG*rGEt&JS{YtdXE2?c&{RK*DwOwY9@%o1*;HjP$9_7$t=D z#A6?Ih^rGF)E8eS4wWWs!YK@adrMsM;=6`_Ec6j_b#BYRu5@+{-MH5JH8a9VO-mheyo`$j;1Nb=FDT5#}Nmi9L`;Y zds_0Mv(Rp|^w(KuOgy|=%J8ylgKlMZQj+YYSgBkiY~?=6Rx5SFAX8>??qBfqS7IAJ zYg^@e^}{Du#b+e^_A;@PuCGr}Rfss@|2FLZP1PL}8^eDL-&YOV19lB9@1L9MnkTA) z6ZIqqftK)80-|z_G)asIPf)@lA;E!2d=a9uIw>lpiINJw^D?o5jgazCQLAKJ7(z>D zQ@gaT+PqJ?RqJN6{c3w|C)s0X%)S4k@55|$TI;X=uin+3G|Ki4s3OW%3`Bf94E`E7 z_j&B`wapMyKrcnZtX)lWWbgiLR|KZT9nH?SZdw;aki*1SN4= zS5J@BPqR=;qg0qv=6h0R$?nh=@mlff(u{L}dEgmm{n=InQ&q5sz7Ft)LUgpOO}A#e z`ur#s3Co0qGpob{mdO>P(?niTZ>TqfOA_=MN@?0OA!Ak#-sSRuljTj>+y|@Y((xi? zi1>8(RNV{W)BrS|1zDR_x0gO=`>wOTj| zZ5w_}NQDHhkj}#%RA&3Mr?KSeZ3k(7xDMTHn^`G;nHMaS!eHQ?MS*BZlC#aU`4H-Yt!Ij|`W0>&GybM{>^g>-^Rzi9^B*u*98Toa=Ovs=gO zk*R^~Rm?NPkR4THa3UQs0C?*TYhZvTrW*i(Xv|OH4kgv`3Xz&4cs46&MY~)^Y=YdcjyQwdg||S5XWjJZqJP!AN6TNru)yJ2?xR zb-eTk;z}y&?|f~pmcZwjQx{_QivIwY?vdtz4bg_C=v&K;u#)S_6SJ|2fBzZ~%7o9c zJRpr}hwhTKZPm!D+=FI(h|VlLJ(tnDjLN05LDPAHd99x@!Hn4|u}moti^<~KX2LJM zO_gIiiSdT&!UO4uP7J3FBBT!fKb?JJbZ6U_ZIVh=Y}>YNTNT^3?WAI(V*X;=wr$(C zUUiT0`rX@o`~Q0Mw=>2$pXT1{ti9))Yc1&Z)&vj&F*sXJ{gNCMDn1Qa(z9uSuuaxn z_T>1>4O2Z&s(}$ZdsGoNMha5Xc4OGgHhUWg^ZDsgt#R{F9;p$!?KcRgM&2FwI#@^f z5GAiUwrZ~=)fYzS8M<}n6)`jU(olxCO!0hfE7`b;h7#E&gY+8>J1|C_okBufP`F}N zJsaAej#Vh-8h=_ydCx7XUR4WbfbiOf-f)b$aq_ZpMmQZy2zQ*rf4s9r_WFkW-PCWvrVaIdVQ;+o9^K zp=nCPIBN4dA-EHijJYOE$#-RW8-!e0AQiat*z~tJ64QAdgw+7JEO%SQ`-%L*dmx8c zF&$`D0RMGuo@ytjQ?B(dl3>6^s;-1yq@ugoS5|(aR|BtGd(U(&7qu`Foc#jF(po>N zwX(0`;Ge0iQUGGTgLKZ87#p9Hk0``9ux?Z}ngG;6$BvolHZ<67`D=&(eoGo2 zo%!kpWotD&7+6b#?{0nW`=bgri-ybJz7ahBoOK0Q$?jhIBUQ6`HU5uq%+ z4TF9UY2h-NOk+xl*Qc^w^6i*-iE_rPn0y@;&}jCPhKV*K)Kmj(D&;X29m?c;o4@-v z*&wph33U@5N9R|olDl-vK95d)%gGKN)03EE4Y1CU90+qz5Lz&ex~Ha*(?I$V$MT)q z#$!c@_qV-*aFO~D2=nxPeLX=Qn#I0Xk5UQX#eCMIK;vFakHAmtmB$G^kLy}F%tp_D)F;N+B2D7=N%al0!0rrRo z*k2YMBBla}@Tm;hU}p4A5^C)}?{Hcwx|??W%0wY|VzI9|A8y^@glX0LP|l8_h)=R4HY24%K!B2TAuVOCL6YkcN~AcI#;ecaT&ElX znI^i7t?|8o?b(C3E$+VaUGoFa-2wsB8*F2N;#+j2ScUG~>?@XrW*3XT{EL>nkuQThXI$c z+O?H5&wB2Ah-spLXg98b-5d%m?BIe%wzQ->smTKtc?YQX(%g!MB%@8!4B^c>4$Flu zs++M{m1PQuG1^Y6U~2FghJ9Q~o;WjpyT*Wx7-B)!F#!*~jj*VFiNm57SZro|Tc)!; zH)BUu`_5f)*{mdSiQe1M1QoM>g!R;_WnNrJn`F_~lSv-1X4xBf>M2rGK@evBjIbnn z--R&y#tun5EhJFO0&Q98YMg}JqO!7k{t*7f2IJ|K!NZk)<@K|W9p%sAGWA?1f=60( zZWMs?IVqW*Fe#qdX(YVzt$9kEG+L^t?knRE0cozw#X%Fe5U*MDiEbnA$ zX8R4d{&mbY84K5p{u<3xTB3tuDRWl(0bUK&QkH;XA`G@{sFrVqP3)g3TonU@X`f=O zZHb?$7?8geTYw8?fB2@vu9AJpSV?)aeCIw+f)RVppih%IT_&vxB0d|SS~wy{b<9WrnCH~HsR{X$G5Jp3rKYWrTw3d zpiKW09{?j0)8Eef@;w$o^za==REN!l$oZjYQIcbntwBc+Wt6%er<2}(FW&?6Uu>NLd(?%6TNZb9l5^rsYmCfrk($S1Q|@NwQ3&uDOrMn3DWzW8(Ol1Y3y8=Ysa`EcoIb! zor8x;Eszvwwtw|NSOZOtGB%7=QBf4xKPnPPa1kP9q~NCkjLaUoRx6Le9%#bCcFheP zI=$oC^8Zj`8|x*(X6flRvDgDUgS!{fn=i$ZS8()X*1P`%7t8;H>whfLGjK5f6+J^E zJ$-$>KXX4GT(y1V5` z!3iT?1dKX?eldd~Bm|?UVqmDVlSDm0cOM27qN11{9#H_ja6(=J^Fs3nF8D(-p{Jr_ z{3d?(p?=SO^G4l!O6Q9b@rA0X_~eOrAjZG$QR3D*B|ck^BN1q38n&)N1*u>8fs^)GIX%zvwU)|T(F z3Brf(xI=MV2bc?|pNFN^YbYhGT9>xD2F=9(#Qz2M)fr#{#{DDqwzM#~OhI&J!(}!2GQwh_BTxB1|(L8Kx=QOHkbA>fj*XlR6C`dotHhHp?WA z?IPZ!5p;fhR;z6qqf`O*EfT?R-%}~0Lv!bzP$mXW-^Cs=bCxKhQUr_a!r+2VwwOmg z{z!p#g9n1hzELY@&qKJEe8OK@Syq0`*LP*|80@AGM}MjcD}J_o7=o*7z{3;diXSvM z_5oL!deRzqSJ0qUPuRTuY8(?w?dBa=JHmG2pJ4mnjLT(V{hRacKXwz;o!!k7#Ei@1 z!vixjP}s83*X3Kop()ZCoOuWyV`;khfB&5_{9o_gaD=)L ze&WvfJ^cjz-Mz!Z3MzBfdV1xidV2dAy7KCYzq1tba^lKM^vul7EA#b?^z=%$Q`0pP ze`ll?ZKtcn$EBsKf$Z;-gC3EY0+N4Hnk^e8CL*hyoTa3soRJ)&o*keSu9=^bCz>W3 zk%JbZ7NI5;0?3;Wj*`fqNe%&&{OgrqxfyqkP?A!L5y)P5N{SJ;=;-Lb%Q5_rztIKq zePcrUM)VCT5RT|52DbBx$~Tnu`SLpHrtL`Z@al#q&oqLy&?pJ*0BxL3i-@hmQ}k<| z!n=cqhi3zuhex~Nb|V_&Q(YYfW+QV02b%_Il}x(LdylIKdn<+w2FmxC*6987?74hy zJSHa0WxhVysmcE5q*dB?W|PZ(i91h^qN}uKqaCHNFeozGjOt?F$$b=_k2)0`x5v_S z!=c1_>KB`>;w{1j2pJOXhYc8PhBHQ&j`eG8>)Uz2C2Y&!v)# zep`yPI=Aso`!~%lCTF}I_LS-s^~q|k(YDfp3%l9U<;&&E@WjE<)A3cmOPA=ul8p`r zr8Z9wQrZkh^UuqN4eYz31z;NLGqYl-qirhf=RWtBr<|MKzcB+@4aoH)oja34%*Xt5lLr&0`3X1zh4!Wz3WXJ%oy_o=nc3L>nhplE)@-nc8oc>*XKclwbFx}>K@5R3111r6*#j_rPfyl z%@UgjHN0L1-RFjeZ(HTBiY=)I;;RG$? z6vZIG%D_69hmGG&3TF!%c@KLD%#Va!3X~Cc0`dsq6i+`aX$hfhm?QupU4!W&9))N) zjWeh=h8RdW)SWZWNlrS+THT*VT+0<}55g+}rn(~33sOX#w|Bx#ooqLwF7-aM{LS*j zKQLyR#Aq)-pL~YhO$VJn$biC6J;+&+T?lW-93wJ2;9+9I{gXIBjl1ua2vIxXGf7~O}Q`%{2pEAzKO z#6q`qkPu+VS%xu5fe;hL^Xh|JxS8T(^a~`SgACu;MXPwgJ(IAX@sua{O?e8d^-AC| z>kCNuInD~nZi@rwdJ~@sc*q@!4*(;AR{>`dD+_CNgF+w(;KL%Kf-;I2pcBN)1NVY? z;P*V|{NjFx3m*<_6hLr?;iV*uffYb<@255+gu@olo$6Tt724;)#3GC#K!SFQvR?+3 z+8?n^H~WT?JRBI&gWwK4f?b68M|o`LHw@K9qz&#aho5G5zy}Mp_fIt>Cc=O>^~wWq z0SomPFcZ+LTt}Fb{Lny`AQgbeV9qU$q6rS+#xM`EZzp8PG^Pnv4hIh;_|=9etq$Uq z6o%rYdLtW8OBpvDPy!)wq6m;Ag4a@xWNp0(-$A`jY5~~?Pwe%xbW2w&Jq|V~PRyT7 z6{TT9&E=Q8mez{I8=?ejGC4J>XTBrYtBMoE98B$txg>nRFRTG2g0N;^=OL6fu((=@ zvJ$AbOWK7|LYIOziu6WI^HPl8Ie6BmWgte%*9S)zGEFoTHHlNP!gUM2ZV~Qbw&KuW z2Tj$b?(IW1!7k}F@9y&walwKH)vBQ`l#qo&74?+oiLnvxhJK?wGI7dUbDaN5?kJ54$g$p*Gtp+s~HQ!^cYt zM^{>WrFQL)uhWOqftGPL-TXDUvahy}8<&UMm4hj?Y?t&ll`Mg~r}VLnmK5u>9~qV` zLlFoxO2rSYBA7gJt2E5oTbuQ@ir89I;>?yBeLcG(WA)MI#oyaxE7fF>u@*2%?YzW> z)Oi}w)5%oJ$-*1VV35LQ)ev3&5(Yc8I8_W2q_9snn&?9Xz(aR6ay%9`MFd~X$gl9`|;0C*n1^w zoV7+Q<{T#U%WdPn%T>BDMn}3-7}mz*9>jm==xX@9$CVq5QvitA9G)+TN*B9D0`1@Q z1G6Ro1rEeng2nJt(QX)@eUu<2{}xpf+X%0R*4u?_j;Ua~?EhS?>B8J11T=`ARZsS< z=E5*!EbDUZRXNj`dQ)G;@?M`GSYfsEw(LUW-$a52r*<1gBq8A*Xi#&@Rl4+=mLF&& zWhrZq8H1}h;jf;2WJ*J85X{D(ZGijbq9Y~3fA;q~7#dJqv+;xhZ~Fyjpo-%^&SQ+p zgcSzJ@t5^mVFrk{j;U=ZM#;guR}3Cicqu2_#%MRlh+HoDcUXM`98giOZ79v32fGGX zuynw52of{g6sqQ%-)syVPi=J_9<5BZZ4_Nxsg`9|y7FyxS<>0^RaQ2w$xYF*vE_{4 zl}*rbJTM?{6!Jn{3_^Kez~i)%2uiv&pqvv0QZy5LN?yOy{5C_9d$XeHOhA*7d*sH(M8 zv%2lHIY0vIJ;@=xiIu}LZeKK0JUh@ObdCDslCJ-}@3U9pz@2hit;N56wW_Y-Nc8j` z>_dm7wDu80jw*?mUlMa9qW}?GuqzMA>qTSSwsSSpDKugQl_0EM>1qzK@ z*Ut$U;c@Lk&OK#iEK?0?a?~;y^3vooWp?6q3wbkLoc-cesjb(})yPs7IO@lR8@sD8 z8yxF4F_QeYb$6``H*QqaGL$FLr``q*@^$RW$rrmCPNh?~rqG2M?#fk4RRLazR3==@ z*a3^o$6!=_j9LQIFfE#R^ToztU8#-+7#hUk$gQD!72co8OTd|DJh(!#hRDwxT`?!t zGhE}dUX@RKgTHobrf`$&maFJ^+6aLnrnKxwg*gjqj%FwyVRA;1g0Ks1PEpAvsJBw=@OW3B07b; zW77*sN1?KLJrpLzhxZIer_sDxpo6 z>QlG{r|gc!fI;c+4x3wLNC%Ny?j}T z+9jT;qfB@tF=`wLM}zsFv%KKq-Fm`u?ZJMu;tJqW4d)kEC_}}b`7|%ABnJ9eUDQl_ zY^2~-YtdnnzC0+GPA!HBnMKKZ^Gf+@^nyX1taf#*e4I9E?> z%Lk^FG-a0IVn{gCukw^`1JJ;8!zk+OomWf6glh2{@cV?iQ%&)0#{`IUH91C3xHT30 z7+%0cW8Ct|!ZdDHSCMYi1FS-Vc~^K4=sSn8GJI}euMJ^wMVwM*Q4sh<^mr^g)meFX z>50C^W30jg<`C=qPXY{v%;&IdEsGDT2o~U5!Aw6#k~QIs8FK0l8O+uryEyqE=%j5R+qLeX+2iJb?PR6(;B}7DL(@$ zv-gAI(vGU)aE6@8H%rq<=Mq_*&L>af4F5*?rW9|=&KEP^O2?18jcgX;INR@kH2Q{6-3v~7lm~xR6(|^^%$7nTIe=@Y=E>%{T^G+*HcFC1LAiF6V+2ZG7lQQtn% zD_rza+2`l-=iNTEK}i?pL(JXBL)=FoC+)9+OXM)G_$APnXZ+;8S1;I==Xm!8ZlpfK zUmpAY+`kmC*L-pNi(}65jxJ&%h|Ck)^E0pTVlMEap$$;N+N0)$zn<|A4Z}#UnpkSm zrQxE@NgTG~kK4+p5z6W=E>2_8%g!QfZTN~(?q5uUd0noSx|-Lt&TXzv?{I&+Vzz+R z=5n9DIgIMvzKCi32zFpq{BvpKay&bU-aO8sq&XUuHCYv`-b;vR$$Vq^dfvuUTP7J% zbKAJ`xtxgku!yA+R(7GZYT`g2^OtB?zgo|uN?0&6-E6BJ0S)$Det*+#a#dZ+`bVE3_m0{5YrHix4>;i`Y0^8QaR2lqw9c8-@7N`t>!? zRfiqU=e@e_m8nvGaQ(jUaA^(sjAvWLTE=I~=G(gE-P|eguKs*6&^8fD^Xl#TW$#Hl z3vz$pK{Ge7;Zf0wD9qXAn)o>c3VFGIPbFJxAvY{skA~J30oTN5AL49o?shCz$oDpT zlJ0wQ75#euQTHR;0oC`ej}OwgMUJs zOYir**Od4%&MYgEQSq&Ej|I>DOz#k|yJ377DF@j)Vy+8f<$V=&V=5X9NeTAe&!OHa zyc<_F9~6rD!{GrYcv6GZ4Z9y%NEC`papw&r7s+2+Q7gVou-Y%=fO35+VZ8i#qW*QN z+*D@Ms@XHRU4H5nDYE-=DZ1K&89k=Y(Cbn@?{eYVBC$%Lsy)q6qs5hl*fMRIrEnfD zfUC1-B2ratq(R5A(_QK3X1@CQ`TK5D_6-98h^NIDm2iS|!YqOh-L*aJ0p?tqbDxTy zrw0$?SLIM2eTuP4FmSkMhE#vsoBdXrFN-a z$;Z8>+t03E!;~Z7PdL+eI2&lEFR;E&?V|rm?=Z43{4WT8b{6)(GCDXhwpK{r(FdKoqt1pf7<8l9tYmGu@C`$2ajx?=dnymQa z2ai}sk-pjK$YV6wIRm{YlUQBis9k``gZRWSr4T%e12Tp%Jw^Z_x&w^!$fKk`U}%jy zc$BB+NukuQ(&m@%I|W+bSG|Xm;fEML5VV>i)yS~Ouf6QGBlf^e<~*IfN<`hhQNcU}ysc8UKD~6*s~z>G$CX<|M3>hl|jGC!vjl1X!yrLBa z%X@nvvNCx;*wiOnOrJa0KZWaG9CZIZ<;uwXH_7CW@bp*tQZN_4HxJz3Msslk)gxl$ z_{Sn~zuWbdW!`yiC^1vQ6Yd}BsV2?*fZ)YJwEj3(Rf98Q{2Wv;G;o%9f}e8diFVUq zKbd$TYz>Z=kobzPYsmIdD|3>i6q{79cm_4vaWif#a$>SPvy8;QOHYHx z9`<`SVzciwbP{n(xqveyH!ec*pyHSU0~ebI_$P$9??jS&hQ^D_-Qh=YZw0mv|AgBA zM#W@i{2OikAG*^6M2rLU-Mq^q3?nlTL@MbY*=gamF64FhAvt?cw|9m&xV2?jdy0UA0o;|_{4f^m*X5}7%k z1qGUhX2Kac5*nHs1=~?6f-wQ<4%rJyic!%KNy;w+J9ztje|$b(@;gj=WPCgbmG{T( ztwTruxuLU~NscY>}|}F0GBbJr~j5$sJuaiI`5DW$|_8wW)kgSvIbQU*6ujZ`AGk zw!h+#av~8b5q%wzXu=4a0JwEedhsS5JC9`2n`19rXPq9Ewa}W;WOsI2=(9srqay~q zc;SwoLJ5H=!*bL9Y5o7AV*K|}!}RwB|7-DoTOa67zBWnFykH#rxlsNGFuZgqvmokm z?w60txW_W^d%wH2&hE3j@=p)7pf7zgcGzM36d&pKqtl>4AHR&s7`W=OZ-G}N#F`Iq*Z>^cA-FQSUoipoYRx7oT%39 z<7ruq4kc1zh<_yGK2Z`*4JLakAF(YQP5DB3 z9K3_YHjBFqZTfA%v+8h|xKBOOA*JhgP`a@>djGH(tbYl{|9&wTng5dmW6Yu-A9>>q z#g#)l5gqCRnHZiCwDvgA$S(_ncXB!+T|<;PR{ea$|Jho zyr{d@`6)@SUjl1^QBFOySaN3Ul#0wnV-8}-57#cJ|Yj@^3t(gZ;@(G~4S zBWMN}lg4%i5VCHZC4^6)QpLF+T*>1Oiib5R`$ihC>gz%aUd9Y)PC+T7c1u~D%Fb?( zFx_}ikdg+l?OJ$_!k35K+aUd@?GA*gbB0m5R|z;@HWDCGM5{|w+WZ}Hh#_-1ey>fx z#RKnQzs{&gB9YatE2ECq`rrvH587VgAAn=|OY`-=YjI5fSBhg~{#QyI11rbherXeG zno4Wz$Ua-TxkE0g_u{qtW746&gX|$79z3$M zq}xg&41Gks$pP#E;HrGH0&P6)XWNt^SdPpB4saENSiJ(8*!KefGm1+}oTUL7&^THf zck6uRd%jm^?4!e&7`z<^4plpNF^qe(rr({@uIO6d_pH(ov(nvw!35$>JeBwasCSlq zF_|Xy_%H|d@LR`l=9TF7=oI{(kT>n`xN!KCUx+5*qC*0ACJQlfX_1@@;@Pd8ckME; zrj<{~Ar93u_6fU#+uBH=mXP$Ovhhl`ZPE}zJ*Q>GC@DicqH&wp9dlD&^yw|cTyqJL zUw@~;fFmKp3VzX&xOAEqA@S)n6%2@v&9>HF&qUh0Cwx8OgQGb7(wO!!%YLKu1WN!C zy|Fs%bK=M@1wW*O*kyPZ4#kf~HsUiF281cnhoM2p`pU=th>0x)%gDrnRq#W)LZh7c zgBI(#0NUdY5Ns~kkR6EWHOAx)$g3TMt{#voJt&@yKB!^0_YUkIn$#6s{|7=peJH5n zupThnHTc+5%SX|tw6#bF$Q3IvI|?wkIk?}5D#Z4E`P`dBr@3U$dms8WLnmUu z12Jf5nk4*`Bs{ZffU-(}rb;g=uok{DBm`t!@_f#&@fQ~2t};>l$K5aPa~IlZ4U zrAC0pAY#(;5Uu6tkMUsK%9fm3USgUmT4HUiFn-o*N^#C8iYRnQGW%rat}fv{JR^^GdRD>0JW#=Nyi^9beNF46#9G>?wU zlcmobgR$UN%^;sz307O_#tBuUwqy)9S)P@|rMM`J#(|9tE3BhohtCE#k}p{&$gH=p za6y)laE17y1@~rg%LGSE3-5Mbk(gchySlhyF40onQu3m->aJev-I&fYYPLIbE%evC z_Rm$q>QF(0Yo;x!3K!*JJed4VCQW;!n-OhGga3booMxb&}Dkp8=~YVhvWwF51hw16>05 zP{XYIEvwrQHrH03Kc*UsZ>`1{r-u6SKX!@$5`&+7M>^{ z-Gxf?ah})Y{Hn&F*Loj+Y|aB&v5CF`QEPl=M&d$$iSilk{S%T_rbprxI3&V4qwWKz4a3(Obw-nFN@-2f62bZ5Sz51< zkKpf|IXKS<89)s_G&)Q~x)#+yVkV)Px5}_ut5vVMYT+6hy212Ozs70bGGTcwsRjGN zw%eP4a_Cq=Yl5^yQzrEjliyowbF0^EuhZL8fyRF>1FCF1xOlLo=@4Xyit_W^rM0g| zmbDb-ZqQcn_)o$f0I4YKuHlte!P=^Xwexq!n$n?l9z`Bb1CsmJQRkm=BIUS!&Ssl)_x%@UA3#ntg4@X2k8#Q&%X?4*w4 zcMie#!Ppd@ZDjm@n;+|+bs}SUO-vW4%JYOiy&?+2)A_oHdw;Et<~+M+8->lnSrOGe zKzU8fd1@V?06r|fISh=MSy&9%85j)=7)_X2jM)s?40-?mUue@Q+S)on{u?2pNGD-qVvGN8 zm#sfjG0Z)T@fq2e=~Oit@R{%#wf}|Lh4t@eNS65(RT+JBzndrPEU_d~r989v8bU$w zuy_KY;Z*lF^%wR+uJ`JyOeYGuSg zRih`^LD2RcG$VrTP-;b4+R>2i>1l(v-L=9FceKMr)u({%qiIGNqelwe z1JCe7vPT4LJB{~_q(+sb27YJ%hNh26J6PC^z_uff9ekn|Ez=A|Wyf{dov9YqW{-E- zL%ANoq81gU7V}nv3a5v|x-GyRG;~dm+mr8x7_$e#9aVIVq0`IchM;-`, `Quantum ESPRESSO `, and `OpenMX `, +with plans to support `AkaiKKR ` in the future. + +License +---------------------------------------------------------------- + +The distribution of the program package and the source codes for cif2x follow GNU General Public License version 3 (GPL v3) or later. + +Contributors +---------------------------------------------------------------- + +This software was developed by the following contributors. + +- ver.1.0-alpha (Released on 2023/12/28) + + - Developers + + - Kazuyoshi Yoshimi (The Instutite for Solid State Physics, The University of Tokyo) + + - Tatsumi Aoyama (The Instutite for Solid State Physics, The University of Tokyo) + + - Yuichi Motoyama (The Instutite for Solid State Physics, The University of Tokyo) + + - Masahiro Fukuda (The Instutite for Solid State Physics, The University of Tokyo) + + - Tetsuya Fukushima (The National Institute of Advanced Industrial Science and Technology (AIST)) + + - Kota Ido (The Instutite for Solid State Physics, The University of Tokyo) + + - Shusuke Kasamatsu (Yamagata University) + + - Takashi Koretsune (Tohoku University) + + - Project Corrdinator + + - Taisuke Ozaki (The Instutite for Solid State Physics, The University of Tokyo) + + +Copyright +---------------------------------------------------------------- + +.. only:: html + + |copy| *2023- The University of Tokyo. All rights reserved.* + + .. |copy| unicode:: 0xA9 .. copyright sign + +.. only:: latex + + :math:`\copyright` *2023- The University of Tokyo. All rights reserved.* + + +This software was developed with the support of "Project for advancement of software usability in materials science" of The Institute for Solid State Physics, The University of Tokyo. + +Operating environment +---------------------------------------------------------------- + +This tool was tested on the following platforms: + +- Ubuntu Linux + python3 + diff --git a/manual/v1.0-alpha/en/html/_sources/cif2x/appendix/index.rst.txt b/manual/v1.0-alpha/en/html/_sources/cif2x/appendix/index.rst.txt new file mode 100644 index 0000000..9aabd23 --- /dev/null +++ b/manual/v1.0-alpha/en/html/_sources/cif2x/appendix/index.rst.txt @@ -0,0 +1,47 @@ +.. _sec-cif2x-appendix: + +================================================================ +Extension guide +================================================================ + +Adding modes of Quantum ESPRESSO +---------------------------------------------------------------- + +In order to add supports to modes of Quantum ESPRESSO, the mapping between the modes and the transformation classes should be added to ``create_modeproc()`` function in ``src/cif2x/qe/calc_mode.py``. + +.. code-block:: python + + def create_modeproc(mode, qe): + if mode in ["scf", "nscf"]: + modeproc = QEmode_pw(qe) + else: + modeproc = QEmode_generic(qe) + return modeproc + + +The transformation functionality for each mode is provided as a derived class of ``QEmode_base`` class. This class implements methods ``update_namelist()`` for updating the namelist block, and ``update_cards()`` for generating data of card blocks. +In the current version, two classes are provided: ``QEmode_pw`` class for scf and nscf calculations of pw.x, and ``QEmode_generic`` class for generating output as-is. + +.. code-block:: python + + class QEmode_base: + def __init__(self, qe): + def update_namelist(self, content): + def update_cards(self, content): + + +For the namelist, the transformation class generates values for blank entries from crystal structure data and other sources. It may also force to set values such as the lattice parameters that are determined from the crystal structure data, or those that must be specified consistently with other parameters. The functions are provided for each mode separately. + +For card blocks, a function is provided for each card, and the mapping between the card type and the function is given in the ``card_table`` variable. +The method ``update_cards()`` in the base class picks up and runs the function associated to the card, and updates the content of the card. Of course, a new ``update_cards()`` function may be defined. + +.. code-block:: python + + self.card_table = { + 'CELL_PARAMETERS': generate_cell_parameters, + 'ATOMIC_SPECIES': generate_atomic_species, + 'ATOMIC_POSITIONS': generate_atomic_positions, + 'K_POINTS': generate_k_points, + } + +The functions for cards are gathered in ``src/cif2x/qe/cards.py`` with the function names as ``generate_{card name}``. These functions takes parameters for card blocks as argument, and returns a dictionary containing the card name, the options, and the data field. diff --git a/manual/v1.0-alpha/en/html/_sources/cif2x/basic-usage.rst.txt b/manual/v1.0-alpha/en/html/_sources/cif2x/basic-usage.rst.txt new file mode 100644 index 0000000..ce44218 --- /dev/null +++ b/manual/v1.0-alpha/en/html/_sources/cif2x/basic-usage.rst.txt @@ -0,0 +1,100 @@ +Installation and basic usage +================================================================ + +**Prerequisite** + + Input file generator for first-principles calculation ``cif2x`` included in HTP-tools requires the following programs and libraries: + + - python 3.x + - pymatgen module + - ruamel.yaml module + - f90nml module + - qe-tools module + - numpy module + - pandas module + - monty module + - OpenBabel module (optional) + +**Official pages** + + - `GitHub repository `_ + +**Downloads** + + cif2x can be downloaded by the following command with git: + + .. code-block:: bash + + $ git clone https://github.com/issp-center-dev/cif2x.git + +**Installation** + + Once the source files are obtained, you can install cif2x by running the following command. The required libraries will also be installed automatically at the same time. + + .. code-block:: bash + + $ cd ./cif2x + $ python3 -m pip install . + + The executable file ``cif2x`` will be installed. + You may need to add ``--user`` option next to ``install`` keyword above in case you are not allowed to install packages system-wide. + + +**Directory structure** + + :: + + . + |-- LICENSE + |-- README.md + |-- pyproject.toml + |-- docs/ + | |-- ja/ + | |-- en/ + | |-- tutorial/ + |-- src/ + | |-- cif2x/ + | |-- __init__.py + | |-- main.py + | |-- cif2struct.py + | |-- struct2qe.py + | |-- qe/ + | | |-- __init__.py + | | |-- calc_mode.py + | | |-- cards.py + | | |-- content.py + | | |-- qeutils.py + | | |-- tools.py + | |-- struct2vasp.py + | |-- struct2openmx.py + | |-- openmx/ + | | |-- __init__.py + | | |-- vps_table.py + | |-- utils.py + |-- sample/ + + +**Basic usage** + + ``cif2x`` is a tool to generate a set of input files for first-principles calculation software. It takes an input parameter file as a template, and generates parameter items that may vary by materials and calculation conditions from crystallographic data. In the present version, ``cif2x`` supports Quantum ESPRESSO, VASP, and OpenMX. + + #. Prepare input parameter file + + First, you need to create an input parameter file in YAML format that describes contents of the input file to be generated for the first-principles calculation software. + + #. Prepare crystal structure files and pseudo-potential files + + The crystal structure data need to be prepared for the target materials. The file format is CIF, POSCAR, xfs, or those supported by pymatgen. + + For Quantum ESPRESSO, the pseudo-potential files and the index file in CSV format need to be placed. Their locations are specified in the input parameter file. + + For VASP, the location of the pseudo-potential files will be specified in a file ``~/.config/.pmgrc.yaml`` or by an environment variable. It may be specified in the input parameter file. + + #. Run command + + Run ``cif2x`` command with the input parameter file and the crystal structure data as arguments. To generate input files for Quantum ESPRESSO, the target option ``-t QE`` should be specified. The option turns to ``-t VASP`` for VASP, and ``-t OpenMX`` for OpenMX. + + .. code-block:: bash + + $ cif2x -t QE input.yaml material.cif + diff --git a/manual/v1.0-alpha/en/html/_sources/cif2x/command/index.rst.txt b/manual/v1.0-alpha/en/html/_sources/cif2x/command/index.rst.txt new file mode 100644 index 0000000..0be10aa --- /dev/null +++ b/manual/v1.0-alpha/en/html/_sources/cif2x/command/index.rst.txt @@ -0,0 +1,54 @@ +Command reference +================================================================ + +cif2x +---------------------------------------------------------------- + + Generate input files for first-principles calculation software + +SYNOPSIS: + + .. code-block:: bash + + cif2x [-v][-q] -t target input_yaml material.cif + cif2x -h + cif2x --version + +DESCRIPTION: + + This program reads an input parameter file specified by ``input_yaml`` and a crystal data file specified by ``material.cif``, and generates a set of input files for first-principles calculation software. In the current version, the supported software includes Quantum ESPRESSO, VASP, and OpenMX. + It takes the following command line options. + + - ``-v`` + + increases verbosity of the runtime messages. When specified multiple times, the program becomes more verbose. + + - ``-q`` + + decreases verbosity of the runtime messages. It cancels the effect of ``-v`` option, and when specified multiple times, the program becomes more quiet. + + - ``-t`` *target* + + specifies the target first-principles calculation software. The supported software for *target* is listed as follows: + + - ``QE``, ``espresso``, ``quantum_espresso``: generates input files for Quantum ESPRESSO. + + - ``VASP``: generates input files for VASP. + + - ``OpenMX``: generates input files for OpenMX + + - ``input_yaml`` + + specifies an input parameter file in YAML format. + + - ``material.cif`` + + specifies crystal structure data file. It is in CIF (Crystallographic Information Framework) format, or other format supported by pymatgen. + + - ``-h`` + + displays help and exits. + + - ``--version`` + + displays version information. diff --git a/manual/v1.0-alpha/en/html/_sources/cif2x/filespec/index.rst.txt b/manual/v1.0-alpha/en/html/_sources/cif2x/filespec/index.rst.txt new file mode 100644 index 0000000..bdf1ee0 --- /dev/null +++ b/manual/v1.0-alpha/en/html/_sources/cif2x/filespec/index.rst.txt @@ -0,0 +1,271 @@ +.. _sec-cif2x-fileformat: + +====================== +File format +====================== + +Input parameter file +====================== + +An input parameter file describes information necessary to generate input files for first-principles calculation software by ``cif2x``. It should be given in YAML format, and consist of the following sections. + + 1. structure section: describes how to handle crystal structure data. + + 2. optional section: describes pseudo-potential files, and symbol definitions for reference feature of YAML. + + 3. tasks section: describes contents of input files. + + +structure +--------- + + ``use_ibrav`` (default value: ``false``) + + This parameter specifies whether ``ibrav`` parameter is used for Quantum ESPRESSO as the input of the crystal structure. When it is set to ``true``, the lattice is transformed to match the convention of Quantum ESPRESSO, and the lattice parameters ``a``, ``b``, ``c``, ``cosab``, ``cosac``, and ``cosbc`` are written to the input file as needed. + + ``tolerance`` (default value: 0.01) + + This parameter specifies the tolerance in the difference between the reconstructed Structure data and the original data when ``use_ibrav`` is set to ``true``. + + ``supercell`` (default value: none) + + This parameter specifies the size of supercell, when it is adopted, in the form of [:math:`n_x`, :math:`n_y`, :math:`n_z`]. + + +optional +-------- +This section contains global settings needed for the first-principles calculation software. The available parameters are described in the corresponding sections below. + +tasks +----- +This section defines contents of the input files. It is organized as a list of blocks, each corresponding to an input file, to allow for generating a set of input files for an input. The terms described in each block are explained in the following. + + + ``mode`` (Quantum ESPRESSO) + + This parameter specifies the type of calculation. In the current version, the supported mode includes ``scf`` and ``nscf`` for pw.x of Quantum ESPRESSO. If an unsupported mode is specified, the settings in ``content`` will be exported as is. + + ``output_file`` (Quantum ESPRESSO) + + This parameter specifies the file name of the output. + + ``output_dir`` + + This parameter specifies the directory name of the output. The default value is the current directory. + + ``content`` + + This parameter describes the content of the output. + For Quantum ESPRESSO, it contains the namelist data (blocks starting from ``&system``, ``&control``, etc.) in ``namelist`` block, and other card data (such as ``K_POINTS``) as individual blocks. Some card data may take parameters. + + ``template`` (Quantum ESPRESSO) + + ``template_dir`` (VASP) + + These parameters specifies the template file and the template directory for the input files, respectively. If they are not given, templates will not be used. The content of the template file is merged with those of ``content``. The entries in the template file will be superseded by those of ``content`` if the entries of the same keys appear both. + + +Specifying parameter set +---------------------------------------- +An input parameter may be given a list or range of parameters. In this case, a separate directory is created for every combination of parameters to store the generated input files. A special syntax ``${...}`` is used to specify the parameter set as follows: + +- a list: ``${[ A, B, ... ]}`` + + a set of parameter values is described as a Python list. Each entry may be a scalar value, or a list of values. + +- a range: ``${range(N)}``, ``${range(start, end, step)}`` + + a range of parameter is given by the keyword ``range``. The former specifies the values from ``0`` to ``N-1``, and the latter from ``start`` to ``end`` with every ``step``. (If ``step`` is omitted, it is assumed to be ``1``.) + + +Parameters for Quantum ESPRESSO +=============================== + +The entries of ``optional`` section and ``content`` part of the ``tasks`` section specific to Quantum ESPRESSO are explained below. +In the current version, ``scf`` mode and ``nscf`` mode of ``pw.x`` are supported. + +optional section +------------------ + + ``pp_file`` + + This parameter specifies the index file in CSV format that relates the element type and the pseudo-potential file. This file contains the following columns: element name, type of pseudo-potential, nexclude, orbitals. An example line is given as: + + .. code-block:: + + Fe,pbe-spn-rrkjus_psl.0.2.1,4,spd + + The name of the pseudo-potential file corresponding to the above example reads + Fe.pbe-spn-rrkjus_psl.0.2.1.UPF . + + ``cutoff_file`` + + This parameter specifies the index file in CSV format that relates the pseudo-potential file and the cutoff values. This file contains the following columns: name of pseudo-potential file, ``ecutwfc`` value, ``ecutrho`` value. + + ``pseudo_dir`` + + This parameter specifies the name of the directory that holds pseudo-potential files. It is used when the cutoff values are obtained from the pseudo-potential files. + It is indenepent from the ``pseudo_dir`` parameter in the input files for Quantum ESPRESSO. + + +content +-------- + + **namelist** + + - The lattice specifications in ``&system`` block will be superseded according to ``use_ibrav`` parameter in the ``structure`` section. + + - ``use_ibrav = false``: + ``ibrav`` is set to ``0``, and the lattice parameters including ``a``, ``b``, ``c``, ``cosab``, ``cosac``, ``cosbc``, ``celldm`` are removed. + + - ``use_ibrav = true``: + ``ibrab`` is set to the index of Bravais lattices obtained from the crystal structure data. The Structure data will be reconstructed to match the convention of Quantum ESPRESSO. + + - ``nat`` (the number of atoms) and ``ntyp`` (the number of element types) will be superseded by the values obtained from the crystal structure data. + + - The cutoff values ``ecutwfc`` and ``ecutrho`` are obtained from the pseudo-potential files if these parameters are left blank. + + **CELL_PARAMETERS** + + - This block will not be generated if ``use_ibrav`` is set to ``true``. Otherwise, the lattice vectors are exported in units of angstrom. + + - The information of the lattice vectors are obtained from the crystal structure data. When the ``data`` field is defined and contains a 3x3 matrix, that value will be used for the set of lattice vectors instead. + + **ATOMIC_SPECIES** + + - This block exports a list of atom species, atomic mass, and the file name of the pseudo-potential data. + + - The information of the atoms are obtained from the crystal structure data. The file names of the pseudo-potential data are referred from the CSV-formatted index file specified by ``pp_list`` parameter. + + - When the ``data`` field is defined and contains the required data, these values will be used instead. + + **ATOMIC_POSITIONS** + + - This block exports the atomic species and their fractional coordinates. + + - When ``ignore_species`` is given to specify an atomic species or a list of species, the values of ``if_pos`` for these species will be set to ``0``. It is used for MD or structure relaxations. + + - When the ``data`` field is defined and contains the required data, these values will be used instead. + + **K_POINTS** + + - This block exports the information of k points. The type of the output is specified by the ``option`` parameter that takes one of the following: + + - ``gamma``: uses :math:`\Gamma` point. + + - ``crystal``: generates a list of k points in mesh pattern. The mesh width is given by the ``grid`` parameter, or derived from the ``vol_density`` or ``k_resolution`` parameters. + + - ``automatic``: generates a mesh of k points. It is given by the ``grid`` parameter, or derived from the ``vol_density`` or ``k_resolution`` parameters. The shift is obtained from the ``kshifts`` parameter. + + - The mesh width is determined in the following order: + + - the ``grid`` parameter, specified by a list of :math:`n_x, n_y, n_z`, or a scalar value :math:`n`. For the latter, :math:`n_x = n_y = n_z = n` is assumed. + - derived from the ``vol_density`` parameter. + - derived from the ``k_resolution`` parameter, whose default value is 0.15. + + - When the ``data`` field is defined and contains the required data, these values will be used. + + +Parameters for VASP +=============================== + +The entries of ``optional`` section and ``content`` part of the ``tasks`` section specific to VASP are explained below. + +optional +-------- + +The type and the location of pseudo-potential files are specified. + +According to pymatgen, the pseudo-potential files are obtained from +``PMG_VASP_PSP_DIR``/*functional*/POTCAR.{element}(.gz) or +``PMG_VASP_PSP_DIR``/*functional*/{element}/POTCAR, +where +``PMG_VASP_PSP_DIR`` points to the directory and it is given in the configuration file +``~/.config/.pmgrc.yaml`` or by the environment variable of the same name. +*functional* refers to the type of the pseudo-potential, whose value is predefined as +``POT_GGA_PAW_PBE``, ``POT_LDA_PAW``, etc. + + + ``pseudo_functional`` + + This parameter specifies the type of the pseudo-potential. The relation to the *functional* value above is defined in the table of pymatgen, for example, by ``PBE`` to ``POT_GGA_PAW_PBE``, or by ``LDA`` to ``POT_LDA_PAW``, or in a similar manner. + + +When the ``pseudo_dir`` parameter is specified, it is used as the directory that holds the pseudo-potential files, ignoring the convention of pymatgen. + + ``psuedo_dir`` + + This parameter specifies the directory that holds the pseudo-potential files. The paths to the pseudo-potential file turn to ``pseudo_dir``/POTCAR.{element}(.gz), or ``pseudo_dir``/{element}/POTCAR. + +tasks +----- + +The template files are assumed to be placed in the directory specified by the ``template_dir`` parameter by the names ``INCAR``, ``KPOINTS``, ``POSCAR``, and ``POTCAR``. The missing files will be ignored. + + + +content +------- + + **incar** + + - This block contains parameters described in the INCAR file + + **kpoints** + + - ``type`` + + The ``type`` parameter describes how KPOINTS are specified. The following values are allowed, with some types accepting parameters. See pymatgen.io.vasp manual for further details. + + - ``automatic`` + + parameter: ``grid`` + + - ``gamma_automatic`` + + parameter: ``grid``, ``shift`` + + - ``monkhorst_automatic`` + + parameter: ``grid``, ``shift`` + + - ``automatic_density`` + + parameter: ``kppa``, ``force_gamma`` + + - ``automatic_gamma_density`` + + parameter: ``grid_density`` + + - ``automatic_density_by_vol`` + + parameter: ``grid_density``, ``force_gamma`` + + - ``automatic_density_by_lengths`` + + parameter: ``length_density``, ``force_gamma`` + + - ``automatic_linemode`` + + parameter: ``division``, ``path_type`` (corresponding to the ``path_type`` parameter of HighSymmKpath.) + + +Parameters for OpenMX +=============================== + +The entries of ``optional`` section and ``content`` part of the ``tasks`` section specific to OpenMX are explained below. + +optional +-------- + + ``data_path`` + + This parameter specifies the name of directory that holds files for pseudo-atomic orbitals and pseudo-potentials. It corresponds to the ``DATA.PATH`` parameter. + +content +-------- + + ``precision`` + + This parameter specifies the set of pseudo-atomic orbitals listed in Tables 1 and 2 of Section 10.6 of the OpenMX manual. It is one of ``quick``, ``standard``, or ``precise``. The default value is ``quick``. + diff --git a/manual/v1.0-alpha/en/html/_sources/cif2x/index.rst.txt b/manual/v1.0-alpha/en/html/_sources/cif2x/index.rst.txt new file mode 100644 index 0000000..24694f7 --- /dev/null +++ b/manual/v1.0-alpha/en/html/_sources/cif2x/index.rst.txt @@ -0,0 +1,15 @@ +**************************************************************** +Input file generator for first-principles calculations (cif2x) +**************************************************************** + + +.. toctree:: + :maxdepth: 2 + :numbered: 2 + + about/index + basic-usage + tutorial/index + command/index + filespec/index + appendix/index diff --git a/manual/v1.0-alpha/en/html/_sources/cif2x/tutorial/index.rst.txt b/manual/v1.0-alpha/en/html/_sources/cif2x/tutorial/index.rst.txt new file mode 100644 index 0000000..758edac --- /dev/null +++ b/manual/v1.0-alpha/en/html/_sources/cif2x/tutorial/index.rst.txt @@ -0,0 +1,67 @@ +.. _sec-cif2x-tutorial: + +Tutorial +================================================================ + +The procedure to use the input file generator ``cif2x`` for first-principles calculation software consists of preparing an input parameter file, crystal structure data, and pseudo-potential files, and running the program ``cif2x``. +In the current version, the supported software includes Quantum ESPRESSO, VASP, and OpenMX. +In this tutorial, we will explain the steps along a sample for Quantum ESPRESSO in ``docs/tutorial/cif2x``. + + +Prepare an input parameter file +---------------------------------------------------------------- + +An input parameter file describes the content of input files for the first-principles calculation software. +An example is presented below. It is a text file in YAML format that contains options to crystal structure data, and contents of the input file used as an input for the first-principle calculation. See :ref:`file format ` section for the details of specification. + +In YAML format, parameters are given in dictionary form as ``keyword: value``, where ``value`` is a scalar such as a number or a string, or a set of values enclosed in ``[ ]`` or listed in itemized form, or a nested dictionary. + +.. literalinclude:: ../../../../tutorial/cif2x/input.yaml + :language: yaml + + +The input parameter file consists of ``structure``, ``optional``, and ``tasks`` sections. +The ``structure`` section specifies options to the crystal structure data. +The ``optional`` section holds global settings concerning the pseudo-potentials. + +The ``tasks`` section describes inputs for the first-principles calculations. In case of generating multiple files for a series of calculations, the ``tasks`` section takes a list of parameter sets. +For each set, the calculation type is specified by the ``mode`` parameter: ``scf`` and ``nscf`` are supported as modes, as well as arbitrary modes for generic output. + +The content of the output is given in ``content`` section. +The input files of Quantum ESPRESSO are composed of the parts in namelist format of Fortran90 starting from ``&keyword``, and the blocks called cards that start with keywords such as ``K_POINTS`` and end with blank lines. The ``content`` block holds namelist and cards in a form of nested dictionary. +Basically, the specified items are written to the input files as-is, except for several cases. If a keyword is left blank, its value will be obtained form the crystal structure data or other sources. + +Besides, templates of the input files can be used. The content of the file given by the ``template`` keyword is considered as input data along with the entries in ``content`` block. When the entries of the same keywords appear both, those of the input parameter files will be used. Therefore, it is possible to use template files and overwrite some entries by the input parameter file as needed. +In the present example, the file (``scf.in_tmpl``) shown below is read as a template, and the entries on cutoff parameters as well as cards of CELL_PARAMETER, ATOMIC_SPECIES, ATOMIC_POSITIONS, K_POINTS are generated from the crystal structure data and pseudo-potential files. It is noted that the values of ``ecutwfc`` and ``ecutrho`` are overwritten by the empty lines. + +.. literalinclude:: ../../../../tutorial/cif2x/scf.in_tmpl + :language: fortran + + +Generating input files +---------------------------------------------------------------- + +The program ``cif2x`` is executed with the input parameter file (``input.yaml``) and crystal structure data (``Co3SnS2_nosym.cif``) as follows. + +.. code-block:: bash + + $ cif2x -t QE input.yaml Co3SnS2_nosym.cif + +The required pseudo-potential files should be placed in the directory ``./pseudo``, and the index file for the pseudo-potential should be prepared as ``./psudo/pp_psl_pbe_rrkjus.csv``. + +Run ``cif2x`` and a set of input files for Quantum ESPRESSO will be created. The output file is specified by ``output_file`` parameter of the input parameter file, and stored in the directory given by ``output_dir``. In this example, the input file for SCF calculation is created as ``./scf/scf.in``. + + +Specifying parameter sets +---------------------------------------------------------------- + +In some cases, a series of input files should be generated with varying their parameter values. For example, the convergence is examined by modifying the cutoff values or grid resolution of k points. The input parameter can be given a list or a range of values, and the input files for every combination from the choices of parameter values are generated and stored in separate directories. To specify parameter set, a special syntax ``${...}`` is adopted. + +.. code-block:: yaml + + content: + K_POINTS: + option: automatic + grid: ${ [ [4,4,4], [8,8,8], [12,12,12] ] } + +When ``K_POINTS`` is given as above, the input files having the ``grid`` value to be ``[4,4,4]``, ``[8,8,8]``, ``[12,12,12]`` will be generated in the sub-directories, ``4x4x4/``, ``8x8x8/``, ``12x12x12/``, respectively. diff --git a/manual/v1.0-alpha/en/html/_sources/index.rst.txt b/manual/v1.0-alpha/en/html/_sources/index.rst.txt new file mode 100644 index 0000000..0176a5c --- /dev/null +++ b/manual/v1.0-alpha/en/html/_sources/index.rst.txt @@ -0,0 +1,20 @@ +.. HTP-tools documentation master file, created by + sphinx-quickstart on Fri Jun 30 11:02:31 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Cif2x Users Guide +===================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + cif2x/index + +.. Indices and tables +.. ================== + +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` diff --git a/manual/v1.0-alpha/en/html/_static/alabaster.css b/manual/v1.0-alpha/en/html/_static/alabaster.css new file mode 100644 index 0000000..78b7a4a --- /dev/null +++ b/manual/v1.0-alpha/en/html/_static/alabaster.css @@ -0,0 +1,703 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/_static/basic.css b/manual/v1.0-alpha/en/html/_static/basic.css new file mode 100644 index 0000000..30fee9d --- /dev/null +++ b/manual/v1.0-alpha/en/html/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/_static/custom.css b/manual/v1.0-alpha/en/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/manual/v1.0-alpha/en/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/manual/v1.0-alpha/en/html/_static/doctools.js b/manual/v1.0-alpha/en/html/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/manual/v1.0-alpha/en/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/manual/v1.0-alpha/en/html/_static/documentation_options.js b/manual/v1.0-alpha/en/html/_static/documentation_options.js new file mode 100644 index 0000000..3775ccc --- /dev/null +++ b/manual/v1.0-alpha/en/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '1.0-alpha', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/_static/file.png b/manual/v1.0-alpha/en/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/manual/v1.0-alpha/en/html/_static/language_data.js b/manual/v1.0-alpha/en/html/_static/language_data.js new file mode 100644 index 0000000..250f566 --- /dev/null +++ b/manual/v1.0-alpha/en/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/manual/v1.0-alpha/en/html/_static/minus.png b/manual/v1.0-alpha/en/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/manual/v1.0-alpha/en/html/_static/plus.png b/manual/v1.0-alpha/en/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/manual/v1.0-alpha/en/html/_static/pygments.css b/manual/v1.0-alpha/en/html/_static/pygments.css new file mode 100644 index 0000000..0d49244 --- /dev/null +++ b/manual/v1.0-alpha/en/html/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/_static/searchtools.js b/manual/v1.0-alpha/en/html/_static/searchtools.js new file mode 100644 index 0000000..7918c3f --- /dev/null +++ b/manual/v1.0-alpha/en/html/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/manual/v1.0-alpha/en/html/_static/sphinx_highlight.js b/manual/v1.0-alpha/en/html/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/manual/v1.0-alpha/en/html/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '

" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/manual/v1.0-alpha/en/html/cif2x/about/index.html b/manual/v1.0-alpha/en/html/cif2x/about/index.html new file mode 100644 index 0000000..f618258 --- /dev/null +++ b/manual/v1.0-alpha/en/html/cif2x/about/index.html @@ -0,0 +1,172 @@ + + + + + + + + 1. Introduction — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

1. Introduction¶

+
+

1.1. What is cif2x?¶

+

In recent years, the use of machine learning for predicting material properties and designing substances (known as materials informatics) has gained considerable attention. +The accuracy of machine learning depends heavily on the preparation of appropriate training data. +Therefore, the development of tools and environments for the rapid generation of training data is expected to contribute significantly to the advancement of research in materials informatics.

+

Cif2x is a tool that generates input files for first-principles calculations from cif files. +It constructs parts that vary depending on the type of material and computational conditions from crystal structure data, using input parameters as a template. +It is capable of generating multiple input files tailored to specific computational conditions. +Currently, it supports VASP <https://www.vasp.at>, Quantum ESPRESSO <https://www.quantum-espresso.org>, and OpenMX <http://www.openmx-square.org>, +with plans to support AkaiKKR <http://kkr.issp.u-tokyo.ac.jp> in the future.

+
+
+

1.2. License¶

+

The distribution of the program package and the source codes for cif2x follow GNU General Public License version 3 (GPL v3) or later.

+
+
+

1.3. Contributors¶

+

This software was developed by the following contributors.

+
    +
  • ver.1.0-alpha (Released on 2023/12/28)

    +
      +
    • Developers

      +
        +
      • Kazuyoshi Yoshimi (The Instutite for Solid State Physics, The University of Tokyo)

      • +
      • Tatsumi Aoyama (The Instutite for Solid State Physics, The University of Tokyo)

      • +
      • Yuichi Motoyama (The Instutite for Solid State Physics, The University of Tokyo)

      • +
      • Masahiro Fukuda (The Instutite for Solid State Physics, The University of Tokyo)

      • +
      • Tetsuya Fukushima (The National Institute of Advanced Industrial Science and Technology (AIST))

      • +
      • Kota Ido (The Instutite for Solid State Physics, The University of Tokyo)

      • +
      • Shusuke Kasamatsu (Yamagata University)

      • +
      • Takashi Koretsune (Tohoku University)

      • +
      +
    • +
    • Project Corrdinator

      +
        +
      • Taisuke Ozaki (The Instutite for Solid State Physics, The University of Tokyo)

      • +
      +
    • +
    +
  • +
+
+ +
+

1.5. Operating environment¶

+

This tool was tested on the following platforms:

+
    +
  • Ubuntu Linux + python3

  • +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/cif2x/appendix/index.html b/manual/v1.0-alpha/en/html/cif2x/appendix/index.html new file mode 100644 index 0000000..9f55d58 --- /dev/null +++ b/manual/v1.0-alpha/en/html/cif2x/appendix/index.html @@ -0,0 +1,147 @@ + + + + + + + + 6. Extension guide — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

6. Extension guide¶

+
+

6.1. Adding modes of Quantum ESPRESSO¶

+

In order to add supports to modes of Quantum ESPRESSO, the mapping between the modes and the transformation classes should be added to create_modeproc() function in src/cif2x/qe/calc_mode.py.

+
def create_modeproc(mode, qe):
+    if mode in ["scf", "nscf"]:
+        modeproc = QEmode_pw(qe)
+    else:
+        modeproc = QEmode_generic(qe)
+    return modeproc
+
+
+

The transformation functionality for each mode is provided as a derived class of QEmode_base class. This class implements methods update_namelist() for updating the namelist block, and update_cards() for generating data of card blocks. +In the current version, two classes are provided: QEmode_pw class for scf and nscf calculations of pw.x, and QEmode_generic class for generating output as-is.

+
class QEmode_base:
+    def __init__(self, qe):
+    def update_namelist(self, content):
+    def update_cards(self, content):
+
+
+

For the namelist, the transformation class generates values for blank entries from crystal structure data and other sources. It may also force to set values such as the lattice parameters that are determined from the crystal structure data, or those that must be specified consistently with other parameters. The functions are provided for each mode separately.

+

For card blocks, a function is provided for each card, and the mapping between the card type and the function is given in the card_table variable. +The method update_cards() in the base class picks up and runs the function associated to the card, and updates the content of the card. Of course, a new update_cards() function may be defined.

+
self.card_table = {
+    'CELL_PARAMETERS': generate_cell_parameters,
+    'ATOMIC_SPECIES': generate_atomic_species,
+    'ATOMIC_POSITIONS': generate_atomic_positions,
+    'K_POINTS': generate_k_points,
+}
+
+
+

The functions for cards are gathered in src/cif2x/qe/cards.py with the function names as generate_{card name}. These functions takes parameters for card blocks as argument, and returns a dictionary containing the card name, the options, and the data field.

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/cif2x/basic-usage.html b/manual/v1.0-alpha/en/html/cif2x/basic-usage.html new file mode 100644 index 0000000..9e01e2f --- /dev/null +++ b/manual/v1.0-alpha/en/html/cif2x/basic-usage.html @@ -0,0 +1,214 @@ + + + + + + + + 2. Installation and basic usage — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

2. Installation and basic usage¶

+

Prerequisite

+
+

Input file generator for first-principles calculation cif2x included in HTP-tools requires the following programs and libraries:

+
    +
  • python 3.x

  • +
  • pymatgen module

  • +
  • ruamel.yaml module

  • +
  • f90nml module

  • +
  • qe-tools module

  • +
  • numpy module

  • +
  • pandas module

  • +
  • monty module

  • +
  • OpenBabel module (optional)

  • +
+
+

Official pages

+
+
+

Downloads

+
+

cif2x can be downloaded by the following command with git:

+
$ git clone https://github.com/issp-center-dev/cif2x.git
+
+
+
+

Installation

+
+

Once the source files are obtained, you can install cif2x by running the following command. The required libraries will also be installed automatically at the same time.

+
$ cd ./cif2x
+$ python3 -m pip install .
+
+
+

The executable file cif2x will be installed. +You may need to add --user option next to install keyword above in case you are not allowed to install packages system-wide.

+
+

Directory structure

+
+
.
+|-- LICENSE
+|-- README.md
+|-- pyproject.toml
+|-- docs/
+|   |-- ja/
+|   |-- en/
+|   |-- tutorial/
+|-- src/
+|   |-- cif2x/
+|       |-- __init__.py
+|       |-- main.py
+|       |-- cif2struct.py
+|       |-- struct2qe.py
+|       |-- qe/
+|       |   |-- __init__.py
+|       |   |-- calc_mode.py
+|       |   |-- cards.py
+|       |   |-- content.py
+|       |   |-- qeutils.py
+|       |   |-- tools.py
+|       |-- struct2vasp.py
+|       |-- struct2openmx.py
+|       |-- openmx/
+|       |   |-- __init__.py
+|       |   |-- vps_table.py
+|       |-- utils.py
+|-- sample/
+
+
+
+

Basic usage

+
+

cif2x is a tool to generate a set of input files for first-principles calculation software. It takes an input parameter file as a template, and generates parameter items that may vary by materials and calculation conditions from crystallographic data. In the present version, cif2x supports Quantum ESPRESSO, VASP, and OpenMX.

+
    +
  1. Prepare input parameter file

    +
    +

    First, you need to create an input parameter file in YAML format that describes contents of the input file to be generated for the first-principles calculation software.

    +
    +
  2. +
  3. Prepare crystal structure files and pseudo-potential files

    +
    +

    The crystal structure data need to be prepared for the target materials. The file format is CIF, POSCAR, xfs, or those supported by pymatgen.

    +

    For Quantum ESPRESSO, the pseudo-potential files and the index file in CSV format need to be placed. Their locations are specified in the input parameter file.

    +

    For VASP, the location of the pseudo-potential files will be specified in a file ~/.config/.pmgrc.yaml or by an environment variable. It may be specified in the input parameter file.

    +
    +
  4. +
  5. Run command

    +
    +

    Run cif2x command with the input parameter file and the crystal structure data as arguments. To generate input files for Quantum ESPRESSO, the target option -t QE should be specified. The option turns to -t VASP for VASP, and -t OpenMX for OpenMX.

    +
    $ cif2x -t QE input.yaml material.cif
    +
    +
    +
    +
  6. +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/cif2x/command/index.html b/manual/v1.0-alpha/en/html/cif2x/command/index.html new file mode 100644 index 0000000..ac50e4d --- /dev/null +++ b/manual/v1.0-alpha/en/html/cif2x/command/index.html @@ -0,0 +1,164 @@ + + + + + + + + 4. Command reference — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

4. Command reference¶

+
+

4.1. cif2x¶

+
+

Generate input files for first-principles calculation software

+
+

SYNOPSIS:

+
+
cif2x [-v][-q] -t target input_yaml material.cif
+cif2x -h
+cif2x --version
+
+
+
+

DESCRIPTION:

+
+

This program reads an input parameter file specified by input_yaml and a crystal data file specified by material.cif, and generates a set of input files for first-principles calculation software. In the current version, the supported software includes Quantum ESPRESSO, VASP, and OpenMX. +It takes the following command line options.

+
    +
  • -v

    +

    increases verbosity of the runtime messages. When specified multiple times, the program becomes more verbose.

    +
  • +
  • -q

    +

    decreases verbosity of the runtime messages. It cancels the effect of -v option, and when specified multiple times, the program becomes more quiet.

    +
  • +
  • -t target

    +

    specifies the target first-principles calculation software. The supported software for target is listed as follows:

    +
      +
    • QE, espresso, quantum_espresso: generates input files for Quantum ESPRESSO.

    • +
    • VASP: generates input files for VASP.

    • +
    • OpenMX: generates input files for OpenMX

    • +
    +
  • +
  • input_yaml

    +

    specifies an input parameter file in YAML format.

    +
  • +
  • material.cif

    +

    specifies crystal structure data file. It is in CIF (Crystallographic Information Framework) format, or other format supported by pymatgen.

    +
  • +
  • -h

    +

    displays help and exits.

    +
  • +
  • --version

    +

    displays version information.

    +
  • +
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/cif2x/filespec/index.html b/manual/v1.0-alpha/en/html/cif2x/filespec/index.html new file mode 100644 index 0000000..9061d2c --- /dev/null +++ b/manual/v1.0-alpha/en/html/cif2x/filespec/index.html @@ -0,0 +1,367 @@ + + + + + + + + 5. File format — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

5. File format¶

+
+

5.1. Input parameter file¶

+

An input parameter file describes information necessary to generate input files for first-principles calculation software by cif2x. It should be given in YAML format, and consist of the following sections.

+
+
    +
  1. structure section: describes how to handle crystal structure data.

  2. +
  3. optional section: describes pseudo-potential files, and symbol definitions for reference feature of YAML.

  4. +
  5. tasks section: describes contents of input files.

  6. +
+
+
+

structure¶

+
+

use_ibrav (default value: false)

+
+

This parameter specifies whether ibrav parameter is used for Quantum ESPRESSO as the input of the crystal structure. When it is set to true, the lattice is transformed to match the convention of Quantum ESPRESSO, and the lattice parameters a, b, c, cosab, cosac, and cosbc are written to the input file as needed.

+
+

tolerance (default value: 0.01)

+
+

This parameter specifies the tolerance in the difference between the reconstructed Structure data and the original data when use_ibrav is set to true.

+
+

supercell (default value: none)

+
+

This parameter specifies the size of supercell, when it is adopted, in the form of [\(n_x\), \(n_y\), \(n_z\)].

+
+
+
+
+

optional¶

+

This section contains global settings needed for the first-principles calculation software. The available parameters are described in the corresponding sections below.

+
+
+

tasks¶

+

This section defines contents of the input files. It is organized as a list of blocks, each corresponding to an input file, to allow for generating a set of input files for an input. The terms described in each block are explained in the following.

+
+

mode (Quantum ESPRESSO)

+
+

This parameter specifies the type of calculation. In the current version, the supported mode includes scf and nscf for pw.x of Quantum ESPRESSO. If an unsupported mode is specified, the settings in content will be exported as is.

+
+

output_file (Quantum ESPRESSO)

+
+

This parameter specifies the file name of the output.

+
+

output_dir

+
+

This parameter specifies the directory name of the output. The default value is the current directory.

+
+

content

+
+

This parameter describes the content of the output. +For Quantum ESPRESSO, it contains the namelist data (blocks starting from &system, &control, etc.) in namelist block, and other card data (such as K_POINTS) as individual blocks. Some card data may take parameters.

+
+

template (Quantum ESPRESSO)

+

template_dir (VASP)

+
+

These parameters specifies the template file and the template directory for the input files, respectively. If they are not given, templates will not be used. The content of the template file is merged with those of content. The entries in the template file will be superseded by those of content if the entries of the same keys appear both.

+
+
+
+
+

Specifying parameter set¶

+

An input parameter may be given a list or range of parameters. In this case, a separate directory is created for every combination of parameters to store the generated input files. A special syntax ${...} is used to specify the parameter set as follows:

+
    +
  • a list: ${[ A, B, ... ]}

    +

    a set of parameter values is described as a Python list. Each entry may be a scalar value, or a list of values.

    +
  • +
  • a range: ${range(N)}, ${range(start, end, step)}

    +

    a range of parameter is given by the keyword range. The former specifies the values from 0 to N-1, and the latter from start to end with every step. (If step is omitted, it is assumed to be 1.)

    +
  • +
+
+
+
+

5.2. Parameters for Quantum ESPRESSO¶

+

The entries of optional section and content part of the tasks section specific to Quantum ESPRESSO are explained below. +In the current version, scf mode and nscf mode of pw.x are supported.

+
+

optional section¶

+
+

pp_file

+
+

This parameter specifies the index file in CSV format that relates the element type and the pseudo-potential file. This file contains the following columns: element name, type of pseudo-potential, nexclude, orbitals. An example line is given as:

+
Fe,pbe-spn-rrkjus_psl.0.2.1,4,spd
+
+
+

The name of the pseudo-potential file corresponding to the above example reads +Fe.pbe-spn-rrkjus_psl.0.2.1.UPF .

+
+

cutoff_file

+
+

This parameter specifies the index file in CSV format that relates the pseudo-potential file and the cutoff values. This file contains the following columns: name of pseudo-potential file, ecutwfc value, ecutrho value.

+
+

pseudo_dir

+
+

This parameter specifies the name of the directory that holds pseudo-potential files. It is used when the cutoff values are obtained from the pseudo-potential files. +It is indenepent from the pseudo_dir parameter in the input files for Quantum ESPRESSO.

+
+
+
+
+

content¶

+
+

namelist

+
    +
  • The lattice specifications in &system block will be superseded according to use_ibrav parameter in the structure section.

    +
      +
    • use_ibrav = false: +ibrav is set to 0, and the lattice parameters including a, b, c, cosab, cosac, cosbc, celldm are removed.

    • +
    • use_ibrav = true: +ibrab is set to the index of Bravais lattices obtained from the crystal structure data. The Structure data will be reconstructed to match the convention of Quantum ESPRESSO.

    • +
    +
  • +
  • nat (the number of atoms) and ntyp (the number of element types) will be superseded by the values obtained from the crystal structure data.

  • +
  • The cutoff values ecutwfc and ecutrho are obtained from the pseudo-potential files if these parameters are left blank.

  • +
+

CELL_PARAMETERS

+
    +
  • This block will not be generated if use_ibrav is set to true. Otherwise, the lattice vectors are exported in units of angstrom.

  • +
  • The information of the lattice vectors are obtained from the crystal structure data. When the data field is defined and contains a 3x3 matrix, that value will be used for the set of lattice vectors instead.

  • +
+

ATOMIC_SPECIES

+
    +
  • This block exports a list of atom species, atomic mass, and the file name of the pseudo-potential data.

  • +
  • The information of the atoms are obtained from the crystal structure data. The file names of the pseudo-potential data are referred from the CSV-formatted index file specified by pp_list parameter.

  • +
  • When the data field is defined and contains the required data, these values will be used instead.

  • +
+

ATOMIC_POSITIONS

+
    +
  • This block exports the atomic species and their fractional coordinates.

  • +
  • When ignore_species is given to specify an atomic species or a list of species, the values of if_pos for these species will be set to 0. It is used for MD or structure relaxations.

  • +
  • When the data field is defined and contains the required data, these values will be used instead.

  • +
+

K_POINTS

+
    +
  • This block exports the information of k points. The type of the output is specified by the option parameter that takes one of the following:

    +
      +
    • gamma: uses \(\Gamma\) point.

    • +
    • crystal: generates a list of k points in mesh pattern. The mesh width is given by the grid parameter, or derived from the vol_density or k_resolution parameters.

    • +
    • automatic: generates a mesh of k points. It is given by the grid parameter, or derived from the vol_density or k_resolution parameters. The shift is obtained from the kshifts parameter.

    • +
    +
  • +
  • The mesh width is determined in the following order:

    +
      +
    • the grid parameter, specified by a list of \(n_x, n_y, n_z\), or a scalar value \(n\). For the latter, \(n_x = n_y = n_z = n\) is assumed.

    • +
    • derived from the vol_density parameter.

    • +
    • derived from the k_resolution parameter, whose default value is 0.15.

    • +
    +
  • +
  • When the data field is defined and contains the required data, these values will be used.

  • +
+
+
+
+
+

5.3. Parameters for VASP¶

+

The entries of optional section and content part of the tasks section specific to VASP are explained below.

+
+

optional¶

+

The type and the location of pseudo-potential files are specified.

+

According to pymatgen, the pseudo-potential files are obtained from +PMG_VASP_PSP_DIR/functional/POTCAR.{element}(.gz) or +PMG_VASP_PSP_DIR/functional/{element}/POTCAR, +where +PMG_VASP_PSP_DIR points to the directory and it is given in the configuration file +~/.config/.pmgrc.yaml or by the environment variable of the same name. +functional refers to the type of the pseudo-potential, whose value is predefined as +POT_GGA_PAW_PBE, POT_LDA_PAW, etc.

+
+

pseudo_functional

+
+

This parameter specifies the type of the pseudo-potential. The relation to the functional value above is defined in the table of pymatgen, for example, by PBE to POT_GGA_PAW_PBE, or by LDA to POT_LDA_PAW, or in a similar manner.

+
+
+

When the pseudo_dir parameter is specified, it is used as the directory that holds the pseudo-potential files, ignoring the convention of pymatgen.

+
+

psuedo_dir

+
+

This parameter specifies the directory that holds the pseudo-potential files. The paths to the pseudo-potential file turn to pseudo_dir/POTCAR.{element}(.gz), or pseudo_dir/{element}/POTCAR.

+
+
+
+
+

tasks¶

+

The template files are assumed to be placed in the directory specified by the template_dir parameter by the names INCAR, KPOINTS, POSCAR, and POTCAR. The missing files will be ignored.

+
+
+

content¶

+
+

incar

+
    +
  • This block contains parameters described in the INCAR file

  • +
+

kpoints

+
    +
  • type

    +

    The type parameter describes how KPOINTS are specified. The following values are allowed, with some types accepting parameters. See pymatgen.io.vasp manual for further details.

    +
      +
    • automatic

      +

      parameter: grid

      +
    • +
    • gamma_automatic

      +

      parameter: grid, shift

      +
    • +
    • monkhorst_automatic

      +

      parameter: grid, shift

      +
    • +
    • automatic_density

      +

      parameter: kppa, force_gamma

      +
    • +
    • automatic_gamma_density

      +

      parameter: grid_density

      +
    • +
    • automatic_density_by_vol

      +

      parameter: grid_density, force_gamma

      +
    • +
    • automatic_density_by_lengths

      +

      parameter: length_density, force_gamma

      +
    • +
    • automatic_linemode

      +

      parameter: division, path_type (corresponding to the path_type parameter of HighSymmKpath.)

      +
    • +
    +
  • +
+
+
+
+
+

5.4. Parameters for OpenMX¶

+

The entries of optional section and content part of the tasks section specific to OpenMX are explained below.

+
+

optional¶

+
+

data_path

+
+

This parameter specifies the name of directory that holds files for pseudo-atomic orbitals and pseudo-potentials. It corresponds to the DATA.PATH parameter.

+
+
+
+
+

content¶

+
+

precision

+
+

This parameter specifies the set of pseudo-atomic orbitals listed in Tables 1 and 2 of Section 10.6 of the OpenMX manual. It is one of quick, standard, or precise. The default value is quick.

+
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/cif2x/index.html b/manual/v1.0-alpha/en/html/cif2x/index.html new file mode 100644 index 0000000..3534888 --- /dev/null +++ b/manual/v1.0-alpha/en/html/cif2x/index.html @@ -0,0 +1,149 @@ + + + + + + + + Input file generator for first-principles calculations (cif2x) — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/cif2x/tutorial/index.html b/manual/v1.0-alpha/en/html/cif2x/tutorial/index.html new file mode 100644 index 0000000..bcd3990 --- /dev/null +++ b/manual/v1.0-alpha/en/html/cif2x/tutorial/index.html @@ -0,0 +1,215 @@ + + + + + + + + 3. Tutorial — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

3. Tutorial¶

+

The procedure to use the input file generator cif2x for first-principles calculation software consists of preparing an input parameter file, crystal structure data, and pseudo-potential files, and running the program cif2x. +In the current version, the supported software includes Quantum ESPRESSO, VASP, and OpenMX. +In this tutorial, we will explain the steps along a sample for Quantum ESPRESSO in docs/tutorial/cif2x.

+
+

3.1. Prepare an input parameter file¶

+

An input parameter file describes the content of input files for the first-principles calculation software. +An example is presented below. It is a text file in YAML format that contains options to crystal structure data, and contents of the input file used as an input for the first-principle calculation. See file format section for the details of specification.

+

In YAML format, parameters are given in dictionary form as keyword: value, where value is a scalar such as a number or a string, or a set of values enclosed in [ ] or listed in itemized form, or a nested dictionary.

+
structure:
+  use_ibrav: false
+  tolerance: 0.05
+
+optional:
+  pseudo_dir: ./pseudo
+  pp_file: ./pseudo/pp_psl_pbe_rrkjus.csv
+
+tasks:
+  - mode: scf
+    output_file: scf.in
+    output_dir: scf
+    template: scf.in_tmpl
+    content:
+      namelist:
+        control:
+          prefix: pwscf
+          pseudo_dir:
+          outdir: ./work
+        system:
+          ecutwfc:
+          ecutrho:
+      CELL_PARAMETERS:
+      ATOMIC_SPECIES:
+      ATOMIC_POSITIONS:
+        option: crystal
+      K_POINTS:
+        option: automatic
+        grid: [8,8,8]
+
+
+

The input parameter file consists of structure, optional, and tasks sections. +The structure section specifies options to the crystal structure data. +The optional section holds global settings concerning the pseudo-potentials.

+

The tasks section describes inputs for the first-principles calculations. In case of generating multiple files for a series of calculations, the tasks section takes a list of parameter sets. +For each set, the calculation type is specified by the mode parameter: scf and nscf are supported as modes, as well as arbitrary modes for generic output.

+

The content of the output is given in content section. +The input files of Quantum ESPRESSO are composed of the parts in namelist format of Fortran90 starting from &keyword, and the blocks called cards that start with keywords such as K_POINTS and end with blank lines. The content block holds namelist and cards in a form of nested dictionary. +Basically, the specified items are written to the input files as-is, except for several cases. If a keyword is left blank, its value will be obtained form the crystal structure data or other sources.

+

Besides, templates of the input files can be used. The content of the file given by the template keyword is considered as input data along with the entries in content block. When the entries of the same keywords appear both, those of the input parameter files will be used. Therefore, it is possible to use template files and overwrite some entries by the input parameter file as needed. +In the present example, the file (scf.in_tmpl) shown below is read as a template, and the entries on cutoff parameters as well as cards of CELL_PARAMETER, ATOMIC_SPECIES, ATOMIC_POSITIONS, K_POINTS are generated from the crystal structure data and pseudo-potential files. It is noted that the values of ecutwfc and ecutrho are overwritten by the empty lines.

+
&control
+    calculation = 'scf'
+    prefix = 'pwscf'
+    pseudo_dir = './pseudo'
+    outdir = './work'
+    tstress = .true.
+    tprnfor = .true.
+/
+
+&system
+    ibrav = 0
+    nat = 7
+    ntyp = 3
+    ecutwfc = 36.0
+    ecutrho = 180.0
+    occupations = 'smearing'
+    smearing = 'm-p'
+    degauss = 0.01
+    noncolin = .true.
+    nspin = 2
+/
+
+&electrons
+    missing_beta = 0.1
+    conv_thr = 1e-08
+/
+
+
+
+
+

3.2. Generating input files¶

+

The program cif2x is executed with the input parameter file (input.yaml) and crystal structure data (Co3SnS2_nosym.cif) as follows.

+
$ cif2x -t QE input.yaml Co3SnS2_nosym.cif
+
+
+

The required pseudo-potential files should be placed in the directory ./pseudo, and the index file for the pseudo-potential should be prepared as ./psudo/pp_psl_pbe_rrkjus.csv.

+

Run cif2x and a set of input files for Quantum ESPRESSO will be created. The output file is specified by output_file parameter of the input parameter file, and stored in the directory given by output_dir. In this example, the input file for SCF calculation is created as ./scf/scf.in.

+
+
+

3.3. Specifying parameter sets¶

+

In some cases, a series of input files should be generated with varying their parameter values. For example, the convergence is examined by modifying the cutoff values or grid resolution of k points. The input parameter can be given a list or a range of values, and the input files for every combination from the choices of parameter values are generated and stored in separate directories. To specify parameter set, a special syntax ${...} is adopted.

+
content:
+  K_POINTS:
+    option: automatic
+    grid:   ${ [ [4,4,4], [8,8,8], [12,12,12] ] }
+
+
+

When K_POINTS is given as above, the input files having the grid value to be [4,4,4], [8,8,8], [12,12,12] will be generated in the sub-directories, 4x4x4/, 8x8x8/, 12x12x12/, respectively.

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/genindex.html b/manual/v1.0-alpha/en/html/genindex.html new file mode 100644 index 0000000..8344c64 --- /dev/null +++ b/manual/v1.0-alpha/en/html/genindex.html @@ -0,0 +1,102 @@ + + + + + + + Index — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Index

+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/index.html b/manual/v1.0-alpha/en/html/index.html new file mode 100644 index 0000000..5a573e4 --- /dev/null +++ b/manual/v1.0-alpha/en/html/index.html @@ -0,0 +1,119 @@ + + + + + + + + Cif2x Users Guide — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/objects.inv b/manual/v1.0-alpha/en/html/objects.inv new file mode 100644 index 0000000..daa6a03 --- /dev/null +++ b/manual/v1.0-alpha/en/html/objects.inv @@ -0,0 +1,5 @@ +# Sphinx inventory version 2 +# Project: cif2x Users Guide +# Version: 1.0-alpha +# The remainder of this file is compressed using zlib. +xÚ…’ÏNÄ Æïû“èAu£G¯F7L6Q€Ât—„áOÒ}{‡RlqÛx#óñýf`>.»§aÏZÃ^jø ž…áÐ<ÿ+>œC¯à]gDäA½›îX‹ZÈa“Qéó:ÔžpŠRàDj™—¼‰žð³Ë(>0¥X˜0Þ€ñÆä¦ïIÙš¬’3ô%—Àa‡5/¤N*ôùªÖ3ëjÐ׳0Q6ÌÕÿÚ Ñà„ Æ%•œuRsi©p¦x̯÷p7‚î§6!’K2µÕ¯Ös㯩¶£¶³M±U2–j™’Ž»+úòS#øöè<Æ÷F¬pí¥)B6~Pºèñ¹ÃBýÇv¼„3Å r{dŽŸkc®eÏgÖ)/y3~NSâZû6£|s{晕ö˜°F[É Ñ–©™Ieekœ•uçw¡?ó•cö \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/search.html b/manual/v1.0-alpha/en/html/search.html new file mode 100644 index 0000000..a3dc58e --- /dev/null +++ b/manual/v1.0-alpha/en/html/search.html @@ -0,0 +1,121 @@ + + + + + + + Search — cif2x Users Guide 1.0-alpha documentation + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + + +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/en/html/searchindex.js b/manual/v1.0-alpha/en/html/searchindex.js new file mode 100644 index 0000000..672742b --- /dev/null +++ b/manual/v1.0-alpha/en/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["cif2x/about/index", "cif2x/appendix/index", "cif2x/basic-usage", "cif2x/command/index", "cif2x/filespec/index", "cif2x/index", "cif2x/tutorial/index", "index"], "filenames": ["cif2x/about/index.rst", "cif2x/appendix/index.rst", "cif2x/basic-usage.rst", "cif2x/command/index.rst", "cif2x/filespec/index.rst", "cif2x/index.rst", "cif2x/tutorial/index.rst", "index.rst"], "titles": ["1. Introduction", "6. Extension guide", "2. Installation and basic usage", "4. Command reference", "5. File format", "Input file generator for first-principles calculations (cif2x)", "3. Tutorial", "Cif2x Users Guide"], "terms": {"In": [0, 1, 2, 3, 4, 6], "recent": 0, "year": 0, "us": [0, 4, 6], "machin": 0, "learn": 0, "predict": 0, "materi": [0, 2, 3], "properti": 0, "design": 0, "substanc": 0, "known": 0, "informat": 0, "ha": 0, "gain": 0, "consider": 0, "attent": 0, "The": [0, 1, 2, 3, 4, 6], "accuraci": 0, "depend": 0, "heavili": 0, "prepar": [0, 2, 5], "appropri": 0, "train": 0, "data": [0, 1, 2, 3, 4, 6], "therefor": [0, 6], "develop": 0, "tool": [0, 2], "rapid": 0, "gener": [0, 1, 2, 3, 4, 7], "expect": 0, "contribut": 0, "significantli": 0, "advanc": 0, "research": 0, "input": [0, 2, 3, 7], "file": [0, 2, 3, 7], "first": [0, 2, 3, 4, 6, 7], "principl": [0, 2, 3, 4, 6, 7], "calcul": [0, 1, 2, 3, 4, 6, 7], "from": [0, 1, 2, 4, 6], "cif": [0, 2, 3, 6], "It": [0, 1, 2, 3, 4, 6], "construct": 0, "part": [0, 4, 6], "vari": [0, 2, 6], "type": [0, 1, 4, 6], "comput": 0, "condit": [0, 2], "crystal": [0, 1, 2, 3, 4, 6], "structur": [0, 1, 2, 3, 6], "paramet": [0, 1, 2, 3, 5], "templat": [0, 2, 4, 6], "capabl": 0, "multipl": [0, 3, 6], "tailor": 0, "specif": [0, 4, 6], "current": [0, 1, 3, 4, 6], "support": [0, 1, 2, 3, 4, 6], "vasp": [0, 2, 3, 5, 6], "http": [0, 2], "www": 0, "quantum": [0, 2, 3, 5, 6], "espresso": [0, 2, 3, 5, 6], "org": 0, "openmx": [0, 2, 3, 5, 6], "squar": 0, "plan": 0, "akaikkr": 0, "kkr": 0, "issp": [0, 2], "u": 0, "tokyo": 0, "ac": 0, "jp": 0, "futur": 0, "distribut": 0, "program": [0, 2, 3, 6], "packag": [0, 2], "sourc": [0, 1, 2, 6], "code": 0, "follow": [0, 2, 3, 4, 6], "gnu": 0, "public": 0, "version": [0, 1, 2, 3, 4, 6], "3": [0, 2, 6], "gpl": 0, "v3": 0, "later": 0, "thi": [0, 1, 3, 4, 6], "softwar": [0, 2, 3, 4, 6], "wa": 0, "ver": 0, "1": [0, 4, 6], "0": [0, 4, 6], "alpha": 0, "releas": 0, "2023": 0, "12": [0, 6], "28": 0, "kazuyoshi": 0, "yoshimi": 0, "instutit": 0, "solid": 0, "state": 0, "physic": 0, "univers": 0, "tatsumi": 0, "aoyama": 0, "yuichi": 0, "motoyama": 0, "masahiro": 0, "fukuda": 0, "tetsuya": 0, "fukushima": 0, "nation": 0, "institut": 0, "industri": 0, "scienc": 0, "technologi": 0, "aist": 0, "kota": 0, "ido": 0, "shusuk": 0, "kasamatsu": 0, "yamagata": 0, "takashi": 0, "koretsun": 0, "tohoku": 0, "project": 0, "corrdin": 0, "taisuk": 0, "ozaki": 0, "all": 0, "right": 0, "reserv": 0, "usabl": 0, "test": 0, "platform": 0, "ubuntu": 0, "linux": 0, "python3": [0, 2], "order": [1, 4], "add": [1, 2], "map": 1, "between": [1, 4], "transform": [1, 4], "class": 1, "should": [1, 2, 4, 6], "create_modeproc": 1, "function": [1, 4], "src": [1, 2], "cif2x": [1, 2, 4, 6], "qe": [1, 2, 3, 6], "calc_mod": [1, 2], "py": [1, 2], "def": 1, "scf": [1, 4, 6], "nscf": [1, 4, 6], "modeproc": 1, "qemode_pw": 1, "els": 1, "qemode_gener": 1, "return": 1, "each": [1, 4, 6], "i": [1, 2, 3, 4, 5, 6], "provid": 1, "deriv": [1, 4], "qemode_bas": 1, "implement": 1, "method": 1, "update_namelist": 1, "updat": 1, "namelist": [1, 4, 6], "block": [1, 4, 6], "update_card": 1, "card": [1, 2, 4, 6], "two": 1, "ar": [1, 2, 4, 6], "pw": [1, 4], "x": [1, 2, 4], "output": [1, 4, 6], "__init__": [1, 2], "self": 1, "content": [1, 2, 6], "For": [1, 2, 4, 6], "valu": [1, 4, 6], "blank": [1, 4, 6], "entri": [1, 4, 6], "other": [1, 3, 4, 6], "mai": [1, 2, 4], "also": [1, 2], "forc": 1, "set": [1, 2, 3, 5], "lattic": [1, 4], "determin": [1, 4], "those": [1, 2, 4, 6], "must": 1, "specifi": [1, 2, 3, 5], "consist": [1, 4, 6], "separ": [1, 4, 6], "given": [1, 4, 6], "card_tabl": 1, "variabl": [1, 2, 4], "base": 1, "pick": 1, "up": 1, "run": [1, 2, 6], "associ": 1, "Of": 1, "cours": 1, "new": 1, "defin": [1, 4], "cell_paramet": [1, 4, 6], "generate_cell_paramet": 1, "atomic_speci": [1, 4, 6], "generate_atomic_speci": 1, "atomic_posit": [1, 4, 6], "generate_atomic_posit": 1, "k_point": [1, 4, 6], "generate_k_point": 1, "gather": 1, "name": [1, 4], "generate_": 1, "These": [1, 4], "take": [1, 2, 3, 4, 6], "argument": [1, 2], "dictionari": [1, 6], "contain": [1, 4, 6], "option": [1, 2, 3, 6], "field": [1, 4], "prerequisit": 2, "includ": [2, 3, 4, 6], "htp": 2, "requir": [2, 4, 6], "librari": 2, "python": [2, 4], "pymatgen": [2, 3, 4], "modul": 2, "ruamel": 2, "yaml": [2, 3, 4, 6], "f90nml": 2, "numpi": 2, "panda": 2, "monti": 2, "openbabel": 2, "offici": 2, "page": 2, "github": 2, "repositori": 2, "download": 2, "can": [2, 6], "command": [2, 5, 7], "git": 2, "clone": 2, "com": 2, "center": 2, "dev": 2, "onc": 2, "obtain": [2, 4, 6], "you": 2, "automat": [2, 4, 6], "same": [2, 4, 6], "time": [2, 3], "cd": 2, "m": [2, 6], "pip": 2, "execut": [2, 6], "need": [2, 4, 6], "user": 2, "next": 2, "keyword": [2, 4, 6], "abov": [2, 4, 6], "case": [2, 4, 6], "allow": [2, 4], "system": [2, 4, 6], "wide": 2, "directori": [2, 4, 6], "licens": [2, 5], "readm": 2, "md": [2, 4], "pyproject": 2, "toml": 2, "doc": [2, 6], "ja": 2, "en": 2, "tutori": [2, 5, 7], "main": 2, "cif2struct": 2, "struct2q": 2, "qeutil": 2, "struct2vasp": 2, "struct2openmx": 2, "vps_tabl": 2, "util": 2, "sampl": [2, 6], "an": [2, 3, 4, 5], "item": [2, 6], "crystallograph": [2, 3], "present": [2, 6], "creat": [2, 4, 6], "format": [2, 3, 5, 6, 7], "describ": [2, 4, 6], "pseudo": [2, 4, 6], "potenti": [2, 4, 6], "target": [2, 3], "poscar": [2, 4], "xf": 2, "index": [2, 4, 6], "csv": [2, 4, 6], "place": [2, 4, 6], "Their": 2, "locat": [2, 4], "config": [2, 4], "pmgrc": [2, 4], "environ": [2, 4, 5], "To": [2, 6], "t": [2, 3, 6], "turn": [2, 4], "synopsi": 3, "v": 3, "q": 3, "input_yaml": 3, "h": 3, "descript": 3, "read": [3, 4, 6], "line": [3, 4, 6], "increas": 3, "verbos": 3, "runtim": 3, "messag": 3, "when": [3, 4, 6], "becom": 3, "more": 3, "decreas": 3, "cancel": 3, "effect": 3, "quiet": 3, "list": [3, 4, 6], "quantum_espresso": 3, "inform": [3, 4], "framework": 3, "displai": 3, "help": 3, "exit": 3, "necessari": 4, "how": 4, "handl": 4, "symbol": 4, "definit": 4, "refer": [4, 5, 7], "featur": 4, "use_ibrav": [4, 6], "default": 4, "fals": [4, 6], "whether": 4, "ibrav": [4, 6], "true": [4, 6], "match": 4, "convent": 4, "b": 4, "c": 4, "cosab": 4, "cosac": 4, "cosbc": 4, "written": [4, 6], "toler": [4, 6], "01": [4, 6], "differ": 4, "reconstruct": 4, "origin": 4, "supercel": 4, "none": 4, "size": 4, "adopt": [4, 6], "form": [4, 6], "n_x": 4, "n_y": 4, "n_z": 4, "global": [4, 6], "avail": 4, "correspond": 4, "below": [4, 6], "organ": 4, "term": 4, "explain": [4, 6], "mode": [4, 5, 6], "If": [4, 6], "unsupport": 4, "export": 4, "output_fil": [4, 6], "output_dir": [4, 6], "start": [4, 6], "control": [4, 6], "etc": 4, "individu": 4, "some": [4, 6], "template_dir": 4, "respect": [4, 6], "thei": 4, "merg": 4, "supersed": 4, "kei": 4, "appear": [4, 6], "both": [4, 6], "rang": [4, 6], "everi": [4, 6], "combin": [4, 6], "store": [4, 6], "A": 4, "special": [4, 6], "syntax": [4, 6], "scalar": [4, 6], "n": 4, "end": [4, 6], "step": [4, 6], "former": 4, "latter": 4, "omit": 4, "assum": 4, "pp_file": [4, 6], "relat": 4, "element": 4, "column": 4, "nexclud": 4, "orbit": 4, "exampl": [4, 6], "fe": 4, "pbe": 4, "spn": 4, "rrkjus_psl": 4, "2": [4, 6], "4": [4, 6], "spd": 4, "upf": 4, "cutoff_fil": 4, "cutoff": [4, 6], "ecutwfc": [4, 6], "ecutrho": [4, 6], "pseudo_dir": [4, 6], "hold": [4, 6], "indenep": 4, "accord": 4, "celldm": 4, "remov": 4, "ibrab": 4, "bravai": 4, "nat": [4, 6], "number": [4, 6], "atom": 4, "ntyp": [4, 6], "left": [4, 6], "otherwis": 4, "vector": 4, "unit": 4, "angstrom": 4, "3x3": 4, "matrix": 4, "instead": 4, "speci": 4, "mass": 4, "pp_list": 4, "fraction": 4, "coordin": 4, "ignore_speci": 4, "if_po": 4, "relax": 4, "k": [4, 6], "point": [4, 6], "one": 4, "gamma": 4, "mesh": 4, "pattern": 4, "width": 4, "grid": [4, 6], "vol_dens": 4, "k_resolut": 4, "shift": 4, "kshift": 4, "whose": 4, "15": 4, "pmg_vasp_psp_dir": 4, "potcar": 4, "gz": 4, "where": [4, 6], "configur": 4, "predefin": 4, "pot_gga_paw_pb": 4, "pot_lda_paw": 4, "pseudo_funct": 4, "tabl": 4, "lda": 4, "similar": 4, "manner": 4, "ignor": 4, "psuedo_dir": 4, "path": 4, "incar": 4, "kpoint": 4, "miss": 4, "accept": 4, "see": [4, 6], "io": 4, "manual": 4, "further": 4, "detail": [4, 6], "gamma_automat": 4, "monkhorst_automat": 4, "automatic_dens": 4, "kppa": 4, "force_gamma": 4, "automatic_gamma_dens": 4, "grid_dens": 4, "automatic_density_by_vol": 4, "automatic_density_by_length": 4, "length_dens": 4, "automatic_linemod": 4, "divis": 4, "path_typ": 4, "highsymmkpath": 4, "data_path": 4, "precis": 4, "10": 4, "6": 4, "quick": 4, "standard": 4, "introduct": [5, 7], "what": 5, "contributor": 5, "copyright": 5, "oper": 5, "instal": [5, 7], "basic": [5, 6, 7], "usag": [5, 7], "extens": [5, 7], "guid": 5, "ad": 5, "procedur": 6, "we": 6, "along": 6, "text": 6, "section": 6, "string": 6, "enclos": 6, "nest": 6, "05": 6, "pp_psl_pbe_rrkju": 6, "task": 6, "in_tmpl": 6, "prefix": 6, "pwscf": 6, "outdir": 6, "work": 6, "8": 6, "concern": 6, "seri": 6, "well": 6, "arbitrari": 6, "compos": 6, "fortran90": 6, "call": 6, "except": 6, "sever": 6, "its": 6, "besid": 6, "consid": 6, "possibl": 6, "overwrit": 6, "shown": 6, "note": 6, "overwritten": 6, "empti": 6, "tstress": 6, "tprnfor": 6, "7": 6, "36": 6, "180": 6, "occup": 6, "smear": 6, "p": 6, "degauss": 6, "noncolin": 6, "nspin": 6, "electron": 6, "missing_beta": 6, "conv_thr": 6, "1e": 6, "08": 6, "co3sns2_nosym": 6, "psudo": 6, "converg": 6, "examin": 6, "modifi": 6, "resolut": 6, "choic": 6, "have": 6, "sub": 6, "4x4x4": 6, "8x8x8": 6, "12x12x12": 6}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"introduct": 0, "what": 0, "i": 0, "cif2x": [0, 3, 5, 7], "licens": 0, "contributor": 0, "copyright": 0, "oper": 0, "environ": 0, "extens": 1, "guid": [1, 7], "ad": 1, "mode": 1, "quantum": [1, 4], "espresso": [1, 4], "instal": 2, "basic": 2, "usag": 2, "command": 3, "refer": 3, "file": [4, 5, 6], "format": 4, "input": [4, 5, 6], "paramet": [4, 6], "structur": 4, "option": 4, "task": 4, "specifi": [4, 6], "set": [4, 6], "section": 4, "content": [4, 7], "vasp": 4, "openmx": 4, "gener": [5, 6], "first": 5, "principl": 5, "calcul": 5, "tutori": 6, "prepar": 6, "an": 6, "user": 7}, "envversion": {"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": 60}, "alltitles": {"Introduction": [[0, "introduction"]], "What is cif2x?": [[0, "what-is-cif2x"]], "License": [[0, "license"]], "Contributors": [[0, "contributors"]], "Copyright": [[0, "copyright"]], "Operating environment": [[0, "operating-environment"]], "Extension guide": [[1, "extension-guide"]], "Adding modes of Quantum ESPRESSO": [[1, "adding-modes-of-quantum-espresso"]], "Installation and basic usage": [[2, "installation-and-basic-usage"]], "Command reference": [[3, "command-reference"]], "cif2x": [[3, "cif2x"]], "File format": [[4, "file-format"]], "Input parameter file": [[4, "input-parameter-file"]], "structure": [[4, "structure"]], "optional": [[4, "optional"], [4, "id1"], [4, "id4"]], "tasks": [[4, "tasks"], [4, "id2"]], "Specifying parameter set": [[4, "specifying-parameter-set"]], "Parameters for Quantum ESPRESSO": [[4, "parameters-for-quantum-espresso"]], "optional section": [[4, "optional-section"]], "content": [[4, "content"], [4, "id3"], [4, "id5"]], "Parameters for VASP": [[4, "parameters-for-vasp"]], "Parameters for OpenMX": [[4, "parameters-for-openmx"]], "Input file generator for first-principles calculations (cif2x)": [[5, "input-file-generator-for-first-principles-calculations-cif2x"]], "Tutorial": [[6, "tutorial"]], "Prepare an input parameter file": [[6, "prepare-an-input-parameter-file"]], "Generating input files": [[6, "generating-input-files"]], "Specifying parameter sets": [[6, "specifying-parameter-sets"]], "Cif2x Users Guide": [[7, "cif2x-users-guide"]], "Contents:": [[7, null]]}, "indexentries": {}}) \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/cif2x-usersguide.pdf b/manual/v1.0-alpha/ja/cif2x-usersguide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..01602b6b0e58e95f550557a25c3833c8bc745b6a GIT binary patch literal 82296 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 Ki3O#FApaN2q*9gu literal 0 HcmV?d00001 diff --git a/manual/v1.0-alpha/ja/html/.buildinfo b/manual/v1.0-alpha/ja/html/.buildinfo new file mode 100644 index 0000000..6604f98 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 8ff4f087c3b9876acf5fad1c25e9bfb1 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/manual/v1.0-alpha/ja/html/_sources/cif2x/about/index.rst.txt b/manual/v1.0-alpha/ja/html/_sources/cif2x/about/index.rst.txt new file mode 100644 index 0000000..460b906 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_sources/cif2x/about/index.rst.txt @@ -0,0 +1,77 @@ +**************************************************************** +æ¦‚è¦ +**************************************************************** + +cif2xã¨ã¯? +---------------------------------------------------------------- + +è¿‘å¹´ã€æ©Ÿæ¢°å­¦ç¿’を活用ã—ãŸç‰©æ€§äºˆæ¸¬ã‚„物質設計(マテリアルズインフォマティクス)ãŒæ³¨ç›®ã•ã‚Œã¦ã„ã¾ã™ã€‚ +機械学習ã®ç²¾åº¦ã¯ã€é©åˆ‡ãªæ•™å¸«ãƒ‡ãƒ¼ã‚¿ã®æº–å‚™ã«å¤§ããä¾å­˜ã—ã¦ã„ã¾ã™ã€‚ +ãã®ãŸã‚ã€è¿…速ã«æ•™å¸«ãƒ‡ãƒ¼ã‚¿ã‚’生æˆã™ã‚‹ãŸã‚ã®ãƒ„ールや環境ã®æ•´å‚™ã¯ã€ +マテリアルズインフォマティクスã®ç ”究進展ã«å¤§ãã貢献ã™ã‚‹ã¨æœŸå¾…ã•ã‚Œã¾ã™ã€‚ + +cif2xã¯ã€cifファイルã‹ã‚‰ç¬¬ä¸€åŽŸç†è¨ˆç®—用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹ãƒ„ールã§ã™ã€‚ +入力パラメータを雛形ã¨ã—ã¦ã€ç‰©è³ªã®ç¨®é¡žã‚„計算æ¡ä»¶ã«ã‚ˆã£ã¦å¤‰ã‚る箇所をçµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãªã©ã‹ã‚‰æ§‹æˆã—ã¾ã™ã€‚ +特定ã®è¨ˆç®—æ¡ä»¶ã«å¿œã˜ãŸè¤‡æ•°ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ +ç¾åœ¨ã¯ã€ `VASP `_ ã€`Quantum ESPRESSO `_ ã€`OpenMX `_ ã«å¯¾å¿œã—〠+å°†æ¥çš„ã«ã¯ `AkaiKKR `_ ã«ã‚‚対応ã™ã‚‹äºˆå®šã§ã™ã€‚ + + +ライセンス +---------------------------------------------------------------- + +本ソフトウェアã®ãƒ—ログラムパッケージãŠã‚ˆã³ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ä¸€å¼ã¯GNU General Public License version 3 (GPL v3) ã«æº–ã˜ã¦é…布ã•ã‚Œã¦ã„ã¾ã™ã€‚ + +開発貢献者 +---------------------------------------------------------------- + +本ソフトウェアã¯ä»¥ä¸‹ã®é–‹ç™ºè²¢çŒ®è€…ã«ã‚ˆã‚Šé–‹ç™ºã•ã‚Œã¦ã„ã¾ã™ã€‚ + +- ver.1.0-alpha (2023/12/28リリース) + + - 開発者 + + - å‰è¦‹ 一慶 (æ±äº¬å¤§å­¦ 物性研究所) + + - é’å±± é¾ç¾Ž (æ±äº¬å¤§å­¦ 物性研究所) + + - 本山 裕一 (æ±äº¬å¤§å­¦ 物性研究所) + + - ç¦ç”° 将大 (æ±äº¬å¤§å­¦ 物性研究所) + + - ç¦å³¶ 鉄也 (産業技術ç·åˆç ”究所) + + - 井戸 康太 (æ±äº¬å¤§å­¦ 物性研究所) + + - ç¬ æ¾ ç§€è¼” (山形大学 学術研究院(ç†å­¦éƒ¨ä¸»æ‹…当)) + + - 是常 隆  (æ±åŒ—大学大学院ç†å­¦ç ”究科) + + - プロジェクトコーディãƒãƒ¼ã‚¿ãƒ¼ + + - 尾崎 泰助 (æ±äº¬å¤§å­¦ 物性研究所) + + +コピーライト +---------------------------------------------------------------- + +.. only:: html + + |copy| *2023- The University of Tokyo. All rights reserved.* + + .. |copy| unicode:: 0xA9 .. copyright sign + +.. only:: latex + + :math:`\copyright` *2023- The University of Tokyo. All rights reserved.* + + +本ソフトウェアã¯2023年度 æ±äº¬å¤§å­¦ç‰©æ€§ç ”究所 ソフトウェア高度化プロジェクトã®æ”¯æ´ã‚’å—ã‘開発ã•ã‚Œã¦ãŠã‚Šã€ãã®è‘—作権ã¯æ±äº¬å¤§å­¦ãŒæ‰€æŒã—ã¦ã„ã¾ã™ã€‚ + +動作環境 +---------------------------------------------------------------- + +以下ã®ç’°å¢ƒã§å‹•ä½œã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ã„ã¾ã™ã€‚ + +- Ubuntu Linux + python3 + diff --git a/manual/v1.0-alpha/ja/html/_sources/cif2x/appendix/index.rst.txt b/manual/v1.0-alpha/ja/html/_sources/cif2x/appendix/index.rst.txt new file mode 100644 index 0000000..1355827 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_sources/cif2x/appendix/index.rst.txt @@ -0,0 +1,50 @@ +.. _sec-cif2x-appendix: + +================================================================ +拡張ガイド +================================================================ + +Quantum ESPRESSO ã® mode を追加ã™ã‚‹ +---------------------------------------------------------------- + +Quantum ESPRESSO ã®è¨ˆç®—モードã¸ã®å¯¾å¿œã‚’追加ã™ã‚‹ã«ã¯ã€ ``src/cif2x/qe/calc_mode.py`` ã® ``create_modeproc()`` 関数㫠mode ã¨å¤‰æ›ã‚¯ãƒ©ã‚¹ã®å¯¾å¿œä»˜ã‘を記述ã—ã¾ã™ã€‚ + +.. code-block:: python + + def create_modeproc(mode, qe): + if mode in ["scf", "nscf"]: + modeproc = QEmode_pw(qe) + else: + modeproc = QEmode_generic(qe) + return modeproc + + +modeã”ã¨ã®å¤‰æ›æ©Ÿèƒ½ã¯ ``QEmode_base`` ã®æ´¾ç”Ÿã‚¯ãƒ©ã‚¹ã¨ã—ã¦ã¾ã¨ã‚られã¦ã„ã¾ã™ã€‚ +ã“ã®ã‚¯ãƒ©ã‚¹ã¯ +``update_namelist()`` 㧠namelist ブロックã®æ›´æ–°ã¨ã€ +``update_cards()`` 㧠cards ブロックã®ãƒ‡ãƒ¼ã‚¿ç”Ÿæˆã‚’è¡Œã„ã¾ã™ã€‚ +ç¾åœ¨ã¯ pw.x ã® scf ãŠã‚ˆã³ nscf ã«å¯¾å¿œã™ã‚‹ ``QEmode_pw`` クラスã¨ã€å¤‰æ›ã›ãšãã®ã¾ã¾å‡ºåŠ›ã™ã‚‹ ``QEmode_generic`` クラスãŒç”¨æ„ã•ã‚Œã¦ã„ã¾ã™ã€‚ + +.. code-block:: python + + class QEmode_base: + def __init__(self, qe): + def update_namelist(self, content): + def update_cards(self, content): + + +namelist ã«ã¤ã„ã¦ã¯ã€ç©ºæ¬„ã®å€¤ã‚’çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ç­‰ã‹ã‚‰ç”Ÿæˆã—ã¦ä»£å…¥ã™ã‚‹ã»ã‹ã€æ ¼å­ãƒ‘ラメータãªã© Structure ã‹ã‚‰æ±ºã¾ã‚‹å€¤ã‚„ã€ä»–ã®ãƒ‘ラメータã¨ã®æ•´åˆæ€§ã‚’ã¨ã‚‹å¿…è¦ã®ã‚る値を強制的ã«ã‚»ãƒƒãƒˆã™ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚処ç†å†…容ã¯ãƒ¢ãƒ¼ãƒ‰ã”ã¨ã«å€‹åˆ¥ã«å¯¾å¿œã—ã¾ã™ã€‚ + +cards ブロックã«ã¤ã„ã¦ã¯ã€card ã®ç¨®é¡žã”ã¨ã«é–¢æ•°ã‚’用æ„ã—ã€cardåã¨é–¢æ•°ã®å¯¾å¿œä»˜ã‘ã‚’ ``card_table`` 変数ã«åˆ—挙ã—ã¾ã™ã€‚ +基底クラス㮠``update_cards()`` ã§ã¯ã€cardåã‹ã‚‰å¯¾å¿œã™ã‚‹é–¢æ•°ã‚’å–å¾—ã—ã¦å®Ÿè¡Œã—ã€card ã®æƒ…報を更新ã—ã¾ã™ã€‚ã‚‚ã¡ã‚ã‚“ã€å…¨ã独自㫠``update_cards()`` 関数を作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ + +.. code-block:: python + + self.card_table = { + 'CELL_PARAMETERS': generate_cell_parameters, + 'ATOMIC_SPECIES': generate_atomic_species, + 'ATOMIC_POSITIONS': generate_atomic_positions, + 'K_POINTS': generate_k_points, + } + +cardã”ã¨ã®é–¢æ•°ã¯ ``scr/cif2x/qe/cards.py`` ã«ã¾ã¨ã‚られã¦ãŠã‚Šã€é–¢æ•°å㯠``generate_{cardå}`` ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã®é–¢æ•°ã¯ card ブロックã®ãƒ‘ラメータを引数ã«å–ã‚Šã€cardåã€optionã€dataフィールドã‹ã‚‰ãªã‚‹è¾žæ›¸ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã—ã¾ã™ã€‚ diff --git a/manual/v1.0-alpha/ja/html/_sources/cif2x/basic-usage.rst.txt b/manual/v1.0-alpha/ja/html/_sources/cif2x/basic-usage.rst.txt new file mode 100644 index 0000000..faba11f --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_sources/cif2x/basic-usage.rst.txt @@ -0,0 +1,96 @@ +インストールã¨åŸºæœ¬çš„ãªä½¿ã„æ–¹ +================================================================ + +**å¿…è¦ãªãƒ©ã‚¤ãƒ–ラリ・環境** + + HTP-tools ã«å«ã¾ã‚Œã‚‹ç¬¬ä¸€åŽŸç†è¨ˆç®—入力ファイル生æˆãƒ„ール cif2x を利用ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ãƒ—ログラムã¨ãƒ©ã‚¤ãƒ–ラリãŒå¿…è¦ã§ã™ã€‚ + + - python 3.x + - pymatgen モジュール + - ruamel.yaml モジュール + - f90nml モジュール + - qe-tools モジュール + - numpy モジュール + - pandas モジュール + - monty モジュール + +**ソースコードé…布サイト** + + - `GitHubリãƒã‚¸ãƒˆãƒª `_ + +**ダウンロード方法** + + gitを利用ã§ãã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã§cif2xをダウンロードã§ãã¾ã™ã€‚ + + .. code-block:: bash + + $ git clone https://github.com/issp-center-dev/cif2x.git + +**インストール方法** + + cif2xをダウンロード後ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚cif2xãŒåˆ©ç”¨ã™ã‚‹ãƒ©ã‚¤ãƒ–ラリも必è¦ã«å¿œã˜ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã™ã€‚ + + .. code-block:: bash + + $ cd ./cif2x + $ python3 -m pip install . + + 実行プログラム ``cif2x`` ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã™ã€‚ + +**ディレクトリ構æˆ** + + :: + + . + |-- LICENSE + |-- README.md + |-- pyproject.toml + |-- docs/ + | |-- ja/ + | |-- tutorial/ + |-- src/ + | |-- cif2x/ + | |-- __init__.py + | |-- main.py + | |-- cif2struct.py + | |-- struct2qe.py + | |-- qe/ + | | |-- __init__.py + | | |-- calc_mode.py + | | |-- cards.py + | | |-- content.py + | | |-- qeutils.py + | | |-- tools.py + | |-- struct2vasp.py + | |-- struct2openmx.py + | |-- openmx/ + | | |-- __init__.py + | | |-- vps_table.py + | |-- utils.py + |-- sample/ + + +**基本的ãªä½¿ç”¨æ–¹æ³•** + + cif2xã¯ç¬¬ä¸€åŽŸç†è¨ˆç®—プログラムã®ãŸã‚ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹ãƒ„ールã§ã™ã€‚入力パラメータを雛形ã¨ã—ã¦ã€ç‰©è³ªã®ç¨®é¡žã‚„計算æ¡ä»¶ã«ã‚ˆã£ã¦å¤‰ã‚る箇所をçµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãªã©ã‹ã‚‰æ§‹æˆã—ã¾ã™ã€‚ç¾åœ¨ã¯ Quantum ESPRESSO, VASP, ãŠã‚ˆã³ OpenMX ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«å½¢å¼ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚ + + #. 入力パラメータファイルã®ä½œæˆ + + cif2xを使用ã™ã‚‹ã«ã¯ã€ã¾ãšã€ç”Ÿæˆã™ã‚‹å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容を記述ã—ãŸãƒ‘ラメータファイルをYAMLå½¢å¼ã§ä½œæˆã—ã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ãƒ•ã‚¡ã‚¤ãƒ«ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã®ç« ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + + #. çµæ™¶æ§‹é€ ãƒ•ã‚¡ã‚¤ãƒ«ã¨æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®é…ç½® + + 対象ã¨ãªã‚‹ç‰©è³ªã®çµæ™¶æ§‹é€ ã‚’記述ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’用æ„ã—ã¾ã™ã€‚ファイル形å¼ã¯ CIF ã¾ãŸã¯ pymatgen ãŒæ‰±ãˆã‚‹ POSCAR ã‚„ xfs å½¢å¼ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚ + + Quantum ESPRESSO ã®å ´åˆã€åˆ©ç”¨ã™ã‚‹æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã¨ã€CSVå½¢å¼ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é…ç½®ã—ã¾ã™ã€‚擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®é…置先ãªã©ã¯å…¥åŠ›ãƒ‘ラメータファイル内ã«æŒ‡å®šã—ã¾ã™ã€‚ + + VASP ã®å ´åˆã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®æ ¼ç´å ´æ‰€ã‚’ ``~/.config/.pmgrc.yaml`` ファイルã«è¨˜è¿°ã™ã‚‹ã‹ç’°å¢ƒå¤‰æ•°ã«ã‚»ãƒƒãƒˆã—ã¾ã™ã€‚入力パラメータファイル内ã§æŒ‡å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ + + #. コマンドã®å®Ÿè¡Œ + + 作æˆã—ãŸå…¥åŠ›ãƒ‘ラメータファイルãŠã‚ˆã³çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã‚’入力ã¨ã—ã¦cif2xプログラムを実行ã—ã¾ã™ã€‚Quantum ESPRESSO用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹å ´åˆã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚ªãƒ—ション㫠``-t QE`` を指定ã—ã¾ã™ã€‚VASPã®å ´åˆã¯ ``-t VASP``, OpenMX ã®å ´åˆã¯ ``-t OpenMX`` を指定ã—ã¾ã™ã€‚ + + .. code-block:: bash + + $ cif2x -t QE input.yaml material.cif + diff --git a/manual/v1.0-alpha/ja/html/_sources/cif2x/command/index.rst.txt b/manual/v1.0-alpha/ja/html/_sources/cif2x/command/index.rst.txt new file mode 100644 index 0000000..e5b9cdf --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_sources/cif2x/command/index.rst.txt @@ -0,0 +1,55 @@ +コマンドリファレンス +================================================================ + +cif2x +---------------------------------------------------------------- + + 第一原ç†è¨ˆç®—ã®ãŸã‚ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹ + +書å¼: + + .. code-block:: bash + + cif2x [-v][-q] -t target input_yaml material.cif + cif2x -h + cif2x --version + +説明: + + input_yaml ã«æŒ‡å®šã—ãŸå…¥åŠ›ãƒ‘ラメータファイル㨠material.cif ã«æŒ‡å®šã—ãŸçµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‚’読ã¿è¾¼ã¿ã€ç¬¬ä¸€åŽŸç†è¨ˆç®—プログラム用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚ç¾åœ¨ã¯ Quantum ESPRESSO, VASP, OpenMX ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚ + 以下ã®ã‚ªãƒ—ションをå—ã‘付ã‘ã¾ã™ã€‚ + + - ``-v`` + + 実行時ã«è¡¨ç¤ºã•ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’冗長ã«ã—ã¾ã™ã€‚複数回指定ã™ã‚‹ã¨å†—長度ãŒä¸ŠãŒã‚Šã¾ã™ã€‚ + + - ``-q`` + + 実行時ã«è¡¨ç¤ºã•ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å†—長度を下ã’ã¾ã™ã€‚ ``-v`` ã®åŠ¹æžœã‚’打ã¡æ¶ˆã—ã¾ã™ã€‚複数回ã®æŒ‡å®šãŒå¯èƒ½ã§ã™ã€‚ + + - ``-t`` *target* + + 対象ã¨ãªã‚‹ç¬¬ä¸€åŽŸç†è¨ˆç®—プログラムを指定ã—ã¾ã™ã€‚ *target* ã¨ã—ã¦æŒ‡å®šå¯èƒ½ãªå€¤ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚大文字å°æ–‡å­—ã¯åŒºåˆ¥ã—ã¾ã›ã‚“。 + + - ``QE``, ``espresso``, ``quantum_espresso``: Quantum ESPRESSOå‘ã‘入力ファイルを生æˆã—ã¾ã™ã€‚ + + - ``VASP``: VASPå‘ã‘入力ファイルを生æˆã—ã¾ã™ã€‚ + + - ``OpenMX``: OpenMXå‘ã‘入力ファイルを生æˆã—ã¾ã™ã€‚ + + - ``input_yaml`` + + 入力パラメータファイルを指定ã—ã¾ã™ã€‚å½¢å¼ã¯ YAML format ã§ã™ã€‚ + + - ``material.cif`` + + çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã—ã¾ã™ã€‚å½¢å¼ã¯ CIF ã®ä»–ã€pymatgen ã§æ‰±ãˆã‚‹å½¢å¼ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã§ãã¾ã™ã€‚ + + - ``-h`` + + ヘルプを表示ã—ã¾ã™ã€‚ + + - ``--version`` + + ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報を表示ã—ã¾ã™ã€‚ + diff --git a/manual/v1.0-alpha/ja/html/_sources/cif2x/filespec/index.rst.txt b/manual/v1.0-alpha/ja/html/_sources/cif2x/filespec/index.rst.txt new file mode 100644 index 0000000..b7b452e --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_sources/cif2x/filespec/index.rst.txt @@ -0,0 +1,262 @@ +.. _sec-cif2x-fileformat: + +====================== + ファイルフォーマット +====================== + +入力パラメータファイル +====================== + +入力パラメータファイルã§ã¯ã€cif2x ã§ç¬¬ä¸€åŽŸç†è¨ˆç®—入力ファイルを生æˆã™ã‚‹ãŸã‚ã®è¨­å®šæƒ…報を YAMLå½¢å¼ã§è¨˜è¿°ã—ã¾ã™ã€‚本ファイルã¯ä»¥ä¸‹ã®éƒ¨åˆ†ã‹ã‚‰æ§‹æˆã•ã‚Œã¾ã™ã€‚ + + 1. structureセクション: çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã®æ‰±ã„ã«ã¤ã„ã¦ã®ã‚ªãƒ—ションを記述ã—ã¾ã™ã€‚ + + 2. optionalセクション: 擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®æŒ‡å®šã‚„ã€YAMLã®å‚照機能を利用ã™ã‚‹å ´åˆã®ã‚·ãƒ³ãƒœãƒ«å®šç¾©ã‚’è¡Œã„ã¾ã™ã€‚ + + 3. tasksセクション: 入力ファイルã®å†…容を記述ã—ã¾ã™ã€‚ + + +structure +--------- + + ``use_ibrav`` (デフォルト値: ``false``) + + çµæ™¶æ§‹é€ ã®å…¥åŠ›ã« Quantum ESPRESSO ã® ``ibrav`` パラメータを利用ã—ã¾ã™ã€‚ ``true`` ã®å ´åˆã€æ ¼å­ã®ã¨ã‚Šæ–¹ã‚’ Quantum ESPRESSO ã® convention ã«åˆã†ã‚ˆã†ã«å¤‰æ›ã—ã¾ã™ã€‚入力ファイルã«ã¯ã‚ã‚ã›ã¦æ ¼å­ã«é–¢ã™ã‚‹ãƒ‘ラメータ ``a``, ``b``, ``c``, ``cosab``, ``cosac``, ``cosbc`` ãŒ(å¿…è¦ã«å¿œã˜ã¦)書ã出ã•ã‚Œã¾ã™ã€‚ + + ``tolerance`` (デフォルト値: 0.01) + + ``use_ibrav = true`` ã®å ´åˆã«ã€å†æ§‹æˆã—㟠Structure データã¨å…ƒãƒ‡ãƒ¼ã‚¿ã¨ã®ä¸€è‡´ã‚’評価ã™ã‚‹éš›ã®è¨±å®¹åº¦ã‚’指定ã—ã¾ã™ã€‚ + + ``supercell`` (デフォルト値: ãªã—) + + supercell を設定ã™ã‚‹å ´åˆã« supercell ã®ã‚µã‚¤ã‚ºã‚’ [:math:`n_x`, :math:`n_y`, :math:`n_z`] ã§æŒ‡å®šã—ã¾ã™ã€‚ + +optional +-------- +第一原ç†è¨ˆç®—プログラムã”ã¨ã«å¿…è¦ãª global ãªè¨­å®šã‚’è¡Œã„ã¾ã™ã€‚記述ã™ã‚‹å†…容ã¯ä»¥ä¸‹ã®å„節ã«è¨˜è¿°ã—ã¾ã™ã€‚ + +tasks +----- +入力ファイルã®å†…容を記述ã—ã¾ã™ã€‚複数ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã«å¯¾å¿œã™ã‚‹ãŸã‚〠``tasks`` ã«ã¯å„入力ファイルã”ã¨ã®ãƒ–ロックã‹ã‚‰ãªã‚‹ãƒªã‚¹ãƒˆå½¢å¼ã‚’ã¨ã‚Šã¾ã™ã€‚å„ブロックã«è¨˜è¿°ã™ã‚‹é …ç›®ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚ + + ``mode`` (Quantum ESPRESSO) + + 入力ファイルã®è¨ˆç®—内容を指定ã—ã¾ã™ã€‚ + ç¾æ™‚点ã§ã¯ Quantum ESPRESSO ã® pw.x å‘ã‘ã« ``scf`` 㨠``nscf`` ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚対応ã—ã¦ã„ãªã„ mode ã«ã¤ã„ã¦ã¯ã€ ``content`` ã®å†…容をãã®ã¾ã¾å‡ºåŠ›ã—ã¾ã™ã€‚ + + ``output_file`` (Quantum ESPRESSO) + + 出力ファイルåを指定ã—ã¾ã™ã€‚ + + ``output_dir`` + + 出力先ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåを指定ã—ã¾ã™ã€‚デフォルト値ã¯ã‚«ãƒ¬ãƒ³ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™ã€‚ + + ``content`` + + 出力内容を指定ã—ã¾ã™ã€‚Quantum ESPRESSO ã®å ´åˆã¯ ``namelist`` ブロック㫠namelist データ (``&system`` ã‚„ ``&control`` ãªã©) を記述ã—〠``K_POINTS`` 等㮠card データを個別ã®ãƒ–ロックã¨ã—ã¦è¨˜è¿°ã—ã¾ã™ã€‚card データã¯ãƒ‘ラメータをã¨ã‚‹ã‚‚ã®ãŒã‚ã‚Šã¾ã™ã€‚ + + ``template`` (Quantum ESPRESSO) + + ``template_dir`` (VASP) + + 出力内容ã®ãƒ†ãƒ³ãƒ—レートファイルを指定ã—ã¾ã™ã€‚指定ãŒãªã„å ´åˆã¯ãƒ†ãƒ³ãƒ—レートを利用ã—ã¾ã›ã‚“。 + ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容を ``content`` ã«è¿½åŠ ã—ã¾ã™ã€‚åŒã˜ãƒ‡ãƒ¼ã‚¿ãŒã‚ã‚‹å ´åˆã¯å¾Œè€…を優先ã—ã¾ã™ã€‚ + +パラメータセット指定 +-------------------- +入力パラメータã«ã¯å€¤ã®ãƒªã‚¹ãƒˆã‚„範囲を指定ã™ã‚‹ã“ã¨ãŒã§ãã€å€¤ã®çµ„ã¿åˆã‚ã›ã”ã¨ã«å€‹åˆ¥ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作æˆã—ã¦å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚パラメータセットã®æŒ‡å®šã«ã¯ç‰¹åˆ¥ãªæ§‹æ–‡ ``${...}`` を用ã„ã¾ã™ã€‚ +指定方法ã¯æ¬¡ã®é€šã‚Šã§ã™: + +- リスト ``${[ A, B, ... ]}`` + + パラメータセットを Python ã®ãƒªã‚¹ãƒˆã¨ã—ã¦åˆ—挙ã—ã¾ã™ã€‚å„é …ç›®ã¯ã‚¹ã‚«ãƒ©ãƒ¼å€¤ã‚„リストを指定ã§ãã¾ã™ã€‚ + +- 範囲指定 ``${range(N)}``, ``${range(start, end, step)}`` + + パラメータã®ç¯„囲を指定ã—ã¾ã™ã€‚ãã‚Œãžã‚Œ 0〜N-1, start〜end ã‚’ step 刻㿠(step ã‚’çœç•¥ã—ãŸå ´åˆã¯ 1) ã§ã™ã€‚ ``N``, ``start``, ``end``, ``step`` 㯠int ã¾ãŸã¯ float ã§ã™ã€‚ + +Quantum ESPRESSO å‘ã‘パラメータ +=============================== + +``optional`` セクションãŠã‚ˆã³ ``tasks`` セクション㮠``content`` ã«è¨˜è¼‰ã™ã‚‹å†…容ã«ã¤ã„ã¦ã€Quantum ESPRESSO 固有ã®å†…容を記述ã—ã¾ã™ã€‚ +ç¾æ™‚点ã§ã¯ pw.x ã® ``scf`` ãŠã‚ˆã³ ``nscf`` ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚ + +optionalセクション +------------------ + + ``pp_file`` + + 元素種ã¨æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã‚’対応付ã‘ã‚‹CSVå½¢å¼ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã—ã¾ã™ã€‚ + ファイルã®æ›¸å¼ã¯ã€å…ƒç´ ç¨®ã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¿ã‚¤ãƒ—ã€nexcludeã€orbitals ã§ã™ã€‚例: + + .. code-block:: + + Fe,pbe-spn-rrkjus_psl.0.2.1,4,spd + + 擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«å㯠Fe.pbe-spn-rrkjus_psl.0.2.1.UPF ã«å¯¾å¿œã—ã¾ã™ã€‚ + + ``cutoff_file`` + + 擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã¨ã‚«ãƒƒãƒˆã‚ªãƒ•ã‚’対応付ã‘ã‚‹CSVå½¢å¼ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã—ã¾ã™ã€‚ + ファイルã®æ›¸å¼ã¯ã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã€ecutwfcã®å€¤ã€ecutrhoã®å€¤ ã§ã™ã€‚ + + ``pseudo_dir`` + + 擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ ¼ç´ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåを指定ã—ã¾ã™ã€‚カットオフã®å€¤ã‚’擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰å–å¾—ã™ã‚‹å ´åˆã«ä½¿ç”¨ã—ã¾ã™ã€‚Quantum ESPRESSO ã® ``pseudo_dir`` パラメータã¨ã¯ç‹¬ç«‹ã«æŒ‡å®šã—ã¾ã™ã€‚ + + +content +-------- + + **namelist** + + - ``structure`` セクション㮠``use_ibrav`` パラメータã«å¿œã˜ã¦ã€ ``&system`` ã®æ ¼å­æƒ…å ±ã®æŒ‡å®šãŒä¸Šæ›¸ãã•ã‚Œã¾ã™ã€‚ + + - ``use_ibrav = false``: + ``ibrav`` 㯠0 ã«ã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ã€‚ã¾ãŸã€æ ¼å­ãƒ‘ラメータã«é–¢ã™ã‚‹ ``a``, ``b``, ``c``, ``cosab``, ``cosac``, ``cosbc``, ``celldm`` ã¯å‰Šé™¤ã•ã‚Œã¾ã™ã€‚ + + - ``use_ibrav = true``: + ``ibrav`` ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰å–å¾—ã•ã‚ŒãŸ Bravais æ ¼å­ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ã€‚ã¾ãŸã€Structure データã¯åŸºæœ¬æ ¼å­ã®ã¨ã‚Šæ–¹ãªã© Quantum ESPRESSO ã® convention ã«åˆã‚ã›ã¦å†æ§‹æˆã•ã‚Œã¾ã™ã€‚ + + - ``nat`` (原å­æ•°) ãŠã‚ˆã³ ``ntyp`` (元素種ã®æ•°)ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰å–å¾—ã•ã‚Œã‚‹å€¤ã§ä¸Šæ›¸ãã•ã‚Œã¾ã™ã€‚ + + - カットオフ ``ecutwfc`` ãŠã‚ˆã³ ``ecutrho`` ã®æƒ…å ±ã¯ã€ãƒ‘ラメータã®å€¤ãŒç©ºæ¬„ã®å ´åˆã¯æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰å–å¾—ã—ã¾ã™ã€‚ + + **CELL_PARAMETERS** + + - ``structure`` セクション㮠``use_ibrav`` パラメータ㌠true ã®å ´åˆã¯å‡ºåŠ›ã•ã‚Œã¾ã›ã‚“。false ã®å ´åˆã¯æ ¼å­ãƒ™ã‚¯ãƒˆãƒ«ãŒå‡ºåŠ›ã•ã‚Œã¾ã™ã€‚å˜ä½ã¯ angstrom ã§ã™ã€‚ + + - æ ¼å­ãƒ™ã‚¯ãƒˆãƒ«ã®æƒ…å ±ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰å–å¾—ã•ã‚Œã¾ã™ã€‚ ``data`` フィールド㫠3x3 ã®è¡Œåˆ—を直接指定ã—ãŸå ´åˆã¯ãã®å€¤ãŒç”¨ã„られã¾ã™ã€‚ + + **ATOMIC_SPECIES** + + - 原å­ç¨®ãƒ»åŽŸå­é‡ãƒ»æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«åã®ãƒªã‚¹ãƒˆã‚’出力ã—ã¾ã™ã€‚ + + - 原å­ç¨®ã®æƒ…å ±ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰å–å¾—ã•ã‚Œã¾ã™ã€‚擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«å㯠``pp_list`` ã§æŒ‡å®šã™ã‚‹CSVå½¢å¼ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å‚ç…§ã—ã¾ã™ã€‚ + + - ``data`` フィールドã«å¿…è¦ãªãƒ‡ãƒ¼ã‚¿ã‚’指定ã—ãŸå ´åˆã¯ãã®å€¤ãŒç”¨ã„られã¾ã™ã€‚ + + **ATOMIC_POSITIONS** + + - 原å­ç¨®ã¨åŽŸå­åº§æ¨™(fractional coordinate)ã®ãƒªã‚¹ãƒˆã‚’出力ã—ã¾ã™ã€‚ + + - ``ignore_species`` ã«åŽŸå­ç¨®ã¾ãŸã¯åŽŸå­ç¨®ã®ãƒªã‚¹ãƒˆã‚’指定ã—ãŸå ´åˆã€ãã®åŽŸå­ç¨®ã«ã¤ã„ã¦ã¯ ``if_pos`` ã®å€¤ãŒ 0 ã«ã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ã€‚MDや構造最é©åŒ–ã®éš›ã«ä½¿ã‚ã‚Œã¾ã™ã€‚ + + - ``data`` フィールドã«å¿…è¦ãªãƒ‡ãƒ¼ã‚¿ã‚’指定ã—ãŸå ´åˆã¯ãã®å€¤ãŒç”¨ã„られã¾ã™ã€‚ + + **K_POINTS** + + - k点ã®æƒ…報を出力ã—ã¾ã™ã€‚ ``option`` ã«å‡ºåŠ›ã‚¿ã‚¤ãƒ—を指定ã—ã¾ã™ã€‚ + + - ``gamma``: :math:`\Gamma` 点を用ã„ã¾ã™ã€‚ + + - ``crystal``: メッシュ状㮠k点ã®ãƒªã‚¹ãƒˆã‚’出力ã—ã¾ã™ã€‚メッシュã®æŒ‡å®šã¯ ``grid`` パラメータã¾ãŸã¯ ``vol_density`` ã‚„ ``k_resolution`` ã‹ã‚‰å°Žå‡ºã•ã‚Œã‚‹å€¤ãŒç”¨ã„られã¾ã™ã€‚ + + - ``automatic``: k点ã®ãƒ¡ãƒƒã‚·ãƒ¥ã‚’指定ã—ã¾ã™ã€‚メッシュã®æŒ‡å®šã¯ ``grid`` パラメータã¾ãŸã¯ ``vol_density`` ã‚„ ``k_resolution`` ã‹ã‚‰å°Žå‡ºã•ã‚Œã‚‹å€¤ãŒç”¨ã„られã¾ã™ã€‚ シフトã®æŒ‡å®šã¯ ``kshifts`` パラメータをå‚ç…§ã—ã¾ã™ã€‚ + + - メッシュã®æŒ‡å®šã¯ä»¥ä¸‹ã®é †åºã§æ±ºå®šã•ã‚Œã¾ã™ã€‚ + + - ``grid`` パラメータã®æŒ‡å®šã€‚grid ã®å€¤ã¯ :math:`n_x, n_y, n_z` ã®é…列ã¾ãŸã¯ã‚¹ã‚«ãƒ©ãƒ¼å€¤ :math:`n` ã§ã™ã€‚後者ã®å ´åˆã¯ :math:`n_x = n_y = n_z = n` ã¨ä»®å®šã—ã¾ã™ã€‚ + - ``vol_density`` パラメータã‹ã‚‰è‡ªå‹•å°Žå‡ºã€‚ + - ``k_resolution`` パラメータã‹ã‚‰è‡ªå‹•å°Žå‡ºã€‚``k_resolution`` ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯ 0.15 ã§ã™ã€‚ + + - ``data`` フィールドã«å¿…è¦ãªãƒ‡ãƒ¼ã‚¿ã‚’指定ã—ãŸå ´åˆã¯ãã®å€¤ãŒç”¨ã„られã¾ã™ã€‚ + + +VASP å‘ã‘パラメータ +=============================== + +``optional`` セクションãŠã‚ˆã³ ``tasks`` セクション㮠``content`` ã«è¨˜è¼‰ã™ã‚‹å†…容ã«ã¤ã„ã¦ã€VASP 固有ã®å†…容を記述ã—ã¾ã™ã€‚ + +optional +-------- + +擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ã‚¿ã‚¤ãƒ—ã‚„æ ¼ç´å ´æ‰€ã‚’指定ã—ã¾ã™ã€‚ + +pymatgen ã§ã¯ã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ +``PMG_VASP_PSP_DIR``/*functional*/POTCAR. *element* (.gz) ã¾ãŸã¯ +``PMG_VASP_PSP_DIR``/*functional*/ *element* /POTCAR ã‹ã‚‰å–å¾—ã—ã¾ã™ã€‚ +``PMG_VASP_PSP_DIR`` ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®æŒ‡å®šã§ã€è¨­å®šãƒ•ã‚¡ã‚¤ãƒ« ``~/.config/.pmgrc.yaml`` ã«è¨˜è¼‰ã™ã‚‹ã‹ã€åŒåã®ç’°å¢ƒå¤‰æ•°ã«æŒ‡å®šã—ã¾ã™ã€‚ã¾ãŸã€ *functional* ã¯æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ã‚¿ã‚¤ãƒ—ã§ã€ ``POT_GGA_PAW_PBE`` ã‚„ ``POT_LDA_PAW`` ãªã©ãŒæ±ºã‚られã¦ã„ã¾ã™ã€‚ + + ``pseudo_functional`` + + 擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ã‚¿ã‚¤ãƒ—を指定ã—ã¾ã™ã€‚タイプã®æŒ‡å®šã¨ä¸Šè¨˜ã® *functional* ã®å¯¾å¿œã¯ pymatgen 内ã®ãƒ†ãƒ¼ãƒ–ルã«å®šç¾©ã•ã‚Œã€ ``PBE`` → ``POT_GGA_PAW_PBE``,  ``LDA`` → ``POT_LDA_PAW`` ãªã©ã®ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ + +以下㮠``pseudo_dir`` を指定ã—ãŸå ´åˆã¯ pymatgen ã®æµå„€ã‚’無視ã—ã¦æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®æ ¼ç´ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’探ã—ã¾ã™ã€‚ + + ``psuedo_dir`` + + 擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®æ ¼ç´ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’指定ã—ã¾ã™ã€‚擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«å㯠``pseudo_dir``/POTCAR. *element* (.gz) ã¾ãŸã¯ ``pseudo_dir``/*element*/POTCAR ã§ã™ã€‚ + + +tasks +----- + +テンプレートファイルã¯ã€ ``template_dir`` ã§æŒ‡å®šã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå†…ã« ``INCAR``, ``KPOINTS``, ``POSCAR``, ``POTCAR`` ファイルをé…ç½®ã—ã¾ã™ã€‚ファイルãŒãªã„é …ç›®ã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚ + +content +------- + + **incar** + + - INCAR ファイルã«è¨˜è¿°ã™ã‚‹ãƒ‘ラメータを列挙ã—ã¾ã™ã€‚ + + **kpoints** + + - ``type`` + + KPOINTS ã®æŒ‡å®šæ–¹æ³•ã‚’記述ã—ã¾ã™ã€‚以下ã®å€¤ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚タイプã«ã‚ˆã‚Šãƒ‘ラメータãŒæŒ‡å®šå¯èƒ½ãªã‚‚ã®ãŒã‚ã‚Šã¾ã™ã€‚詳細㯠pymatgen.io.vasp ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + + - ``automatic`` + + parameter: ``grid`` + + - ``gamma_automatic`` + + parameter: ``grid``, ``shift`` + + - ``monkhorst_automatic`` + + parameter: ``grid``, ``shift`` + + - ``automatic_density`` + + parameter: ``kppa``, ``force_gamma`` + + - ``automatic_gamma_density`` + + parameter: ``grid_density`` + + - ``automatic_density_by_vol`` + + parameter: ``grid_density``, ``force_gamma`` + + - ``automatic_density_by_lengths`` + + parameter: ``length_density``, ``force_gamma`` + + - ``automatic_linemode`` + + parameter: ``division``, ``path_type`` (HighSymmKpath ã® path_type ã«å¯¾å¿œ) + + +OpenMX å‘ã‘パラメータ +=============================== + +``optional`` セクションãŠã‚ˆã³ ``tasks`` セクション㮠``content`` ã«è¨˜è¼‰ã™ã‚‹å†…容ã«ã¤ã„ã¦ã€OpenMX 固有ã®å†…容を記述ã—ã¾ã™ã€‚ + +optional +-------- + + ``data_path`` + + 擬原å­è»Œé“ãŠã‚ˆã³æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ ¼ç´ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’指定ã—ã¾ã™ã€‚入力ファイル㮠``DATA.PATH`` パラメータã«å¯¾å¿œã—ã¾ã™ã€‚ + +content +-------- + + ``precision`` + + 擬原å­è»Œé“ã‚’ OpenMXマニュアル 10.6 ç« ã® Table 1, 2 ã«ã—ãŸãŒã£ã¦é¸æŠžã—ã¾ã™ã€‚ ``quick``, ``standard``, ``precise`` ã®ã„ãšã‚Œã‹ã®å€¤ã‚’å–ã‚Šã¾ã™ã€‚デフォルト値㯠``quick`` ã§ã™ã€‚ + diff --git a/manual/v1.0-alpha/ja/html/_sources/cif2x/index.rst.txt b/manual/v1.0-alpha/ja/html/_sources/cif2x/index.rst.txt new file mode 100644 index 0000000..82d4180 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_sources/cif2x/index.rst.txt @@ -0,0 +1,15 @@ +**************************************************************** +第一原ç†è¨ˆç®—入力ファイル生æˆãƒ„ール (cif2x) +**************************************************************** + + +.. toctree:: + :maxdepth: 2 + :numbered: 2 + + about/index + basic-usage + tutorial/index + command/index + filespec/index + appendix/index diff --git a/manual/v1.0-alpha/ja/html/_sources/cif2x/tutorial/index.rst.txt b/manual/v1.0-alpha/ja/html/_sources/cif2x/tutorial/index.rst.txt new file mode 100644 index 0000000..dda7d69 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_sources/cif2x/tutorial/index.rst.txt @@ -0,0 +1,65 @@ +.. _sec-cif2x-tutorial: + +ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ« +================================================================ + +第一原ç†è¨ˆç®—入力ファイル生æˆãƒ„ール cif2x を使ã†ã«ã¯ã€å…¥åŠ›ãƒ‘ラメータファイルã¨çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãŠã‚ˆã³æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’用æ„ã—ãŸå¾Œã€ãƒ—ログラム cif2x を実行ã—ã¾ã™ã€‚ç¾åœ¨ã¯ Quantum ESPRESSO, VASP, OpenMX ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ç”Ÿæˆã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚以下ã§ã¯ã€ ``docs/tutorial/cif2x`` ディレクトリã«ã‚ã‚‹ Quantum ESPRESSO å‘ã‘サンプルを例ã«ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’実施ã—ã¾ã™ã€‚ + +入力パラメータファイルを作æˆã™ã‚‹ +---------------------------------------------------------------- + +入力パラメータファイルã«ã¯ã€ç¬¬ä¸€åŽŸç†è¨ˆç®—プログラムã«ä¸Žãˆã‚‹å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容を記述ã—ã¾ã™ã€‚ + +以下ã«å…¥åŠ›ãƒ‘ラメータファイルã®ã‚µãƒ³ãƒ—ルを記載ã—ã¾ã™ã€‚ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ YAMLå½¢å¼ã®ãƒ†ã‚­ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã§ã€çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã«å¯¾ã™ã‚‹ã‚ªãƒ—ションã®æŒ‡å®šã‚„ã€å‡ºåŠ›ã™ã‚‹ç¬¬ä¸€åŽŸç†è¨ˆç®—入力ファイルã®å†…容を記述ã—ã¾ã™ã€‚仕様ã®è©³ç´°ã«ã¤ã„ã¦ã¯ :ref:`ファイルフォーマット ` ã®ç« ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + +YAMLフォーマットã§ã¯ã€ ``keyword: value`` ã®è¾žæ›¸å½¢å¼ã§ãƒ‘ラメータを記述ã—ã¾ã™ã€‚ ``value`` ã«ã¯æ•°å€¤ã‚„文字列ãªã©ã®ã‚¹ã‚«ãƒ©ãƒ¼å€¤ã‚„ã€è¤‡æ•°ã®å€¤ã‚’ ``[ ]`` ã¾ãŸã¯ç®‡æ¡æ›¸ãã®å½¢å¼ã§åˆ—挙ã™ã‚‹ãƒªã‚¹ãƒˆåž‹ã€ã¾ãŸã¯è¾žæ›¸åž‹ã‚’入れå­ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + +.. literalinclude:: ../../../../tutorial/cif2x/input.yaml + :language: yaml + + +入力パラメータファイル㯠``structure``, ``optional``, ``tasks`` ã®ãƒ–ロックã‹ã‚‰æ§‹æˆã•ã‚Œã¾ã™ã€‚ +``structure`` ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã«é–¢ã™ã‚‹ã‚ªãƒ—ションを指定ã—ã¾ã™ã€‚ +``optional`` ã¯æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã«é–¢ã™ã‚‹ global ãªè¨­å®šãªã©ã‚’è¡Œã„ã¾ã™ã€‚ + +``tasks`` ã¯å‡ºåŠ›ã™ã‚‹ç¬¬ä¸€åŽŸç†è¨ˆç®—入力ファイルã®å†…容を指定ã—ã¾ã™ã€‚一連ã®è¨ˆç®—ã«å¯¾å¿œã—ã¦è¤‡æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã§ãるよã†ã€tasks ã¯é…列ã®å€¤ã‚’å–ã‚Šã¾ã™ã€‚ +å„出力ã«ã¤ã„ã¦ã€è¨ˆç®—内容㯠``mode`` パラメータã§æŒ‡å®šã—ã¾ã™ã€‚SCF計算㮠``scf`` ã‚„ NSCF計算㮠``nscf`` ã«å¯¾å¿œã™ã‚‹ã»ã‹ã€ä¸€èˆ¬çš„ãªå‡ºåŠ›ã‚’è¡Œã†ä»»æ„ã®å‡ºåŠ›ãƒ¢ãƒ¼ãƒ‰ã‚’指定ã§ãã¾ã™ã€‚ +ファイル㯠``output_dir`` ãŠã‚ˆã³ ``output_file`` ã§æŒ‡å®šã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã出ã•ã‚Œã¾ã™ã€‚ + +出力内容㯠``content`` ã«è¨˜è¼‰ã—ã¾ã™ã€‚ +Quantum ESPRESSO ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ ``&keyword`` ã§å§‹ã¾ã‚‹ Fortran90 ã® namelist å½¢å¼ã¨ã€ ``K_POINTS`` ãªã©ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§å§‹ã¾ã‚Šç©ºè¡Œã§åˆ†å‰²ã•ã‚Œã‚‹ cards ã¨å‘¼ã°ã‚Œã‚‹ãƒ–ロックã‹ã‚‰ãªã‚Šã¾ã™ã€‚ ``content`` ã«ã¯ namelist 㨠cards を入れå­ã®è¾žæ›¸å½¢å¼ã§æŒ‡å®šã—ã¾ã™ã€‚ +ã„ãã¤ã‹ã®ä¾‹å¤–を除ã„ã¦ã€æŒ‡å®šã•ã‚ŒãŸå†…容ãŒåŸºæœ¬çš„ã«ã¯ãã®ã¾ã¾å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã出ã•ã‚Œã¾ã™ã€‚値ãŒç©ºæ¬„ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã¯ã€çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãªã©ã‹ã‚‰æ±‚ã‚ãŸå€¤ãŒä»£å…¥ã•ã‚Œã¾ã™ã€‚ + +ã¾ãŸã€template ã¨ã—ã¦å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®é››å½¢ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ ``template`` ã«æŒ‡å®šã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容㨠``content`` ã®ãƒ‡ãƒ¼ã‚¿ã‚’åˆã‚ã›ãŸã‚‚ã®ã‚’入力データã¨ã—ã¦æ‰±ã„ã¾ã™ã€‚åŒã˜ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã®ãƒ‡ãƒ¼ã‚¿ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ ``content`` ã®æŒ‡å®šãŒå„ªå…ˆã•ã‚Œã¾ã™ã€‚従ã£ã¦ã€æ—¢å­˜ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å…ƒã«å¿…è¦ãªç®‡æ‰€ã‚’入力パラメータファイルã§ä¸Šæ›¸ãã™ã‚‹ä½¿ã„æ–¹ãŒå¯èƒ½ã§ã™ã€‚上記ã®ä¾‹ã§ã¯æ¬¡ã®ãƒ•ã‚¡ã‚¤ãƒ«(``scf.in_tmpl``)ã‚’ template ã¨ã—ã¦å–ã‚Šè¾¼ã¿ã€ã‚«ãƒƒãƒˆã‚ªãƒ•ã¨ CELL_PARAMETER, ATOMIC_SPECIES, ATOMIC_POSITIONS, K_POINT ã®ç®‡æ‰€ã‚’çµæ™¶æ§‹é€ ç­‰ã‹ã‚‰æ±ºã‚ã¾ã™ã€‚ ``ecutwfc`` 㨠``ecutrho`` ãŒç©ºæ¬„ã§ä¸Šæ›¸ãã•ã‚Œã¦ã„ã‚‹ã“ã¨ã«ç•™æ„ã—ã¦ãã ã•ã„。 + +.. literalinclude:: ../../../../tutorial/cif2x/scf.in_tmpl + :language: fortran + + +第一原ç†è¨ˆç®—入力ファイルを生æˆã™ã‚‹ +---------------------------------------------------------------- + +入力パラメータファイル(input.yaml)ã¨çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿(Co3SnS2_nosym.cif)を入力ã¨ã—㦠cif2x を実行ã—ã¾ã™ã€‚ + +.. code-block:: bash + + $ cif2x -t QE input.yaml Co3SnS2_nosym.cif + +予ã‚å¿…è¦ãªæ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ ``./pseudo`` ディレクトリã«é…ç½®ã—ã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ ``./pseudo/pp_psl_pbe_rrkjus.csv`` ã«ä½œæˆã—ã¦ãŠãã¾ã™ã€‚ + +``cif2x`` を実行ã™ã‚‹ã¨ Quantum ESPRESSO用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãŒç”Ÿæˆã•ã‚Œå‡ºåŠ›ã•ã‚Œã¾ã™ã€‚出力先ã¯å…¥åŠ›ãƒ‘ラメータファイル内ã®ãƒ‘ラメータã§æŒ‡å®šã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª(``output_dir``)ãŠã‚ˆã³ãƒ•ã‚¡ã‚¤ãƒ«(``output_file``)ã§ã™ã€‚ã“ã®ä¾‹ã§ã¯ ``./scf/scf.in`` ã« SCF計算用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ›¸ã出ã•ã‚Œã¾ã™ã€‚ + +パラメータセットを指定ã™ã‚‹ +---------------------------------------------------------------- + +入力パラメータ内ã®å€¤ã‚’ã„ãã¤ã‹å¤‰ãˆãªãŒã‚‰ä¸€é€£ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ãŸã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚例ãˆã°ã‚«ãƒƒãƒˆã‚ªãƒ•ã®å€¤ã‚„k点ã®æ•°ã‚’変ãˆã¦åŽæŸæ€§ã‚’評価ã™ã‚‹ãªã©ã®å ´åˆã§ã™ã€‚入力パラメータã«ã¯å€¤ã®ãƒªã‚¹ãƒˆã‚„範囲を指定ã™ã‚‹ã“ã¨ãŒã§ãã€å€¤ã®çµ„ã¿åˆã‚ã›ã”ã¨ã«å€‹åˆ¥ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作æˆã—ã¦å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚ +パラメータセットã®æŒ‡å®šã¯ç‰¹åˆ¥ãªæ§‹æ–‡ ``${...}`` を用ã„ã¾ã™ã€‚ + +.. code-block:: yaml + + content: + K_POINTS: + option: automatic + grid: ${ [ [4,4,4], [8,8,8], [12,12,12] ] } + +例ãˆã°ä¸Šè¨˜ã®ã‚ˆã†ã« ``K_POINTS`` を指定ã™ã‚‹ã¨ã€ ``grid`` ã®å€¤ãŒ ``[4,4,4]``, ``[8,8,8]``, ``[12,12,12]`` ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãŒãã‚Œãžã‚Œ ``4x4x4/``, ``8x8x8/``, ``12x12x12/`` サブディレクトリ内ã«ä½œæˆã•ã‚Œã¾ã™ã€‚ diff --git a/manual/v1.0-alpha/ja/html/_sources/index.rst.txt b/manual/v1.0-alpha/ja/html/_sources/index.rst.txt new file mode 100644 index 0000000..0176a5c --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_sources/index.rst.txt @@ -0,0 +1,20 @@ +.. HTP-tools documentation master file, created by + sphinx-quickstart on Fri Jun 30 11:02:31 2023. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Cif2x Users Guide +===================================== + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + cif2x/index + +.. Indices and tables +.. ================== + +.. * :ref:`genindex` +.. * :ref:`modindex` +.. * :ref:`search` diff --git a/manual/v1.0-alpha/ja/html/_static/alabaster.css b/manual/v1.0-alpha/ja/html/_static/alabaster.css new file mode 100644 index 0000000..78b7a4a --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/alabaster.css @@ -0,0 +1,703 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/_static/basic.css b/manual/v1.0-alpha/ja/html/_static/basic.css new file mode 100644 index 0000000..30fee9d --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/_static/custom.css b/manual/v1.0-alpha/ja/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/manual/v1.0-alpha/ja/html/_static/doctools.js b/manual/v1.0-alpha/ja/html/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/manual/v1.0-alpha/ja/html/_static/documentation_options.js b/manual/v1.0-alpha/ja/html/_static/documentation_options.js new file mode 100644 index 0000000..ae40009 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '1.0-alpha', + LANGUAGE: 'ja', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/_static/file.png b/manual/v1.0-alpha/ja/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/manual/v1.0-alpha/ja/html/_static/language_data.js b/manual/v1.0-alpha/ja/html/_static/language_data.js new file mode 100644 index 0000000..b368127 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/language_data.js @@ -0,0 +1,26 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = []; + + +/* Non-minified version is copied as a separate JS file, is available */ + +/** + * Dummy stemmer for languages without stemming rules. + */ +var Stemmer = function() { + this.stemWord = function(w) { + return w; + } +} + diff --git a/manual/v1.0-alpha/ja/html/_static/minus.png b/manual/v1.0-alpha/ja/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/manual/v1.0-alpha/ja/html/_static/plus.png b/manual/v1.0-alpha/ja/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/manual/v1.0-alpha/ja/html/_static/pygments.css b/manual/v1.0-alpha/ja/html/_static/pygments.css new file mode 100644 index 0000000..0d49244 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/_static/searchtools.js b/manual/v1.0-alpha/ja/html/_static/searchtools.js new file mode 100644 index 0000000..7918c3f --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/manual/v1.0-alpha/ja/html/_static/sphinx_highlight.js b/manual/v1.0-alpha/ja/html/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/manual/v1.0-alpha/ja/html/_static/translations.js b/manual/v1.0-alpha/ja/html/_static/translations.js new file mode 100644 index 0000000..817b128 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/_static/translations.js @@ -0,0 +1,60 @@ +Documentation.addTranslations({ + "locale": "ja", + "messages": { + "%(filename)s — %(docstitle)s": "%(filename)s — %(docstitle)s", + "© %(copyright_prefix)s %(copyright)s.": "", + ", in ": ", in ", + "About these documents": "\u3053\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3064\u3044\u3066", + "Automatically generated list of changes in version %(version)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9\uff08\u3053\u306e\u30ea\u30b9\u30c8\u306f\u81ea\u52d5\u751f\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff09", + "C API changes": "C API \u306b\u95a2\u3059\u308b\u5909\u66f4", + "Changes in Version %(version)s — %(docstitle)s": "\u30d0\u30fc\u30b8\u30e7\u30f3 %(version)s \u306e\u5909\u66f4\u70b9 — %(docstitle)s", + "Collapse sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u305f\u305f\u3080", + "Complete Table of Contents": "\u7dcf\u5408\u76ee\u6b21", + "Contents": "\u30b3\u30f3\u30c6\u30f3\u30c4", + "Copyright": "\u8457\u4f5c\u6a29", + "Created using Sphinx %(sphinx_version)s.": "", + "Expand sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u5c55\u958b", + "Full index on one page": "\u7dcf\u7d22\u5f15", + "General Index": "\u7dcf\u5408\u7d22\u5f15", + "Global Module Index": "\u30e2\u30b8\u30e5\u30fc\u30eb\u7dcf\u7d22\u5f15", + "Go": "\u691c\u7d22", + "Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059", + "Index": "\u7d22\u5f15", + "Index – %(key)s": "\u7d22\u5f15 – %(key)s", + "Index pages by letter": "\u982d\u6587\u5b57\u5225\u7d22\u5f15", + "Indices and tables:": "\u7d22\u5f15\u3068\u8868\u4e00\u89a7:", + "Last updated on %(last_updated)s.": "\u6700\u7d42\u66f4\u65b0: %(last_updated)s", + "Library changes": "\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u95a2\u3059\u308b\u5909\u66f4", + "Navigation": "\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3", + "Next topic": "\u6b21\u306e\u30c8\u30d4\u30c3\u30af\u3078", + "Other changes": "\u305d\u306e\u4ed6\u306e\u5909\u66f4", + "Overview": "\u6982\u8981", + "Please activate JavaScript to enable the search\n functionality.": "\u691c\u7d22\u6a5f\u80fd\u3092\u4f7f\u3046\u306b\u306f JavaScript \u3092\u6709\u52b9\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "Preparing search...": "\u691c\u7d22\u3092\u6e96\u5099\u3057\u3066\u3044\u307e\u3059...", + "Previous topic": "\u524d\u306e\u30c8\u30d4\u30c3\u30af\u3078", + "Quick search": "\u30af\u30a4\u30c3\u30af\u691c\u7d22", + "Search": "\u691c\u7d22", + "Search Page": "\u691c\u7d22\u30da\u30fc\u30b8", + "Search Results": "\u691c\u7d22\u7d50\u679c", + "Search finished, found ${resultCount} page(s) matching the search query.": "", + "Search within %(docstitle)s": "%(docstitle)s \u5185\u3092\u691c\u7d22", + "Searching": "\u691c\u7d22\u4e2d", + "Searching for multiple words only shows matches that contain\n all words.": "\u8907\u6570\u306e\u5358\u8a9e\u3092\u691c\u7d22\u3059\u308b\u3068\u3001\u6b21\u3092\u542b\u3080\u4e00\u81f4\u306e\u307f\u304c\u8868\u793a\u3055\u308c\u307e\u3059\n \u00a0\u00a0\u00a0 \u3059\u3079\u3066\u306e\u7528\u8a9e\u3002", + "Show Source": "\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8868\u793a", + "Table of Contents": "\u76ee\u6b21", + "This Page": "\u3053\u306e\u30da\u30fc\u30b8", + "Welcome! This is": "Welcome! This is", + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u691c\u7d22\u3057\u305f\u6587\u5b57\u5217\u306f\u3069\u306e\u6587\u66f8\u306b\u3082\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3059\u3079\u3066\u306e\u5358\u8a9e\u304c\u6b63\u78ba\u306b\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u304b\u3001\u3042\u308b\u3044\u306f\u3001\u5341\u5206\u306a\u30ab\u30c6\u30b4\u30ea\u30fc\u304c\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", + "all functions, classes, terms": "\u95a2\u6570\u3001\u30af\u30e9\u30b9\u304a\u3088\u3073\u7528\u8a9e\u7dcf\u89a7", + "can be huge": "\u5927\u304d\u3044\u5834\u5408\u304c\u3042\u308b\u306e\u3067\u6ce8\u610f", + "last updated": "\u6700\u7d42\u66f4\u65b0", + "lists all sections and subsections": "\u7ae0\uff0f\u7bc0\u4e00\u89a7", + "next chapter": "\u6b21\u306e\u7ae0\u3078", + "previous chapter": "\u524d\u306e\u7ae0\u3078", + "quick access to all modules": "\u5168\u30e2\u30b8\u30e5\u30fc\u30eb\u65e9\u898b\u8868", + "search": "\u691c\u7d22", + "search this documentation": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u691c\u7d22", + "the documentation for": "the documentation for" + }, + "plural_expr": "0" +}); \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/cif2x/about/index.html b/manual/v1.0-alpha/ja/html/cif2x/about/index.html new file mode 100644 index 0000000..c226d6b --- /dev/null +++ b/manual/v1.0-alpha/ja/html/cif2x/about/index.html @@ -0,0 +1,174 @@ + + + + + + + + 1. æ¦‚è¦ — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

1. 概è¦Â¶

+
+

1.1. cif2xã¨ã¯?¶

+

è¿‘å¹´ã€æ©Ÿæ¢°å­¦ç¿’を活用ã—ãŸç‰©æ€§äºˆæ¸¬ã‚„物質設計(マテリアルズインフォマティクス)ãŒæ³¨ç›®ã•ã‚Œã¦ã„ã¾ã™ã€‚ +機械学習ã®ç²¾åº¦ã¯ã€é©åˆ‡ãªæ•™å¸«ãƒ‡ãƒ¼ã‚¿ã®æº–å‚™ã«å¤§ããä¾å­˜ã—ã¦ã„ã¾ã™ã€‚ +ãã®ãŸã‚ã€è¿…速ã«æ•™å¸«ãƒ‡ãƒ¼ã‚¿ã‚’生æˆã™ã‚‹ãŸã‚ã®ãƒ„ールや環境ã®æ•´å‚™ã¯ã€ +マテリアルズインフォマティクスã®ç ”究進展ã«å¤§ãã貢献ã™ã‚‹ã¨æœŸå¾…ã•ã‚Œã¾ã™ã€‚

+

cif2xã¯ã€cifファイルã‹ã‚‰ç¬¬ä¸€åŽŸç†è¨ˆç®—用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹ãƒ„ールã§ã™ã€‚ +入力パラメータを雛形ã¨ã—ã¦ã€ç‰©è³ªã®ç¨®é¡žã‚„計算æ¡ä»¶ã«ã‚ˆã£ã¦å¤‰ã‚る箇所をçµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãªã©ã‹ã‚‰æ§‹æˆã—ã¾ã™ã€‚ +特定ã®è¨ˆç®—æ¡ä»¶ã«å¿œã˜ãŸè¤‡æ•°ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ +ç¾åœ¨ã¯ã€ VASP ã€Quantum ESPRESSO ã€OpenMX ã«å¯¾å¿œã—〠+å°†æ¥çš„ã«ã¯ AkaiKKR ã«ã‚‚対応ã™ã‚‹äºˆå®šã§ã™ã€‚

+
+
+

1.2. ライセンス¶

+

本ソフトウェアã®ãƒ—ログラムパッケージãŠã‚ˆã³ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ä¸€å¼ã¯GNU General Public License version 3 (GPL v3) ã«æº–ã˜ã¦é…布ã•ã‚Œã¦ã„ã¾ã™ã€‚

+
+
+

1.3. 開発貢献者¶

+

本ソフトウェアã¯ä»¥ä¸‹ã®é–‹ç™ºè²¢çŒ®è€…ã«ã‚ˆã‚Šé–‹ç™ºã•ã‚Œã¦ã„ã¾ã™ã€‚

+
    +
  • ver.1.0-alpha (2023/12/28リリース)

    +
      +
    • 開発者

      +
        +
      • å‰è¦‹ 一慶 (æ±äº¬å¤§å­¦ 物性研究所)

      • +
      • é’å±± é¾ç¾Ž (æ±äº¬å¤§å­¦ 物性研究所)

      • +
      • 本山 裕一 (æ±äº¬å¤§å­¦ 物性研究所)

      • +
      • ç¦ç”° 将大 (æ±äº¬å¤§å­¦ 物性研究所)

      • +
      • ç¦å³¶ 鉄也 (産業技術ç·åˆç ”究所)

      • +
      • 井戸 康太 (æ±äº¬å¤§å­¦ 物性研究所)

      • +
      • ç¬ æ¾ ç§€è¼” (山形大学 学術研究院(ç†å­¦éƒ¨ä¸»æ‹…当))

      • +
      • 是常 隆  (æ±åŒ—大学大学院ç†å­¦ç ”究科)

      • +
      +
    • +
    • プロジェクトコーディãƒãƒ¼ã‚¿ãƒ¼

      +
        +
      • 尾崎 泰助 (æ±äº¬å¤§å­¦ 物性研究所)

      • +
      +
    • +
    +
  • +
+
+
+

1.4. コピーライト¶

+

© 2023- The University of Tokyo. All rights reserved.

+

本ソフトウェアã¯2023年度 æ±äº¬å¤§å­¦ç‰©æ€§ç ”究所 ソフトウェア高度化プロジェクトã®æ”¯æ´ã‚’å—ã‘開発ã•ã‚Œã¦ãŠã‚Šã€ãã®è‘—作権ã¯æ±äº¬å¤§å­¦ãŒæ‰€æŒã—ã¦ã„ã¾ã™ã€‚

+
+
+

1.5. 動作環境¶

+

以下ã®ç’°å¢ƒã§å‹•ä½œã™ã‚‹ã“ã¨ã‚’確èªã—ã¦ã„ã¾ã™ã€‚

+
    +
  • Ubuntu Linux + python3

  • +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/cif2x/appendix/index.html b/manual/v1.0-alpha/ja/html/cif2x/appendix/index.html new file mode 100644 index 0000000..8faff8d --- /dev/null +++ b/manual/v1.0-alpha/ja/html/cif2x/appendix/index.html @@ -0,0 +1,151 @@ + + + + + + + + 6. 拡張ガイド — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

6. 拡張ガイド¶

+
+

6.1. Quantum ESPRESSO ã® mode を追加ã™ã‚‹Â¶

+

Quantum ESPRESSO ã®è¨ˆç®—モードã¸ã®å¯¾å¿œã‚’追加ã™ã‚‹ã«ã¯ã€ src/cif2x/qe/calc_mode.py ã® create_modeproc() 関数㫠mode ã¨å¤‰æ›ã‚¯ãƒ©ã‚¹ã®å¯¾å¿œä»˜ã‘を記述ã—ã¾ã™ã€‚

+
def create_modeproc(mode, qe):
+    if mode in ["scf", "nscf"]:
+        modeproc = QEmode_pw(qe)
+    else:
+        modeproc = QEmode_generic(qe)
+    return modeproc
+
+
+

modeã”ã¨ã®å¤‰æ›æ©Ÿèƒ½ã¯ QEmode_base ã®æ´¾ç”Ÿã‚¯ãƒ©ã‚¹ã¨ã—ã¦ã¾ã¨ã‚られã¦ã„ã¾ã™ã€‚ +ã“ã®ã‚¯ãƒ©ã‚¹ã¯ +update_namelist() 㧠namelist ブロックã®æ›´æ–°ã¨ã€ +update_cards() 㧠cards ブロックã®ãƒ‡ãƒ¼ã‚¿ç”Ÿæˆã‚’è¡Œã„ã¾ã™ã€‚ +ç¾åœ¨ã¯ pw.x ã® scf ãŠã‚ˆã³ nscf ã«å¯¾å¿œã™ã‚‹ QEmode_pw クラスã¨ã€å¤‰æ›ã›ãšãã®ã¾ã¾å‡ºåŠ›ã™ã‚‹ QEmode_generic クラスãŒç”¨æ„ã•ã‚Œã¦ã„ã¾ã™ã€‚

+
class QEmode_base:
+    def __init__(self, qe):
+    def update_namelist(self, content):
+    def update_cards(self, content):
+
+
+

namelist ã«ã¤ã„ã¦ã¯ã€ç©ºæ¬„ã®å€¤ã‚’çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ç­‰ã‹ã‚‰ç”Ÿæˆã—ã¦ä»£å…¥ã™ã‚‹ã»ã‹ã€æ ¼å­ãƒ‘ラメータãªã© Structure ã‹ã‚‰æ±ºã¾ã‚‹å€¤ã‚„ã€ä»–ã®ãƒ‘ラメータã¨ã®æ•´åˆæ€§ã‚’ã¨ã‚‹å¿…è¦ã®ã‚る値を強制的ã«ã‚»ãƒƒãƒˆã™ã‚‹å ´åˆãŒã‚ã‚Šã¾ã™ã€‚処ç†å†…容ã¯ãƒ¢ãƒ¼ãƒ‰ã”ã¨ã«å€‹åˆ¥ã«å¯¾å¿œã—ã¾ã™ã€‚

+

cards ブロックã«ã¤ã„ã¦ã¯ã€card ã®ç¨®é¡žã”ã¨ã«é–¢æ•°ã‚’用æ„ã—ã€cardåã¨é–¢æ•°ã®å¯¾å¿œä»˜ã‘ã‚’ card_table 変数ã«åˆ—挙ã—ã¾ã™ã€‚ +基底クラス㮠update_cards() ã§ã¯ã€cardåã‹ã‚‰å¯¾å¿œã™ã‚‹é–¢æ•°ã‚’å–å¾—ã—ã¦å®Ÿè¡Œã—ã€card ã®æƒ…報を更新ã—ã¾ã™ã€‚ã‚‚ã¡ã‚ã‚“ã€å…¨ã独自㫠update_cards() 関数を作æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚

+
self.card_table = {
+    'CELL_PARAMETERS': generate_cell_parameters,
+    'ATOMIC_SPECIES': generate_atomic_species,
+    'ATOMIC_POSITIONS': generate_atomic_positions,
+    'K_POINTS': generate_k_points,
+}
+
+
+

cardã”ã¨ã®é–¢æ•°ã¯ scr/cif2x/qe/cards.py ã«ã¾ã¨ã‚られã¦ãŠã‚Šã€é–¢æ•°å㯠generate_{cardå} ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã®é–¢æ•°ã¯ card ブロックã®ãƒ‘ラメータを引数ã«å–ã‚Šã€cardåã€optionã€dataフィールドã‹ã‚‰ãªã‚‹è¾žæ›¸ãƒ‡ãƒ¼ã‚¿ã‚’è¿”ã—ã¾ã™ã€‚

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/cif2x/basic-usage.html b/manual/v1.0-alpha/ja/html/cif2x/basic-usage.html new file mode 100644 index 0000000..803e3a3 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/cif2x/basic-usage.html @@ -0,0 +1,212 @@ + + + + + + + + 2. インストールã¨åŸºæœ¬çš„ãªä½¿ã„æ–¹ — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

2. インストールã¨åŸºæœ¬çš„ãªä½¿ã„方¶

+

å¿…è¦ãªãƒ©ã‚¤ãƒ–ラリ・環境

+
+

HTP-tools ã«å«ã¾ã‚Œã‚‹ç¬¬ä¸€åŽŸç†è¨ˆç®—入力ファイル生æˆãƒ„ール cif2x を利用ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ãƒ—ログラムã¨ãƒ©ã‚¤ãƒ–ラリãŒå¿…è¦ã§ã™ã€‚

+
    +
  • python 3.x

  • +
  • pymatgen モジュール

  • +
  • ruamel.yaml モジュール

  • +
  • f90nml モジュール

  • +
  • qe-tools モジュール

  • +
  • numpy モジュール

  • +
  • pandas モジュール

  • +
  • monty モジュール

  • +
+
+

ソースコードé…布サイト

+
+
+

ダウンロード方法

+
+

gitを利用ã§ãã‚‹å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã§cif2xをダウンロードã§ãã¾ã™ã€‚

+
$ git clone https://github.com/issp-center-dev/cif2x.git
+
+
+
+

インストール方法

+
+

cif2xをダウンロード後ã€ä»¥ä¸‹ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚cif2xãŒåˆ©ç”¨ã™ã‚‹ãƒ©ã‚¤ãƒ–ラリも必è¦ã«å¿œã˜ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã™ã€‚

+
$ cd ./cif2x
+$ python3 -m pip install .
+
+
+

実行プログラム cif2x ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¾ã™ã€‚

+
+

ディレクトリ構æˆ

+
+
.
+|-- LICENSE
+|-- README.md
+|-- pyproject.toml
+|-- docs/
+|   |-- ja/
+|   |-- tutorial/
+|-- src/
+|   |-- cif2x/
+|       |-- __init__.py
+|       |-- main.py
+|       |-- cif2struct.py
+|       |-- struct2qe.py
+|       |-- qe/
+|       |   |-- __init__.py
+|       |   |-- calc_mode.py
+|       |   |-- cards.py
+|       |   |-- content.py
+|       |   |-- qeutils.py
+|       |   |-- tools.py
+|       |-- struct2vasp.py
+|       |-- struct2openmx.py
+|       |-- openmx/
+|       |   |-- __init__.py
+|       |   |-- vps_table.py
+|       |-- utils.py
+|-- sample/
+
+
+
+

基本的ãªä½¿ç”¨æ–¹æ³•

+
+

cif2xã¯ç¬¬ä¸€åŽŸç†è¨ˆç®—プログラムã®ãŸã‚ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹ãƒ„ールã§ã™ã€‚入力パラメータを雛形ã¨ã—ã¦ã€ç‰©è³ªã®ç¨®é¡žã‚„計算æ¡ä»¶ã«ã‚ˆã£ã¦å¤‰ã‚る箇所をçµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãªã©ã‹ã‚‰æ§‹æˆã—ã¾ã™ã€‚ç¾åœ¨ã¯ Quantum ESPRESSO, VASP, ãŠã‚ˆã³ OpenMX ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«å½¢å¼ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚

+
    +
  1. 入力パラメータファイルã®ä½œæˆ

    +
    +

    cif2xを使用ã™ã‚‹ã«ã¯ã€ã¾ãšã€ç”Ÿæˆã™ã‚‹å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容を記述ã—ãŸãƒ‘ラメータファイルをYAMLå½¢å¼ã§ä½œæˆã—ã¾ã™ã€‚詳細ã«ã¤ã„ã¦ã¯ãƒ•ã‚¡ã‚¤ãƒ«ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã®ç« ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

    +
    +
  2. +
  3. çµæ™¶æ§‹é€ ãƒ•ã‚¡ã‚¤ãƒ«ã¨æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®é…ç½®

    +
    +

    対象ã¨ãªã‚‹ç‰©è³ªã®çµæ™¶æ§‹é€ ã‚’記述ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’用æ„ã—ã¾ã™ã€‚ファイル形å¼ã¯ CIF ã¾ãŸã¯ pymatgen ãŒæ‰±ãˆã‚‹ POSCAR ã‚„ xfs å½¢å¼ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚

    +

    Quantum ESPRESSO ã®å ´åˆã€åˆ©ç”¨ã™ã‚‹æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã¨ã€CSVå½¢å¼ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é…ç½®ã—ã¾ã™ã€‚擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®é…置先ãªã©ã¯å…¥åŠ›ãƒ‘ラメータファイル内ã«æŒ‡å®šã—ã¾ã™ã€‚

    +

    VASP ã®å ´åˆã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®æ ¼ç´å ´æ‰€ã‚’ ~/.config/.pmgrc.yaml ファイルã«è¨˜è¿°ã™ã‚‹ã‹ç’°å¢ƒå¤‰æ•°ã«ã‚»ãƒƒãƒˆã—ã¾ã™ã€‚入力パラメータファイル内ã§æŒ‡å®šã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚

    +
    +
  4. +
  5. コマンドã®å®Ÿè¡Œ

    +
    +

    作æˆã—ãŸå…¥åŠ›ãƒ‘ラメータファイルãŠã‚ˆã³çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã‚’入力ã¨ã—ã¦cif2xプログラムを実行ã—ã¾ã™ã€‚Quantum ESPRESSO用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹å ´åˆã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚ªãƒ—ション㫠-t QE を指定ã—ã¾ã™ã€‚VASPã®å ´åˆã¯ -t VASP, OpenMX ã®å ´åˆã¯ -t OpenMX を指定ã—ã¾ã™ã€‚

    +
    $ cif2x -t QE input.yaml material.cif
    +
    +
    +
    +
  6. +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/cif2x/command/index.html b/manual/v1.0-alpha/ja/html/cif2x/command/index.html new file mode 100644 index 0000000..a49e32b --- /dev/null +++ b/manual/v1.0-alpha/ja/html/cif2x/command/index.html @@ -0,0 +1,165 @@ + + + + + + + + 4. コマンドリファレンス — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

4. コマンドリファレンス¶

+
+

4.1. cif2x¶

+
+

第一原ç†è¨ˆç®—ã®ãŸã‚ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã™ã‚‹

+
+

書å¼:

+
+
cif2x [-v][-q] -t target input_yaml material.cif
+cif2x -h
+cif2x --version
+
+
+
+

説明:

+
+

input_yaml ã«æŒ‡å®šã—ãŸå…¥åŠ›ãƒ‘ラメータファイル㨠material.cif ã«æŒ‡å®šã—ãŸçµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‚’読ã¿è¾¼ã¿ã€ç¬¬ä¸€åŽŸç†è¨ˆç®—プログラム用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚ç¾åœ¨ã¯ Quantum ESPRESSO, VASP, OpenMX ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚ +以下ã®ã‚ªãƒ—ションをå—ã‘付ã‘ã¾ã™ã€‚

+
    +
  • -v

    +

    実行時ã«è¡¨ç¤ºã•ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’冗長ã«ã—ã¾ã™ã€‚複数回指定ã™ã‚‹ã¨å†—長度ãŒä¸ŠãŒã‚Šã¾ã™ã€‚

    +
  • +
  • -q

    +

    実行時ã«è¡¨ç¤ºã•ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å†—長度を下ã’ã¾ã™ã€‚ -v ã®åŠ¹æžœã‚’打ã¡æ¶ˆã—ã¾ã™ã€‚複数回ã®æŒ‡å®šãŒå¯èƒ½ã§ã™ã€‚

    +
  • +
  • -t target

    +

    対象ã¨ãªã‚‹ç¬¬ä¸€åŽŸç†è¨ˆç®—プログラムを指定ã—ã¾ã™ã€‚ target ã¨ã—ã¦æŒ‡å®šå¯èƒ½ãªå€¤ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚大文字å°æ–‡å­—ã¯åŒºåˆ¥ã—ã¾ã›ã‚“。

    +
      +
    • QE, espresso, quantum_espresso: Quantum ESPRESSOå‘ã‘入力ファイルを生æˆã—ã¾ã™ã€‚

    • +
    • VASP: VASPå‘ã‘入力ファイルを生æˆã—ã¾ã™ã€‚

    • +
    • OpenMX: OpenMXå‘ã‘入力ファイルを生æˆã—ã¾ã™ã€‚

    • +
    +
  • +
  • input_yaml

    +

    入力パラメータファイルを指定ã—ã¾ã™ã€‚å½¢å¼ã¯ YAML format ã§ã™ã€‚

    +
  • +
  • material.cif

    +

    çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã—ã¾ã™ã€‚å½¢å¼ã¯ CIF ã®ä»–ã€pymatgen ã§æ‰±ãˆã‚‹å½¢å¼ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã§ãã¾ã™ã€‚

    +
  • +
  • -h

    +

    ヘルプを表示ã—ã¾ã™ã€‚

    +
  • +
  • --version

    +

    ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報を表示ã—ã¾ã™ã€‚

    +
  • +
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/cif2x/filespec/index.html b/manual/v1.0-alpha/ja/html/cif2x/filespec/index.html new file mode 100644 index 0000000..2cc7493 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/cif2x/filespec/index.html @@ -0,0 +1,366 @@ + + + + + + + + 5. ファイルフォーマット — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

5. ファイルフォーマット¶

+
+

5.1. 入力パラメータファイル¶

+

入力パラメータファイルã§ã¯ã€cif2x ã§ç¬¬ä¸€åŽŸç†è¨ˆç®—入力ファイルを生æˆã™ã‚‹ãŸã‚ã®è¨­å®šæƒ…報を YAMLå½¢å¼ã§è¨˜è¿°ã—ã¾ã™ã€‚本ファイルã¯ä»¥ä¸‹ã®éƒ¨åˆ†ã‹ã‚‰æ§‹æˆã•ã‚Œã¾ã™ã€‚

+
+
    +
  1. structureセクション: çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã®æ‰±ã„ã«ã¤ã„ã¦ã®ã‚ªãƒ—ションを記述ã—ã¾ã™ã€‚

  2. +
  3. optionalセクション: 擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®æŒ‡å®šã‚„ã€YAMLã®å‚照機能を利用ã™ã‚‹å ´åˆã®ã‚·ãƒ³ãƒœãƒ«å®šç¾©ã‚’è¡Œã„ã¾ã™ã€‚

  4. +
  5. tasksセクション: 入力ファイルã®å†…容を記述ã—ã¾ã™ã€‚

  6. +
+
+
+

structure¶

+
+

use_ibrav (デフォルト値: false)

+
+

çµæ™¶æ§‹é€ ã®å…¥åŠ›ã« Quantum ESPRESSO ã® ibrav パラメータを利用ã—ã¾ã™ã€‚ true ã®å ´åˆã€æ ¼å­ã®ã¨ã‚Šæ–¹ã‚’ Quantum ESPRESSO ã® convention ã«åˆã†ã‚ˆã†ã«å¤‰æ›ã—ã¾ã™ã€‚入力ファイルã«ã¯ã‚ã‚ã›ã¦æ ¼å­ã«é–¢ã™ã‚‹ãƒ‘ラメータ a, b, c, cosab, cosac, cosbc ãŒ(å¿…è¦ã«å¿œã˜ã¦)書ã出ã•ã‚Œã¾ã™ã€‚

+
+

tolerance (デフォルト値: 0.01)

+
+

use_ibrav = true ã®å ´åˆã«ã€å†æ§‹æˆã—㟠Structure データã¨å…ƒãƒ‡ãƒ¼ã‚¿ã¨ã®ä¸€è‡´ã‚’評価ã™ã‚‹éš›ã®è¨±å®¹åº¦ã‚’指定ã—ã¾ã™ã€‚

+
+

supercell (デフォルト値: ãªã—)

+
+

supercell を設定ã™ã‚‹å ´åˆã« supercell ã®ã‚µã‚¤ã‚ºã‚’ [\(n_x\), \(n_y\), \(n_z\)] ã§æŒ‡å®šã—ã¾ã™ã€‚

+
+
+
+
+

optional¶

+

第一原ç†è¨ˆç®—プログラムã”ã¨ã«å¿…è¦ãª global ãªè¨­å®šã‚’è¡Œã„ã¾ã™ã€‚記述ã™ã‚‹å†…容ã¯ä»¥ä¸‹ã®å„節ã«è¨˜è¿°ã—ã¾ã™ã€‚

+
+
+

tasks¶

+

入力ファイルã®å†…容を記述ã—ã¾ã™ã€‚複数ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã«å¯¾å¿œã™ã‚‹ãŸã‚〠tasks ã«ã¯å„入力ファイルã”ã¨ã®ãƒ–ロックã‹ã‚‰ãªã‚‹ãƒªã‚¹ãƒˆå½¢å¼ã‚’ã¨ã‚Šã¾ã™ã€‚å„ブロックã«è¨˜è¿°ã™ã‚‹é …ç›®ã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™ã€‚

+
+

mode (Quantum ESPRESSO)

+
+

入力ファイルã®è¨ˆç®—内容を指定ã—ã¾ã™ã€‚ +ç¾æ™‚点ã§ã¯ Quantum ESPRESSO ã® pw.x å‘ã‘ã« scf 㨠nscf ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚対応ã—ã¦ã„ãªã„ mode ã«ã¤ã„ã¦ã¯ã€ content ã®å†…容をãã®ã¾ã¾å‡ºåŠ›ã—ã¾ã™ã€‚

+
+

output_file (Quantum ESPRESSO)

+
+

出力ファイルåを指定ã—ã¾ã™ã€‚

+
+

output_dir

+
+

出力先ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåを指定ã—ã¾ã™ã€‚デフォルト値ã¯ã‚«ãƒ¬ãƒ³ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™ã€‚

+
+

content

+
+

出力内容を指定ã—ã¾ã™ã€‚Quantum ESPRESSO ã®å ´åˆã¯ namelist ブロック㫠namelist データ (&system ã‚„ &control ãªã©) を記述ã—〠K_POINTS 等㮠card データを個別ã®ãƒ–ロックã¨ã—ã¦è¨˜è¿°ã—ã¾ã™ã€‚card データã¯ãƒ‘ラメータをã¨ã‚‹ã‚‚ã®ãŒã‚ã‚Šã¾ã™ã€‚

+
+

template (Quantum ESPRESSO)

+

template_dir (VASP)

+
+

出力内容ã®ãƒ†ãƒ³ãƒ—レートファイルを指定ã—ã¾ã™ã€‚指定ãŒãªã„å ´åˆã¯ãƒ†ãƒ³ãƒ—レートを利用ã—ã¾ã›ã‚“。 +ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容を content ã«è¿½åŠ ã—ã¾ã™ã€‚åŒã˜ãƒ‡ãƒ¼ã‚¿ãŒã‚ã‚‹å ´åˆã¯å¾Œè€…を優先ã—ã¾ã™ã€‚

+
+
+
+
+

パラメータセット指定¶

+

入力パラメータã«ã¯å€¤ã®ãƒªã‚¹ãƒˆã‚„範囲を指定ã™ã‚‹ã“ã¨ãŒã§ãã€å€¤ã®çµ„ã¿åˆã‚ã›ã”ã¨ã«å€‹åˆ¥ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作æˆã—ã¦å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚パラメータセットã®æŒ‡å®šã«ã¯ç‰¹åˆ¥ãªæ§‹æ–‡ ${...} を用ã„ã¾ã™ã€‚ +指定方法ã¯æ¬¡ã®é€šã‚Šã§ã™:

+
    +
  • リスト ${[ A, B, ... ]}

    +

    パラメータセットを Python ã®ãƒªã‚¹ãƒˆã¨ã—ã¦åˆ—挙ã—ã¾ã™ã€‚å„é …ç›®ã¯ã‚¹ã‚«ãƒ©ãƒ¼å€¤ã‚„リストを指定ã§ãã¾ã™ã€‚

    +
  • +
  • 範囲指定 ${range(N)}, ${range(start, end, step)}

    +

    パラメータã®ç¯„囲を指定ã—ã¾ã™ã€‚ãã‚Œãžã‚Œ 0〜N-1, start〜end ã‚’ step 刻㿠(step ã‚’çœç•¥ã—ãŸå ´åˆã¯ 1) ã§ã™ã€‚ N, start, end, step 㯠int ã¾ãŸã¯ float ã§ã™ã€‚

    +
  • +
+
+
+
+

5.2. Quantum ESPRESSO å‘ã‘パラメータ¶

+

optional セクションãŠã‚ˆã³ tasks セクション㮠content ã«è¨˜è¼‰ã™ã‚‹å†…容ã«ã¤ã„ã¦ã€Quantum ESPRESSO 固有ã®å†…容を記述ã—ã¾ã™ã€‚ +ç¾æ™‚点ã§ã¯ pw.x ã® scf ãŠã‚ˆã³ nscf ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚

+
+

optionalセクション¶

+
+

pp_file

+
+

元素種ã¨æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã‚’対応付ã‘ã‚‹CSVå½¢å¼ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã—ã¾ã™ã€‚ +ファイルã®æ›¸å¼ã¯ã€å…ƒç´ ç¨®ã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚¿ã‚¤ãƒ—ã€nexcludeã€orbitals ã§ã™ã€‚例:

+
Fe,pbe-spn-rrkjus_psl.0.2.1,4,spd
+
+
+

擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«å㯠Fe.pbe-spn-rrkjus_psl.0.2.1.UPF ã«å¯¾å¿œã—ã¾ã™ã€‚

+
+

cutoff_file

+
+

擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã¨ã‚«ãƒƒãƒˆã‚ªãƒ•ã‚’対応付ã‘ã‚‹CSVå½¢å¼ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’指定ã—ã¾ã™ã€‚ +ファイルã®æ›¸å¼ã¯ã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã€ecutwfcã®å€¤ã€ecutrhoã®å€¤ ã§ã™ã€‚

+
+

pseudo_dir

+
+

擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ ¼ç´ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªåを指定ã—ã¾ã™ã€‚カットオフã®å€¤ã‚’擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰å–å¾—ã™ã‚‹å ´åˆã«ä½¿ç”¨ã—ã¾ã™ã€‚Quantum ESPRESSO ã® pseudo_dir パラメータã¨ã¯ç‹¬ç«‹ã«æŒ‡å®šã—ã¾ã™ã€‚

+
+
+
+
+

content¶

+
+

namelist

+
    +
  • structure セクション㮠use_ibrav パラメータã«å¿œã˜ã¦ã€ &system ã®æ ¼å­æƒ…å ±ã®æŒ‡å®šãŒä¸Šæ›¸ãã•ã‚Œã¾ã™ã€‚

    +
      +
    • use_ibrav = false: +ibrav 㯠0 ã«ã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ã€‚ã¾ãŸã€æ ¼å­ãƒ‘ラメータã«é–¢ã™ã‚‹ a, b, c, cosab, cosac, cosbc, celldm ã¯å‰Šé™¤ã•ã‚Œã¾ã™ã€‚

    • +
    • use_ibrav = true: +ibrav ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰å–å¾—ã•ã‚ŒãŸ Bravais æ ¼å­ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãŒã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ã€‚ã¾ãŸã€Structure データã¯åŸºæœ¬æ ¼å­ã®ã¨ã‚Šæ–¹ãªã© Quantum ESPRESSO ã® convention ã«åˆã‚ã›ã¦å†æ§‹æˆã•ã‚Œã¾ã™ã€‚

    • +
    +
  • +
  • nat (原å­æ•°) ãŠã‚ˆã³ ntyp (元素種ã®æ•°)ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰å–å¾—ã•ã‚Œã‚‹å€¤ã§ä¸Šæ›¸ãã•ã‚Œã¾ã™ã€‚

  • +
  • カットオフ ecutwfc ãŠã‚ˆã³ ecutrho ã®æƒ…å ±ã¯ã€ãƒ‘ラメータã®å€¤ãŒç©ºæ¬„ã®å ´åˆã¯æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‹ã‚‰å–å¾—ã—ã¾ã™ã€‚

  • +
+

CELL_PARAMETERS

+
    +
  • structure セクション㮠use_ibrav パラメータ㌠true ã®å ´åˆã¯å‡ºåŠ›ã•ã‚Œã¾ã›ã‚“。false ã®å ´åˆã¯æ ¼å­ãƒ™ã‚¯ãƒˆãƒ«ãŒå‡ºåŠ›ã•ã‚Œã¾ã™ã€‚å˜ä½ã¯ angstrom ã§ã™ã€‚

  • +
  • æ ¼å­ãƒ™ã‚¯ãƒˆãƒ«ã®æƒ…å ±ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰å–å¾—ã•ã‚Œã¾ã™ã€‚ data フィールド㫠3x3 ã®è¡Œåˆ—を直接指定ã—ãŸå ´åˆã¯ãã®å€¤ãŒç”¨ã„られã¾ã™ã€‚

  • +
+

ATOMIC_SPECIES

+
    +
  • 原å­ç¨®ãƒ»åŽŸå­é‡ãƒ»æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«åã®ãƒªã‚¹ãƒˆã‚’出力ã—ã¾ã™ã€‚

  • +
  • 原å­ç¨®ã®æƒ…å ±ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã‹ã‚‰å–å¾—ã•ã‚Œã¾ã™ã€‚擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«å㯠pp_list ã§æŒ‡å®šã™ã‚‹CSVå½¢å¼ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å‚ç…§ã—ã¾ã™ã€‚

  • +
  • data フィールドã«å¿…è¦ãªãƒ‡ãƒ¼ã‚¿ã‚’指定ã—ãŸå ´åˆã¯ãã®å€¤ãŒç”¨ã„られã¾ã™ã€‚

  • +
+

ATOMIC_POSITIONS

+
    +
  • 原å­ç¨®ã¨åŽŸå­åº§æ¨™(fractional coordinate)ã®ãƒªã‚¹ãƒˆã‚’出力ã—ã¾ã™ã€‚

  • +
  • ignore_species ã«åŽŸå­ç¨®ã¾ãŸã¯åŽŸå­ç¨®ã®ãƒªã‚¹ãƒˆã‚’指定ã—ãŸå ´åˆã€ãã®åŽŸå­ç¨®ã«ã¤ã„ã¦ã¯ if_pos ã®å€¤ãŒ 0 ã«ã‚»ãƒƒãƒˆã•ã‚Œã¾ã™ã€‚MDや構造最é©åŒ–ã®éš›ã«ä½¿ã‚ã‚Œã¾ã™ã€‚

  • +
  • data フィールドã«å¿…è¦ãªãƒ‡ãƒ¼ã‚¿ã‚’指定ã—ãŸå ´åˆã¯ãã®å€¤ãŒç”¨ã„られã¾ã™ã€‚

  • +
+

K_POINTS

+
    +
  • k点ã®æƒ…報を出力ã—ã¾ã™ã€‚ option ã«å‡ºåŠ›ã‚¿ã‚¤ãƒ—を指定ã—ã¾ã™ã€‚

    +
      +
    • gamma: \(\Gamma\) 点を用ã„ã¾ã™ã€‚

    • +
    • crystal: メッシュ状㮠k点ã®ãƒªã‚¹ãƒˆã‚’出力ã—ã¾ã™ã€‚メッシュã®æŒ‡å®šã¯ grid パラメータã¾ãŸã¯ vol_density ã‚„ k_resolution ã‹ã‚‰å°Žå‡ºã•ã‚Œã‚‹å€¤ãŒç”¨ã„られã¾ã™ã€‚

    • +
    • automatic: k点ã®ãƒ¡ãƒƒã‚·ãƒ¥ã‚’指定ã—ã¾ã™ã€‚メッシュã®æŒ‡å®šã¯ grid パラメータã¾ãŸã¯ vol_density ã‚„ k_resolution ã‹ã‚‰å°Žå‡ºã•ã‚Œã‚‹å€¤ãŒç”¨ã„られã¾ã™ã€‚ シフトã®æŒ‡å®šã¯ kshifts パラメータをå‚ç…§ã—ã¾ã™ã€‚

    • +
    +
  • +
  • メッシュã®æŒ‡å®šã¯ä»¥ä¸‹ã®é †åºã§æ±ºå®šã•ã‚Œã¾ã™ã€‚

    +
      +
    • grid パラメータã®æŒ‡å®šã€‚grid ã®å€¤ã¯ \(n_x, n_y, n_z\) ã®é…列ã¾ãŸã¯ã‚¹ã‚«ãƒ©ãƒ¼å€¤ \(n\) ã§ã™ã€‚後者ã®å ´åˆã¯ \(n_x = n_y = n_z = n\) ã¨ä»®å®šã—ã¾ã™ã€‚

    • +
    • vol_density パラメータã‹ã‚‰è‡ªå‹•å°Žå‡ºã€‚

    • +
    • k_resolution パラメータã‹ã‚‰è‡ªå‹•å°Žå‡ºã€‚k_resolution ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯ 0.15 ã§ã™ã€‚

    • +
    +
  • +
  • data フィールドã«å¿…è¦ãªãƒ‡ãƒ¼ã‚¿ã‚’指定ã—ãŸå ´åˆã¯ãã®å€¤ãŒç”¨ã„られã¾ã™ã€‚

  • +
+
+
+
+
+

5.3. VASP å‘ã‘パラメータ¶

+

optional セクションãŠã‚ˆã³ tasks セクション㮠content ã«è¨˜è¼‰ã™ã‚‹å†…容ã«ã¤ã„ã¦ã€VASP 固有ã®å†…容を記述ã—ã¾ã™ã€‚

+
+

optional¶

+

擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ã‚¿ã‚¤ãƒ—ã‚„æ ¼ç´å ´æ‰€ã‚’指定ã—ã¾ã™ã€‚

+

pymatgen ã§ã¯ã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ +PMG_VASP_PSP_DIR/functional/POTCAR. element (.gz) ã¾ãŸã¯ +PMG_VASP_PSP_DIR/functional/ element /POTCAR ã‹ã‚‰å–å¾—ã—ã¾ã™ã€‚ +PMG_VASP_PSP_DIR ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®æŒ‡å®šã§ã€è¨­å®šãƒ•ã‚¡ã‚¤ãƒ« ~/.config/.pmgrc.yaml ã«è¨˜è¼‰ã™ã‚‹ã‹ã€åŒåã®ç’°å¢ƒå¤‰æ•°ã«æŒ‡å®šã—ã¾ã™ã€‚ã¾ãŸã€ functional ã¯æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ã‚¿ã‚¤ãƒ—ã§ã€ POT_GGA_PAW_PBE ã‚„ POT_LDA_PAW ãªã©ãŒæ±ºã‚られã¦ã„ã¾ã™ã€‚

+
+

pseudo_functional

+
+

擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ã‚¿ã‚¤ãƒ—を指定ã—ã¾ã™ã€‚タイプã®æŒ‡å®šã¨ä¸Šè¨˜ã® functional ã®å¯¾å¿œã¯ pymatgen 内ã®ãƒ†ãƒ¼ãƒ–ルã«å®šç¾©ã•ã‚Œã€ PBE → POT_GGA_PAW_PBE,  LDA → POT_LDA_PAW ãªã©ã®ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚

+
+
+

以下㮠pseudo_dir を指定ã—ãŸå ´åˆã¯ pymatgen ã®æµå„€ã‚’無視ã—ã¦æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®æ ¼ç´ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’探ã—ã¾ã™ã€‚

+
+

psuedo_dir

+
+

擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®æ ¼ç´ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’指定ã—ã¾ã™ã€‚擬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«å㯠pseudo_dir/POTCAR. element (.gz) ã¾ãŸã¯ pseudo_dir/element/POTCAR ã§ã™ã€‚

+
+
+
+
+

tasks¶

+

テンプレートファイルã¯ã€ template_dir ã§æŒ‡å®šã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªå†…ã« INCAR, KPOINTS, POSCAR, POTCAR ファイルをé…ç½®ã—ã¾ã™ã€‚ファイルãŒãªã„é …ç›®ã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚

+
+
+

content¶

+
+

incar

+
    +
  • INCAR ファイルã«è¨˜è¿°ã™ã‚‹ãƒ‘ラメータを列挙ã—ã¾ã™ã€‚

  • +
+

kpoints

+
    +
  • type

    +

    KPOINTS ã®æŒ‡å®šæ–¹æ³•ã‚’記述ã—ã¾ã™ã€‚以下ã®å€¤ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚タイプã«ã‚ˆã‚Šãƒ‘ラメータãŒæŒ‡å®šå¯èƒ½ãªã‚‚ã®ãŒã‚ã‚Šã¾ã™ã€‚詳細㯠pymatgen.io.vasp ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

    +
      +
    • automatic

      +

      parameter: grid

      +
    • +
    • gamma_automatic

      +

      parameter: grid, shift

      +
    • +
    • monkhorst_automatic

      +

      parameter: grid, shift

      +
    • +
    • automatic_density

      +

      parameter: kppa, force_gamma

      +
    • +
    • automatic_gamma_density

      +

      parameter: grid_density

      +
    • +
    • automatic_density_by_vol

      +

      parameter: grid_density, force_gamma

      +
    • +
    • automatic_density_by_lengths

      +

      parameter: length_density, force_gamma

      +
    • +
    • automatic_linemode

      +

      parameter: division, path_type (HighSymmKpath ã® path_type ã«å¯¾å¿œ)

      +
    • +
    +
  • +
+
+
+
+
+

5.4. OpenMX å‘ã‘パラメータ¶

+

optional セクションãŠã‚ˆã³ tasks セクション㮠content ã«è¨˜è¼‰ã™ã‚‹å†…容ã«ã¤ã„ã¦ã€OpenMX 固有ã®å†…容を記述ã—ã¾ã™ã€‚

+
+

optional¶

+
+

data_path

+
+

擬原å­è»Œé“ãŠã‚ˆã³æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’æ ¼ç´ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’指定ã—ã¾ã™ã€‚入力ファイル㮠DATA.PATH パラメータã«å¯¾å¿œã—ã¾ã™ã€‚

+
+
+
+
+

content¶

+
+

precision

+
+

擬原å­è»Œé“ã‚’ OpenMXマニュアル 10.6 ç« ã® Table 1, 2 ã«ã—ãŸãŒã£ã¦é¸æŠžã—ã¾ã™ã€‚ quick, standard, precise ã®ã„ãšã‚Œã‹ã®å€¤ã‚’å–ã‚Šã¾ã™ã€‚デフォルト値㯠quick ã§ã™ã€‚

+
+
+
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/cif2x/index.html b/manual/v1.0-alpha/ja/html/cif2x/index.html new file mode 100644 index 0000000..6ef0e60 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/cif2x/index.html @@ -0,0 +1,150 @@ + + + + + + + + 第一原ç†è¨ˆç®—入力ファイル生æˆãƒ„ール (cif2x) — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/cif2x/tutorial/index.html b/manual/v1.0-alpha/ja/html/cif2x/tutorial/index.html new file mode 100644 index 0000000..a318cd3 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/cif2x/tutorial/index.html @@ -0,0 +1,215 @@ + + + + + + + + 3. ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ« — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

3. ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«Â¶

+

第一原ç†è¨ˆç®—入力ファイル生æˆãƒ„ール cif2x を使ã†ã«ã¯ã€å…¥åŠ›ãƒ‘ラメータファイルã¨çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãŠã‚ˆã³æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’用æ„ã—ãŸå¾Œã€ãƒ—ログラム cif2x を実行ã—ã¾ã™ã€‚ç¾åœ¨ã¯ Quantum ESPRESSO, VASP, OpenMX ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ç”Ÿæˆã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚以下ã§ã¯ã€ docs/tutorial/cif2x ディレクトリã«ã‚ã‚‹ Quantum ESPRESSO å‘ã‘サンプルを例ã«ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’実施ã—ã¾ã™ã€‚

+
+

3.1. 入力パラメータファイルを作æˆã™ã‚‹Â¶

+

入力パラメータファイルã«ã¯ã€ç¬¬ä¸€åŽŸç†è¨ˆç®—プログラムã«ä¸Žãˆã‚‹å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容を記述ã—ã¾ã™ã€‚

+

以下ã«å…¥åŠ›ãƒ‘ラメータファイルã®ã‚µãƒ³ãƒ—ルを記載ã—ã¾ã™ã€‚ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ YAMLå½¢å¼ã®ãƒ†ã‚­ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã§ã€çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã«å¯¾ã™ã‚‹ã‚ªãƒ—ションã®æŒ‡å®šã‚„ã€å‡ºåŠ›ã™ã‚‹ç¬¬ä¸€åŽŸç†è¨ˆç®—入力ファイルã®å†…容を記述ã—ã¾ã™ã€‚仕様ã®è©³ç´°ã«ã¤ã„ã¦ã¯ ファイルフォーマット ã®ç« ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

+

YAMLフォーマットã§ã¯ã€ keyword: value ã®è¾žæ›¸å½¢å¼ã§ãƒ‘ラメータを記述ã—ã¾ã™ã€‚ value ã«ã¯æ•°å€¤ã‚„文字列ãªã©ã®ã‚¹ã‚«ãƒ©ãƒ¼å€¤ã‚„ã€è¤‡æ•°ã®å€¤ã‚’ [ ] ã¾ãŸã¯ç®‡æ¡æ›¸ãã®å½¢å¼ã§åˆ—挙ã™ã‚‹ãƒªã‚¹ãƒˆåž‹ã€ã¾ãŸã¯è¾žæ›¸åž‹ã‚’入れå­ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

+
structure:
+  use_ibrav: false
+  tolerance: 0.05
+
+optional:
+  pseudo_dir: ./pseudo
+  pp_file: ./pseudo/pp_psl_pbe_rrkjus.csv
+
+tasks:
+  - mode: scf
+    output_file: scf.in
+    output_dir: scf
+    template: scf.in_tmpl
+    content:
+      namelist:
+        control:
+          prefix: pwscf
+          pseudo_dir:
+          outdir: ./work
+        system:
+          ecutwfc:
+          ecutrho:
+      CELL_PARAMETERS:
+      ATOMIC_SPECIES:
+      ATOMIC_POSITIONS:
+        option: crystal
+      K_POINTS:
+        option: automatic
+        grid: [8,8,8]
+
+
+

入力パラメータファイル㯠structure, optional, tasks ã®ãƒ–ロックã‹ã‚‰æ§‹æˆã•ã‚Œã¾ã™ã€‚ +structure ã¯çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ã«é–¢ã™ã‚‹ã‚ªãƒ—ションを指定ã—ã¾ã™ã€‚ +optional ã¯æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã«é–¢ã™ã‚‹ global ãªè¨­å®šãªã©ã‚’è¡Œã„ã¾ã™ã€‚

+

tasks ã¯å‡ºåŠ›ã™ã‚‹ç¬¬ä¸€åŽŸç†è¨ˆç®—入力ファイルã®å†…容を指定ã—ã¾ã™ã€‚一連ã®è¨ˆç®—ã«å¯¾å¿œã—ã¦è¤‡æ•°ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã§ãるよã†ã€tasks ã¯é…列ã®å€¤ã‚’å–ã‚Šã¾ã™ã€‚ +å„出力ã«ã¤ã„ã¦ã€è¨ˆç®—内容㯠mode パラメータã§æŒ‡å®šã—ã¾ã™ã€‚SCF計算㮠scf ã‚„ NSCF計算㮠nscf ã«å¯¾å¿œã™ã‚‹ã»ã‹ã€ä¸€èˆ¬çš„ãªå‡ºåŠ›ã‚’è¡Œã†ä»»æ„ã®å‡ºåŠ›ãƒ¢ãƒ¼ãƒ‰ã‚’指定ã§ãã¾ã™ã€‚ +ファイル㯠output_dir ãŠã‚ˆã³ output_file ã§æŒ‡å®šã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã出ã•ã‚Œã¾ã™ã€‚

+

出力内容㯠content ã«è¨˜è¼‰ã—ã¾ã™ã€‚ +Quantum ESPRESSO ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ &keyword ã§å§‹ã¾ã‚‹ Fortran90 ã® namelist å½¢å¼ã¨ã€ K_POINTS ãªã©ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã§å§‹ã¾ã‚Šç©ºè¡Œã§åˆ†å‰²ã•ã‚Œã‚‹ cards ã¨å‘¼ã°ã‚Œã‚‹ãƒ–ロックã‹ã‚‰ãªã‚Šã¾ã™ã€‚ content ã«ã¯ namelist 㨠cards を入れå­ã®è¾žæ›¸å½¢å¼ã§æŒ‡å®šã—ã¾ã™ã€‚ +ã„ãã¤ã‹ã®ä¾‹å¤–を除ã„ã¦ã€æŒ‡å®šã•ã‚ŒãŸå†…容ãŒåŸºæœ¬çš„ã«ã¯ãã®ã¾ã¾å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã出ã•ã‚Œã¾ã™ã€‚値ãŒç©ºæ¬„ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã¯ã€çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿ãªã©ã‹ã‚‰æ±‚ã‚ãŸå€¤ãŒä»£å…¥ã•ã‚Œã¾ã™ã€‚

+

ã¾ãŸã€template ã¨ã—ã¦å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã®é››å½¢ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ template ã«æŒ‡å®šã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容㨠content ã®ãƒ‡ãƒ¼ã‚¿ã‚’åˆã‚ã›ãŸã‚‚ã®ã‚’入力データã¨ã—ã¦æ‰±ã„ã¾ã™ã€‚åŒã˜ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã®ãƒ‡ãƒ¼ã‚¿ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ content ã®æŒ‡å®šãŒå„ªå…ˆã•ã‚Œã¾ã™ã€‚従ã£ã¦ã€æ—¢å­˜ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å…ƒã«å¿…è¦ãªç®‡æ‰€ã‚’入力パラメータファイルã§ä¸Šæ›¸ãã™ã‚‹ä½¿ã„æ–¹ãŒå¯èƒ½ã§ã™ã€‚上記ã®ä¾‹ã§ã¯æ¬¡ã®ãƒ•ã‚¡ã‚¤ãƒ«(scf.in_tmpl)ã‚’ template ã¨ã—ã¦å–ã‚Šè¾¼ã¿ã€ã‚«ãƒƒãƒˆã‚ªãƒ•ã¨ CELL_PARAMETER, ATOMIC_SPECIES, ATOMIC_POSITIONS, K_POINT ã®ç®‡æ‰€ã‚’çµæ™¶æ§‹é€ ç­‰ã‹ã‚‰æ±ºã‚ã¾ã™ã€‚ ecutwfc 㨠ecutrho ãŒç©ºæ¬„ã§ä¸Šæ›¸ãã•ã‚Œã¦ã„ã‚‹ã“ã¨ã«ç•™æ„ã—ã¦ãã ã•ã„。

+
&control
+    calculation = 'scf'
+    prefix = 'pwscf'
+    pseudo_dir = './pseudo'
+    outdir = './work'
+    tstress = .true.
+    tprnfor = .true.
+/
+
+&system
+    ibrav = 0
+    nat = 7
+    ntyp = 3
+    ecutwfc = 36.0
+    ecutrho = 180.0
+    occupations = 'smearing'
+    smearing = 'm-p'
+    degauss = 0.01
+    noncolin = .true.
+    nspin = 2
+/
+
+&electrons
+    missing_beta = 0.1
+    conv_thr = 1e-08
+/
+
+
+
+
+

3.2. 第一原ç†è¨ˆç®—入力ファイルを生æˆã™ã‚‹Â¶

+

入力パラメータファイル(input.yaml)ã¨çµæ™¶æ§‹é€ ãƒ‡ãƒ¼ã‚¿(Co3SnS2_nosym.cif)を入力ã¨ã—㦠cif2x を実行ã—ã¾ã™ã€‚

+
$ cif2x -t QE input.yaml Co3SnS2_nosym.cif
+
+
+

予ã‚å¿…è¦ãªæ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ ./pseudo ディレクトリã«é…ç½®ã—ã€æ“¬ãƒãƒ†ãƒ³ã‚·ãƒ£ãƒ«ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ ./pseudo/pp_psl_pbe_rrkjus.csv ã«ä½œæˆã—ã¦ãŠãã¾ã™ã€‚

+

cif2x を実行ã™ã‚‹ã¨ Quantum ESPRESSO用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãŒç”Ÿæˆã•ã‚Œå‡ºåŠ›ã•ã‚Œã¾ã™ã€‚出力先ã¯å…¥åŠ›ãƒ‘ラメータファイル内ã®ãƒ‘ラメータã§æŒ‡å®šã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª(output_dir)ãŠã‚ˆã³ãƒ•ã‚¡ã‚¤ãƒ«(output_file)ã§ã™ã€‚ã“ã®ä¾‹ã§ã¯ ./scf/scf.in ã« SCF計算用ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ›¸ã出ã•ã‚Œã¾ã™ã€‚

+
+
+

3.3. パラメータセットを指定ã™ã‚‹Â¶

+

入力パラメータ内ã®å€¤ã‚’ã„ãã¤ã‹å¤‰ãˆãªãŒã‚‰ä¸€é€£ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ãŸã„ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚例ãˆã°ã‚«ãƒƒãƒˆã‚ªãƒ•ã®å€¤ã‚„k点ã®æ•°ã‚’変ãˆã¦åŽæŸæ€§ã‚’評価ã™ã‚‹ãªã©ã®å ´åˆã§ã™ã€‚入力パラメータã«ã¯å€¤ã®ãƒªã‚¹ãƒˆã‚„範囲を指定ã™ã‚‹ã“ã¨ãŒã§ãã€å€¤ã®çµ„ã¿åˆã‚ã›ã”ã¨ã«å€‹åˆ¥ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作æˆã—ã¦å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’生æˆã—ã¾ã™ã€‚ +パラメータセットã®æŒ‡å®šã¯ç‰¹åˆ¥ãªæ§‹æ–‡ ${...} を用ã„ã¾ã™ã€‚

+
content:
+  K_POINTS:
+    option: automatic
+    grid:   ${ [ [4,4,4], [8,8,8], [12,12,12] ] }
+
+
+

例ãˆã°ä¸Šè¨˜ã®ã‚ˆã†ã« K_POINTS を指定ã™ã‚‹ã¨ã€ grid ã®å€¤ãŒ [4,4,4], [8,8,8], [12,12,12] ã®å…¥åŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãŒãã‚Œãžã‚Œ 4x4x4/, 8x8x8/, 12x12x12/ サブディレクトリ内ã«ä½œæˆã•ã‚Œã¾ã™ã€‚

+
+
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/genindex.html b/manual/v1.0-alpha/ja/html/genindex.html new file mode 100644 index 0000000..37f1c93 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/genindex.html @@ -0,0 +1,103 @@ + + + + + + + 索引 — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

索引

+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/index.html b/manual/v1.0-alpha/ja/html/index.html new file mode 100644 index 0000000..5a85223 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/index.html @@ -0,0 +1,120 @@ + + + + + + + + Cif2x Users Guide — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/objects.inv b/manual/v1.0-alpha/ja/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..72cddaafa931a35891cb6536c0398c275d8cae3a GIT binary patch literal 567 zcmV-70?7R%AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkoX=XBb zAXRf^a&sU@b!lW}3L_v^WpZMd?av*PJ zAarPHb0B7EY-J#6b0A}HZE$jBb8}^6Aa!$TZf78RY-wUH3V7Oulg&=TKoo`deTpW! z&_yM>bnC*c8y}#w12pLmp=|;?+d)$_F)TzABoYV^gvJe;fWi1Mmr@?X{!BwFZP+z) z?)}ca(=(hdS2&tErMds&NlBALdOb2XBZDGpxr}69sAhI2 zbOLzjIm<6FZ7>Ib8-$c+Re@u4l`W!OOiT=?cRugbNyd(N3pd1qq zP1lr)z=~OBNj)0g06YwEmVYZ|-{Vq6BySlan@6HgiB8G9pM7W9qISGuB^SOeeXXL3 zN?+;%k0?puQ^4gK6A95&eK6 + + + + + + 検索 — cif2x Users Guide 1.0-alpha ドキュメント + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

検索

+ + + + +

+ 複数ã®å˜èªžã‚’検索ã™ã‚‹ã¨ã€æ¬¡ã‚’å«ã‚€ä¸€è‡´ã®ã¿ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ +     ã™ã¹ã¦ã®ç”¨èªžã€‚ +

+ + +
+ + + +
+ + + +
+ +
+ + +
+ +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/manual/v1.0-alpha/ja/html/searchindex.js b/manual/v1.0-alpha/ja/html/searchindex.js new file mode 100644 index 0000000..7563781 --- /dev/null +++ b/manual/v1.0-alpha/ja/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["cif2x/about/index", "cif2x/appendix/index", "cif2x/basic-usage", "cif2x/command/index", "cif2x/filespec/index", "cif2x/index", "cif2x/tutorial/index", "index"], "filenames": ["cif2x/about/index.rst", "cif2x/appendix/index.rst", "cif2x/basic-usage.rst", "cif2x/command/index.rst", "cif2x/filespec/index.rst", "cif2x/index.rst", "cif2x/tutorial/index.rst", "index.rst"], "titles": ["1. \u6982\u8981", "6. \u62e1\u5f35\u30ac\u30a4\u30c9", "2. \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9", "4. \u30b3\u30de\u30f3\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9", "5. \u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8", "\u7b2c\u4e00\u539f\u7406\u8a08\u7b97\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u751f\u6210\u30c4\u30fc\u30eb (cif2x)", "3. \u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb", "Cif2x Users Guide"], "terms": {"\u8fd1\u5e74": 0, "\u6a5f\u68b0": 0, "\u5b66\u7fd2": 0, "\u6d3b\u7528": 0, "\u7269\u6027": 0, "\u4e88\u6e2c": 0, "\u7269\u8cea": [0, 2], "\u8a2d\u8a08": 0, "\u30de\u30c6\u30ea\u30a2\u30eb\u30ba\u30a4\u30f3\u30d5\u30a9\u30de\u30c6\u30a3\u30af\u30b9": 0, "\u6ce8\u76ee": 0, "\u307e\u3059": [0, 1, 2, 3, 4, 6], "\u7cbe\u5ea6": 0, "\u9069\u5207": 0, "\u6559\u5e2b": 0, "\u30c7\u30fc\u30bf": [0, 1, 2, 3, 4, 6], "\u6e96\u5099": 0, "\u5927\u304d\u304f": 0, "\u4f9d\u5b58": 0, "\u305d\u306e": [0, 4, 6], "\u305f\u3081": [0, 2, 3, 4], "\u8fc5\u901f": 0, "\u751f\u6210": [0, 1, 2, 3, 4, 7], "\u3059\u308b": [0, 2, 3, 4, 5], "\u30c4\u30fc\u30eb": [0, 2, 6, 7], "\u6574\u5099": 0, "\u7814\u7a76": 0, "\u9032\u5c55": 0, "\u671f\u5f85": 0, "\u30d5\u30a1\u30a4\u30eb": [0, 2, 3, 4, 7], "\u304b\u3089": [0, 1, 2, 4, 6], "\u4e00\u539f": [0, 2, 3, 4, 6], "\u7406\u8a08": [0, 2, 3, 4, 6], "\u7b97\u7528": 0, "\u5165\u529b": [0, 2, 3, 5], "\u3067\u3059": [0, 2, 3, 4, 6], "\u30d1\u30e9\u30e1\u30fc\u30bf": [0, 1, 2, 5, 6], "\u96db\u5f62": [0, 2, 6], "\u3068\u3057\u3066": [0, 1, 2, 3, 4, 6], "\u7a2e\u985e": [0, 1, 2], "\u8a08\u7b97": [0, 1, 2, 3, 4, 6], "\u6761\u4ef6": [0, 2], "\u306b\u3088\u3063\u3066": [0, 2], "\u5909\u308f\u308b": [0, 2], "\u7b87\u6240": [0, 2, 6], "\u7d50\u6676": [0, 1, 2, 3, 4, 6], "\u69cb\u9020": [0, 1, 2, 3, 4, 6], "\u306a\u3069": [0, 1, 2, 4, 6], "\u69cb\u6210": [0, 2, 4, 6], "\u7279\u5b9a": 0, "\u5fdc\u3058": [0, 2, 4], "\u8907\u6570": [0, 3, 4, 6], "\u3053\u3068": [0, 1, 2, 4, 6], "\u53ef\u80fd": [0, 3, 4, 6], "\u73fe\u5728": [0, 1, 2, 3, 6], "vasp": [0, 2, 3, 5, 6], "quantum": [0, 2, 3, 5, 6], "espresso": [0, 2, 3, 5, 6], "openmx": [0, 2, 3, 5, 6], "\u306b\u5bfe\u5fdc": [0, 1, 3, 4, 6], "\u5c06\u6765": 0, "akaikkr": 0, "\u306b\u3082": 0, "\u5bfe\u5fdc": [0, 1, 2, 4, 6], "\u4e88\u5b9a": 0, "\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2": 0, "\u30d7\u30ed\u30b0\u30e9\u30e0\u30d1\u30c3\u30b1\u30fc\u30b8": 0, "\u304a\u3088\u3073": [0, 1, 2, 4, 6], "\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9": [0, 2], "\u4e00\u5f0f": 0, "gnu": 0, "general": 0, "public": 0, "license": [0, 2], "version": [0, 3], "gpl": 0, "\u6e96\u3058": 0, "\u914d\u5e03": [0, 2], "\u4ee5\u4e0b": [0, 2, 3, 4, 6], "\u306b\u3088\u308a": [0, 4], "ver": 0, "alpha": 0, "\u30ea\u30ea\u30fc\u30b9": 0, "\u5409\u898b": 0, "\u4e00\u6176": 0, "\u6771\u4eac": 0, "\u5927\u5b66": 0, "\u7814\u7a76\u6240": 0, "\u9752\u5c71": 0, "\u9f8d\u7f8e": 0, "\u672c\u5c71": 0, "\u88d5\u4e00": 0, "\u798f\u7530": 0, "\u5c06\u5927": 0, "\u798f\u5cf6": 0, "\u9244\u4e5f": 0, "\u7523\u696d": 0, "\u6280\u8853": 0, "\u7dcf\u5408": 0, "\u4e95\u6238": 0, "\u5eb7\u592a": 0, "\u7b20\u677e": 0, "\u79c0\u8f14": 0, "\u5c71\u5f62": 0, "\u5b66\u8853": 0, "\u7814\u7a76\u9662": 0, "\u7406\u5b66": 0, "\u90e8\u4e3b": 0, "\u62c5\u5f53": 0, "))": 0, "\u662f\u5e38": 0, "\u6771\u5317": 0, "\u5927\u5b66\u9662": 0, "\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30b3\u30fc\u30c7\u30a3\u30cd\u30fc\u30bf\u30fc": 0, "\u5c3e\u5d0e": 0, "\u6cf0\u52a9": 0, "the": 0, "university": 0, "of": 0, "tokyo": 0, "all": 0, "rights": 0, "reserved": 0, "\u5e74\u5ea6": 0, "\u9ad8\u5ea6": 0, "\u30d7\u30ed\u30b8\u30a7\u30af\u30c8": 0, "\u652f\u63f4": 0, "\u53d7\u3051": [0, 3], "\u304a\u308a": [0, 1], "\u8457\u4f5c": 0, "\u6240\u6301": 0, "\u78ba\u8a8d": 0, "ubuntu": 0, "linux": 0, "python": [0, 2, 4], "\u30e2\u30fc\u30c9": [1, 6], "src": [1, 2], "/cif": [1, 2, 6], "2x": [1, 2, 4, 6], "/qe": 1, "/calc": 1, "_mode": [1, 2], ".py": [1, 2], "create": 1, "_modeproc": 1, "()": 1, "\u95a2\u6570": 1, "\u5909\u63db": [1, 4], "\u30af\u30e9\u30b9": 1, "\u4ed8\u3051": [1, 3], "\u8a18\u8ff0": [1, 2, 4, 6], "def": 1, "(mode": 1, "qe": [1, 2, 3, 6], "):": 1, "if": [1, 4], "in": 1, "scf": [1, 4, 6], "\",": 1, "nscf": [1, 4, 6], "\"]": 1, "modeproc": 1, "qemode": 1, "_pw": 1, "(qe": 1, "else": 1, "_generic": 1, "return": 1, "\u3054\u3068": [1, 4, 6], "\u6a5f\u80fd": [1, 4], "_base": 1, "\u6d3e\u751f": 1, "\u307e\u3068\u3081": 1, "\u3089\u308c": [1, 4], "\u3053\u306e": [1, 4, 6], "update": 1, "_namelist": 1, "namelist": [1, 4, 6], "\u30d6\u30ed\u30c3\u30af": [1, 4, 6], "\u66f4\u65b0": 1, "_cards": 1, "cards": [1, 2, 6], "\u884c\u3044": [1, 4, 6], "pw": [1, 4], ".x": [1, 4], "\u305a\u305d\u306e": 1, "\u307e\u307e": [1, 4, 6], "\u51fa\u529b": [1, 4, 6], "\u7528\u610f": [1, 2, 6], "class": 1, "init": [1, 2], "__": [1, 2], "self": 1, "(self": 1, "content": [1, 2, 6], "\u306b\u3064\u3044\u3066": [1, 2, 4, 6], "\u7a7a\u6b04": [1, 4, 6], "\u4ee3\u5165": [1, 6], "\u307b\u304b": [1, 6], "\u683c\u5b50": [1, 4], "structure": [1, 6], "\u6c7a\u307e\u308b": 1, "\u5024\u3084": [1, 6], "\u6574\u5408": 1, "\u3068\u308b": [1, 4], "\u5fc5\u8981": [1, 2, 4, 6], "\u3042\u308b": [1, 4, 6], "\u5f37\u5236": 1, "\u30bb\u30c3\u30c8": [1, 2, 4], "\u5834\u5408": [1, 2, 4, 6], "\u3042\u308a": [1, 4, 6], "\u51e6\u7406": 1, "\u5185\u5bb9": [1, 2, 4, 6], "\u500b\u5225": [1, 4, 6], "card": [1, 4], "_table": [1, 2], "\u5909\u6570": [1, 2, 4], "\u5217\u6319": [1, 4, 6], "\u57fa\u5e95": 1, "\u53d6\u5f97": [1, 4], "\u5b9f\u884c": [1, 2, 3, 6], "\u60c5\u5831": [1, 3, 4], "\u3082\u3061\u308d\u3093": 1, "\u5168\u304f": 1, "\u72ec\u81ea": 1, "\u4f5c\u6210": [1, 2, 4, 5], "\u3067\u304d": [1, 2, 3, 4, 6], ".card": 1, "cell": [1, 4, 6], "_parameters": [1, 4, 6], "':": 1, "generate": 1, "_cell": 1, "atomic": [1, 4, 6], "_species": [1, 4, 6], "_atomic": 1, "_positions": [1, 4, 6], "_points": [1, 4, 6], "_k": 1, "scr": 1, "/cards": 1, "\u306b\u307e\u3068\u3081": 1, "_{": 1, "\u3068\u3057": 1, "\u5f15\u6570": 1, "\u53d6\u308a": [1, 4, 6], "option": [1, 4, 6], "data": [1, 4], "\u30d5\u30a3\u30fc\u30eb\u30c9": [1, 4], "\u306a\u308b": [1, 2, 3, 4], "\u8f9e\u66f8": [1, 6], "\u8fd4\u3057": 1, "\u30e9\u30a4\u30d6\u30e9\u30ea": 2, "\u74b0\u5883": [2, 4, 5], "htp": 2, "-tools": 2, "\u542b\u307e\u308c\u308b": 2, "\u7b97\u5165": [2, 4, 7], "cif": [2, 4, 6], "\u5229\u7528": [2, 4], "\u30d7\u30ed\u30b0\u30e9\u30e0": [2, 3, 4, 6], "pymatgen": [2, 3, 4], "\u30e2\u30b8\u30e5\u30fc\u30eb": 2, "ruamel": 2, ".yaml": [2, 4, 6], "nml": 2, "numpy": 2, "pandas": 2, "monty": 2, "\u30b5\u30a4\u30c8": 2, "github": 2, "\u30ea\u30dd\u30b8\u30c8\u30ea": 2, "\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9": 2, "\u65b9\u6cd5": [2, 4], "git": 2, "\u3067\u304d\u308b": [2, 6], "\u30b3\u30de\u30f3\u30c9": 2, "clone": 2, "https": 2, ":/": 2, ".com": 2, "/issp": 2, "-center": 2, "-dev": 2, ".git": 2, "\u3002cif": 2, "cd": 2, "pip": 2, "install": 2, "\u30c7\u30a3\u30ec\u30af\u30c8\u30ea": [2, 4, 6], "--": 2, "readme": 2, ".md": 2, "pyproject": 2, ".toml": 2, "docs": [2, 6], "|-": 2, "ja": 2, "tutorial": 2, "py": 2, "main": 2, "2struct": 2, "struct": 2, "2qe": 2, "calc": 2, "qeutils": 2, "tools": 2, "2vasp": 2, "2openmx": 2, "vps": 2, "utils": 2, "sample": 2, "\u4f7f\u7528": [2, 4], "\u5f62\u5f0f": [2, 3, 4, 6], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb": [2, 3, 5], "\u307e\u305a": 2, "yaml": [2, 3, 4, 6], "\u8a73\u7d30": [2, 4, 6], "\u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8": [2, 5, 6, 7], "\u53c2\u7167": [2, 4, 6], "\u304f\u3060": [2, 4, 6], "\u3055\u3044": [2, 4, 6], "\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb\u30d5\u30a1\u30a4\u30eb": [2, 4, 6], "\u914d\u7f6e": [2, 4, 6], "\u5bfe\u8c61": [2, 3], "\u307e\u305f": [2, 4, 6], "\u6271\u3048\u308b": [2, 3], "poscar": [2, 4], "xfs": 2, "csv": [2, 4], "\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u30d5\u30a1\u30a4\u30eb": [2, 4, 6], "\u6307\u5b9a": [2, 3, 5], "\u64ec\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb\u30d5\u30a1\u30a4\u30eb": [2, 4], "\u683c\u7d0d": [2, 4], "\u5834\u6240": [2, 4], "/.": [2, 4], "config": [2, 4], "pmgrc": [2, 4], "\u30c7\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb": [2, 3], "\u3002quantum": [2, 4], "\u30bf\u30fc\u30b2\u30c3\u30c8\u30aa\u30d7\u30b7\u30e7\u30f3": 2, "-t": [2, 3], "\u3002vasp": 2, "input": [2, 3, 6], "material": [2, 3], ".cif": [2, 3, 6], "\u7b2c\u4e00\u539f\u7406": [3, 4, 6], "\u66f8\u5f0f": [3, 4], "-v": 3, "][": 3, "-q": 3, "target": 3, "_yaml": 3, "\u8aac\u660e": 3, "\u8aad\u307f\u8fbc\u307f": 3, "\u30aa\u30d7\u30b7\u30e7\u30f3": [3, 4, 6], "\u8868\u793a": 3, "\u308c\u308b": [3, 4, 6], "\u30e1\u30c3\u30bb\u30fc\u30b8": 3, "\u5197\u9577": 3, "\u56de\u6307\u5b9a": 3, "\u4e0a\u304c\u308a": 3, "\u4e0b\u3052": 3, "\u52b9\u679c": 3, "\u6253\u3061\u6d88\u3057": 3, "\u3068\u304a\u308a": [3, 4], "\u5927\u6587\u5b57": 3, "\u5c0f\u6587": 3, "\u533a\u5225": 3, "\u3057\u307e\u305b": 3, "_espresso": 3, "\u5411\u3051": [3, 5, 6], "format": 3, "-h": 3, "\u30d8\u30eb\u30d7": 3, "-version": 3, "\u30d0\u30fc\u30b8\u30e7\u30f3": 3, "\u8a2d\u5b9a": [4, 6], "\u90e8\u5206": 4, "\u6271\u3044": [4, 6], "\u30b7\u30f3\u30dc\u30eb": 4, "\u5b9a\u7fa9": 4, "use": [4, 6], "_ibrav": [4, 6], "\u30c7\u30d5\u30a9\u30eb\u30c8": 4, "false": [4, 6], "ibrav": [4, 6], "true": [4, 6], "\u3068\u308a": 4, "convention": 4, "\u5408\u3046": 4, "\u3088\u3046": [4, 6], "\u3042\u308f\u305b": 4, "\u306b\u95a2\u3059\u308b": [4, 6], "cosab": 4, "cosac": 4, "cosbc": 4, "\u66f8\u304d\u51fa\u3055": [4, 6], "tolerance": [4, 6], "\u518d\u69cb": 4, "\u4e00\u81f4": 4, "\u8a55\u4fa1": [4, 6], "\u8a31\u5bb9": 4, "supercell": 4, "\u306a\u3057": 4, "\u30b5\u30a4\u30ba": 4, "_x": 4, "_y": 4, "_z": 4, "global": [4, 6], "\u5404\u7bc0": 4, "\u5404\u5165": 4, "\u30ea\u30b9\u30c8": [4, 6], "\u9805\u76ee": 4, "mode": [4, 5, 6], "(quantum": 4, "\u73fe\u6642\u70b9": 4, "\u306a\u3044": 4, "output": [4, 6], "_file": [4, 6], "_dir": [4, 6], "\u51fa\u529b\u5148": 4, "\u30ab\u30ec\u30f3\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea": 4, "&system": 4, "&control": [4, 6], "\u3002card": 4, "\u3082\u306e": [4, 6], "template": [4, 6], "(vasp": 4, "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb": 4, "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8": 4, "\u307e\u305b": 4, "\u8ffd\u52a0": [4, 5], "\u540c\u3058": [4, 6], "\u5f8c\u8005": 4, "\u512a\u5148": [4, 6], "\u7bc4\u56f2": [4, 6], "\u7d44\u307f\u5408\u308f": [4, 6], "\u7279\u5225": [4, 6], "\u69cb\u6587": [4, 6], "{..": [4, 6], ".}": [4, 6], "\u7528\u3044": [4, 6], "\u901a\u308a": 4, "{[": 4, "...": 4, "\u30b9\u30ab\u30e9\u30fc": [4, 6], "{range": 4, "(n": 4, ")}": 4, "(start": 4, "end": 4, "step": 4, "\u305d\u308c\u305e\u308c": [4, 6], "start": 4, "\u301cend": 4, "\u523b\u307f": 4, "\u7701\u7565": 4, "int": 4, "float": 4, "\u8a18\u8f09": [4, 6], "\u56fa\u6709": 4, "pp": [4, 6], "\u7d20\u7a2e": 4, "\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb": [4, 6], "\u4ed8\u3051\u308b": 4, "\u5143\u7d20": 4, "\u30bf\u30a4\u30d7": 4, "nexclude": 4, "orbitals": 4, "\u3002\u4f8b": 4, "fe": 4, "pbe": 4, "-spn": 4, "-rrkjus": 4, "_psl": [4, 6], "spd": 4, ".pbe": 4, "upf": 4, "cutoff": 4, "\u30ab\u30c3\u30c8\u30aa\u30d5": [4, 6], "ecutwfc": [4, 6], "ecutrho": [4, 6], "pseudo": [4, 6], "\u72ec\u7acb": 4, "\u4e0a\u66f8\u304d": [4, 6], "\u3002\u307e\u305f": 4, "celldm": 4, "\u524a\u9664": 4, "bravais": 4, "\u30a4\u30f3\u30c7\u30c3\u30af\u30b9": 4, "\u57fa\u672c": [4, 5, 6, 7], "\u5408\u308f\u305b": 4, "nat": [4, 6], "\u539f\u5b50": 4, "ntyp": [4, 6], "\u308c\u307e\u305b": 4, "\u30d9\u30af\u30c8\u30eb": 4, "\u5358\u4f4d": 4, "angstrom": 4, "3x": 4, "\u884c\u5217": 4, "\u76f4\u63a5": 4, "\u539f\u5b50\u7a2e": 4, "\u30fb\u539f\u5b50\u91cf": 4, "\u30fb\u64ec\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb\u30d5\u30a1\u30a4\u30eb": 4, "_list": 4, "\u5ea7\u6a19": 4, "(fractional": 4, "coordinate": 4, "ignore": 4, "_pos": 4, "\u3002md": 4, "\u6700\u9069": 4, "\u4f7f\u308f": 4, "k\u70b9": 4, "gamma": 4, "\\gamma": 4, "crystal": [4, 6], "\u30e1\u30c3\u30b7\u30e5": 4, "grid": [4, 6], "vol": 4, "_density": 4, "_resolution": 4, "\u5c0e\u51fa": 4, "automatic": [4, 6], "\u30b7\u30d5\u30c8": 4, "kshifts": 4, "\u9806\u5e8f": 4, "\u6c7a\u5b9a": 4, "\u3002grid": 4, "\u914d\u5217": [4, 6], "\u4eee\u5b9a": 4, "\u81ea\u52d5": 4, "\u64ec\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb": 4, "pmg": 4, "_vasp": 4, "_psp": 4, "functional": 4, "/potcar": 4, "element": 4, "(.": 4, "gz": 4, "\u540c\u540d": 4, "pot": 4, "_gga": 4, "_paw": 4, "_pbe": [4, 6], "_lda": 4, "\u6c7a\u3081": [4, 6], "_functional": 4, "\u4e0a\u8a18": [4, 6], "\u30c6\u30fc\u30d6\u30eb": 4, "lda": 4, "\u306a\u3063": 4, "\u6d41\u5100": 4, "\u7121\u8996": 4, "\u63a2\u3057": 4, "psuedo": 4, "incar": 4, "kpoints": 4, "potcar": 4, "type": 4, "\u306a\u3082\u306e": 4, ".io": 4, ".vasp": 4, "\u30de\u30cb\u30e5\u30a2\u30eb": 4, "parameter": 4, "_automatic": 4, "shift": 4, "monkhorst": 4, "kppa": 4, "force": 4, "_gamma": 4, "_by": 4, "_vol": 4, "_lengths": 4, "length": 4, "_linemode": 4, "division": 4, "path": 4, "_type": 4, "(highsymmkpath": 4, "_path": 4, "\u64ec\u539f\u5b50": 4, "\u8ecc\u9053": 4, ".path": 4, "precision": 4, "table": 4, "\u304c\u3063": 4, "\u9078\u629e": 4, "quick": 4, "standard": 4, "precise": 4, "\u306e\u3044\u305a\u308c\u304b": 4, "\u6982\u8981": [5, 7], "\u30e9\u30a4\u30bb\u30f3\u30b9": 5, "\u958b\u767a": 5, "\u8ca2\u732e": 5, "\u30b3\u30d4\u30fc\u30e9\u30a4\u30c8": 5, "\u52d5\u4f5c": 5, "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb": [5, 7], "\u4f7f\u3044\u65b9": [5, 7], "\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb": [5, 7], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30bb\u30c3\u30c8": 5, "\u30b3\u30de\u30f3\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9": [5, 7], "\u62e1\u5f35": [5, 7], "\u30ac\u30a4\u30c9": [5, 7], "\u4f7f\u3046": 6, "/tutorial": 6, "\u30b5\u30f3\u30d7\u30eb": 6, "\u5b9f\u65bd": 6, "\u4e0e\u3048\u308b": 6, "\u30c6\u30ad\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb": 6, "\u306b\u5bfe\u3059\u308b": 6, "\u4ed5\u69d8": 6, "\u30d5\u30a9\u30fc\u30de\u30c3\u30c8": 6, "keyword": 6, "value": 6, "\u6570\u5024": 6, "\u6587\u5b57\u5217": 6, "\u7b87\u6761": 6, "\u66f8\u304d": 6, "\u5165\u308c\u5b50": 6, "optional": 6, "./": 6, "/pp": 6, "_rrkjus": 6, ".csv": 6, "tasks": 6, ".in": 6, "_tmpl": 6, "control": 6, "prefix": 6, "pwscf": 6, "outdir": 6, "work": 6, "system": 6, "\u4e00\u9023": 6, "\u5404\u51fa\u529b": 6, "\u3002scf": 6, "\u4e00\u822c": 6, "\u884c\u3046": 6, "\u4efb\u610f": 6, "&keyword": 6, "\u59cb\u307e\u308b": 6, "fortran": 6, "\u30ad\u30fc\u30ef\u30fc\u30c9": 6, "\u59cb\u307e\u308a": 6, "\u7a7a\u884c": 6, "\u5206\u5272": 6, "\u547c\u3070": 6, "\u306a\u308a": 6, "\u3044\u304f\u3064\u304b": 6, "\u4f8b\u5916": 6, "\u9664\u3044": 6, "\u6c42\u3081": 6, "\u5408\u308f": 6, "\u5b58\u5728": 6, "\u5f93\u3063": 6, "\u65e2\u5b58": 6, "\u4f7f\u3044": 6, "\u53d6\u308a\u8fbc\u307f": 6, "_parameter": 6, "_point": 6, "\u3044\u308b": 6, "\u7559\u610f": 6, "calculation": 6, "tstress": 6, "tprnfor": 6, "occupations": 6, "smearing": 6, "'m": 6, "-p": 6, "degauss": 6, "noncolin": 6, "nspin": 6, "electrons": 6, "missing": 6, "_beta": 6, "conv": 6, "_thr": 6, "1e": 6, "co": 6, "3sns": 6, "nosym": 6, "\u4e88\u3081": 6, "/pseudo": 6, "\u304a\u304d": 6, "/scf": 6, "\u5909\u3048": 6, "\u306a\u304c\u3089": 6, "\u305f\u3044": 6, "\u4f8b\u3048": 6, "\u53ce\u675f": 6, "${": 6, "],": 6, "4x": 6, "8x": 6, "\u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea": 6, "\u7b2c\u4e00\u539f\u7406\u8a08": 7}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"\u6982\u8981": 0, "cif": [0, 3, 5, 7], "2x": [0, 3, 5, 7], "\u30e9\u30a4\u30bb\u30f3\u30b9": 0, "\u958b\u767a": 0, "\u8ca2\u732e": 0, "\u30b3\u30d4\u30fc\u30e9\u30a4\u30c8": 0, "\u52d5\u4f5c": 0, "\u74b0\u5883": 0, "\u62e1\u5f35": 1, "\u30ac\u30a4\u30c9": 1, "quantum": [1, 4], "espresso": [1, 4], "mode": 1, "\u8ffd\u52a0": 1, "\u3059\u308b": [1, 6], "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb": 2, "\u57fa\u672c": 2, "\u4f7f\u3044\u65b9": 2, "\u30b3\u30de\u30f3\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9": 3, "\u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8": 4, "\u5165\u529b": [4, 6], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb": [4, 6], "structure": 4, "optional": 4, "tasks": 4, "\u30d1\u30e9\u30e1\u30fc\u30bf\u30bb\u30c3\u30c8": [4, 6], "\u6307\u5b9a": [4, 6], "\u5411\u3051": 4, "\u30d1\u30e9\u30e1\u30fc\u30bf": 4, "\u30bb\u30af\u30b7\u30e7\u30f3": 4, "content": 4, "vasp": 4, "openmx": 4, "\u7b2c\u4e00\u539f\u7406\u8a08": [5, 6], "\u7b97\u5165": [5, 6], "\u30d5\u30a1\u30a4\u30eb": [5, 6], "\u751f\u6210": [5, 6], "\u30c4\u30fc\u30eb": 5, "\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb": 6, "\u4f5c\u6210": 6, "users": 7, "guide": 7, "contents": 7}, "envversion": {"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": 60}, "alltitles": {"\u6982\u8981": [[0, "id1"]], "cif2x\u3068\u306f?": [[0, "cif2x"]], "\u30e9\u30a4\u30bb\u30f3\u30b9": [[0, "id2"]], "\u958b\u767a\u8ca2\u732e\u8005": [[0, "id3"]], "\u30b3\u30d4\u30fc\u30e9\u30a4\u30c8": [[0, "id4"]], "\u52d5\u4f5c\u74b0\u5883": [[0, "id5"]], "\u62e1\u5f35\u30ac\u30a4\u30c9": [[1, "sec-cif2x-appendix"]], "Quantum ESPRESSO \u306e mode \u3092\u8ffd\u52a0\u3059\u308b": [[1, "quantum-espresso-mode"]], "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9": [[2, "id1"]], "\u30b3\u30de\u30f3\u30c9\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9": [[3, "id1"]], "cif2x": [[3, "cif2x"]], "\u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30fc\u30de\u30c3\u30c8": [[4, "sec-cif2x-fileformat"]], "\u5165\u529b\u30d1\u30e9\u30e1\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb": [[4, "id2"]], "structure": [[4, "structure"]], "optional": [[4, "optional"], [4, "id5"], [4, "id8"]], "tasks": [[4, "tasks"], [4, "id6"]], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30bb\u30c3\u30c8\u6307\u5b9a": [[4, "id3"]], "Quantum ESPRESSO \u5411\u3051\u30d1\u30e9\u30e1\u30fc\u30bf": [[4, "quantum-espresso"]], "optional\u30bb\u30af\u30b7\u30e7\u30f3": [[4, "id4"]], "content": [[4, "content"], [4, "id7"], [4, "id9"]], "VASP \u5411\u3051\u30d1\u30e9\u30e1\u30fc\u30bf": [[4, "vasp"]], "OpenMX \u5411\u3051\u30d1\u30e9\u30e1\u30fc\u30bf": [[4, "openmx"]], "\u7b2c\u4e00\u539f\u7406\u8a08\u7b97\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u751f\u6210\u30c4\u30fc\u30eb (cif2x)": [[5, "cif2x"]], "\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb": [[6, "sec-cif2x-tutorial"]], "\u5165\u529b\u30d1\u30e9\u30e1\u30fc\u30bf\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3059\u308b": [[6, "id2"]], "\u7b2c\u4e00\u539f\u7406\u8a08\u7b97\u5165\u529b\u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3059\u308b": [[6, "id3"]], "\u30d1\u30e9\u30e1\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u6307\u5b9a\u3059\u308b": [[6, "id4"]], "Cif2x Users Guide": [[7, "cif2x-users-guide"]], "Contents:": [[7, null]]}, "indexentries": {}}) \ No newline at end of file