From 6744df334b6f2d113cea4d3ce6b35bf9cda6a47f Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Thu, 31 Aug 2017 14:51:46 +0200 Subject: [PATCH 001/166] small changed in doc. A few methods added in dos.py --- doc/_build/doctrees/environment.pickle | Bin 11412 -> 11683 bytes doc/_build/doctrees/postqe.doctree | Bin 28301 -> 36090 bytes doc/_build/doctrees/tutorial.doctree | Bin 48745 -> 48541 bytes doc/_build/html/genindex.html | 19 ++++++++- doc/_build/html/objects.inv | Bin 330 -> 346 bytes doc/_build/html/postqe.html | 40 +++++++++++++++++++ doc/_build/html/searchindex.js | 2 +- examples/example3/example3.py | 3 +- postqe/api.py | 7 ++-- postqe/dos.py | 52 +++++++++++++++++++++++++ postqe/eos.py | 4 +- postqe/{bands.py => oldbands.py} | 0 postqe/{dos_postqe.py => olddos.py} | 0 postqe/{eos_postqe.py => oldeos.py} | 0 postqe/plot.py | 4 +- 15 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 postqe/dos.py rename postqe/{bands.py => oldbands.py} (100%) rename postqe/{dos_postqe.py => olddos.py} (100%) rename postqe/{eos_postqe.py => oldeos.py} (100%) diff --git a/doc/_build/doctrees/environment.pickle b/doc/_build/doctrees/environment.pickle index a78be56d9bced3e94daaaea69a4084d12778b700..98c263521518c03cee3287e928470f4db7dc60be 100644 GIT binary patch literal 11683 zcmc&)4TxOT6^_|tcXpE9{HRs%r!S7CyVaR-H@}LdXtIf6$tEWLfF^x?^XAUnH@~p?m6ch>t6m&agF>>Yz)f2I;&x)Pt3UfxS z+1_W(ZoTG|S+VqHMxTYdG~QjM)>0z+E!nA;>>Rjcw_dVaF1fW2q6|fg_TaqpQIjctd-cH3}lksm2^{kEDdA9pI2R}BX*nbFul(Etw3>Ls&sNntoaT;b{`{F(BC zQ)IrP<{ZzHl5ECqN|DM|%OM2kVzIgAKxfRzHv?87m6a;mt&#+ss^YnfdSaLt&b5_O z{fxzA=2sfb zjwI|@3Y*NYiN#tFO;>2FiTeV&Y4f}~Qwe7RL3yzz;d{zP=2lQ= z3D)Imv8S%wnS}4gz^K|ZIg^MRGf*`rG9g&=bl^nH1W$W`#n#Mf!qIQd^*w7^egr!~ zx4efGaZ}Gq(ke5I0@w%K=4H!o$Sl{Swp_nI71v}I6Q!5(ki|+xyyY+4OPb|;X8FYzEBdHr=P5yPU@le(;V7Nl3<%|4DvAzrLn;NdkbKDcT2ektMOcnntm<`7z zkBp-h^gqS;?G!Q=8(M*1_gh3X$txCD**$^{!l-K`7NbrRdxeSEkn$jo9C)qG2Vhb> ztH~bnoG11>HXRtQZ;DTniO8LU1MD~^+`Ucd@J2P9dLv9+mrlS&ks~ut!AvO=jLFUE zeDbmf{Xvb6Q%ChkxUp8`I462Vy2mDV}o zuYi9qCKb^!hGmg=eXkxlkurl*P}WI=6eNPMbbSiC zE(JnS{5wf8e;>#EBR+q^=g;_jcrqbgW*pHh|-SgpxUX)fFHW&vEbTDcHJcmyK zpZv*W3ThL=>62Z&y5o9`DdlOWVJ+3SVrLSX86{JVn?bmk?saHW)5etJ844(6JURa9 zgwJQ-zO3QeK6?n@S2KXOlT++=xI-ZC&p;LkQUw=7AnwjU7z6>=I%N3+y~`0<3|W3( zX8A3&yL47V02VR;+Xc`%5XIBIItkLs3BH`y|$x(;f6z7MzgjG zRwRe(THv4Zyj0RyOw?V!(hU&?cGU?IaYvcsu9cfs9QZBEMPTWdTT2o5J$Nk{DeAx$ zS1=J10SlN_H7)nFwIp#P(3FJ8-R@b$O#pQGZ7}a$+lniO$q~8%6DzWPls~xyU z{lpu5fu#Yv*bOBO+B;&LwlEQ6Haq)}xx3Jqqe~2{HzhWuj@GJHQxm@hRtVP~qO$_4 z9#}2j3;jR}4PwV(V8I#>_P8(gV`8Y8v8*`#wlEA=yOgrj`mJP z>FF8|_s*QwGmrJoJekhG)gTZHBg<7GUB>ub%0tezfyx4^1(oceAr<~?kJw95ki9uNB*Wb(wQ2{lJNq)a^)8P zAD%Gq?eGeGqctn>_DbzzQJ|bv>WhtilB2N3QndZzJaQ{p;a+SU(J&VpH?7rLF$lEF zQe132)Pdc;B5c-_Tx>kr0WE7#JR!P#3I(VLPIbWA#2c6>@M9{fmX?4|9`^N*li z^3MR4U1+R)gf2tT#k%|T88oq7(Y54y#*%b#?tzs-Gp44CbB}7!F3yR)1;oR2Q;HF1 zMZBRcw@AjdzEq4UJTEq5c;-5{JW3fBbt1VqquvCoWBFYN6fOg}@Hzr6L*X(cF5|Gq zWy~EpZcJ%p#>{la6xdQm;xhKq(uIr%>i1;`Db}1GEZ;#wdRBvW3+bK$@<(=zAcGZ= z@hg&blk%eHNU@#&EBdu!=(rBjs2xGgeilJ}WuL}p0E0pJq|6AP(Z*-^H6z8B5!P&0 zSl?2@y3GAPXMufJbA9y!drgCO3vAyYfuTARI?KHXn{JF)_NLkaLoZTvY)@@*}S)l2f{8nj!Id)lEy(JId1vZ3~XJSd5b z45oV37qwWm#VYRnEYiD62R?>n%kCKC@45`AgiD-&nz{wzYeyM2*5*C?cW)W(JUpvGlnZqn|ol&+(boEMj~Sw>7O zuHX*^;)QHfIq+envO($Zu{e%_w@d#t#%j_#1(n`eF>#UQSI_w#1UaZLs0>~^afQsXs$_`WtIFrex?zcm zS(5t~8Vf16#5&jUSTer>DU>!gmBT@K(stu2Q`Hy#lUXV+8wU459r zu}H?Yc0I*^voh$QSKj*?w2OseLm`YSs(gh$lGU>_f4l?UVdY;WD@Arv@-t0vWD>ns ziZh?+;|*r&AkM5=m+EvkXSNpllmb`Jpe>zBVp=B5*qCubeO~lglVMleiK7CFVob|S z3-n?#&A}o__o(gRnM7=&UMHA#Q`=}tp_=pSd2W7;7v|UU{QL;|B=A^Ap$vtow0xs~ zkM2_wx)>ui^Qh^f*#{M58xV=bRXM8})_nRQu00WlEG-&8rH7wE>(tN0$epDbxGfh)jj5!( zAjSghLLD`Y9bh9$%1d>*C#YMZ0`I6g92&CFM?gLh{B>hwo0MkNcaDY8b_Zkohk z69;Wr=yM#mP_eW^6pG;5w$NEQb6Y6LhO(ao3zT%_4wEDtI$qf3RNicl5wn_dD{8dt zv{J4QSrp46CHUfaHJ_$s)m{?Y*hgp6{gxu_mooNeEBlGK?QjWgG_nqPhq1q8+!w^2 z75R4;K;Cm0@bv3S%UlyJE6@`VDgwBhe-tD z$9-s9;7}U}^lZFoc{n9$9XKk9l$$s12L@zt58)qc{wf08%ob&=LQJ8Gn{22URaH#d z*Y;aWfm7#Do7-paoY`}SacPGUV=2Aqu{J5q>cc(VkOu}Ql0Zow+UqPYM*R;&#uc$O zy-Y|yq9qU|Otci76*)+U5|y&PDz3F%-+J6+=n-^Hlsp3_`$t|78(U0ig&7BEI5Kz? zwZgm0<3FRey>XsR-DtRy<8f3g?nO!s z-}BsZQORYe&=WVmUTi`|9A`jTUzJ#s7rn(s$csX`lN zT4FUr+$=iOR(j;a?8{iuT&(#)6Qdi0nk_Y3o#94(hRFBPz~iu}CeJ{Z0Q65%D+cij zi8*F9(KwN5xzg=E6OX7x$JLs)RT%+M=xC$Aa`G_f&q5q6Za*utn$f1O)x}K$#Jb3Q~=RZH%HuF86!`H@|(tn@*123r2n{WPz m=hf)H%|qx;16QeYl*B>zVRQN#03xaEq%YKTq62eqyYxR-o|B~j literal 11412 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 diff --git a/doc/_build/doctrees/postqe.doctree b/doc/_build/doctrees/postqe.doctree index 43c3e872dfc54e3d1a5e92e537ef8a597c05ee12..3d1e600cd8d8072b2aee4f50d1ba1a57bc679c2b 100644 GIT binary patch literal 36090 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 XO6EuEzwkoTX6W9|J*M9KhiCr}#B;?+ literal 28301 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 E9}`Eny8r+H literal 48745 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 diff --git a/doc/_build/html/genindex.html b/doc/_build/html/genindex.html index a83598f..322f6ae 100644 --- a/doc/_build/html/genindex.html +++ b/doc/_build/html/genindex.html @@ -50,10 +50,27 @@

Navigation

Index

- G + F + | G | P
+

F

+ + + +
+ +
fit_and_plot_eos() (in module postqe.api) +
+ +
+ +
fit_and_write_eos() (in module postqe.api) +
+ +
+

G

from table fragments - if ( !support.tbody ) { - - // String was a
diff --git a/doc/_build/html/objects.inv b/doc/_build/html/objects.inv index cd0f418b7b636d7d511a01d0df479c346bc62007..9aade163c54677741221ad94a6a24847ace6f834 100644 GIT binary patch delta 231 zcmVp hbvGxYHfHW4uoEpX3S`~z#xs0Ur_jT=XE$eL3N*Yin|u*g=#N1*tI7wMrRrk{iEX=FfW+oxkckjbOy$N%E=Oik~9e- zR=j1yOnuP9l|5#FqlT6h&>pjBg&j zyhC!KEzDVvb=+LZb5z@61V(4jKp Rj01dD=g{Z0Cm%r!00YXvY2E+; diff --git a/doc/_build/html/postqe.html b/doc/_build/html/postqe.html index 5d59350..5dc2312 100644 --- a/doc/_build/html/postqe.html +++ b/doc/_build/html/postqe.html @@ -58,6 +58,46 @@

Submodules

postqe.api module

A collection of functions to be part of postqe API and exposed to the user.

+
+
+postqe.api.fit_and_plot_eos(label, eos='murnaghan', filename='EOSplot', show=None, ax=None)
+

This function fits an Equation of state of type eos and writes the results into filename. +Different equation of states are available: Murnaghan, Birch, Vinet, etc.

+ +++ + + + +
Parameters:
    +
  • label – input file for volumes and energies (possibly including the full path)
  • +
  • eos – type of Equation of State (Murnaghan, Birch, Vinet, etc.)
  • +
  • filename – name of the output file
  • +
+
+
+ +
+
+postqe.api.fit_and_write_eos(label, eos='murnaghan', filename='eos.out')
+

This function fits an Equation of state of type eos and writes the results into filename. +Different equation of states are available: Murnaghan, Birch, Vinet, etc.

+ +++ + + + +
Parameters:
    +
  • label – input file for volumes and energies (possibly including the full path)
  • +
  • eos – type of Equation of State (Murnaghan, Birch, Vinet, etc.)
  • +
  • filename – name of the output file
  • +
+
+
+
postqe.api.get_band_structure(prefix, outdir=None, schema=None, reference_energy=0)
diff --git a/doc/_build/html/searchindex.js b/doc/_build/html/searchindex.js index 0df1a56..c750f4f 100644 --- a/doc/_build/html/searchindex.js +++ b/doc/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},postqe:{api:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"0e24":3,"2nd":3,"3rd":3,"case":3,"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":1,"return":[1,2,3],"true":3,abov:1,accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,ang:3,ani:1,anton:3,api:[0,1],approxim:3,atom:1,automat:3,avail:[1,2,3],band:[0,1,2],bare:[1,2,3],base:[1,3],below:3,birch:[1,2,3],bodi:3,brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,calcul:[0,1,2],call:3,can:[1,2,3],center:3,charg:[0,1,2],choic:1,code:[1,3],collect:2,column:3,command:1,common:[1,3],commun:1,comput:3,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:3,cubic:3,current:[1,2,3],dat:3,data:[1,2,3],defin:3,demonstr:3,densiti:[0,1],detail:1,dev:1,develop:1,differ:[0,1,2],dim:3,direct:3,directli:1,directori:[2,3],doc:1,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:3,emin:3,energi:[0,1,2],environ:[1,2],equat:[1,2,3],equilibrium:3,espresso:[1,2,3],espresso_tmpdir:2,essentiali:3,etc:[1,2],everyth:1,exampl:[0,1],except:3,exchang:[1,2,3],expos:2,extract:3,f2py:1,face:3,fact:[1,3],featur:1,fermi:[2,3],fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:3,figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:3,first:3,fit:[0,1],follow:3,format:3,fortran:1,found:3,framework:1,from:[1,2,3],full:3,fulli:1,further:[1,3],fysik:1,gaussian:[2,3],gener:0,get:3,get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:3,glue:1,gpa:3,hartre:[1,2,3],hdf5:[2,3],henc:1,here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,implement:1,includ:1,incomplet:2,index:0,inform:3,initi:3,input:[2,3],instal:0,intepret:3,interact:3,interfac:1,introduct:0,isotrop:3,label:3,languag:1,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:1,link:1,look:3,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,3],meant:1,method:3,modifi:3,modul:[0,1],modulu:3,more:1,most:[1,3],murnaghan:[0,1,2],must:3,nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:0,npt:[2,3],number:[1,2,3],numpi:1,object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:1,option:3,order:3,org:1,origin:3,other:[1,3],otherwis:2,outdir:[2,3],output:[2,3],outputcharg:3,own:1,packag:[0,1],page:0,paramet:[2,3],pars:3,part:[1,2],path:[2,3],pdf:3,peopl:1,perform:3,person:1,planar:3,plane:3,pleas:2,plot:0,plot_ev:3,plt:3,plu:3,png:3,point:[2,3],polynomi:3,popular:1,possibl:1,post:1,postprocess:1,pot_typ:[2,3],potenti:[0,1,2],pourier:3,prefix:[2,3],previou:3,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:3,provid:1,pseudopotenti:3,pyplot:3,python:[1,3],quantiti:3,quantum:[1,3],ratio:3,read:[2,3],reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:3,scipi:1,script:3,search:0,second:3,section:[0,1],see:[1,3],session:3,set:2,setup:1,sever:3,shift:3,show:3,shown:3,siband:3,silicon:0,similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,softwar:1,some:[1,3],specif:1,specifi:3,standard:3,state:[0,1,2],step:3,still:[1,2],str:3,structur:[0,1,2],submodul:[0,1],sudo:1,system:3,tailor:3,taken:3,tarantola:3,task:[1,3],tast:1,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],tinker:1,togeth:[1,3],tool:1,total:[0,1,2],tutori:[0,1],two:3,type:[2,3],under:1,unit:[1,3],user:[1,2],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:2,vector:3,version:0,vinet:[1,2,3],volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,3],who:1,width:[2,3],wiki:1,wrapper:1,write:3,written:3,wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:3,densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file +Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{fit_and_plot_eos:[2,1,1,""],fit_and_write_eos:[2,1,1,""],get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},postqe:{api:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"0e24":3,"2nd":3,"3rd":3,"case":3,"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":1,"return":[1,2,3],"true":3,abov:1,accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,ang:3,ani:1,anton:3,api:1,approxim:3,atom:1,automat:3,avail:[1,2,3],band:1,bare:[1,2,3],base:[1,3],below:3,birch:[1,2,3],bodi:3,brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,calcul:1,call:3,can:[1,2,3],center:3,charg:1,choic:1,code:[1,3],collect:2,column:3,command:1,common:[1,3],commun:1,comput:3,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:3,cubic:3,current:[1,2,3],dat:3,data:[1,2,3],defin:3,demonstr:3,densiti:1,detail:1,dev:1,develop:1,differ:1,dim:3,direct:3,directli:1,directori:[2,3],doc:1,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:3,emin:3,energi:1,environ:[1,2],eosplot:2,equat:[1,2,3],equilibrium:3,espresso:[1,2,3],espresso_tmpdir:2,essentiali:3,etc:[1,2],everyth:1,exampl:1,except:3,exchang:[1,2,3],expos:2,extract:3,f2py:1,face:3,fact:[1,3],featur:1,fermi:[2,3],fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:3,figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:[2,3],first:3,fit:1,fit_and_plot_eo:2,fit_and_write_eo:2,follow:3,format:3,fortran:1,found:3,framework:1,from:[1,2,3],full:[2,3],fulli:1,further:[1,3],fysik:1,gaussian:[2,3],gener:[],get:3,get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:3,glue:1,gpa:3,hartre:[1,2,3],hdf5:[2,3],henc:1,here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,implement:1,includ:[1,2],incomplet:2,index:0,inform:3,initi:3,input:[2,3],instal:[],intepret:3,interact:3,interfac:1,introduct:[],isotrop:3,label:[2,3],languag:1,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:1,link:1,look:3,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,3],meant:1,method:3,modifi:3,modul:1,modulu:3,more:1,most:[1,3],murnaghan:1,must:3,name:2,nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:[],npt:[2,3],number:[1,2,3],numpi:1,object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:1,option:3,order:3,org:1,origin:3,other:[1,3],otherwis:2,out:2,outdir:[2,3],output:[2,3],outputcharg:3,own:1,packag:1,page:0,paramet:[2,3],pars:3,part:[1,2],path:[2,3],pdf:3,peopl:1,perform:3,person:1,planar:3,plane:3,pleas:2,plot:[],plot_ev:3,plt:3,plu:3,png:3,point:[2,3],polynomi:3,popular:1,possibl:[1,2],post:1,postprocess:1,pot_typ:[2,3],potenti:1,pourier:3,prefix:[2,3],previou:3,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:3,provid:1,pseudopotenti:3,pyplot:3,python:[1,3],quantiti:3,quantum:[1,3],ratio:3,read:[2,3],reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:3,scipi:1,script:3,search:0,second:3,section:1,see:[1,3],session:3,set:2,setup:1,sever:3,shift:3,show:[2,3],shown:3,siband:3,silicon:[],similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,softwar:1,some:[1,3],specif:1,specifi:3,standard:3,state:1,step:3,still:[1,2],str:3,structur:1,submodul:1,sudo:1,system:3,tailor:3,taken:3,tarantola:3,task:[1,3],tast:1,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],tinker:1,togeth:[1,3],tool:1,total:1,tutori:1,two:3,type:[2,3],under:1,unit:[1,3],user:[1,2],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:2,vector:3,version:[],vinet:[1,2,3],volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,3],who:1,width:[2,3],wiki:1,wrapper:1,write:[2,3],written:3,wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:3,densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file diff --git a/examples/example3/example3.py b/examples/example3/example3.py index e5c7347..a7ef8a9 100755 --- a/examples/example3/example3.py +++ b/examples/example3/example3.py @@ -25,4 +25,5 @@ plt.savefig('figure.png') plt.show() - + # save DOS in a file + dos.write('DOS.out') diff --git a/postqe/api.py b/postqe/api.py index b162d43..9b05993 100644 --- a/postqe/api.py +++ b/postqe/api.py @@ -12,7 +12,7 @@ """ import os from postqe.eos import QEEquationOfState -from ase.dft import DOS +from postqe.dos import QEDOS from .charge import Charge, Potential from .readutils import read_EtotV @@ -81,7 +81,7 @@ def get_band_structure(prefix, outdir=None, schema=None, reference_energy=0): return bs -def get_dos(prefix, outdir=None, schema=None, width=0.01, npts=100): +def get_dos(prefix, outdir=None, schema=None, width=0.01, window= None, npts=100): """ This function returns an DOS object from an output xml Espresso file containing the results of a DOS calculation. @@ -91,6 +91,7 @@ def get_dos(prefix, outdir=None, schema=None, width=0.01, npts=100): ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise :param schema: the XML schema to be used to read and validate the XML output file :param width: width of the gaussian to be used for the DOS (in eV) + :param window = emin, emax: defines the minimun and maximun energies for the DOS :param npts: number of points of the DOS :return: a DOS object """ @@ -105,7 +106,7 @@ def get_dos(prefix, outdir=None, schema=None, width=0.01, npts=100): atoms.calc.read_results() # Create a DOS object with width= eV and npts points - dos = DOS(calcul, width=width, npts=npts) + dos = QEDOS(calcul, width=width, window=window, npts=npts) return dos diff --git a/postqe/dos.py b/postqe/dos.py new file mode 100644 index 0000000..81862f9 --- /dev/null +++ b/postqe/dos.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +#encoding: UTF-8 + +import numpy as np +from ase.dft.dos import DOS + +class QEDOS(DOS): + + def __init__(self, calc, width=0.1, window=None, npts=201): + DOS.__init__(self, calc, width=width, window=window, npts=npts) + if window is None: + self.emin = self.energies.min() + self.emax = self.energies.max() + else: + self.emin, self.emax = window + + def get_dos_int(self): + """ + Get array of integral DOS values (always for the total DOS). + + """ + dos = self.get_dos() + dos_int = np.zeros(self.npts) + temp = 0 + for i in range(0,len(dos)): + temp += dos[i] + dos_int[i] = temp + return dos_int + + def write(self,filename='dos.out'): + + + self.filename = filename + fout = open(self.filename, "w") + + # The header contains some information on the system, the grid nr, etc. + header = '# DOS file, width= '+str(self.width)+' window= '+str(self.emin)+', '+str(self.emax)+\ + ' npts='+str(self.npts)+'\n' + fout.write(header) + fout.write(80*'#'+'\n') + dos_int = self.get_dos_int() + if self.nspins == 2: # non magnetic + dos_up = self.get_dos(spin=0) + dos_down = self.get_dos(spin=1) + for i in range(0,len(self.energies)): + fout.write(str(self.energies[i])+'\t'+str(dos_up[i])+'\t'+str(dos_down[i])+'\t'+str(dos_int[i])+'\n') + else: + dos = self.get_dos() + for i in range(0,len(self.energies)): + fout.write(str(self.energies[i])+'\t'+str(dos[i])+'\t'+str(dos_int[i])+'\n') + + fout.close() diff --git a/postqe/eos.py b/postqe/eos.py index 0f4da38..bb72e2c 100644 --- a/postqe/eos.py +++ b/postqe/eos.py @@ -12,8 +12,8 @@ def create_header(eos, v0, e0, B): class QEEquationOfState(EquationOfState): - def __init__(self, volumes, energies, eos='sj'): - EquationOfState.__init__(self, volumes, energies, eos='sj') + def __init__(self, volumes, energies, eos='murnaghan'): + EquationOfState.__init__(self, volumes, energies, eos=eos) def write(self,filename='eos.out'): self.filename = filename diff --git a/postqe/bands.py b/postqe/oldbands.py similarity index 100% rename from postqe/bands.py rename to postqe/oldbands.py diff --git a/postqe/dos_postqe.py b/postqe/olddos.py similarity index 100% rename from postqe/dos_postqe.py rename to postqe/olddos.py diff --git a/postqe/eos_postqe.py b/postqe/oldeos.py similarity index 100% rename from postqe/eos_postqe.py rename to postqe/oldeos.py diff --git a/postqe/plot.py b/postqe/plot.py index bd848da..49641c3 100644 --- a/postqe/plot.py +++ b/postqe/plot.py @@ -15,8 +15,8 @@ import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import axes3d -from .eos_postqe import calculate_fitted_points -from .bands import set_high_symmetry_points, compute_kx +from .oldeos import calculate_fitted_points +from .oldbands import set_high_symmetry_points, compute_kx from .constants import pi From 834b613d32cd46de95c1c6bc3fd698e35997b8c7 Mon Sep 17 00:00:00 2001 From: Davide Brunato Date: Thu, 21 Sep 2017 10:35:43 +0200 Subject: [PATCH 002/166] Added two subcommand parsers: * Added charge and potential subcommands * Set sys.path[0]='' in __main__.py for fixing wrong imports when a command call is used --- postqe/__init__.py | 2 ++ postqe/__main__.py | 5 +++-- postqe/cli.py | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/postqe/__init__.py b/postqe/__init__.py index b807ab5..30f04e1 100644 --- a/postqe/__init__.py +++ b/postqe/__init__.py @@ -5,6 +5,8 @@ # file 'LICENSE' in the root directory of the present distribution, or # https://opensource.org/licenses/LGPL-2.1 # +from __future__ import absolute_import + from ase import units from .compute_vs import compute_v_bare, compute_v_h, compute_v_xc from .api import get_eos, get_band_structure, get_dos, get_charge, get_potential diff --git a/postqe/__main__.py b/postqe/__main__.py index 11c8b1d..f1e5754 100644 --- a/postqe/__main__.py +++ b/postqe/__main__.py @@ -20,9 +20,10 @@ # Ref: https://www.python.org/dev/peps/pep-0366/ for details. import os import sys + sys.path[0] = '' pkg_search_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) - if sys.path[0] != pkg_search_path: - sys.path.insert(0, pkg_search_path) + if pkg_search_path not in sys.path: + sys.path.append(pkg_search_path) import postqe __package__ = postqe.__name__ diff --git a/postqe/cli.py b/postqe/cli.py index cf23dcb..12533ec 100644 --- a/postqe/cli.py +++ b/postqe/cli.py @@ -13,8 +13,10 @@ import sys import time +from .api import get_charge, get_potential -def get_cli_parser(): + +def get_cli_parser_pp(): import argparse parser = argparse.ArgumentParser(description='QE post processing') @@ -92,6 +94,35 @@ def get_cli_parser(): return parser +def get_cli_parser(): + import argparse + PREFIX_HELP = 'prefix of files saved by program pw.x' + OUTDIR_HELP = 'directory containing the input data, i.e. the same as in pw.x' + SCHEMA_HELP = 'the XSD schema file for QE XML output file. If not provided the schema' \ + 'information is taken from xsi:schemaLocation attributes.' + + parser = argparse.ArgumentParser(description='QE post processing') + subparsers = parser.add_subparsers(help='sub-command help') + + # create the parser for the "charge" command + charge_parser = subparsers.add_parser( + 'charge', help='Get the charge from Espresso XML and HDF5 output.') + charge_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) + charge_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) + charge_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) + + # create the parser for the "potential" command + charge_parser = subparsers.add_parser( + 'potential', help='Get the potential from Espresso XML and HDF5 output.') + charge_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) + charge_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) + charge_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) + charge_parser.add_argument( + '-pot_type', type=str, default=None, help="Type of the potential ('vtot', ...).") + + return parser + + def main(): if sys.version_info < (2, 7, 0): sys.stderr.write("You need python 2.7 or later to run this program\n") From 2944d9d56708e65bd204fcded451fb4011e1ca33 Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Wed, 11 Oct 2017 14:13:59 +0200 Subject: [PATCH 003/166] 1D charge spherical averaged implemented. Some functions for plotting the charge renamed and modified and tentative writecharge.py file created for handling different output formats. --- postqe/__init__.py | 2 +- postqe/charge.py | 31 +++++----- postqe/plot.py | 117 ++++++++++++++++++++++++++++------- postqe/writecharge.py | 111 +++++++++++++++++++++++++++++++++ tests/Si/reference/sipp0.out | 13 ++-- 5 files changed, 227 insertions(+), 47 deletions(-) create mode 100644 postqe/writecharge.py diff --git a/postqe/__init__.py b/postqe/__init__.py index 30f04e1..1cc2fef 100644 --- a/postqe/__init__.py +++ b/postqe/__init__.py @@ -11,6 +11,6 @@ from .compute_vs import compute_v_bare, compute_v_h, compute_v_xc from .api import get_eos, get_band_structure, get_dos, get_charge, get_potential from .xmlfile import get_cell_data, get_calculation_data, get_band_strucure_data -from .plot import plot1D_FFTinterp, plot2D_FFTinterp, simple_plot_xy, multiple_plot_xy, plot_EV, plot_bands +from .plot import plot_1Dcharge, plot_2Dcharge, plot_3Dcharge, simple_plot_xy, multiple_plot_xy, plot_EV, plot_bands from .pyqe import * # import Fortran APIs diff --git a/postqe/charge.py b/postqe/charge.py index 158677e..01c43e7 100644 --- a/postqe/charge.py +++ b/postqe/charge.py @@ -3,7 +3,7 @@ import numpy as np import h5py -from .plot import plot1D_FFTinterp, plot2D_FFTinterp +from .plot import plot_1Dcharge, plot_2Dcharge, plot_3Dcharge from .compute_vs import compute_G, compute_v_bare, compute_v_h, compute_v_xc def read_charge_file_hdf5(filename, nr = None): @@ -140,7 +140,8 @@ def write(self, filename): write_charge(filename + '_down', charge_down, header) - def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (1., 0., 0.), ny=50, dim=1, ifmagn='total'): + def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (1., 0., 0.), ny=50, dim=1, ifmagn='total', + plot_file='', method='FFT', format='gnuplot'): """ Plot a 1D or 2D section of the charge from x0 along e1 (e2) direction(s) using Fourier interpolation. @@ -160,32 +161,34 @@ def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (1., 0., 0.), G = compute_G(b, self.nr) if not self.calculator.get_spin_polarized(): # non magnetic calculation - if dim == 1: # 1D section - fig = plot1D_FFTinterp(self.charge, G, a, x0, e1, nx) - else: - fig = plot2D_FFTinterp(self.charge, G, a, x0, e1, e2, nx, ny) + if dim == 1: # 1D section ylab='charge', plot_file='', format='', method='FFT' + fig = plot_1Dcharge(self.charge, G, a, x0, e1, nx, 'charge', plot_file, method, format) + elif dim == 2: # 2D section + fig = plot_2Dcharge(self.charge, G, a, x0, e1, e2, nx, ny) + else: # 3D section + fig = plot_3Dcharge(self.charge, G, a, x0, e1, e2, nx, ny) fig.show() return fig else: # magnetic calculation, plot as ifmagn if ifmagn == 'up': charge_up = (self.charge + self.charge_diff) / 2.0 if dim == 1: # 1D section - fig = plot1D_FFTinterp(charge_up, G, a, x0, e1, nx) + fig = plot_1Dcharge(charge_up, G, a, x0, e1, nx) else: - fig = plot2D_FFTinterp(charge_up, G, a, x0, e1, e2, nx, ny) + fig = plot_2Dcharge(charge_up, G, a, x0, e1, e2, nx, ny) fig.show() elif ifmagn == 'down': charge_down = (self.charge - self.charge_diff) / 2.0 if dim == 1: # 1D section - fig = plot1D_FFTinterp(charge_down, G, a, x0, e1, nx) + fig = plot_1Dcharge(charge_down, G, a, x0, e1, nx) else: - fig = plot2D_FFTinterp(charge_down, G, a, x0, e1, e2, nx, ny) + fig = plot_2Dcharge(charge_down, G, a, x0, e1, e2, nx, ny) fig.show() else: if dim == 1: # 1D section - fig = plot1D_FFTinterp(self.charge, G, a, x0, e1, nx) + fig = plot_1Dcharge(self.charge, G, a, x0, e1, nx) else: - fig = plot2D_FFTinterp(self.charge, G, a, x0, e1, e2, nx, ny) + fig = plot_2Dcharge(self.charge, G, a, x0, e1, e2, nx, ny) fig.show() return fig @@ -258,8 +261,8 @@ def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (1., 0., 0.), G = compute_G(b, self.nr) if dim == 1: # 1D section - fig = plot1D_FFTinterp(self.v, G, a, x0, e1, nx) + fig = plot_1Dcharge(self.v, G, a, x0, e1, nx) else: - fig = plot2D_FFTinterp(self.v, G, a, x0, e1, e2, nx, ny) + fig = plot_2Dcharge(self.v, G, a, x0, e1, e2, nx, ny) fig.show() return fig diff --git a/postqe/plot.py b/postqe/plot.py index 49641c3..174bb8a 100644 --- a/postqe/plot.py +++ b/postqe/plot.py @@ -15,6 +15,7 @@ import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import axes3d +from .writecharge import write_1Dcharge_file, write_2Dcharge_file from .oldeos import calculate_fitted_points from .oldbands import set_high_symmetry_points, compute_kx from .constants import pi @@ -56,6 +57,61 @@ def FFTinterp1D(charge, G, a, x0, e1, nx): return X, Y +def spherical1D(charge, G, a, x0, e1, nx): + """ + This function calculates a 1D plot of the input charge (or else), starting from the + input point x0 and along the direction given by the vector e1. The G vectors + in the reciprocal space must also be given in input. nx is the number of + points where the spherically averaged charge is calculated (rho0(|r|) = int rho(r) dOmega + rho0(r) = 4pi \sum_G rho(G) j_0(|G||r|)). + + :param charge: eletronic charge density (or other quantity) to be plotted + :param G: G vectors in the reciprocal space + :param a: basis vectors of the unit cell + :param x0: 3D vector, origin of the line + :param e1: 3D vector which determines the plotting line + :param nx: number of points in the line + """ + + #TODO: this function needs some optimization... + + # normalize e1 + m1 = np.linalg.norm(e1) + if abs(m1) < 1.0E-6: # if the module is less than 1.0E-6 + e1 = a[1] + m1 = np.linalg.norm(e1) + e1 = e1 / m1 + + # Computes the FFT of the charge + fft_charge = np.fft.fftn(charge) + nr = charge.shape + + # Steps along the e1 direction... + deltax = m1 / (nx - 1) + X = np.zeros(nx) + Y = np.zeros(nx, dtype=complex) + + for x in range(0, nr[0]): + for y in range(0, nr[1]): + for z in range(0, nr[2]): + if (x==0) and (y==0) and (z==0): # at the Gamma point + if (np.linalg.norm(G[0, 0, 0])<1e-10): + for i in range(0, nx): + Y[i] += 4.0 * pi * fft_charge[0, 0, 0] + else: # not at Gamma + #arg = 2.0 * pi * (x0[0] * G[x, y, z, 0] + x0[1] * G[x, y, z, 1] + x0[2] * G[x, y, z, 2]) + arg = 2.0 * pi * np.dot(x0, G[x, y, z]) + rho0g = fft_charge[x, y, z] * complex(np.cos(arg), np.sin(arg)) # Move the origin to x0 + Y[0] += 4.0 * pi * rho0g # term at r=0 + for i in range(1, nx): # other terms at r!=0 + gr = 2.0 * pi * np.linalg.norm(G[x,y,z]) * i * deltax + Y[i] += 4.0 * pi * rho0g * np.sin(gr) / gr + + for i in range(0, nx): + X[i] = i * deltax # fill + Y[i] = Y[i] / (nr[0] * nr[1] * nr[2]) # normalize + + return X, Y def FFTinterp2D(charge, G, a, x0, e1, e2, nx, ny): @@ -121,7 +177,8 @@ def FFTinterp2D(charge, G, a, x0, e1, e2, nx, ny): return X, Y, Z -def plot1D_FFTinterp(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, ylab='charge', plot_file=''): +def plot_1Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, ylab='charge', plot_file='', + method='FFT', format=''): """ This function calculates a 1D plot of the input charge (or else), starting from the input point x0 and along the direction given by the vector e1. The G vectors @@ -136,20 +193,30 @@ def plot1D_FFTinterp(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, ylab='char :param nx: number of points in the line :param ylab: y axix label in the plot ('charge', 'Vtot', etc.) :param plot_file: if plot_file!='', write the plotting values on a text file + :param format: output file format (not used in 1D) + :param method: interpolation method. 'spherical' is for averaged spherical, 'FFT' for Fourier interpolation :return: the matplotlib figure object """ - try: - from cythonfn import FFTinterp1D_Cython - X, Y = FFTinterp1D_Cython(charge, G, a, x0, e1, nx) - except ImportError: - X, Y = FFTinterp1D(charge, G, a, x0, e1, nx) + if (method == 'FFT'): + try: + from cythonfn import FFTinterp1D_Cython + X, Y = FFTinterp1D_Cython(charge, G, a, x0, e1, nx) + except ImportError: + X, Y = FFTinterp1D(charge, G, a, x0, e1, nx) + elif (method == 'spherical'): + try: + #TODO: Cython function to be implemented + from cythonfn import spherical1D_Cython + X, Y = spherical1D_Cython(charge, G, a, x0, e1, nx) + except ImportError: + X, Y = spherical1D(charge, G, a, x0, e1, nx) + + else: + raise NotImplementedError if plot_file != '': - f = open(plot_file, 'w') - f.write('X' + 16 * ' ' + 'Y\n') - for i in range(0, nx): - f.write("{:.9E} ".format(X[i]) + "{:.9E}\n".format(Y[i].real)) + write_1Dcharge_file(X, Y, nx, plot_file) xlab = "("+str(x0[0])+","+str(x0[1])+","+str(x0[2])+") + " xlab += "x*("+str(e1[0])+","+str(e1[1])+","+str(e1[2])+")" @@ -160,9 +227,10 @@ def plot1D_FFTinterp(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, ylab='char plt.show() return fig + - -def plot2D_FFTinterp(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(1, 0, 0), nx=20, ny=20, zlab='charge', plot_file=''): +def plot_2Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(1, 0, 0), nx=20, ny=20, zlab='charge', plot_file='', + method='FFT', format=''): """ This function calculates a 2D plot of the input charge (or else), starting from the input point x0 and along the directions given by the vectors e1, e2. These @@ -177,28 +245,24 @@ def plot2D_FFTinterp(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(1, 0, 0), nx= :param e1, e2: 3D vectors which determines the plotting plane :param nx, ny: number of points along e1, e2 respectively :param zlab: y axix label in the plot + :param plot_file: if plot_file!='', write the plotting values on a text file + :param method: interpolation method ('FFT' or 'splines', only 'FFT' implemented) + :param format: output file format :return: the matplotlib figure object """ + #TODO: check that e1 and e2 are not orthonormal + # if (abs(e1(1) * e2(1) + e1(2) * e2(2) + e1(3) * e2(3)) > 1e-6): + # throw something + try: from cythonfn import FFTinterp2D_Cython X, Y, Z = FFTinterp2D_Cython(charge, G, a, x0, e1, e2, nx, ny) except ImportError: X, Y, Z = FFTinterp2D(charge, G, a, x0, e1, e2, nx, ny) - if plot_file != '': - f = open(plot_file,'w') - f.write('X'+16*' '+'Y'+16*' '+'Z\n') - - # loop again over nx,ny to normalize, print on screen and write on file - for i in range(0,nx): - for j in range(0,ny): - print (X[i,j], Y[i,j], Z[i,j]) - try: - f.write("{:.9E} ".format(X[i, j]) + "{:.9E} ".format(Y[i, j]) + "{:.9E}\n".format(Z[i, j])) - except: - pass + write_2Dcharge_file(...) fig = plt.figure() ax = fig.gca(projection='3d') @@ -221,6 +285,11 @@ def plot2D_FFTinterp(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(1, 0, 0), nx= return fig +def plot_3Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(1, 0, 0), nx=20, ny=20, zlab='charge', plot_file=''): + + # TODO: this is to be implemented + pass + def simple_plot_xy(x, y, xlabel="", ylabel=""): """ diff --git a/postqe/writecharge.py b/postqe/writecharge.py new file mode 100644 index 0000000..1df66b1 --- /dev/null +++ b/postqe/writecharge.py @@ -0,0 +1,111 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +A tentative collection of functions for writing the charge in different formats (to be integrated into the charge class). +""" +################################################################################ + +import numpy as np + +def write_1Dcharge_file(X, Y, nx=1, plot_file = 'chargeplot1D.out'): + """ + Writes a text file for a 1D plot of the charge. + + :param X: variable x along the path chosen for the plot + :param Y: charge along the path + :param nx: number of points of the path + :param plot_file: output charge plot file + :return: + """ + # Determine max and min of the (real) charge and the sum of imaginary (absolute) charge + charge_min = np.min(Y.real) + charge_max = np.max(Y.real) + charge_im = np.sum(np.abs(Y.imag)) / nx + + f = open(plot_file, 'w') + f.write('# Minimun, maximun, imaginary charge: '+"{:.9E} ".format(charge_min) + "{:.9E} ".format(charge_max)+ + "{:.9E}\n".format(charge_im)) + f.write('# 1D plot, nx = '+ str(nx) +'\n') + f.write('# X' + 16 * ' ' + 'Y\n') + for i in range(0, nx): + f.write("{:.9E} ".format(X[i]) + "{:.9E}\n".format(Y[i].real)) + + +def write_2Dcharge_file_XSFformat(): + pass + + +def write_2Dcharge_file(X, Y, Z, a, x0, e1, e2, nx=1, ny=1, plot_file = 'chargeplot2D.out', format=0): + """ + Writes a file for a 2D plot of the charge in different formats. + + :param X: variable x along the 1st direction chosen for the plot + :param Y: variable y along the 2nd direction chosen for the plot + :param Z: charge on the grid + :param nx: number of points along the 1st direction + :param ny: number of points along the 2nd direction + :param plot_file: output charge plot file + :param format: 'gnuplot' -> 3 columns with x, y coordinates and charge data (suitable for gnuplot or similar) + 'plotrho.x' -> format for plotrho.x + 'xsf' -> xsf format for XCrySDen + :return: + """ + + # normalize e1 + m1 = np.linalg.norm(e1) + if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 + e1 = a[1] + m1 = np.linalg.norm(e1) + e1 = e1 / m1 + + # normalize e2 + m2 = np.linalg.norm(e2) + if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 + e2 = a[2] + m2 = np.linalg.norm(e2) + e2 = e2 / m2 + + # Steps along the e1 and e2 directions... + deltax = m1 / (nx - 1) + deltay = m2 / (ny - 1) + + # Determine max and min of the (real) charge and the sum of imaginary (absolute) charge + charge_min = np.min(Z.real) + charge_max = np.max(Z.real) + charge_im = np.sum(np.abs(Z.imag)) / nx / ny + + f = open(plot_file,'w') + f.write('# Minimun, maximun, imaginary charge: '+"{:.9E} ".format(charge_min) + "{:.9E}\n".format(charge_max)+ + "{:.9E}\n".format(charge_im)+'\n') + f.write('# 2D plot, nx = '+ str(nx) +' ny = '+ str(ny) +'\n') + f.write('X'+16*' '+'Y'+16*' '+'Z\n') + + if format == 'gnuplot': + for i in range(0,nx): + for j in range(0,ny): + f.write("{:.9E} ".format(X[i, j]) + "{:.9E} ".format(Y[i, j]) + "{:.9E}\n".format(Z[i, j])) + elif format == 'plotrho.x': + f.write("{:4d} {:4d}\n".format( (nx-1), (ny-1) )) + for i in range(0, nx): + f.write(("{:8.4f}\n").format((deltax * (nx - 1)))) + if i // 8: + f.write("\n") + for i in range(0, ny): + f.write("{:8.4f}\n".format((deltay * (ny - 1)))) + if i // 8: + f.write("\n") + for i in range(0, nx): + for j in range(0,ny): + f.write("{:12.4E}\n".format(Z[i, j])) + if i // 6: + f.write("\n") + f.write("{:8.4f} {:8.4f} {:8.4f}\n".format(x0[0],x0[1],x0[2])) + f.write("{:8.4f} {:8.4f} {:8.4f}\n".format(m1 * e1[0], m1 * e1[1], m1 * e1[2])) + f.write("{:8.4f} {:8.4f} {:8.4f}\n".format(m2 * e2[0], m2 * e2[1], m2 * e2[2])) + elif format == 'xsf': + #TODO: implement XSF format for xcrysden + write_2Dcharge_file_XSFformat() + else: + print('Format not implemented') + raise NotImplementedError diff --git a/tests/Si/reference/sipp0.out b/tests/Si/reference/sipp0.out index fde3c1a..3c95d4e 100644 --- a/tests/Si/reference/sipp0.out +++ b/tests/Si/reference/sipp0.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 17Jul2017 at 11:15:59 + Program POST-PROC v.6.1 starts on 11Oct2017 at 11:12: 2 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -8,8 +8,7 @@ in publications or presentations arising from this work. More details at http://www.quantum-espresso.org/quote - Parallel version (MPI), running on 4 processors - R & G space division: proc/nbgrp/npool/nimage = 4 + Parallel version (MPI), running on 1 processors Info: using nr1, nr2, nr3 values from input @@ -21,11 +20,9 @@ Please, verify this is what you really want - Parallelization info + G-vector sticks info -------------------- sticks: dense smooth PW G-vecs: dense smooth PW - Min 87 87 30 1068 1068 216 - Max 88 88 31 1071 1071 218 Sum 349 349 121 4279 4279 869 @@ -34,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.16s CPU 0.25s WALL + POST-PROC : 0.11s CPU 0.12s WALL - This run was terminated on: 11:16: 0 17Jul2017 + This run was terminated on: 11:12: 2 11Oct2017 =------------------------------------------------------------------------------= JOB DONE. From 5a8f3c801cbcb2dddb1a767a4f531488fcbeb16e Mon Sep 17 00:00:00 2001 From: Pietro Delugas Date: Wed, 11 Oct 2017 15:40:28 +0200 Subject: [PATCH 004/166] fixed charge reading in the gamma_only case --- postqe/charge.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/postqe/charge.py b/postqe/charge.py index 01c43e7..d7f05e0 100644 --- a/postqe/charge.py +++ b/postqe/charge.py @@ -26,6 +26,8 @@ def read_charge_file_hdf5(filename, nr = None): nr1,nr2,nr3 = nr ngm_g = h5f.attrs.get('ngm_g') + gamma_only = h5f.attrs.get('gamma_only') + gamma_only = 'TRUE' in str(gamma_only).upper() # Read the total charge aux = np.array(h5f['rhotot_g']).reshape([ngm_g,2]) rhotot_g = aux.dot([1.e0,1.e0j]) @@ -36,6 +38,26 @@ def read_charge_file_hdf5(filename, nr = None): rho_temp[i,j,k]=rho except IndexError: pass + if gamma_only: + rhotot_g = aux.dot([1.e0,-1.e0j]) + for el in zip(MI, rhotot_g): + (i,j,k), rho = el + if i > 0: + try: + rho_temp[-i, j, k] = rho + except IndexError: + pass + elif j > 0: + try: + rho_temp[0, -j, k] = rho + except IndexError: + pass + elif k > 0: + try: + rho_temp[0, 0, -k] = rho + except IndexError: + pass + rhotot_r = np.fft.ifftn(rho_temp) * nr1 * nr2 * nr3 # Read the charge difference spin up - spin down if present (for magnetic calculations) @@ -49,6 +71,25 @@ def read_charge_file_hdf5(filename, nr = None): rho_temp[i, j, k] = rho except IndexError: pass + if gamma_only: + rhodiff_g = aux.dot([1.e0, -1.e0j]) + for el in zip(MI, rhodiff_g): + (i, j, k), rho = el + if i > 0: + try: + rho_temp[-i, j, k] = rho + except IndexError: + pass + elif j > 0: + try: + rho_temp[0, -j, k] = rho + except IndexError: + pass + elif k > 0: + try: + rho_temp[0, 0, -k] = rho + except IndexError: + pass rhodiff_r = np.fft.ifftn(rho_temp) * nr1 * nr2 * nr3 return rhotot_r.real, rhodiff_r.real else: From 1a51027f1486015353a9b9b9acd19aac85cc7b58 Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Thu, 12 Oct 2017 09:54:54 +0200 Subject: [PATCH 005/166] 2D xsf (XCrySDen) format implemented --- postqe/charge.py | 28 ++++++++++++------ postqe/plot.py | 22 +++++++------- postqe/writecharge.py | 41 ++++++++++++++------------ postqe/xsf_format.py | 54 +++++++++++++++++++++++++++++++++++ tests/Si/reference/sipp0.out | 4 +-- tests/Si/reference/sipp1.out | 13 ++++----- tests/Si/reference/sipp11.out | 13 ++++----- tests/Si/reference/sipp2.out | 13 ++++----- tests/Si/reference/sipp6.out | 13 ++++----- 9 files changed, 129 insertions(+), 72 deletions(-) create mode 100644 postqe/xsf_format.py diff --git a/postqe/charge.py b/postqe/charge.py index 01c43e7..bf130fb 100644 --- a/postqe/charge.py +++ b/postqe/charge.py @@ -156,26 +156,36 @@ def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (1., 0., 0.), self.charge except: return - a = self.calculator.get_a_vectors() - b = self.calculator.get_b_vectors() - G = compute_G(b, self.nr) + # Extract some structural info + struct_info = { + 'a' : self.calculator.get_a_vectors(), + 'b' : self.calculator.get_b_vectors(), + 'alat' : self.calculator.get_alat(), + 'nat' : len(self.calculator.get_atomic_positions()), + 'atomic_positions' : self.calculator.get_atomic_positions(), + 'atomic_species': self.calculator.get_atomic_species(), + } + G = compute_G(struct_info['b'], self.nr) if not self.calculator.get_spin_polarized(): # non magnetic calculation if dim == 1: # 1D section ylab='charge', plot_file='', format='', method='FFT' - fig = plot_1Dcharge(self.charge, G, a, x0, e1, nx, 'charge', plot_file, method, format) + fig = plot_1Dcharge(self.charge, G, struct_info, x0, e1, nx, 'charge', plot_file, method, format) elif dim == 2: # 2D section - fig = plot_2Dcharge(self.charge, G, a, x0, e1, e2, nx, ny) + fig = plot_2Dcharge(self.charge, G, struct_info, x0, e1, e2, nx, ny, 'charge', plot_file, method, format) else: # 3D section - fig = plot_3Dcharge(self.charge, G, a, x0, e1, e2, nx, ny) + fig = plot_3Dcharge(self.charge, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, method, format) fig.show() return fig else: # magnetic calculation, plot as ifmagn if ifmagn == 'up': charge_up = (self.charge + self.charge_diff) / 2.0 if dim == 1: # 1D section - fig = plot_1Dcharge(charge_up, G, a, x0, e1, nx) - else: - fig = plot_2Dcharge(charge_up, G, a, x0, e1, e2, nx, ny) + fig = plot_1Dcharge(charge_up, G, struct_info, x0, e1, nx, 'charge', plot_file, method, format) + elif dim == 2: # 2D section + fig = plot_2Dcharge(charge_up, G, struct_info, x0, e1, e2, nx, ny, 'charge', plot_file, method, format) + else: # 3D section + fig = plot_3Dcharge(self.charge, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, method, + format) fig.show() elif ifmagn == 'down': charge_down = (self.charge - self.charge_diff) / 2.0 diff --git a/postqe/plot.py b/postqe/plot.py index 174bb8a..1b653bc 100644 --- a/postqe/plot.py +++ b/postqe/plot.py @@ -177,7 +177,7 @@ def FFTinterp2D(charge, G, a, x0, e1, e2, nx, ny): return X, Y, Z -def plot_1Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, ylab='charge', plot_file='', +def plot_1Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, ylab='charge', plot_file='', method='FFT', format=''): """ This function calculates a 1D plot of the input charge (or else), starting from the @@ -197,20 +197,19 @@ def plot_1Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, ylab='charge' :param method: interpolation method. 'spherical' is for averaged spherical, 'FFT' for Fourier interpolation :return: the matplotlib figure object """ - if (method == 'FFT'): try: from cythonfn import FFTinterp1D_Cython - X, Y = FFTinterp1D_Cython(charge, G, a, x0, e1, nx) + X, Y = FFTinterp1D_Cython(charge, G, struct_info['a'], x0, e1, nx) except ImportError: - X, Y = FFTinterp1D(charge, G, a, x0, e1, nx) + X, Y = FFTinterp1D(charge, G, struct_info['a'], x0, e1, nx) elif (method == 'spherical'): try: #TODO: Cython function to be implemented from cythonfn import spherical1D_Cython - X, Y = spherical1D_Cython(charge, G, a, x0, e1, nx) + X, Y = spherical1D_Cython(charge, G, struct_info['a'], x0, e1, nx) except ImportError: - X, Y = spherical1D(charge, G, a, x0, e1, nx) + X, Y = spherical1D(charge, G, struct_info['a'], x0, e1, nx) else: raise NotImplementedError @@ -229,7 +228,7 @@ def plot_1Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, ylab='charge' return fig -def plot_2Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(1, 0, 0), nx=20, ny=20, zlab='charge', plot_file='', +def plot_2Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, 0), nx=20, ny=20, zlab='charge', plot_file='', method='FFT', format=''): """ This function calculates a 2D plot of the input charge (or else), starting from the @@ -257,12 +256,12 @@ def plot_2Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(1, 0, 0), nx=20, try: from cythonfn import FFTinterp2D_Cython - X, Y, Z = FFTinterp2D_Cython(charge, G, a, x0, e1, e2, nx, ny) + X, Y, Z = FFTinterp2D_Cython(charge, G, struct_info['a'], x0, e1, e2, nx, ny) except ImportError: - X, Y, Z = FFTinterp2D(charge, G, a, x0, e1, e2, nx, ny) + X, Y, Z = FFTinterp2D(charge, G, struct_info['a'], x0, e1, e2, nx, ny) if plot_file != '': - write_2Dcharge_file(...) + write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx, ny, plot_file, format) fig = plt.figure() ax = fig.gca(projection='3d') @@ -285,7 +284,8 @@ def plot_2Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(1, 0, 0), nx=20, return fig -def plot_3Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(1, 0, 0), nx=20, ny=20, zlab='charge', plot_file=''): +def plot_3Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, 0), e3=(0, 0, 1), nx=20, ny=20, nz=20, + zlab='charge', plot_file='', method='FFT', format=''): # TODO: this is to be implemented pass diff --git a/postqe/writecharge.py b/postqe/writecharge.py index 1df66b1..317e853 100644 --- a/postqe/writecharge.py +++ b/postqe/writecharge.py @@ -7,6 +7,7 @@ ################################################################################ import numpy as np +from .xsf_format import xsf_struct, xsf_datagrid_2d def write_1Dcharge_file(X, Y, nx=1, plot_file = 'chargeplot1D.out'): """ @@ -32,11 +33,7 @@ def write_1Dcharge_file(X, Y, nx=1, plot_file = 'chargeplot1D.out'): f.write("{:.9E} ".format(X[i]) + "{:.9E}\n".format(Y[i].real)) -def write_2Dcharge_file_XSFformat(): - pass - - -def write_2Dcharge_file(X, Y, Z, a, x0, e1, e2, nx=1, ny=1, plot_file = 'chargeplot2D.out', format=0): +def write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx=1, ny=1, plot_file = 'chargeplot2D.out', format='gnuplot'): """ Writes a file for a 2D plot of the charge in different formats. @@ -52,6 +49,7 @@ def write_2Dcharge_file(X, Y, Z, a, x0, e1, e2, nx=1, ny=1, plot_file = 'chargep :return: """ + a = struct_info['a'] # normalize e1 m1 = np.linalg.norm(e1) if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 @@ -76,36 +74,43 @@ def write_2Dcharge_file(X, Y, Z, a, x0, e1, e2, nx=1, ny=1, plot_file = 'chargep charge_im = np.sum(np.abs(Z.imag)) / nx / ny f = open(plot_file,'w') - f.write('# Minimun, maximun, imaginary charge: '+"{:.9E} ".format(charge_min) + "{:.9E}\n".format(charge_max)+ - "{:.9E}\n".format(charge_im)+'\n') - f.write('# 2D plot, nx = '+ str(nx) +' ny = '+ str(ny) +'\n') - f.write('X'+16*' '+'Y'+16*' '+'Z\n') if format == 'gnuplot': + f.write( + '# Minimun, maximun, imaginary charge: ' + "{:.9E} ".format(charge_min) + "{:.9E} ".format(charge_max) + + "{:.9E}\n".format(charge_im)) + f.write('# 2D plot, nx = ' + str(nx) + ' ny = ' + str(ny) + '\n') + f.write('# X' + 16 * ' ' + 'Y' + 16 * ' ' + 'Z\n') for i in range(0,nx): for j in range(0,ny): - f.write("{:.9E} ".format(X[i, j]) + "{:.9E} ".format(Y[i, j]) + "{:.9E}\n".format(Z[i, j])) + f.write("{:.9E} ".format(X[i, j]) + "{:.9E} ".format(Y[i, j]) + "{:.9E}\n".format(Z[i, j].real)) + f.write("\n") + elif format == 'contour.x': + pass elif format == 'plotrho.x': f.write("{:4d} {:4d}\n".format( (nx-1), (ny-1) )) for i in range(0, nx): - f.write(("{:8.4f}\n").format((deltax * (nx - 1)))) - if i // 8: + f.write(("{:8.4f}").format((deltax * i))) + if ((i+1) % 8) == 0 or i==nx-1: f.write("\n") for i in range(0, ny): - f.write("{:8.4f}\n".format((deltay * (ny - 1)))) - if i // 8: + f.write("{:8.4f}".format((deltay * i))) + if ((i+1) % 8) == 0 or i==ny-1: f.write("\n") for i in range(0, nx): for j in range(0,ny): - f.write("{:12.4E}\n".format(Z[i, j])) - if i // 6: + f.write("{:12.4E}".format(Z[i, j].real)) + if ((i*ny + j +1) % 6) == 0: f.write("\n") + f.write("\n") f.write("{:8.4f} {:8.4f} {:8.4f}\n".format(x0[0],x0[1],x0[2])) f.write("{:8.4f} {:8.4f} {:8.4f}\n".format(m1 * e1[0], m1 * e1[1], m1 * e1[2])) f.write("{:8.4f} {:8.4f} {:8.4f}\n".format(m2 * e2[0], m2 * e2[1], m2 * e2[2])) + #TODO: add structural info (not clear if it should be done) elif format == 'xsf': - #TODO: implement XSF format for xcrysden - write_2Dcharge_file_XSFformat() + one = xsf_struct(struct_info) + two = xsf_datagrid_2d(Z, nx, ny, m1, m2, x0, e1, e2, struct_info) + f.write(one+two) else: print('Format not implemented') raise NotImplementedError diff --git a/postqe/xsf_format.py b/postqe/xsf_format.py new file mode 100644 index 0000000..d5ba33c --- /dev/null +++ b/postqe/xsf_format.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +A tentative collection of functions for the XSF format (XCrySDen). See http://www.xcrysden.org/doc/XSF.html for more +info. + +This is essentially a Python version of the original Fortran routines written by Tone Kokalj (file xsf.f90 in Quantum +Espresso). +""" +################################################################################ + +from .constants import BOHR_RADIUS_SI + +def xsf_struct(struct_info): + """ + Create a string with XSF format for structural info (periodic systems) + :param struct_info: a dictionary containing the structural parameters + :return: a string formatted as the XSF format + """ + + #TODO: check a vectors. It seems right here but it is different from pp.x (why?) + xsf = ' CRYSTAL\n PRIMVEC\n' + a = struct_info['a']*struct_info['alat']*BOHR_RADIUS_SI*1e9 # convert in Ang + for at in a: + xsf += '{:15.9f} {:15.9f} {:15.9f}\n'.format(float(at[0]),float(at[1]),float(at[2])) + xsf += ' PRIMCOORD\n' + xsf += ' {:4d} 1\n'.format(int(struct_info['nat'])) + for at in struct_info['atomic_positions']: + xsf += ' {:3s} {:15.9f} {:15.9f} {:15.9f}\n'.format(at['@name'], at['$'][0], at['$'][1], at['$'][2]) + return xsf + +def xsf_datagrid_2d(Z, nx, ny, m1, m2, x0, e1, e2, struct_info): + + xsf = 'BEGIN_BLOCK_DATAGRID_2D\n2D_PWSCF\nDATAGRID_2D_UNKNOWN\n' + xsf += '{:4d} {:4d}\n'.format(nx, ny) + fact = struct_info['alat']*BOHR_RADIUS_SI*1e9 + for x in x0: + xsf += '{:15.9f} '.format(x*fact) + xsf += '\n' + for x in e1: + xsf += '{:15.9f} '.format(x*m1*fact) + xsf += '\n' + for x in e2: + xsf += '{:15.9f} '.format(x*m2*fact) + xsf += '\n' + for i in range(0, nx): + for j in range(0, ny): + xsf += '{:12.4E}'.format(Z[i, j].real) + if ((i * ny + j + 1) % 6) == 0: + xsf += '\n' + xsf += '\n' + xsf += 'END_DATAGRID_2D\nEND_BLOCK_DATAGRID_2D' + return xsf \ No newline at end of file diff --git a/tests/Si/reference/sipp0.out b/tests/Si/reference/sipp0.out index 3c95d4e..2a6970e 100644 --- a/tests/Si/reference/sipp0.out +++ b/tests/Si/reference/sipp0.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 11Oct2017 at 11:12: 2 + Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:41 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -34,7 +34,7 @@ POST-PROC : 0.11s CPU 0.12s WALL - This run was terminated on: 11:12: 2 11Oct2017 + This run was terminated on: 14:50:41 11Oct2017 =------------------------------------------------------------------------------= JOB DONE. diff --git a/tests/Si/reference/sipp1.out b/tests/Si/reference/sipp1.out index 69eaa26..0978cbf 100644 --- a/tests/Si/reference/sipp1.out +++ b/tests/Si/reference/sipp1.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 17Jul2017 at 11:16:15 + Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:41 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -8,8 +8,7 @@ in publications or presentations arising from this work. More details at http://www.quantum-espresso.org/quote - Parallel version (MPI), running on 4 processors - R & G space division: proc/nbgrp/npool/nimage = 4 + Parallel version (MPI), running on 1 processors Info: using nr1, nr2, nr3 values from input @@ -21,11 +20,9 @@ Please, verify this is what you really want - Parallelization info + G-vector sticks info -------------------- sticks: dense smooth PW G-vecs: dense smooth PW - Min 87 87 30 1068 1068 216 - Max 88 88 31 1071 1071 218 Sum 349 349 121 4279 4279 869 @@ -34,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.18s CPU 0.21s WALL + POST-PROC : 0.12s CPU 0.13s WALL - This run was terminated on: 11:16:15 17Jul2017 + This run was terminated on: 14:50:42 11Oct2017 =------------------------------------------------------------------------------= JOB DONE. diff --git a/tests/Si/reference/sipp11.out b/tests/Si/reference/sipp11.out index a5a38f8..e84acc8 100644 --- a/tests/Si/reference/sipp11.out +++ b/tests/Si/reference/sipp11.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 17Jul2017 at 11:16:31 + Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:42 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -8,8 +8,7 @@ in publications or presentations arising from this work. More details at http://www.quantum-espresso.org/quote - Parallel version (MPI), running on 4 processors - R & G space division: proc/nbgrp/npool/nimage = 4 + Parallel version (MPI), running on 1 processors Info: using nr1, nr2, nr3 values from input @@ -21,11 +20,9 @@ Please, verify this is what you really want - Parallelization info + G-vector sticks info -------------------- sticks: dense smooth PW G-vecs: dense smooth PW - Min 87 87 30 1068 1068 216 - Max 88 88 31 1071 1071 218 Sum 349 349 121 4279 4279 869 @@ -34,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.15s CPU 0.20s WALL + POST-PROC : 0.12s CPU 0.12s WALL - This run was terminated on: 11:16:31 17Jul2017 + This run was terminated on: 14:50:42 11Oct2017 =------------------------------------------------------------------------------= JOB DONE. diff --git a/tests/Si/reference/sipp2.out b/tests/Si/reference/sipp2.out index a26494c..2ece434 100644 --- a/tests/Si/reference/sipp2.out +++ b/tests/Si/reference/sipp2.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 17Jul2017 at 11:16:20 + Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:42 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -8,8 +8,7 @@ in publications or presentations arising from this work. More details at http://www.quantum-espresso.org/quote - Parallel version (MPI), running on 4 processors - R & G space division: proc/nbgrp/npool/nimage = 4 + Parallel version (MPI), running on 1 processors Info: using nr1, nr2, nr3 values from input @@ -21,11 +20,9 @@ Please, verify this is what you really want - Parallelization info + G-vector sticks info -------------------- sticks: dense smooth PW G-vecs: dense smooth PW - Min 87 87 30 1068 1068 216 - Max 88 88 31 1071 1071 218 Sum 349 349 121 4279 4279 869 @@ -34,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.16s CPU 0.17s WALL + POST-PROC : 0.10s CPU 0.11s WALL - This run was terminated on: 11:16:20 17Jul2017 + This run was terminated on: 14:50:42 11Oct2017 =------------------------------------------------------------------------------= JOB DONE. diff --git a/tests/Si/reference/sipp6.out b/tests/Si/reference/sipp6.out index 0b30510..0a41a0e 100644 --- a/tests/Si/reference/sipp6.out +++ b/tests/Si/reference/sipp6.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 17Jul2017 at 11:16:26 + Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:42 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -8,8 +8,7 @@ in publications or presentations arising from this work. More details at http://www.quantum-espresso.org/quote - Parallel version (MPI), running on 4 processors - R & G space division: proc/nbgrp/npool/nimage = 4 + Parallel version (MPI), running on 1 processors Info: using nr1, nr2, nr3 values from input @@ -21,11 +20,9 @@ Please, verify this is what you really want - Parallelization info + G-vector sticks info -------------------- sticks: dense smooth PW G-vecs: dense smooth PW - Min 87 87 30 1068 1068 216 - Max 88 88 31 1071 1071 218 Sum 349 349 121 4279 4279 869 @@ -34,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.16s CPU 0.21s WALL + POST-PROC : 0.11s CPU 0.12s WALL - This run was terminated on: 11:16:26 17Jul2017 + This run was terminated on: 14:50:42 11Oct2017 =------------------------------------------------------------------------------= JOB DONE. From 33f070590da8828b4b2af955d72106f704e9369b Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Thu, 12 Oct 2017 10:21:21 +0200 Subject: [PATCH 006/166] small fixes, a (temporary) test file added --- my_tests/work/test.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 my_tests/work/test.py diff --git a/my_tests/work/test.py b/my_tests/work/test.py new file mode 100644 index 0000000..8e6c2af --- /dev/null +++ b/my_tests/work/test.py @@ -0,0 +1,20 @@ + + +from postqe import get_charge + +charge = get_charge(prefix='Si', schema='../../schemas/qes.xsd') + +figure = charge.plot(x0=(0, 0, 0), e1=(1, 0, 0), nx=10, dim=1, ifmagn='total', + plot_file='postqeiflag0out0', method='spherical', format='gnuplot') +figure = charge.plot(x0=(0, 0, 0), e1=(1, 0, 0), nx=10, dim=1, ifmagn='total', + plot_file='postqeiflag1out0', method='FFT', format='gnuplot') +figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', + plot_file='postqeiflag2out7', method='FFT', format='gnuplot') +figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', + plot_file='postqeiflag2out2', method='FFT', format='plotrho.x') +figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', + plot_file='postqeiflag2out3', method='FFT', format='xsf') + + +figure.savefig("figure_1.png") +figure.savefig("figure_1.pdf", format='pdf') \ No newline at end of file From 83af045693b827abf12444b4032bfdde9d4835ab Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Thu, 12 Oct 2017 10:25:06 +0200 Subject: [PATCH 007/166] small fixes in charge.py missing in previous commit some additional output files created with pp.x for Si added to check output formats --- postqe/charge.py | 25 +- tests/Si/reference/ppout0iflag0out0.out | 10 + tests/Si/reference/ppout0iflag1out0.out | 10 + tests/Si/reference/ppout0iflag2out1.out | 26 + tests/Si/reference/ppout0iflag2out2.out | 33 + tests/Si/reference/ppout0iflag2out3.out | 35 + tests/Si/reference/ppout0iflag2out7.out | 110 + tests/Si/reference/ppout0iflag3out3.out | 186 ++ tests/Si/reference/ppout0iflag3out5.out | 2624 +++++++++++++++++++++++ tests/Si/reference/ppout0iflag4out0.out | 101 + tests/Si/reference/ppout0iflag4out1.out | 26 + tests/Si/reference/run_example | 43 + tests/Si/reference/sipp0biflag0out0.in | 15 + tests/Si/reference/sipp0biflag1out0.in | 15 + tests/Si/reference/sipp0biflag2out1.in | 19 + tests/Si/reference/sipp0biflag2out2.in | 19 + tests/Si/reference/sipp0biflag2out3.in | 19 + tests/Si/reference/sipp0biflag2out7.in | 19 + tests/Si/reference/sipp0biflag3out3.in | 23 + tests/Si/reference/sipp0biflag3out5.in | 23 + tests/Si/reference/sipp0biflag4out0.in | 14 + tests/Si/reference/sipp0biflag4out1.in | 14 + 22 files changed, 3400 insertions(+), 9 deletions(-) create mode 100644 tests/Si/reference/ppout0iflag0out0.out create mode 100644 tests/Si/reference/ppout0iflag1out0.out create mode 100644 tests/Si/reference/ppout0iflag2out1.out create mode 100644 tests/Si/reference/ppout0iflag2out2.out create mode 100644 tests/Si/reference/ppout0iflag2out3.out create mode 100644 tests/Si/reference/ppout0iflag2out7.out create mode 100644 tests/Si/reference/ppout0iflag3out3.out create mode 100644 tests/Si/reference/ppout0iflag3out5.out create mode 100644 tests/Si/reference/ppout0iflag4out0.out create mode 100644 tests/Si/reference/ppout0iflag4out1.out create mode 100755 tests/Si/reference/run_example create mode 100755 tests/Si/reference/sipp0biflag0out0.in create mode 100755 tests/Si/reference/sipp0biflag1out0.in create mode 100755 tests/Si/reference/sipp0biflag2out1.in create mode 100755 tests/Si/reference/sipp0biflag2out2.in create mode 100755 tests/Si/reference/sipp0biflag2out3.in create mode 100755 tests/Si/reference/sipp0biflag2out7.in create mode 100755 tests/Si/reference/sipp0biflag3out3.in create mode 100755 tests/Si/reference/sipp0biflag3out5.in create mode 100755 tests/Si/reference/sipp0biflag4out0.in create mode 100755 tests/Si/reference/sipp0biflag4out1.in diff --git a/postqe/charge.py b/postqe/charge.py index 3d888a1..5219a4a 100644 --- a/postqe/charge.py +++ b/postqe/charge.py @@ -181,7 +181,7 @@ def write(self, filename): write_charge(filename + '_down', charge_down, header) - def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (1., 0., 0.), ny=50, dim=1, ifmagn='total', + def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), ny=50, dim=1, ifmagn='total', plot_file='', method='FFT', format='gnuplot'): """ Plot a 1D or 2D section of the charge from x0 along e1 (e2) direction(s) using Fourier interpolation. @@ -225,21 +225,28 @@ def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (1., 0., 0.), elif dim == 2: # 2D section fig = plot_2Dcharge(charge_up, G, struct_info, x0, e1, e2, nx, ny, 'charge', plot_file, method, format) else: # 3D section - fig = plot_3Dcharge(self.charge, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, method, + fig = plot_3Dcharge(charge_up, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, method, format) fig.show() elif ifmagn == 'down': charge_down = (self.charge - self.charge_diff) / 2.0 if dim == 1: # 1D section - fig = plot_1Dcharge(charge_down, G, a, x0, e1, nx) - else: - fig = plot_2Dcharge(charge_down, G, a, x0, e1, e2, nx, ny) + fig = plot_1Dcharge(charge_down, G, struct_info, x0, e1, nx, 'charge', plot_file, method, format) + elif dim == 2: # 2D section + fig = plot_2Dcharge(charge_down, G, struct_info, x0, e1, e2, nx, ny, 'charge', plot_file, method, format) + else: # 3D section + fig = plot_3Dcharge(charge_down, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, method, + format) fig.show() else: - if dim == 1: # 1D section - fig = plot_1Dcharge(self.charge, G, a, x0, e1, nx) - else: - fig = plot_2Dcharge(self.charge, G, a, x0, e1, e2, nx, ny) + if dim == 1: # 1D section ylab='charge', plot_file='', format='', method='FFT' + fig = plot_1Dcharge(self.charge, G, struct_info, x0, e1, nx, 'charge', plot_file, method, format) + elif dim == 2: # 2D section + fig = plot_2Dcharge(self.charge, G, struct_info, x0, e1, e2, nx, ny, 'charge', plot_file, method, + format) + else: # 3D section + fig = plot_3Dcharge(self.charge, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, + method, format) fig.show() return fig diff --git a/tests/Si/reference/ppout0iflag0out0.out b/tests/Si/reference/ppout0iflag0out0.out new file mode 100644 index 0000000..fbccece --- /dev/null +++ b/tests/Si/reference/ppout0iflag0out0.out @@ -0,0 +1,10 @@ + 0.0000000000 0.0078980823 0.0000000000 + 0.1111111111 0.6703152522 0.9757803952 + 0.2222222222 0.5448514894 4.1483497195 + 0.3333333333 0.3072482681 8.1737116956 + 0.4444444444 0.2702498602 14.4681712537 + 0.5555555556 0.3834135094 28.4215828961 + 0.6666666667 0.4136043492 50.0966566823 + 0.7777777778 0.4301052173 80.7758388157 + 0.8888888889 0.3708952415 115.3303077259 + 1.0000000000 0.3250348449 153.6558163538 diff --git a/tests/Si/reference/ppout0iflag1out0.out b/tests/Si/reference/ppout0iflag1out0.out new file mode 100644 index 0000000..948f1e9 --- /dev/null +++ b/tests/Si/reference/ppout0iflag1out0.out @@ -0,0 +1,10 @@ + 0.0000000000 0.0006285094 + 0.1111111111 0.0511411061 + 0.2222222222 0.0336934255 + 0.3333333333 0.0102110724 + 0.4444444444 0.0040947973 + 0.5555555556 0.0040947973 + 0.6666666667 0.0102110724 + 0.7777777778 0.0336934255 + 0.8888888889 0.0511411061 + 1.0000000000 0.0006285094 diff --git a/tests/Si/reference/ppout0iflag2out1.out b/tests/Si/reference/ppout0iflag2out1.out new file mode 100644 index 0000000..e3aabe4 --- /dev/null +++ b/tests/Si/reference/ppout0iflag2out1.out @@ -0,0 +1,26 @@ + 10 10 1 0.11111111111111E+00 0.11111111111111E+00 + 0.62850941690298E-03 0.51141106095090E-01 0.33693425456128E-01 0.10211072391642E-01 + 0.40947972594018E-02 0.40947972594018E-02 0.10211072391642E-01 0.33693425456128E-01 + 0.51141106095090E-01 0.62850941690297E-03 0.51141106095090E-01 0.62069419381034E-01 + 0.32527252229737E-01 0.12801383123624E-01 0.65977773611457E-02 0.65977773611457E-02 + 0.12801383123624E-01 0.32527252229737E-01 0.62069419381034E-01 0.51141106095090E-01 + 0.33693425456128E-01 0.32527252229737E-01 0.26889993268617E-01 0.21907694159419E-01 + 0.19206053035692E-01 0.19206053035692E-01 0.21907694159419E-01 0.26889993268617E-01 + 0.32527252229737E-01 0.33693425456128E-01 0.10211072391642E-01 0.12801383123624E-01 + 0.21907694159419E-01 0.39996334081158E-01 0.53460894657757E-01 0.53460894657757E-01 + 0.39996334081159E-01 0.21907694159419E-01 0.12801383123624E-01 0.10211072391642E-01 + 0.40947972594019E-02 0.65977773611457E-02 0.19206053035692E-01 0.53460894657757E-01 + 0.31183320215078E-01 0.31183320215078E-01 0.53460894657757E-01 0.19206053035692E-01 + 0.65977773611457E-02 0.40947972594019E-02 0.40947972594018E-02 0.65977773611457E-02 + 0.19206053035692E-01 0.53460894657757E-01 0.31183320215078E-01 0.31183320215078E-01 + 0.53460894657757E-01 0.19206053035692E-01 0.65977773611457E-02 0.40947972594018E-02 + 0.10211072391642E-01 0.12801383123624E-01 0.21907694159419E-01 0.39996334081159E-01 + 0.53460894657757E-01 0.53460894657757E-01 0.39996334081159E-01 0.21907694159419E-01 + 0.12801383123624E-01 0.10211072391642E-01 0.33693425456128E-01 0.32527252229737E-01 + 0.26889993268617E-01 0.21907694159419E-01 0.19206053035692E-01 0.19206053035692E-01 + 0.21907694159419E-01 0.26889993268617E-01 0.32527252229737E-01 0.33693425456128E-01 + 0.51141106095090E-01 0.62069419381035E-01 0.32527252229737E-01 0.12801383123624E-01 + 0.65977773611457E-02 0.65977773611457E-02 0.12801383123624E-01 0.32527252229737E-01 + 0.62069419381035E-01 0.51141106095090E-01 0.62850941690299E-03 0.51141106095090E-01 + 0.33693425456128E-01 0.10211072391642E-01 0.40947972594018E-02 0.40947972594018E-02 + 0.10211072391642E-01 0.33693425456128E-01 0.51141106095090E-01 0.62850941690299E-03 diff --git a/tests/Si/reference/ppout0iflag2out2.out b/tests/Si/reference/ppout0iflag2out2.out new file mode 100644 index 0000000..122ca10 --- /dev/null +++ b/tests/Si/reference/ppout0iflag2out2.out @@ -0,0 +1,33 @@ + 9 9 + 0.0000 0.1111 0.2222 0.3333 0.4444 0.5556 0.6667 0.7778 + 0.8889 1.0000 + 0.0000 0.1111 0.2222 0.3333 0.4444 0.5556 0.6667 0.7778 + 0.8889 1.0000 + 0.6285E-03 0.5114E-01 0.3369E-01 0.1021E-01 0.4095E-02 0.4095E-02 + 0.1021E-01 0.3369E-01 0.5114E-01 0.6285E-03 0.5114E-01 0.6207E-01 + 0.3253E-01 0.1280E-01 0.6598E-02 0.6598E-02 0.1280E-01 0.3253E-01 + 0.6207E-01 0.5114E-01 0.3369E-01 0.3253E-01 0.2689E-01 0.2191E-01 + 0.1921E-01 0.1921E-01 0.2191E-01 0.2689E-01 0.3253E-01 0.3369E-01 + 0.1021E-01 0.1280E-01 0.2191E-01 0.4000E-01 0.5346E-01 0.5346E-01 + 0.4000E-01 0.2191E-01 0.1280E-01 0.1021E-01 0.4095E-02 0.6598E-02 + 0.1921E-01 0.5346E-01 0.3118E-01 0.3118E-01 0.5346E-01 0.1921E-01 + 0.6598E-02 0.4095E-02 0.4095E-02 0.6598E-02 0.1921E-01 0.5346E-01 + 0.3118E-01 0.3118E-01 0.5346E-01 0.1921E-01 0.6598E-02 0.4095E-02 + 0.1021E-01 0.1280E-01 0.2191E-01 0.4000E-01 0.5346E-01 0.5346E-01 + 0.4000E-01 0.2191E-01 0.1280E-01 0.1021E-01 0.3369E-01 0.3253E-01 + 0.2689E-01 0.2191E-01 0.1921E-01 0.1921E-01 0.2191E-01 0.2689E-01 + 0.3253E-01 0.3369E-01 0.5114E-01 0.6207E-01 0.3253E-01 0.1280E-01 + 0.6598E-02 0.6598E-02 0.1280E-01 0.3253E-01 0.6207E-01 0.5114E-01 + 0.6285E-03 0.5114E-01 0.3369E-01 0.1021E-01 0.4095E-02 0.4095E-02 + 0.1021E-01 0.3369E-01 0.5114E-01 0.6285E-03 + 0.0000 0.0000 0.0000 + 1.0000 0.0000 0.0000 + 0.0000 1.0000 0.0000 + 2 + 0.0000 0.0000 0.0000 1 + 0.2500 0.2500 0.2500 1 + 10.200000 + -0.500000 0.000000 0.500000 + 0.000000 0.500000 0.500000 + -0.500000 0.500000 0.000000 + diff --git a/tests/Si/reference/ppout0iflag2out3.out b/tests/Si/reference/ppout0iflag2out3.out new file mode 100644 index 0000000..9db8681 --- /dev/null +++ b/tests/Si/reference/ppout0iflag2out3.out @@ -0,0 +1,35 @@ + CRYSTAL + PRIMVEC + -2.698803764 0.000000000 2.698803764 + 0.000000000 2.698803764 2.698803764 + -2.698803764 2.698803764 0.000000000 + PRIMCOORD + 2 1 +Si 0.000000000 0.000000000 0.000000000 +Si 1.349401882 1.349401882 1.349401882 +BEGIN_BLOCK_DATAGRID_2D +2D_PWSCF +DATAGRID_2D_UNKNOWN + 10 10 + 0.000000 0.000000 0.000000 + 5.397608 0.000000 0.000000 + 0.000000 5.397608 0.000000 + 0.628509E-03 0.511411E-01 0.336934E-01 0.102111E-01 0.409480E-02 0.409480E-02 + 0.102111E-01 0.336934E-01 0.511411E-01 0.628509E-03 0.511411E-01 0.620694E-01 + 0.325273E-01 0.128014E-01 0.659778E-02 0.659778E-02 0.128014E-01 0.325273E-01 + 0.620694E-01 0.511411E-01 0.336934E-01 0.325273E-01 0.268900E-01 0.219077E-01 + 0.192061E-01 0.192061E-01 0.219077E-01 0.268900E-01 0.325273E-01 0.336934E-01 + 0.102111E-01 0.128014E-01 0.219077E-01 0.399963E-01 0.534609E-01 0.534609E-01 + 0.399963E-01 0.219077E-01 0.128014E-01 0.102111E-01 0.409480E-02 0.659778E-02 + 0.192061E-01 0.534609E-01 0.311833E-01 0.311833E-01 0.534609E-01 0.192061E-01 + 0.659778E-02 0.409480E-02 0.409480E-02 0.659778E-02 0.192061E-01 0.534609E-01 + 0.311833E-01 0.311833E-01 0.534609E-01 0.192061E-01 0.659778E-02 0.409480E-02 + 0.102111E-01 0.128014E-01 0.219077E-01 0.399963E-01 0.534609E-01 0.534609E-01 + 0.399963E-01 0.219077E-01 0.128014E-01 0.102111E-01 0.336934E-01 0.325273E-01 + 0.268900E-01 0.219077E-01 0.192061E-01 0.192061E-01 0.219077E-01 0.268900E-01 + 0.325273E-01 0.336934E-01 0.511411E-01 0.620694E-01 0.325273E-01 0.128014E-01 + 0.659778E-02 0.659778E-02 0.128014E-01 0.325273E-01 0.620694E-01 0.511411E-01 + 0.628509E-03 0.511411E-01 0.336934E-01 0.102111E-01 0.409480E-02 0.409480E-02 + 0.102111E-01 0.336934E-01 0.511411E-01 0.628509E-03 +END_DATAGRID_2D +END_BLOCK_DATAGRID_2D diff --git a/tests/Si/reference/ppout0iflag2out7.out b/tests/Si/reference/ppout0iflag2out7.out new file mode 100644 index 0000000..133295e --- /dev/null +++ b/tests/Si/reference/ppout0iflag2out7.out @@ -0,0 +1,110 @@ + 0.00000000E+00 0.00000000E+00 0.62850942E-03 + 0.00000000E+00 0.11333333E+01 0.51141106E-01 + 0.00000000E+00 0.22666667E+01 0.33693425E-01 + 0.00000000E+00 0.34000000E+01 0.10211072E-01 + 0.00000000E+00 0.45333333E+01 0.40947973E-02 + 0.00000000E+00 0.56666667E+01 0.40947973E-02 + 0.00000000E+00 0.68000000E+01 0.10211072E-01 + 0.00000000E+00 0.79333333E+01 0.33693425E-01 + 0.00000000E+00 0.90666667E+01 0.51141106E-01 + 0.00000000E+00 0.10200000E+02 0.62850942E-03 + + 0.11333333E+01 0.00000000E+00 0.51141106E-01 + 0.11333333E+01 0.11333333E+01 0.62069419E-01 + 0.11333333E+01 0.22666667E+01 0.32527252E-01 + 0.11333333E+01 0.34000000E+01 0.12801383E-01 + 0.11333333E+01 0.45333333E+01 0.65977774E-02 + 0.11333333E+01 0.56666667E+01 0.65977774E-02 + 0.11333333E+01 0.68000000E+01 0.12801383E-01 + 0.11333333E+01 0.79333333E+01 0.32527252E-01 + 0.11333333E+01 0.90666667E+01 0.62069419E-01 + 0.11333333E+01 0.10200000E+02 0.51141106E-01 + + 0.22666667E+01 0.00000000E+00 0.33693425E-01 + 0.22666667E+01 0.11333333E+01 0.32527252E-01 + 0.22666667E+01 0.22666667E+01 0.26889993E-01 + 0.22666667E+01 0.34000000E+01 0.21907694E-01 + 0.22666667E+01 0.45333333E+01 0.19206053E-01 + 0.22666667E+01 0.56666667E+01 0.19206053E-01 + 0.22666667E+01 0.68000000E+01 0.21907694E-01 + 0.22666667E+01 0.79333333E+01 0.26889993E-01 + 0.22666667E+01 0.90666667E+01 0.32527252E-01 + 0.22666667E+01 0.10200000E+02 0.33693425E-01 + + 0.34000000E+01 0.00000000E+00 0.10211072E-01 + 0.34000000E+01 0.11333333E+01 0.12801383E-01 + 0.34000000E+01 0.22666667E+01 0.21907694E-01 + 0.34000000E+01 0.34000000E+01 0.39996334E-01 + 0.34000000E+01 0.45333333E+01 0.53460895E-01 + 0.34000000E+01 0.56666667E+01 0.53460895E-01 + 0.34000000E+01 0.68000000E+01 0.39996334E-01 + 0.34000000E+01 0.79333333E+01 0.21907694E-01 + 0.34000000E+01 0.90666667E+01 0.12801383E-01 + 0.34000000E+01 0.10200000E+02 0.10211072E-01 + + 0.45333333E+01 0.00000000E+00 0.40947973E-02 + 0.45333333E+01 0.11333333E+01 0.65977774E-02 + 0.45333333E+01 0.22666667E+01 0.19206053E-01 + 0.45333333E+01 0.34000000E+01 0.53460895E-01 + 0.45333333E+01 0.45333333E+01 0.31183320E-01 + 0.45333333E+01 0.56666667E+01 0.31183320E-01 + 0.45333333E+01 0.68000000E+01 0.53460895E-01 + 0.45333333E+01 0.79333333E+01 0.19206053E-01 + 0.45333333E+01 0.90666667E+01 0.65977774E-02 + 0.45333333E+01 0.10200000E+02 0.40947973E-02 + + 0.56666667E+01 0.00000000E+00 0.40947973E-02 + 0.56666667E+01 0.11333333E+01 0.65977774E-02 + 0.56666667E+01 0.22666667E+01 0.19206053E-01 + 0.56666667E+01 0.34000000E+01 0.53460895E-01 + 0.56666667E+01 0.45333333E+01 0.31183320E-01 + 0.56666667E+01 0.56666667E+01 0.31183320E-01 + 0.56666667E+01 0.68000000E+01 0.53460895E-01 + 0.56666667E+01 0.79333333E+01 0.19206053E-01 + 0.56666667E+01 0.90666667E+01 0.65977774E-02 + 0.56666667E+01 0.10200000E+02 0.40947973E-02 + + 0.68000000E+01 0.00000000E+00 0.10211072E-01 + 0.68000000E+01 0.11333333E+01 0.12801383E-01 + 0.68000000E+01 0.22666667E+01 0.21907694E-01 + 0.68000000E+01 0.34000000E+01 0.39996334E-01 + 0.68000000E+01 0.45333333E+01 0.53460895E-01 + 0.68000000E+01 0.56666667E+01 0.53460895E-01 + 0.68000000E+01 0.68000000E+01 0.39996334E-01 + 0.68000000E+01 0.79333333E+01 0.21907694E-01 + 0.68000000E+01 0.90666667E+01 0.12801383E-01 + 0.68000000E+01 0.10200000E+02 0.10211072E-01 + + 0.79333333E+01 0.00000000E+00 0.33693425E-01 + 0.79333333E+01 0.11333333E+01 0.32527252E-01 + 0.79333333E+01 0.22666667E+01 0.26889993E-01 + 0.79333333E+01 0.34000000E+01 0.21907694E-01 + 0.79333333E+01 0.45333333E+01 0.19206053E-01 + 0.79333333E+01 0.56666667E+01 0.19206053E-01 + 0.79333333E+01 0.68000000E+01 0.21907694E-01 + 0.79333333E+01 0.79333333E+01 0.26889993E-01 + 0.79333333E+01 0.90666667E+01 0.32527252E-01 + 0.79333333E+01 0.10200000E+02 0.33693425E-01 + + 0.90666667E+01 0.00000000E+00 0.51141106E-01 + 0.90666667E+01 0.11333333E+01 0.62069419E-01 + 0.90666667E+01 0.22666667E+01 0.32527252E-01 + 0.90666667E+01 0.34000000E+01 0.12801383E-01 + 0.90666667E+01 0.45333333E+01 0.65977774E-02 + 0.90666667E+01 0.56666667E+01 0.65977774E-02 + 0.90666667E+01 0.68000000E+01 0.12801383E-01 + 0.90666667E+01 0.79333333E+01 0.32527252E-01 + 0.90666667E+01 0.90666667E+01 0.62069419E-01 + 0.90666667E+01 0.10200000E+02 0.51141106E-01 + + 0.10200000E+02 0.00000000E+00 0.62850942E-03 + 0.10200000E+02 0.11333333E+01 0.51141106E-01 + 0.10200000E+02 0.22666667E+01 0.33693425E-01 + 0.10200000E+02 0.34000000E+01 0.10211072E-01 + 0.10200000E+02 0.45333333E+01 0.40947973E-02 + 0.10200000E+02 0.56666667E+01 0.40947973E-02 + 0.10200000E+02 0.68000000E+01 0.10211072E-01 + 0.10200000E+02 0.79333333E+01 0.33693425E-01 + 0.10200000E+02 0.90666667E+01 0.51141106E-01 + 0.10200000E+02 0.10200000E+02 0.62850942E-03 + diff --git a/tests/Si/reference/ppout0iflag3out3.out b/tests/Si/reference/ppout0iflag3out3.out new file mode 100644 index 0000000..3cd37a7 --- /dev/null +++ b/tests/Si/reference/ppout0iflag3out3.out @@ -0,0 +1,186 @@ + CRYSTAL + PRIMVEC + -2.698803764 0.000000000 2.698803764 + 0.000000000 2.698803764 2.698803764 + -2.698803764 2.698803764 0.000000000 + PRIMCOORD + 2 1 +Si 0.000000000 0.000000000 0.000000000 +Si 1.349401882 1.349401882 1.349401882 +BEGIN_BLOCK_DATAGRID_3D +3D_PWSCF +DATAGRID_3D_UNKNOWN + 10 10 10 + 0.000000 0.000000 0.000000 + 5.397608 0.000000 0.000000 + 0.000000 5.397608 0.000000 + 0.000000 0.000000 5.397608 + 0.628509E-03 0.450201E-01 0.418312E-01 0.146461E-01 0.549176E-02 0.355908E-02 + 0.549176E-02 0.146461E-01 0.418312E-01 0.450201E-01 0.450201E-01 0.627919E-01 + 0.394316E-01 0.164374E-01 0.754561E-02 0.549176E-02 0.754561E-02 0.164374E-01 + 0.394316E-01 0.627919E-01 0.418312E-01 0.394316E-01 0.305652E-01 0.214014E-01 + 0.164374E-01 0.146461E-01 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 + 0.146461E-01 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 0.418312E-01 + 0.394316E-01 0.305652E-01 0.214014E-01 0.164374E-01 0.549176E-02 0.754561E-02 + 0.164374E-01 0.394316E-01 0.627919E-01 0.450201E-01 0.627919E-01 0.394316E-01 + 0.164374E-01 0.754561E-02 0.355908E-02 0.549176E-02 0.146461E-01 0.418312E-01 + 0.450201E-01 0.628509E-03 0.450201E-01 0.418312E-01 0.146461E-01 0.549176E-02 + 0.549176E-02 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 0.450201E-01 + 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 0.146461E-01 0.164374E-01 + 0.214014E-01 0.305652E-01 0.394316E-01 0.418312E-01 0.394316E-01 0.305652E-01 + 0.214014E-01 0.164374E-01 0.418312E-01 0.394316E-01 0.305652E-01 0.214014E-01 + 0.164374E-01 0.146461E-01 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 + 0.450201E-01 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 0.549176E-02 + 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 0.450201E-01 0.627919E-01 + 0.394316E-01 0.164374E-01 0.754561E-02 0.549176E-02 0.754561E-02 0.164374E-01 + 0.394316E-01 0.627919E-01 0.627919E-01 0.873984E-01 0.636617E-01 0.320501E-01 + 0.149787E-01 0.754561E-02 0.578432E-02 0.911731E-02 0.208269E-01 0.405973E-01 + 0.394316E-01 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 0.164374E-01 + 0.911731E-02 0.795213E-02 0.115263E-01 0.208269E-01 0.164374E-01 0.320501E-01 + 0.494709E-01 0.676273E-01 0.636617E-01 0.394316E-01 0.208269E-01 0.115263E-01 + 0.795213E-02 0.911731E-02 0.754561E-02 0.149787E-01 0.320501E-01 0.636617E-01 + 0.873984E-01 0.627919E-01 0.405973E-01 0.208269E-01 0.911731E-02 0.578432E-02 + 0.549176E-02 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 0.450201E-01 + 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 0.754561E-02 0.578432E-02 + 0.911731E-02 0.208269E-01 0.405973E-01 0.627919E-01 0.873984E-01 0.636617E-01 + 0.320501E-01 0.149787E-01 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 + 0.208269E-01 0.394316E-01 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 + 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 0.911731E-02 0.164374E-01 + 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 0.627919E-01 0.405973E-01 + 0.208269E-01 0.911731E-02 0.578432E-02 0.754561E-02 0.149787E-01 0.320501E-01 + 0.636617E-01 0.873984E-01 0.418312E-01 0.394316E-01 0.305652E-01 0.214014E-01 + 0.164374E-01 0.146461E-01 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 + 0.394316E-01 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 0.164374E-01 + 0.911731E-02 0.795213E-02 0.115263E-01 0.208269E-01 0.305652E-01 0.676273E-01 + 0.459211E-01 0.298589E-01 0.494709E-01 0.214014E-01 0.795213E-02 0.444635E-02 + 0.531132E-02 0.115263E-01 0.214014E-01 0.494709E-01 0.298589E-01 0.459211E-01 + 0.676273E-01 0.305652E-01 0.115263E-01 0.531132E-02 0.444635E-02 0.795213E-02 + 0.164374E-01 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 0.394316E-01 + 0.208269E-01 0.115263E-01 0.795213E-02 0.911731E-02 0.146461E-01 0.164374E-01 + 0.214014E-01 0.305652E-01 0.394316E-01 0.418312E-01 0.394316E-01 0.305652E-01 + 0.214014E-01 0.164374E-01 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 + 0.208269E-01 0.394316E-01 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 + 0.214014E-01 0.795213E-02 0.444635E-02 0.531132E-02 0.115263E-01 0.305652E-01 + 0.676273E-01 0.459211E-01 0.298589E-01 0.494709E-01 0.305652E-01 0.115263E-01 + 0.531132E-02 0.444635E-02 0.795213E-02 0.214014E-01 0.494709E-01 0.298589E-01 + 0.459211E-01 0.676273E-01 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 + 0.911731E-02 0.164374E-01 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 + 0.146461E-01 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 0.418312E-01 + 0.394316E-01 0.305652E-01 0.214014E-01 0.164374E-01 0.164374E-01 0.320501E-01 + 0.494709E-01 0.676273E-01 0.636617E-01 0.394316E-01 0.208269E-01 0.115263E-01 + 0.795213E-02 0.911731E-02 0.214014E-01 0.494709E-01 0.298589E-01 0.459211E-01 + 0.676273E-01 0.305652E-01 0.115263E-01 0.531132E-02 0.444635E-02 0.795213E-02 + 0.305652E-01 0.676273E-01 0.459211E-01 0.298589E-01 0.494709E-01 0.214014E-01 + 0.795213E-02 0.444635E-02 0.531132E-02 0.115263E-01 0.394316E-01 0.636617E-01 + 0.676273E-01 0.494709E-01 0.320501E-01 0.164374E-01 0.911731E-02 0.795213E-02 + 0.115263E-01 0.208269E-01 0.418312E-01 0.394316E-01 0.305652E-01 0.214014E-01 + 0.164374E-01 0.146461E-01 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 + 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 0.911731E-02 0.164374E-01 + 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 0.305652E-01 0.115263E-01 + 0.531132E-02 0.444635E-02 0.795213E-02 0.214014E-01 0.494709E-01 0.298589E-01 + 0.459211E-01 0.676273E-01 0.214014E-01 0.795213E-02 0.444635E-02 0.531132E-02 + 0.115263E-01 0.305652E-01 0.676273E-01 0.459211E-01 0.298589E-01 0.494709E-01 + 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 0.208269E-01 0.394316E-01 + 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 0.549176E-02 0.754561E-02 + 0.164374E-01 0.394316E-01 0.627919E-01 0.450201E-01 0.627919E-01 0.394316E-01 + 0.164374E-01 0.754561E-02 0.754561E-02 0.149787E-01 0.320501E-01 0.636617E-01 + 0.873984E-01 0.627919E-01 0.405973E-01 0.208269E-01 0.911731E-02 0.578432E-02 + 0.164374E-01 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 0.394316E-01 + 0.208269E-01 0.115263E-01 0.795213E-02 0.911731E-02 0.394316E-01 0.636617E-01 + 0.676273E-01 0.494709E-01 0.320501E-01 0.164374E-01 0.911731E-02 0.795213E-02 + 0.115263E-01 0.208269E-01 0.627919E-01 0.873984E-01 0.636617E-01 0.320501E-01 + 0.149787E-01 0.754561E-02 0.578432E-02 0.911731E-02 0.208269E-01 0.405973E-01 + 0.450201E-01 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 0.549176E-02 + 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 0.627919E-01 0.405973E-01 + 0.208269E-01 0.911731E-02 0.578432E-02 0.754561E-02 0.149787E-01 0.320501E-01 + 0.636617E-01 0.873984E-01 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 + 0.911731E-02 0.164374E-01 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 + 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 0.208269E-01 0.394316E-01 + 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 0.754561E-02 0.578432E-02 + 0.911731E-02 0.208269E-01 0.405973E-01 0.627919E-01 0.873984E-01 0.636617E-01 + 0.320501E-01 0.149787E-01 0.355908E-02 0.549176E-02 0.146461E-01 0.418312E-01 + 0.450201E-01 0.628509E-03 0.450201E-01 0.418312E-01 0.146461E-01 0.549176E-02 + 0.549176E-02 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 0.450201E-01 + 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 0.146461E-01 0.164374E-01 + 0.214014E-01 0.305652E-01 0.394316E-01 0.418312E-01 0.394316E-01 0.305652E-01 + 0.214014E-01 0.164374E-01 0.418312E-01 0.394316E-01 0.305652E-01 0.214014E-01 + 0.164374E-01 0.146461E-01 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 + 0.450201E-01 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 0.549176E-02 + 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 0.628509E-03 0.450201E-01 + 0.418312E-01 0.146461E-01 0.549176E-02 0.355908E-02 0.549176E-02 0.146461E-01 + 0.418312E-01 0.450201E-01 0.450201E-01 0.627919E-01 0.394316E-01 0.164374E-01 + 0.754561E-02 0.549176E-02 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 + 0.418312E-01 0.394316E-01 0.305652E-01 0.214014E-01 0.164374E-01 0.146461E-01 + 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 0.146461E-01 0.164374E-01 + 0.214014E-01 0.305652E-01 0.394316E-01 0.418312E-01 0.394316E-01 0.305652E-01 + 0.214014E-01 0.164374E-01 0.549176E-02 0.754561E-02 0.164374E-01 0.394316E-01 + 0.627919E-01 0.450201E-01 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 + 0.549176E-02 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 0.450201E-01 + 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 0.754561E-02 0.578432E-02 + 0.911731E-02 0.208269E-01 0.405973E-01 0.627919E-01 0.873984E-01 0.636617E-01 + 0.320501E-01 0.149787E-01 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 + 0.208269E-01 0.394316E-01 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 + 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 0.911731E-02 0.164374E-01 + 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 0.627919E-01 0.405973E-01 + 0.208269E-01 0.911731E-02 0.578432E-02 0.754561E-02 0.149787E-01 0.320501E-01 + 0.636617E-01 0.873984E-01 0.450201E-01 0.627919E-01 0.394316E-01 0.164374E-01 + 0.754561E-02 0.549176E-02 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 + 0.627919E-01 0.873984E-01 0.636617E-01 0.320501E-01 0.149787E-01 0.754561E-02 + 0.578432E-02 0.911731E-02 0.208269E-01 0.405973E-01 0.394316E-01 0.636617E-01 + 0.676273E-01 0.494709E-01 0.320501E-01 0.164374E-01 0.911731E-02 0.795213E-02 + 0.115263E-01 0.208269E-01 0.164374E-01 0.320501E-01 0.494709E-01 0.676273E-01 + 0.636617E-01 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 0.911731E-02 + 0.754561E-02 0.149787E-01 0.320501E-01 0.636617E-01 0.873984E-01 0.627919E-01 + 0.405973E-01 0.208269E-01 0.911731E-02 0.578432E-02 0.146461E-01 0.164374E-01 + 0.214014E-01 0.305652E-01 0.394316E-01 0.418312E-01 0.394316E-01 0.305652E-01 + 0.214014E-01 0.164374E-01 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 + 0.208269E-01 0.394316E-01 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 + 0.214014E-01 0.795213E-02 0.444635E-02 0.531132E-02 0.115263E-01 0.305652E-01 + 0.676273E-01 0.459211E-01 0.298589E-01 0.494709E-01 0.305652E-01 0.115263E-01 + 0.531132E-02 0.444635E-02 0.795213E-02 0.214014E-01 0.494709E-01 0.298589E-01 + 0.459211E-01 0.676273E-01 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 + 0.911731E-02 0.164374E-01 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 + 0.418312E-01 0.394316E-01 0.305652E-01 0.214014E-01 0.164374E-01 0.146461E-01 + 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 0.394316E-01 0.636617E-01 + 0.676273E-01 0.494709E-01 0.320501E-01 0.164374E-01 0.911731E-02 0.795213E-02 + 0.115263E-01 0.208269E-01 0.305652E-01 0.676273E-01 0.459211E-01 0.298589E-01 + 0.494709E-01 0.214014E-01 0.795213E-02 0.444635E-02 0.531132E-02 0.115263E-01 + 0.214014E-01 0.494709E-01 0.298589E-01 0.459211E-01 0.676273E-01 0.305652E-01 + 0.115263E-01 0.531132E-02 0.444635E-02 0.795213E-02 0.164374E-01 0.320501E-01 + 0.494709E-01 0.676273E-01 0.636617E-01 0.394316E-01 0.208269E-01 0.115263E-01 + 0.795213E-02 0.911731E-02 0.418312E-01 0.394316E-01 0.305652E-01 0.214014E-01 + 0.164374E-01 0.146461E-01 0.164374E-01 0.214014E-01 0.305652E-01 0.394316E-01 + 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 0.911731E-02 0.164374E-01 + 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 0.305652E-01 0.115263E-01 + 0.531132E-02 0.444635E-02 0.795213E-02 0.214014E-01 0.494709E-01 0.298589E-01 + 0.459211E-01 0.676273E-01 0.214014E-01 0.795213E-02 0.444635E-02 0.531132E-02 + 0.115263E-01 0.305652E-01 0.676273E-01 0.459211E-01 0.298589E-01 0.494709E-01 + 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 0.208269E-01 0.394316E-01 + 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 0.146461E-01 0.164374E-01 + 0.214014E-01 0.305652E-01 0.394316E-01 0.418312E-01 0.394316E-01 0.305652E-01 + 0.214014E-01 0.164374E-01 0.164374E-01 0.320501E-01 0.494709E-01 0.676273E-01 + 0.636617E-01 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 0.911731E-02 + 0.214014E-01 0.494709E-01 0.298589E-01 0.459211E-01 0.676273E-01 0.305652E-01 + 0.115263E-01 0.531132E-02 0.444635E-02 0.795213E-02 0.305652E-01 0.676273E-01 + 0.459211E-01 0.298589E-01 0.494709E-01 0.214014E-01 0.795213E-02 0.444635E-02 + 0.531132E-02 0.115263E-01 0.394316E-01 0.636617E-01 0.676273E-01 0.494709E-01 + 0.320501E-01 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 0.208269E-01 + 0.450201E-01 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 0.549176E-02 + 0.754561E-02 0.164374E-01 0.394316E-01 0.627919E-01 0.627919E-01 0.405973E-01 + 0.208269E-01 0.911731E-02 0.578432E-02 0.754561E-02 0.149787E-01 0.320501E-01 + 0.636617E-01 0.873984E-01 0.394316E-01 0.208269E-01 0.115263E-01 0.795213E-02 + 0.911731E-02 0.164374E-01 0.320501E-01 0.494709E-01 0.676273E-01 0.636617E-01 + 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 0.208269E-01 0.394316E-01 + 0.636617E-01 0.676273E-01 0.494709E-01 0.320501E-01 0.754561E-02 0.578432E-02 + 0.911731E-02 0.208269E-01 0.405973E-01 0.627919E-01 0.873984E-01 0.636617E-01 + 0.320501E-01 0.149787E-01 0.549176E-02 0.754561E-02 0.164374E-01 0.394316E-01 + 0.627919E-01 0.450201E-01 0.627919E-01 0.394316E-01 0.164374E-01 0.754561E-02 + 0.754561E-02 0.149787E-01 0.320501E-01 0.636617E-01 0.873984E-01 0.627919E-01 + 0.405973E-01 0.208269E-01 0.911731E-02 0.578432E-02 0.164374E-01 0.320501E-01 + 0.494709E-01 0.676273E-01 0.636617E-01 0.394316E-01 0.208269E-01 0.115263E-01 + 0.795213E-02 0.911731E-02 0.394316E-01 0.636617E-01 0.676273E-01 0.494709E-01 + 0.320501E-01 0.164374E-01 0.911731E-02 0.795213E-02 0.115263E-01 0.208269E-01 + 0.627919E-01 0.873984E-01 0.636617E-01 0.320501E-01 0.149787E-01 0.754561E-02 + 0.578432E-02 0.911731E-02 0.208269E-01 0.405973E-01 +END_DATAGRID_3D +END_BLOCK_DATAGRID_3D diff --git a/tests/Si/reference/ppout0iflag3out5.out b/tests/Si/reference/ppout0iflag3out5.out new file mode 100644 index 0000000..ff5d4a5 --- /dev/null +++ b/tests/Si/reference/ppout0iflag3out5.out @@ -0,0 +1,2624 @@ + CRYSTAL + PRIMVEC + -2.698803764 0.000000000 2.698803764 + 0.000000000 2.698803764 2.698803764 + -2.698803764 2.698803764 0.000000000 + PRIMCOORD + 2 1 +Si 0.000000000 0.000000000 0.000000000 +Si 1.349401882 1.349401882 1.349401882 +BEGIN_BLOCK_DATAGRID_3D +3D_PWSCF +DATAGRID_3D_UNKNOWN + 25 25 25 + 0.000000 0.000000 0.000000 + -2.698804 0.000000 2.698804 + 0.000000 2.698804 2.698804 + -2.698804 2.698804 0.000000 + 0.628509E-03 0.420568E-02 0.173212E-01 0.386373E-01 0.570012E-01 0.628947E-01 + 0.577130E-01 0.484779E-01 0.399963E-01 0.335279E-01 0.289485E-01 0.261640E-01 + 0.252261E-01 0.261640E-01 0.289485E-01 0.335279E-01 0.399963E-01 0.484779E-01 + 0.577130E-01 0.628947E-01 0.570012E-01 0.386373E-01 0.173212E-01 0.420568E-02 + 0.628509E-03 0.420568E-02 0.112502E-01 0.269968E-01 0.453630E-01 0.556051E-01 + 0.541857E-01 0.461141E-01 0.373044E-01 0.302813E-01 0.252300E-01 0.219046E-01 + 0.202389E-01 0.202389E-01 0.219046E-01 0.252300E-01 0.302813E-01 0.373044E-01 + 0.461141E-01 0.541857E-01 0.556051E-01 0.453630E-01 0.269968E-01 0.112502E-01 + 0.420568E-02 0.420568E-02 0.173212E-01 0.269968E-01 0.405936E-01 0.502944E-01 + 0.506982E-01 0.438602E-01 0.350891E-01 0.276655E-01 0.222441E-01 0.185511E-01 + 0.163824E-01 0.156674E-01 0.163824E-01 0.185511E-01 0.222441E-01 0.276655E-01 + 0.350891E-01 0.438602E-01 0.506982E-01 0.502944E-01 0.405936E-01 0.269968E-01 + 0.173212E-01 0.142537E-01 0.173212E-01 0.386373E-01 0.453630E-01 0.502944E-01 + 0.492335E-01 0.424531E-01 0.336423E-01 0.258818E-01 0.200995E-01 0.160855E-01 + 0.135462E-01 0.123229E-01 0.123229E-01 0.135462E-01 0.160855E-01 0.200995E-01 + 0.258818E-01 0.336423E-01 0.424531E-01 0.492335E-01 0.502944E-01 0.453630E-01 + 0.386373E-01 0.345053E-01 0.345053E-01 0.386373E-01 0.570012E-01 0.556051E-01 + 0.506982E-01 0.424531E-01 0.331452E-01 0.250115E-01 0.188635E-01 0.145193E-01 + 0.116478E-01 0.100355E-01 0.952277E-02 0.100355E-01 0.116478E-01 0.145193E-01 + 0.188635E-01 0.250115E-01 0.331452E-01 0.424531E-01 0.506982E-01 0.556051E-01 + 0.570012E-01 0.567074E-01 0.564294E-01 0.567074E-01 0.570012E-01 0.628947E-01 + 0.541857E-01 0.438602E-01 0.336423E-01 0.250115E-01 0.184714E-01 0.137863E-01 + 0.105905E-01 0.863840E-02 0.773621E-02 0.773621E-02 0.863840E-02 0.105905E-01 + 0.137863E-01 0.184714E-01 0.250115E-01 0.336423E-01 0.438602E-01 0.541857E-01 + 0.628947E-01 0.689455E-01 0.720105E-01 0.720105E-01 0.689455E-01 0.628947E-01 + 0.577130E-01 0.461141E-01 0.350891E-01 0.258818E-01 0.188635E-01 0.137863E-01 + 0.102572E-01 0.798544E-02 0.675236E-02 0.636908E-02 0.675236E-02 0.798544E-02 + 0.102572E-01 0.137863E-01 0.188635E-01 0.258818E-01 0.350891E-01 0.461141E-01 + 0.577130E-01 0.680392E-01 0.751976E-01 0.777628E-01 0.751976E-01 0.680392E-01 + 0.577130E-01 0.484779E-01 0.373044E-01 0.276655E-01 0.200995E-01 0.145193E-01 + 0.105905E-01 0.798544E-02 0.643891E-02 0.573385E-02 0.573385E-02 0.643891E-02 + 0.798544E-02 0.105905E-01 0.145193E-01 0.200995E-01 0.276655E-01 0.373044E-01 + 0.484779E-01 0.597979E-01 0.692075E-01 0.745914E-01 0.745914E-01 0.692075E-01 + 0.597979E-01 0.484779E-01 0.399963E-01 0.302813E-01 0.222441E-01 0.160855E-01 + 0.116478E-01 0.863840E-02 0.675236E-02 0.573385E-02 0.541396E-02 0.573385E-02 + 0.675236E-02 0.863840E-02 0.116478E-01 0.160855E-01 0.222441E-01 0.302813E-01 + 0.399963E-01 0.505628E-01 0.604143E-01 0.675276E-01 0.701348E-01 0.675276E-01 + 0.604143E-01 0.505628E-01 0.399963E-01 0.335279E-01 0.252300E-01 0.185511E-01 + 0.135462E-01 0.100355E-01 0.773621E-02 0.636908E-02 0.573385E-02 0.573385E-02 + 0.636908E-02 0.773621E-02 0.100355E-01 0.135462E-01 0.185511E-01 0.252300E-01 + 0.335279E-01 0.429734E-01 0.524971E-01 0.604501E-01 0.650298E-01 0.650298E-01 + 0.604501E-01 0.524971E-01 0.429734E-01 0.335279E-01 0.289485E-01 0.219046E-01 + 0.163824E-01 0.123229E-01 0.952277E-02 0.773621E-02 0.675236E-02 0.643891E-02 + 0.675236E-02 0.773621E-02 0.952277E-02 0.123229E-01 0.163824E-01 0.219046E-01 + 0.289485E-01 0.372839E-01 0.462127E-01 0.544700E-01 0.604143E-01 0.625917E-01 + 0.604143E-01 0.544700E-01 0.462127E-01 0.372839E-01 0.289485E-01 0.261640E-01 + 0.202389E-01 0.156674E-01 0.123229E-01 0.100355E-01 0.863840E-02 0.798544E-02 + 0.798544E-02 0.863840E-02 0.100355E-01 0.123229E-01 0.156674E-01 0.202389E-01 + 0.261640E-01 0.333894E-01 0.414815E-01 0.494937E-01 0.560643E-01 0.597979E-01 + 0.597979E-01 0.560643E-01 0.494937E-01 0.414815E-01 0.333894E-01 0.261640E-01 + 0.252261E-01 0.202389E-01 0.163824E-01 0.135462E-01 0.116478E-01 0.105905E-01 + 0.102572E-01 0.105905E-01 0.116478E-01 0.135462E-01 0.163824E-01 0.202389E-01 + 0.252261E-01 0.313897E-01 0.384625E-01 0.456893E-01 0.519648E-01 0.562141E-01 + 0.577130E-01 0.562141E-01 0.519648E-01 0.456893E-01 0.384625E-01 0.313897E-01 + 0.252261E-01 0.261640E-01 0.219046E-01 0.185511E-01 0.160855E-01 0.145193E-01 + 0.137863E-01 0.137863E-01 0.145193E-01 0.160855E-01 0.185511E-01 0.219046E-01 + 0.261640E-01 0.313897E-01 0.374214E-01 0.435886E-01 0.488647E-01 0.524590E-01 + 0.541857E-01 0.541857E-01 0.524590E-01 0.488647E-01 0.435886E-01 0.374214E-01 + 0.313897E-01 0.261640E-01 0.289485E-01 0.252300E-01 0.222441E-01 0.200995E-01 + 0.188635E-01 0.184714E-01 0.188635E-01 0.200995E-01 0.222441E-01 0.252300E-01 + 0.289485E-01 0.333894E-01 0.384625E-01 0.435886E-01 0.476986E-01 0.499921E-01 + 0.506982E-01 0.507602E-01 0.506982E-01 0.499921E-01 0.476986E-01 0.435886E-01 + 0.384625E-01 0.333894E-01 0.289485E-01 0.335279E-01 0.302813E-01 0.276655E-01 + 0.258818E-01 0.250115E-01 0.250115E-01 0.258818E-01 0.276655E-01 0.302813E-01 + 0.335279E-01 0.372839E-01 0.414815E-01 0.456893E-01 0.488647E-01 0.499921E-01 + 0.492335E-01 0.481035E-01 0.481035E-01 0.492335E-01 0.499921E-01 0.488647E-01 + 0.456893E-01 0.414815E-01 0.372839E-01 0.335279E-01 0.399963E-01 0.373044E-01 + 0.350891E-01 0.336423E-01 0.331452E-01 0.336423E-01 0.350891E-01 0.373044E-01 + 0.399963E-01 0.429734E-01 0.462127E-01 0.494937E-01 0.519648E-01 0.524590E-01 + 0.506982E-01 0.481035E-01 0.468849E-01 0.481035E-01 0.506982E-01 0.524590E-01 + 0.519648E-01 0.494937E-01 0.462127E-01 0.429734E-01 0.399963E-01 0.484779E-01 + 0.461141E-01 0.438602E-01 0.424531E-01 0.424531E-01 0.438602E-01 0.461141E-01 + 0.484779E-01 0.505628E-01 0.524971E-01 0.544700E-01 0.560643E-01 0.562141E-01 + 0.541857E-01 0.507602E-01 0.481035E-01 0.481035E-01 0.507602E-01 0.541857E-01 + 0.562141E-01 0.560643E-01 0.544700E-01 0.524971E-01 0.505628E-01 0.484779E-01 + 0.577130E-01 0.541857E-01 0.506982E-01 0.492335E-01 0.506982E-01 0.541857E-01 + 0.577130E-01 0.597979E-01 0.604143E-01 0.604501E-01 0.604143E-01 0.597979E-01 + 0.577130E-01 0.541857E-01 0.506982E-01 0.492335E-01 0.506982E-01 0.541857E-01 + 0.577130E-01 0.597979E-01 0.604143E-01 0.604501E-01 0.604143E-01 0.597979E-01 + 0.577130E-01 0.628947E-01 0.556051E-01 0.502944E-01 0.502944E-01 0.556051E-01 + 0.628947E-01 0.680392E-01 0.692075E-01 0.675276E-01 0.650298E-01 0.625917E-01 + 0.597979E-01 0.562141E-01 0.524590E-01 0.499921E-01 0.499921E-01 0.524590E-01 + 0.562141E-01 0.597979E-01 0.625917E-01 0.650298E-01 0.675276E-01 0.692075E-01 + 0.680392E-01 0.628947E-01 0.570012E-01 0.453630E-01 0.405936E-01 0.453630E-01 + 0.570012E-01 0.689455E-01 0.751976E-01 0.745914E-01 0.701348E-01 0.650298E-01 + 0.604143E-01 0.560643E-01 0.519648E-01 0.488647E-01 0.476986E-01 0.488647E-01 + 0.519648E-01 0.560643E-01 0.604143E-01 0.650298E-01 0.701348E-01 0.745914E-01 + 0.751976E-01 0.689455E-01 0.570012E-01 0.386373E-01 0.269968E-01 0.269968E-01 + 0.386373E-01 0.567074E-01 0.720105E-01 0.777628E-01 0.745914E-01 0.675276E-01 + 0.604501E-01 0.544700E-01 0.494937E-01 0.456893E-01 0.435886E-01 0.435886E-01 + 0.456893E-01 0.494937E-01 0.544700E-01 0.604501E-01 0.675276E-01 0.745914E-01 + 0.777628E-01 0.720105E-01 0.567074E-01 0.386373E-01 0.173212E-01 0.112502E-01 + 0.173212E-01 0.345053E-01 0.564294E-01 0.720105E-01 0.751976E-01 0.692075E-01 + 0.604143E-01 0.524971E-01 0.462127E-01 0.414815E-01 0.384625E-01 0.374214E-01 + 0.384625E-01 0.414815E-01 0.462127E-01 0.524971E-01 0.604143E-01 0.692075E-01 + 0.751976E-01 0.720105E-01 0.564294E-01 0.345053E-01 0.173212E-01 0.420568E-02 + 0.420568E-02 0.142537E-01 0.345053E-01 0.567074E-01 0.689455E-01 0.680392E-01 + 0.597979E-01 0.505628E-01 0.429734E-01 0.372839E-01 0.333894E-01 0.313897E-01 + 0.313897E-01 0.333894E-01 0.372839E-01 0.429734E-01 0.505628E-01 0.597979E-01 + 0.680392E-01 0.689455E-01 0.567074E-01 0.345053E-01 0.142537E-01 0.420568E-02 + 0.628509E-03 0.420568E-02 0.173212E-01 0.386373E-01 0.570012E-01 0.628947E-01 + 0.577130E-01 0.484779E-01 0.399963E-01 0.335279E-01 0.289485E-01 0.261640E-01 + 0.252261E-01 0.261640E-01 0.289485E-01 0.335279E-01 0.399963E-01 0.484779E-01 + 0.577130E-01 0.628947E-01 0.570012E-01 0.386373E-01 0.173212E-01 0.420568E-02 + 0.628509E-03 0.420568E-02 0.112502E-01 0.269968E-01 0.453630E-01 0.556051E-01 + 0.541857E-01 0.461141E-01 0.373044E-01 0.302813E-01 0.252300E-01 0.219046E-01 + 0.202389E-01 0.202389E-01 0.219046E-01 0.252300E-01 0.302813E-01 0.373044E-01 + 0.461141E-01 0.541857E-01 0.556051E-01 0.453630E-01 0.269968E-01 0.112502E-01 + 0.420568E-02 0.420568E-02 0.112502E-01 0.214527E-01 0.367736E-01 0.487304E-01 + 0.507602E-01 0.445636E-01 0.358437E-01 0.283097E-01 0.227862E-01 0.190156E-01 + 0.167905E-01 0.160537E-01 0.167905E-01 0.190156E-01 0.227862E-01 0.283097E-01 + 0.358437E-01 0.445636E-01 0.507602E-01 0.487304E-01 0.367736E-01 0.214527E-01 + 0.112502E-01 0.821111E-02 0.112502E-01 0.269968E-01 0.367736E-01 0.457870E-01 + 0.481035E-01 0.430297E-01 0.346386E-01 0.268002E-01 0.208803E-01 0.167602E-01 + 0.141357E-01 0.128584E-01 0.128584E-01 0.141357E-01 0.167602E-01 0.208803E-01 + 0.268002E-01 0.346386E-01 0.430297E-01 0.481035E-01 0.457870E-01 0.367736E-01 + 0.269968E-01 0.215594E-01 0.215594E-01 0.269968E-01 0.453630E-01 0.487304E-01 + 0.481035E-01 0.423826E-01 0.339519E-01 0.258890E-01 0.196306E-01 0.151913E-01 + 0.122425E-01 0.105678E-01 0.100298E-01 0.105678E-01 0.122425E-01 0.151913E-01 + 0.196306E-01 0.258890E-01 0.339519E-01 0.423826E-01 0.481035E-01 0.487304E-01 + 0.453630E-01 0.415988E-01 0.401068E-01 0.415988E-01 0.453630E-01 0.556051E-01 + 0.507602E-01 0.430297E-01 0.339519E-01 0.255918E-01 0.190386E-01 0.143047E-01 + 0.110600E-01 0.905956E-02 0.812613E-02 0.812613E-02 0.905956E-02 0.110600E-01 + 0.143047E-01 0.190386E-01 0.255918E-01 0.339519E-01 0.430297E-01 0.507602E-01 + 0.556051E-01 0.577546E-01 0.584098E-01 0.584098E-01 0.577546E-01 0.556051E-01 + 0.541857E-01 0.445636E-01 0.346386E-01 0.258890E-01 0.190386E-01 0.140249E-01 + 0.105047E-01 0.821308E-02 0.696020E-02 0.657011E-02 0.696020E-02 0.821308E-02 + 0.105047E-01 0.140249E-01 0.190386E-01 0.258890E-01 0.346386E-01 0.445636E-01 + 0.541857E-01 0.619819E-01 0.669676E-01 0.686757E-01 0.669676E-01 0.619819E-01 + 0.541857E-01 0.461141E-01 0.358437E-01 0.268002E-01 0.196306E-01 0.143047E-01 + 0.105047E-01 0.794138E-02 0.640444E-02 0.570466E-02 0.570466E-02 0.640444E-02 + 0.794138E-02 0.105047E-01 0.143047E-01 0.196306E-01 0.268002E-01 0.358437E-01 + 0.461141E-01 0.562141E-01 0.643573E-01 0.689152E-01 0.689152E-01 0.643573E-01 + 0.562141E-01 0.461141E-01 0.373044E-01 0.283097E-01 0.208803E-01 0.151913E-01 + 0.110600E-01 0.821308E-02 0.640444E-02 0.542572E-02 0.511980E-02 0.542572E-02 + 0.640444E-02 0.821308E-02 0.110600E-01 0.151913E-01 0.208803E-01 0.283097E-01 + 0.373044E-01 0.470527E-01 0.560643E-01 0.625105E-01 0.648593E-01 0.625105E-01 + 0.560643E-01 0.470527E-01 0.373044E-01 0.302813E-01 0.227862E-01 0.167602E-01 + 0.122425E-01 0.905956E-02 0.696020E-02 0.570466E-02 0.511980E-02 0.511980E-02 + 0.570466E-02 0.696020E-02 0.905956E-02 0.122425E-01 0.167602E-01 0.227862E-01 + 0.302813E-01 0.388056E-01 0.473650E-01 0.544700E-01 0.585403E-01 0.585403E-01 + 0.544700E-01 0.473650E-01 0.388056E-01 0.302813E-01 0.252300E-01 0.190156E-01 + 0.141357E-01 0.105678E-01 0.812613E-02 0.657011E-02 0.570466E-02 0.542572E-02 + 0.570466E-02 0.657011E-02 0.812613E-02 0.105678E-01 0.141357E-01 0.190156E-01 + 0.252300E-01 0.325323E-01 0.402865E-01 0.474025E-01 0.524971E-01 0.543580E-01 + 0.524971E-01 0.474025E-01 0.402865E-01 0.325323E-01 0.252300E-01 0.219046E-01 + 0.167905E-01 0.128584E-01 0.100298E-01 0.812613E-02 0.696020E-02 0.640444E-02 + 0.640444E-02 0.696020E-02 0.812613E-02 0.100298E-01 0.128584E-01 0.167905E-01 + 0.219046E-01 0.280936E-01 0.349694E-01 0.417669E-01 0.473650E-01 0.505628E-01 + 0.505628E-01 0.473650E-01 0.417669E-01 0.349694E-01 0.280936E-01 0.219046E-01 + 0.202389E-01 0.160537E-01 0.128584E-01 0.105678E-01 0.905956E-02 0.821308E-02 + 0.794138E-02 0.821308E-02 0.905956E-02 0.105678E-01 0.128584E-01 0.160537E-01 + 0.202389E-01 0.254039E-01 0.313421E-01 0.375334E-01 0.431159E-01 0.470527E-01 + 0.484779E-01 0.470527E-01 0.431159E-01 0.375334E-01 0.313421E-01 0.254039E-01 + 0.202389E-01 0.202389E-01 0.167905E-01 0.141357E-01 0.122425E-01 0.110600E-01 + 0.105047E-01 0.105047E-01 0.110600E-01 0.122425E-01 0.141357E-01 0.167905E-01 + 0.202389E-01 0.245013E-01 0.294949E-01 0.348716E-01 0.399611E-01 0.439394E-01 + 0.461141E-01 0.461141E-01 0.439394E-01 0.399611E-01 0.348716E-01 0.294949E-01 + 0.245013E-01 0.202389E-01 0.219046E-01 0.190156E-01 0.167602E-01 0.151913E-01 + 0.143047E-01 0.140249E-01 0.143047E-01 0.151913E-01 0.167602E-01 0.190156E-01 + 0.219046E-01 0.254039E-01 0.294949E-01 0.339662E-01 0.382749E-01 0.417281E-01 + 0.438602E-01 0.445636E-01 0.438602E-01 0.417281E-01 0.382749E-01 0.339662E-01 + 0.294949E-01 0.254039E-01 0.219046E-01 0.252300E-01 0.227862E-01 0.208803E-01 + 0.196306E-01 0.190386E-01 0.190386E-01 0.196306E-01 0.208803E-01 0.227862E-01 + 0.252300E-01 0.280936E-01 0.313421E-01 0.348716E-01 0.382749E-01 0.409266E-01 + 0.424531E-01 0.430297E-01 0.430297E-01 0.424531E-01 0.409266E-01 0.382749E-01 + 0.348716E-01 0.313421E-01 0.280936E-01 0.252300E-01 0.302813E-01 0.283097E-01 + 0.268002E-01 0.258890E-01 0.255918E-01 0.258890E-01 0.268002E-01 0.283097E-01 + 0.302813E-01 0.325323E-01 0.349694E-01 0.375334E-01 0.399611E-01 0.417281E-01 + 0.424531E-01 0.423826E-01 0.422287E-01 0.423826E-01 0.424531E-01 0.417281E-01 + 0.399611E-01 0.375334E-01 0.349694E-01 0.325323E-01 0.302813E-01 0.373044E-01 + 0.358437E-01 0.346386E-01 0.339519E-01 0.339519E-01 0.346386E-01 0.358437E-01 + 0.373044E-01 0.388056E-01 0.402865E-01 0.417669E-01 0.431159E-01 0.439394E-01 + 0.438602E-01 0.430297E-01 0.422287E-01 0.422287E-01 0.430297E-01 0.438602E-01 + 0.439394E-01 0.431159E-01 0.417669E-01 0.402865E-01 0.388056E-01 0.373044E-01 + 0.461141E-01 0.445636E-01 0.430297E-01 0.423826E-01 0.430297E-01 0.445636E-01 + 0.461141E-01 0.470527E-01 0.473650E-01 0.474025E-01 0.473650E-01 0.470527E-01 + 0.461141E-01 0.445636E-01 0.430297E-01 0.423826E-01 0.430297E-01 0.445636E-01 + 0.461141E-01 0.470527E-01 0.473650E-01 0.474025E-01 0.473650E-01 0.470527E-01 + 0.461141E-01 0.541857E-01 0.507602E-01 0.481035E-01 0.481035E-01 0.507602E-01 + 0.541857E-01 0.562141E-01 0.560643E-01 0.544700E-01 0.524971E-01 0.505628E-01 + 0.484779E-01 0.461141E-01 0.438602E-01 0.424531E-01 0.424531E-01 0.438602E-01 + 0.461141E-01 0.484779E-01 0.505628E-01 0.524971E-01 0.544700E-01 0.560643E-01 + 0.562141E-01 0.541857E-01 0.556051E-01 0.487304E-01 0.457870E-01 0.487304E-01 + 0.556051E-01 0.619819E-01 0.643573E-01 0.625105E-01 0.585403E-01 0.543580E-01 + 0.505628E-01 0.470527E-01 0.439394E-01 0.417281E-01 0.409266E-01 0.417281E-01 + 0.439394E-01 0.470527E-01 0.505628E-01 0.543580E-01 0.585403E-01 0.625105E-01 + 0.643573E-01 0.619819E-01 0.556051E-01 0.453630E-01 0.367736E-01 0.367736E-01 + 0.453630E-01 0.577546E-01 0.669676E-01 0.689152E-01 0.648593E-01 0.585403E-01 + 0.524971E-01 0.473650E-01 0.431159E-01 0.399611E-01 0.382749E-01 0.382749E-01 + 0.399611E-01 0.431159E-01 0.473650E-01 0.524971E-01 0.585403E-01 0.648593E-01 + 0.689152E-01 0.669676E-01 0.577546E-01 0.453630E-01 0.269968E-01 0.214527E-01 + 0.269968E-01 0.415988E-01 0.584098E-01 0.686757E-01 0.689152E-01 0.625105E-01 + 0.544700E-01 0.474025E-01 0.417669E-01 0.375334E-01 0.348716E-01 0.339662E-01 + 0.348716E-01 0.375334E-01 0.417669E-01 0.474025E-01 0.544700E-01 0.625105E-01 + 0.689152E-01 0.686757E-01 0.584098E-01 0.415988E-01 0.269968E-01 0.112502E-01 + 0.112502E-01 0.215594E-01 0.401068E-01 0.584098E-01 0.669676E-01 0.643573E-01 + 0.560643E-01 0.473650E-01 0.402865E-01 0.349694E-01 0.313421E-01 0.294949E-01 + 0.294949E-01 0.313421E-01 0.349694E-01 0.402865E-01 0.473650E-01 0.560643E-01 + 0.643573E-01 0.669676E-01 0.584098E-01 0.401068E-01 0.215594E-01 0.112502E-01 + 0.420568E-02 0.821111E-02 0.215594E-01 0.415988E-01 0.577546E-01 0.619819E-01 + 0.562141E-01 0.470527E-01 0.388056E-01 0.325323E-01 0.280936E-01 0.254039E-01 + 0.245013E-01 0.254039E-01 0.280936E-01 0.325323E-01 0.388056E-01 0.470527E-01 + 0.562141E-01 0.619819E-01 0.577546E-01 0.415988E-01 0.215594E-01 0.821111E-02 + 0.420568E-02 0.420568E-02 0.112502E-01 0.269968E-01 0.453630E-01 0.556051E-01 + 0.541857E-01 0.461141E-01 0.373044E-01 0.302813E-01 0.252300E-01 0.219046E-01 + 0.202389E-01 0.202389E-01 0.219046E-01 0.252300E-01 0.302813E-01 0.373044E-01 + 0.461141E-01 0.541857E-01 0.556051E-01 0.453630E-01 0.269968E-01 0.112502E-01 + 0.420568E-02 0.420568E-02 0.173212E-01 0.269968E-01 0.405936E-01 0.502944E-01 + 0.506982E-01 0.438602E-01 0.350891E-01 0.276655E-01 0.222441E-01 0.185511E-01 + 0.163824E-01 0.156674E-01 0.163824E-01 0.185511E-01 0.222441E-01 0.276655E-01 + 0.350891E-01 0.438602E-01 0.506982E-01 0.502944E-01 0.405936E-01 0.269968E-01 + 0.173212E-01 0.142537E-01 0.173212E-01 0.269968E-01 0.367736E-01 0.457870E-01 + 0.481035E-01 0.430297E-01 0.346386E-01 0.268002E-01 0.208803E-01 0.167602E-01 + 0.141357E-01 0.128584E-01 0.128584E-01 0.141357E-01 0.167602E-01 0.208803E-01 + 0.268002E-01 0.346386E-01 0.430297E-01 0.481035E-01 0.457870E-01 0.367736E-01 + 0.269968E-01 0.215594E-01 0.215594E-01 0.269968E-01 0.405936E-01 0.457870E-01 + 0.468849E-01 0.422287E-01 0.341947E-01 0.261851E-01 0.198958E-01 0.154277E-01 + 0.124544E-01 0.107582E-01 0.102111E-01 0.107582E-01 0.124544E-01 0.154277E-01 + 0.198958E-01 0.261851E-01 0.341947E-01 0.422287E-01 0.468849E-01 0.457870E-01 + 0.405936E-01 0.355758E-01 0.336667E-01 0.355758E-01 0.405936E-01 0.502944E-01 + 0.481035E-01 0.422287E-01 0.340054E-01 0.258693E-01 0.193258E-01 0.145756E-01 + 0.113161E-01 0.929662E-02 0.834807E-02 0.834807E-02 0.929662E-02 0.113161E-01 + 0.145756E-01 0.193258E-01 0.258693E-01 0.340054E-01 0.422287E-01 0.481035E-01 + 0.502944E-01 0.498680E-01 0.489830E-01 0.489830E-01 0.498680E-01 0.502944E-01 + 0.506982E-01 0.430297E-01 0.341947E-01 0.258693E-01 0.191432E-01 0.141712E-01 + 0.106691E-01 0.837934E-02 0.712172E-02 0.672922E-02 0.712172E-02 0.837934E-02 + 0.106691E-01 0.141712E-01 0.191432E-01 0.258693E-01 0.341947E-01 0.430297E-01 + 0.506982E-01 0.560474E-01 0.589780E-01 0.598867E-01 0.589780E-01 0.560474E-01 + 0.506982E-01 0.438602E-01 0.346386E-01 0.261851E-01 0.193258E-01 0.141712E-01 + 0.104608E-01 0.793592E-02 0.641629E-02 0.572648E-02 0.572648E-02 0.641629E-02 + 0.793592E-02 0.104608E-01 0.141712E-01 0.193258E-01 0.261851E-01 0.346386E-01 + 0.438602E-01 0.524590E-01 0.590302E-01 0.625675E-01 0.625675E-01 0.590302E-01 + 0.524590E-01 0.438602E-01 0.350891E-01 0.268002E-01 0.198958E-01 0.145756E-01 + 0.106691E-01 0.793592E-02 0.618373E-02 0.523975E-02 0.494764E-02 0.523975E-02 + 0.618373E-02 0.793592E-02 0.106691E-01 0.145756E-01 0.198958E-01 0.268002E-01 + 0.350891E-01 0.439394E-01 0.519648E-01 0.576056E-01 0.596400E-01 0.576056E-01 + 0.519648E-01 0.439394E-01 0.350891E-01 0.276655E-01 0.208803E-01 0.154277E-01 + 0.113161E-01 0.837934E-02 0.641629E-02 0.523975E-02 0.469643E-02 0.469643E-02 + 0.523975E-02 0.641629E-02 0.837934E-02 0.113161E-01 0.154277E-01 0.208803E-01 + 0.276655E-01 0.353868E-01 0.431159E-01 0.494937E-01 0.531274E-01 0.531274E-01 + 0.494937E-01 0.431159E-01 0.353868E-01 0.276655E-01 0.222441E-01 0.167602E-01 + 0.124544E-01 0.929662E-02 0.712172E-02 0.572648E-02 0.494764E-02 0.469643E-02 + 0.494764E-02 0.572648E-02 0.712172E-02 0.929662E-02 0.124544E-01 0.167602E-01 + 0.222441E-01 0.286912E-01 0.355244E-01 0.417669E-01 0.462127E-01 0.478311E-01 + 0.462127E-01 0.417669E-01 0.355244E-01 0.286912E-01 0.222441E-01 0.185511E-01 + 0.141357E-01 0.107582E-01 0.834807E-02 0.672922E-02 0.572648E-02 0.523975E-02 + 0.523975E-02 0.572648E-02 0.672922E-02 0.834807E-02 0.107582E-01 0.141357E-01 + 0.185511E-01 0.238879E-01 0.297806E-01 0.355603E-01 0.402865E-01 0.429734E-01 + 0.429734E-01 0.402865E-01 0.355603E-01 0.297806E-01 0.238879E-01 0.185511E-01 + 0.163824E-01 0.128584E-01 0.102111E-01 0.834807E-02 0.712172E-02 0.641629E-02 + 0.618373E-02 0.641629E-02 0.712172E-02 0.834807E-02 0.102111E-01 0.128584E-01 + 0.163824E-01 0.207435E-01 0.257241E-01 0.308819E-01 0.355244E-01 0.388056E-01 + 0.399963E-01 0.388056E-01 0.355244E-01 0.308819E-01 0.257241E-01 0.207435E-01 + 0.163824E-01 0.156674E-01 0.128584E-01 0.107582E-01 0.929662E-02 0.837934E-02 + 0.793592E-02 0.793592E-02 0.837934E-02 0.929662E-02 0.107582E-01 0.128584E-01 + 0.156674E-01 0.191829E-01 0.232916E-01 0.277169E-01 0.319699E-01 0.353868E-01 + 0.373044E-01 0.373044E-01 0.353868E-01 0.319699E-01 0.277169E-01 0.232916E-01 + 0.191829E-01 0.156674E-01 0.163824E-01 0.141357E-01 0.124544E-01 0.113161E-01 + 0.106691E-01 0.104608E-01 0.106691E-01 0.113161E-01 0.124544E-01 0.141357E-01 + 0.163824E-01 0.191829E-01 0.224840E-01 0.261315E-01 0.297890E-01 0.329495E-01 + 0.350891E-01 0.358437E-01 0.350891E-01 0.329495E-01 0.297890E-01 0.261315E-01 + 0.224840E-01 0.191829E-01 0.163824E-01 0.185511E-01 0.167602E-01 0.154277E-01 + 0.145756E-01 0.141712E-01 0.141712E-01 0.145756E-01 0.154277E-01 0.167602E-01 + 0.185511E-01 0.207435E-01 0.232916E-01 0.261315E-01 0.290632E-01 0.317043E-01 + 0.336423E-01 0.346386E-01 0.346386E-01 0.336423E-01 0.317043E-01 0.290632E-01 + 0.261315E-01 0.232916E-01 0.207435E-01 0.185511E-01 0.222441E-01 0.208803E-01 + 0.198958E-01 0.193258E-01 0.191432E-01 0.193258E-01 0.198958E-01 0.208803E-01 + 0.222441E-01 0.238879E-01 0.257241E-01 0.277169E-01 0.297890E-01 0.317043E-01 + 0.331452E-01 0.339519E-01 0.341947E-01 0.339519E-01 0.331452E-01 0.317043E-01 + 0.297890E-01 0.277169E-01 0.257241E-01 0.238879E-01 0.222441E-01 0.276655E-01 + 0.268002E-01 0.261851E-01 0.258693E-01 0.258693E-01 0.261851E-01 0.268002E-01 + 0.276655E-01 0.286912E-01 0.297806E-01 0.308819E-01 0.319699E-01 0.329495E-01 + 0.336423E-01 0.339519E-01 0.340054E-01 0.340054E-01 0.339519E-01 0.336423E-01 + 0.329495E-01 0.319699E-01 0.308819E-01 0.297806E-01 0.286912E-01 0.276655E-01 + 0.350891E-01 0.346386E-01 0.341947E-01 0.340054E-01 0.341947E-01 0.346386E-01 + 0.350891E-01 0.353868E-01 0.355244E-01 0.355603E-01 0.355244E-01 0.353868E-01 + 0.350891E-01 0.346386E-01 0.341947E-01 0.340054E-01 0.341947E-01 0.346386E-01 + 0.350891E-01 0.353868E-01 0.355244E-01 0.355603E-01 0.355244E-01 0.353868E-01 + 0.350891E-01 0.438602E-01 0.430297E-01 0.422287E-01 0.422287E-01 0.430297E-01 + 0.438602E-01 0.439394E-01 0.431159E-01 0.417669E-01 0.402865E-01 0.388056E-01 + 0.373044E-01 0.358437E-01 0.346386E-01 0.339519E-01 0.339519E-01 0.346386E-01 + 0.358437E-01 0.373044E-01 0.388056E-01 0.402865E-01 0.417669E-01 0.431159E-01 + 0.439394E-01 0.438602E-01 0.506982E-01 0.481035E-01 0.468849E-01 0.481035E-01 + 0.506982E-01 0.524590E-01 0.519648E-01 0.494937E-01 0.462127E-01 0.429734E-01 + 0.399963E-01 0.373044E-01 0.350891E-01 0.336423E-01 0.331452E-01 0.336423E-01 + 0.350891E-01 0.373044E-01 0.399963E-01 0.429734E-01 0.462127E-01 0.494937E-01 + 0.519648E-01 0.524590E-01 0.506982E-01 0.502944E-01 0.457870E-01 0.457870E-01 + 0.502944E-01 0.560474E-01 0.590302E-01 0.576056E-01 0.531274E-01 0.478311E-01 + 0.429734E-01 0.388056E-01 0.353868E-01 0.329495E-01 0.317043E-01 0.317043E-01 + 0.329495E-01 0.353868E-01 0.388056E-01 0.429734E-01 0.478311E-01 0.531274E-01 + 0.576056E-01 0.590302E-01 0.560474E-01 0.502944E-01 0.405936E-01 0.367736E-01 + 0.405936E-01 0.498680E-01 0.589780E-01 0.625675E-01 0.596400E-01 0.531274E-01 + 0.462127E-01 0.402865E-01 0.355244E-01 0.319699E-01 0.297890E-01 0.290632E-01 + 0.297890E-01 0.319699E-01 0.355244E-01 0.402865E-01 0.462127E-01 0.531274E-01 + 0.596400E-01 0.625675E-01 0.589780E-01 0.498680E-01 0.405936E-01 0.269968E-01 + 0.269968E-01 0.355758E-01 0.489830E-01 0.598867E-01 0.625675E-01 0.576056E-01 + 0.494937E-01 0.417669E-01 0.355603E-01 0.308819E-01 0.277169E-01 0.261315E-01 + 0.261315E-01 0.277169E-01 0.308819E-01 0.355603E-01 0.417669E-01 0.494937E-01 + 0.576056E-01 0.625675E-01 0.598867E-01 0.489830E-01 0.355758E-01 0.269968E-01 + 0.173212E-01 0.215594E-01 0.336667E-01 0.489830E-01 0.589780E-01 0.590302E-01 + 0.519648E-01 0.431159E-01 0.355244E-01 0.297806E-01 0.257241E-01 0.232916E-01 + 0.224840E-01 0.232916E-01 0.257241E-01 0.297806E-01 0.355244E-01 0.431159E-01 + 0.519648E-01 0.590302E-01 0.589780E-01 0.489830E-01 0.336667E-01 0.215594E-01 + 0.173212E-01 0.142537E-01 0.215594E-01 0.355758E-01 0.498680E-01 0.560474E-01 + 0.524590E-01 0.439394E-01 0.353868E-01 0.286912E-01 0.238879E-01 0.207435E-01 + 0.191829E-01 0.191829E-01 0.207435E-01 0.238879E-01 0.286912E-01 0.353868E-01 + 0.439394E-01 0.524590E-01 0.560474E-01 0.498680E-01 0.355758E-01 0.215594E-01 + 0.142537E-01 0.142537E-01 0.173212E-01 0.269968E-01 0.405936E-01 0.502944E-01 + 0.506982E-01 0.438602E-01 0.350891E-01 0.276655E-01 0.222441E-01 0.185511E-01 + 0.163824E-01 0.156674E-01 0.163824E-01 0.185511E-01 0.222441E-01 0.276655E-01 + 0.350891E-01 0.438602E-01 0.506982E-01 0.502944E-01 0.405936E-01 0.269968E-01 + 0.173212E-01 0.142537E-01 0.173212E-01 0.386373E-01 0.453630E-01 0.502944E-01 + 0.492335E-01 0.424531E-01 0.336423E-01 0.258818E-01 0.200995E-01 0.160855E-01 + 0.135462E-01 0.123229E-01 0.123229E-01 0.135462E-01 0.160855E-01 0.200995E-01 + 0.258818E-01 0.336423E-01 0.424531E-01 0.492335E-01 0.502944E-01 0.453630E-01 + 0.386373E-01 0.345053E-01 0.345053E-01 0.386373E-01 0.453630E-01 0.487304E-01 + 0.481035E-01 0.423826E-01 0.339519E-01 0.258890E-01 0.196306E-01 0.151913E-01 + 0.122425E-01 0.105678E-01 0.100298E-01 0.105678E-01 0.122425E-01 0.151913E-01 + 0.196306E-01 0.258890E-01 0.339519E-01 0.423826E-01 0.481035E-01 0.487304E-01 + 0.453630E-01 0.415988E-01 0.401068E-01 0.415988E-01 0.453630E-01 0.502944E-01 + 0.481035E-01 0.422287E-01 0.340054E-01 0.258693E-01 0.193258E-01 0.145756E-01 + 0.113161E-01 0.929662E-02 0.834807E-02 0.834807E-02 0.929662E-02 0.113161E-01 + 0.145756E-01 0.193258E-01 0.258693E-01 0.340054E-01 0.422287E-01 0.481035E-01 + 0.502944E-01 0.498680E-01 0.489830E-01 0.489830E-01 0.498680E-01 0.502944E-01 + 0.492335E-01 0.423826E-01 0.340054E-01 0.258538E-01 0.191739E-01 0.142170E-01 + 0.107249E-01 0.843989E-02 0.718294E-02 0.679022E-02 0.718294E-02 0.843989E-02 + 0.107249E-01 0.142170E-01 0.191739E-01 0.258538E-01 0.340054E-01 0.423826E-01 + 0.492335E-01 0.535709E-01 0.556625E-01 0.562477E-01 0.556625E-01 0.535709E-01 + 0.492335E-01 0.424531E-01 0.339519E-01 0.258693E-01 0.191739E-01 0.140988E-01 + 0.104347E-01 0.793755E-02 0.643497E-02 0.575473E-02 0.575473E-02 0.643497E-02 + 0.793755E-02 0.104347E-01 0.140988E-01 0.191739E-01 0.258693E-01 0.339519E-01 + 0.424531E-01 0.499921E-01 0.554502E-01 0.582676E-01 0.582676E-01 0.554502E-01 + 0.499921E-01 0.424531E-01 0.336423E-01 0.258890E-01 0.193258E-01 0.142170E-01 + 0.104347E-01 0.777002E-02 0.606052E-02 0.514749E-02 0.486804E-02 0.514749E-02 + 0.606052E-02 0.777002E-02 0.104347E-01 0.142170E-01 0.193258E-01 0.258890E-01 + 0.336423E-01 0.417281E-01 0.488647E-01 0.537639E-01 0.555070E-01 0.537639E-01 + 0.488647E-01 0.417281E-01 0.336423E-01 0.258818E-01 0.196306E-01 0.145756E-01 + 0.107249E-01 0.793755E-02 0.606052E-02 0.494425E-02 0.443841E-02 0.443841E-02 + 0.494425E-02 0.606052E-02 0.793755E-02 0.107249E-01 0.145756E-01 0.196306E-01 + 0.258818E-01 0.329495E-01 0.399611E-01 0.456893E-01 0.489277E-01 0.489277E-01 + 0.456893E-01 0.399611E-01 0.329495E-01 0.258818E-01 0.200995E-01 0.151913E-01 + 0.113161E-01 0.843989E-02 0.643497E-02 0.514749E-02 0.443841E-02 0.421312E-02 + 0.443841E-02 0.514749E-02 0.643497E-02 0.843989E-02 0.113161E-01 0.151913E-01 + 0.200995E-01 0.258641E-01 0.319699E-01 0.375334E-01 0.414815E-01 0.429150E-01 + 0.414815E-01 0.375334E-01 0.319699E-01 0.258641E-01 0.200995E-01 0.160855E-01 + 0.122425E-01 0.929662E-02 0.718294E-02 0.575473E-02 0.486804E-02 0.443841E-02 + 0.443841E-02 0.486804E-02 0.575473E-02 0.718294E-02 0.929662E-02 0.122425E-01 + 0.160855E-01 0.207321E-01 0.258622E-01 0.308819E-01 0.349694E-01 0.372839E-01 + 0.372839E-01 0.349694E-01 0.308819E-01 0.258622E-01 0.207321E-01 0.160855E-01 + 0.135462E-01 0.105678E-01 0.834807E-02 0.679022E-02 0.575473E-02 0.514749E-02 + 0.494425E-02 0.514749E-02 0.575473E-02 0.679022E-02 0.834807E-02 0.105678E-01 + 0.135462E-01 0.172544E-01 0.214930E-01 0.258665E-01 0.297806E-01 0.325323E-01 + 0.335279E-01 0.325323E-01 0.297806E-01 0.258665E-01 0.214930E-01 0.172544E-01 + 0.135462E-01 0.123229E-01 0.100298E-01 0.834807E-02 0.718294E-02 0.643497E-02 + 0.606052E-02 0.606052E-02 0.643497E-02 0.718294E-02 0.834807E-02 0.100298E-01 + 0.123229E-01 0.152385E-01 0.186622E-01 0.223396E-01 0.258622E-01 0.286912E-01 + 0.302813E-01 0.302813E-01 0.286912E-01 0.258622E-01 0.223396E-01 0.186622E-01 + 0.152385E-01 0.123229E-01 0.123229E-01 0.105678E-01 0.929662E-02 0.843989E-02 + 0.793755E-02 0.777002E-02 0.793755E-02 0.843989E-02 0.929662E-02 0.105678E-01 + 0.123229E-01 0.145820E-01 0.172809E-01 0.202611E-01 0.232513E-01 0.258641E-01 + 0.276655E-01 0.283097E-01 0.276655E-01 0.258641E-01 0.232513E-01 0.202611E-01 + 0.172809E-01 0.145820E-01 0.123229E-01 0.135462E-01 0.122425E-01 0.113161E-01 + 0.107249E-01 0.104347E-01 0.104347E-01 0.107249E-01 0.113161E-01 0.122425E-01 + 0.135462E-01 0.152385E-01 0.172809E-01 0.195825E-01 0.219742E-01 0.241831E-01 + 0.258818E-01 0.268002E-01 0.268002E-01 0.258818E-01 0.241831E-01 0.219742E-01 + 0.195825E-01 0.172809E-01 0.152385E-01 0.135462E-01 0.160855E-01 0.151913E-01 + 0.145756E-01 0.142170E-01 0.140988E-01 0.142170E-01 0.145756E-01 0.151913E-01 + 0.160855E-01 0.172544E-01 0.186622E-01 0.202611E-01 0.219742E-01 0.236381E-01 + 0.250115E-01 0.258890E-01 0.261851E-01 0.258890E-01 0.250115E-01 0.236381E-01 + 0.219742E-01 0.202611E-01 0.186622E-01 0.172544E-01 0.160855E-01 0.200995E-01 + 0.196306E-01 0.193258E-01 0.191739E-01 0.191739E-01 0.193258E-01 0.196306E-01 + 0.200995E-01 0.207321E-01 0.214930E-01 0.223396E-01 0.232513E-01 0.241831E-01 + 0.250115E-01 0.255918E-01 0.258693E-01 0.258693E-01 0.255918E-01 0.250115E-01 + 0.241831E-01 0.232513E-01 0.223396E-01 0.214930E-01 0.207321E-01 0.200995E-01 + 0.258818E-01 0.258890E-01 0.258693E-01 0.258538E-01 0.258693E-01 0.258890E-01 + 0.258818E-01 0.258641E-01 0.258622E-01 0.258665E-01 0.258622E-01 0.258641E-01 + 0.258818E-01 0.258890E-01 0.258693E-01 0.258538E-01 0.258693E-01 0.258890E-01 + 0.258818E-01 0.258641E-01 0.258622E-01 0.258665E-01 0.258622E-01 0.258641E-01 + 0.258818E-01 0.336423E-01 0.339519E-01 0.340054E-01 0.340054E-01 0.339519E-01 + 0.336423E-01 0.329495E-01 0.319699E-01 0.308819E-01 0.297806E-01 0.286912E-01 + 0.276655E-01 0.268002E-01 0.261851E-01 0.258693E-01 0.258693E-01 0.261851E-01 + 0.268002E-01 0.276655E-01 0.286912E-01 0.297806E-01 0.308819E-01 0.319699E-01 + 0.329495E-01 0.336423E-01 0.424531E-01 0.423826E-01 0.422287E-01 0.423826E-01 + 0.424531E-01 0.417281E-01 0.399611E-01 0.375334E-01 0.349694E-01 0.325323E-01 + 0.302813E-01 0.283097E-01 0.268002E-01 0.258890E-01 0.255918E-01 0.258890E-01 + 0.268002E-01 0.283097E-01 0.302813E-01 0.325323E-01 0.349694E-01 0.375334E-01 + 0.399611E-01 0.417281E-01 0.424531E-01 0.492335E-01 0.481035E-01 0.481035E-01 + 0.492335E-01 0.499921E-01 0.488647E-01 0.456893E-01 0.414815E-01 0.372839E-01 + 0.335279E-01 0.302813E-01 0.276655E-01 0.258818E-01 0.250115E-01 0.250115E-01 + 0.258818E-01 0.276655E-01 0.302813E-01 0.335279E-01 0.372839E-01 0.414815E-01 + 0.456893E-01 0.488647E-01 0.499921E-01 0.492335E-01 0.502944E-01 0.487304E-01 + 0.502944E-01 0.535709E-01 0.554502E-01 0.537639E-01 0.489277E-01 0.429150E-01 + 0.372839E-01 0.325323E-01 0.286912E-01 0.258641E-01 0.241831E-01 0.236381E-01 + 0.241831E-01 0.258641E-01 0.286912E-01 0.325323E-01 0.372839E-01 0.429150E-01 + 0.489277E-01 0.537639E-01 0.554502E-01 0.535709E-01 0.502944E-01 0.453630E-01 + 0.453630E-01 0.498680E-01 0.556625E-01 0.582676E-01 0.555070E-01 0.489277E-01 + 0.414815E-01 0.349694E-01 0.297806E-01 0.258622E-01 0.232513E-01 0.219742E-01 + 0.219742E-01 0.232513E-01 0.258622E-01 0.297806E-01 0.349694E-01 0.414815E-01 + 0.489277E-01 0.555070E-01 0.582676E-01 0.556625E-01 0.498680E-01 0.453630E-01 + 0.386373E-01 0.415988E-01 0.489830E-01 0.562477E-01 0.582676E-01 0.537639E-01 + 0.456893E-01 0.375334E-01 0.308819E-01 0.258665E-01 0.223396E-01 0.202611E-01 + 0.195825E-01 0.202611E-01 0.223396E-01 0.258665E-01 0.308819E-01 0.375334E-01 + 0.456893E-01 0.537639E-01 0.582676E-01 0.562477E-01 0.489830E-01 0.415988E-01 + 0.386373E-01 0.345053E-01 0.401068E-01 0.489830E-01 0.556625E-01 0.554502E-01 + 0.488647E-01 0.399611E-01 0.319699E-01 0.258622E-01 0.214930E-01 0.186622E-01 + 0.172809E-01 0.172809E-01 0.186622E-01 0.214930E-01 0.258622E-01 0.319699E-01 + 0.399611E-01 0.488647E-01 0.554502E-01 0.556625E-01 0.489830E-01 0.401068E-01 + 0.345053E-01 0.345053E-01 0.345053E-01 0.415988E-01 0.498680E-01 0.535709E-01 + 0.499921E-01 0.417281E-01 0.329495E-01 0.258641E-01 0.207321E-01 0.172544E-01 + 0.152385E-01 0.145820E-01 0.152385E-01 0.172544E-01 0.207321E-01 0.258641E-01 + 0.329495E-01 0.417281E-01 0.499921E-01 0.535709E-01 0.498680E-01 0.415988E-01 + 0.345053E-01 0.319563E-01 0.345053E-01 0.386373E-01 0.453630E-01 0.502944E-01 + 0.492335E-01 0.424531E-01 0.336423E-01 0.258818E-01 0.200995E-01 0.160855E-01 + 0.135462E-01 0.123229E-01 0.123229E-01 0.135462E-01 0.160855E-01 0.200995E-01 + 0.258818E-01 0.336423E-01 0.424531E-01 0.492335E-01 0.502944E-01 0.453630E-01 + 0.386373E-01 0.345053E-01 0.345053E-01 0.386373E-01 0.570012E-01 0.556051E-01 + 0.506982E-01 0.424531E-01 0.331452E-01 0.250115E-01 0.188635E-01 0.145193E-01 + 0.116478E-01 0.100355E-01 0.952277E-02 0.100355E-01 0.116478E-01 0.145193E-01 + 0.188635E-01 0.250115E-01 0.331452E-01 0.424531E-01 0.506982E-01 0.556051E-01 + 0.570012E-01 0.567074E-01 0.564294E-01 0.567074E-01 0.570012E-01 0.556051E-01 + 0.507602E-01 0.430297E-01 0.339519E-01 0.255918E-01 0.190386E-01 0.143047E-01 + 0.110600E-01 0.905956E-02 0.812613E-02 0.812613E-02 0.905956E-02 0.110600E-01 + 0.143047E-01 0.190386E-01 0.255918E-01 0.339519E-01 0.430297E-01 0.507602E-01 + 0.556051E-01 0.577546E-01 0.584098E-01 0.584098E-01 0.577546E-01 0.556051E-01 + 0.506982E-01 0.430297E-01 0.341947E-01 0.258693E-01 0.191432E-01 0.141712E-01 + 0.106691E-01 0.837934E-02 0.712172E-02 0.672922E-02 0.712172E-02 0.837934E-02 + 0.106691E-01 0.141712E-01 0.191432E-01 0.258693E-01 0.341947E-01 0.430297E-01 + 0.506982E-01 0.560474E-01 0.589780E-01 0.598867E-01 0.589780E-01 0.560474E-01 + 0.506982E-01 0.424531E-01 0.339519E-01 0.258693E-01 0.191739E-01 0.140988E-01 + 0.104347E-01 0.793755E-02 0.643497E-02 0.575473E-02 0.575473E-02 0.643497E-02 + 0.793755E-02 0.104347E-01 0.140988E-01 0.191739E-01 0.258693E-01 0.339519E-01 + 0.424531E-01 0.499921E-01 0.554502E-01 0.582676E-01 0.582676E-01 0.554502E-01 + 0.499921E-01 0.424531E-01 0.331452E-01 0.255918E-01 0.191432E-01 0.140988E-01 + 0.103541E-01 0.771271E-02 0.602050E-02 0.512081E-02 0.484678E-02 0.512081E-02 + 0.602050E-02 0.771271E-02 0.103541E-01 0.140988E-01 0.191432E-01 0.255918E-01 + 0.331452E-01 0.409266E-01 0.476986E-01 0.522905E-01 0.539125E-01 0.522905E-01 + 0.476986E-01 0.409266E-01 0.331452E-01 0.250115E-01 0.190386E-01 0.141712E-01 + 0.104347E-01 0.771271E-02 0.587919E-02 0.479983E-02 0.431881E-02 0.431881E-02 + 0.479983E-02 0.587919E-02 0.771271E-02 0.104347E-01 0.141712E-01 0.190386E-01 + 0.250115E-01 0.317043E-01 0.382749E-01 0.435886E-01 0.465705E-01 0.465705E-01 + 0.435886E-01 0.382749E-01 0.317043E-01 0.250115E-01 0.188635E-01 0.143047E-01 + 0.106691E-01 0.793755E-02 0.602050E-02 0.479983E-02 0.414359E-02 0.393981E-02 + 0.414359E-02 0.479983E-02 0.602050E-02 0.793755E-02 0.106691E-01 0.143047E-01 + 0.188635E-01 0.241831E-01 0.297890E-01 0.348716E-01 0.384625E-01 0.397629E-01 + 0.384625E-01 0.348716E-01 0.297890E-01 0.241831E-01 0.188635E-01 0.145193E-01 + 0.110600E-01 0.837934E-02 0.643497E-02 0.512081E-02 0.431881E-02 0.393981E-02 + 0.393981E-02 0.431881E-02 0.512081E-02 0.643497E-02 0.837934E-02 0.110600E-01 + 0.145193E-01 0.186759E-01 0.232513E-01 0.277169E-01 0.313421E-01 0.333894E-01 + 0.333894E-01 0.313421E-01 0.277169E-01 0.232513E-01 0.186759E-01 0.145193E-01 + 0.116478E-01 0.905956E-02 0.712172E-02 0.575473E-02 0.484678E-02 0.431881E-02 + 0.414359E-02 0.431881E-02 0.484678E-02 0.575473E-02 0.712172E-02 0.905956E-02 + 0.116478E-01 0.148660E-01 0.185459E-01 0.223396E-01 0.257241E-01 0.280936E-01 + 0.289485E-01 0.280936E-01 0.257241E-01 0.223396E-01 0.185459E-01 0.148660E-01 + 0.116478E-01 0.100355E-01 0.812613E-02 0.672922E-02 0.575473E-02 0.512081E-02 + 0.479983E-02 0.479983E-02 0.512081E-02 0.575473E-02 0.672922E-02 0.812613E-02 + 0.100355E-01 0.124825E-01 0.153787E-01 0.185021E-01 0.214930E-01 0.238879E-01 + 0.252300E-01 0.252300E-01 0.238879E-01 0.214930E-01 0.185021E-01 0.153787E-01 + 0.124825E-01 0.100355E-01 0.952277E-02 0.812613E-02 0.712172E-02 0.643497E-02 + 0.602050E-02 0.587919E-02 0.602050E-02 0.643497E-02 0.712172E-02 0.812613E-02 + 0.952277E-02 0.113527E-01 0.135746E-01 0.160510E-01 0.185459E-01 0.207321E-01 + 0.222441E-01 0.227862E-01 0.222441E-01 0.207321E-01 0.185459E-01 0.160510E-01 + 0.135746E-01 0.113527E-01 0.952277E-02 0.100355E-01 0.905956E-02 0.837934E-02 + 0.793755E-02 0.771271E-02 0.771271E-02 0.793755E-02 0.837934E-02 0.905956E-02 + 0.100355E-01 0.113527E-01 0.129964E-01 0.148798E-01 0.168476E-01 0.186759E-01 + 0.200995E-01 0.208803E-01 0.208803E-01 0.200995E-01 0.186759E-01 0.168476E-01 + 0.148798E-01 0.129964E-01 0.113527E-01 0.100355E-01 0.116478E-01 0.110600E-01 + 0.106691E-01 0.104347E-01 0.103541E-01 0.104347E-01 0.106691E-01 0.110600E-01 + 0.116478E-01 0.124825E-01 0.135746E-01 0.148798E-01 0.163037E-01 0.176960E-01 + 0.188635E-01 0.196306E-01 0.198958E-01 0.196306E-01 0.188635E-01 0.176960E-01 + 0.163037E-01 0.148798E-01 0.135746E-01 0.124825E-01 0.116478E-01 0.145193E-01 + 0.143047E-01 0.141712E-01 0.140988E-01 0.140988E-01 0.141712E-01 0.143047E-01 + 0.145193E-01 0.148660E-01 0.153787E-01 0.160510E-01 0.168476E-01 0.176960E-01 + 0.184714E-01 0.190386E-01 0.193258E-01 0.193258E-01 0.190386E-01 0.184714E-01 + 0.176960E-01 0.168476E-01 0.160510E-01 0.153787E-01 0.148660E-01 0.145193E-01 + 0.188635E-01 0.190386E-01 0.191432E-01 0.191739E-01 0.191432E-01 0.190386E-01 + 0.188635E-01 0.186759E-01 0.185459E-01 0.185021E-01 0.185459E-01 0.186759E-01 + 0.188635E-01 0.190386E-01 0.191432E-01 0.191739E-01 0.191432E-01 0.190386E-01 + 0.188635E-01 0.186759E-01 0.185459E-01 0.185021E-01 0.185459E-01 0.186759E-01 + 0.188635E-01 0.250115E-01 0.255918E-01 0.258693E-01 0.258693E-01 0.255918E-01 + 0.250115E-01 0.241831E-01 0.232513E-01 0.223396E-01 0.214930E-01 0.207321E-01 + 0.200995E-01 0.196306E-01 0.193258E-01 0.191739E-01 0.191739E-01 0.193258E-01 + 0.196306E-01 0.200995E-01 0.207321E-01 0.214930E-01 0.223396E-01 0.232513E-01 + 0.241831E-01 0.250115E-01 0.331452E-01 0.339519E-01 0.341947E-01 0.339519E-01 + 0.331452E-01 0.317043E-01 0.297890E-01 0.277169E-01 0.257241E-01 0.238879E-01 + 0.222441E-01 0.208803E-01 0.198958E-01 0.193258E-01 0.191432E-01 0.193258E-01 + 0.198958E-01 0.208803E-01 0.222441E-01 0.238879E-01 0.257241E-01 0.277169E-01 + 0.297890E-01 0.317043E-01 0.331452E-01 0.424531E-01 0.430297E-01 0.430297E-01 + 0.424531E-01 0.409266E-01 0.382749E-01 0.348716E-01 0.313421E-01 0.280936E-01 + 0.252300E-01 0.227862E-01 0.208803E-01 0.196306E-01 0.190386E-01 0.190386E-01 + 0.196306E-01 0.208803E-01 0.227862E-01 0.252300E-01 0.280936E-01 0.313421E-01 + 0.348716E-01 0.382749E-01 0.409266E-01 0.424531E-01 0.506982E-01 0.507602E-01 + 0.506982E-01 0.499921E-01 0.476986E-01 0.435886E-01 0.384625E-01 0.333894E-01 + 0.289485E-01 0.252300E-01 0.222441E-01 0.200995E-01 0.188635E-01 0.184714E-01 + 0.188635E-01 0.200995E-01 0.222441E-01 0.252300E-01 0.289485E-01 0.333894E-01 + 0.384625E-01 0.435886E-01 0.476986E-01 0.499921E-01 0.506982E-01 0.556051E-01 + 0.556051E-01 0.560474E-01 0.554502E-01 0.522905E-01 0.465705E-01 0.397629E-01 + 0.333894E-01 0.280936E-01 0.238879E-01 0.207321E-01 0.186759E-01 0.176960E-01 + 0.176960E-01 0.186759E-01 0.207321E-01 0.238879E-01 0.280936E-01 0.333894E-01 + 0.397629E-01 0.465705E-01 0.522905E-01 0.554502E-01 0.560474E-01 0.556051E-01 + 0.570012E-01 0.577546E-01 0.589780E-01 0.582676E-01 0.539125E-01 0.465705E-01 + 0.384625E-01 0.313421E-01 0.257241E-01 0.214930E-01 0.185459E-01 0.168476E-01 + 0.163037E-01 0.168476E-01 0.185459E-01 0.214930E-01 0.257241E-01 0.313421E-01 + 0.384625E-01 0.465705E-01 0.539125E-01 0.582676E-01 0.589780E-01 0.577546E-01 + 0.570012E-01 0.567074E-01 0.584098E-01 0.598867E-01 0.582676E-01 0.522905E-01 + 0.435886E-01 0.348716E-01 0.277169E-01 0.223396E-01 0.185021E-01 0.160510E-01 + 0.148798E-01 0.148798E-01 0.160510E-01 0.185021E-01 0.223396E-01 0.277169E-01 + 0.348716E-01 0.435886E-01 0.522905E-01 0.582676E-01 0.598867E-01 0.584098E-01 + 0.567074E-01 0.567074E-01 0.564294E-01 0.584098E-01 0.589780E-01 0.554502E-01 + 0.476986E-01 0.382749E-01 0.297890E-01 0.232513E-01 0.185459E-01 0.153787E-01 + 0.135746E-01 0.129964E-01 0.135746E-01 0.153787E-01 0.185459E-01 0.232513E-01 + 0.297890E-01 0.382749E-01 0.476986E-01 0.554502E-01 0.589780E-01 0.584098E-01 + 0.564294E-01 0.555047E-01 0.564294E-01 0.567074E-01 0.577546E-01 0.560474E-01 + 0.499921E-01 0.409266E-01 0.317043E-01 0.241831E-01 0.186759E-01 0.148660E-01 + 0.124825E-01 0.113527E-01 0.113527E-01 0.124825E-01 0.148660E-01 0.186759E-01 + 0.241831E-01 0.317043E-01 0.409266E-01 0.499921E-01 0.560474E-01 0.577546E-01 + 0.567074E-01 0.555047E-01 0.555047E-01 0.567074E-01 0.570012E-01 0.556051E-01 + 0.506982E-01 0.424531E-01 0.331452E-01 0.250115E-01 0.188635E-01 0.145193E-01 + 0.116478E-01 0.100355E-01 0.952277E-02 0.100355E-01 0.116478E-01 0.145193E-01 + 0.188635E-01 0.250115E-01 0.331452E-01 0.424531E-01 0.506982E-01 0.556051E-01 + 0.570012E-01 0.567074E-01 0.564294E-01 0.567074E-01 0.570012E-01 0.628947E-01 + 0.541857E-01 0.438602E-01 0.336423E-01 0.250115E-01 0.184714E-01 0.137863E-01 + 0.105905E-01 0.863840E-02 0.773621E-02 0.773621E-02 0.863840E-02 0.105905E-01 + 0.137863E-01 0.184714E-01 0.250115E-01 0.336423E-01 0.438602E-01 0.541857E-01 + 0.628947E-01 0.689455E-01 0.720105E-01 0.720105E-01 0.689455E-01 0.628947E-01 + 0.541857E-01 0.445636E-01 0.346386E-01 0.258890E-01 0.190386E-01 0.140249E-01 + 0.105047E-01 0.821308E-02 0.696020E-02 0.657011E-02 0.696020E-02 0.821308E-02 + 0.105047E-01 0.140249E-01 0.190386E-01 0.258890E-01 0.346386E-01 0.445636E-01 + 0.541857E-01 0.619819E-01 0.669676E-01 0.686757E-01 0.669676E-01 0.619819E-01 + 0.541857E-01 0.438602E-01 0.346386E-01 0.261851E-01 0.193258E-01 0.141712E-01 + 0.104608E-01 0.793592E-02 0.641629E-02 0.572648E-02 0.572648E-02 0.641629E-02 + 0.793592E-02 0.104608E-01 0.141712E-01 0.193258E-01 0.261851E-01 0.346386E-01 + 0.438602E-01 0.524590E-01 0.590302E-01 0.625675E-01 0.625675E-01 0.590302E-01 + 0.524590E-01 0.438602E-01 0.336423E-01 0.258890E-01 0.193258E-01 0.142170E-01 + 0.104347E-01 0.777002E-02 0.606052E-02 0.514749E-02 0.486804E-02 0.514749E-02 + 0.606052E-02 0.777002E-02 0.104347E-01 0.142170E-01 0.193258E-01 0.258890E-01 + 0.336423E-01 0.417281E-01 0.488647E-01 0.537639E-01 0.555070E-01 0.537639E-01 + 0.488647E-01 0.417281E-01 0.336423E-01 0.250115E-01 0.190386E-01 0.141712E-01 + 0.104347E-01 0.771271E-02 0.587919E-02 0.479983E-02 0.431881E-02 0.431881E-02 + 0.479983E-02 0.587919E-02 0.771271E-02 0.104347E-01 0.141712E-01 0.190386E-01 + 0.250115E-01 0.317043E-01 0.382749E-01 0.435886E-01 0.465705E-01 0.465705E-01 + 0.435886E-01 0.382749E-01 0.317043E-01 0.250115E-01 0.184714E-01 0.140249E-01 + 0.104608E-01 0.777002E-02 0.587919E-02 0.468219E-02 0.404670E-02 0.385164E-02 + 0.404670E-02 0.468219E-02 0.587919E-02 0.777002E-02 0.104608E-01 0.140249E-01 + 0.184714E-01 0.236381E-01 0.290632E-01 0.339662E-01 0.374214E-01 0.386708E-01 + 0.374214E-01 0.339662E-01 0.290632E-01 0.236381E-01 0.184714E-01 0.137863E-01 + 0.105047E-01 0.793592E-02 0.606052E-02 0.479983E-02 0.404670E-02 0.370043E-02 + 0.370043E-02 0.404670E-02 0.479983E-02 0.606052E-02 0.793592E-02 0.105047E-01 + 0.137863E-01 0.176960E-01 0.219742E-01 0.261315E-01 0.294949E-01 0.313897E-01 + 0.313897E-01 0.294949E-01 0.261315E-01 0.219742E-01 0.176960E-01 0.137863E-01 + 0.105905E-01 0.821308E-02 0.641629E-02 0.514749E-02 0.431881E-02 0.385164E-02 + 0.370043E-02 0.385164E-02 0.431881E-02 0.514749E-02 0.641629E-02 0.821308E-02 + 0.105905E-01 0.135197E-01 0.168476E-01 0.202611E-01 0.232916E-01 0.254039E-01 + 0.261640E-01 0.254039E-01 0.232916E-01 0.202611E-01 0.168476E-01 0.135197E-01 + 0.105905E-01 0.863840E-02 0.696020E-02 0.572648E-02 0.486804E-02 0.431881E-02 + 0.404670E-02 0.404670E-02 0.431881E-02 0.486804E-02 0.572648E-02 0.696020E-02 + 0.863840E-02 0.107816E-01 0.133171E-01 0.160510E-01 0.186622E-01 0.207435E-01 + 0.219046E-01 0.219046E-01 0.207435E-01 0.186622E-01 0.160510E-01 0.133171E-01 + 0.107816E-01 0.863840E-02 0.773621E-02 0.657011E-02 0.572648E-02 0.514749E-02 + 0.479983E-02 0.468219E-02 0.479983E-02 0.514749E-02 0.572648E-02 0.657011E-02 + 0.773621E-02 0.926528E-02 0.111368E-01 0.132429E-01 0.153787E-01 0.172544E-01 + 0.185511E-01 0.190156E-01 0.185511E-01 0.172544E-01 0.153787E-01 0.132429E-01 + 0.111368E-01 0.926528E-02 0.773621E-02 0.773621E-02 0.696020E-02 0.641629E-02 + 0.606052E-02 0.587919E-02 0.587919E-02 0.606052E-02 0.641629E-02 0.696020E-02 + 0.773621E-02 0.878825E-02 0.101195E-01 0.116712E-01 0.133171E-01 0.148660E-01 + 0.160855E-01 0.167602E-01 0.167602E-01 0.160855E-01 0.148660E-01 0.133171E-01 + 0.116712E-01 0.101195E-01 0.878825E-02 0.773621E-02 0.863840E-02 0.821308E-02 + 0.793592E-02 0.777002E-02 0.771271E-02 0.777002E-02 0.793592E-02 0.821308E-02 + 0.863840E-02 0.926528E-02 0.101195E-01 0.111744E-01 0.123505E-01 0.135197E-01 + 0.145193E-01 0.151913E-01 0.154277E-01 0.151913E-01 0.145193E-01 0.135197E-01 + 0.123505E-01 0.111744E-01 0.101195E-01 0.926528E-02 0.863840E-02 0.105905E-01 + 0.105047E-01 0.104608E-01 0.104347E-01 0.104347E-01 0.104608E-01 0.105047E-01 + 0.105905E-01 0.107816E-01 0.111368E-01 0.116712E-01 0.123505E-01 0.130949E-01 + 0.137863E-01 0.143047E-01 0.145756E-01 0.145756E-01 0.143047E-01 0.137863E-01 + 0.130949E-01 0.123505E-01 0.116712E-01 0.111368E-01 0.107816E-01 0.105905E-01 + 0.137863E-01 0.140249E-01 0.141712E-01 0.142170E-01 0.141712E-01 0.140249E-01 + 0.137863E-01 0.135197E-01 0.133171E-01 0.132429E-01 0.133171E-01 0.135197E-01 + 0.137863E-01 0.140249E-01 0.141712E-01 0.142170E-01 0.141712E-01 0.140249E-01 + 0.137863E-01 0.135197E-01 0.133171E-01 0.132429E-01 0.133171E-01 0.135197E-01 + 0.137863E-01 0.184714E-01 0.190386E-01 0.193258E-01 0.193258E-01 0.190386E-01 + 0.184714E-01 0.176960E-01 0.168476E-01 0.160510E-01 0.153787E-01 0.148660E-01 + 0.145193E-01 0.143047E-01 0.141712E-01 0.140988E-01 0.140988E-01 0.141712E-01 + 0.143047E-01 0.145193E-01 0.148660E-01 0.153787E-01 0.160510E-01 0.168476E-01 + 0.176960E-01 0.184714E-01 0.250115E-01 0.258890E-01 0.261851E-01 0.258890E-01 + 0.250115E-01 0.236381E-01 0.219742E-01 0.202611E-01 0.186622E-01 0.172544E-01 + 0.160855E-01 0.151913E-01 0.145756E-01 0.142170E-01 0.140988E-01 0.142170E-01 + 0.145756E-01 0.151913E-01 0.160855E-01 0.172544E-01 0.186622E-01 0.202611E-01 + 0.219742E-01 0.236381E-01 0.250115E-01 0.336423E-01 0.346386E-01 0.346386E-01 + 0.336423E-01 0.317043E-01 0.290632E-01 0.261315E-01 0.232916E-01 0.207435E-01 + 0.185511E-01 0.167602E-01 0.154277E-01 0.145756E-01 0.141712E-01 0.141712E-01 + 0.145756E-01 0.154277E-01 0.167602E-01 0.185511E-01 0.207435E-01 0.232916E-01 + 0.261315E-01 0.290632E-01 0.317043E-01 0.336423E-01 0.438602E-01 0.445636E-01 + 0.438602E-01 0.417281E-01 0.382749E-01 0.339662E-01 0.294949E-01 0.254039E-01 + 0.219046E-01 0.190156E-01 0.167602E-01 0.151913E-01 0.143047E-01 0.140249E-01 + 0.143047E-01 0.151913E-01 0.167602E-01 0.190156E-01 0.219046E-01 0.254039E-01 + 0.294949E-01 0.339662E-01 0.382749E-01 0.417281E-01 0.438602E-01 0.541857E-01 + 0.541857E-01 0.524590E-01 0.488647E-01 0.435886E-01 0.374214E-01 0.313897E-01 + 0.261640E-01 0.219046E-01 0.185511E-01 0.160855E-01 0.145193E-01 0.137863E-01 + 0.137863E-01 0.145193E-01 0.160855E-01 0.185511E-01 0.219046E-01 0.261640E-01 + 0.313897E-01 0.374214E-01 0.435886E-01 0.488647E-01 0.524590E-01 0.541857E-01 + 0.628947E-01 0.619819E-01 0.590302E-01 0.537639E-01 0.465705E-01 0.386708E-01 + 0.313897E-01 0.254039E-01 0.207435E-01 0.172544E-01 0.148660E-01 0.135197E-01 + 0.130949E-01 0.135197E-01 0.148660E-01 0.172544E-01 0.207435E-01 0.254039E-01 + 0.313897E-01 0.386708E-01 0.465705E-01 0.537639E-01 0.590302E-01 0.619819E-01 + 0.628947E-01 0.689455E-01 0.669676E-01 0.625675E-01 0.555070E-01 0.465705E-01 + 0.374214E-01 0.294949E-01 0.232916E-01 0.186622E-01 0.153787E-01 0.133171E-01 + 0.123505E-01 0.123505E-01 0.133171E-01 0.153787E-01 0.186622E-01 0.232916E-01 + 0.294949E-01 0.374214E-01 0.465705E-01 0.555070E-01 0.625675E-01 0.669676E-01 + 0.689455E-01 0.689455E-01 0.720105E-01 0.686757E-01 0.625675E-01 0.537639E-01 + 0.435886E-01 0.339662E-01 0.261315E-01 0.202611E-01 0.160510E-01 0.132429E-01 + 0.116712E-01 0.111744E-01 0.116712E-01 0.132429E-01 0.160510E-01 0.202611E-01 + 0.261315E-01 0.339662E-01 0.435886E-01 0.537639E-01 0.625675E-01 0.686757E-01 + 0.720105E-01 0.730466E-01 0.720105E-01 0.720105E-01 0.669676E-01 0.590302E-01 + 0.488647E-01 0.382749E-01 0.290632E-01 0.219742E-01 0.168476E-01 0.133171E-01 + 0.111368E-01 0.101195E-01 0.101195E-01 0.111368E-01 0.133171E-01 0.168476E-01 + 0.219742E-01 0.290632E-01 0.382749E-01 0.488647E-01 0.590302E-01 0.669676E-01 + 0.720105E-01 0.743983E-01 0.743983E-01 0.720105E-01 0.689455E-01 0.619819E-01 + 0.524590E-01 0.417281E-01 0.317043E-01 0.236381E-01 0.176960E-01 0.135197E-01 + 0.107816E-01 0.926528E-02 0.878825E-02 0.926528E-02 0.107816E-01 0.135197E-01 + 0.176960E-01 0.236381E-01 0.317043E-01 0.417281E-01 0.524590E-01 0.619819E-01 + 0.689455E-01 0.730466E-01 0.743983E-01 0.730466E-01 0.689455E-01 0.628947E-01 + 0.541857E-01 0.438602E-01 0.336423E-01 0.250115E-01 0.184714E-01 0.137863E-01 + 0.105905E-01 0.863840E-02 0.773621E-02 0.773621E-02 0.863840E-02 0.105905E-01 + 0.137863E-01 0.184714E-01 0.250115E-01 0.336423E-01 0.438602E-01 0.541857E-01 + 0.628947E-01 0.689455E-01 0.720105E-01 0.720105E-01 0.689455E-01 0.628947E-01 + 0.577130E-01 0.461141E-01 0.350891E-01 0.258818E-01 0.188635E-01 0.137863E-01 + 0.102572E-01 0.798544E-02 0.675236E-02 0.636908E-02 0.675236E-02 0.798544E-02 + 0.102572E-01 0.137863E-01 0.188635E-01 0.258818E-01 0.350891E-01 0.461141E-01 + 0.577130E-01 0.680392E-01 0.751976E-01 0.777628E-01 0.751976E-01 0.680392E-01 + 0.577130E-01 0.461141E-01 0.358437E-01 0.268002E-01 0.196306E-01 0.143047E-01 + 0.105047E-01 0.794138E-02 0.640444E-02 0.570466E-02 0.570466E-02 0.640444E-02 + 0.794138E-02 0.105047E-01 0.143047E-01 0.196306E-01 0.268002E-01 0.358437E-01 + 0.461141E-01 0.562141E-01 0.643573E-01 0.689152E-01 0.689152E-01 0.643573E-01 + 0.562141E-01 0.461141E-01 0.350891E-01 0.268002E-01 0.198958E-01 0.145756E-01 + 0.106691E-01 0.793592E-02 0.618373E-02 0.523975E-02 0.494764E-02 0.523975E-02 + 0.618373E-02 0.793592E-02 0.106691E-01 0.145756E-01 0.198958E-01 0.268002E-01 + 0.350891E-01 0.439394E-01 0.519648E-01 0.576056E-01 0.596400E-01 0.576056E-01 + 0.519648E-01 0.439394E-01 0.350891E-01 0.258818E-01 0.196306E-01 0.145756E-01 + 0.107249E-01 0.793755E-02 0.606052E-02 0.494425E-02 0.443841E-02 0.443841E-02 + 0.494425E-02 0.606052E-02 0.793755E-02 0.107249E-01 0.145756E-01 0.196306E-01 + 0.258818E-01 0.329495E-01 0.399611E-01 0.456893E-01 0.489277E-01 0.489277E-01 + 0.456893E-01 0.399611E-01 0.329495E-01 0.258818E-01 0.188635E-01 0.143047E-01 + 0.106691E-01 0.793755E-02 0.602050E-02 0.479983E-02 0.414359E-02 0.393981E-02 + 0.414359E-02 0.479983E-02 0.602050E-02 0.793755E-02 0.106691E-01 0.143047E-01 + 0.188635E-01 0.241831E-01 0.297890E-01 0.348716E-01 0.384625E-01 0.397629E-01 + 0.384625E-01 0.348716E-01 0.297890E-01 0.241831E-01 0.188635E-01 0.137863E-01 + 0.105047E-01 0.793592E-02 0.606052E-02 0.479983E-02 0.404670E-02 0.370043E-02 + 0.370043E-02 0.404670E-02 0.479983E-02 0.606052E-02 0.793592E-02 0.105047E-01 + 0.137863E-01 0.176960E-01 0.219742E-01 0.261315E-01 0.294949E-01 0.313897E-01 + 0.313897E-01 0.294949E-01 0.261315E-01 0.219742E-01 0.176960E-01 0.137863E-01 + 0.102572E-01 0.794138E-02 0.618373E-02 0.494425E-02 0.414359E-02 0.370043E-02 + 0.355908E-02 0.370043E-02 0.414359E-02 0.494425E-02 0.618373E-02 0.794138E-02 + 0.102572E-01 0.130949E-01 0.163037E-01 0.195825E-01 0.224840E-01 0.245013E-01 + 0.252261E-01 0.245013E-01 0.224840E-01 0.195825E-01 0.163037E-01 0.130949E-01 + 0.102572E-01 0.798544E-02 0.640444E-02 0.523975E-02 0.443841E-02 0.393981E-02 + 0.370043E-02 0.370043E-02 0.393981E-02 0.443841E-02 0.523975E-02 0.640444E-02 + 0.798544E-02 0.999156E-02 0.123505E-01 0.148798E-01 0.172809E-01 0.191829E-01 + 0.202389E-01 0.202389E-01 0.191829E-01 0.172809E-01 0.148798E-01 0.123505E-01 + 0.999156E-02 0.798544E-02 0.675236E-02 0.570466E-02 0.494764E-02 0.443841E-02 + 0.414359E-02 0.404670E-02 0.414359E-02 0.443841E-02 0.494764E-02 0.570466E-02 + 0.675236E-02 0.812001E-02 0.979082E-02 0.116712E-01 0.135746E-01 0.152385E-01 + 0.163824E-01 0.167905E-01 0.163824E-01 0.152385E-01 0.135746E-01 0.116712E-01 + 0.979082E-02 0.812001E-02 0.675236E-02 0.636908E-02 0.570466E-02 0.523975E-02 + 0.494425E-02 0.479983E-02 0.479983E-02 0.494425E-02 0.523975E-02 0.570466E-02 + 0.636908E-02 0.726231E-02 0.839115E-02 0.971680E-02 0.111368E-01 0.124825E-01 + 0.135462E-01 0.141357E-01 0.141357E-01 0.135462E-01 0.124825E-01 0.111368E-01 + 0.971680E-02 0.839115E-02 0.726231E-02 0.636908E-02 0.675236E-02 0.640444E-02 + 0.618373E-02 0.606052E-02 0.602050E-02 0.606052E-02 0.618373E-02 0.640444E-02 + 0.675236E-02 0.726231E-02 0.795383E-02 0.881467E-02 0.979082E-02 0.107816E-01 + 0.116478E-01 0.122425E-01 0.124544E-01 0.122425E-01 0.116478E-01 0.107816E-01 + 0.979082E-02 0.881467E-02 0.795383E-02 0.726231E-02 0.675236E-02 0.798544E-02 + 0.794138E-02 0.793592E-02 0.793755E-02 0.793755E-02 0.793592E-02 0.794138E-02 + 0.798544E-02 0.812001E-02 0.839115E-02 0.881467E-02 0.936834E-02 0.999156E-02 + 0.105905E-01 0.110600E-01 0.113161E-01 0.113161E-01 0.110600E-01 0.105905E-01 + 0.999156E-02 0.936834E-02 0.881467E-02 0.839115E-02 0.812001E-02 0.798544E-02 + 0.102572E-01 0.105047E-01 0.106691E-01 0.107249E-01 0.106691E-01 0.105047E-01 + 0.102572E-01 0.999156E-02 0.979082E-02 0.971680E-02 0.979082E-02 0.999156E-02 + 0.102572E-01 0.105047E-01 0.106691E-01 0.107249E-01 0.106691E-01 0.105047E-01 + 0.102572E-01 0.999156E-02 0.979082E-02 0.971680E-02 0.979082E-02 0.999156E-02 + 0.102572E-01 0.137863E-01 0.143047E-01 0.145756E-01 0.145756E-01 0.143047E-01 + 0.137863E-01 0.130949E-01 0.123505E-01 0.116712E-01 0.111368E-01 0.107816E-01 + 0.105905E-01 0.105047E-01 0.104608E-01 0.104347E-01 0.104347E-01 0.104608E-01 + 0.105047E-01 0.105905E-01 0.107816E-01 0.111368E-01 0.116712E-01 0.123505E-01 + 0.130949E-01 0.137863E-01 0.188635E-01 0.196306E-01 0.198958E-01 0.196306E-01 + 0.188635E-01 0.176960E-01 0.163037E-01 0.148798E-01 0.135746E-01 0.124825E-01 + 0.116478E-01 0.110600E-01 0.106691E-01 0.104347E-01 0.103541E-01 0.104347E-01 + 0.106691E-01 0.110600E-01 0.116478E-01 0.124825E-01 0.135746E-01 0.148798E-01 + 0.163037E-01 0.176960E-01 0.188635E-01 0.258818E-01 0.268002E-01 0.268002E-01 + 0.258818E-01 0.241831E-01 0.219742E-01 0.195825E-01 0.172809E-01 0.152385E-01 + 0.135462E-01 0.122425E-01 0.113161E-01 0.107249E-01 0.104347E-01 0.104347E-01 + 0.107249E-01 0.113161E-01 0.122425E-01 0.135462E-01 0.152385E-01 0.172809E-01 + 0.195825E-01 0.219742E-01 0.241831E-01 0.258818E-01 0.350891E-01 0.358437E-01 + 0.350891E-01 0.329495E-01 0.297890E-01 0.261315E-01 0.224840E-01 0.191829E-01 + 0.163824E-01 0.141357E-01 0.124544E-01 0.113161E-01 0.106691E-01 0.104608E-01 + 0.106691E-01 0.113161E-01 0.124544E-01 0.141357E-01 0.163824E-01 0.191829E-01 + 0.224840E-01 0.261315E-01 0.297890E-01 0.329495E-01 0.350891E-01 0.461141E-01 + 0.461141E-01 0.439394E-01 0.399611E-01 0.348716E-01 0.294949E-01 0.245013E-01 + 0.202389E-01 0.167905E-01 0.141357E-01 0.122425E-01 0.110600E-01 0.105047E-01 + 0.105047E-01 0.110600E-01 0.122425E-01 0.141357E-01 0.167905E-01 0.202389E-01 + 0.245013E-01 0.294949E-01 0.348716E-01 0.399611E-01 0.439394E-01 0.461141E-01 + 0.577130E-01 0.562141E-01 0.519648E-01 0.456893E-01 0.384625E-01 0.313897E-01 + 0.252261E-01 0.202389E-01 0.163824E-01 0.135462E-01 0.116478E-01 0.105905E-01 + 0.102572E-01 0.105905E-01 0.116478E-01 0.135462E-01 0.163824E-01 0.202389E-01 + 0.252261E-01 0.313897E-01 0.384625E-01 0.456893E-01 0.519648E-01 0.562141E-01 + 0.577130E-01 0.680392E-01 0.643573E-01 0.576056E-01 0.489277E-01 0.397629E-01 + 0.313897E-01 0.245013E-01 0.191829E-01 0.152385E-01 0.124825E-01 0.107816E-01 + 0.999156E-02 0.999156E-02 0.107816E-01 0.124825E-01 0.152385E-01 0.191829E-01 + 0.245013E-01 0.313897E-01 0.397629E-01 0.489277E-01 0.576056E-01 0.643573E-01 + 0.680392E-01 0.680392E-01 0.751976E-01 0.689152E-01 0.596400E-01 0.489277E-01 + 0.384625E-01 0.294949E-01 0.224840E-01 0.172809E-01 0.135746E-01 0.111368E-01 + 0.979082E-02 0.936834E-02 0.979082E-02 0.111368E-01 0.135746E-01 0.172809E-01 + 0.224840E-01 0.294949E-01 0.384625E-01 0.489277E-01 0.596400E-01 0.689152E-01 + 0.751976E-01 0.774199E-01 0.751976E-01 0.777628E-01 0.689152E-01 0.576056E-01 + 0.456893E-01 0.348716E-01 0.261315E-01 0.195825E-01 0.148798E-01 0.116712E-01 + 0.971680E-02 0.881467E-02 0.881467E-02 0.971680E-02 0.116712E-01 0.148798E-01 + 0.195825E-01 0.261315E-01 0.348716E-01 0.456893E-01 0.576056E-01 0.689152E-01 + 0.777628E-01 0.826277E-01 0.826277E-01 0.777628E-01 0.751976E-01 0.643573E-01 + 0.519648E-01 0.399611E-01 0.297890E-01 0.219742E-01 0.163037E-01 0.123505E-01 + 0.979082E-02 0.839115E-02 0.795383E-02 0.839115E-02 0.979082E-02 0.123505E-01 + 0.163037E-01 0.219742E-01 0.297890E-01 0.399611E-01 0.519648E-01 0.643573E-01 + 0.751976E-01 0.826277E-01 0.852782E-01 0.826277E-01 0.751976E-01 0.680392E-01 + 0.562141E-01 0.439394E-01 0.329495E-01 0.241831E-01 0.176960E-01 0.130949E-01 + 0.999156E-02 0.812001E-02 0.726231E-02 0.726231E-02 0.812001E-02 0.999156E-02 + 0.130949E-01 0.176960E-01 0.241831E-01 0.329495E-01 0.439394E-01 0.562141E-01 + 0.680392E-01 0.774199E-01 0.826277E-01 0.826277E-01 0.774199E-01 0.680392E-01 + 0.577130E-01 0.461141E-01 0.350891E-01 0.258818E-01 0.188635E-01 0.137863E-01 + 0.102572E-01 0.798544E-02 0.675236E-02 0.636908E-02 0.675236E-02 0.798544E-02 + 0.102572E-01 0.137863E-01 0.188635E-01 0.258818E-01 0.350891E-01 0.461141E-01 + 0.577130E-01 0.680392E-01 0.751976E-01 0.777628E-01 0.751976E-01 0.680392E-01 + 0.577130E-01 0.484779E-01 0.373044E-01 0.276655E-01 0.200995E-01 0.145193E-01 + 0.105905E-01 0.798544E-02 0.643891E-02 0.573385E-02 0.573385E-02 0.643891E-02 + 0.798544E-02 0.105905E-01 0.145193E-01 0.200995E-01 0.276655E-01 0.373044E-01 + 0.484779E-01 0.597979E-01 0.692075E-01 0.745914E-01 0.745914E-01 0.692075E-01 + 0.597979E-01 0.484779E-01 0.373044E-01 0.283097E-01 0.208803E-01 0.151913E-01 + 0.110600E-01 0.821308E-02 0.640444E-02 0.542572E-02 0.511980E-02 0.542572E-02 + 0.640444E-02 0.821308E-02 0.110600E-01 0.151913E-01 0.208803E-01 0.283097E-01 + 0.373044E-01 0.470527E-01 0.560643E-01 0.625105E-01 0.648593E-01 0.625105E-01 + 0.560643E-01 0.470527E-01 0.373044E-01 0.276655E-01 0.208803E-01 0.154277E-01 + 0.113161E-01 0.837934E-02 0.641629E-02 0.523975E-02 0.469643E-02 0.469643E-02 + 0.523975E-02 0.641629E-02 0.837934E-02 0.113161E-01 0.154277E-01 0.208803E-01 + 0.276655E-01 0.353868E-01 0.431159E-01 0.494937E-01 0.531274E-01 0.531274E-01 + 0.494937E-01 0.431159E-01 0.353868E-01 0.276655E-01 0.200995E-01 0.151913E-01 + 0.113161E-01 0.843989E-02 0.643497E-02 0.514749E-02 0.443841E-02 0.421312E-02 + 0.443841E-02 0.514749E-02 0.643497E-02 0.843989E-02 0.113161E-01 0.151913E-01 + 0.200995E-01 0.258641E-01 0.319699E-01 0.375334E-01 0.414815E-01 0.429150E-01 + 0.414815E-01 0.375334E-01 0.319699E-01 0.258641E-01 0.200995E-01 0.145193E-01 + 0.110600E-01 0.837934E-02 0.643497E-02 0.512081E-02 0.431881E-02 0.393981E-02 + 0.393981E-02 0.431881E-02 0.512081E-02 0.643497E-02 0.837934E-02 0.110600E-01 + 0.145193E-01 0.186759E-01 0.232513E-01 0.277169E-01 0.313421E-01 0.333894E-01 + 0.333894E-01 0.313421E-01 0.277169E-01 0.232513E-01 0.186759E-01 0.145193E-01 + 0.105905E-01 0.821308E-02 0.641629E-02 0.514749E-02 0.431881E-02 0.385164E-02 + 0.370043E-02 0.385164E-02 0.431881E-02 0.514749E-02 0.641629E-02 0.821308E-02 + 0.105905E-01 0.135197E-01 0.168476E-01 0.202611E-01 0.232916E-01 0.254039E-01 + 0.261640E-01 0.254039E-01 0.232916E-01 0.202611E-01 0.168476E-01 0.135197E-01 + 0.105905E-01 0.798544E-02 0.640444E-02 0.523975E-02 0.443841E-02 0.393981E-02 + 0.370043E-02 0.370043E-02 0.393981E-02 0.443841E-02 0.523975E-02 0.640444E-02 + 0.798544E-02 0.999156E-02 0.123505E-01 0.148798E-01 0.172809E-01 0.191829E-01 + 0.202389E-01 0.202389E-01 0.191829E-01 0.172809E-01 0.148798E-01 0.123505E-01 + 0.999156E-02 0.798544E-02 0.643891E-02 0.542572E-02 0.469643E-02 0.421312E-02 + 0.393981E-02 0.385164E-02 0.393981E-02 0.421312E-02 0.469643E-02 0.542572E-02 + 0.643891E-02 0.775932E-02 0.936834E-02 0.111744E-01 0.129964E-01 0.145820E-01 + 0.156674E-01 0.160537E-01 0.156674E-01 0.145820E-01 0.129964E-01 0.111744E-01 + 0.936834E-02 0.775932E-02 0.643891E-02 0.573385E-02 0.511980E-02 0.469643E-02 + 0.443841E-02 0.431881E-02 0.431881E-02 0.443841E-02 0.469643E-02 0.511980E-02 + 0.573385E-02 0.655796E-02 0.759607E-02 0.881467E-02 0.101195E-01 0.113527E-01 + 0.123229E-01 0.128584E-01 0.128584E-01 0.123229E-01 0.113527E-01 0.101195E-01 + 0.881467E-02 0.759607E-02 0.655796E-02 0.573385E-02 0.573385E-02 0.542572E-02 + 0.523975E-02 0.514749E-02 0.512081E-02 0.514749E-02 0.523975E-02 0.542572E-02 + 0.573385E-02 0.618454E-02 0.678802E-02 0.753699E-02 0.839115E-02 0.926528E-02 + 0.100355E-01 0.105678E-01 0.107582E-01 0.105678E-01 0.100355E-01 0.926528E-02 + 0.839115E-02 0.753699E-02 0.678802E-02 0.618454E-02 0.573385E-02 0.643891E-02 + 0.640444E-02 0.641629E-02 0.643497E-02 0.643497E-02 0.641629E-02 0.640444E-02 + 0.643891E-02 0.655796E-02 0.678802E-02 0.713833E-02 0.759607E-02 0.812001E-02 + 0.863840E-02 0.905956E-02 0.929662E-02 0.929662E-02 0.905956E-02 0.863840E-02 + 0.812001E-02 0.759607E-02 0.713833E-02 0.678802E-02 0.655796E-02 0.643891E-02 + 0.798544E-02 0.821308E-02 0.837934E-02 0.843989E-02 0.837934E-02 0.821308E-02 + 0.798544E-02 0.775932E-02 0.759607E-02 0.753699E-02 0.759607E-02 0.775932E-02 + 0.798544E-02 0.821308E-02 0.837934E-02 0.843989E-02 0.837934E-02 0.821308E-02 + 0.798544E-02 0.775932E-02 0.759607E-02 0.753699E-02 0.759607E-02 0.775932E-02 + 0.798544E-02 0.105905E-01 0.110600E-01 0.113161E-01 0.113161E-01 0.110600E-01 + 0.105905E-01 0.999156E-02 0.936834E-02 0.881467E-02 0.839115E-02 0.812001E-02 + 0.798544E-02 0.794138E-02 0.793592E-02 0.793755E-02 0.793755E-02 0.793592E-02 + 0.794138E-02 0.798544E-02 0.812001E-02 0.839115E-02 0.881467E-02 0.936834E-02 + 0.999156E-02 0.105905E-01 0.145193E-01 0.151913E-01 0.154277E-01 0.151913E-01 + 0.145193E-01 0.135197E-01 0.123505E-01 0.111744E-01 0.101195E-01 0.926528E-02 + 0.863840E-02 0.821308E-02 0.793592E-02 0.777002E-02 0.771271E-02 0.777002E-02 + 0.793592E-02 0.821308E-02 0.863840E-02 0.926528E-02 0.101195E-01 0.111744E-01 + 0.123505E-01 0.135197E-01 0.145193E-01 0.200995E-01 0.208803E-01 0.208803E-01 + 0.200995E-01 0.186759E-01 0.168476E-01 0.148798E-01 0.129964E-01 0.113527E-01 + 0.100355E-01 0.905956E-02 0.837934E-02 0.793755E-02 0.771271E-02 0.771271E-02 + 0.793755E-02 0.837934E-02 0.905956E-02 0.100355E-01 0.113527E-01 0.129964E-01 + 0.148798E-01 0.168476E-01 0.186759E-01 0.200995E-01 0.276655E-01 0.283097E-01 + 0.276655E-01 0.258641E-01 0.232513E-01 0.202611E-01 0.172809E-01 0.145820E-01 + 0.123229E-01 0.105678E-01 0.929662E-02 0.843989E-02 0.793755E-02 0.777002E-02 + 0.793755E-02 0.843989E-02 0.929662E-02 0.105678E-01 0.123229E-01 0.145820E-01 + 0.172809E-01 0.202611E-01 0.232513E-01 0.258641E-01 0.276655E-01 0.373044E-01 + 0.373044E-01 0.353868E-01 0.319699E-01 0.277169E-01 0.232916E-01 0.191829E-01 + 0.156674E-01 0.128584E-01 0.107582E-01 0.929662E-02 0.837934E-02 0.793592E-02 + 0.793592E-02 0.837934E-02 0.929662E-02 0.107582E-01 0.128584E-01 0.156674E-01 + 0.191829E-01 0.232916E-01 0.277169E-01 0.319699E-01 0.353868E-01 0.373044E-01 + 0.484779E-01 0.470527E-01 0.431159E-01 0.375334E-01 0.313421E-01 0.254039E-01 + 0.202389E-01 0.160537E-01 0.128584E-01 0.105678E-01 0.905956E-02 0.821308E-02 + 0.794138E-02 0.821308E-02 0.905956E-02 0.105678E-01 0.128584E-01 0.160537E-01 + 0.202389E-01 0.254039E-01 0.313421E-01 0.375334E-01 0.431159E-01 0.470527E-01 + 0.484779E-01 0.597979E-01 0.560643E-01 0.494937E-01 0.414815E-01 0.333894E-01 + 0.261640E-01 0.202389E-01 0.156674E-01 0.123229E-01 0.100355E-01 0.863840E-02 + 0.798544E-02 0.798544E-02 0.863840E-02 0.100355E-01 0.123229E-01 0.156674E-01 + 0.202389E-01 0.261640E-01 0.333894E-01 0.414815E-01 0.494937E-01 0.560643E-01 + 0.597979E-01 0.597979E-01 0.692075E-01 0.625105E-01 0.531274E-01 0.429150E-01 + 0.333894E-01 0.254039E-01 0.191829E-01 0.145820E-01 0.113527E-01 0.926528E-02 + 0.812001E-02 0.775932E-02 0.812001E-02 0.926528E-02 0.113527E-01 0.145820E-01 + 0.191829E-01 0.254039E-01 0.333894E-01 0.429150E-01 0.531274E-01 0.625105E-01 + 0.692075E-01 0.716471E-01 0.692075E-01 0.745914E-01 0.648593E-01 0.531274E-01 + 0.414815E-01 0.313421E-01 0.232916E-01 0.172809E-01 0.129964E-01 0.101195E-01 + 0.839115E-02 0.759607E-02 0.759607E-02 0.839115E-02 0.101195E-01 0.129964E-01 + 0.172809E-01 0.232916E-01 0.313421E-01 0.414815E-01 0.531274E-01 0.648593E-01 + 0.745914E-01 0.801608E-01 0.801608E-01 0.745914E-01 0.745914E-01 0.625105E-01 + 0.494937E-01 0.375334E-01 0.277169E-01 0.202611E-01 0.148798E-01 0.111744E-01 + 0.881467E-02 0.753699E-02 0.713833E-02 0.753699E-02 0.881467E-02 0.111744E-01 + 0.148798E-01 0.202611E-01 0.277169E-01 0.375334E-01 0.494937E-01 0.625105E-01 + 0.745914E-01 0.832715E-01 0.864446E-01 0.832715E-01 0.745914E-01 0.692075E-01 + 0.560643E-01 0.431159E-01 0.319699E-01 0.232513E-01 0.168476E-01 0.123505E-01 + 0.936834E-02 0.759607E-02 0.678802E-02 0.678802E-02 0.759607E-02 0.936834E-02 + 0.123505E-01 0.168476E-01 0.232513E-01 0.319699E-01 0.431159E-01 0.560643E-01 + 0.692075E-01 0.801608E-01 0.864446E-01 0.864446E-01 0.801608E-01 0.692075E-01 + 0.597979E-01 0.470527E-01 0.353868E-01 0.258641E-01 0.186759E-01 0.135197E-01 + 0.999156E-02 0.775932E-02 0.655796E-02 0.618454E-02 0.655796E-02 0.775932E-02 + 0.999156E-02 0.135197E-01 0.186759E-01 0.258641E-01 0.353868E-01 0.470527E-01 + 0.597979E-01 0.716471E-01 0.801608E-01 0.832715E-01 0.801608E-01 0.716471E-01 + 0.597979E-01 0.484779E-01 0.373044E-01 0.276655E-01 0.200995E-01 0.145193E-01 + 0.105905E-01 0.798544E-02 0.643891E-02 0.573385E-02 0.573385E-02 0.643891E-02 + 0.798544E-02 0.105905E-01 0.145193E-01 0.200995E-01 0.276655E-01 0.373044E-01 + 0.484779E-01 0.597979E-01 0.692075E-01 0.745914E-01 0.745914E-01 0.692075E-01 + 0.597979E-01 0.484779E-01 0.399963E-01 0.302813E-01 0.222441E-01 0.160855E-01 + 0.116478E-01 0.863840E-02 0.675236E-02 0.573385E-02 0.541396E-02 0.573385E-02 + 0.675236E-02 0.863840E-02 0.116478E-01 0.160855E-01 0.222441E-01 0.302813E-01 + 0.399963E-01 0.505628E-01 0.604143E-01 0.675276E-01 0.701348E-01 0.675276E-01 + 0.604143E-01 0.505628E-01 0.399963E-01 0.302813E-01 0.227862E-01 0.167602E-01 + 0.122425E-01 0.905956E-02 0.696020E-02 0.570466E-02 0.511980E-02 0.511980E-02 + 0.570466E-02 0.696020E-02 0.905956E-02 0.122425E-01 0.167602E-01 0.227862E-01 + 0.302813E-01 0.388056E-01 0.473650E-01 0.544700E-01 0.585403E-01 0.585403E-01 + 0.544700E-01 0.473650E-01 0.388056E-01 0.302813E-01 0.222441E-01 0.167602E-01 + 0.124544E-01 0.929662E-02 0.712172E-02 0.572648E-02 0.494764E-02 0.469643E-02 + 0.494764E-02 0.572648E-02 0.712172E-02 0.929662E-02 0.124544E-01 0.167602E-01 + 0.222441E-01 0.286912E-01 0.355244E-01 0.417669E-01 0.462127E-01 0.478311E-01 + 0.462127E-01 0.417669E-01 0.355244E-01 0.286912E-01 0.222441E-01 0.160855E-01 + 0.122425E-01 0.929662E-02 0.718294E-02 0.575473E-02 0.486804E-02 0.443841E-02 + 0.443841E-02 0.486804E-02 0.575473E-02 0.718294E-02 0.929662E-02 0.122425E-01 + 0.160855E-01 0.207321E-01 0.258622E-01 0.308819E-01 0.349694E-01 0.372839E-01 + 0.372839E-01 0.349694E-01 0.308819E-01 0.258622E-01 0.207321E-01 0.160855E-01 + 0.116478E-01 0.905956E-02 0.712172E-02 0.575473E-02 0.484678E-02 0.431881E-02 + 0.414359E-02 0.431881E-02 0.484678E-02 0.575473E-02 0.712172E-02 0.905956E-02 + 0.116478E-01 0.148660E-01 0.185459E-01 0.223396E-01 0.257241E-01 0.280936E-01 + 0.289485E-01 0.280936E-01 0.257241E-01 0.223396E-01 0.185459E-01 0.148660E-01 + 0.116478E-01 0.863840E-02 0.696020E-02 0.572648E-02 0.486804E-02 0.431881E-02 + 0.404670E-02 0.404670E-02 0.431881E-02 0.486804E-02 0.572648E-02 0.696020E-02 + 0.863840E-02 0.107816E-01 0.133171E-01 0.160510E-01 0.186622E-01 0.207435E-01 + 0.219046E-01 0.219046E-01 0.207435E-01 0.186622E-01 0.160510E-01 0.133171E-01 + 0.107816E-01 0.863840E-02 0.675236E-02 0.570466E-02 0.494764E-02 0.443841E-02 + 0.414359E-02 0.404670E-02 0.414359E-02 0.443841E-02 0.494764E-02 0.570466E-02 + 0.675236E-02 0.812001E-02 0.979082E-02 0.116712E-01 0.135746E-01 0.152385E-01 + 0.163824E-01 0.167905E-01 0.163824E-01 0.152385E-01 0.135746E-01 0.116712E-01 + 0.979082E-02 0.812001E-02 0.675236E-02 0.573385E-02 0.511980E-02 0.469643E-02 + 0.443841E-02 0.431881E-02 0.431881E-02 0.443841E-02 0.469643E-02 0.511980E-02 + 0.573385E-02 0.655796E-02 0.759607E-02 0.881467E-02 0.101195E-01 0.113527E-01 + 0.123229E-01 0.128584E-01 0.128584E-01 0.123229E-01 0.113527E-01 0.101195E-01 + 0.881467E-02 0.759607E-02 0.655796E-02 0.573385E-02 0.541396E-02 0.511980E-02 + 0.494764E-02 0.486804E-02 0.484678E-02 0.486804E-02 0.494764E-02 0.511980E-02 + 0.541396E-02 0.584623E-02 0.642332E-02 0.713833E-02 0.795383E-02 0.878825E-02 + 0.952277E-02 0.100298E-01 0.102111E-01 0.100298E-01 0.952277E-02 0.878825E-02 + 0.795383E-02 0.713833E-02 0.642332E-02 0.584623E-02 0.541396E-02 0.573385E-02 + 0.570466E-02 0.572648E-02 0.575473E-02 0.575473E-02 0.572648E-02 0.570466E-02 + 0.573385E-02 0.584623E-02 0.605840E-02 0.637552E-02 0.678802E-02 0.726231E-02 + 0.773621E-02 0.812613E-02 0.834807E-02 0.834807E-02 0.812613E-02 0.773621E-02 + 0.726231E-02 0.678802E-02 0.637552E-02 0.605840E-02 0.584623E-02 0.573385E-02 + 0.675236E-02 0.696020E-02 0.712172E-02 0.718294E-02 0.712172E-02 0.696020E-02 + 0.675236E-02 0.655796E-02 0.642332E-02 0.637552E-02 0.642332E-02 0.655796E-02 + 0.675236E-02 0.696020E-02 0.712172E-02 0.718294E-02 0.712172E-02 0.696020E-02 + 0.675236E-02 0.655796E-02 0.642332E-02 0.637552E-02 0.642332E-02 0.655796E-02 + 0.675236E-02 0.863840E-02 0.905956E-02 0.929662E-02 0.929662E-02 0.905956E-02 + 0.863840E-02 0.812001E-02 0.759607E-02 0.713833E-02 0.678802E-02 0.655796E-02 + 0.643891E-02 0.640444E-02 0.641629E-02 0.643497E-02 0.643497E-02 0.641629E-02 + 0.640444E-02 0.643891E-02 0.655796E-02 0.678802E-02 0.713833E-02 0.759607E-02 + 0.812001E-02 0.863840E-02 0.116478E-01 0.122425E-01 0.124544E-01 0.122425E-01 + 0.116478E-01 0.107816E-01 0.979082E-02 0.881467E-02 0.795383E-02 0.726231E-02 + 0.675236E-02 0.640444E-02 0.618373E-02 0.606052E-02 0.602050E-02 0.606052E-02 + 0.618373E-02 0.640444E-02 0.675236E-02 0.726231E-02 0.795383E-02 0.881467E-02 + 0.979082E-02 0.107816E-01 0.116478E-01 0.160855E-01 0.167602E-01 0.167602E-01 + 0.160855E-01 0.148660E-01 0.133171E-01 0.116712E-01 0.101195E-01 0.878825E-02 + 0.773621E-02 0.696020E-02 0.641629E-02 0.606052E-02 0.587919E-02 0.587919E-02 + 0.606052E-02 0.641629E-02 0.696020E-02 0.773621E-02 0.878825E-02 0.101195E-01 + 0.116712E-01 0.133171E-01 0.148660E-01 0.160855E-01 0.222441E-01 0.227862E-01 + 0.222441E-01 0.207321E-01 0.185459E-01 0.160510E-01 0.135746E-01 0.113527E-01 + 0.952277E-02 0.812613E-02 0.712172E-02 0.643497E-02 0.602050E-02 0.587919E-02 + 0.602050E-02 0.643497E-02 0.712172E-02 0.812613E-02 0.952277E-02 0.113527E-01 + 0.135746E-01 0.160510E-01 0.185459E-01 0.207321E-01 0.222441E-01 0.302813E-01 + 0.302813E-01 0.286912E-01 0.258622E-01 0.223396E-01 0.186622E-01 0.152385E-01 + 0.123229E-01 0.100298E-01 0.834807E-02 0.718294E-02 0.643497E-02 0.606052E-02 + 0.606052E-02 0.643497E-02 0.718294E-02 0.834807E-02 0.100298E-01 0.123229E-01 + 0.152385E-01 0.186622E-01 0.223396E-01 0.258622E-01 0.286912E-01 0.302813E-01 + 0.399963E-01 0.388056E-01 0.355244E-01 0.308819E-01 0.257241E-01 0.207435E-01 + 0.163824E-01 0.128584E-01 0.102111E-01 0.834807E-02 0.712172E-02 0.641629E-02 + 0.618373E-02 0.641629E-02 0.712172E-02 0.834807E-02 0.102111E-01 0.128584E-01 + 0.163824E-01 0.207435E-01 0.257241E-01 0.308819E-01 0.355244E-01 0.388056E-01 + 0.399963E-01 0.505628E-01 0.473650E-01 0.417669E-01 0.349694E-01 0.280936E-01 + 0.219046E-01 0.167905E-01 0.128584E-01 0.100298E-01 0.812613E-02 0.696020E-02 + 0.640444E-02 0.640444E-02 0.696020E-02 0.812613E-02 0.100298E-01 0.128584E-01 + 0.167905E-01 0.219046E-01 0.280936E-01 0.349694E-01 0.417669E-01 0.473650E-01 + 0.505628E-01 0.505628E-01 0.604143E-01 0.544700E-01 0.462127E-01 0.372839E-01 + 0.289485E-01 0.219046E-01 0.163824E-01 0.123229E-01 0.952277E-02 0.773621E-02 + 0.675236E-02 0.643891E-02 0.675236E-02 0.773621E-02 0.952277E-02 0.123229E-01 + 0.163824E-01 0.219046E-01 0.289485E-01 0.372839E-01 0.462127E-01 0.544700E-01 + 0.604143E-01 0.625917E-01 0.604143E-01 0.675276E-01 0.585403E-01 0.478311E-01 + 0.372839E-01 0.280936E-01 0.207435E-01 0.152385E-01 0.113527E-01 0.878825E-02 + 0.726231E-02 0.655796E-02 0.655796E-02 0.726231E-02 0.878825E-02 0.113527E-01 + 0.152385E-01 0.207435E-01 0.280936E-01 0.372839E-01 0.478311E-01 0.585403E-01 + 0.675276E-01 0.727180E-01 0.727180E-01 0.675276E-01 0.701348E-01 0.585403E-01 + 0.462127E-01 0.349694E-01 0.257241E-01 0.186622E-01 0.135746E-01 0.101195E-01 + 0.795383E-02 0.678802E-02 0.642332E-02 0.678802E-02 0.795383E-02 0.101195E-01 + 0.135746E-01 0.186622E-01 0.257241E-01 0.349694E-01 0.462127E-01 0.585403E-01 + 0.701348E-01 0.785700E-01 0.816754E-01 0.785700E-01 0.701348E-01 0.675276E-01 + 0.544700E-01 0.417669E-01 0.308819E-01 0.223396E-01 0.160510E-01 0.116712E-01 + 0.881467E-02 0.713833E-02 0.637552E-02 0.637552E-02 0.713833E-02 0.881467E-02 + 0.116712E-01 0.160510E-01 0.223396E-01 0.308819E-01 0.417669E-01 0.544700E-01 + 0.675276E-01 0.785700E-01 0.849732E-01 0.849732E-01 0.785700E-01 0.675276E-01 + 0.604143E-01 0.473650E-01 0.355244E-01 0.258622E-01 0.185459E-01 0.133171E-01 + 0.979082E-02 0.759607E-02 0.642332E-02 0.605840E-02 0.642332E-02 0.759607E-02 + 0.979082E-02 0.133171E-01 0.185459E-01 0.258622E-01 0.355244E-01 0.473650E-01 + 0.604143E-01 0.727180E-01 0.816754E-01 0.849732E-01 0.816754E-01 0.727180E-01 + 0.604143E-01 0.505628E-01 0.388056E-01 0.286912E-01 0.207321E-01 0.148660E-01 + 0.107816E-01 0.812001E-02 0.655796E-02 0.584623E-02 0.584623E-02 0.655796E-02 + 0.812001E-02 0.107816E-01 0.148660E-01 0.207321E-01 0.286912E-01 0.388056E-01 + 0.505628E-01 0.625917E-01 0.727180E-01 0.785700E-01 0.785700E-01 0.727180E-01 + 0.625917E-01 0.505628E-01 0.399963E-01 0.302813E-01 0.222441E-01 0.160855E-01 + 0.116478E-01 0.863840E-02 0.675236E-02 0.573385E-02 0.541396E-02 0.573385E-02 + 0.675236E-02 0.863840E-02 0.116478E-01 0.160855E-01 0.222441E-01 0.302813E-01 + 0.399963E-01 0.505628E-01 0.604143E-01 0.675276E-01 0.701348E-01 0.675276E-01 + 0.604143E-01 0.505628E-01 0.399963E-01 0.335279E-01 0.252300E-01 0.185511E-01 + 0.135462E-01 0.100355E-01 0.773621E-02 0.636908E-02 0.573385E-02 0.573385E-02 + 0.636908E-02 0.773621E-02 0.100355E-01 0.135462E-01 0.185511E-01 0.252300E-01 + 0.335279E-01 0.429734E-01 0.524971E-01 0.604501E-01 0.650298E-01 0.650298E-01 + 0.604501E-01 0.524971E-01 0.429734E-01 0.335279E-01 0.252300E-01 0.190156E-01 + 0.141357E-01 0.105678E-01 0.812613E-02 0.657011E-02 0.570466E-02 0.542572E-02 + 0.570466E-02 0.657011E-02 0.812613E-02 0.105678E-01 0.141357E-01 0.190156E-01 + 0.252300E-01 0.325323E-01 0.402865E-01 0.474025E-01 0.524971E-01 0.543580E-01 + 0.524971E-01 0.474025E-01 0.402865E-01 0.325323E-01 0.252300E-01 0.185511E-01 + 0.141357E-01 0.107582E-01 0.834807E-02 0.672922E-02 0.572648E-02 0.523975E-02 + 0.523975E-02 0.572648E-02 0.672922E-02 0.834807E-02 0.107582E-01 0.141357E-01 + 0.185511E-01 0.238879E-01 0.297806E-01 0.355603E-01 0.402865E-01 0.429734E-01 + 0.429734E-01 0.402865E-01 0.355603E-01 0.297806E-01 0.238879E-01 0.185511E-01 + 0.135462E-01 0.105678E-01 0.834807E-02 0.679022E-02 0.575473E-02 0.514749E-02 + 0.494425E-02 0.514749E-02 0.575473E-02 0.679022E-02 0.834807E-02 0.105678E-01 + 0.135462E-01 0.172544E-01 0.214930E-01 0.258665E-01 0.297806E-01 0.325323E-01 + 0.335279E-01 0.325323E-01 0.297806E-01 0.258665E-01 0.214930E-01 0.172544E-01 + 0.135462E-01 0.100355E-01 0.812613E-02 0.672922E-02 0.575473E-02 0.512081E-02 + 0.479983E-02 0.479983E-02 0.512081E-02 0.575473E-02 0.672922E-02 0.812613E-02 + 0.100355E-01 0.124825E-01 0.153787E-01 0.185021E-01 0.214930E-01 0.238879E-01 + 0.252300E-01 0.252300E-01 0.238879E-01 0.214930E-01 0.185021E-01 0.153787E-01 + 0.124825E-01 0.100355E-01 0.773621E-02 0.657011E-02 0.572648E-02 0.514749E-02 + 0.479983E-02 0.468219E-02 0.479983E-02 0.514749E-02 0.572648E-02 0.657011E-02 + 0.773621E-02 0.926528E-02 0.111368E-01 0.132429E-01 0.153787E-01 0.172544E-01 + 0.185511E-01 0.190156E-01 0.185511E-01 0.172544E-01 0.153787E-01 0.132429E-01 + 0.111368E-01 0.926528E-02 0.773621E-02 0.636908E-02 0.570466E-02 0.523975E-02 + 0.494425E-02 0.479983E-02 0.479983E-02 0.494425E-02 0.523975E-02 0.570466E-02 + 0.636908E-02 0.726231E-02 0.839115E-02 0.971680E-02 0.111368E-01 0.124825E-01 + 0.135462E-01 0.141357E-01 0.141357E-01 0.135462E-01 0.124825E-01 0.111368E-01 + 0.971680E-02 0.839115E-02 0.726231E-02 0.636908E-02 0.573385E-02 0.542572E-02 + 0.523975E-02 0.514749E-02 0.512081E-02 0.514749E-02 0.523975E-02 0.542572E-02 + 0.573385E-02 0.618454E-02 0.678802E-02 0.753699E-02 0.839115E-02 0.926528E-02 + 0.100355E-01 0.105678E-01 0.107582E-01 0.105678E-01 0.100355E-01 0.926528E-02 + 0.839115E-02 0.753699E-02 0.678802E-02 0.618454E-02 0.573385E-02 0.573385E-02 + 0.570466E-02 0.572648E-02 0.575473E-02 0.575473E-02 0.572648E-02 0.570466E-02 + 0.573385E-02 0.584623E-02 0.605840E-02 0.637552E-02 0.678802E-02 0.726231E-02 + 0.773621E-02 0.812613E-02 0.834807E-02 0.834807E-02 0.812613E-02 0.773621E-02 + 0.726231E-02 0.678802E-02 0.637552E-02 0.605840E-02 0.584623E-02 0.573385E-02 + 0.636908E-02 0.657011E-02 0.672922E-02 0.679022E-02 0.672922E-02 0.657011E-02 + 0.636908E-02 0.618454E-02 0.605840E-02 0.601391E-02 0.605840E-02 0.618454E-02 + 0.636908E-02 0.657011E-02 0.672922E-02 0.679022E-02 0.672922E-02 0.657011E-02 + 0.636908E-02 0.618454E-02 0.605840E-02 0.601391E-02 0.605840E-02 0.618454E-02 + 0.636908E-02 0.773621E-02 0.812613E-02 0.834807E-02 0.834807E-02 0.812613E-02 + 0.773621E-02 0.726231E-02 0.678802E-02 0.637552E-02 0.605840E-02 0.584623E-02 + 0.573385E-02 0.570466E-02 0.572648E-02 0.575473E-02 0.575473E-02 0.572648E-02 + 0.570466E-02 0.573385E-02 0.584623E-02 0.605840E-02 0.637552E-02 0.678802E-02 + 0.726231E-02 0.773621E-02 0.100355E-01 0.105678E-01 0.107582E-01 0.105678E-01 + 0.100355E-01 0.926528E-02 0.839115E-02 0.753699E-02 0.678802E-02 0.618454E-02 + 0.573385E-02 0.542572E-02 0.523975E-02 0.514749E-02 0.512081E-02 0.514749E-02 + 0.523975E-02 0.542572E-02 0.573385E-02 0.618454E-02 0.678802E-02 0.753699E-02 + 0.839115E-02 0.926528E-02 0.100355E-01 0.135462E-01 0.141357E-01 0.141357E-01 + 0.135462E-01 0.124825E-01 0.111368E-01 0.971680E-02 0.839115E-02 0.726231E-02 + 0.636908E-02 0.570466E-02 0.523975E-02 0.494425E-02 0.479983E-02 0.479983E-02 + 0.494425E-02 0.523975E-02 0.570466E-02 0.636908E-02 0.726231E-02 0.839115E-02 + 0.971680E-02 0.111368E-01 0.124825E-01 0.135462E-01 0.185511E-01 0.190156E-01 + 0.185511E-01 0.172544E-01 0.153787E-01 0.132429E-01 0.111368E-01 0.926528E-02 + 0.773621E-02 0.657011E-02 0.572648E-02 0.514749E-02 0.479983E-02 0.468219E-02 + 0.479983E-02 0.514749E-02 0.572648E-02 0.657011E-02 0.773621E-02 0.926528E-02 + 0.111368E-01 0.132429E-01 0.153787E-01 0.172544E-01 0.185511E-01 0.252300E-01 + 0.252300E-01 0.238879E-01 0.214930E-01 0.185021E-01 0.153787E-01 0.124825E-01 + 0.100355E-01 0.812613E-02 0.672922E-02 0.575473E-02 0.512081E-02 0.479983E-02 + 0.479983E-02 0.512081E-02 0.575473E-02 0.672922E-02 0.812613E-02 0.100355E-01 + 0.124825E-01 0.153787E-01 0.185021E-01 0.214930E-01 0.238879E-01 0.252300E-01 + 0.335279E-01 0.325323E-01 0.297806E-01 0.258665E-01 0.214930E-01 0.172544E-01 + 0.135462E-01 0.105678E-01 0.834807E-02 0.679022E-02 0.575473E-02 0.514749E-02 + 0.494425E-02 0.514749E-02 0.575473E-02 0.679022E-02 0.834807E-02 0.105678E-01 + 0.135462E-01 0.172544E-01 0.214930E-01 0.258665E-01 0.297806E-01 0.325323E-01 + 0.335279E-01 0.429734E-01 0.402865E-01 0.355603E-01 0.297806E-01 0.238879E-01 + 0.185511E-01 0.141357E-01 0.107582E-01 0.834807E-02 0.672922E-02 0.572648E-02 + 0.523975E-02 0.523975E-02 0.572648E-02 0.672922E-02 0.834807E-02 0.107582E-01 + 0.141357E-01 0.185511E-01 0.238879E-01 0.297806E-01 0.355603E-01 0.402865E-01 + 0.429734E-01 0.429734E-01 0.524971E-01 0.474025E-01 0.402865E-01 0.325323E-01 + 0.252300E-01 0.190156E-01 0.141357E-01 0.105678E-01 0.812613E-02 0.657011E-02 + 0.570466E-02 0.542572E-02 0.570466E-02 0.657011E-02 0.812613E-02 0.105678E-01 + 0.141357E-01 0.190156E-01 0.252300E-01 0.325323E-01 0.402865E-01 0.474025E-01 + 0.524971E-01 0.543580E-01 0.524971E-01 0.604501E-01 0.524971E-01 0.429734E-01 + 0.335279E-01 0.252300E-01 0.185511E-01 0.135462E-01 0.100355E-01 0.773621E-02 + 0.636908E-02 0.573385E-02 0.573385E-02 0.636908E-02 0.773621E-02 0.100355E-01 + 0.135462E-01 0.185511E-01 0.252300E-01 0.335279E-01 0.429734E-01 0.524971E-01 + 0.604501E-01 0.650298E-01 0.650298E-01 0.604501E-01 0.650298E-01 0.543580E-01 + 0.429734E-01 0.325323E-01 0.238879E-01 0.172544E-01 0.124825E-01 0.926528E-02 + 0.726231E-02 0.618454E-02 0.584623E-02 0.618454E-02 0.726231E-02 0.926528E-02 + 0.124825E-01 0.172544E-01 0.238879E-01 0.325323E-01 0.429734E-01 0.543580E-01 + 0.650298E-01 0.727802E-01 0.756313E-01 0.727802E-01 0.650298E-01 0.650298E-01 + 0.524971E-01 0.402865E-01 0.297806E-01 0.214930E-01 0.153787E-01 0.111368E-01 + 0.839115E-02 0.678802E-02 0.605840E-02 0.605840E-02 0.678802E-02 0.839115E-02 + 0.111368E-01 0.153787E-01 0.214930E-01 0.297806E-01 0.402865E-01 0.524971E-01 + 0.650298E-01 0.756313E-01 0.817829E-01 0.817829E-01 0.756313E-01 0.650298E-01 + 0.604501E-01 0.474025E-01 0.355603E-01 0.258665E-01 0.185021E-01 0.132429E-01 + 0.971680E-02 0.753699E-02 0.637552E-02 0.601391E-02 0.637552E-02 0.753699E-02 + 0.971680E-02 0.132429E-01 0.185021E-01 0.258665E-01 0.355603E-01 0.474025E-01 + 0.604501E-01 0.727802E-01 0.817829E-01 0.851033E-01 0.817829E-01 0.727802E-01 + 0.604501E-01 0.524971E-01 0.402865E-01 0.297806E-01 0.214930E-01 0.153787E-01 + 0.111368E-01 0.839115E-02 0.678802E-02 0.605840E-02 0.605840E-02 0.678802E-02 + 0.839115E-02 0.111368E-01 0.153787E-01 0.214930E-01 0.297806E-01 0.402865E-01 + 0.524971E-01 0.650298E-01 0.756313E-01 0.817829E-01 0.817829E-01 0.756313E-01 + 0.650298E-01 0.524971E-01 0.429734E-01 0.325323E-01 0.238879E-01 0.172544E-01 + 0.124825E-01 0.926528E-02 0.726231E-02 0.618454E-02 0.584623E-02 0.618454E-02 + 0.726231E-02 0.926528E-02 0.124825E-01 0.172544E-01 0.238879E-01 0.325323E-01 + 0.429734E-01 0.543580E-01 0.650298E-01 0.727802E-01 0.756313E-01 0.727802E-01 + 0.650298E-01 0.543580E-01 0.429734E-01 0.335279E-01 0.252300E-01 0.185511E-01 + 0.135462E-01 0.100355E-01 0.773621E-02 0.636908E-02 0.573385E-02 0.573385E-02 + 0.636908E-02 0.773621E-02 0.100355E-01 0.135462E-01 0.185511E-01 0.252300E-01 + 0.335279E-01 0.429734E-01 0.524971E-01 0.604501E-01 0.650298E-01 0.650298E-01 + 0.604501E-01 0.524971E-01 0.429734E-01 0.335279E-01 0.289485E-01 0.219046E-01 + 0.163824E-01 0.123229E-01 0.952277E-02 0.773621E-02 0.675236E-02 0.643891E-02 + 0.675236E-02 0.773621E-02 0.952277E-02 0.123229E-01 0.163824E-01 0.219046E-01 + 0.289485E-01 0.372839E-01 0.462127E-01 0.544700E-01 0.604143E-01 0.625917E-01 + 0.604143E-01 0.544700E-01 0.462127E-01 0.372839E-01 0.289485E-01 0.219046E-01 + 0.167905E-01 0.128584E-01 0.100298E-01 0.812613E-02 0.696020E-02 0.640444E-02 + 0.640444E-02 0.696020E-02 0.812613E-02 0.100298E-01 0.128584E-01 0.167905E-01 + 0.219046E-01 0.280936E-01 0.349694E-01 0.417669E-01 0.473650E-01 0.505628E-01 + 0.505628E-01 0.473650E-01 0.417669E-01 0.349694E-01 0.280936E-01 0.219046E-01 + 0.163824E-01 0.128584E-01 0.102111E-01 0.834807E-02 0.712172E-02 0.641629E-02 + 0.618373E-02 0.641629E-02 0.712172E-02 0.834807E-02 0.102111E-01 0.128584E-01 + 0.163824E-01 0.207435E-01 0.257241E-01 0.308819E-01 0.355244E-01 0.388056E-01 + 0.399963E-01 0.388056E-01 0.355244E-01 0.308819E-01 0.257241E-01 0.207435E-01 + 0.163824E-01 0.123229E-01 0.100298E-01 0.834807E-02 0.718294E-02 0.643497E-02 + 0.606052E-02 0.606052E-02 0.643497E-02 0.718294E-02 0.834807E-02 0.100298E-01 + 0.123229E-01 0.152385E-01 0.186622E-01 0.223396E-01 0.258622E-01 0.286912E-01 + 0.302813E-01 0.302813E-01 0.286912E-01 0.258622E-01 0.223396E-01 0.186622E-01 + 0.152385E-01 0.123229E-01 0.952277E-02 0.812613E-02 0.712172E-02 0.643497E-02 + 0.602050E-02 0.587919E-02 0.602050E-02 0.643497E-02 0.712172E-02 0.812613E-02 + 0.952277E-02 0.113527E-01 0.135746E-01 0.160510E-01 0.185459E-01 0.207321E-01 + 0.222441E-01 0.227862E-01 0.222441E-01 0.207321E-01 0.185459E-01 0.160510E-01 + 0.135746E-01 0.113527E-01 0.952277E-02 0.773621E-02 0.696020E-02 0.641629E-02 + 0.606052E-02 0.587919E-02 0.587919E-02 0.606052E-02 0.641629E-02 0.696020E-02 + 0.773621E-02 0.878825E-02 0.101195E-01 0.116712E-01 0.133171E-01 0.148660E-01 + 0.160855E-01 0.167602E-01 0.167602E-01 0.160855E-01 0.148660E-01 0.133171E-01 + 0.116712E-01 0.101195E-01 0.878825E-02 0.773621E-02 0.675236E-02 0.640444E-02 + 0.618373E-02 0.606052E-02 0.602050E-02 0.606052E-02 0.618373E-02 0.640444E-02 + 0.675236E-02 0.726231E-02 0.795383E-02 0.881467E-02 0.979082E-02 0.107816E-01 + 0.116478E-01 0.122425E-01 0.124544E-01 0.122425E-01 0.116478E-01 0.107816E-01 + 0.979082E-02 0.881467E-02 0.795383E-02 0.726231E-02 0.675236E-02 0.643891E-02 + 0.640444E-02 0.641629E-02 0.643497E-02 0.643497E-02 0.641629E-02 0.640444E-02 + 0.643891E-02 0.655796E-02 0.678802E-02 0.713833E-02 0.759607E-02 0.812001E-02 + 0.863840E-02 0.905956E-02 0.929662E-02 0.929662E-02 0.905956E-02 0.863840E-02 + 0.812001E-02 0.759607E-02 0.713833E-02 0.678802E-02 0.655796E-02 0.643891E-02 + 0.675236E-02 0.696020E-02 0.712172E-02 0.718294E-02 0.712172E-02 0.696020E-02 + 0.675236E-02 0.655796E-02 0.642332E-02 0.637552E-02 0.642332E-02 0.655796E-02 + 0.675236E-02 0.696020E-02 0.712172E-02 0.718294E-02 0.712172E-02 0.696020E-02 + 0.675236E-02 0.655796E-02 0.642332E-02 0.637552E-02 0.642332E-02 0.655796E-02 + 0.675236E-02 0.773621E-02 0.812613E-02 0.834807E-02 0.834807E-02 0.812613E-02 + 0.773621E-02 0.726231E-02 0.678802E-02 0.637552E-02 0.605840E-02 0.584623E-02 + 0.573385E-02 0.570466E-02 0.572648E-02 0.575473E-02 0.575473E-02 0.572648E-02 + 0.570466E-02 0.573385E-02 0.584623E-02 0.605840E-02 0.637552E-02 0.678802E-02 + 0.726231E-02 0.773621E-02 0.952277E-02 0.100298E-01 0.102111E-01 0.100298E-01 + 0.952277E-02 0.878825E-02 0.795383E-02 0.713833E-02 0.642332E-02 0.584623E-02 + 0.541396E-02 0.511980E-02 0.494764E-02 0.486804E-02 0.484678E-02 0.486804E-02 + 0.494764E-02 0.511980E-02 0.541396E-02 0.584623E-02 0.642332E-02 0.713833E-02 + 0.795383E-02 0.878825E-02 0.952277E-02 0.123229E-01 0.128584E-01 0.128584E-01 + 0.123229E-01 0.113527E-01 0.101195E-01 0.881467E-02 0.759607E-02 0.655796E-02 + 0.573385E-02 0.511980E-02 0.469643E-02 0.443841E-02 0.431881E-02 0.431881E-02 + 0.443841E-02 0.469643E-02 0.511980E-02 0.573385E-02 0.655796E-02 0.759607E-02 + 0.881467E-02 0.101195E-01 0.113527E-01 0.123229E-01 0.163824E-01 0.167905E-01 + 0.163824E-01 0.152385E-01 0.135746E-01 0.116712E-01 0.979082E-02 0.812001E-02 + 0.675236E-02 0.570466E-02 0.494764E-02 0.443841E-02 0.414359E-02 0.404670E-02 + 0.414359E-02 0.443841E-02 0.494764E-02 0.570466E-02 0.675236E-02 0.812001E-02 + 0.979082E-02 0.116712E-01 0.135746E-01 0.152385E-01 0.163824E-01 0.219046E-01 + 0.219046E-01 0.207435E-01 0.186622E-01 0.160510E-01 0.133171E-01 0.107816E-01 + 0.863840E-02 0.696020E-02 0.572648E-02 0.486804E-02 0.431881E-02 0.404670E-02 + 0.404670E-02 0.431881E-02 0.486804E-02 0.572648E-02 0.696020E-02 0.863840E-02 + 0.107816E-01 0.133171E-01 0.160510E-01 0.186622E-01 0.207435E-01 0.219046E-01 + 0.289485E-01 0.280936E-01 0.257241E-01 0.223396E-01 0.185459E-01 0.148660E-01 + 0.116478E-01 0.905956E-02 0.712172E-02 0.575473E-02 0.484678E-02 0.431881E-02 + 0.414359E-02 0.431881E-02 0.484678E-02 0.575473E-02 0.712172E-02 0.905956E-02 + 0.116478E-01 0.148660E-01 0.185459E-01 0.223396E-01 0.257241E-01 0.280936E-01 + 0.289485E-01 0.372839E-01 0.349694E-01 0.308819E-01 0.258622E-01 0.207321E-01 + 0.160855E-01 0.122425E-01 0.929662E-02 0.718294E-02 0.575473E-02 0.486804E-02 + 0.443841E-02 0.443841E-02 0.486804E-02 0.575473E-02 0.718294E-02 0.929662E-02 + 0.122425E-01 0.160855E-01 0.207321E-01 0.258622E-01 0.308819E-01 0.349694E-01 + 0.372839E-01 0.372839E-01 0.462127E-01 0.417669E-01 0.355244E-01 0.286912E-01 + 0.222441E-01 0.167602E-01 0.124544E-01 0.929662E-02 0.712172E-02 0.572648E-02 + 0.494764E-02 0.469643E-02 0.494764E-02 0.572648E-02 0.712172E-02 0.929662E-02 + 0.124544E-01 0.167602E-01 0.222441E-01 0.286912E-01 0.355244E-01 0.417669E-01 + 0.462127E-01 0.478311E-01 0.462127E-01 0.544700E-01 0.473650E-01 0.388056E-01 + 0.302813E-01 0.227862E-01 0.167602E-01 0.122425E-01 0.905956E-02 0.696020E-02 + 0.570466E-02 0.511980E-02 0.511980E-02 0.570466E-02 0.696020E-02 0.905956E-02 + 0.122425E-01 0.167602E-01 0.227862E-01 0.302813E-01 0.388056E-01 0.473650E-01 + 0.544700E-01 0.585403E-01 0.585403E-01 0.544700E-01 0.604143E-01 0.505628E-01 + 0.399963E-01 0.302813E-01 0.222441E-01 0.160855E-01 0.116478E-01 0.863840E-02 + 0.675236E-02 0.573385E-02 0.541396E-02 0.573385E-02 0.675236E-02 0.863840E-02 + 0.116478E-01 0.160855E-01 0.222441E-01 0.302813E-01 0.399963E-01 0.505628E-01 + 0.604143E-01 0.675276E-01 0.701348E-01 0.675276E-01 0.604143E-01 0.625917E-01 + 0.505628E-01 0.388056E-01 0.286912E-01 0.207321E-01 0.148660E-01 0.107816E-01 + 0.812001E-02 0.655796E-02 0.584623E-02 0.584623E-02 0.655796E-02 0.812001E-02 + 0.107816E-01 0.148660E-01 0.207321E-01 0.286912E-01 0.388056E-01 0.505628E-01 + 0.625917E-01 0.727180E-01 0.785700E-01 0.785700E-01 0.727180E-01 0.625917E-01 + 0.604143E-01 0.473650E-01 0.355244E-01 0.258622E-01 0.185459E-01 0.133171E-01 + 0.979082E-02 0.759607E-02 0.642332E-02 0.605840E-02 0.642332E-02 0.759607E-02 + 0.979082E-02 0.133171E-01 0.185459E-01 0.258622E-01 0.355244E-01 0.473650E-01 + 0.604143E-01 0.727180E-01 0.816754E-01 0.849732E-01 0.816754E-01 0.727180E-01 + 0.604143E-01 0.544700E-01 0.417669E-01 0.308819E-01 0.223396E-01 0.160510E-01 + 0.116712E-01 0.881467E-02 0.713833E-02 0.637552E-02 0.637552E-02 0.713833E-02 + 0.881467E-02 0.116712E-01 0.160510E-01 0.223396E-01 0.308819E-01 0.417669E-01 + 0.544700E-01 0.675276E-01 0.785700E-01 0.849732E-01 0.849732E-01 0.785700E-01 + 0.675276E-01 0.544700E-01 0.462127E-01 0.349694E-01 0.257241E-01 0.186622E-01 + 0.135746E-01 0.101195E-01 0.795383E-02 0.678802E-02 0.642332E-02 0.678802E-02 + 0.795383E-02 0.101195E-01 0.135746E-01 0.186622E-01 0.257241E-01 0.349694E-01 + 0.462127E-01 0.585403E-01 0.701348E-01 0.785700E-01 0.816754E-01 0.785700E-01 + 0.701348E-01 0.585403E-01 0.462127E-01 0.372839E-01 0.280936E-01 0.207435E-01 + 0.152385E-01 0.113527E-01 0.878825E-02 0.726231E-02 0.655796E-02 0.655796E-02 + 0.726231E-02 0.878825E-02 0.113527E-01 0.152385E-01 0.207435E-01 0.280936E-01 + 0.372839E-01 0.478311E-01 0.585403E-01 0.675276E-01 0.727180E-01 0.727180E-01 + 0.675276E-01 0.585403E-01 0.478311E-01 0.372839E-01 0.289485E-01 0.219046E-01 + 0.163824E-01 0.123229E-01 0.952277E-02 0.773621E-02 0.675236E-02 0.643891E-02 + 0.675236E-02 0.773621E-02 0.952277E-02 0.123229E-01 0.163824E-01 0.219046E-01 + 0.289485E-01 0.372839E-01 0.462127E-01 0.544700E-01 0.604143E-01 0.625917E-01 + 0.604143E-01 0.544700E-01 0.462127E-01 0.372839E-01 0.289485E-01 0.261640E-01 + 0.202389E-01 0.156674E-01 0.123229E-01 0.100355E-01 0.863840E-02 0.798544E-02 + 0.798544E-02 0.863840E-02 0.100355E-01 0.123229E-01 0.156674E-01 0.202389E-01 + 0.261640E-01 0.333894E-01 0.414815E-01 0.494937E-01 0.560643E-01 0.597979E-01 + 0.597979E-01 0.560643E-01 0.494937E-01 0.414815E-01 0.333894E-01 0.261640E-01 + 0.202389E-01 0.160537E-01 0.128584E-01 0.105678E-01 0.905956E-02 0.821308E-02 + 0.794138E-02 0.821308E-02 0.905956E-02 0.105678E-01 0.128584E-01 0.160537E-01 + 0.202389E-01 0.254039E-01 0.313421E-01 0.375334E-01 0.431159E-01 0.470527E-01 + 0.484779E-01 0.470527E-01 0.431159E-01 0.375334E-01 0.313421E-01 0.254039E-01 + 0.202389E-01 0.156674E-01 0.128584E-01 0.107582E-01 0.929662E-02 0.837934E-02 + 0.793592E-02 0.793592E-02 0.837934E-02 0.929662E-02 0.107582E-01 0.128584E-01 + 0.156674E-01 0.191829E-01 0.232916E-01 0.277169E-01 0.319699E-01 0.353868E-01 + 0.373044E-01 0.373044E-01 0.353868E-01 0.319699E-01 0.277169E-01 0.232916E-01 + 0.191829E-01 0.156674E-01 0.123229E-01 0.105678E-01 0.929662E-02 0.843989E-02 + 0.793755E-02 0.777002E-02 0.793755E-02 0.843989E-02 0.929662E-02 0.105678E-01 + 0.123229E-01 0.145820E-01 0.172809E-01 0.202611E-01 0.232513E-01 0.258641E-01 + 0.276655E-01 0.283097E-01 0.276655E-01 0.258641E-01 0.232513E-01 0.202611E-01 + 0.172809E-01 0.145820E-01 0.123229E-01 0.100355E-01 0.905956E-02 0.837934E-02 + 0.793755E-02 0.771271E-02 0.771271E-02 0.793755E-02 0.837934E-02 0.905956E-02 + 0.100355E-01 0.113527E-01 0.129964E-01 0.148798E-01 0.168476E-01 0.186759E-01 + 0.200995E-01 0.208803E-01 0.208803E-01 0.200995E-01 0.186759E-01 0.168476E-01 + 0.148798E-01 0.129964E-01 0.113527E-01 0.100355E-01 0.863840E-02 0.821308E-02 + 0.793592E-02 0.777002E-02 0.771271E-02 0.777002E-02 0.793592E-02 0.821308E-02 + 0.863840E-02 0.926528E-02 0.101195E-01 0.111744E-01 0.123505E-01 0.135197E-01 + 0.145193E-01 0.151913E-01 0.154277E-01 0.151913E-01 0.145193E-01 0.135197E-01 + 0.123505E-01 0.111744E-01 0.101195E-01 0.926528E-02 0.863840E-02 0.798544E-02 + 0.794138E-02 0.793592E-02 0.793755E-02 0.793755E-02 0.793592E-02 0.794138E-02 + 0.798544E-02 0.812001E-02 0.839115E-02 0.881467E-02 0.936834E-02 0.999156E-02 + 0.105905E-01 0.110600E-01 0.113161E-01 0.113161E-01 0.110600E-01 0.105905E-01 + 0.999156E-02 0.936834E-02 0.881467E-02 0.839115E-02 0.812001E-02 0.798544E-02 + 0.798544E-02 0.821308E-02 0.837934E-02 0.843989E-02 0.837934E-02 0.821308E-02 + 0.798544E-02 0.775932E-02 0.759607E-02 0.753699E-02 0.759607E-02 0.775932E-02 + 0.798544E-02 0.821308E-02 0.837934E-02 0.843989E-02 0.837934E-02 0.821308E-02 + 0.798544E-02 0.775932E-02 0.759607E-02 0.753699E-02 0.759607E-02 0.775932E-02 + 0.798544E-02 0.863840E-02 0.905956E-02 0.929662E-02 0.929662E-02 0.905956E-02 + 0.863840E-02 0.812001E-02 0.759607E-02 0.713833E-02 0.678802E-02 0.655796E-02 + 0.643891E-02 0.640444E-02 0.641629E-02 0.643497E-02 0.643497E-02 0.641629E-02 + 0.640444E-02 0.643891E-02 0.655796E-02 0.678802E-02 0.713833E-02 0.759607E-02 + 0.812001E-02 0.863840E-02 0.100355E-01 0.105678E-01 0.107582E-01 0.105678E-01 + 0.100355E-01 0.926528E-02 0.839115E-02 0.753699E-02 0.678802E-02 0.618454E-02 + 0.573385E-02 0.542572E-02 0.523975E-02 0.514749E-02 0.512081E-02 0.514749E-02 + 0.523975E-02 0.542572E-02 0.573385E-02 0.618454E-02 0.678802E-02 0.753699E-02 + 0.839115E-02 0.926528E-02 0.100355E-01 0.123229E-01 0.128584E-01 0.128584E-01 + 0.123229E-01 0.113527E-01 0.101195E-01 0.881467E-02 0.759607E-02 0.655796E-02 + 0.573385E-02 0.511980E-02 0.469643E-02 0.443841E-02 0.431881E-02 0.431881E-02 + 0.443841E-02 0.469643E-02 0.511980E-02 0.573385E-02 0.655796E-02 0.759607E-02 + 0.881467E-02 0.101195E-01 0.113527E-01 0.123229E-01 0.156674E-01 0.160537E-01 + 0.156674E-01 0.145820E-01 0.129964E-01 0.111744E-01 0.936834E-02 0.775932E-02 + 0.643891E-02 0.542572E-02 0.469643E-02 0.421312E-02 0.393981E-02 0.385164E-02 + 0.393981E-02 0.421312E-02 0.469643E-02 0.542572E-02 0.643891E-02 0.775932E-02 + 0.936834E-02 0.111744E-01 0.129964E-01 0.145820E-01 0.156674E-01 0.202389E-01 + 0.202389E-01 0.191829E-01 0.172809E-01 0.148798E-01 0.123505E-01 0.999156E-02 + 0.798544E-02 0.640444E-02 0.523975E-02 0.443841E-02 0.393981E-02 0.370043E-02 + 0.370043E-02 0.393981E-02 0.443841E-02 0.523975E-02 0.640444E-02 0.798544E-02 + 0.999156E-02 0.123505E-01 0.148798E-01 0.172809E-01 0.191829E-01 0.202389E-01 + 0.261640E-01 0.254039E-01 0.232916E-01 0.202611E-01 0.168476E-01 0.135197E-01 + 0.105905E-01 0.821308E-02 0.641629E-02 0.514749E-02 0.431881E-02 0.385164E-02 + 0.370043E-02 0.385164E-02 0.431881E-02 0.514749E-02 0.641629E-02 0.821308E-02 + 0.105905E-01 0.135197E-01 0.168476E-01 0.202611E-01 0.232916E-01 0.254039E-01 + 0.261640E-01 0.333894E-01 0.313421E-01 0.277169E-01 0.232513E-01 0.186759E-01 + 0.145193E-01 0.110600E-01 0.837934E-02 0.643497E-02 0.512081E-02 0.431881E-02 + 0.393981E-02 0.393981E-02 0.431881E-02 0.512081E-02 0.643497E-02 0.837934E-02 + 0.110600E-01 0.145193E-01 0.186759E-01 0.232513E-01 0.277169E-01 0.313421E-01 + 0.333894E-01 0.333894E-01 0.414815E-01 0.375334E-01 0.319699E-01 0.258641E-01 + 0.200995E-01 0.151913E-01 0.113161E-01 0.843989E-02 0.643497E-02 0.514749E-02 + 0.443841E-02 0.421312E-02 0.443841E-02 0.514749E-02 0.643497E-02 0.843989E-02 + 0.113161E-01 0.151913E-01 0.200995E-01 0.258641E-01 0.319699E-01 0.375334E-01 + 0.414815E-01 0.429150E-01 0.414815E-01 0.494937E-01 0.431159E-01 0.353868E-01 + 0.276655E-01 0.208803E-01 0.154277E-01 0.113161E-01 0.837934E-02 0.641629E-02 + 0.523975E-02 0.469643E-02 0.469643E-02 0.523975E-02 0.641629E-02 0.837934E-02 + 0.113161E-01 0.154277E-01 0.208803E-01 0.276655E-01 0.353868E-01 0.431159E-01 + 0.494937E-01 0.531274E-01 0.531274E-01 0.494937E-01 0.560643E-01 0.470527E-01 + 0.373044E-01 0.283097E-01 0.208803E-01 0.151913E-01 0.110600E-01 0.821308E-02 + 0.640444E-02 0.542572E-02 0.511980E-02 0.542572E-02 0.640444E-02 0.821308E-02 + 0.110600E-01 0.151913E-01 0.208803E-01 0.283097E-01 0.373044E-01 0.470527E-01 + 0.560643E-01 0.625105E-01 0.648593E-01 0.625105E-01 0.560643E-01 0.597979E-01 + 0.484779E-01 0.373044E-01 0.276655E-01 0.200995E-01 0.145193E-01 0.105905E-01 + 0.798544E-02 0.643891E-02 0.573385E-02 0.573385E-02 0.643891E-02 0.798544E-02 + 0.105905E-01 0.145193E-01 0.200995E-01 0.276655E-01 0.373044E-01 0.484779E-01 + 0.597979E-01 0.692075E-01 0.745914E-01 0.745914E-01 0.692075E-01 0.597979E-01 + 0.597979E-01 0.470527E-01 0.353868E-01 0.258641E-01 0.186759E-01 0.135197E-01 + 0.999156E-02 0.775932E-02 0.655796E-02 0.618454E-02 0.655796E-02 0.775932E-02 + 0.999156E-02 0.135197E-01 0.186759E-01 0.258641E-01 0.353868E-01 0.470527E-01 + 0.597979E-01 0.716471E-01 0.801608E-01 0.832715E-01 0.801608E-01 0.716471E-01 + 0.597979E-01 0.560643E-01 0.431159E-01 0.319699E-01 0.232513E-01 0.168476E-01 + 0.123505E-01 0.936834E-02 0.759607E-02 0.678802E-02 0.678802E-02 0.759607E-02 + 0.936834E-02 0.123505E-01 0.168476E-01 0.232513E-01 0.319699E-01 0.431159E-01 + 0.560643E-01 0.692075E-01 0.801608E-01 0.864446E-01 0.864446E-01 0.801608E-01 + 0.692075E-01 0.560643E-01 0.494937E-01 0.375334E-01 0.277169E-01 0.202611E-01 + 0.148798E-01 0.111744E-01 0.881467E-02 0.753699E-02 0.713833E-02 0.753699E-02 + 0.881467E-02 0.111744E-01 0.148798E-01 0.202611E-01 0.277169E-01 0.375334E-01 + 0.494937E-01 0.625105E-01 0.745914E-01 0.832715E-01 0.864446E-01 0.832715E-01 + 0.745914E-01 0.625105E-01 0.494937E-01 0.414815E-01 0.313421E-01 0.232916E-01 + 0.172809E-01 0.129964E-01 0.101195E-01 0.839115E-02 0.759607E-02 0.759607E-02 + 0.839115E-02 0.101195E-01 0.129964E-01 0.172809E-01 0.232916E-01 0.313421E-01 + 0.414815E-01 0.531274E-01 0.648593E-01 0.745914E-01 0.801608E-01 0.801608E-01 + 0.745914E-01 0.648593E-01 0.531274E-01 0.414815E-01 0.333894E-01 0.254039E-01 + 0.191829E-01 0.145820E-01 0.113527E-01 0.926528E-02 0.812001E-02 0.775932E-02 + 0.812001E-02 0.926528E-02 0.113527E-01 0.145820E-01 0.191829E-01 0.254039E-01 + 0.333894E-01 0.429150E-01 0.531274E-01 0.625105E-01 0.692075E-01 0.716471E-01 + 0.692075E-01 0.625105E-01 0.531274E-01 0.429150E-01 0.333894E-01 0.261640E-01 + 0.202389E-01 0.156674E-01 0.123229E-01 0.100355E-01 0.863840E-02 0.798544E-02 + 0.798544E-02 0.863840E-02 0.100355E-01 0.123229E-01 0.156674E-01 0.202389E-01 + 0.261640E-01 0.333894E-01 0.414815E-01 0.494937E-01 0.560643E-01 0.597979E-01 + 0.597979E-01 0.560643E-01 0.494937E-01 0.414815E-01 0.333894E-01 0.261640E-01 + 0.252261E-01 0.202389E-01 0.163824E-01 0.135462E-01 0.116478E-01 0.105905E-01 + 0.102572E-01 0.105905E-01 0.116478E-01 0.135462E-01 0.163824E-01 0.202389E-01 + 0.252261E-01 0.313897E-01 0.384625E-01 0.456893E-01 0.519648E-01 0.562141E-01 + 0.577130E-01 0.562141E-01 0.519648E-01 0.456893E-01 0.384625E-01 0.313897E-01 + 0.252261E-01 0.202389E-01 0.167905E-01 0.141357E-01 0.122425E-01 0.110600E-01 + 0.105047E-01 0.105047E-01 0.110600E-01 0.122425E-01 0.141357E-01 0.167905E-01 + 0.202389E-01 0.245013E-01 0.294949E-01 0.348716E-01 0.399611E-01 0.439394E-01 + 0.461141E-01 0.461141E-01 0.439394E-01 0.399611E-01 0.348716E-01 0.294949E-01 + 0.245013E-01 0.202389E-01 0.163824E-01 0.141357E-01 0.124544E-01 0.113161E-01 + 0.106691E-01 0.104608E-01 0.106691E-01 0.113161E-01 0.124544E-01 0.141357E-01 + 0.163824E-01 0.191829E-01 0.224840E-01 0.261315E-01 0.297890E-01 0.329495E-01 + 0.350891E-01 0.358437E-01 0.350891E-01 0.329495E-01 0.297890E-01 0.261315E-01 + 0.224840E-01 0.191829E-01 0.163824E-01 0.135462E-01 0.122425E-01 0.113161E-01 + 0.107249E-01 0.104347E-01 0.104347E-01 0.107249E-01 0.113161E-01 0.122425E-01 + 0.135462E-01 0.152385E-01 0.172809E-01 0.195825E-01 0.219742E-01 0.241831E-01 + 0.258818E-01 0.268002E-01 0.268002E-01 0.258818E-01 0.241831E-01 0.219742E-01 + 0.195825E-01 0.172809E-01 0.152385E-01 0.135462E-01 0.116478E-01 0.110600E-01 + 0.106691E-01 0.104347E-01 0.103541E-01 0.104347E-01 0.106691E-01 0.110600E-01 + 0.116478E-01 0.124825E-01 0.135746E-01 0.148798E-01 0.163037E-01 0.176960E-01 + 0.188635E-01 0.196306E-01 0.198958E-01 0.196306E-01 0.188635E-01 0.176960E-01 + 0.163037E-01 0.148798E-01 0.135746E-01 0.124825E-01 0.116478E-01 0.105905E-01 + 0.105047E-01 0.104608E-01 0.104347E-01 0.104347E-01 0.104608E-01 0.105047E-01 + 0.105905E-01 0.107816E-01 0.111368E-01 0.116712E-01 0.123505E-01 0.130949E-01 + 0.137863E-01 0.143047E-01 0.145756E-01 0.145756E-01 0.143047E-01 0.137863E-01 + 0.130949E-01 0.123505E-01 0.116712E-01 0.111368E-01 0.107816E-01 0.105905E-01 + 0.102572E-01 0.105047E-01 0.106691E-01 0.107249E-01 0.106691E-01 0.105047E-01 + 0.102572E-01 0.999156E-02 0.979082E-02 0.971680E-02 0.979082E-02 0.999156E-02 + 0.102572E-01 0.105047E-01 0.106691E-01 0.107249E-01 0.106691E-01 0.105047E-01 + 0.102572E-01 0.999156E-02 0.979082E-02 0.971680E-02 0.979082E-02 0.999156E-02 + 0.102572E-01 0.105905E-01 0.110600E-01 0.113161E-01 0.113161E-01 0.110600E-01 + 0.105905E-01 0.999156E-02 0.936834E-02 0.881467E-02 0.839115E-02 0.812001E-02 + 0.798544E-02 0.794138E-02 0.793592E-02 0.793755E-02 0.793755E-02 0.793592E-02 + 0.794138E-02 0.798544E-02 0.812001E-02 0.839115E-02 0.881467E-02 0.936834E-02 + 0.999156E-02 0.105905E-01 0.116478E-01 0.122425E-01 0.124544E-01 0.122425E-01 + 0.116478E-01 0.107816E-01 0.979082E-02 0.881467E-02 0.795383E-02 0.726231E-02 + 0.675236E-02 0.640444E-02 0.618373E-02 0.606052E-02 0.602050E-02 0.606052E-02 + 0.618373E-02 0.640444E-02 0.675236E-02 0.726231E-02 0.795383E-02 0.881467E-02 + 0.979082E-02 0.107816E-01 0.116478E-01 0.135462E-01 0.141357E-01 0.141357E-01 + 0.135462E-01 0.124825E-01 0.111368E-01 0.971680E-02 0.839115E-02 0.726231E-02 + 0.636908E-02 0.570466E-02 0.523975E-02 0.494425E-02 0.479983E-02 0.479983E-02 + 0.494425E-02 0.523975E-02 0.570466E-02 0.636908E-02 0.726231E-02 0.839115E-02 + 0.971680E-02 0.111368E-01 0.124825E-01 0.135462E-01 0.163824E-01 0.167905E-01 + 0.163824E-01 0.152385E-01 0.135746E-01 0.116712E-01 0.979082E-02 0.812001E-02 + 0.675236E-02 0.570466E-02 0.494764E-02 0.443841E-02 0.414359E-02 0.404670E-02 + 0.414359E-02 0.443841E-02 0.494764E-02 0.570466E-02 0.675236E-02 0.812001E-02 + 0.979082E-02 0.116712E-01 0.135746E-01 0.152385E-01 0.163824E-01 0.202389E-01 + 0.202389E-01 0.191829E-01 0.172809E-01 0.148798E-01 0.123505E-01 0.999156E-02 + 0.798544E-02 0.640444E-02 0.523975E-02 0.443841E-02 0.393981E-02 0.370043E-02 + 0.370043E-02 0.393981E-02 0.443841E-02 0.523975E-02 0.640444E-02 0.798544E-02 + 0.999156E-02 0.123505E-01 0.148798E-01 0.172809E-01 0.191829E-01 0.202389E-01 + 0.252261E-01 0.245013E-01 0.224840E-01 0.195825E-01 0.163037E-01 0.130949E-01 + 0.102572E-01 0.794138E-02 0.618373E-02 0.494425E-02 0.414359E-02 0.370043E-02 + 0.355908E-02 0.370043E-02 0.414359E-02 0.494425E-02 0.618373E-02 0.794138E-02 + 0.102572E-01 0.130949E-01 0.163037E-01 0.195825E-01 0.224840E-01 0.245013E-01 + 0.252261E-01 0.313897E-01 0.294949E-01 0.261315E-01 0.219742E-01 0.176960E-01 + 0.137863E-01 0.105047E-01 0.793592E-02 0.606052E-02 0.479983E-02 0.404670E-02 + 0.370043E-02 0.370043E-02 0.404670E-02 0.479983E-02 0.606052E-02 0.793592E-02 + 0.105047E-01 0.137863E-01 0.176960E-01 0.219742E-01 0.261315E-01 0.294949E-01 + 0.313897E-01 0.313897E-01 0.384625E-01 0.348716E-01 0.297890E-01 0.241831E-01 + 0.188635E-01 0.143047E-01 0.106691E-01 0.793755E-02 0.602050E-02 0.479983E-02 + 0.414359E-02 0.393981E-02 0.414359E-02 0.479983E-02 0.602050E-02 0.793755E-02 + 0.106691E-01 0.143047E-01 0.188635E-01 0.241831E-01 0.297890E-01 0.348716E-01 + 0.384625E-01 0.397629E-01 0.384625E-01 0.456893E-01 0.399611E-01 0.329495E-01 + 0.258818E-01 0.196306E-01 0.145756E-01 0.107249E-01 0.793755E-02 0.606052E-02 + 0.494425E-02 0.443841E-02 0.443841E-02 0.494425E-02 0.606052E-02 0.793755E-02 + 0.107249E-01 0.145756E-01 0.196306E-01 0.258818E-01 0.329495E-01 0.399611E-01 + 0.456893E-01 0.489277E-01 0.489277E-01 0.456893E-01 0.519648E-01 0.439394E-01 + 0.350891E-01 0.268002E-01 0.198958E-01 0.145756E-01 0.106691E-01 0.793592E-02 + 0.618373E-02 0.523975E-02 0.494764E-02 0.523975E-02 0.618373E-02 0.793592E-02 + 0.106691E-01 0.145756E-01 0.198958E-01 0.268002E-01 0.350891E-01 0.439394E-01 + 0.519648E-01 0.576056E-01 0.596400E-01 0.576056E-01 0.519648E-01 0.562141E-01 + 0.461141E-01 0.358437E-01 0.268002E-01 0.196306E-01 0.143047E-01 0.105047E-01 + 0.794138E-02 0.640444E-02 0.570466E-02 0.570466E-02 0.640444E-02 0.794138E-02 + 0.105047E-01 0.143047E-01 0.196306E-01 0.268002E-01 0.358437E-01 0.461141E-01 + 0.562141E-01 0.643573E-01 0.689152E-01 0.689152E-01 0.643573E-01 0.562141E-01 + 0.577130E-01 0.461141E-01 0.350891E-01 0.258818E-01 0.188635E-01 0.137863E-01 + 0.102572E-01 0.798544E-02 0.675236E-02 0.636908E-02 0.675236E-02 0.798544E-02 + 0.102572E-01 0.137863E-01 0.188635E-01 0.258818E-01 0.350891E-01 0.461141E-01 + 0.577130E-01 0.680392E-01 0.751976E-01 0.777628E-01 0.751976E-01 0.680392E-01 + 0.577130E-01 0.562141E-01 0.439394E-01 0.329495E-01 0.241831E-01 0.176960E-01 + 0.130949E-01 0.999156E-02 0.812001E-02 0.726231E-02 0.726231E-02 0.812001E-02 + 0.999156E-02 0.130949E-01 0.176960E-01 0.241831E-01 0.329495E-01 0.439394E-01 + 0.562141E-01 0.680392E-01 0.774199E-01 0.826277E-01 0.826277E-01 0.774199E-01 + 0.680392E-01 0.562141E-01 0.519648E-01 0.399611E-01 0.297890E-01 0.219742E-01 + 0.163037E-01 0.123505E-01 0.979082E-02 0.839115E-02 0.795383E-02 0.839115E-02 + 0.979082E-02 0.123505E-01 0.163037E-01 0.219742E-01 0.297890E-01 0.399611E-01 + 0.519648E-01 0.643573E-01 0.751976E-01 0.826277E-01 0.852782E-01 0.826277E-01 + 0.751976E-01 0.643573E-01 0.519648E-01 0.456893E-01 0.348716E-01 0.261315E-01 + 0.195825E-01 0.148798E-01 0.116712E-01 0.971680E-02 0.881467E-02 0.881467E-02 + 0.971680E-02 0.116712E-01 0.148798E-01 0.195825E-01 0.261315E-01 0.348716E-01 + 0.456893E-01 0.576056E-01 0.689152E-01 0.777628E-01 0.826277E-01 0.826277E-01 + 0.777628E-01 0.689152E-01 0.576056E-01 0.456893E-01 0.384625E-01 0.294949E-01 + 0.224840E-01 0.172809E-01 0.135746E-01 0.111368E-01 0.979082E-02 0.936834E-02 + 0.979082E-02 0.111368E-01 0.135746E-01 0.172809E-01 0.224840E-01 0.294949E-01 + 0.384625E-01 0.489277E-01 0.596400E-01 0.689152E-01 0.751976E-01 0.774199E-01 + 0.751976E-01 0.689152E-01 0.596400E-01 0.489277E-01 0.384625E-01 0.313897E-01 + 0.245013E-01 0.191829E-01 0.152385E-01 0.124825E-01 0.107816E-01 0.999156E-02 + 0.999156E-02 0.107816E-01 0.124825E-01 0.152385E-01 0.191829E-01 0.245013E-01 + 0.313897E-01 0.397629E-01 0.489277E-01 0.576056E-01 0.643573E-01 0.680392E-01 + 0.680392E-01 0.643573E-01 0.576056E-01 0.489277E-01 0.397629E-01 0.313897E-01 + 0.252261E-01 0.202389E-01 0.163824E-01 0.135462E-01 0.116478E-01 0.105905E-01 + 0.102572E-01 0.105905E-01 0.116478E-01 0.135462E-01 0.163824E-01 0.202389E-01 + 0.252261E-01 0.313897E-01 0.384625E-01 0.456893E-01 0.519648E-01 0.562141E-01 + 0.577130E-01 0.562141E-01 0.519648E-01 0.456893E-01 0.384625E-01 0.313897E-01 + 0.252261E-01 0.261640E-01 0.219046E-01 0.185511E-01 0.160855E-01 0.145193E-01 + 0.137863E-01 0.137863E-01 0.145193E-01 0.160855E-01 0.185511E-01 0.219046E-01 + 0.261640E-01 0.313897E-01 0.374214E-01 0.435886E-01 0.488647E-01 0.524590E-01 + 0.541857E-01 0.541857E-01 0.524590E-01 0.488647E-01 0.435886E-01 0.374214E-01 + 0.313897E-01 0.261640E-01 0.219046E-01 0.190156E-01 0.167602E-01 0.151913E-01 + 0.143047E-01 0.140249E-01 0.143047E-01 0.151913E-01 0.167602E-01 0.190156E-01 + 0.219046E-01 0.254039E-01 0.294949E-01 0.339662E-01 0.382749E-01 0.417281E-01 + 0.438602E-01 0.445636E-01 0.438602E-01 0.417281E-01 0.382749E-01 0.339662E-01 + 0.294949E-01 0.254039E-01 0.219046E-01 0.185511E-01 0.167602E-01 0.154277E-01 + 0.145756E-01 0.141712E-01 0.141712E-01 0.145756E-01 0.154277E-01 0.167602E-01 + 0.185511E-01 0.207435E-01 0.232916E-01 0.261315E-01 0.290632E-01 0.317043E-01 + 0.336423E-01 0.346386E-01 0.346386E-01 0.336423E-01 0.317043E-01 0.290632E-01 + 0.261315E-01 0.232916E-01 0.207435E-01 0.185511E-01 0.160855E-01 0.151913E-01 + 0.145756E-01 0.142170E-01 0.140988E-01 0.142170E-01 0.145756E-01 0.151913E-01 + 0.160855E-01 0.172544E-01 0.186622E-01 0.202611E-01 0.219742E-01 0.236381E-01 + 0.250115E-01 0.258890E-01 0.261851E-01 0.258890E-01 0.250115E-01 0.236381E-01 + 0.219742E-01 0.202611E-01 0.186622E-01 0.172544E-01 0.160855E-01 0.145193E-01 + 0.143047E-01 0.141712E-01 0.140988E-01 0.140988E-01 0.141712E-01 0.143047E-01 + 0.145193E-01 0.148660E-01 0.153787E-01 0.160510E-01 0.168476E-01 0.176960E-01 + 0.184714E-01 0.190386E-01 0.193258E-01 0.193258E-01 0.190386E-01 0.184714E-01 + 0.176960E-01 0.168476E-01 0.160510E-01 0.153787E-01 0.148660E-01 0.145193E-01 + 0.137863E-01 0.140249E-01 0.141712E-01 0.142170E-01 0.141712E-01 0.140249E-01 + 0.137863E-01 0.135197E-01 0.133171E-01 0.132429E-01 0.133171E-01 0.135197E-01 + 0.137863E-01 0.140249E-01 0.141712E-01 0.142170E-01 0.141712E-01 0.140249E-01 + 0.137863E-01 0.135197E-01 0.133171E-01 0.132429E-01 0.133171E-01 0.135197E-01 + 0.137863E-01 0.137863E-01 0.143047E-01 0.145756E-01 0.145756E-01 0.143047E-01 + 0.137863E-01 0.130949E-01 0.123505E-01 0.116712E-01 0.111368E-01 0.107816E-01 + 0.105905E-01 0.105047E-01 0.104608E-01 0.104347E-01 0.104347E-01 0.104608E-01 + 0.105047E-01 0.105905E-01 0.107816E-01 0.111368E-01 0.116712E-01 0.123505E-01 + 0.130949E-01 0.137863E-01 0.145193E-01 0.151913E-01 0.154277E-01 0.151913E-01 + 0.145193E-01 0.135197E-01 0.123505E-01 0.111744E-01 0.101195E-01 0.926528E-02 + 0.863840E-02 0.821308E-02 0.793592E-02 0.777002E-02 0.771271E-02 0.777002E-02 + 0.793592E-02 0.821308E-02 0.863840E-02 0.926528E-02 0.101195E-01 0.111744E-01 + 0.123505E-01 0.135197E-01 0.145193E-01 0.160855E-01 0.167602E-01 0.167602E-01 + 0.160855E-01 0.148660E-01 0.133171E-01 0.116712E-01 0.101195E-01 0.878825E-02 + 0.773621E-02 0.696020E-02 0.641629E-02 0.606052E-02 0.587919E-02 0.587919E-02 + 0.606052E-02 0.641629E-02 0.696020E-02 0.773621E-02 0.878825E-02 0.101195E-01 + 0.116712E-01 0.133171E-01 0.148660E-01 0.160855E-01 0.185511E-01 0.190156E-01 + 0.185511E-01 0.172544E-01 0.153787E-01 0.132429E-01 0.111368E-01 0.926528E-02 + 0.773621E-02 0.657011E-02 0.572648E-02 0.514749E-02 0.479983E-02 0.468219E-02 + 0.479983E-02 0.514749E-02 0.572648E-02 0.657011E-02 0.773621E-02 0.926528E-02 + 0.111368E-01 0.132429E-01 0.153787E-01 0.172544E-01 0.185511E-01 0.219046E-01 + 0.219046E-01 0.207435E-01 0.186622E-01 0.160510E-01 0.133171E-01 0.107816E-01 + 0.863840E-02 0.696020E-02 0.572648E-02 0.486804E-02 0.431881E-02 0.404670E-02 + 0.404670E-02 0.431881E-02 0.486804E-02 0.572648E-02 0.696020E-02 0.863840E-02 + 0.107816E-01 0.133171E-01 0.160510E-01 0.186622E-01 0.207435E-01 0.219046E-01 + 0.261640E-01 0.254039E-01 0.232916E-01 0.202611E-01 0.168476E-01 0.135197E-01 + 0.105905E-01 0.821308E-02 0.641629E-02 0.514749E-02 0.431881E-02 0.385164E-02 + 0.370043E-02 0.385164E-02 0.431881E-02 0.514749E-02 0.641629E-02 0.821308E-02 + 0.105905E-01 0.135197E-01 0.168476E-01 0.202611E-01 0.232916E-01 0.254039E-01 + 0.261640E-01 0.313897E-01 0.294949E-01 0.261315E-01 0.219742E-01 0.176960E-01 + 0.137863E-01 0.105047E-01 0.793592E-02 0.606052E-02 0.479983E-02 0.404670E-02 + 0.370043E-02 0.370043E-02 0.404670E-02 0.479983E-02 0.606052E-02 0.793592E-02 + 0.105047E-01 0.137863E-01 0.176960E-01 0.219742E-01 0.261315E-01 0.294949E-01 + 0.313897E-01 0.313897E-01 0.374214E-01 0.339662E-01 0.290632E-01 0.236381E-01 + 0.184714E-01 0.140249E-01 0.104608E-01 0.777002E-02 0.587919E-02 0.468219E-02 + 0.404670E-02 0.385164E-02 0.404670E-02 0.468219E-02 0.587919E-02 0.777002E-02 + 0.104608E-01 0.140249E-01 0.184714E-01 0.236381E-01 0.290632E-01 0.339662E-01 + 0.374214E-01 0.386708E-01 0.374214E-01 0.435886E-01 0.382749E-01 0.317043E-01 + 0.250115E-01 0.190386E-01 0.141712E-01 0.104347E-01 0.771271E-02 0.587919E-02 + 0.479983E-02 0.431881E-02 0.431881E-02 0.479983E-02 0.587919E-02 0.771271E-02 + 0.104347E-01 0.141712E-01 0.190386E-01 0.250115E-01 0.317043E-01 0.382749E-01 + 0.435886E-01 0.465705E-01 0.465705E-01 0.435886E-01 0.488647E-01 0.417281E-01 + 0.336423E-01 0.258890E-01 0.193258E-01 0.142170E-01 0.104347E-01 0.777002E-02 + 0.606052E-02 0.514749E-02 0.486804E-02 0.514749E-02 0.606052E-02 0.777002E-02 + 0.104347E-01 0.142170E-01 0.193258E-01 0.258890E-01 0.336423E-01 0.417281E-01 + 0.488647E-01 0.537639E-01 0.555070E-01 0.537639E-01 0.488647E-01 0.524590E-01 + 0.438602E-01 0.346386E-01 0.261851E-01 0.193258E-01 0.141712E-01 0.104608E-01 + 0.793592E-02 0.641629E-02 0.572648E-02 0.572648E-02 0.641629E-02 0.793592E-02 + 0.104608E-01 0.141712E-01 0.193258E-01 0.261851E-01 0.346386E-01 0.438602E-01 + 0.524590E-01 0.590302E-01 0.625675E-01 0.625675E-01 0.590302E-01 0.524590E-01 + 0.541857E-01 0.445636E-01 0.346386E-01 0.258890E-01 0.190386E-01 0.140249E-01 + 0.105047E-01 0.821308E-02 0.696020E-02 0.657011E-02 0.696020E-02 0.821308E-02 + 0.105047E-01 0.140249E-01 0.190386E-01 0.258890E-01 0.346386E-01 0.445636E-01 + 0.541857E-01 0.619819E-01 0.669676E-01 0.686757E-01 0.669676E-01 0.619819E-01 + 0.541857E-01 0.541857E-01 0.438602E-01 0.336423E-01 0.250115E-01 0.184714E-01 + 0.137863E-01 0.105905E-01 0.863840E-02 0.773621E-02 0.773621E-02 0.863840E-02 + 0.105905E-01 0.137863E-01 0.184714E-01 0.250115E-01 0.336423E-01 0.438602E-01 + 0.541857E-01 0.628947E-01 0.689455E-01 0.720105E-01 0.720105E-01 0.689455E-01 + 0.628947E-01 0.541857E-01 0.524590E-01 0.417281E-01 0.317043E-01 0.236381E-01 + 0.176960E-01 0.135197E-01 0.107816E-01 0.926528E-02 0.878825E-02 0.926528E-02 + 0.107816E-01 0.135197E-01 0.176960E-01 0.236381E-01 0.317043E-01 0.417281E-01 + 0.524590E-01 0.619819E-01 0.689455E-01 0.730466E-01 0.743983E-01 0.730466E-01 + 0.689455E-01 0.619819E-01 0.524590E-01 0.488647E-01 0.382749E-01 0.290632E-01 + 0.219742E-01 0.168476E-01 0.133171E-01 0.111368E-01 0.101195E-01 0.101195E-01 + 0.111368E-01 0.133171E-01 0.168476E-01 0.219742E-01 0.290632E-01 0.382749E-01 + 0.488647E-01 0.590302E-01 0.669676E-01 0.720105E-01 0.743983E-01 0.743983E-01 + 0.720105E-01 0.669676E-01 0.590302E-01 0.488647E-01 0.435886E-01 0.339662E-01 + 0.261315E-01 0.202611E-01 0.160510E-01 0.132429E-01 0.116712E-01 0.111744E-01 + 0.116712E-01 0.132429E-01 0.160510E-01 0.202611E-01 0.261315E-01 0.339662E-01 + 0.435886E-01 0.537639E-01 0.625675E-01 0.686757E-01 0.720105E-01 0.730466E-01 + 0.720105E-01 0.686757E-01 0.625675E-01 0.537639E-01 0.435886E-01 0.374214E-01 + 0.294949E-01 0.232916E-01 0.186622E-01 0.153787E-01 0.133171E-01 0.123505E-01 + 0.123505E-01 0.133171E-01 0.153787E-01 0.186622E-01 0.232916E-01 0.294949E-01 + 0.374214E-01 0.465705E-01 0.555070E-01 0.625675E-01 0.669676E-01 0.689455E-01 + 0.689455E-01 0.669676E-01 0.625675E-01 0.555070E-01 0.465705E-01 0.374214E-01 + 0.313897E-01 0.254039E-01 0.207435E-01 0.172544E-01 0.148660E-01 0.135197E-01 + 0.130949E-01 0.135197E-01 0.148660E-01 0.172544E-01 0.207435E-01 0.254039E-01 + 0.313897E-01 0.386708E-01 0.465705E-01 0.537639E-01 0.590302E-01 0.619819E-01 + 0.628947E-01 0.619819E-01 0.590302E-01 0.537639E-01 0.465705E-01 0.386708E-01 + 0.313897E-01 0.261640E-01 0.219046E-01 0.185511E-01 0.160855E-01 0.145193E-01 + 0.137863E-01 0.137863E-01 0.145193E-01 0.160855E-01 0.185511E-01 0.219046E-01 + 0.261640E-01 0.313897E-01 0.374214E-01 0.435886E-01 0.488647E-01 0.524590E-01 + 0.541857E-01 0.541857E-01 0.524590E-01 0.488647E-01 0.435886E-01 0.374214E-01 + 0.313897E-01 0.261640E-01 0.289485E-01 0.252300E-01 0.222441E-01 0.200995E-01 + 0.188635E-01 0.184714E-01 0.188635E-01 0.200995E-01 0.222441E-01 0.252300E-01 + 0.289485E-01 0.333894E-01 0.384625E-01 0.435886E-01 0.476986E-01 0.499921E-01 + 0.506982E-01 0.507602E-01 0.506982E-01 0.499921E-01 0.476986E-01 0.435886E-01 + 0.384625E-01 0.333894E-01 0.289485E-01 0.252300E-01 0.227862E-01 0.208803E-01 + 0.196306E-01 0.190386E-01 0.190386E-01 0.196306E-01 0.208803E-01 0.227862E-01 + 0.252300E-01 0.280936E-01 0.313421E-01 0.348716E-01 0.382749E-01 0.409266E-01 + 0.424531E-01 0.430297E-01 0.430297E-01 0.424531E-01 0.409266E-01 0.382749E-01 + 0.348716E-01 0.313421E-01 0.280936E-01 0.252300E-01 0.222441E-01 0.208803E-01 + 0.198958E-01 0.193258E-01 0.191432E-01 0.193258E-01 0.198958E-01 0.208803E-01 + 0.222441E-01 0.238879E-01 0.257241E-01 0.277169E-01 0.297890E-01 0.317043E-01 + 0.331452E-01 0.339519E-01 0.341947E-01 0.339519E-01 0.331452E-01 0.317043E-01 + 0.297890E-01 0.277169E-01 0.257241E-01 0.238879E-01 0.222441E-01 0.200995E-01 + 0.196306E-01 0.193258E-01 0.191739E-01 0.191739E-01 0.193258E-01 0.196306E-01 + 0.200995E-01 0.207321E-01 0.214930E-01 0.223396E-01 0.232513E-01 0.241831E-01 + 0.250115E-01 0.255918E-01 0.258693E-01 0.258693E-01 0.255918E-01 0.250115E-01 + 0.241831E-01 0.232513E-01 0.223396E-01 0.214930E-01 0.207321E-01 0.200995E-01 + 0.188635E-01 0.190386E-01 0.191432E-01 0.191739E-01 0.191432E-01 0.190386E-01 + 0.188635E-01 0.186759E-01 0.185459E-01 0.185021E-01 0.185459E-01 0.186759E-01 + 0.188635E-01 0.190386E-01 0.191432E-01 0.191739E-01 0.191432E-01 0.190386E-01 + 0.188635E-01 0.186759E-01 0.185459E-01 0.185021E-01 0.185459E-01 0.186759E-01 + 0.188635E-01 0.184714E-01 0.190386E-01 0.193258E-01 0.193258E-01 0.190386E-01 + 0.184714E-01 0.176960E-01 0.168476E-01 0.160510E-01 0.153787E-01 0.148660E-01 + 0.145193E-01 0.143047E-01 0.141712E-01 0.140988E-01 0.140988E-01 0.141712E-01 + 0.143047E-01 0.145193E-01 0.148660E-01 0.153787E-01 0.160510E-01 0.168476E-01 + 0.176960E-01 0.184714E-01 0.188635E-01 0.196306E-01 0.198958E-01 0.196306E-01 + 0.188635E-01 0.176960E-01 0.163037E-01 0.148798E-01 0.135746E-01 0.124825E-01 + 0.116478E-01 0.110600E-01 0.106691E-01 0.104347E-01 0.103541E-01 0.104347E-01 + 0.106691E-01 0.110600E-01 0.116478E-01 0.124825E-01 0.135746E-01 0.148798E-01 + 0.163037E-01 0.176960E-01 0.188635E-01 0.200995E-01 0.208803E-01 0.208803E-01 + 0.200995E-01 0.186759E-01 0.168476E-01 0.148798E-01 0.129964E-01 0.113527E-01 + 0.100355E-01 0.905956E-02 0.837934E-02 0.793755E-02 0.771271E-02 0.771271E-02 + 0.793755E-02 0.837934E-02 0.905956E-02 0.100355E-01 0.113527E-01 0.129964E-01 + 0.148798E-01 0.168476E-01 0.186759E-01 0.200995E-01 0.222441E-01 0.227862E-01 + 0.222441E-01 0.207321E-01 0.185459E-01 0.160510E-01 0.135746E-01 0.113527E-01 + 0.952277E-02 0.812613E-02 0.712172E-02 0.643497E-02 0.602050E-02 0.587919E-02 + 0.602050E-02 0.643497E-02 0.712172E-02 0.812613E-02 0.952277E-02 0.113527E-01 + 0.135746E-01 0.160510E-01 0.185459E-01 0.207321E-01 0.222441E-01 0.252300E-01 + 0.252300E-01 0.238879E-01 0.214930E-01 0.185021E-01 0.153787E-01 0.124825E-01 + 0.100355E-01 0.812613E-02 0.672922E-02 0.575473E-02 0.512081E-02 0.479983E-02 + 0.479983E-02 0.512081E-02 0.575473E-02 0.672922E-02 0.812613E-02 0.100355E-01 + 0.124825E-01 0.153787E-01 0.185021E-01 0.214930E-01 0.238879E-01 0.252300E-01 + 0.289485E-01 0.280936E-01 0.257241E-01 0.223396E-01 0.185459E-01 0.148660E-01 + 0.116478E-01 0.905956E-02 0.712172E-02 0.575473E-02 0.484678E-02 0.431881E-02 + 0.414359E-02 0.431881E-02 0.484678E-02 0.575473E-02 0.712172E-02 0.905956E-02 + 0.116478E-01 0.148660E-01 0.185459E-01 0.223396E-01 0.257241E-01 0.280936E-01 + 0.289485E-01 0.333894E-01 0.313421E-01 0.277169E-01 0.232513E-01 0.186759E-01 + 0.145193E-01 0.110600E-01 0.837934E-02 0.643497E-02 0.512081E-02 0.431881E-02 + 0.393981E-02 0.393981E-02 0.431881E-02 0.512081E-02 0.643497E-02 0.837934E-02 + 0.110600E-01 0.145193E-01 0.186759E-01 0.232513E-01 0.277169E-01 0.313421E-01 + 0.333894E-01 0.333894E-01 0.384625E-01 0.348716E-01 0.297890E-01 0.241831E-01 + 0.188635E-01 0.143047E-01 0.106691E-01 0.793755E-02 0.602050E-02 0.479983E-02 + 0.414359E-02 0.393981E-02 0.414359E-02 0.479983E-02 0.602050E-02 0.793755E-02 + 0.106691E-01 0.143047E-01 0.188635E-01 0.241831E-01 0.297890E-01 0.348716E-01 + 0.384625E-01 0.397629E-01 0.384625E-01 0.435886E-01 0.382749E-01 0.317043E-01 + 0.250115E-01 0.190386E-01 0.141712E-01 0.104347E-01 0.771271E-02 0.587919E-02 + 0.479983E-02 0.431881E-02 0.431881E-02 0.479983E-02 0.587919E-02 0.771271E-02 + 0.104347E-01 0.141712E-01 0.190386E-01 0.250115E-01 0.317043E-01 0.382749E-01 + 0.435886E-01 0.465705E-01 0.465705E-01 0.435886E-01 0.476986E-01 0.409266E-01 + 0.331452E-01 0.255918E-01 0.191432E-01 0.140988E-01 0.103541E-01 0.771271E-02 + 0.602050E-02 0.512081E-02 0.484678E-02 0.512081E-02 0.602050E-02 0.771271E-02 + 0.103541E-01 0.140988E-01 0.191432E-01 0.255918E-01 0.331452E-01 0.409266E-01 + 0.476986E-01 0.522905E-01 0.539125E-01 0.522905E-01 0.476986E-01 0.499921E-01 + 0.424531E-01 0.339519E-01 0.258693E-01 0.191739E-01 0.140988E-01 0.104347E-01 + 0.793755E-02 0.643497E-02 0.575473E-02 0.575473E-02 0.643497E-02 0.793755E-02 + 0.104347E-01 0.140988E-01 0.191739E-01 0.258693E-01 0.339519E-01 0.424531E-01 + 0.499921E-01 0.554502E-01 0.582676E-01 0.582676E-01 0.554502E-01 0.499921E-01 + 0.506982E-01 0.430297E-01 0.341947E-01 0.258693E-01 0.191432E-01 0.141712E-01 + 0.106691E-01 0.837934E-02 0.712172E-02 0.672922E-02 0.712172E-02 0.837934E-02 + 0.106691E-01 0.141712E-01 0.191432E-01 0.258693E-01 0.341947E-01 0.430297E-01 + 0.506982E-01 0.560474E-01 0.589780E-01 0.598867E-01 0.589780E-01 0.560474E-01 + 0.506982E-01 0.507602E-01 0.430297E-01 0.339519E-01 0.255918E-01 0.190386E-01 + 0.143047E-01 0.110600E-01 0.905956E-02 0.812613E-02 0.812613E-02 0.905956E-02 + 0.110600E-01 0.143047E-01 0.190386E-01 0.255918E-01 0.339519E-01 0.430297E-01 + 0.507602E-01 0.556051E-01 0.577546E-01 0.584098E-01 0.584098E-01 0.577546E-01 + 0.556051E-01 0.507602E-01 0.506982E-01 0.424531E-01 0.331452E-01 0.250115E-01 + 0.188635E-01 0.145193E-01 0.116478E-01 0.100355E-01 0.952277E-02 0.100355E-01 + 0.116478E-01 0.145193E-01 0.188635E-01 0.250115E-01 0.331452E-01 0.424531E-01 + 0.506982E-01 0.556051E-01 0.570012E-01 0.567074E-01 0.564294E-01 0.567074E-01 + 0.570012E-01 0.556051E-01 0.506982E-01 0.499921E-01 0.409266E-01 0.317043E-01 + 0.241831E-01 0.186759E-01 0.148660E-01 0.124825E-01 0.113527E-01 0.113527E-01 + 0.124825E-01 0.148660E-01 0.186759E-01 0.241831E-01 0.317043E-01 0.409266E-01 + 0.499921E-01 0.560474E-01 0.577546E-01 0.567074E-01 0.555047E-01 0.555047E-01 + 0.567074E-01 0.577546E-01 0.560474E-01 0.499921E-01 0.476986E-01 0.382749E-01 + 0.297890E-01 0.232513E-01 0.185459E-01 0.153787E-01 0.135746E-01 0.129964E-01 + 0.135746E-01 0.153787E-01 0.185459E-01 0.232513E-01 0.297890E-01 0.382749E-01 + 0.476986E-01 0.554502E-01 0.589780E-01 0.584098E-01 0.564294E-01 0.555047E-01 + 0.564294E-01 0.584098E-01 0.589780E-01 0.554502E-01 0.476986E-01 0.435886E-01 + 0.348716E-01 0.277169E-01 0.223396E-01 0.185021E-01 0.160510E-01 0.148798E-01 + 0.148798E-01 0.160510E-01 0.185021E-01 0.223396E-01 0.277169E-01 0.348716E-01 + 0.435886E-01 0.522905E-01 0.582676E-01 0.598867E-01 0.584098E-01 0.567074E-01 + 0.567074E-01 0.584098E-01 0.598867E-01 0.582676E-01 0.522905E-01 0.435886E-01 + 0.384625E-01 0.313421E-01 0.257241E-01 0.214930E-01 0.185459E-01 0.168476E-01 + 0.163037E-01 0.168476E-01 0.185459E-01 0.214930E-01 0.257241E-01 0.313421E-01 + 0.384625E-01 0.465705E-01 0.539125E-01 0.582676E-01 0.589780E-01 0.577546E-01 + 0.570012E-01 0.577546E-01 0.589780E-01 0.582676E-01 0.539125E-01 0.465705E-01 + 0.384625E-01 0.333894E-01 0.280936E-01 0.238879E-01 0.207321E-01 0.186759E-01 + 0.176960E-01 0.176960E-01 0.186759E-01 0.207321E-01 0.238879E-01 0.280936E-01 + 0.333894E-01 0.397629E-01 0.465705E-01 0.522905E-01 0.554502E-01 0.560474E-01 + 0.556051E-01 0.556051E-01 0.560474E-01 0.554502E-01 0.522905E-01 0.465705E-01 + 0.397629E-01 0.333894E-01 0.289485E-01 0.252300E-01 0.222441E-01 0.200995E-01 + 0.188635E-01 0.184714E-01 0.188635E-01 0.200995E-01 0.222441E-01 0.252300E-01 + 0.289485E-01 0.333894E-01 0.384625E-01 0.435886E-01 0.476986E-01 0.499921E-01 + 0.506982E-01 0.507602E-01 0.506982E-01 0.499921E-01 0.476986E-01 0.435886E-01 + 0.384625E-01 0.333894E-01 0.289485E-01 0.335279E-01 0.302813E-01 0.276655E-01 + 0.258818E-01 0.250115E-01 0.250115E-01 0.258818E-01 0.276655E-01 0.302813E-01 + 0.335279E-01 0.372839E-01 0.414815E-01 0.456893E-01 0.488647E-01 0.499921E-01 + 0.492335E-01 0.481035E-01 0.481035E-01 0.492335E-01 0.499921E-01 0.488647E-01 + 0.456893E-01 0.414815E-01 0.372839E-01 0.335279E-01 0.302813E-01 0.283097E-01 + 0.268002E-01 0.258890E-01 0.255918E-01 0.258890E-01 0.268002E-01 0.283097E-01 + 0.302813E-01 0.325323E-01 0.349694E-01 0.375334E-01 0.399611E-01 0.417281E-01 + 0.424531E-01 0.423826E-01 0.422287E-01 0.423826E-01 0.424531E-01 0.417281E-01 + 0.399611E-01 0.375334E-01 0.349694E-01 0.325323E-01 0.302813E-01 0.276655E-01 + 0.268002E-01 0.261851E-01 0.258693E-01 0.258693E-01 0.261851E-01 0.268002E-01 + 0.276655E-01 0.286912E-01 0.297806E-01 0.308819E-01 0.319699E-01 0.329495E-01 + 0.336423E-01 0.339519E-01 0.340054E-01 0.340054E-01 0.339519E-01 0.336423E-01 + 0.329495E-01 0.319699E-01 0.308819E-01 0.297806E-01 0.286912E-01 0.276655E-01 + 0.258818E-01 0.258890E-01 0.258693E-01 0.258538E-01 0.258693E-01 0.258890E-01 + 0.258818E-01 0.258641E-01 0.258622E-01 0.258665E-01 0.258622E-01 0.258641E-01 + 0.258818E-01 0.258890E-01 0.258693E-01 0.258538E-01 0.258693E-01 0.258890E-01 + 0.258818E-01 0.258641E-01 0.258622E-01 0.258665E-01 0.258622E-01 0.258641E-01 + 0.258818E-01 0.250115E-01 0.255918E-01 0.258693E-01 0.258693E-01 0.255918E-01 + 0.250115E-01 0.241831E-01 0.232513E-01 0.223396E-01 0.214930E-01 0.207321E-01 + 0.200995E-01 0.196306E-01 0.193258E-01 0.191739E-01 0.191739E-01 0.193258E-01 + 0.196306E-01 0.200995E-01 0.207321E-01 0.214930E-01 0.223396E-01 0.232513E-01 + 0.241831E-01 0.250115E-01 0.250115E-01 0.258890E-01 0.261851E-01 0.258890E-01 + 0.250115E-01 0.236381E-01 0.219742E-01 0.202611E-01 0.186622E-01 0.172544E-01 + 0.160855E-01 0.151913E-01 0.145756E-01 0.142170E-01 0.140988E-01 0.142170E-01 + 0.145756E-01 0.151913E-01 0.160855E-01 0.172544E-01 0.186622E-01 0.202611E-01 + 0.219742E-01 0.236381E-01 0.250115E-01 0.258818E-01 0.268002E-01 0.268002E-01 + 0.258818E-01 0.241831E-01 0.219742E-01 0.195825E-01 0.172809E-01 0.152385E-01 + 0.135462E-01 0.122425E-01 0.113161E-01 0.107249E-01 0.104347E-01 0.104347E-01 + 0.107249E-01 0.113161E-01 0.122425E-01 0.135462E-01 0.152385E-01 0.172809E-01 + 0.195825E-01 0.219742E-01 0.241831E-01 0.258818E-01 0.276655E-01 0.283097E-01 + 0.276655E-01 0.258641E-01 0.232513E-01 0.202611E-01 0.172809E-01 0.145820E-01 + 0.123229E-01 0.105678E-01 0.929662E-02 0.843989E-02 0.793755E-02 0.777002E-02 + 0.793755E-02 0.843989E-02 0.929662E-02 0.105678E-01 0.123229E-01 0.145820E-01 + 0.172809E-01 0.202611E-01 0.232513E-01 0.258641E-01 0.276655E-01 0.302813E-01 + 0.302813E-01 0.286912E-01 0.258622E-01 0.223396E-01 0.186622E-01 0.152385E-01 + 0.123229E-01 0.100298E-01 0.834807E-02 0.718294E-02 0.643497E-02 0.606052E-02 + 0.606052E-02 0.643497E-02 0.718294E-02 0.834807E-02 0.100298E-01 0.123229E-01 + 0.152385E-01 0.186622E-01 0.223396E-01 0.258622E-01 0.286912E-01 0.302813E-01 + 0.335279E-01 0.325323E-01 0.297806E-01 0.258665E-01 0.214930E-01 0.172544E-01 + 0.135462E-01 0.105678E-01 0.834807E-02 0.679022E-02 0.575473E-02 0.514749E-02 + 0.494425E-02 0.514749E-02 0.575473E-02 0.679022E-02 0.834807E-02 0.105678E-01 + 0.135462E-01 0.172544E-01 0.214930E-01 0.258665E-01 0.297806E-01 0.325323E-01 + 0.335279E-01 0.372839E-01 0.349694E-01 0.308819E-01 0.258622E-01 0.207321E-01 + 0.160855E-01 0.122425E-01 0.929662E-02 0.718294E-02 0.575473E-02 0.486804E-02 + 0.443841E-02 0.443841E-02 0.486804E-02 0.575473E-02 0.718294E-02 0.929662E-02 + 0.122425E-01 0.160855E-01 0.207321E-01 0.258622E-01 0.308819E-01 0.349694E-01 + 0.372839E-01 0.372839E-01 0.414815E-01 0.375334E-01 0.319699E-01 0.258641E-01 + 0.200995E-01 0.151913E-01 0.113161E-01 0.843989E-02 0.643497E-02 0.514749E-02 + 0.443841E-02 0.421312E-02 0.443841E-02 0.514749E-02 0.643497E-02 0.843989E-02 + 0.113161E-01 0.151913E-01 0.200995E-01 0.258641E-01 0.319699E-01 0.375334E-01 + 0.414815E-01 0.429150E-01 0.414815E-01 0.456893E-01 0.399611E-01 0.329495E-01 + 0.258818E-01 0.196306E-01 0.145756E-01 0.107249E-01 0.793755E-02 0.606052E-02 + 0.494425E-02 0.443841E-02 0.443841E-02 0.494425E-02 0.606052E-02 0.793755E-02 + 0.107249E-01 0.145756E-01 0.196306E-01 0.258818E-01 0.329495E-01 0.399611E-01 + 0.456893E-01 0.489277E-01 0.489277E-01 0.456893E-01 0.488647E-01 0.417281E-01 + 0.336423E-01 0.258890E-01 0.193258E-01 0.142170E-01 0.104347E-01 0.777002E-02 + 0.606052E-02 0.514749E-02 0.486804E-02 0.514749E-02 0.606052E-02 0.777002E-02 + 0.104347E-01 0.142170E-01 0.193258E-01 0.258890E-01 0.336423E-01 0.417281E-01 + 0.488647E-01 0.537639E-01 0.555070E-01 0.537639E-01 0.488647E-01 0.499921E-01 + 0.424531E-01 0.339519E-01 0.258693E-01 0.191739E-01 0.140988E-01 0.104347E-01 + 0.793755E-02 0.643497E-02 0.575473E-02 0.575473E-02 0.643497E-02 0.793755E-02 + 0.104347E-01 0.140988E-01 0.191739E-01 0.258693E-01 0.339519E-01 0.424531E-01 + 0.499921E-01 0.554502E-01 0.582676E-01 0.582676E-01 0.554502E-01 0.499921E-01 + 0.492335E-01 0.423826E-01 0.340054E-01 0.258538E-01 0.191739E-01 0.142170E-01 + 0.107249E-01 0.843989E-02 0.718294E-02 0.679022E-02 0.718294E-02 0.843989E-02 + 0.107249E-01 0.142170E-01 0.191739E-01 0.258538E-01 0.340054E-01 0.423826E-01 + 0.492335E-01 0.535709E-01 0.556625E-01 0.562477E-01 0.556625E-01 0.535709E-01 + 0.492335E-01 0.481035E-01 0.422287E-01 0.340054E-01 0.258693E-01 0.193258E-01 + 0.145756E-01 0.113161E-01 0.929662E-02 0.834807E-02 0.834807E-02 0.929662E-02 + 0.113161E-01 0.145756E-01 0.193258E-01 0.258693E-01 0.340054E-01 0.422287E-01 + 0.481035E-01 0.502944E-01 0.498680E-01 0.489830E-01 0.489830E-01 0.498680E-01 + 0.502944E-01 0.481035E-01 0.481035E-01 0.423826E-01 0.339519E-01 0.258890E-01 + 0.196306E-01 0.151913E-01 0.122425E-01 0.105678E-01 0.100298E-01 0.105678E-01 + 0.122425E-01 0.151913E-01 0.196306E-01 0.258890E-01 0.339519E-01 0.423826E-01 + 0.481035E-01 0.487304E-01 0.453630E-01 0.415988E-01 0.401068E-01 0.415988E-01 + 0.453630E-01 0.487304E-01 0.481035E-01 0.492335E-01 0.424531E-01 0.336423E-01 + 0.258818E-01 0.200995E-01 0.160855E-01 0.135462E-01 0.123229E-01 0.123229E-01 + 0.135462E-01 0.160855E-01 0.200995E-01 0.258818E-01 0.336423E-01 0.424531E-01 + 0.492335E-01 0.502944E-01 0.453630E-01 0.386373E-01 0.345053E-01 0.345053E-01 + 0.386373E-01 0.453630E-01 0.502944E-01 0.492335E-01 0.499921E-01 0.417281E-01 + 0.329495E-01 0.258641E-01 0.207321E-01 0.172544E-01 0.152385E-01 0.145820E-01 + 0.152385E-01 0.172544E-01 0.207321E-01 0.258641E-01 0.329495E-01 0.417281E-01 + 0.499921E-01 0.535709E-01 0.498680E-01 0.415988E-01 0.345053E-01 0.319563E-01 + 0.345053E-01 0.415988E-01 0.498680E-01 0.535709E-01 0.499921E-01 0.488647E-01 + 0.399611E-01 0.319699E-01 0.258622E-01 0.214930E-01 0.186622E-01 0.172809E-01 + 0.172809E-01 0.186622E-01 0.214930E-01 0.258622E-01 0.319699E-01 0.399611E-01 + 0.488647E-01 0.554502E-01 0.556625E-01 0.489830E-01 0.401068E-01 0.345053E-01 + 0.345053E-01 0.401068E-01 0.489830E-01 0.556625E-01 0.554502E-01 0.488647E-01 + 0.456893E-01 0.375334E-01 0.308819E-01 0.258665E-01 0.223396E-01 0.202611E-01 + 0.195825E-01 0.202611E-01 0.223396E-01 0.258665E-01 0.308819E-01 0.375334E-01 + 0.456893E-01 0.537639E-01 0.582676E-01 0.562477E-01 0.489830E-01 0.415988E-01 + 0.386373E-01 0.415988E-01 0.489830E-01 0.562477E-01 0.582676E-01 0.537639E-01 + 0.456893E-01 0.414815E-01 0.349694E-01 0.297806E-01 0.258622E-01 0.232513E-01 + 0.219742E-01 0.219742E-01 0.232513E-01 0.258622E-01 0.297806E-01 0.349694E-01 + 0.414815E-01 0.489277E-01 0.555070E-01 0.582676E-01 0.556625E-01 0.498680E-01 + 0.453630E-01 0.453630E-01 0.498680E-01 0.556625E-01 0.582676E-01 0.555070E-01 + 0.489277E-01 0.414815E-01 0.372839E-01 0.325323E-01 0.286912E-01 0.258641E-01 + 0.241831E-01 0.236381E-01 0.241831E-01 0.258641E-01 0.286912E-01 0.325323E-01 + 0.372839E-01 0.429150E-01 0.489277E-01 0.537639E-01 0.554502E-01 0.535709E-01 + 0.502944E-01 0.487304E-01 0.502944E-01 0.535709E-01 0.554502E-01 0.537639E-01 + 0.489277E-01 0.429150E-01 0.372839E-01 0.335279E-01 0.302813E-01 0.276655E-01 + 0.258818E-01 0.250115E-01 0.250115E-01 0.258818E-01 0.276655E-01 0.302813E-01 + 0.335279E-01 0.372839E-01 0.414815E-01 0.456893E-01 0.488647E-01 0.499921E-01 + 0.492335E-01 0.481035E-01 0.481035E-01 0.492335E-01 0.499921E-01 0.488647E-01 + 0.456893E-01 0.414815E-01 0.372839E-01 0.335279E-01 0.399963E-01 0.373044E-01 + 0.350891E-01 0.336423E-01 0.331452E-01 0.336423E-01 0.350891E-01 0.373044E-01 + 0.399963E-01 0.429734E-01 0.462127E-01 0.494937E-01 0.519648E-01 0.524590E-01 + 0.506982E-01 0.481035E-01 0.468849E-01 0.481035E-01 0.506982E-01 0.524590E-01 + 0.519648E-01 0.494937E-01 0.462127E-01 0.429734E-01 0.399963E-01 0.373044E-01 + 0.358437E-01 0.346386E-01 0.339519E-01 0.339519E-01 0.346386E-01 0.358437E-01 + 0.373044E-01 0.388056E-01 0.402865E-01 0.417669E-01 0.431159E-01 0.439394E-01 + 0.438602E-01 0.430297E-01 0.422287E-01 0.422287E-01 0.430297E-01 0.438602E-01 + 0.439394E-01 0.431159E-01 0.417669E-01 0.402865E-01 0.388056E-01 0.373044E-01 + 0.350891E-01 0.346386E-01 0.341947E-01 0.340054E-01 0.341947E-01 0.346386E-01 + 0.350891E-01 0.353868E-01 0.355244E-01 0.355603E-01 0.355244E-01 0.353868E-01 + 0.350891E-01 0.346386E-01 0.341947E-01 0.340054E-01 0.341947E-01 0.346386E-01 + 0.350891E-01 0.353868E-01 0.355244E-01 0.355603E-01 0.355244E-01 0.353868E-01 + 0.350891E-01 0.336423E-01 0.339519E-01 0.340054E-01 0.340054E-01 0.339519E-01 + 0.336423E-01 0.329495E-01 0.319699E-01 0.308819E-01 0.297806E-01 0.286912E-01 + 0.276655E-01 0.268002E-01 0.261851E-01 0.258693E-01 0.258693E-01 0.261851E-01 + 0.268002E-01 0.276655E-01 0.286912E-01 0.297806E-01 0.308819E-01 0.319699E-01 + 0.329495E-01 0.336423E-01 0.331452E-01 0.339519E-01 0.341947E-01 0.339519E-01 + 0.331452E-01 0.317043E-01 0.297890E-01 0.277169E-01 0.257241E-01 0.238879E-01 + 0.222441E-01 0.208803E-01 0.198958E-01 0.193258E-01 0.191432E-01 0.193258E-01 + 0.198958E-01 0.208803E-01 0.222441E-01 0.238879E-01 0.257241E-01 0.277169E-01 + 0.297890E-01 0.317043E-01 0.331452E-01 0.336423E-01 0.346386E-01 0.346386E-01 + 0.336423E-01 0.317043E-01 0.290632E-01 0.261315E-01 0.232916E-01 0.207435E-01 + 0.185511E-01 0.167602E-01 0.154277E-01 0.145756E-01 0.141712E-01 0.141712E-01 + 0.145756E-01 0.154277E-01 0.167602E-01 0.185511E-01 0.207435E-01 0.232916E-01 + 0.261315E-01 0.290632E-01 0.317043E-01 0.336423E-01 0.350891E-01 0.358437E-01 + 0.350891E-01 0.329495E-01 0.297890E-01 0.261315E-01 0.224840E-01 0.191829E-01 + 0.163824E-01 0.141357E-01 0.124544E-01 0.113161E-01 0.106691E-01 0.104608E-01 + 0.106691E-01 0.113161E-01 0.124544E-01 0.141357E-01 0.163824E-01 0.191829E-01 + 0.224840E-01 0.261315E-01 0.297890E-01 0.329495E-01 0.350891E-01 0.373044E-01 + 0.373044E-01 0.353868E-01 0.319699E-01 0.277169E-01 0.232916E-01 0.191829E-01 + 0.156674E-01 0.128584E-01 0.107582E-01 0.929662E-02 0.837934E-02 0.793592E-02 + 0.793592E-02 0.837934E-02 0.929662E-02 0.107582E-01 0.128584E-01 0.156674E-01 + 0.191829E-01 0.232916E-01 0.277169E-01 0.319699E-01 0.353868E-01 0.373044E-01 + 0.399963E-01 0.388056E-01 0.355244E-01 0.308819E-01 0.257241E-01 0.207435E-01 + 0.163824E-01 0.128584E-01 0.102111E-01 0.834807E-02 0.712172E-02 0.641629E-02 + 0.618373E-02 0.641629E-02 0.712172E-02 0.834807E-02 0.102111E-01 0.128584E-01 + 0.163824E-01 0.207435E-01 0.257241E-01 0.308819E-01 0.355244E-01 0.388056E-01 + 0.399963E-01 0.429734E-01 0.402865E-01 0.355603E-01 0.297806E-01 0.238879E-01 + 0.185511E-01 0.141357E-01 0.107582E-01 0.834807E-02 0.672922E-02 0.572648E-02 + 0.523975E-02 0.523975E-02 0.572648E-02 0.672922E-02 0.834807E-02 0.107582E-01 + 0.141357E-01 0.185511E-01 0.238879E-01 0.297806E-01 0.355603E-01 0.402865E-01 + 0.429734E-01 0.429734E-01 0.462127E-01 0.417669E-01 0.355244E-01 0.286912E-01 + 0.222441E-01 0.167602E-01 0.124544E-01 0.929662E-02 0.712172E-02 0.572648E-02 + 0.494764E-02 0.469643E-02 0.494764E-02 0.572648E-02 0.712172E-02 0.929662E-02 + 0.124544E-01 0.167602E-01 0.222441E-01 0.286912E-01 0.355244E-01 0.417669E-01 + 0.462127E-01 0.478311E-01 0.462127E-01 0.494937E-01 0.431159E-01 0.353868E-01 + 0.276655E-01 0.208803E-01 0.154277E-01 0.113161E-01 0.837934E-02 0.641629E-02 + 0.523975E-02 0.469643E-02 0.469643E-02 0.523975E-02 0.641629E-02 0.837934E-02 + 0.113161E-01 0.154277E-01 0.208803E-01 0.276655E-01 0.353868E-01 0.431159E-01 + 0.494937E-01 0.531274E-01 0.531274E-01 0.494937E-01 0.519648E-01 0.439394E-01 + 0.350891E-01 0.268002E-01 0.198958E-01 0.145756E-01 0.106691E-01 0.793592E-02 + 0.618373E-02 0.523975E-02 0.494764E-02 0.523975E-02 0.618373E-02 0.793592E-02 + 0.106691E-01 0.145756E-01 0.198958E-01 0.268002E-01 0.350891E-01 0.439394E-01 + 0.519648E-01 0.576056E-01 0.596400E-01 0.576056E-01 0.519648E-01 0.524590E-01 + 0.438602E-01 0.346386E-01 0.261851E-01 0.193258E-01 0.141712E-01 0.104608E-01 + 0.793592E-02 0.641629E-02 0.572648E-02 0.572648E-02 0.641629E-02 0.793592E-02 + 0.104608E-01 0.141712E-01 0.193258E-01 0.261851E-01 0.346386E-01 0.438602E-01 + 0.524590E-01 0.590302E-01 0.625675E-01 0.625675E-01 0.590302E-01 0.524590E-01 + 0.506982E-01 0.430297E-01 0.341947E-01 0.258693E-01 0.191432E-01 0.141712E-01 + 0.106691E-01 0.837934E-02 0.712172E-02 0.672922E-02 0.712172E-02 0.837934E-02 + 0.106691E-01 0.141712E-01 0.191432E-01 0.258693E-01 0.341947E-01 0.430297E-01 + 0.506982E-01 0.560474E-01 0.589780E-01 0.598867E-01 0.589780E-01 0.560474E-01 + 0.506982E-01 0.481035E-01 0.422287E-01 0.340054E-01 0.258693E-01 0.193258E-01 + 0.145756E-01 0.113161E-01 0.929662E-02 0.834807E-02 0.834807E-02 0.929662E-02 + 0.113161E-01 0.145756E-01 0.193258E-01 0.258693E-01 0.340054E-01 0.422287E-01 + 0.481035E-01 0.502944E-01 0.498680E-01 0.489830E-01 0.489830E-01 0.498680E-01 + 0.502944E-01 0.481035E-01 0.468849E-01 0.422287E-01 0.341947E-01 0.261851E-01 + 0.198958E-01 0.154277E-01 0.124544E-01 0.107582E-01 0.102111E-01 0.107582E-01 + 0.124544E-01 0.154277E-01 0.198958E-01 0.261851E-01 0.341947E-01 0.422287E-01 + 0.468849E-01 0.457870E-01 0.405936E-01 0.355758E-01 0.336667E-01 0.355758E-01 + 0.405936E-01 0.457870E-01 0.468849E-01 0.481035E-01 0.430297E-01 0.346386E-01 + 0.268002E-01 0.208803E-01 0.167602E-01 0.141357E-01 0.128584E-01 0.128584E-01 + 0.141357E-01 0.167602E-01 0.208803E-01 0.268002E-01 0.346386E-01 0.430297E-01 + 0.481035E-01 0.457870E-01 0.367736E-01 0.269968E-01 0.215594E-01 0.215594E-01 + 0.269968E-01 0.367736E-01 0.457870E-01 0.481035E-01 0.506982E-01 0.438602E-01 + 0.350891E-01 0.276655E-01 0.222441E-01 0.185511E-01 0.163824E-01 0.156674E-01 + 0.163824E-01 0.185511E-01 0.222441E-01 0.276655E-01 0.350891E-01 0.438602E-01 + 0.506982E-01 0.502944E-01 0.405936E-01 0.269968E-01 0.173212E-01 0.142537E-01 + 0.173212E-01 0.269968E-01 0.405936E-01 0.502944E-01 0.506982E-01 0.524590E-01 + 0.439394E-01 0.353868E-01 0.286912E-01 0.238879E-01 0.207435E-01 0.191829E-01 + 0.191829E-01 0.207435E-01 0.238879E-01 0.286912E-01 0.353868E-01 0.439394E-01 + 0.524590E-01 0.560474E-01 0.498680E-01 0.355758E-01 0.215594E-01 0.142537E-01 + 0.142537E-01 0.215594E-01 0.355758E-01 0.498680E-01 0.560474E-01 0.524590E-01 + 0.519648E-01 0.431159E-01 0.355244E-01 0.297806E-01 0.257241E-01 0.232916E-01 + 0.224840E-01 0.232916E-01 0.257241E-01 0.297806E-01 0.355244E-01 0.431159E-01 + 0.519648E-01 0.590302E-01 0.589780E-01 0.489830E-01 0.336667E-01 0.215594E-01 + 0.173212E-01 0.215594E-01 0.336667E-01 0.489830E-01 0.589780E-01 0.590302E-01 + 0.519648E-01 0.494937E-01 0.417669E-01 0.355603E-01 0.308819E-01 0.277169E-01 + 0.261315E-01 0.261315E-01 0.277169E-01 0.308819E-01 0.355603E-01 0.417669E-01 + 0.494937E-01 0.576056E-01 0.625675E-01 0.598867E-01 0.489830E-01 0.355758E-01 + 0.269968E-01 0.269968E-01 0.355758E-01 0.489830E-01 0.598867E-01 0.625675E-01 + 0.576056E-01 0.494937E-01 0.462127E-01 0.402865E-01 0.355244E-01 0.319699E-01 + 0.297890E-01 0.290632E-01 0.297890E-01 0.319699E-01 0.355244E-01 0.402865E-01 + 0.462127E-01 0.531274E-01 0.596400E-01 0.625675E-01 0.589780E-01 0.498680E-01 + 0.405936E-01 0.367736E-01 0.405936E-01 0.498680E-01 0.589780E-01 0.625675E-01 + 0.596400E-01 0.531274E-01 0.462127E-01 0.429734E-01 0.388056E-01 0.353868E-01 + 0.329495E-01 0.317043E-01 0.317043E-01 0.329495E-01 0.353868E-01 0.388056E-01 + 0.429734E-01 0.478311E-01 0.531274E-01 0.576056E-01 0.590302E-01 0.560474E-01 + 0.502944E-01 0.457870E-01 0.457870E-01 0.502944E-01 0.560474E-01 0.590302E-01 + 0.576056E-01 0.531274E-01 0.478311E-01 0.429734E-01 0.399963E-01 0.373044E-01 + 0.350891E-01 0.336423E-01 0.331452E-01 0.336423E-01 0.350891E-01 0.373044E-01 + 0.399963E-01 0.429734E-01 0.462127E-01 0.494937E-01 0.519648E-01 0.524590E-01 + 0.506982E-01 0.481035E-01 0.468849E-01 0.481035E-01 0.506982E-01 0.524590E-01 + 0.519648E-01 0.494937E-01 0.462127E-01 0.429734E-01 0.399963E-01 0.484779E-01 + 0.461141E-01 0.438602E-01 0.424531E-01 0.424531E-01 0.438602E-01 0.461141E-01 + 0.484779E-01 0.505628E-01 0.524971E-01 0.544700E-01 0.560643E-01 0.562141E-01 + 0.541857E-01 0.507602E-01 0.481035E-01 0.481035E-01 0.507602E-01 0.541857E-01 + 0.562141E-01 0.560643E-01 0.544700E-01 0.524971E-01 0.505628E-01 0.484779E-01 + 0.461141E-01 0.445636E-01 0.430297E-01 0.423826E-01 0.430297E-01 0.445636E-01 + 0.461141E-01 0.470527E-01 0.473650E-01 0.474025E-01 0.473650E-01 0.470527E-01 + 0.461141E-01 0.445636E-01 0.430297E-01 0.423826E-01 0.430297E-01 0.445636E-01 + 0.461141E-01 0.470527E-01 0.473650E-01 0.474025E-01 0.473650E-01 0.470527E-01 + 0.461141E-01 0.438602E-01 0.430297E-01 0.422287E-01 0.422287E-01 0.430297E-01 + 0.438602E-01 0.439394E-01 0.431159E-01 0.417669E-01 0.402865E-01 0.388056E-01 + 0.373044E-01 0.358437E-01 0.346386E-01 0.339519E-01 0.339519E-01 0.346386E-01 + 0.358437E-01 0.373044E-01 0.388056E-01 0.402865E-01 0.417669E-01 0.431159E-01 + 0.439394E-01 0.438602E-01 0.424531E-01 0.423826E-01 0.422287E-01 0.423826E-01 + 0.424531E-01 0.417281E-01 0.399611E-01 0.375334E-01 0.349694E-01 0.325323E-01 + 0.302813E-01 0.283097E-01 0.268002E-01 0.258890E-01 0.255918E-01 0.258890E-01 + 0.268002E-01 0.283097E-01 0.302813E-01 0.325323E-01 0.349694E-01 0.375334E-01 + 0.399611E-01 0.417281E-01 0.424531E-01 0.424531E-01 0.430297E-01 0.430297E-01 + 0.424531E-01 0.409266E-01 0.382749E-01 0.348716E-01 0.313421E-01 0.280936E-01 + 0.252300E-01 0.227862E-01 0.208803E-01 0.196306E-01 0.190386E-01 0.190386E-01 + 0.196306E-01 0.208803E-01 0.227862E-01 0.252300E-01 0.280936E-01 0.313421E-01 + 0.348716E-01 0.382749E-01 0.409266E-01 0.424531E-01 0.438602E-01 0.445636E-01 + 0.438602E-01 0.417281E-01 0.382749E-01 0.339662E-01 0.294949E-01 0.254039E-01 + 0.219046E-01 0.190156E-01 0.167602E-01 0.151913E-01 0.143047E-01 0.140249E-01 + 0.143047E-01 0.151913E-01 0.167602E-01 0.190156E-01 0.219046E-01 0.254039E-01 + 0.294949E-01 0.339662E-01 0.382749E-01 0.417281E-01 0.438602E-01 0.461141E-01 + 0.461141E-01 0.439394E-01 0.399611E-01 0.348716E-01 0.294949E-01 0.245013E-01 + 0.202389E-01 0.167905E-01 0.141357E-01 0.122425E-01 0.110600E-01 0.105047E-01 + 0.105047E-01 0.110600E-01 0.122425E-01 0.141357E-01 0.167905E-01 0.202389E-01 + 0.245013E-01 0.294949E-01 0.348716E-01 0.399611E-01 0.439394E-01 0.461141E-01 + 0.484779E-01 0.470527E-01 0.431159E-01 0.375334E-01 0.313421E-01 0.254039E-01 + 0.202389E-01 0.160537E-01 0.128584E-01 0.105678E-01 0.905956E-02 0.821308E-02 + 0.794138E-02 0.821308E-02 0.905956E-02 0.105678E-01 0.128584E-01 0.160537E-01 + 0.202389E-01 0.254039E-01 0.313421E-01 0.375334E-01 0.431159E-01 0.470527E-01 + 0.484779E-01 0.505628E-01 0.473650E-01 0.417669E-01 0.349694E-01 0.280936E-01 + 0.219046E-01 0.167905E-01 0.128584E-01 0.100298E-01 0.812613E-02 0.696020E-02 + 0.640444E-02 0.640444E-02 0.696020E-02 0.812613E-02 0.100298E-01 0.128584E-01 + 0.167905E-01 0.219046E-01 0.280936E-01 0.349694E-01 0.417669E-01 0.473650E-01 + 0.505628E-01 0.505628E-01 0.524971E-01 0.474025E-01 0.402865E-01 0.325323E-01 + 0.252300E-01 0.190156E-01 0.141357E-01 0.105678E-01 0.812613E-02 0.657011E-02 + 0.570466E-02 0.542572E-02 0.570466E-02 0.657011E-02 0.812613E-02 0.105678E-01 + 0.141357E-01 0.190156E-01 0.252300E-01 0.325323E-01 0.402865E-01 0.474025E-01 + 0.524971E-01 0.543580E-01 0.524971E-01 0.544700E-01 0.473650E-01 0.388056E-01 + 0.302813E-01 0.227862E-01 0.167602E-01 0.122425E-01 0.905956E-02 0.696020E-02 + 0.570466E-02 0.511980E-02 0.511980E-02 0.570466E-02 0.696020E-02 0.905956E-02 + 0.122425E-01 0.167602E-01 0.227862E-01 0.302813E-01 0.388056E-01 0.473650E-01 + 0.544700E-01 0.585403E-01 0.585403E-01 0.544700E-01 0.560643E-01 0.470527E-01 + 0.373044E-01 0.283097E-01 0.208803E-01 0.151913E-01 0.110600E-01 0.821308E-02 + 0.640444E-02 0.542572E-02 0.511980E-02 0.542572E-02 0.640444E-02 0.821308E-02 + 0.110600E-01 0.151913E-01 0.208803E-01 0.283097E-01 0.373044E-01 0.470527E-01 + 0.560643E-01 0.625105E-01 0.648593E-01 0.625105E-01 0.560643E-01 0.562141E-01 + 0.461141E-01 0.358437E-01 0.268002E-01 0.196306E-01 0.143047E-01 0.105047E-01 + 0.794138E-02 0.640444E-02 0.570466E-02 0.570466E-02 0.640444E-02 0.794138E-02 + 0.105047E-01 0.143047E-01 0.196306E-01 0.268002E-01 0.358437E-01 0.461141E-01 + 0.562141E-01 0.643573E-01 0.689152E-01 0.689152E-01 0.643573E-01 0.562141E-01 + 0.541857E-01 0.445636E-01 0.346386E-01 0.258890E-01 0.190386E-01 0.140249E-01 + 0.105047E-01 0.821308E-02 0.696020E-02 0.657011E-02 0.696020E-02 0.821308E-02 + 0.105047E-01 0.140249E-01 0.190386E-01 0.258890E-01 0.346386E-01 0.445636E-01 + 0.541857E-01 0.619819E-01 0.669676E-01 0.686757E-01 0.669676E-01 0.619819E-01 + 0.541857E-01 0.507602E-01 0.430297E-01 0.339519E-01 0.255918E-01 0.190386E-01 + 0.143047E-01 0.110600E-01 0.905956E-02 0.812613E-02 0.812613E-02 0.905956E-02 + 0.110600E-01 0.143047E-01 0.190386E-01 0.255918E-01 0.339519E-01 0.430297E-01 + 0.507602E-01 0.556051E-01 0.577546E-01 0.584098E-01 0.584098E-01 0.577546E-01 + 0.556051E-01 0.507602E-01 0.481035E-01 0.423826E-01 0.339519E-01 0.258890E-01 + 0.196306E-01 0.151913E-01 0.122425E-01 0.105678E-01 0.100298E-01 0.105678E-01 + 0.122425E-01 0.151913E-01 0.196306E-01 0.258890E-01 0.339519E-01 0.423826E-01 + 0.481035E-01 0.487304E-01 0.453630E-01 0.415988E-01 0.401068E-01 0.415988E-01 + 0.453630E-01 0.487304E-01 0.481035E-01 0.481035E-01 0.430297E-01 0.346386E-01 + 0.268002E-01 0.208803E-01 0.167602E-01 0.141357E-01 0.128584E-01 0.128584E-01 + 0.141357E-01 0.167602E-01 0.208803E-01 0.268002E-01 0.346386E-01 0.430297E-01 + 0.481035E-01 0.457870E-01 0.367736E-01 0.269968E-01 0.215594E-01 0.215594E-01 + 0.269968E-01 0.367736E-01 0.457870E-01 0.481035E-01 0.507602E-01 0.445636E-01 + 0.358437E-01 0.283097E-01 0.227862E-01 0.190156E-01 0.167905E-01 0.160537E-01 + 0.167905E-01 0.190156E-01 0.227862E-01 0.283097E-01 0.358437E-01 0.445636E-01 + 0.507602E-01 0.487304E-01 0.367736E-01 0.214527E-01 0.112502E-01 0.821111E-02 + 0.112502E-01 0.214527E-01 0.367736E-01 0.487304E-01 0.507602E-01 0.541857E-01 + 0.461141E-01 0.373044E-01 0.302813E-01 0.252300E-01 0.219046E-01 0.202389E-01 + 0.202389E-01 0.219046E-01 0.252300E-01 0.302813E-01 0.373044E-01 0.461141E-01 + 0.541857E-01 0.556051E-01 0.453630E-01 0.269968E-01 0.112502E-01 0.420568E-02 + 0.420568E-02 0.112502E-01 0.269968E-01 0.453630E-01 0.556051E-01 0.541857E-01 + 0.562141E-01 0.470527E-01 0.388056E-01 0.325323E-01 0.280936E-01 0.254039E-01 + 0.245013E-01 0.254039E-01 0.280936E-01 0.325323E-01 0.388056E-01 0.470527E-01 + 0.562141E-01 0.619819E-01 0.577546E-01 0.415988E-01 0.215594E-01 0.821111E-02 + 0.420568E-02 0.821111E-02 0.215594E-01 0.415988E-01 0.577546E-01 0.619819E-01 + 0.562141E-01 0.560643E-01 0.473650E-01 0.402865E-01 0.349694E-01 0.313421E-01 + 0.294949E-01 0.294949E-01 0.313421E-01 0.349694E-01 0.402865E-01 0.473650E-01 + 0.560643E-01 0.643573E-01 0.669676E-01 0.584098E-01 0.401068E-01 0.215594E-01 + 0.112502E-01 0.112502E-01 0.215594E-01 0.401068E-01 0.584098E-01 0.669676E-01 + 0.643573E-01 0.560643E-01 0.544700E-01 0.474025E-01 0.417669E-01 0.375334E-01 + 0.348716E-01 0.339662E-01 0.348716E-01 0.375334E-01 0.417669E-01 0.474025E-01 + 0.544700E-01 0.625105E-01 0.689152E-01 0.686757E-01 0.584098E-01 0.415988E-01 + 0.269968E-01 0.214527E-01 0.269968E-01 0.415988E-01 0.584098E-01 0.686757E-01 + 0.689152E-01 0.625105E-01 0.544700E-01 0.524971E-01 0.473650E-01 0.431159E-01 + 0.399611E-01 0.382749E-01 0.382749E-01 0.399611E-01 0.431159E-01 0.473650E-01 + 0.524971E-01 0.585403E-01 0.648593E-01 0.689152E-01 0.669676E-01 0.577546E-01 + 0.453630E-01 0.367736E-01 0.367736E-01 0.453630E-01 0.577546E-01 0.669676E-01 + 0.689152E-01 0.648593E-01 0.585403E-01 0.524971E-01 0.505628E-01 0.470527E-01 + 0.439394E-01 0.417281E-01 0.409266E-01 0.417281E-01 0.439394E-01 0.470527E-01 + 0.505628E-01 0.543580E-01 0.585403E-01 0.625105E-01 0.643573E-01 0.619819E-01 + 0.556051E-01 0.487304E-01 0.457870E-01 0.487304E-01 0.556051E-01 0.619819E-01 + 0.643573E-01 0.625105E-01 0.585403E-01 0.543580E-01 0.505628E-01 0.484779E-01 + 0.461141E-01 0.438602E-01 0.424531E-01 0.424531E-01 0.438602E-01 0.461141E-01 + 0.484779E-01 0.505628E-01 0.524971E-01 0.544700E-01 0.560643E-01 0.562141E-01 + 0.541857E-01 0.507602E-01 0.481035E-01 0.481035E-01 0.507602E-01 0.541857E-01 + 0.562141E-01 0.560643E-01 0.544700E-01 0.524971E-01 0.505628E-01 0.484779E-01 + 0.577130E-01 0.541857E-01 0.506982E-01 0.492335E-01 0.506982E-01 0.541857E-01 + 0.577130E-01 0.597979E-01 0.604143E-01 0.604501E-01 0.604143E-01 0.597979E-01 + 0.577130E-01 0.541857E-01 0.506982E-01 0.492335E-01 0.506982E-01 0.541857E-01 + 0.577130E-01 0.597979E-01 0.604143E-01 0.604501E-01 0.604143E-01 0.597979E-01 + 0.577130E-01 0.541857E-01 0.507602E-01 0.481035E-01 0.481035E-01 0.507602E-01 + 0.541857E-01 0.562141E-01 0.560643E-01 0.544700E-01 0.524971E-01 0.505628E-01 + 0.484779E-01 0.461141E-01 0.438602E-01 0.424531E-01 0.424531E-01 0.438602E-01 + 0.461141E-01 0.484779E-01 0.505628E-01 0.524971E-01 0.544700E-01 0.560643E-01 + 0.562141E-01 0.541857E-01 0.506982E-01 0.481035E-01 0.468849E-01 0.481035E-01 + 0.506982E-01 0.524590E-01 0.519648E-01 0.494937E-01 0.462127E-01 0.429734E-01 + 0.399963E-01 0.373044E-01 0.350891E-01 0.336423E-01 0.331452E-01 0.336423E-01 + 0.350891E-01 0.373044E-01 0.399963E-01 0.429734E-01 0.462127E-01 0.494937E-01 + 0.519648E-01 0.524590E-01 0.506982E-01 0.492335E-01 0.481035E-01 0.481035E-01 + 0.492335E-01 0.499921E-01 0.488647E-01 0.456893E-01 0.414815E-01 0.372839E-01 + 0.335279E-01 0.302813E-01 0.276655E-01 0.258818E-01 0.250115E-01 0.250115E-01 + 0.258818E-01 0.276655E-01 0.302813E-01 0.335279E-01 0.372839E-01 0.414815E-01 + 0.456893E-01 0.488647E-01 0.499921E-01 0.492335E-01 0.506982E-01 0.507602E-01 + 0.506982E-01 0.499921E-01 0.476986E-01 0.435886E-01 0.384625E-01 0.333894E-01 + 0.289485E-01 0.252300E-01 0.222441E-01 0.200995E-01 0.188635E-01 0.184714E-01 + 0.188635E-01 0.200995E-01 0.222441E-01 0.252300E-01 0.289485E-01 0.333894E-01 + 0.384625E-01 0.435886E-01 0.476986E-01 0.499921E-01 0.506982E-01 0.541857E-01 + 0.541857E-01 0.524590E-01 0.488647E-01 0.435886E-01 0.374214E-01 0.313897E-01 + 0.261640E-01 0.219046E-01 0.185511E-01 0.160855E-01 0.145193E-01 0.137863E-01 + 0.137863E-01 0.145193E-01 0.160855E-01 0.185511E-01 0.219046E-01 0.261640E-01 + 0.313897E-01 0.374214E-01 0.435886E-01 0.488647E-01 0.524590E-01 0.541857E-01 + 0.577130E-01 0.562141E-01 0.519648E-01 0.456893E-01 0.384625E-01 0.313897E-01 + 0.252261E-01 0.202389E-01 0.163824E-01 0.135462E-01 0.116478E-01 0.105905E-01 + 0.102572E-01 0.105905E-01 0.116478E-01 0.135462E-01 0.163824E-01 0.202389E-01 + 0.252261E-01 0.313897E-01 0.384625E-01 0.456893E-01 0.519648E-01 0.562141E-01 + 0.577130E-01 0.597979E-01 0.560643E-01 0.494937E-01 0.414815E-01 0.333894E-01 + 0.261640E-01 0.202389E-01 0.156674E-01 0.123229E-01 0.100355E-01 0.863840E-02 + 0.798544E-02 0.798544E-02 0.863840E-02 0.100355E-01 0.123229E-01 0.156674E-01 + 0.202389E-01 0.261640E-01 0.333894E-01 0.414815E-01 0.494937E-01 0.560643E-01 + 0.597979E-01 0.597979E-01 0.604143E-01 0.544700E-01 0.462127E-01 0.372839E-01 + 0.289485E-01 0.219046E-01 0.163824E-01 0.123229E-01 0.952277E-02 0.773621E-02 + 0.675236E-02 0.643891E-02 0.675236E-02 0.773621E-02 0.952277E-02 0.123229E-01 + 0.163824E-01 0.219046E-01 0.289485E-01 0.372839E-01 0.462127E-01 0.544700E-01 + 0.604143E-01 0.625917E-01 0.604143E-01 0.604501E-01 0.524971E-01 0.429734E-01 + 0.335279E-01 0.252300E-01 0.185511E-01 0.135462E-01 0.100355E-01 0.773621E-02 + 0.636908E-02 0.573385E-02 0.573385E-02 0.636908E-02 0.773621E-02 0.100355E-01 + 0.135462E-01 0.185511E-01 0.252300E-01 0.335279E-01 0.429734E-01 0.524971E-01 + 0.604501E-01 0.650298E-01 0.650298E-01 0.604501E-01 0.604143E-01 0.505628E-01 + 0.399963E-01 0.302813E-01 0.222441E-01 0.160855E-01 0.116478E-01 0.863840E-02 + 0.675236E-02 0.573385E-02 0.541396E-02 0.573385E-02 0.675236E-02 0.863840E-02 + 0.116478E-01 0.160855E-01 0.222441E-01 0.302813E-01 0.399963E-01 0.505628E-01 + 0.604143E-01 0.675276E-01 0.701348E-01 0.675276E-01 0.604143E-01 0.597979E-01 + 0.484779E-01 0.373044E-01 0.276655E-01 0.200995E-01 0.145193E-01 0.105905E-01 + 0.798544E-02 0.643891E-02 0.573385E-02 0.573385E-02 0.643891E-02 0.798544E-02 + 0.105905E-01 0.145193E-01 0.200995E-01 0.276655E-01 0.373044E-01 0.484779E-01 + 0.597979E-01 0.692075E-01 0.745914E-01 0.745914E-01 0.692075E-01 0.597979E-01 + 0.577130E-01 0.461141E-01 0.350891E-01 0.258818E-01 0.188635E-01 0.137863E-01 + 0.102572E-01 0.798544E-02 0.675236E-02 0.636908E-02 0.675236E-02 0.798544E-02 + 0.102572E-01 0.137863E-01 0.188635E-01 0.258818E-01 0.350891E-01 0.461141E-01 + 0.577130E-01 0.680392E-01 0.751976E-01 0.777628E-01 0.751976E-01 0.680392E-01 + 0.577130E-01 0.541857E-01 0.438602E-01 0.336423E-01 0.250115E-01 0.184714E-01 + 0.137863E-01 0.105905E-01 0.863840E-02 0.773621E-02 0.773621E-02 0.863840E-02 + 0.105905E-01 0.137863E-01 0.184714E-01 0.250115E-01 0.336423E-01 0.438602E-01 + 0.541857E-01 0.628947E-01 0.689455E-01 0.720105E-01 0.720105E-01 0.689455E-01 + 0.628947E-01 0.541857E-01 0.506982E-01 0.424531E-01 0.331452E-01 0.250115E-01 + 0.188635E-01 0.145193E-01 0.116478E-01 0.100355E-01 0.952277E-02 0.100355E-01 + 0.116478E-01 0.145193E-01 0.188635E-01 0.250115E-01 0.331452E-01 0.424531E-01 + 0.506982E-01 0.556051E-01 0.570012E-01 0.567074E-01 0.564294E-01 0.567074E-01 + 0.570012E-01 0.556051E-01 0.506982E-01 0.492335E-01 0.424531E-01 0.336423E-01 + 0.258818E-01 0.200995E-01 0.160855E-01 0.135462E-01 0.123229E-01 0.123229E-01 + 0.135462E-01 0.160855E-01 0.200995E-01 0.258818E-01 0.336423E-01 0.424531E-01 + 0.492335E-01 0.502944E-01 0.453630E-01 0.386373E-01 0.345053E-01 0.345053E-01 + 0.386373E-01 0.453630E-01 0.502944E-01 0.492335E-01 0.506982E-01 0.438602E-01 + 0.350891E-01 0.276655E-01 0.222441E-01 0.185511E-01 0.163824E-01 0.156674E-01 + 0.163824E-01 0.185511E-01 0.222441E-01 0.276655E-01 0.350891E-01 0.438602E-01 + 0.506982E-01 0.502944E-01 0.405936E-01 0.269968E-01 0.173212E-01 0.142537E-01 + 0.173212E-01 0.269968E-01 0.405936E-01 0.502944E-01 0.506982E-01 0.541857E-01 + 0.461141E-01 0.373044E-01 0.302813E-01 0.252300E-01 0.219046E-01 0.202389E-01 + 0.202389E-01 0.219046E-01 0.252300E-01 0.302813E-01 0.373044E-01 0.461141E-01 + 0.541857E-01 0.556051E-01 0.453630E-01 0.269968E-01 0.112502E-01 0.420568E-02 + 0.420568E-02 0.112502E-01 0.269968E-01 0.453630E-01 0.556051E-01 0.541857E-01 + 0.577130E-01 0.484779E-01 0.399963E-01 0.335279E-01 0.289485E-01 0.261640E-01 + 0.252261E-01 0.261640E-01 0.289485E-01 0.335279E-01 0.399963E-01 0.484779E-01 + 0.577130E-01 0.628947E-01 0.570012E-01 0.386373E-01 0.173212E-01 0.420568E-02 + 0.628509E-03 0.420568E-02 0.173212E-01 0.386373E-01 0.570012E-01 0.628947E-01 + 0.577130E-01 0.597979E-01 0.505628E-01 0.429734E-01 0.372839E-01 0.333894E-01 + 0.313897E-01 0.313897E-01 0.333894E-01 0.372839E-01 0.429734E-01 0.505628E-01 + 0.597979E-01 0.680392E-01 0.689455E-01 0.567074E-01 0.345053E-01 0.142537E-01 + 0.420568E-02 0.420568E-02 0.142537E-01 0.345053E-01 0.567074E-01 0.689455E-01 + 0.680392E-01 0.597979E-01 0.604143E-01 0.524971E-01 0.462127E-01 0.414815E-01 + 0.384625E-01 0.374214E-01 0.384625E-01 0.414815E-01 0.462127E-01 0.524971E-01 + 0.604143E-01 0.692075E-01 0.751976E-01 0.720105E-01 0.564294E-01 0.345053E-01 + 0.173212E-01 0.112502E-01 0.173212E-01 0.345053E-01 0.564294E-01 0.720105E-01 + 0.751976E-01 0.692075E-01 0.604143E-01 0.604501E-01 0.544700E-01 0.494937E-01 + 0.456893E-01 0.435886E-01 0.435886E-01 0.456893E-01 0.494937E-01 0.544700E-01 + 0.604501E-01 0.675276E-01 0.745914E-01 0.777628E-01 0.720105E-01 0.567074E-01 + 0.386373E-01 0.269968E-01 0.269968E-01 0.386373E-01 0.567074E-01 0.720105E-01 + 0.777628E-01 0.745914E-01 0.675276E-01 0.604501E-01 0.604143E-01 0.560643E-01 + 0.519648E-01 0.488647E-01 0.476986E-01 0.488647E-01 0.519648E-01 0.560643E-01 + 0.604143E-01 0.650298E-01 0.701348E-01 0.745914E-01 0.751976E-01 0.689455E-01 + 0.570012E-01 0.453630E-01 0.405936E-01 0.453630E-01 0.570012E-01 0.689455E-01 + 0.751976E-01 0.745914E-01 0.701348E-01 0.650298E-01 0.604143E-01 0.597979E-01 + 0.562141E-01 0.524590E-01 0.499921E-01 0.499921E-01 0.524590E-01 0.562141E-01 + 0.597979E-01 0.625917E-01 0.650298E-01 0.675276E-01 0.692075E-01 0.680392E-01 + 0.628947E-01 0.556051E-01 0.502944E-01 0.502944E-01 0.556051E-01 0.628947E-01 + 0.680392E-01 0.692075E-01 0.675276E-01 0.650298E-01 0.625917E-01 0.597979E-01 + 0.577130E-01 0.541857E-01 0.506982E-01 0.492335E-01 0.506982E-01 0.541857E-01 + 0.577130E-01 0.597979E-01 0.604143E-01 0.604501E-01 0.604143E-01 0.597979E-01 + 0.577130E-01 0.541857E-01 0.506982E-01 0.492335E-01 0.506982E-01 0.541857E-01 + 0.577130E-01 0.597979E-01 0.604143E-01 0.604501E-01 0.604143E-01 0.597979E-01 + 0.577130E-01 0.628947E-01 0.556051E-01 0.502944E-01 0.502944E-01 0.556051E-01 + 0.628947E-01 0.680392E-01 0.692075E-01 0.675276E-01 0.650298E-01 0.625917E-01 + 0.597979E-01 0.562141E-01 0.524590E-01 0.499921E-01 0.499921E-01 0.524590E-01 + 0.562141E-01 0.597979E-01 0.625917E-01 0.650298E-01 0.675276E-01 0.692075E-01 + 0.680392E-01 0.628947E-01 0.556051E-01 0.487304E-01 0.457870E-01 0.487304E-01 + 0.556051E-01 0.619819E-01 0.643573E-01 0.625105E-01 0.585403E-01 0.543580E-01 + 0.505628E-01 0.470527E-01 0.439394E-01 0.417281E-01 0.409266E-01 0.417281E-01 + 0.439394E-01 0.470527E-01 0.505628E-01 0.543580E-01 0.585403E-01 0.625105E-01 + 0.643573E-01 0.619819E-01 0.556051E-01 0.502944E-01 0.457870E-01 0.457870E-01 + 0.502944E-01 0.560474E-01 0.590302E-01 0.576056E-01 0.531274E-01 0.478311E-01 + 0.429734E-01 0.388056E-01 0.353868E-01 0.329495E-01 0.317043E-01 0.317043E-01 + 0.329495E-01 0.353868E-01 0.388056E-01 0.429734E-01 0.478311E-01 0.531274E-01 + 0.576056E-01 0.590302E-01 0.560474E-01 0.502944E-01 0.502944E-01 0.487304E-01 + 0.502944E-01 0.535709E-01 0.554502E-01 0.537639E-01 0.489277E-01 0.429150E-01 + 0.372839E-01 0.325323E-01 0.286912E-01 0.258641E-01 0.241831E-01 0.236381E-01 + 0.241831E-01 0.258641E-01 0.286912E-01 0.325323E-01 0.372839E-01 0.429150E-01 + 0.489277E-01 0.537639E-01 0.554502E-01 0.535709E-01 0.502944E-01 0.556051E-01 + 0.556051E-01 0.560474E-01 0.554502E-01 0.522905E-01 0.465705E-01 0.397629E-01 + 0.333894E-01 0.280936E-01 0.238879E-01 0.207321E-01 0.186759E-01 0.176960E-01 + 0.176960E-01 0.186759E-01 0.207321E-01 0.238879E-01 0.280936E-01 0.333894E-01 + 0.397629E-01 0.465705E-01 0.522905E-01 0.554502E-01 0.560474E-01 0.556051E-01 + 0.628947E-01 0.619819E-01 0.590302E-01 0.537639E-01 0.465705E-01 0.386708E-01 + 0.313897E-01 0.254039E-01 0.207435E-01 0.172544E-01 0.148660E-01 0.135197E-01 + 0.130949E-01 0.135197E-01 0.148660E-01 0.172544E-01 0.207435E-01 0.254039E-01 + 0.313897E-01 0.386708E-01 0.465705E-01 0.537639E-01 0.590302E-01 0.619819E-01 + 0.628947E-01 0.680392E-01 0.643573E-01 0.576056E-01 0.489277E-01 0.397629E-01 + 0.313897E-01 0.245013E-01 0.191829E-01 0.152385E-01 0.124825E-01 0.107816E-01 + 0.999156E-02 0.999156E-02 0.107816E-01 0.124825E-01 0.152385E-01 0.191829E-01 + 0.245013E-01 0.313897E-01 0.397629E-01 0.489277E-01 0.576056E-01 0.643573E-01 + 0.680392E-01 0.680392E-01 0.692075E-01 0.625105E-01 0.531274E-01 0.429150E-01 + 0.333894E-01 0.254039E-01 0.191829E-01 0.145820E-01 0.113527E-01 0.926528E-02 + 0.812001E-02 0.775932E-02 0.812001E-02 0.926528E-02 0.113527E-01 0.145820E-01 + 0.191829E-01 0.254039E-01 0.333894E-01 0.429150E-01 0.531274E-01 0.625105E-01 + 0.692075E-01 0.716471E-01 0.692075E-01 0.675276E-01 0.585403E-01 0.478311E-01 + 0.372839E-01 0.280936E-01 0.207435E-01 0.152385E-01 0.113527E-01 0.878825E-02 + 0.726231E-02 0.655796E-02 0.655796E-02 0.726231E-02 0.878825E-02 0.113527E-01 + 0.152385E-01 0.207435E-01 0.280936E-01 0.372839E-01 0.478311E-01 0.585403E-01 + 0.675276E-01 0.727180E-01 0.727180E-01 0.675276E-01 0.650298E-01 0.543580E-01 + 0.429734E-01 0.325323E-01 0.238879E-01 0.172544E-01 0.124825E-01 0.926528E-02 + 0.726231E-02 0.618454E-02 0.584623E-02 0.618454E-02 0.726231E-02 0.926528E-02 + 0.124825E-01 0.172544E-01 0.238879E-01 0.325323E-01 0.429734E-01 0.543580E-01 + 0.650298E-01 0.727802E-01 0.756313E-01 0.727802E-01 0.650298E-01 0.625917E-01 + 0.505628E-01 0.388056E-01 0.286912E-01 0.207321E-01 0.148660E-01 0.107816E-01 + 0.812001E-02 0.655796E-02 0.584623E-02 0.584623E-02 0.655796E-02 0.812001E-02 + 0.107816E-01 0.148660E-01 0.207321E-01 0.286912E-01 0.388056E-01 0.505628E-01 + 0.625917E-01 0.727180E-01 0.785700E-01 0.785700E-01 0.727180E-01 0.625917E-01 + 0.597979E-01 0.470527E-01 0.353868E-01 0.258641E-01 0.186759E-01 0.135197E-01 + 0.999156E-02 0.775932E-02 0.655796E-02 0.618454E-02 0.655796E-02 0.775932E-02 + 0.999156E-02 0.135197E-01 0.186759E-01 0.258641E-01 0.353868E-01 0.470527E-01 + 0.597979E-01 0.716471E-01 0.801608E-01 0.832715E-01 0.801608E-01 0.716471E-01 + 0.597979E-01 0.562141E-01 0.439394E-01 0.329495E-01 0.241831E-01 0.176960E-01 + 0.130949E-01 0.999156E-02 0.812001E-02 0.726231E-02 0.726231E-02 0.812001E-02 + 0.999156E-02 0.130949E-01 0.176960E-01 0.241831E-01 0.329495E-01 0.439394E-01 + 0.562141E-01 0.680392E-01 0.774199E-01 0.826277E-01 0.826277E-01 0.774199E-01 + 0.680392E-01 0.562141E-01 0.524590E-01 0.417281E-01 0.317043E-01 0.236381E-01 + 0.176960E-01 0.135197E-01 0.107816E-01 0.926528E-02 0.878825E-02 0.926528E-02 + 0.107816E-01 0.135197E-01 0.176960E-01 0.236381E-01 0.317043E-01 0.417281E-01 + 0.524590E-01 0.619819E-01 0.689455E-01 0.730466E-01 0.743983E-01 0.730466E-01 + 0.689455E-01 0.619819E-01 0.524590E-01 0.499921E-01 0.409266E-01 0.317043E-01 + 0.241831E-01 0.186759E-01 0.148660E-01 0.124825E-01 0.113527E-01 0.113527E-01 + 0.124825E-01 0.148660E-01 0.186759E-01 0.241831E-01 0.317043E-01 0.409266E-01 + 0.499921E-01 0.560474E-01 0.577546E-01 0.567074E-01 0.555047E-01 0.555047E-01 + 0.567074E-01 0.577546E-01 0.560474E-01 0.499921E-01 0.499921E-01 0.417281E-01 + 0.329495E-01 0.258641E-01 0.207321E-01 0.172544E-01 0.152385E-01 0.145820E-01 + 0.152385E-01 0.172544E-01 0.207321E-01 0.258641E-01 0.329495E-01 0.417281E-01 + 0.499921E-01 0.535709E-01 0.498680E-01 0.415988E-01 0.345053E-01 0.319563E-01 + 0.345053E-01 0.415988E-01 0.498680E-01 0.535709E-01 0.499921E-01 0.524590E-01 + 0.439394E-01 0.353868E-01 0.286912E-01 0.238879E-01 0.207435E-01 0.191829E-01 + 0.191829E-01 0.207435E-01 0.238879E-01 0.286912E-01 0.353868E-01 0.439394E-01 + 0.524590E-01 0.560474E-01 0.498680E-01 0.355758E-01 0.215594E-01 0.142537E-01 + 0.142537E-01 0.215594E-01 0.355758E-01 0.498680E-01 0.560474E-01 0.524590E-01 + 0.562141E-01 0.470527E-01 0.388056E-01 0.325323E-01 0.280936E-01 0.254039E-01 + 0.245013E-01 0.254039E-01 0.280936E-01 0.325323E-01 0.388056E-01 0.470527E-01 + 0.562141E-01 0.619819E-01 0.577546E-01 0.415988E-01 0.215594E-01 0.821111E-02 + 0.420568E-02 0.821111E-02 0.215594E-01 0.415988E-01 0.577546E-01 0.619819E-01 + 0.562141E-01 0.597979E-01 0.505628E-01 0.429734E-01 0.372839E-01 0.333894E-01 + 0.313897E-01 0.313897E-01 0.333894E-01 0.372839E-01 0.429734E-01 0.505628E-01 + 0.597979E-01 0.680392E-01 0.689455E-01 0.567074E-01 0.345053E-01 0.142537E-01 + 0.420568E-02 0.420568E-02 0.142537E-01 0.345053E-01 0.567074E-01 0.689455E-01 + 0.680392E-01 0.597979E-01 0.625917E-01 0.543580E-01 0.478311E-01 0.429150E-01 + 0.397629E-01 0.386708E-01 0.397629E-01 0.429150E-01 0.478311E-01 0.543580E-01 + 0.625917E-01 0.716471E-01 0.774199E-01 0.730466E-01 0.555047E-01 0.319563E-01 + 0.142537E-01 0.821111E-02 0.142537E-01 0.319563E-01 0.555047E-01 0.730466E-01 + 0.774199E-01 0.716471E-01 0.625917E-01 0.650298E-01 0.585403E-01 0.531274E-01 + 0.489277E-01 0.465705E-01 0.465705E-01 0.489277E-01 0.531274E-01 0.585403E-01 + 0.650298E-01 0.727180E-01 0.801608E-01 0.826277E-01 0.743983E-01 0.555047E-01 + 0.345053E-01 0.215594E-01 0.215594E-01 0.345053E-01 0.555047E-01 0.743983E-01 + 0.826277E-01 0.801608E-01 0.727180E-01 0.650298E-01 0.675276E-01 0.625105E-01 + 0.576056E-01 0.537639E-01 0.522905E-01 0.537639E-01 0.576056E-01 0.625105E-01 + 0.675276E-01 0.727802E-01 0.785700E-01 0.832715E-01 0.826277E-01 0.730466E-01 + 0.567074E-01 0.415988E-01 0.355758E-01 0.415988E-01 0.567074E-01 0.730466E-01 + 0.826277E-01 0.832715E-01 0.785700E-01 0.727802E-01 0.675276E-01 0.692075E-01 + 0.643573E-01 0.590302E-01 0.554502E-01 0.554502E-01 0.590302E-01 0.643573E-01 + 0.692075E-01 0.727180E-01 0.756313E-01 0.785700E-01 0.801608E-01 0.774199E-01 + 0.689455E-01 0.577546E-01 0.498680E-01 0.498680E-01 0.577546E-01 0.689455E-01 + 0.774199E-01 0.801608E-01 0.785700E-01 0.756313E-01 0.727180E-01 0.692075E-01 + 0.680392E-01 0.619819E-01 0.560474E-01 0.535709E-01 0.560474E-01 0.619819E-01 + 0.680392E-01 0.716471E-01 0.727180E-01 0.727802E-01 0.727180E-01 0.716471E-01 + 0.680392E-01 0.619819E-01 0.560474E-01 0.535709E-01 0.560474E-01 0.619819E-01 + 0.680392E-01 0.716471E-01 0.727180E-01 0.727802E-01 0.727180E-01 0.716471E-01 + 0.680392E-01 0.628947E-01 0.556051E-01 0.502944E-01 0.502944E-01 0.556051E-01 + 0.628947E-01 0.680392E-01 0.692075E-01 0.675276E-01 0.650298E-01 0.625917E-01 + 0.597979E-01 0.562141E-01 0.524590E-01 0.499921E-01 0.499921E-01 0.524590E-01 + 0.562141E-01 0.597979E-01 0.625917E-01 0.650298E-01 0.675276E-01 0.692075E-01 + 0.680392E-01 0.628947E-01 0.570012E-01 0.453630E-01 0.405936E-01 0.453630E-01 + 0.570012E-01 0.689455E-01 0.751976E-01 0.745914E-01 0.701348E-01 0.650298E-01 + 0.604143E-01 0.560643E-01 0.519648E-01 0.488647E-01 0.476986E-01 0.488647E-01 + 0.519648E-01 0.560643E-01 0.604143E-01 0.650298E-01 0.701348E-01 0.745914E-01 + 0.751976E-01 0.689455E-01 0.570012E-01 0.453630E-01 0.367736E-01 0.367736E-01 + 0.453630E-01 0.577546E-01 0.669676E-01 0.689152E-01 0.648593E-01 0.585403E-01 + 0.524971E-01 0.473650E-01 0.431159E-01 0.399611E-01 0.382749E-01 0.382749E-01 + 0.399611E-01 0.431159E-01 0.473650E-01 0.524971E-01 0.585403E-01 0.648593E-01 + 0.689152E-01 0.669676E-01 0.577546E-01 0.453630E-01 0.405936E-01 0.367736E-01 + 0.405936E-01 0.498680E-01 0.589780E-01 0.625675E-01 0.596400E-01 0.531274E-01 + 0.462127E-01 0.402865E-01 0.355244E-01 0.319699E-01 0.297890E-01 0.290632E-01 + 0.297890E-01 0.319699E-01 0.355244E-01 0.402865E-01 0.462127E-01 0.531274E-01 + 0.596400E-01 0.625675E-01 0.589780E-01 0.498680E-01 0.405936E-01 0.453630E-01 + 0.453630E-01 0.498680E-01 0.556625E-01 0.582676E-01 0.555070E-01 0.489277E-01 + 0.414815E-01 0.349694E-01 0.297806E-01 0.258622E-01 0.232513E-01 0.219742E-01 + 0.219742E-01 0.232513E-01 0.258622E-01 0.297806E-01 0.349694E-01 0.414815E-01 + 0.489277E-01 0.555070E-01 0.582676E-01 0.556625E-01 0.498680E-01 0.453630E-01 + 0.570012E-01 0.577546E-01 0.589780E-01 0.582676E-01 0.539125E-01 0.465705E-01 + 0.384625E-01 0.313421E-01 0.257241E-01 0.214930E-01 0.185459E-01 0.168476E-01 + 0.163037E-01 0.168476E-01 0.185459E-01 0.214930E-01 0.257241E-01 0.313421E-01 + 0.384625E-01 0.465705E-01 0.539125E-01 0.582676E-01 0.589780E-01 0.577546E-01 + 0.570012E-01 0.689455E-01 0.669676E-01 0.625675E-01 0.555070E-01 0.465705E-01 + 0.374214E-01 0.294949E-01 0.232916E-01 0.186622E-01 0.153787E-01 0.133171E-01 + 0.123505E-01 0.123505E-01 0.133171E-01 0.153787E-01 0.186622E-01 0.232916E-01 + 0.294949E-01 0.374214E-01 0.465705E-01 0.555070E-01 0.625675E-01 0.669676E-01 + 0.689455E-01 0.689455E-01 0.751976E-01 0.689152E-01 0.596400E-01 0.489277E-01 + 0.384625E-01 0.294949E-01 0.224840E-01 0.172809E-01 0.135746E-01 0.111368E-01 + 0.979082E-02 0.936834E-02 0.979082E-02 0.111368E-01 0.135746E-01 0.172809E-01 + 0.224840E-01 0.294949E-01 0.384625E-01 0.489277E-01 0.596400E-01 0.689152E-01 + 0.751976E-01 0.774199E-01 0.751976E-01 0.745914E-01 0.648593E-01 0.531274E-01 + 0.414815E-01 0.313421E-01 0.232916E-01 0.172809E-01 0.129964E-01 0.101195E-01 + 0.839115E-02 0.759607E-02 0.759607E-02 0.839115E-02 0.101195E-01 0.129964E-01 + 0.172809E-01 0.232916E-01 0.313421E-01 0.414815E-01 0.531274E-01 0.648593E-01 + 0.745914E-01 0.801608E-01 0.801608E-01 0.745914E-01 0.701348E-01 0.585403E-01 + 0.462127E-01 0.349694E-01 0.257241E-01 0.186622E-01 0.135746E-01 0.101195E-01 + 0.795383E-02 0.678802E-02 0.642332E-02 0.678802E-02 0.795383E-02 0.101195E-01 + 0.135746E-01 0.186622E-01 0.257241E-01 0.349694E-01 0.462127E-01 0.585403E-01 + 0.701348E-01 0.785700E-01 0.816754E-01 0.785700E-01 0.701348E-01 0.650298E-01 + 0.524971E-01 0.402865E-01 0.297806E-01 0.214930E-01 0.153787E-01 0.111368E-01 + 0.839115E-02 0.678802E-02 0.605840E-02 0.605840E-02 0.678802E-02 0.839115E-02 + 0.111368E-01 0.153787E-01 0.214930E-01 0.297806E-01 0.402865E-01 0.524971E-01 + 0.650298E-01 0.756313E-01 0.817829E-01 0.817829E-01 0.756313E-01 0.650298E-01 + 0.604143E-01 0.473650E-01 0.355244E-01 0.258622E-01 0.185459E-01 0.133171E-01 + 0.979082E-02 0.759607E-02 0.642332E-02 0.605840E-02 0.642332E-02 0.759607E-02 + 0.979082E-02 0.133171E-01 0.185459E-01 0.258622E-01 0.355244E-01 0.473650E-01 + 0.604143E-01 0.727180E-01 0.816754E-01 0.849732E-01 0.816754E-01 0.727180E-01 + 0.604143E-01 0.560643E-01 0.431159E-01 0.319699E-01 0.232513E-01 0.168476E-01 + 0.123505E-01 0.936834E-02 0.759607E-02 0.678802E-02 0.678802E-02 0.759607E-02 + 0.936834E-02 0.123505E-01 0.168476E-01 0.232513E-01 0.319699E-01 0.431159E-01 + 0.560643E-01 0.692075E-01 0.801608E-01 0.864446E-01 0.864446E-01 0.801608E-01 + 0.692075E-01 0.560643E-01 0.519648E-01 0.399611E-01 0.297890E-01 0.219742E-01 + 0.163037E-01 0.123505E-01 0.979082E-02 0.839115E-02 0.795383E-02 0.839115E-02 + 0.979082E-02 0.123505E-01 0.163037E-01 0.219742E-01 0.297890E-01 0.399611E-01 + 0.519648E-01 0.643573E-01 0.751976E-01 0.826277E-01 0.852782E-01 0.826277E-01 + 0.751976E-01 0.643573E-01 0.519648E-01 0.488647E-01 0.382749E-01 0.290632E-01 + 0.219742E-01 0.168476E-01 0.133171E-01 0.111368E-01 0.101195E-01 0.101195E-01 + 0.111368E-01 0.133171E-01 0.168476E-01 0.219742E-01 0.290632E-01 0.382749E-01 + 0.488647E-01 0.590302E-01 0.669676E-01 0.720105E-01 0.743983E-01 0.743983E-01 + 0.720105E-01 0.669676E-01 0.590302E-01 0.488647E-01 0.476986E-01 0.382749E-01 + 0.297890E-01 0.232513E-01 0.185459E-01 0.153787E-01 0.135746E-01 0.129964E-01 + 0.135746E-01 0.153787E-01 0.185459E-01 0.232513E-01 0.297890E-01 0.382749E-01 + 0.476986E-01 0.554502E-01 0.589780E-01 0.584098E-01 0.564294E-01 0.555047E-01 + 0.564294E-01 0.584098E-01 0.589780E-01 0.554502E-01 0.476986E-01 0.488647E-01 + 0.399611E-01 0.319699E-01 0.258622E-01 0.214930E-01 0.186622E-01 0.172809E-01 + 0.172809E-01 0.186622E-01 0.214930E-01 0.258622E-01 0.319699E-01 0.399611E-01 + 0.488647E-01 0.554502E-01 0.556625E-01 0.489830E-01 0.401068E-01 0.345053E-01 + 0.345053E-01 0.401068E-01 0.489830E-01 0.556625E-01 0.554502E-01 0.488647E-01 + 0.519648E-01 0.431159E-01 0.355244E-01 0.297806E-01 0.257241E-01 0.232916E-01 + 0.224840E-01 0.232916E-01 0.257241E-01 0.297806E-01 0.355244E-01 0.431159E-01 + 0.519648E-01 0.590302E-01 0.589780E-01 0.489830E-01 0.336667E-01 0.215594E-01 + 0.173212E-01 0.215594E-01 0.336667E-01 0.489830E-01 0.589780E-01 0.590302E-01 + 0.519648E-01 0.560643E-01 0.473650E-01 0.402865E-01 0.349694E-01 0.313421E-01 + 0.294949E-01 0.294949E-01 0.313421E-01 0.349694E-01 0.402865E-01 0.473650E-01 + 0.560643E-01 0.643573E-01 0.669676E-01 0.584098E-01 0.401068E-01 0.215594E-01 + 0.112502E-01 0.112502E-01 0.215594E-01 0.401068E-01 0.584098E-01 0.669676E-01 + 0.643573E-01 0.560643E-01 0.604143E-01 0.524971E-01 0.462127E-01 0.414815E-01 + 0.384625E-01 0.374214E-01 0.384625E-01 0.414815E-01 0.462127E-01 0.524971E-01 + 0.604143E-01 0.692075E-01 0.751976E-01 0.720105E-01 0.564294E-01 0.345053E-01 + 0.173212E-01 0.112502E-01 0.173212E-01 0.345053E-01 0.564294E-01 0.720105E-01 + 0.751976E-01 0.692075E-01 0.604143E-01 0.650298E-01 0.585403E-01 0.531274E-01 + 0.489277E-01 0.465705E-01 0.465705E-01 0.489277E-01 0.531274E-01 0.585403E-01 + 0.650298E-01 0.727180E-01 0.801608E-01 0.826277E-01 0.743983E-01 0.555047E-01 + 0.345053E-01 0.215594E-01 0.215594E-01 0.345053E-01 0.555047E-01 0.743983E-01 + 0.826277E-01 0.801608E-01 0.727180E-01 0.650298E-01 0.701348E-01 0.648593E-01 + 0.596400E-01 0.555070E-01 0.539125E-01 0.555070E-01 0.596400E-01 0.648593E-01 + 0.701348E-01 0.756313E-01 0.816754E-01 0.864446E-01 0.852782E-01 0.743983E-01 + 0.564294E-01 0.401068E-01 0.336667E-01 0.401068E-01 0.564294E-01 0.743983E-01 + 0.852782E-01 0.864446E-01 0.816754E-01 0.756313E-01 0.701348E-01 0.745914E-01 + 0.689152E-01 0.625675E-01 0.582676E-01 0.582676E-01 0.625675E-01 0.689152E-01 + 0.745914E-01 0.785700E-01 0.817829E-01 0.849732E-01 0.864446E-01 0.826277E-01 + 0.720105E-01 0.584098E-01 0.489830E-01 0.489830E-01 0.584098E-01 0.720105E-01 + 0.826277E-01 0.864446E-01 0.849732E-01 0.817829E-01 0.785700E-01 0.745914E-01 + 0.751976E-01 0.669676E-01 0.589780E-01 0.556625E-01 0.589780E-01 0.669676E-01 + 0.751976E-01 0.801608E-01 0.816754E-01 0.817829E-01 0.816754E-01 0.801608E-01 + 0.751976E-01 0.669676E-01 0.589780E-01 0.556625E-01 0.589780E-01 0.669676E-01 + 0.751976E-01 0.801608E-01 0.816754E-01 0.817829E-01 0.816754E-01 0.801608E-01 + 0.751976E-01 0.689455E-01 0.577546E-01 0.498680E-01 0.498680E-01 0.577546E-01 + 0.689455E-01 0.774199E-01 0.801608E-01 0.785700E-01 0.756313E-01 0.727180E-01 + 0.692075E-01 0.643573E-01 0.590302E-01 0.554502E-01 0.554502E-01 0.590302E-01 + 0.643573E-01 0.692075E-01 0.727180E-01 0.756313E-01 0.785700E-01 0.801608E-01 + 0.774199E-01 0.689455E-01 0.570012E-01 0.453630E-01 0.405936E-01 0.453630E-01 + 0.570012E-01 0.689455E-01 0.751976E-01 0.745914E-01 0.701348E-01 0.650298E-01 + 0.604143E-01 0.560643E-01 0.519648E-01 0.488647E-01 0.476986E-01 0.488647E-01 + 0.519648E-01 0.560643E-01 0.604143E-01 0.650298E-01 0.701348E-01 0.745914E-01 + 0.751976E-01 0.689455E-01 0.570012E-01 0.386373E-01 0.269968E-01 0.269968E-01 + 0.386373E-01 0.567074E-01 0.720105E-01 0.777628E-01 0.745914E-01 0.675276E-01 + 0.604501E-01 0.544700E-01 0.494937E-01 0.456893E-01 0.435886E-01 0.435886E-01 + 0.456893E-01 0.494937E-01 0.544700E-01 0.604501E-01 0.675276E-01 0.745914E-01 + 0.777628E-01 0.720105E-01 0.567074E-01 0.386373E-01 0.269968E-01 0.214527E-01 + 0.269968E-01 0.415988E-01 0.584098E-01 0.686757E-01 0.689152E-01 0.625105E-01 + 0.544700E-01 0.474025E-01 0.417669E-01 0.375334E-01 0.348716E-01 0.339662E-01 + 0.348716E-01 0.375334E-01 0.417669E-01 0.474025E-01 0.544700E-01 0.625105E-01 + 0.689152E-01 0.686757E-01 0.584098E-01 0.415988E-01 0.269968E-01 0.269968E-01 + 0.269968E-01 0.355758E-01 0.489830E-01 0.598867E-01 0.625675E-01 0.576056E-01 + 0.494937E-01 0.417669E-01 0.355603E-01 0.308819E-01 0.277169E-01 0.261315E-01 + 0.261315E-01 0.277169E-01 0.308819E-01 0.355603E-01 0.417669E-01 0.494937E-01 + 0.576056E-01 0.625675E-01 0.598867E-01 0.489830E-01 0.355758E-01 0.269968E-01 + 0.386373E-01 0.415988E-01 0.489830E-01 0.562477E-01 0.582676E-01 0.537639E-01 + 0.456893E-01 0.375334E-01 0.308819E-01 0.258665E-01 0.223396E-01 0.202611E-01 + 0.195825E-01 0.202611E-01 0.223396E-01 0.258665E-01 0.308819E-01 0.375334E-01 + 0.456893E-01 0.537639E-01 0.582676E-01 0.562477E-01 0.489830E-01 0.415988E-01 + 0.386373E-01 0.567074E-01 0.584098E-01 0.598867E-01 0.582676E-01 0.522905E-01 + 0.435886E-01 0.348716E-01 0.277169E-01 0.223396E-01 0.185021E-01 0.160510E-01 + 0.148798E-01 0.148798E-01 0.160510E-01 0.185021E-01 0.223396E-01 0.277169E-01 + 0.348716E-01 0.435886E-01 0.522905E-01 0.582676E-01 0.598867E-01 0.584098E-01 + 0.567074E-01 0.567074E-01 0.720105E-01 0.686757E-01 0.625675E-01 0.537639E-01 + 0.435886E-01 0.339662E-01 0.261315E-01 0.202611E-01 0.160510E-01 0.132429E-01 + 0.116712E-01 0.111744E-01 0.116712E-01 0.132429E-01 0.160510E-01 0.202611E-01 + 0.261315E-01 0.339662E-01 0.435886E-01 0.537639E-01 0.625675E-01 0.686757E-01 + 0.720105E-01 0.730466E-01 0.720105E-01 0.777628E-01 0.689152E-01 0.576056E-01 + 0.456893E-01 0.348716E-01 0.261315E-01 0.195825E-01 0.148798E-01 0.116712E-01 + 0.971680E-02 0.881467E-02 0.881467E-02 0.971680E-02 0.116712E-01 0.148798E-01 + 0.195825E-01 0.261315E-01 0.348716E-01 0.456893E-01 0.576056E-01 0.689152E-01 + 0.777628E-01 0.826277E-01 0.826277E-01 0.777628E-01 0.745914E-01 0.625105E-01 + 0.494937E-01 0.375334E-01 0.277169E-01 0.202611E-01 0.148798E-01 0.111744E-01 + 0.881467E-02 0.753699E-02 0.713833E-02 0.753699E-02 0.881467E-02 0.111744E-01 + 0.148798E-01 0.202611E-01 0.277169E-01 0.375334E-01 0.494937E-01 0.625105E-01 + 0.745914E-01 0.832715E-01 0.864446E-01 0.832715E-01 0.745914E-01 0.675276E-01 + 0.544700E-01 0.417669E-01 0.308819E-01 0.223396E-01 0.160510E-01 0.116712E-01 + 0.881467E-02 0.713833E-02 0.637552E-02 0.637552E-02 0.713833E-02 0.881467E-02 + 0.116712E-01 0.160510E-01 0.223396E-01 0.308819E-01 0.417669E-01 0.544700E-01 + 0.675276E-01 0.785700E-01 0.849732E-01 0.849732E-01 0.785700E-01 0.675276E-01 + 0.604501E-01 0.474025E-01 0.355603E-01 0.258665E-01 0.185021E-01 0.132429E-01 + 0.971680E-02 0.753699E-02 0.637552E-02 0.601391E-02 0.637552E-02 0.753699E-02 + 0.971680E-02 0.132429E-01 0.185021E-01 0.258665E-01 0.355603E-01 0.474025E-01 + 0.604501E-01 0.727802E-01 0.817829E-01 0.851033E-01 0.817829E-01 0.727802E-01 + 0.604501E-01 0.544700E-01 0.417669E-01 0.308819E-01 0.223396E-01 0.160510E-01 + 0.116712E-01 0.881467E-02 0.713833E-02 0.637552E-02 0.637552E-02 0.713833E-02 + 0.881467E-02 0.116712E-01 0.160510E-01 0.223396E-01 0.308819E-01 0.417669E-01 + 0.544700E-01 0.675276E-01 0.785700E-01 0.849732E-01 0.849732E-01 0.785700E-01 + 0.675276E-01 0.544700E-01 0.494937E-01 0.375334E-01 0.277169E-01 0.202611E-01 + 0.148798E-01 0.111744E-01 0.881467E-02 0.753699E-02 0.713833E-02 0.753699E-02 + 0.881467E-02 0.111744E-01 0.148798E-01 0.202611E-01 0.277169E-01 0.375334E-01 + 0.494937E-01 0.625105E-01 0.745914E-01 0.832715E-01 0.864446E-01 0.832715E-01 + 0.745914E-01 0.625105E-01 0.494937E-01 0.456893E-01 0.348716E-01 0.261315E-01 + 0.195825E-01 0.148798E-01 0.116712E-01 0.971680E-02 0.881467E-02 0.881467E-02 + 0.971680E-02 0.116712E-01 0.148798E-01 0.195825E-01 0.261315E-01 0.348716E-01 + 0.456893E-01 0.576056E-01 0.689152E-01 0.777628E-01 0.826277E-01 0.826277E-01 + 0.777628E-01 0.689152E-01 0.576056E-01 0.456893E-01 0.435886E-01 0.339662E-01 + 0.261315E-01 0.202611E-01 0.160510E-01 0.132429E-01 0.116712E-01 0.111744E-01 + 0.116712E-01 0.132429E-01 0.160510E-01 0.202611E-01 0.261315E-01 0.339662E-01 + 0.435886E-01 0.537639E-01 0.625675E-01 0.686757E-01 0.720105E-01 0.730466E-01 + 0.720105E-01 0.686757E-01 0.625675E-01 0.537639E-01 0.435886E-01 0.435886E-01 + 0.348716E-01 0.277169E-01 0.223396E-01 0.185021E-01 0.160510E-01 0.148798E-01 + 0.148798E-01 0.160510E-01 0.185021E-01 0.223396E-01 0.277169E-01 0.348716E-01 + 0.435886E-01 0.522905E-01 0.582676E-01 0.598867E-01 0.584098E-01 0.567074E-01 + 0.567074E-01 0.584098E-01 0.598867E-01 0.582676E-01 0.522905E-01 0.435886E-01 + 0.456893E-01 0.375334E-01 0.308819E-01 0.258665E-01 0.223396E-01 0.202611E-01 + 0.195825E-01 0.202611E-01 0.223396E-01 0.258665E-01 0.308819E-01 0.375334E-01 + 0.456893E-01 0.537639E-01 0.582676E-01 0.562477E-01 0.489830E-01 0.415988E-01 + 0.386373E-01 0.415988E-01 0.489830E-01 0.562477E-01 0.582676E-01 0.537639E-01 + 0.456893E-01 0.494937E-01 0.417669E-01 0.355603E-01 0.308819E-01 0.277169E-01 + 0.261315E-01 0.261315E-01 0.277169E-01 0.308819E-01 0.355603E-01 0.417669E-01 + 0.494937E-01 0.576056E-01 0.625675E-01 0.598867E-01 0.489830E-01 0.355758E-01 + 0.269968E-01 0.269968E-01 0.355758E-01 0.489830E-01 0.598867E-01 0.625675E-01 + 0.576056E-01 0.494937E-01 0.544700E-01 0.474025E-01 0.417669E-01 0.375334E-01 + 0.348716E-01 0.339662E-01 0.348716E-01 0.375334E-01 0.417669E-01 0.474025E-01 + 0.544700E-01 0.625105E-01 0.689152E-01 0.686757E-01 0.584098E-01 0.415988E-01 + 0.269968E-01 0.214527E-01 0.269968E-01 0.415988E-01 0.584098E-01 0.686757E-01 + 0.689152E-01 0.625105E-01 0.544700E-01 0.604501E-01 0.544700E-01 0.494937E-01 + 0.456893E-01 0.435886E-01 0.435886E-01 0.456893E-01 0.494937E-01 0.544700E-01 + 0.604501E-01 0.675276E-01 0.745914E-01 0.777628E-01 0.720105E-01 0.567074E-01 + 0.386373E-01 0.269968E-01 0.269968E-01 0.386373E-01 0.567074E-01 0.720105E-01 + 0.777628E-01 0.745914E-01 0.675276E-01 0.604501E-01 0.675276E-01 0.625105E-01 + 0.576056E-01 0.537639E-01 0.522905E-01 0.537639E-01 0.576056E-01 0.625105E-01 + 0.675276E-01 0.727802E-01 0.785700E-01 0.832715E-01 0.826277E-01 0.730466E-01 + 0.567074E-01 0.415988E-01 0.355758E-01 0.415988E-01 0.567074E-01 0.730466E-01 + 0.826277E-01 0.832715E-01 0.785700E-01 0.727802E-01 0.675276E-01 0.745914E-01 + 0.689152E-01 0.625675E-01 0.582676E-01 0.582676E-01 0.625675E-01 0.689152E-01 + 0.745914E-01 0.785700E-01 0.817829E-01 0.849732E-01 0.864446E-01 0.826277E-01 + 0.720105E-01 0.584098E-01 0.489830E-01 0.489830E-01 0.584098E-01 0.720105E-01 + 0.826277E-01 0.864446E-01 0.849732E-01 0.817829E-01 0.785700E-01 0.745914E-01 + 0.777628E-01 0.686757E-01 0.598867E-01 0.562477E-01 0.598867E-01 0.686757E-01 + 0.777628E-01 0.832715E-01 0.849732E-01 0.851033E-01 0.849732E-01 0.832715E-01 + 0.777628E-01 0.686757E-01 0.598867E-01 0.562477E-01 0.598867E-01 0.686757E-01 + 0.777628E-01 0.832715E-01 0.849732E-01 0.851033E-01 0.849732E-01 0.832715E-01 + 0.777628E-01 0.720105E-01 0.584098E-01 0.489830E-01 0.489830E-01 0.584098E-01 + 0.720105E-01 0.826277E-01 0.864446E-01 0.849732E-01 0.817829E-01 0.785700E-01 + 0.745914E-01 0.689152E-01 0.625675E-01 0.582676E-01 0.582676E-01 0.625675E-01 + 0.689152E-01 0.745914E-01 0.785700E-01 0.817829E-01 0.849732E-01 0.864446E-01 + 0.826277E-01 0.720105E-01 0.567074E-01 0.415988E-01 0.355758E-01 0.415988E-01 + 0.567074E-01 0.730466E-01 0.826277E-01 0.832715E-01 0.785700E-01 0.727802E-01 + 0.675276E-01 0.625105E-01 0.576056E-01 0.537639E-01 0.522905E-01 0.537639E-01 + 0.576056E-01 0.625105E-01 0.675276E-01 0.727802E-01 0.785700E-01 0.832715E-01 + 0.826277E-01 0.730466E-01 0.567074E-01 0.386373E-01 0.269968E-01 0.269968E-01 + 0.386373E-01 0.567074E-01 0.720105E-01 0.777628E-01 0.745914E-01 0.675276E-01 + 0.604501E-01 0.544700E-01 0.494937E-01 0.456893E-01 0.435886E-01 0.435886E-01 + 0.456893E-01 0.494937E-01 0.544700E-01 0.604501E-01 0.675276E-01 0.745914E-01 + 0.777628E-01 0.720105E-01 0.567074E-01 0.386373E-01 0.173212E-01 0.112502E-01 + 0.173212E-01 0.345053E-01 0.564294E-01 0.720105E-01 0.751976E-01 0.692075E-01 + 0.604143E-01 0.524971E-01 0.462127E-01 0.414815E-01 0.384625E-01 0.374214E-01 + 0.384625E-01 0.414815E-01 0.462127E-01 0.524971E-01 0.604143E-01 0.692075E-01 + 0.751976E-01 0.720105E-01 0.564294E-01 0.345053E-01 0.173212E-01 0.112502E-01 + 0.112502E-01 0.215594E-01 0.401068E-01 0.584098E-01 0.669676E-01 0.643573E-01 + 0.560643E-01 0.473650E-01 0.402865E-01 0.349694E-01 0.313421E-01 0.294949E-01 + 0.294949E-01 0.313421E-01 0.349694E-01 0.402865E-01 0.473650E-01 0.560643E-01 + 0.643573E-01 0.669676E-01 0.584098E-01 0.401068E-01 0.215594E-01 0.112502E-01 + 0.173212E-01 0.215594E-01 0.336667E-01 0.489830E-01 0.589780E-01 0.590302E-01 + 0.519648E-01 0.431159E-01 0.355244E-01 0.297806E-01 0.257241E-01 0.232916E-01 + 0.224840E-01 0.232916E-01 0.257241E-01 0.297806E-01 0.355244E-01 0.431159E-01 + 0.519648E-01 0.590302E-01 0.589780E-01 0.489830E-01 0.336667E-01 0.215594E-01 + 0.173212E-01 0.345053E-01 0.401068E-01 0.489830E-01 0.556625E-01 0.554502E-01 + 0.488647E-01 0.399611E-01 0.319699E-01 0.258622E-01 0.214930E-01 0.186622E-01 + 0.172809E-01 0.172809E-01 0.186622E-01 0.214930E-01 0.258622E-01 0.319699E-01 + 0.399611E-01 0.488647E-01 0.554502E-01 0.556625E-01 0.489830E-01 0.401068E-01 + 0.345053E-01 0.345053E-01 0.564294E-01 0.584098E-01 0.589780E-01 0.554502E-01 + 0.476986E-01 0.382749E-01 0.297890E-01 0.232513E-01 0.185459E-01 0.153787E-01 + 0.135746E-01 0.129964E-01 0.135746E-01 0.153787E-01 0.185459E-01 0.232513E-01 + 0.297890E-01 0.382749E-01 0.476986E-01 0.554502E-01 0.589780E-01 0.584098E-01 + 0.564294E-01 0.555047E-01 0.564294E-01 0.720105E-01 0.669676E-01 0.590302E-01 + 0.488647E-01 0.382749E-01 0.290632E-01 0.219742E-01 0.168476E-01 0.133171E-01 + 0.111368E-01 0.101195E-01 0.101195E-01 0.111368E-01 0.133171E-01 0.168476E-01 + 0.219742E-01 0.290632E-01 0.382749E-01 0.488647E-01 0.590302E-01 0.669676E-01 + 0.720105E-01 0.743983E-01 0.743983E-01 0.720105E-01 0.751976E-01 0.643573E-01 + 0.519648E-01 0.399611E-01 0.297890E-01 0.219742E-01 0.163037E-01 0.123505E-01 + 0.979082E-02 0.839115E-02 0.795383E-02 0.839115E-02 0.979082E-02 0.123505E-01 + 0.163037E-01 0.219742E-01 0.297890E-01 0.399611E-01 0.519648E-01 0.643573E-01 + 0.751976E-01 0.826277E-01 0.852782E-01 0.826277E-01 0.751976E-01 0.692075E-01 + 0.560643E-01 0.431159E-01 0.319699E-01 0.232513E-01 0.168476E-01 0.123505E-01 + 0.936834E-02 0.759607E-02 0.678802E-02 0.678802E-02 0.759607E-02 0.936834E-02 + 0.123505E-01 0.168476E-01 0.232513E-01 0.319699E-01 0.431159E-01 0.560643E-01 + 0.692075E-01 0.801608E-01 0.864446E-01 0.864446E-01 0.801608E-01 0.692075E-01 + 0.604143E-01 0.473650E-01 0.355244E-01 0.258622E-01 0.185459E-01 0.133171E-01 + 0.979082E-02 0.759607E-02 0.642332E-02 0.605840E-02 0.642332E-02 0.759607E-02 + 0.979082E-02 0.133171E-01 0.185459E-01 0.258622E-01 0.355244E-01 0.473650E-01 + 0.604143E-01 0.727180E-01 0.816754E-01 0.849732E-01 0.816754E-01 0.727180E-01 + 0.604143E-01 0.524971E-01 0.402865E-01 0.297806E-01 0.214930E-01 0.153787E-01 + 0.111368E-01 0.839115E-02 0.678802E-02 0.605840E-02 0.605840E-02 0.678802E-02 + 0.839115E-02 0.111368E-01 0.153787E-01 0.214930E-01 0.297806E-01 0.402865E-01 + 0.524971E-01 0.650298E-01 0.756313E-01 0.817829E-01 0.817829E-01 0.756313E-01 + 0.650298E-01 0.524971E-01 0.462127E-01 0.349694E-01 0.257241E-01 0.186622E-01 + 0.135746E-01 0.101195E-01 0.795383E-02 0.678802E-02 0.642332E-02 0.678802E-02 + 0.795383E-02 0.101195E-01 0.135746E-01 0.186622E-01 0.257241E-01 0.349694E-01 + 0.462127E-01 0.585403E-01 0.701348E-01 0.785700E-01 0.816754E-01 0.785700E-01 + 0.701348E-01 0.585403E-01 0.462127E-01 0.414815E-01 0.313421E-01 0.232916E-01 + 0.172809E-01 0.129964E-01 0.101195E-01 0.839115E-02 0.759607E-02 0.759607E-02 + 0.839115E-02 0.101195E-01 0.129964E-01 0.172809E-01 0.232916E-01 0.313421E-01 + 0.414815E-01 0.531274E-01 0.648593E-01 0.745914E-01 0.801608E-01 0.801608E-01 + 0.745914E-01 0.648593E-01 0.531274E-01 0.414815E-01 0.384625E-01 0.294949E-01 + 0.224840E-01 0.172809E-01 0.135746E-01 0.111368E-01 0.979082E-02 0.936834E-02 + 0.979082E-02 0.111368E-01 0.135746E-01 0.172809E-01 0.224840E-01 0.294949E-01 + 0.384625E-01 0.489277E-01 0.596400E-01 0.689152E-01 0.751976E-01 0.774199E-01 + 0.751976E-01 0.689152E-01 0.596400E-01 0.489277E-01 0.384625E-01 0.374214E-01 + 0.294949E-01 0.232916E-01 0.186622E-01 0.153787E-01 0.133171E-01 0.123505E-01 + 0.123505E-01 0.133171E-01 0.153787E-01 0.186622E-01 0.232916E-01 0.294949E-01 + 0.374214E-01 0.465705E-01 0.555070E-01 0.625675E-01 0.669676E-01 0.689455E-01 + 0.689455E-01 0.669676E-01 0.625675E-01 0.555070E-01 0.465705E-01 0.374214E-01 + 0.384625E-01 0.313421E-01 0.257241E-01 0.214930E-01 0.185459E-01 0.168476E-01 + 0.163037E-01 0.168476E-01 0.185459E-01 0.214930E-01 0.257241E-01 0.313421E-01 + 0.384625E-01 0.465705E-01 0.539125E-01 0.582676E-01 0.589780E-01 0.577546E-01 + 0.570012E-01 0.577546E-01 0.589780E-01 0.582676E-01 0.539125E-01 0.465705E-01 + 0.384625E-01 0.414815E-01 0.349694E-01 0.297806E-01 0.258622E-01 0.232513E-01 + 0.219742E-01 0.219742E-01 0.232513E-01 0.258622E-01 0.297806E-01 0.349694E-01 + 0.414815E-01 0.489277E-01 0.555070E-01 0.582676E-01 0.556625E-01 0.498680E-01 + 0.453630E-01 0.453630E-01 0.498680E-01 0.556625E-01 0.582676E-01 0.555070E-01 + 0.489277E-01 0.414815E-01 0.462127E-01 0.402865E-01 0.355244E-01 0.319699E-01 + 0.297890E-01 0.290632E-01 0.297890E-01 0.319699E-01 0.355244E-01 0.402865E-01 + 0.462127E-01 0.531274E-01 0.596400E-01 0.625675E-01 0.589780E-01 0.498680E-01 + 0.405936E-01 0.367736E-01 0.405936E-01 0.498680E-01 0.589780E-01 0.625675E-01 + 0.596400E-01 0.531274E-01 0.462127E-01 0.524971E-01 0.473650E-01 0.431159E-01 + 0.399611E-01 0.382749E-01 0.382749E-01 0.399611E-01 0.431159E-01 0.473650E-01 + 0.524971E-01 0.585403E-01 0.648593E-01 0.689152E-01 0.669676E-01 0.577546E-01 + 0.453630E-01 0.367736E-01 0.367736E-01 0.453630E-01 0.577546E-01 0.669676E-01 + 0.689152E-01 0.648593E-01 0.585403E-01 0.524971E-01 0.604143E-01 0.560643E-01 + 0.519648E-01 0.488647E-01 0.476986E-01 0.488647E-01 0.519648E-01 0.560643E-01 + 0.604143E-01 0.650298E-01 0.701348E-01 0.745914E-01 0.751976E-01 0.689455E-01 + 0.570012E-01 0.453630E-01 0.405936E-01 0.453630E-01 0.570012E-01 0.689455E-01 + 0.751976E-01 0.745914E-01 0.701348E-01 0.650298E-01 0.604143E-01 0.692075E-01 + 0.643573E-01 0.590302E-01 0.554502E-01 0.554502E-01 0.590302E-01 0.643573E-01 + 0.692075E-01 0.727180E-01 0.756313E-01 0.785700E-01 0.801608E-01 0.774199E-01 + 0.689455E-01 0.577546E-01 0.498680E-01 0.498680E-01 0.577546E-01 0.689455E-01 + 0.774199E-01 0.801608E-01 0.785700E-01 0.756313E-01 0.727180E-01 0.692075E-01 + 0.751976E-01 0.669676E-01 0.589780E-01 0.556625E-01 0.589780E-01 0.669676E-01 + 0.751976E-01 0.801608E-01 0.816754E-01 0.817829E-01 0.816754E-01 0.801608E-01 + 0.751976E-01 0.669676E-01 0.589780E-01 0.556625E-01 0.589780E-01 0.669676E-01 + 0.751976E-01 0.801608E-01 0.816754E-01 0.817829E-01 0.816754E-01 0.801608E-01 + 0.751976E-01 0.720105E-01 0.584098E-01 0.489830E-01 0.489830E-01 0.584098E-01 + 0.720105E-01 0.826277E-01 0.864446E-01 0.849732E-01 0.817829E-01 0.785700E-01 + 0.745914E-01 0.689152E-01 0.625675E-01 0.582676E-01 0.582676E-01 0.625675E-01 + 0.689152E-01 0.745914E-01 0.785700E-01 0.817829E-01 0.849732E-01 0.864446E-01 + 0.826277E-01 0.720105E-01 0.564294E-01 0.401068E-01 0.336667E-01 0.401068E-01 + 0.564294E-01 0.743983E-01 0.852782E-01 0.864446E-01 0.816754E-01 0.756313E-01 + 0.701348E-01 0.648593E-01 0.596400E-01 0.555070E-01 0.539125E-01 0.555070E-01 + 0.596400E-01 0.648593E-01 0.701348E-01 0.756313E-01 0.816754E-01 0.864446E-01 + 0.852782E-01 0.743983E-01 0.564294E-01 0.345053E-01 0.215594E-01 0.215594E-01 + 0.345053E-01 0.555047E-01 0.743983E-01 0.826277E-01 0.801608E-01 0.727180E-01 + 0.650298E-01 0.585403E-01 0.531274E-01 0.489277E-01 0.465705E-01 0.465705E-01 + 0.489277E-01 0.531274E-01 0.585403E-01 0.650298E-01 0.727180E-01 0.801608E-01 + 0.826277E-01 0.743983E-01 0.555047E-01 0.345053E-01 0.173212E-01 0.112502E-01 + 0.173212E-01 0.345053E-01 0.564294E-01 0.720105E-01 0.751976E-01 0.692075E-01 + 0.604143E-01 0.524971E-01 0.462127E-01 0.414815E-01 0.384625E-01 0.374214E-01 + 0.384625E-01 0.414815E-01 0.462127E-01 0.524971E-01 0.604143E-01 0.692075E-01 + 0.751976E-01 0.720105E-01 0.564294E-01 0.345053E-01 0.173212E-01 0.420568E-02 + 0.420568E-02 0.142537E-01 0.345053E-01 0.567074E-01 0.689455E-01 0.680392E-01 + 0.597979E-01 0.505628E-01 0.429734E-01 0.372839E-01 0.333894E-01 0.313897E-01 + 0.313897E-01 0.333894E-01 0.372839E-01 0.429734E-01 0.505628E-01 0.597979E-01 + 0.680392E-01 0.689455E-01 0.567074E-01 0.345053E-01 0.142537E-01 0.420568E-02 + 0.420568E-02 0.821111E-02 0.215594E-01 0.415988E-01 0.577546E-01 0.619819E-01 + 0.562141E-01 0.470527E-01 0.388056E-01 0.325323E-01 0.280936E-01 0.254039E-01 + 0.245013E-01 0.254039E-01 0.280936E-01 0.325323E-01 0.388056E-01 0.470527E-01 + 0.562141E-01 0.619819E-01 0.577546E-01 0.415988E-01 0.215594E-01 0.821111E-02 + 0.420568E-02 0.142537E-01 0.215594E-01 0.355758E-01 0.498680E-01 0.560474E-01 + 0.524590E-01 0.439394E-01 0.353868E-01 0.286912E-01 0.238879E-01 0.207435E-01 + 0.191829E-01 0.191829E-01 0.207435E-01 0.238879E-01 0.286912E-01 0.353868E-01 + 0.439394E-01 0.524590E-01 0.560474E-01 0.498680E-01 0.355758E-01 0.215594E-01 + 0.142537E-01 0.142537E-01 0.345053E-01 0.415988E-01 0.498680E-01 0.535709E-01 + 0.499921E-01 0.417281E-01 0.329495E-01 0.258641E-01 0.207321E-01 0.172544E-01 + 0.152385E-01 0.145820E-01 0.152385E-01 0.172544E-01 0.207321E-01 0.258641E-01 + 0.329495E-01 0.417281E-01 0.499921E-01 0.535709E-01 0.498680E-01 0.415988E-01 + 0.345053E-01 0.319563E-01 0.345053E-01 0.567074E-01 0.577546E-01 0.560474E-01 + 0.499921E-01 0.409266E-01 0.317043E-01 0.241831E-01 0.186759E-01 0.148660E-01 + 0.124825E-01 0.113527E-01 0.113527E-01 0.124825E-01 0.148660E-01 0.186759E-01 + 0.241831E-01 0.317043E-01 0.409266E-01 0.499921E-01 0.560474E-01 0.577546E-01 + 0.567074E-01 0.555047E-01 0.555047E-01 0.567074E-01 0.689455E-01 0.619819E-01 + 0.524590E-01 0.417281E-01 0.317043E-01 0.236381E-01 0.176960E-01 0.135197E-01 + 0.107816E-01 0.926528E-02 0.878825E-02 0.926528E-02 0.107816E-01 0.135197E-01 + 0.176960E-01 0.236381E-01 0.317043E-01 0.417281E-01 0.524590E-01 0.619819E-01 + 0.689455E-01 0.730466E-01 0.743983E-01 0.730466E-01 0.689455E-01 0.680392E-01 + 0.562141E-01 0.439394E-01 0.329495E-01 0.241831E-01 0.176960E-01 0.130949E-01 + 0.999156E-02 0.812001E-02 0.726231E-02 0.726231E-02 0.812001E-02 0.999156E-02 + 0.130949E-01 0.176960E-01 0.241831E-01 0.329495E-01 0.439394E-01 0.562141E-01 + 0.680392E-01 0.774199E-01 0.826277E-01 0.826277E-01 0.774199E-01 0.680392E-01 + 0.597979E-01 0.470527E-01 0.353868E-01 0.258641E-01 0.186759E-01 0.135197E-01 + 0.999156E-02 0.775932E-02 0.655796E-02 0.618454E-02 0.655796E-02 0.775932E-02 + 0.999156E-02 0.135197E-01 0.186759E-01 0.258641E-01 0.353868E-01 0.470527E-01 + 0.597979E-01 0.716471E-01 0.801608E-01 0.832715E-01 0.801608E-01 0.716471E-01 + 0.597979E-01 0.505628E-01 0.388056E-01 0.286912E-01 0.207321E-01 0.148660E-01 + 0.107816E-01 0.812001E-02 0.655796E-02 0.584623E-02 0.584623E-02 0.655796E-02 + 0.812001E-02 0.107816E-01 0.148660E-01 0.207321E-01 0.286912E-01 0.388056E-01 + 0.505628E-01 0.625917E-01 0.727180E-01 0.785700E-01 0.785700E-01 0.727180E-01 + 0.625917E-01 0.505628E-01 0.429734E-01 0.325323E-01 0.238879E-01 0.172544E-01 + 0.124825E-01 0.926528E-02 0.726231E-02 0.618454E-02 0.584623E-02 0.618454E-02 + 0.726231E-02 0.926528E-02 0.124825E-01 0.172544E-01 0.238879E-01 0.325323E-01 + 0.429734E-01 0.543580E-01 0.650298E-01 0.727802E-01 0.756313E-01 0.727802E-01 + 0.650298E-01 0.543580E-01 0.429734E-01 0.372839E-01 0.280936E-01 0.207435E-01 + 0.152385E-01 0.113527E-01 0.878825E-02 0.726231E-02 0.655796E-02 0.655796E-02 + 0.726231E-02 0.878825E-02 0.113527E-01 0.152385E-01 0.207435E-01 0.280936E-01 + 0.372839E-01 0.478311E-01 0.585403E-01 0.675276E-01 0.727180E-01 0.727180E-01 + 0.675276E-01 0.585403E-01 0.478311E-01 0.372839E-01 0.333894E-01 0.254039E-01 + 0.191829E-01 0.145820E-01 0.113527E-01 0.926528E-02 0.812001E-02 0.775932E-02 + 0.812001E-02 0.926528E-02 0.113527E-01 0.145820E-01 0.191829E-01 0.254039E-01 + 0.333894E-01 0.429150E-01 0.531274E-01 0.625105E-01 0.692075E-01 0.716471E-01 + 0.692075E-01 0.625105E-01 0.531274E-01 0.429150E-01 0.333894E-01 0.313897E-01 + 0.245013E-01 0.191829E-01 0.152385E-01 0.124825E-01 0.107816E-01 0.999156E-02 + 0.999156E-02 0.107816E-01 0.124825E-01 0.152385E-01 0.191829E-01 0.245013E-01 + 0.313897E-01 0.397629E-01 0.489277E-01 0.576056E-01 0.643573E-01 0.680392E-01 + 0.680392E-01 0.643573E-01 0.576056E-01 0.489277E-01 0.397629E-01 0.313897E-01 + 0.313897E-01 0.254039E-01 0.207435E-01 0.172544E-01 0.148660E-01 0.135197E-01 + 0.130949E-01 0.135197E-01 0.148660E-01 0.172544E-01 0.207435E-01 0.254039E-01 + 0.313897E-01 0.386708E-01 0.465705E-01 0.537639E-01 0.590302E-01 0.619819E-01 + 0.628947E-01 0.619819E-01 0.590302E-01 0.537639E-01 0.465705E-01 0.386708E-01 + 0.313897E-01 0.333894E-01 0.280936E-01 0.238879E-01 0.207321E-01 0.186759E-01 + 0.176960E-01 0.176960E-01 0.186759E-01 0.207321E-01 0.238879E-01 0.280936E-01 + 0.333894E-01 0.397629E-01 0.465705E-01 0.522905E-01 0.554502E-01 0.560474E-01 + 0.556051E-01 0.556051E-01 0.560474E-01 0.554502E-01 0.522905E-01 0.465705E-01 + 0.397629E-01 0.333894E-01 0.372839E-01 0.325323E-01 0.286912E-01 0.258641E-01 + 0.241831E-01 0.236381E-01 0.241831E-01 0.258641E-01 0.286912E-01 0.325323E-01 + 0.372839E-01 0.429150E-01 0.489277E-01 0.537639E-01 0.554502E-01 0.535709E-01 + 0.502944E-01 0.487304E-01 0.502944E-01 0.535709E-01 0.554502E-01 0.537639E-01 + 0.489277E-01 0.429150E-01 0.372839E-01 0.429734E-01 0.388056E-01 0.353868E-01 + 0.329495E-01 0.317043E-01 0.317043E-01 0.329495E-01 0.353868E-01 0.388056E-01 + 0.429734E-01 0.478311E-01 0.531274E-01 0.576056E-01 0.590302E-01 0.560474E-01 + 0.502944E-01 0.457870E-01 0.457870E-01 0.502944E-01 0.560474E-01 0.590302E-01 + 0.576056E-01 0.531274E-01 0.478311E-01 0.429734E-01 0.505628E-01 0.470527E-01 + 0.439394E-01 0.417281E-01 0.409266E-01 0.417281E-01 0.439394E-01 0.470527E-01 + 0.505628E-01 0.543580E-01 0.585403E-01 0.625105E-01 0.643573E-01 0.619819E-01 + 0.556051E-01 0.487304E-01 0.457870E-01 0.487304E-01 0.556051E-01 0.619819E-01 + 0.643573E-01 0.625105E-01 0.585403E-01 0.543580E-01 0.505628E-01 0.597979E-01 + 0.562141E-01 0.524590E-01 0.499921E-01 0.499921E-01 0.524590E-01 0.562141E-01 + 0.597979E-01 0.625917E-01 0.650298E-01 0.675276E-01 0.692075E-01 0.680392E-01 + 0.628947E-01 0.556051E-01 0.502944E-01 0.502944E-01 0.556051E-01 0.628947E-01 + 0.680392E-01 0.692075E-01 0.675276E-01 0.650298E-01 0.625917E-01 0.597979E-01 + 0.680392E-01 0.619819E-01 0.560474E-01 0.535709E-01 0.560474E-01 0.619819E-01 + 0.680392E-01 0.716471E-01 0.727180E-01 0.727802E-01 0.727180E-01 0.716471E-01 + 0.680392E-01 0.619819E-01 0.560474E-01 0.535709E-01 0.560474E-01 0.619819E-01 + 0.680392E-01 0.716471E-01 0.727180E-01 0.727802E-01 0.727180E-01 0.716471E-01 + 0.680392E-01 0.689455E-01 0.577546E-01 0.498680E-01 0.498680E-01 0.577546E-01 + 0.689455E-01 0.774199E-01 0.801608E-01 0.785700E-01 0.756313E-01 0.727180E-01 + 0.692075E-01 0.643573E-01 0.590302E-01 0.554502E-01 0.554502E-01 0.590302E-01 + 0.643573E-01 0.692075E-01 0.727180E-01 0.756313E-01 0.785700E-01 0.801608E-01 + 0.774199E-01 0.689455E-01 0.567074E-01 0.415988E-01 0.355758E-01 0.415988E-01 + 0.567074E-01 0.730466E-01 0.826277E-01 0.832715E-01 0.785700E-01 0.727802E-01 + 0.675276E-01 0.625105E-01 0.576056E-01 0.537639E-01 0.522905E-01 0.537639E-01 + 0.576056E-01 0.625105E-01 0.675276E-01 0.727802E-01 0.785700E-01 0.832715E-01 + 0.826277E-01 0.730466E-01 0.567074E-01 0.345053E-01 0.215594E-01 0.215594E-01 + 0.345053E-01 0.555047E-01 0.743983E-01 0.826277E-01 0.801608E-01 0.727180E-01 + 0.650298E-01 0.585403E-01 0.531274E-01 0.489277E-01 0.465705E-01 0.465705E-01 + 0.489277E-01 0.531274E-01 0.585403E-01 0.650298E-01 0.727180E-01 0.801608E-01 + 0.826277E-01 0.743983E-01 0.555047E-01 0.345053E-01 0.142537E-01 0.821111E-02 + 0.142537E-01 0.319563E-01 0.555047E-01 0.730466E-01 0.774199E-01 0.716471E-01 + 0.625917E-01 0.543580E-01 0.478311E-01 0.429150E-01 0.397629E-01 0.386708E-01 + 0.397629E-01 0.429150E-01 0.478311E-01 0.543580E-01 0.625917E-01 0.716471E-01 + 0.774199E-01 0.730466E-01 0.555047E-01 0.319563E-01 0.142537E-01 0.420568E-02 + 0.420568E-02 0.142537E-01 0.345053E-01 0.567074E-01 0.689455E-01 0.680392E-01 + 0.597979E-01 0.505628E-01 0.429734E-01 0.372839E-01 0.333894E-01 0.313897E-01 + 0.313897E-01 0.333894E-01 0.372839E-01 0.429734E-01 0.505628E-01 0.597979E-01 + 0.680392E-01 0.689455E-01 0.567074E-01 0.345053E-01 0.142537E-01 0.420568E-02 + 0.628509E-03 0.420568E-02 0.173212E-01 0.386373E-01 0.570012E-01 0.628947E-01 + 0.577130E-01 0.484779E-01 0.399963E-01 0.335279E-01 0.289485E-01 0.261640E-01 + 0.252261E-01 0.261640E-01 0.289485E-01 0.335279E-01 0.399963E-01 0.484779E-01 + 0.577130E-01 0.628947E-01 0.570012E-01 0.386373E-01 0.173212E-01 0.420568E-02 + 0.628509E-03 0.420568E-02 0.112502E-01 0.269968E-01 0.453630E-01 0.556051E-01 + 0.541857E-01 0.461141E-01 0.373044E-01 0.302813E-01 0.252300E-01 0.219046E-01 + 0.202389E-01 0.202389E-01 0.219046E-01 0.252300E-01 0.302813E-01 0.373044E-01 + 0.461141E-01 0.541857E-01 0.556051E-01 0.453630E-01 0.269968E-01 0.112502E-01 + 0.420568E-02 0.420568E-02 0.173212E-01 0.269968E-01 0.405936E-01 0.502944E-01 + 0.506982E-01 0.438602E-01 0.350891E-01 0.276655E-01 0.222441E-01 0.185511E-01 + 0.163824E-01 0.156674E-01 0.163824E-01 0.185511E-01 0.222441E-01 0.276655E-01 + 0.350891E-01 0.438602E-01 0.506982E-01 0.502944E-01 0.405936E-01 0.269968E-01 + 0.173212E-01 0.142537E-01 0.173212E-01 0.386373E-01 0.453630E-01 0.502944E-01 + 0.492335E-01 0.424531E-01 0.336423E-01 0.258818E-01 0.200995E-01 0.160855E-01 + 0.135462E-01 0.123229E-01 0.123229E-01 0.135462E-01 0.160855E-01 0.200995E-01 + 0.258818E-01 0.336423E-01 0.424531E-01 0.492335E-01 0.502944E-01 0.453630E-01 + 0.386373E-01 0.345053E-01 0.345053E-01 0.386373E-01 0.570012E-01 0.556051E-01 + 0.506982E-01 0.424531E-01 0.331452E-01 0.250115E-01 0.188635E-01 0.145193E-01 + 0.116478E-01 0.100355E-01 0.952277E-02 0.100355E-01 0.116478E-01 0.145193E-01 + 0.188635E-01 0.250115E-01 0.331452E-01 0.424531E-01 0.506982E-01 0.556051E-01 + 0.570012E-01 0.567074E-01 0.564294E-01 0.567074E-01 0.570012E-01 0.628947E-01 + 0.541857E-01 0.438602E-01 0.336423E-01 0.250115E-01 0.184714E-01 0.137863E-01 + 0.105905E-01 0.863840E-02 0.773621E-02 0.773621E-02 0.863840E-02 0.105905E-01 + 0.137863E-01 0.184714E-01 0.250115E-01 0.336423E-01 0.438602E-01 0.541857E-01 + 0.628947E-01 0.689455E-01 0.720105E-01 0.720105E-01 0.689455E-01 0.628947E-01 + 0.577130E-01 0.461141E-01 0.350891E-01 0.258818E-01 0.188635E-01 0.137863E-01 + 0.102572E-01 0.798544E-02 0.675236E-02 0.636908E-02 0.675236E-02 0.798544E-02 + 0.102572E-01 0.137863E-01 0.188635E-01 0.258818E-01 0.350891E-01 0.461141E-01 + 0.577130E-01 0.680392E-01 0.751976E-01 0.777628E-01 0.751976E-01 0.680392E-01 + 0.577130E-01 0.484779E-01 0.373044E-01 0.276655E-01 0.200995E-01 0.145193E-01 + 0.105905E-01 0.798544E-02 0.643891E-02 0.573385E-02 0.573385E-02 0.643891E-02 + 0.798544E-02 0.105905E-01 0.145193E-01 0.200995E-01 0.276655E-01 0.373044E-01 + 0.484779E-01 0.597979E-01 0.692075E-01 0.745914E-01 0.745914E-01 0.692075E-01 + 0.597979E-01 0.484779E-01 0.399963E-01 0.302813E-01 0.222441E-01 0.160855E-01 + 0.116478E-01 0.863840E-02 0.675236E-02 0.573385E-02 0.541396E-02 0.573385E-02 + 0.675236E-02 0.863840E-02 0.116478E-01 0.160855E-01 0.222441E-01 0.302813E-01 + 0.399963E-01 0.505628E-01 0.604143E-01 0.675276E-01 0.701348E-01 0.675276E-01 + 0.604143E-01 0.505628E-01 0.399963E-01 0.335279E-01 0.252300E-01 0.185511E-01 + 0.135462E-01 0.100355E-01 0.773621E-02 0.636908E-02 0.573385E-02 0.573385E-02 + 0.636908E-02 0.773621E-02 0.100355E-01 0.135462E-01 0.185511E-01 0.252300E-01 + 0.335279E-01 0.429734E-01 0.524971E-01 0.604501E-01 0.650298E-01 0.650298E-01 + 0.604501E-01 0.524971E-01 0.429734E-01 0.335279E-01 0.289485E-01 0.219046E-01 + 0.163824E-01 0.123229E-01 0.952277E-02 0.773621E-02 0.675236E-02 0.643891E-02 + 0.675236E-02 0.773621E-02 0.952277E-02 0.123229E-01 0.163824E-01 0.219046E-01 + 0.289485E-01 0.372839E-01 0.462127E-01 0.544700E-01 0.604143E-01 0.625917E-01 + 0.604143E-01 0.544700E-01 0.462127E-01 0.372839E-01 0.289485E-01 0.261640E-01 + 0.202389E-01 0.156674E-01 0.123229E-01 0.100355E-01 0.863840E-02 0.798544E-02 + 0.798544E-02 0.863840E-02 0.100355E-01 0.123229E-01 0.156674E-01 0.202389E-01 + 0.261640E-01 0.333894E-01 0.414815E-01 0.494937E-01 0.560643E-01 0.597979E-01 + 0.597979E-01 0.560643E-01 0.494937E-01 0.414815E-01 0.333894E-01 0.261640E-01 + 0.252261E-01 0.202389E-01 0.163824E-01 0.135462E-01 0.116478E-01 0.105905E-01 + 0.102572E-01 0.105905E-01 0.116478E-01 0.135462E-01 0.163824E-01 0.202389E-01 + 0.252261E-01 0.313897E-01 0.384625E-01 0.456893E-01 0.519648E-01 0.562141E-01 + 0.577130E-01 0.562141E-01 0.519648E-01 0.456893E-01 0.384625E-01 0.313897E-01 + 0.252261E-01 0.261640E-01 0.219046E-01 0.185511E-01 0.160855E-01 0.145193E-01 + 0.137863E-01 0.137863E-01 0.145193E-01 0.160855E-01 0.185511E-01 0.219046E-01 + 0.261640E-01 0.313897E-01 0.374214E-01 0.435886E-01 0.488647E-01 0.524590E-01 + 0.541857E-01 0.541857E-01 0.524590E-01 0.488647E-01 0.435886E-01 0.374214E-01 + 0.313897E-01 0.261640E-01 0.289485E-01 0.252300E-01 0.222441E-01 0.200995E-01 + 0.188635E-01 0.184714E-01 0.188635E-01 0.200995E-01 0.222441E-01 0.252300E-01 + 0.289485E-01 0.333894E-01 0.384625E-01 0.435886E-01 0.476986E-01 0.499921E-01 + 0.506982E-01 0.507602E-01 0.506982E-01 0.499921E-01 0.476986E-01 0.435886E-01 + 0.384625E-01 0.333894E-01 0.289485E-01 0.335279E-01 0.302813E-01 0.276655E-01 + 0.258818E-01 0.250115E-01 0.250115E-01 0.258818E-01 0.276655E-01 0.302813E-01 + 0.335279E-01 0.372839E-01 0.414815E-01 0.456893E-01 0.488647E-01 0.499921E-01 + 0.492335E-01 0.481035E-01 0.481035E-01 0.492335E-01 0.499921E-01 0.488647E-01 + 0.456893E-01 0.414815E-01 0.372839E-01 0.335279E-01 0.399963E-01 0.373044E-01 + 0.350891E-01 0.336423E-01 0.331452E-01 0.336423E-01 0.350891E-01 0.373044E-01 + 0.399963E-01 0.429734E-01 0.462127E-01 0.494937E-01 0.519648E-01 0.524590E-01 + 0.506982E-01 0.481035E-01 0.468849E-01 0.481035E-01 0.506982E-01 0.524590E-01 + 0.519648E-01 0.494937E-01 0.462127E-01 0.429734E-01 0.399963E-01 0.484779E-01 + 0.461141E-01 0.438602E-01 0.424531E-01 0.424531E-01 0.438602E-01 0.461141E-01 + 0.484779E-01 0.505628E-01 0.524971E-01 0.544700E-01 0.560643E-01 0.562141E-01 + 0.541857E-01 0.507602E-01 0.481035E-01 0.481035E-01 0.507602E-01 0.541857E-01 + 0.562141E-01 0.560643E-01 0.544700E-01 0.524971E-01 0.505628E-01 0.484779E-01 + 0.577130E-01 0.541857E-01 0.506982E-01 0.492335E-01 0.506982E-01 0.541857E-01 + 0.577130E-01 0.597979E-01 0.604143E-01 0.604501E-01 0.604143E-01 0.597979E-01 + 0.577130E-01 0.541857E-01 0.506982E-01 0.492335E-01 0.506982E-01 0.541857E-01 + 0.577130E-01 0.597979E-01 0.604143E-01 0.604501E-01 0.604143E-01 0.597979E-01 + 0.577130E-01 0.628947E-01 0.556051E-01 0.502944E-01 0.502944E-01 0.556051E-01 + 0.628947E-01 0.680392E-01 0.692075E-01 0.675276E-01 0.650298E-01 0.625917E-01 + 0.597979E-01 0.562141E-01 0.524590E-01 0.499921E-01 0.499921E-01 0.524590E-01 + 0.562141E-01 0.597979E-01 0.625917E-01 0.650298E-01 0.675276E-01 0.692075E-01 + 0.680392E-01 0.628947E-01 0.570012E-01 0.453630E-01 0.405936E-01 0.453630E-01 + 0.570012E-01 0.689455E-01 0.751976E-01 0.745914E-01 0.701348E-01 0.650298E-01 + 0.604143E-01 0.560643E-01 0.519648E-01 0.488647E-01 0.476986E-01 0.488647E-01 + 0.519648E-01 0.560643E-01 0.604143E-01 0.650298E-01 0.701348E-01 0.745914E-01 + 0.751976E-01 0.689455E-01 0.570012E-01 0.386373E-01 0.269968E-01 0.269968E-01 + 0.386373E-01 0.567074E-01 0.720105E-01 0.777628E-01 0.745914E-01 0.675276E-01 + 0.604501E-01 0.544700E-01 0.494937E-01 0.456893E-01 0.435886E-01 0.435886E-01 + 0.456893E-01 0.494937E-01 0.544700E-01 0.604501E-01 0.675276E-01 0.745914E-01 + 0.777628E-01 0.720105E-01 0.567074E-01 0.386373E-01 0.173212E-01 0.112502E-01 + 0.173212E-01 0.345053E-01 0.564294E-01 0.720105E-01 0.751976E-01 0.692075E-01 + 0.604143E-01 0.524971E-01 0.462127E-01 0.414815E-01 0.384625E-01 0.374214E-01 + 0.384625E-01 0.414815E-01 0.462127E-01 0.524971E-01 0.604143E-01 0.692075E-01 + 0.751976E-01 0.720105E-01 0.564294E-01 0.345053E-01 0.173212E-01 0.420568E-02 + 0.420568E-02 0.142537E-01 0.345053E-01 0.567074E-01 0.689455E-01 0.680392E-01 + 0.597979E-01 0.505628E-01 0.429734E-01 0.372839E-01 0.333894E-01 0.313897E-01 + 0.313897E-01 0.333894E-01 0.372839E-01 0.429734E-01 0.505628E-01 0.597979E-01 + 0.680392E-01 0.689455E-01 0.567074E-01 0.345053E-01 0.142537E-01 0.420568E-02 + 0.628509E-03 0.420568E-02 0.173212E-01 0.386373E-01 0.570012E-01 0.628947E-01 + 0.577130E-01 0.484779E-01 0.399963E-01 0.335279E-01 0.289485E-01 0.261640E-01 + 0.252261E-01 0.261640E-01 0.289485E-01 0.335279E-01 0.399963E-01 0.484779E-01 + 0.577130E-01 0.628947E-01 0.570012E-01 0.386373E-01 0.173212E-01 0.420568E-02 + 0.628509E-03 +END_DATAGRID_3D +END_BLOCK_DATAGRID_3D diff --git a/tests/Si/reference/ppout0iflag4out0.out b/tests/Si/reference/ppout0iflag4out0.out new file mode 100644 index 0000000..ba54d07 --- /dev/null +++ b/tests/Si/reference/ppout0iflag4out0.out @@ -0,0 +1,101 @@ + 10 10 + 0.21248759979769E-02 + 0.11284974305206E-01 + 0.25661611365621E-01 + 0.87111516322627E-02 + 0.52684708773998E-01 + 0.52684708773998E-01 + 0.87111516322627E-02 + 0.25661611365621E-01 + 0.11284974305206E-01 + 0.21248759979769E-02 + 0.21248759979769E-02 + 0.10765891549387E-01 + 0.23283777990262E-01 + 0.94099985916643E-02 + 0.64748495047835E-01 + 0.88855543954742E-02 + 0.87736740222700E-02 + 0.29056278286316E-01 + 0.51501041937941E-01 + 0.21248759979769E-02 + 0.21248759979769E-02 + 0.88935155248993E-02 + 0.52946123252418E-01 + 0.13454538771393E-01 + 0.25872373651345E-01 + 0.56368595066588E-01 + 0.15944705452927E-01 + 0.11491753290077E-01 + 0.16944031906224E-01 + 0.21248759979769E-02 + 0.21248759979769E-02 + 0.40822412211121E-01 + 0.16212017949279E-01 + 0.23483289306257E-01 + 0.19143899649677E-01 + 0.13989252454167E-01 + 0.21106982573903E-01 + 0.39664571329115E-01 + 0.96977995044691E-02 + 0.21248759979769E-02 + 0.21248759979769E-02 + 0.27022380449623E-01 + 0.95319635337997E-02 + 0.32277181076998E-01 + 0.36740310397704E-01 + 0.75545054634019E-02 + 0.26677020735630E-01 + 0.56209755516937E-01 + 0.86889768139776E-02 + 0.21248759979769E-02 + 0.21248759979769E-02 + 0.86889768139775E-02 + 0.56209755516937E-01 + 0.26677020735630E-01 + 0.75545054634019E-02 + 0.36740310397704E-01 + 0.32277181076998E-01 + 0.95319635337997E-02 + 0.27022380449623E-01 + 0.21248759979769E-02 + 0.21248759979769E-02 + 0.96977995044691E-02 + 0.39664571329115E-01 + 0.21106982573903E-01 + 0.13989252454167E-01 + 0.19143899649677E-01 + 0.23483289306257E-01 + 0.16212017949279E-01 + 0.40822412211121E-01 + 0.21248759979769E-02 + 0.21248759979769E-02 + 0.16944031906224E-01 + 0.11491753290077E-01 + 0.15944705452927E-01 + 0.56368595066588E-01 + 0.25872373651345E-01 + 0.13454538771393E-01 + 0.52946123252418E-01 + 0.88935155248993E-02 + 0.21248759979769E-02 + 0.21248759979769E-02 + 0.51501041937941E-01 + 0.29056278286316E-01 + 0.87736740222700E-02 + 0.88855543954742E-02 + 0.64748495047835E-01 + 0.94099985916644E-02 + 0.23283777990262E-01 + 0.10765891549387E-01 + 0.21248759979769E-02 + 0.21248759979769E-02 + 0.11284974305206E-01 + 0.25661611365621E-01 + 0.87111516322627E-02 + 0.52684708773998E-01 + 0.52684708773998E-01 + 0.87111516322627E-02 + 0.25661611365621E-01 + 0.11284974305206E-01 + 0.21248759979769E-02 diff --git a/tests/Si/reference/ppout0iflag4out1.out b/tests/Si/reference/ppout0iflag4out1.out new file mode 100644 index 0000000..86a0eea --- /dev/null +++ b/tests/Si/reference/ppout0iflag4out1.out @@ -0,0 +1,26 @@ + 10 10 1 0.69813170079773E+00 0.34906585039887E+00 + 0.21248759979769E-02 0.11284974305206E-01 0.25661611365621E-01 0.87111516322627E-02 + 0.52684708773998E-01 0.52684708773998E-01 0.87111516322627E-02 0.25661611365621E-01 + 0.11284974305206E-01 0.21248759979769E-02 0.21248759979769E-02 0.10765891549387E-01 + 0.23283777990262E-01 0.94099985916643E-02 0.64748495047835E-01 0.88855543954742E-02 + 0.87736740222700E-02 0.29056278286316E-01 0.51501041937941E-01 0.21248759979769E-02 + 0.21248759979769E-02 0.88935155248993E-02 0.52946123252418E-01 0.13454538771393E-01 + 0.25872373651345E-01 0.56368595066588E-01 0.15944705452927E-01 0.11491753290077E-01 + 0.16944031906224E-01 0.21248759979769E-02 0.21248759979769E-02 0.40822412211121E-01 + 0.16212017949279E-01 0.23483289306257E-01 0.19143899649677E-01 0.13989252454167E-01 + 0.21106982573903E-01 0.39664571329115E-01 0.96977995044691E-02 0.21248759979769E-02 + 0.21248759979769E-02 0.27022380449623E-01 0.95319635337997E-02 0.32277181076998E-01 + 0.36740310397704E-01 0.75545054634019E-02 0.26677020735630E-01 0.56209755516937E-01 + 0.86889768139776E-02 0.21248759979769E-02 0.21248759979769E-02 0.86889768139775E-02 + 0.56209755516937E-01 0.26677020735630E-01 0.75545054634019E-02 0.36740310397704E-01 + 0.32277181076998E-01 0.95319635337997E-02 0.27022380449623E-01 0.21248759979769E-02 + 0.21248759979769E-02 0.96977995044691E-02 0.39664571329115E-01 0.21106982573903E-01 + 0.13989252454167E-01 0.19143899649677E-01 0.23483289306257E-01 0.16212017949279E-01 + 0.40822412211121E-01 0.21248759979769E-02 0.21248759979769E-02 0.16944031906224E-01 + 0.11491753290077E-01 0.15944705452927E-01 0.56368595066588E-01 0.25872373651345E-01 + 0.13454538771393E-01 0.52946123252418E-01 0.88935155248993E-02 0.21248759979769E-02 + 0.21248759979769E-02 0.51501041937941E-01 0.29056278286316E-01 0.87736740222700E-02 + 0.88855543954742E-02 0.64748495047835E-01 0.94099985916644E-02 0.23283777990262E-01 + 0.10765891549387E-01 0.21248759979769E-02 0.21248759979769E-02 0.11284974305206E-01 + 0.25661611365621E-01 0.87111516322627E-02 0.52684708773998E-01 0.52684708773998E-01 + 0.87111516322627E-02 0.25661611365621E-01 0.11284974305206E-01 0.21248759979769E-02 diff --git a/tests/Si/reference/run_example b/tests/Si/reference/run_example new file mode 100755 index 0000000..f1afe32 --- /dev/null +++ b/tests/Si/reference/run_example @@ -0,0 +1,43 @@ +#!/bin/sh + + +# check whether echo has the -e option +if test "`echo -e`" = "-e" ; then ECHO=echo ; else ECHO="echo -e" ; fi + +$ECHO +$ECHO "$EXAMPLE_DIR : starting" + +PW_COMMAND="/home/mauropalumbo/q-e/bin/pw.x" +PP_COMMAND="/home/mauropalumbo/q-e/bin/pp.x" + +$ECHO " running the pp.x calculations for Si...\c" + +# If necessary, run pw.x +#$PW_COMMAND < si.in > si.out + +# First calculated the charge and some potential +$PP_COMMAND < sipp0.in > sipp0.out +$PP_COMMAND < sipp1.in > sipp1.out +$PP_COMMAND < sipp2.in > sipp2.out +$PP_COMMAND < sipp6.in > sipp6.out +$PP_COMMAND < sipp11.in > sipp11.out + +# Now test different output formats, 1D, 2D etc. (flags iflag and output_format) +# 1D +$PP_COMMAND < sipp0biflag0out0.in +$PP_COMMAND < sipp0biflag1out0.in +# 2D +$PP_COMMAND < sipp0biflag2out1.in +$PP_COMMAND < sipp0biflag2out2.in +$PP_COMMAND < sipp0biflag2out3.in +$PP_COMMAND < sipp0biflag2out7.in +# 3D +$PP_COMMAND < sipp0biflag3out3.in +$PP_COMMAND < sipp0biflag3out5.in +# polar +$PP_COMMAND < sipp0biflag4out0.in +$PP_COMMAND < sipp0biflag4out1.in + +$ECHO " done" + + diff --git a/tests/Si/reference/sipp0biflag0out0.in b/tests/Si/reference/sipp0biflag0out0.in new file mode 100755 index 0000000..8186bdf --- /dev/null +++ b/tests/Si/reference/sipp0biflag0out0.in @@ -0,0 +1,15 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 0, + output_format = 0, + e1(1) = 1.0, + e1(2) = 0.0, + e1(3) = 0.0, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + fileout = 'ppout0iflag0out0.out' +/ diff --git a/tests/Si/reference/sipp0biflag1out0.in b/tests/Si/reference/sipp0biflag1out0.in new file mode 100755 index 0000000..8af90fd --- /dev/null +++ b/tests/Si/reference/sipp0biflag1out0.in @@ -0,0 +1,15 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 1, + output_format = 0, + e1(1) = 1.0, + e1(2) = 0.0, + e1(3) = 0.0, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + fileout = 'ppout0iflag1out0.out' +/ diff --git a/tests/Si/reference/sipp0biflag2out1.in b/tests/Si/reference/sipp0biflag2out1.in new file mode 100755 index 0000000..ece05c1 --- /dev/null +++ b/tests/Si/reference/sipp0biflag2out1.in @@ -0,0 +1,19 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 2, + output_format = 1, + e1(1) = 1.0, + e1(2) = 0.0, + e1(3) = 0.0, + e2(1) = 0.0, + e2(2) = 1.0, + e2(3) = 0.0, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + ny = 10, + fileout = 'ppout0iflag2out1.out' +/ diff --git a/tests/Si/reference/sipp0biflag2out2.in b/tests/Si/reference/sipp0biflag2out2.in new file mode 100755 index 0000000..29478d9 --- /dev/null +++ b/tests/Si/reference/sipp0biflag2out2.in @@ -0,0 +1,19 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 2, + output_format = 2, + e1(1) = 1.0, + e1(2) = 0.0, + e1(3) = 0.0, + e2(1) = 0.0, + e2(2) = 1.0, + e2(3) = 0.0, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + ny = 10, + fileout = 'ppout0iflag2out2.out' +/ diff --git a/tests/Si/reference/sipp0biflag2out3.in b/tests/Si/reference/sipp0biflag2out3.in new file mode 100755 index 0000000..6f88c12 --- /dev/null +++ b/tests/Si/reference/sipp0biflag2out3.in @@ -0,0 +1,19 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 2, + output_format = 3, + e1(1) = 1.0, + e1(2) = 0.0, + e1(3) = 0.0, + e2(1) = 0.0, + e2(2) = 1.0, + e2(3) = 0.0, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + ny = 10, + fileout = 'ppout0iflag2out3.out' +/ diff --git a/tests/Si/reference/sipp0biflag2out7.in b/tests/Si/reference/sipp0biflag2out7.in new file mode 100755 index 0000000..a9b6494 --- /dev/null +++ b/tests/Si/reference/sipp0biflag2out7.in @@ -0,0 +1,19 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 2, + output_format = 7, + e1(1) = 1.0, + e1(2) = 0.0, + e1(3) = 0.0, + e2(1) = 0.0, + e2(2) = 1.0, + e2(3) = 0.0, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + ny = 10, + fileout = 'ppout0iflag2out7.out' +/ diff --git a/tests/Si/reference/sipp0biflag3out3.in b/tests/Si/reference/sipp0biflag3out3.in new file mode 100755 index 0000000..5d2b072 --- /dev/null +++ b/tests/Si/reference/sipp0biflag3out3.in @@ -0,0 +1,23 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 3, + output_format = 3, + e1(1) = 1.0, + e1(2) = 0.0, + e1(3) = 0.0, + e2(1) = 0.0, + e2(2) = 1.0, + e2(3) = 0.0, + e3(1) = 0.0, + e3(2) = 0.0, + e3(3) = 1.0, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + ny = 10, + nz = 10, + fileout = 'ppout0iflag3out3.out' +/ diff --git a/tests/Si/reference/sipp0biflag3out5.in b/tests/Si/reference/sipp0biflag3out5.in new file mode 100755 index 0000000..2402372 --- /dev/null +++ b/tests/Si/reference/sipp0biflag3out5.in @@ -0,0 +1,23 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 3, + output_format = 5, + e1(1) = 1.0, + e1(2) = 0.0, + e1(3) = 0.0, + e2(1) = 0.0, + e2(2) = 1.0, + e2(3) = 0.0, + e3(1) = 0.0, + e3(2) = 0.0, + e3(3) = 1.0, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + ny = 10, + nz = 10, + fileout = 'ppout0iflag3out5.out' +/ diff --git a/tests/Si/reference/sipp0biflag4out0.in b/tests/Si/reference/sipp0biflag4out0.in new file mode 100755 index 0000000..471cff1 --- /dev/null +++ b/tests/Si/reference/sipp0biflag4out0.in @@ -0,0 +1,14 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 4, + output_format = 0, + radius = 10, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + ny = 10, + fileout = 'ppout0iflag4out0.out' +/ diff --git a/tests/Si/reference/sipp0biflag4out1.in b/tests/Si/reference/sipp0biflag4out1.in new file mode 100755 index 0000000..64ba253 --- /dev/null +++ b/tests/Si/reference/sipp0biflag4out1.in @@ -0,0 +1,14 @@ + &inputpp +/ + &plot + filepp='ppout0', + iflag = 4, + output_format = 1, + radius = 10, + x0(1) = 0.0, + x0(2) = 0.0, + x0(3) = 0.0, + nx = 10, + ny = 10, + fileout = 'ppout0iflag4out1.out' +/ From d6e2000d34459b410479a731a3629942246b44fc Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Thu, 12 Oct 2017 10:39:37 +0200 Subject: [PATCH 008/166] 2D contour.x format added --- postqe/writecharge.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/postqe/writecharge.py b/postqe/writecharge.py index 317e853..c350c1f 100644 --- a/postqe/writecharge.py +++ b/postqe/writecharge.py @@ -86,7 +86,12 @@ def write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx=1, ny=1, plot_file f.write("{:.9E} ".format(X[i, j]) + "{:.9E} ".format(Y[i, j]) + "{:.9E}\n".format(Z[i, j].real)) f.write("\n") elif format == 'contour.x': - pass + f.write("{:5d} {:5d} {:5d} {:25.14f} {:25.14f}\n".format(nx, ny, 1, deltax, deltay)) + for i in range(0, nx): + for j in range(0,ny): + f.write("{:25.14E}".format(Z[i, j].real)) + if ((i*ny + j +1) % 4) == 0: + f.write("\n") elif format == 'plotrho.x': f.write("{:4d} {:4d}\n".format( (nx-1), (ny-1) )) for i in range(0, nx): From ff328efb04fed34f784b001d875c7720522a67d9 Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Thu, 12 Oct 2017 14:03:40 +0200 Subject: [PATCH 009/166] 2D polar plot on a sphere added a dictionary added (struct_info) for storing and printing structural information in output --- my_tests/work/test.py | 22 +++++++---- postqe/charge.py | 17 ++++----- postqe/plot.py | 89 ++++++++++++++++++++++++++++++++++--------- postqe/writecharge.py | 11 ++++-- 4 files changed, 100 insertions(+), 39 deletions(-) diff --git a/my_tests/work/test.py b/my_tests/work/test.py index 8e6c2af..b0dd1bd 100644 --- a/my_tests/work/test.py +++ b/my_tests/work/test.py @@ -4,16 +4,22 @@ charge = get_charge(prefix='Si', schema='../../schemas/qes.xsd') -figure = charge.plot(x0=(0, 0, 0), e1=(1, 0, 0), nx=10, dim=1, ifmagn='total', - plot_file='postqeiflag0out0', method='spherical', format='gnuplot') +#figure = charge.plot(x0=(0, 0, 0), e1=(1, 0, 0), nx=10, dim=1, ifmagn='total', +# plot_file='postqeiflag0out0', method='spherical', format='gnuplot') figure = charge.plot(x0=(0, 0, 0), e1=(1, 0, 0), nx=10, dim=1, ifmagn='total', plot_file='postqeiflag1out0', method='FFT', format='gnuplot') -figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', - plot_file='postqeiflag2out7', method='FFT', format='gnuplot') -figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', - plot_file='postqeiflag2out2', method='FFT', format='plotrho.x') -figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', - plot_file='postqeiflag2out3', method='FFT', format='xsf') +#figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', +# plot_file='postqeiflag2out7', method='FFT', format='gnuplot') +#figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', +# plot_file='postqeiflag2out1', method='FFT', format='contour.x') +#figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', +# plot_file='postqeiflag2out2', method='FFT', format='plotrho.x') +#figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', +# plot_file='postqeiflag2out3', method='FFT', format='xsf') +#figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, radius = 10, dim=2, ifmagn='total', +# plot_file='postqeiflag4out7', method='polar', format='gnuplot') +figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, radius = 10, dim=2, ifmagn='total', + plot_file='postqeiflag4out1', method='polar', format='contour.x') figure.savefig("figure_1.png") diff --git a/postqe/charge.py b/postqe/charge.py index 5219a4a..2485c98 100644 --- a/postqe/charge.py +++ b/postqe/charge.py @@ -6,6 +6,7 @@ from .plot import plot_1Dcharge, plot_2Dcharge, plot_3Dcharge from .compute_vs import compute_G, compute_v_bare, compute_v_h, compute_v_xc + def read_charge_file_hdf5(filename, nr = None): """ Reads a charge file written with QE in HDF5 format. *nr = [nr1,nr2,nr3]* (the dimensions of @@ -96,8 +97,6 @@ def read_charge_file_hdf5(filename, nr = None): return rhotot_r.real, None - - def write_charge(filename, charge, header): """ Write the charge or another quantity calculated by postqe into a text file *filename*. @@ -181,8 +180,8 @@ def write(self, filename): write_charge(filename + '_down', charge_down, header) - def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), ny=50, dim=1, ifmagn='total', - plot_file='', method='FFT', format='gnuplot'): + def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), ny=50, radius=1, dim=1, + ifmagn='total', plot_file='', method='FFT', format='gnuplot'): """ Plot a 1D or 2D section of the charge from x0 along e1 (e2) direction(s) using Fourier interpolation. @@ -197,7 +196,7 @@ def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), self.charge except: return - # Extract some structural info + # Extract some structural info in a dictionary struct_info = { 'a' : self.calculator.get_a_vectors(), 'b' : self.calculator.get_b_vectors(), @@ -212,7 +211,7 @@ def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), if dim == 1: # 1D section ylab='charge', plot_file='', format='', method='FFT' fig = plot_1Dcharge(self.charge, G, struct_info, x0, e1, nx, 'charge', plot_file, method, format) elif dim == 2: # 2D section - fig = plot_2Dcharge(self.charge, G, struct_info, x0, e1, e2, nx, ny, 'charge', plot_file, method, format) + fig = plot_2Dcharge(self.charge, G, struct_info, x0, e1, e2, nx, ny, radius, 'charge', plot_file, method, format) else: # 3D section fig = plot_3Dcharge(self.charge, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, method, format) fig.show() @@ -223,7 +222,7 @@ def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), if dim == 1: # 1D section fig = plot_1Dcharge(charge_up, G, struct_info, x0, e1, nx, 'charge', plot_file, method, format) elif dim == 2: # 2D section - fig = plot_2Dcharge(charge_up, G, struct_info, x0, e1, e2, nx, ny, 'charge', plot_file, method, format) + fig = plot_2Dcharge(charge_up, G, struct_info, x0, e1, e2, nx, ny, radius, 'charge', plot_file, method, format) else: # 3D section fig = plot_3Dcharge(charge_up, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, method, format) @@ -233,7 +232,7 @@ def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), if dim == 1: # 1D section fig = plot_1Dcharge(charge_down, G, struct_info, x0, e1, nx, 'charge', plot_file, method, format) elif dim == 2: # 2D section - fig = plot_2Dcharge(charge_down, G, struct_info, x0, e1, e2, nx, ny, 'charge', plot_file, method, format) + fig = plot_2Dcharge(charge_down, G, struct_info, x0, e1, e2, nx, ny, radius, 'charge', plot_file, method, format) else: # 3D section fig = plot_3Dcharge(charge_down, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, method, format) @@ -242,7 +241,7 @@ def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), if dim == 1: # 1D section ylab='charge', plot_file='', format='', method='FFT' fig = plot_1Dcharge(self.charge, G, struct_info, x0, e1, nx, 'charge', plot_file, method, format) elif dim == 2: # 2D section - fig = plot_2Dcharge(self.charge, G, struct_info, x0, e1, e2, nx, ny, 'charge', plot_file, method, + fig = plot_2Dcharge(self.charge, G, struct_info, x0, e1, e2, nx, ny, radius, 'charge', plot_file, method, format) else: # 3D section fig = plot_3Dcharge(self.charge, G, struct_info, x0, e1, e2, e3, nx, ny, nz, 'charge', plot_file, diff --git a/postqe/plot.py b/postqe/plot.py index 1b653bc..3fe41b9 100644 --- a/postqe/plot.py +++ b/postqe/plot.py @@ -53,7 +53,7 @@ def FFTinterp1D(charge, G, a, x0, e1, nx): X[i] = i * deltax Y[i] = Y[i] / (nr[0] * nr[1] * nr[2]) - print(X[i], Y[i].real) + #print(X[i], Y[i].real) return X, Y @@ -99,7 +99,6 @@ def spherical1D(charge, G, a, x0, e1, nx): for i in range(0, nx): Y[i] += 4.0 * pi * fft_charge[0, 0, 0] else: # not at Gamma - #arg = 2.0 * pi * (x0[0] * G[x, y, z, 0] + x0[1] * G[x, y, z, 1] + x0[2] * G[x, y, z, 2]) arg = 2.0 * pi * np.dot(x0, G[x, y, z]) rho0g = fft_charge[x, y, z] * complex(np.cos(arg), np.sin(arg)) # Move the origin to x0 Y[0] += 4.0 * pi * rho0g # term at r=0 @@ -137,10 +136,9 @@ def FFTinterp2D(charge, G, a, x0, e1, e2, nx, ny): deltax = m1 / (nx - 1) deltay = m2 / (ny - 1) - temp = np.zeros((nx, ny), dtype=complex) X = np.zeros((nx, ny)) Y = np.zeros((nx, ny)) - Z = np.zeros((nx, ny)) + Z = np.zeros((nx, ny), dtype=complex) for i in range(0, nx): for j in range(0, ny): @@ -170,9 +168,9 @@ def FFTinterp2D(charge, G, a, x0, e1, e2, nx, ny): for i in range(0, nx): for j in range(0, ny): - temp[i, j] += fft_charge[x, y, z] * eigx[i] * eigy[j] + Z[i, j] += fft_charge[x, y, z] * eigx[i] * eigy[j] - Z = temp.real / (nr[0] * nr[1] * nr[2]) + Z = Z / (nr[0] * nr[1] * nr[2]) return X, Y, Z @@ -187,7 +185,7 @@ def plot_1Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, yla :param charge: eletronic charge density (or other quantity) to be plotted :param G: G vectors in the reciprocal space - :param a: basis vectors of the unit cell + :param struct_info: a dictionary with structural info on the unit cell :param x0: 3D vector, origin of the line :param e1: 3D vector which determines the plotting line :param nx: number of points in the line @@ -210,7 +208,6 @@ def plot_1Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, yla X, Y = spherical1D_Cython(charge, G, struct_info['a'], x0, e1, nx) except ImportError: X, Y = spherical1D(charge, G, struct_info['a'], x0, e1, nx) - else: raise NotImplementedError @@ -227,8 +224,49 @@ def plot_1Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), nx=20, yla return fig - -def plot_2Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, 0), nx=20, ny=20, zlab='charge', plot_file='', + +def polar2D(charge, G, nx, ny, radius, alat): + """ + Computes a polar plot on a sphere. + """ + + phi = np.zeros((nx, ny)) + theta = np.zeros((nx, ny)) + Z = np.zeros((nx, ny), dtype=complex) + r = np.zeros((nx, ny, 3)) + + radius /= alat + deltax = 2.0 * pi / (nx - 1) + deltay = pi / (ny - 1) + + # Computes the FFT of the charge + fft_charge = np.fft.fftn(charge) + nr = charge.shape + + # first compute r coordinates on the sphere + for i in range(0, nx): + for j in range(0, ny): + phi[i,j] = i * deltax + theta[i,j] = j * deltay + r[i,j,0] = radius * np.sin(theta[i,j]) * np.cos(phi[i,j]) + r[i,j,1] = radius * np.sin(theta[i,j]) * np.sin(phi[i,j]) + r[i,j,2] = radius * np.cos(theta[i,j]) + + # loop(s) over the G points + for x in range(0, nr[0]): + for y in range(0, nr[1]): + for z in range(0, nr[2]): + for i in range(0, nx): + for j in range(0, ny): + eig = np.exp(np.complex(0,2.0 * pi * np.dot(r[i,j],G[x,y,z]))) + Z[i,j] += fft_charge[x, y, z] * eig + + Z = Z / (nr[0] * nr[1] * nr[2]) + + return phi, theta, Z + + +def plot_2Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, 0), nx=20, ny=20, radius=1, zlab='charge', plot_file='', method='FFT', format=''): """ This function calculates a 2D plot of the input charge (or else), starting from the @@ -239,29 +277,42 @@ def plot_2Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, :param charge: eletronic charge density (or other quantity) to be plotted :param G: G vectors in the reciprocal space - :param a: basis vectors of the unit cell + :param struct_info: a dictionary with structural info on the unit cell :param x0: 3D vector, origin of the line :param e1, e2: 3D vectors which determines the plotting plane :param nx, ny: number of points along e1, e2 respectively :param zlab: y axix label in the plot :param plot_file: if plot_file!='', write the plotting values on a text file - :param method: interpolation method ('FFT' or 'splines', only 'FFT' implemented) + :param method: interpolation method ('FFT' or 'splines' or 'polar', only 'FFT' and 'polar' implemented) :param format: output file format :return: the matplotlib figure object """ - #TODO: check that e1 and e2 are not orthonormal + #TODO: check that e1 and e2 are orthonormal # if (abs(e1(1) * e2(1) + e1(2) * e2(2) + e1(3) * e2(3)) > 1e-6): # throw something - try: - from cythonfn import FFTinterp2D_Cython - X, Y, Z = FFTinterp2D_Cython(charge, G, struct_info['a'], x0, e1, e2, nx, ny) - except ImportError: - X, Y, Z = FFTinterp2D(charge, G, struct_info['a'], x0, e1, e2, nx, ny) + if (method == 'FFT'): + try: + from cythonfn import FFTinterp2D_Cython + X, Y, Z = FFTinterp2D_Cython(charge, G, struct_info['a'], x0, e1, e2, nx, ny) + except ImportError: + X, Y, Z = FFTinterp2D(charge, G, struct_info['a'], x0, e1, e2, nx, ny) + elif (method == 'polar'): + try: + #TODO: Cython function to be implemented + from cythonfn import polar2D_Cython + X, Y, Z = polar2D_Cython(charge, G, nx, ny, radius, struct_info['alat']) + except ImportError: + X, Y, Z = polar2D(charge, G, nx, ny, radius, struct_info['alat']) + elif (method == 'splines'): + # TODO: to be implemented + raise NotImplementedError + else: + raise NotImplementedError if plot_file != '': - write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx, ny, plot_file, format) + write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx, ny, plot_file, method, format) fig = plt.figure() ax = fig.gca(projection='3d') diff --git a/postqe/writecharge.py b/postqe/writecharge.py index c350c1f..b4089d6 100644 --- a/postqe/writecharge.py +++ b/postqe/writecharge.py @@ -7,6 +7,7 @@ ################################################################################ import numpy as np +from .constants import pi from .xsf_format import xsf_struct, xsf_datagrid_2d def write_1Dcharge_file(X, Y, nx=1, plot_file = 'chargeplot1D.out'): @@ -33,7 +34,7 @@ def write_1Dcharge_file(X, Y, nx=1, plot_file = 'chargeplot1D.out'): f.write("{:.9E} ".format(X[i]) + "{:.9E}\n".format(Y[i].real)) -def write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx=1, ny=1, plot_file = 'chargeplot2D.out', format='gnuplot'): +def write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx=1, ny=1, plot_file = 'chargeplot2D.out', method='FFT', format='gnuplot'): """ Writes a file for a 2D plot of the charge in different formats. @@ -65,8 +66,12 @@ def write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx=1, ny=1, plot_file e2 = e2 / m2 # Steps along the e1 and e2 directions... - deltax = m1 / (nx - 1) - deltay = m2 / (ny - 1) + if (method=='polar'): + deltax = 2.0 * pi / (nx - 1) + deltay = pi / (ny - 1) + else: + deltax = m1 / (nx - 1) + deltay = m2 / (ny - 1) # Determine max and min of the (real) charge and the sum of imaginary (absolute) charge charge_min = np.min(Z.real) From 4017e7550c05dc117ff65d240674ebbee7c36d9c Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Thu, 12 Oct 2017 16:00:17 +0200 Subject: [PATCH 010/166] 3D FFT interpolation for plotting the charge implemented (both Python and Cython) --- postqe/charge.py | 4 +- postqe/cythonextensions/cythonfn.c | 2672 ++++++++++++++++++++++++-- postqe/cythonextensions/cythonfn.pyx | 101 +- postqe/plot.py | 117 +- postqe/writecharge.py | 69 +- 5 files changed, 2742 insertions(+), 221 deletions(-) diff --git a/postqe/charge.py b/postqe/charge.py index 2485c98..0db4cf3 100644 --- a/postqe/charge.py +++ b/postqe/charge.py @@ -180,8 +180,8 @@ def write(self, filename): write_charge(filename + '_down', charge_down, header) - def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), ny=50, radius=1, dim=1, - ifmagn='total', plot_file='', method='FFT', format='gnuplot'): + def plot(self, x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 50, e2 = (0., 1., 0.), ny=50, e3 = (0., 0., 1.), nz=50, + radius=1, dim=1, ifmagn='total', plot_file='', method='FFT', format='gnuplot'): """ Plot a 1D or 2D section of the charge from x0 along e1 (e2) direction(s) using Fourier interpolation. diff --git a/postqe/cythonextensions/cythonfn.c b/postqe/cythonextensions/cythonfn.c index ccc3cd4..ee2d90d 100644 --- a/postqe/cythonextensions/cythonfn.c +++ b/postqe/cythonextensions/cythonfn.c @@ -1573,6 +1573,7 @@ static char __pyx_k_I[] = "I"; static char __pyx_k_L[] = "L"; static char __pyx_k_O[] = "O"; static char __pyx_k_Q[] = "Q"; +static char __pyx_k_W[] = "W"; static char __pyx_k_X[] = "X"; static char __pyx_k_Y[] = "Y"; static char __pyx_k_Z[] = "Z"; @@ -1585,6 +1586,7 @@ static char __pyx_k_g[] = "g"; static char __pyx_k_h[] = "h"; static char __pyx_k_i[] = "i"; static char __pyx_k_j[] = "j"; +static char __pyx_k_k[] = "k"; static char __pyx_k_l[] = "l"; static char __pyx_k_q[] = "q"; static char __pyx_k_v[] = "v"; @@ -1597,16 +1599,19 @@ static char __pyx_k_Zf[] = "Zf"; static char __pyx_k_Zg[] = "Zg"; static char __pyx_k_e1[] = "e1"; static char __pyx_k_e2[] = "e2"; +static char __pyx_k_e3[] = "e3"; static char __pyx_k_g0[] = "g0"; static char __pyx_k_g1[] = "g1"; static char __pyx_k_g2[] = "g2"; static char __pyx_k_id[] = "id"; static char __pyx_k_m1[] = "m1"; static char __pyx_k_m2[] = "m2"; +static char __pyx_k_m3[] = "m3"; static char __pyx_k_np[] = "np"; static char __pyx_k_nr[] = "nr"; static char __pyx_k_nx[] = "nx"; static char __pyx_k_ny[] = "ny"; +static char __pyx_k_nz[] = "nz"; static char __pyx_k_pi[] = "pi"; static char __pyx_k_x0[] = "x0"; static char __pyx_k_xi[] = "xi"; @@ -1631,12 +1636,16 @@ static char __pyx_k_e12[] = "e12"; static char __pyx_k_e20[] = "e20"; static char __pyx_k_e21[] = "e21"; static char __pyx_k_e22[] = "e22"; +static char __pyx_k_e30[] = "e30"; +static char __pyx_k_e31[] = "e31"; +static char __pyx_k_e32[] = "e32"; static char __pyx_k_fft[] = "fft"; static char __pyx_k_nr0[] = "nr0"; static char __pyx_k_nr1[] = "nr1"; static char __pyx_k_nr2[] = "nr2"; static char __pyx_k_nxx[] = "nxx"; static char __pyx_k_nyy[] = "nyy"; +static char __pyx_k_nzz[] = "nzz"; static char __pyx_k_obj[] = "obj"; static char __pyx_k_x00[] = "x00"; static char __pyx_k_x01[] = "x01"; @@ -1646,6 +1655,7 @@ static char __pyx_k_base[] = "base"; static char __pyx_k_ccos[] = "ccos"; static char __pyx_k_eigx[] = "eigx"; static char __pyx_k_eigy[] = "eigy"; +static char __pyx_k_eigz[] = "eigz"; static char __pyx_k_fftn[] = "fftn"; static char __pyx_k_main[] = "__main__"; static char __pyx_k_mode[] = "mode"; @@ -1675,6 +1685,7 @@ static char __pyx_k_bignum[] = "bignum"; static char __pyx_k_charge[] = "charge"; static char __pyx_k_deltax[] = "deltax"; static char __pyx_k_deltay[] = "deltay"; +static char __pyx_k_deltaz[] = "deltaz"; static char __pyx_k_ecutm2[] = "ecutm2"; static char __pyx_k_encode[] = "encode"; static char __pyx_k_format[] = "format"; @@ -1706,6 +1717,7 @@ static char __pyx_k_compute_G_Cython[] = "compute_G_Cython"; static char __pyx_k_compute_Gs_Cython[] = "compute_Gs_Cython"; static char __pyx_k_FFTinterp1D_Cython[] = "FFTinterp1D_Cython"; static char __pyx_k_FFTinterp2D_Cython[] = "FFTinterp2D_Cython"; +static char __pyx_k_FFTinterp3D_Cython[] = "FFTinterp3D_Cython"; static char __pyx_k_compute_v_h_Cython[] = "compute_v_h_Cython"; static char __pyx_k_strided_and_direct[] = ""; static char __pyx_k_strided_and_indirect[] = ""; @@ -1749,6 +1761,7 @@ static PyObject *__pyx_n_s_Ellipsis; static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; static PyObject *__pyx_n_s_FFTinterp1D_Cython; static PyObject *__pyx_n_s_FFTinterp2D_Cython; +static PyObject *__pyx_n_s_FFTinterp3D_Cython; static PyObject *__pyx_kp_u_Format_string_allocated_too_shor; static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2; static PyObject *__pyx_n_s_G; @@ -1770,6 +1783,7 @@ static PyObject *__pyx_n_s_RuntimeError; static PyObject *__pyx_n_s_TypeError; static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_n_s_W; static PyObject *__pyx_n_s_X; static PyObject *__pyx_n_s_Y; static PyObject *__pyx_n_s_Z; @@ -1805,6 +1819,7 @@ static PyObject *__pyx_n_s_conv_fact; static PyObject *__pyx_n_s_cythonfn; static PyObject *__pyx_n_s_deltax; static PyObject *__pyx_n_s_deltay; +static PyObject *__pyx_n_s_deltaz; static PyObject *__pyx_n_s_dtype; static PyObject *__pyx_n_s_dtype_is_object; static PyObject *__pyx_n_s_e1; @@ -1815,11 +1830,16 @@ static PyObject *__pyx_n_s_e2; static PyObject *__pyx_n_s_e20; static PyObject *__pyx_n_s_e21; static PyObject *__pyx_n_s_e22; +static PyObject *__pyx_n_s_e3; +static PyObject *__pyx_n_s_e30; +static PyObject *__pyx_n_s_e31; +static PyObject *__pyx_n_s_e32; static PyObject *__pyx_n_s_ecutm; static PyObject *__pyx_n_s_ecutm2; static PyObject *__pyx_n_s_ecutrho; static PyObject *__pyx_n_s_eigx; static PyObject *__pyx_n_s_eigy; +static PyObject *__pyx_n_s_eigz; static PyObject *__pyx_n_s_encode; static PyObject *__pyx_n_s_enumerate; static PyObject *__pyx_n_s_error; @@ -1842,9 +1862,11 @@ static PyObject *__pyx_n_s_import; static PyObject *__pyx_n_s_itemsize; static PyObject *__pyx_kp_s_itemsize_0_for_cython_array; static PyObject *__pyx_n_s_j; +static PyObject *__pyx_n_s_k; static PyObject *__pyx_n_s_linalg; static PyObject *__pyx_n_s_m1; static PyObject *__pyx_n_s_m2; +static PyObject *__pyx_n_s_m3; static PyObject *__pyx_n_s_main; static PyObject *__pyx_n_s_memview; static PyObject *__pyx_n_s_mode; @@ -1864,6 +1886,8 @@ static PyObject *__pyx_n_s_nx; static PyObject *__pyx_n_s_nxx; static PyObject *__pyx_n_s_ny; static PyObject *__pyx_n_s_nyy; +static PyObject *__pyx_n_s_nz; +static PyObject *__pyx_n_s_nzz; static PyObject *__pyx_n_s_obj; static PyObject *__pyx_n_s_pack; static PyObject *__pyx_n_s_pi; @@ -1904,6 +1928,7 @@ static PyObject *__pyx_pf_8cythonfn_4compute_Gs_Cython(CYTHON_UNUSED PyObject *_ static PyObject *__pyx_pf_8cythonfn_6compute_v_h_Cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_charge, PyObject *__pyx_v_ecutrho, PyObject *__pyx_v_alat, PyObject *__pyx_v_b); /* proto */ static PyObject *__pyx_pf_8cythonfn_8FFTinterp1D_Cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_charge, PyArrayObject *__pyx_v_G, PyArrayObject *__pyx_v_a, PyObject *__pyx_v_x0, PyObject *__pyx_v_e1, PyObject *__pyx_v_nx); /* proto */ static PyObject *__pyx_pf_8cythonfn_10FFTinterp2D_Cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_charge, PyArrayObject *__pyx_v_G, PyArrayObject *__pyx_v_a, PyObject *__pyx_v_x0, PyObject *__pyx_v_e1, PyObject *__pyx_v_e2, PyObject *__pyx_v_nx, PyObject *__pyx_v_ny); /* proto */ +static PyObject *__pyx_pf_8cythonfn_12FFTinterp3D_Cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_charge, PyArrayObject *__pyx_v_G, PyArrayObject *__pyx_v_a, PyObject *__pyx_v_x0, PyObject *__pyx_v_e1, PyObject *__pyx_v_e2, PyObject *__pyx_v_e3, PyObject *__pyx_v_nx, PyObject *__pyx_v_ny, PyObject *__pyx_v_nz); /* proto */ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */ @@ -1974,16 +1999,18 @@ static PyObject *__pyx_tuple__26; static PyObject *__pyx_tuple__28; static PyObject *__pyx_tuple__30; static PyObject *__pyx_tuple__32; -static PyObject *__pyx_tuple__33; static PyObject *__pyx_tuple__34; static PyObject *__pyx_tuple__35; static PyObject *__pyx_tuple__36; +static PyObject *__pyx_tuple__37; +static PyObject *__pyx_tuple__38; static PyObject *__pyx_codeobj__21; static PyObject *__pyx_codeobj__23; static PyObject *__pyx_codeobj__25; static PyObject *__pyx_codeobj__27; static PyObject *__pyx_codeobj__29; static PyObject *__pyx_codeobj__31; +static PyObject *__pyx_codeobj__33; /* "cythonfn.pyx":14 * @@ -6039,7 +6066,7 @@ static PyObject *__pyx_pf_8cythonfn_10FFTinterp2D_Cython(CYTHON_UNUSED PyObject * cdef np.ndarray[complex, ndim = 2] Z = np.zeros((nx, ny), dtype=complex) * * cdef np.ndarray[complex] eigx = np.zeros(nx, dtype=complex) # <<<<<<<<<<<<<< - * cdef np.ndarray[complex] eigy = np.zeros(nx, dtype=complex) + * cdef np.ndarray[complex] eigy = np.zeros(ny, dtype=complex) * */ __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;} @@ -6077,7 +6104,7 @@ static PyObject *__pyx_pf_8cythonfn_10FFTinterp2D_Cython(CYTHON_UNUSED PyObject /* "cythonfn.pyx":255 * * cdef np.ndarray[complex] eigx = np.zeros(nx, dtype=complex) - * cdef np.ndarray[complex] eigy = np.zeros(nx, dtype=complex) # <<<<<<<<<<<<<< + * cdef np.ndarray[complex] eigy = np.zeros(ny, dtype=complex) # <<<<<<<<<<<<<< * * # normalize e1 */ @@ -6088,9 +6115,9 @@ static PyObject *__pyx_pf_8cythonfn_10FFTinterp2D_Cython(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_nx); - __Pyx_GIVEREF(__pyx_v_nx); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_nx); + __Pyx_INCREF(__pyx_v_ny); + __Pyx_GIVEREF(__pyx_v_ny); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_ny); __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, ((PyObject *)(&PyComplex_Type))) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;} @@ -6863,7 +6890,7 @@ static PyObject *__pyx_pf_8cythonfn_10FFTinterp2D_Cython(CYTHON_UNUSED PyObject * * for j in range(0, nyy): # <<<<<<<<<<<<<< * arg = (2.0 * pi * complesso2(0.0, 1.0) * - * (j * deltax * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) + * (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) */ __pyx_t_30 = __pyx_v_nyy; for (__pyx_t_31 = 0; __pyx_t_31 < __pyx_t_30; __pyx_t_31+=1) { @@ -6872,7 +6899,7 @@ static PyObject *__pyx_pf_8cythonfn_10FFTinterp2D_Cython(CYTHON_UNUSED PyObject /* "cythonfn.pyx":307 * for j in range(0, nyy): * arg = (2.0 * pi * complesso2(0.0, 1.0) * - * (j * deltax * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) # <<<<<<<<<<<<<< + * (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) # <<<<<<<<<<<<<< * eigy[j] = cexp(arg) # much more efficient with cexp * */ @@ -6929,14 +6956,14 @@ static PyObject *__pyx_pf_8cythonfn_10FFTinterp2D_Cython(CYTHON_UNUSED PyObject * * for j in range(0, nyy): * arg = (2.0 * pi * complesso2(0.0, 1.0) * # <<<<<<<<<<<<<< - * (j * deltax * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) + * (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) * eigy[j] = cexp(arg) # much more efficient with cexp */ - __pyx_v_arg = __Pyx_c_prod(__Pyx_c_prod(__pyx_t_double_complex_from_parts((2.0 * __pyx_v_8cythonfn_pi), 0), __pyx_f_8cythonfn_complesso2(0.0, 1.0)), __pyx_t_double_complex_from_parts(((__pyx_v_j * __pyx_v_deltax) * (((__pyx_v_e20 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_60, __pyx_pybuffernd_G.diminfo[3].strides))) + (__pyx_v_e21 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_61, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_62, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_63, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_64, __pyx_pybuffernd_G.diminfo[3].strides)))) + (__pyx_v_e22 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_65, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_66, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_67, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_68, __pyx_pybuffernd_G.diminfo[3].strides))))), 0)); + __pyx_v_arg = __Pyx_c_prod(__Pyx_c_prod(__pyx_t_double_complex_from_parts((2.0 * __pyx_v_8cythonfn_pi), 0), __pyx_f_8cythonfn_complesso2(0.0, 1.0)), __pyx_t_double_complex_from_parts(((__pyx_v_j * __pyx_v_deltay) * (((__pyx_v_e20 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_59, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_60, __pyx_pybuffernd_G.diminfo[3].strides))) + (__pyx_v_e21 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_61, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_62, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_63, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_64, __pyx_pybuffernd_G.diminfo[3].strides)))) + (__pyx_v_e22 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_65, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_66, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_67, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_68, __pyx_pybuffernd_G.diminfo[3].strides))))), 0)); /* "cythonfn.pyx":308 * arg = (2.0 * pi * complesso2(0.0, 1.0) * - * (j * deltax * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) + * (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) * eigy[j] = cexp(arg) # much more efficient with cexp # <<<<<<<<<<<<<< * * for i in range(0, nxx): @@ -6980,212 +7007,2428 @@ static PyObject *__pyx_pf_8cythonfn_10FFTinterp2D_Cython(CYTHON_UNUSED PyObject * * Z = Z / (nr[0] * nr[1] * nr[2]) */ - __pyx_t_72 = __pyx_v_i; - __pyx_t_73 = __pyx_v_j; - __pyx_t_25 = -1; - if (unlikely(__pyx_t_72 >= (size_t)__pyx_pybuffernd_Z.diminfo[0].shape)) __pyx_t_25 = 0; - if (unlikely(__pyx_t_73 >= (size_t)__pyx_pybuffernd_Z.diminfo[1].shape)) __pyx_t_25 = 1; - if (unlikely(__pyx_t_25 != -1)) { - __Pyx_RaiseBufferIndexError(__pyx_t_25); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_74 = __pyx_v_x; - __pyx_t_75 = __pyx_v_y; - __pyx_t_76 = __pyx_v_z; - __pyx_t_25 = -1; - if (unlikely(__pyx_t_74 >= (size_t)__pyx_pybuffernd_fft_charge.diminfo[0].shape)) __pyx_t_25 = 0; - if (unlikely(__pyx_t_75 >= (size_t)__pyx_pybuffernd_fft_charge.diminfo[1].shape)) __pyx_t_25 = 1; - if (unlikely(__pyx_t_76 >= (size_t)__pyx_pybuffernd_fft_charge.diminfo[2].shape)) __pyx_t_25 = 2; - if (unlikely(__pyx_t_25 != -1)) { - __Pyx_RaiseBufferIndexError(__pyx_t_25); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_77 = __pyx_v_i; - __pyx_t_25 = -1; - if (unlikely(__pyx_t_77 >= (size_t)__pyx_pybuffernd_eigx.diminfo[0].shape)) __pyx_t_25 = 0; - if (unlikely(__pyx_t_25 != -1)) { - __Pyx_RaiseBufferIndexError(__pyx_t_25); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_78 = __pyx_v_j; - __pyx_t_25 = -1; - if (unlikely(__pyx_t_78 >= (size_t)__pyx_pybuffernd_eigy.diminfo[0].shape)) __pyx_t_25 = 0; - if (unlikely(__pyx_t_25 != -1)) { - __Pyx_RaiseBufferIndexError(__pyx_t_25); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - } - __pyx_t_79 = __pyx_v_i; - __pyx_t_80 = __pyx_v_j; - __pyx_t_25 = -1; - if (unlikely(__pyx_t_79 >= (size_t)__pyx_pybuffernd_Z.diminfo[0].shape)) __pyx_t_25 = 0; - if (unlikely(__pyx_t_80 >= (size_t)__pyx_pybuffernd_Z.diminfo[1].shape)) __pyx_t_25 = 1; - if (unlikely(__pyx_t_25 != -1)) { - __Pyx_RaiseBufferIndexError(__pyx_t_25); - {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_72 = __pyx_v_i; + __pyx_t_73 = __pyx_v_j; + __pyx_t_25 = -1; + if (unlikely(__pyx_t_72 >= (size_t)__pyx_pybuffernd_Z.diminfo[0].shape)) __pyx_t_25 = 0; + if (unlikely(__pyx_t_73 >= (size_t)__pyx_pybuffernd_Z.diminfo[1].shape)) __pyx_t_25 = 1; + if (unlikely(__pyx_t_25 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_25); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_74 = __pyx_v_x; + __pyx_t_75 = __pyx_v_y; + __pyx_t_76 = __pyx_v_z; + __pyx_t_25 = -1; + if (unlikely(__pyx_t_74 >= (size_t)__pyx_pybuffernd_fft_charge.diminfo[0].shape)) __pyx_t_25 = 0; + if (unlikely(__pyx_t_75 >= (size_t)__pyx_pybuffernd_fft_charge.diminfo[1].shape)) __pyx_t_25 = 1; + if (unlikely(__pyx_t_76 >= (size_t)__pyx_pybuffernd_fft_charge.diminfo[2].shape)) __pyx_t_25 = 2; + if (unlikely(__pyx_t_25 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_25); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_77 = __pyx_v_i; + __pyx_t_25 = -1; + if (unlikely(__pyx_t_77 >= (size_t)__pyx_pybuffernd_eigx.diminfo[0].shape)) __pyx_t_25 = 0; + if (unlikely(__pyx_t_25 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_25); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_78 = __pyx_v_j; + __pyx_t_25 = -1; + if (unlikely(__pyx_t_78 >= (size_t)__pyx_pybuffernd_eigy.diminfo[0].shape)) __pyx_t_25 = 0; + if (unlikely(__pyx_t_25 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_25); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_79 = __pyx_v_i; + __pyx_t_80 = __pyx_v_j; + __pyx_t_25 = -1; + if (unlikely(__pyx_t_79 >= (size_t)__pyx_pybuffernd_Z.diminfo[0].shape)) __pyx_t_25 = 0; + if (unlikely(__pyx_t_80 >= (size_t)__pyx_pybuffernd_Z.diminfo[1].shape)) __pyx_t_25 = 1; + if (unlikely(__pyx_t_25 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_25); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + *__Pyx_BufPtrStrided2d(__pyx_t_double_complex *, __pyx_pybuffernd_Z.rcbuffer->pybuffer.buf, __pyx_t_79, __pyx_pybuffernd_Z.diminfo[0].strides, __pyx_t_80, __pyx_pybuffernd_Z.diminfo[1].strides) = __Pyx_c_sum((*__Pyx_BufPtrStrided2d(__pyx_t_double_complex *, __pyx_pybuffernd_Z.rcbuffer->pybuffer.buf, __pyx_t_72, __pyx_pybuffernd_Z.diminfo[0].strides, __pyx_t_73, __pyx_pybuffernd_Z.diminfo[1].strides)), __Pyx_c_prod(__Pyx_c_prod((*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.buf, __pyx_t_74, __pyx_pybuffernd_fft_charge.diminfo[0].strides, __pyx_t_75, __pyx_pybuffernd_fft_charge.diminfo[1].strides, __pyx_t_76, __pyx_pybuffernd_fft_charge.diminfo[2].strides)), (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigx.rcbuffer->pybuffer.buf, __pyx_t_77, __pyx_pybuffernd_eigx.diminfo[0].strides))), (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigy.rcbuffer->pybuffer.buf, __pyx_t_78, __pyx_pybuffernd_eigy.diminfo[0].strides)))); + } + } + } + } + } + + /* "cythonfn.pyx":314 + * Z[i, j] = Z[i, j] + fft_charge[x, y, z] * eigx[i] * eigy[j] + * + * Z = Z / (nr[0] * nr[1] * nr[2]) # <<<<<<<<<<<<<< + * + * return np.asarray(X), np.asarray(Y), np.asarray(Z) + */ + __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t((((__pyx_v_nr[0]) * (__pyx_v_nr[1])) * (__pyx_v_nr[2]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyNumber_Divide(((PyObject *)__pyx_v_Z), __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = ((PyArrayObject *)__pyx_t_3); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z.rcbuffer->pybuffer); + __pyx_t_25 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack); + if (unlikely(__pyx_t_25 < 0)) { + PyErr_Fetch(&__pyx_t_81, &__pyx_t_82, &__pyx_t_83); + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z.rcbuffer->pybuffer, (PyObject*)__pyx_v_Z, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { + Py_XDECREF(__pyx_t_81); Py_XDECREF(__pyx_t_82); Py_XDECREF(__pyx_t_83); + __Pyx_RaiseBufferFallbackError(); + } else { + PyErr_Restore(__pyx_t_81, __pyx_t_82, __pyx_t_83); + } + } + __pyx_pybuffernd_Z.diminfo[0].strides = __pyx_pybuffernd_Z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Z.diminfo[0].shape = __pyx_pybuffernd_Z.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Z.diminfo[1].strides = __pyx_pybuffernd_Z.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Z.diminfo[1].shape = __pyx_pybuffernd_Z.rcbuffer->pybuffer.shape[1]; + if (unlikely(__pyx_t_25 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_7 = 0; + __Pyx_DECREF_SET(__pyx_v_Z, ((PyArrayObject *)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "cythonfn.pyx":316 + * Z = Z / (nr[0] * nr[1] * nr[2]) + * + * return np.asarray(X), np.asarray(Y), np.asarray(Z) # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_X, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (!__pyx_t_5) { + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_GOTREF(__pyx_t_3); + } else { + __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL; + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0+1, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_Y, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_5 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + if (!__pyx_t_5) { + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GOTREF(__pyx_t_4); + } else { + __pyx_t_84 = PyTuple_New(1+1); if (unlikely(!__pyx_t_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_84); + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_84, 0, __pyx_t_5); __pyx_t_5 = NULL; + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_84, 0+1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_84, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_84); __pyx_t_84 = 0; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_84 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_84); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_84, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_84); __pyx_t_84 = 0; + __pyx_t_84 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_84 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_84)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_84); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + if (!__pyx_t_84) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_Z)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + } else { + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_84); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_84); __pyx_t_84 = NULL; + __Pyx_INCREF(((PyObject *)__pyx_v_Z)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_Z)); + PyTuple_SET_ITEM(__pyx_t_5, 0+1, ((PyObject *)__pyx_v_Z)); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1); + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* "cythonfn.pyx":242 + * + * + * def FFTinterp2D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndim=4] G, np.ndarray[double, ndim=2] a, # <<<<<<<<<<<<<< + * x0, e1, e2, nx, ny): + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); + __Pyx_XDECREF(__pyx_t_84); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_G.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_charge.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigx.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigy.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fft_charge.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("cythonfn.FFTinterp2D_Cython", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_G.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_a.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_charge.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigx.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigy.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fft_charge.rcbuffer->pybuffer); + __pyx_L2:; + __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); + __PYX_XDEC_MEMVIEW(&__pyx_v_Y, 1); + __Pyx_XDECREF((PyObject *)__pyx_v_Z); + __Pyx_XDECREF((PyObject *)__pyx_v_eigx); + __Pyx_XDECREF((PyObject *)__pyx_v_eigy); + __Pyx_XDECREF((PyObject *)__pyx_v_fft_charge); + __Pyx_XDECREF(__pyx_v_e1); + __Pyx_XDECREF(__pyx_v_e2); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "cythonfn.pyx":319 + * + * + * def FFTinterp3D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndim=4] G, np.ndarray[double, ndim=2] a, # <<<<<<<<<<<<<< + * x0, e1, e2, e3, nx, ny, nz): + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8cythonfn_13FFTinterp3D_Cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_8cythonfn_13FFTinterp3D_Cython = {"FFTinterp3D_Cython", (PyCFunction)__pyx_pw_8cythonfn_13FFTinterp3D_Cython, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8cythonfn_13FFTinterp3D_Cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyArrayObject *__pyx_v_charge = 0; + PyArrayObject *__pyx_v_G = 0; + PyArrayObject *__pyx_v_a = 0; + PyObject *__pyx_v_x0 = 0; + PyObject *__pyx_v_e1 = 0; + PyObject *__pyx_v_e2 = 0; + PyObject *__pyx_v_e3 = 0; + PyObject *__pyx_v_nx = 0; + PyObject *__pyx_v_ny = 0; + PyObject *__pyx_v_nz = 0; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("FFTinterp3D_Cython (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_charge,&__pyx_n_s_G,&__pyx_n_s_a,&__pyx_n_s_x0,&__pyx_n_s_e1,&__pyx_n_s_e2,&__pyx_n_s_e3,&__pyx_n_s_nx,&__pyx_n_s_ny,&__pyx_n_s_nz,0}; + PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_charge)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + case 1: + if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_G)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 2: + if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 3: + if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x0)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 4: + if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_e1)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, 4); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 5: + if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_e2)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, 5); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 6: + if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_e3)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, 6); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 7: + if (likely((values[7] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nx)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, 7); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 8: + if (likely((values[8] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ny)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, 8); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + case 9: + if (likely((values[9] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nz)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, 9); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "FFTinterp3D_Cython") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 10) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + } + __pyx_v_charge = ((PyArrayObject *)values[0]); + __pyx_v_G = ((PyArrayObject *)values[1]); + __pyx_v_a = ((PyArrayObject *)values[2]); + __pyx_v_x0 = values[3]; + __pyx_v_e1 = values[4]; + __pyx_v_e2 = values[5]; + __pyx_v_e3 = values[6]; + __pyx_v_nx = values[7]; + __pyx_v_ny = values[8]; + __pyx_v_nz = values[9]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("FFTinterp3D_Cython", 1, 10, 10, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __pyx_L3_error:; + __Pyx_AddTraceback("cythonfn.FFTinterp3D_Cython", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_charge), __pyx_ptype_5numpy_ndarray, 1, "charge", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_G), __pyx_ptype_5numpy_ndarray, 1, "G", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_a), __pyx_ptype_5numpy_ndarray, 1, "a", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_r = __pyx_pf_8cythonfn_12FFTinterp3D_Cython(__pyx_self, __pyx_v_charge, __pyx_v_G, __pyx_v_a, __pyx_v_x0, __pyx_v_e1, __pyx_v_e2, __pyx_v_e3, __pyx_v_nx, __pyx_v_ny, __pyx_v_nz); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8cythonfn_12FFTinterp3D_Cython(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_charge, PyArrayObject *__pyx_v_G, PyArrayObject *__pyx_v_a, PyObject *__pyx_v_x0, PyObject *__pyx_v_e1, PyObject *__pyx_v_e2, PyObject *__pyx_v_e3, PyObject *__pyx_v_nx, PyObject *__pyx_v_ny, PyObject *__pyx_v_nz) { + unsigned int __pyx_v_i; + unsigned int __pyx_v_j; + unsigned int __pyx_v_k; + unsigned int __pyx_v_x; + unsigned int __pyx_v_y; + unsigned int __pyx_v_z; + long __pyx_v_nr0; + long __pyx_v_nr1; + long __pyx_v_nr2; + long __pyx_v_nxx; + long __pyx_v_nyy; + double __pyx_v_x00; + double __pyx_v_x01; + double __pyx_v_x02; + double __pyx_v_e10; + double __pyx_v_e11; + double __pyx_v_e12; + double __pyx_v_e20; + double __pyx_v_e21; + double __pyx_v_e22; + double __pyx_v_e30; + double __pyx_v_e31; + double __pyx_v_e32; + double __pyx_v_m1; + double __pyx_v_m2; + double __pyx_v_m3; + double __pyx_v_deltax; + double __pyx_v_deltay; + double __pyx_v_deltaz; + __pyx_t_double_complex __pyx_v_arg; + __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_memviewslice __pyx_v_Z = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyArrayObject *__pyx_v_W = 0; + PyArrayObject *__pyx_v_eigx = 0; + PyArrayObject *__pyx_v_eigy = 0; + PyArrayObject *__pyx_v_eigz = 0; + PyArrayObject *__pyx_v_fft_charge = 0; + npy_intp *__pyx_v_nr; + PyObject *__pyx_v_nzz = NULL; + __Pyx_LocalBuf_ND __pyx_pybuffernd_G; + __Pyx_Buffer __pyx_pybuffer_G; + __Pyx_LocalBuf_ND __pyx_pybuffernd_W; + __Pyx_Buffer __pyx_pybuffer_W; + __Pyx_LocalBuf_ND __pyx_pybuffernd_a; + __Pyx_Buffer __pyx_pybuffer_a; + __Pyx_LocalBuf_ND __pyx_pybuffernd_charge; + __Pyx_Buffer __pyx_pybuffer_charge; + __Pyx_LocalBuf_ND __pyx_pybuffernd_eigx; + __Pyx_Buffer __pyx_pybuffer_eigx; + __Pyx_LocalBuf_ND __pyx_pybuffernd_eigy; + __Pyx_Buffer __pyx_pybuffer_eigy; + __Pyx_LocalBuf_ND __pyx_pybuffernd_eigz; + __Pyx_Buffer __pyx_pybuffer_eigz; + __Pyx_LocalBuf_ND __pyx_pybuffernd_fft_charge; + __Pyx_Buffer __pyx_pybuffer_fft_charge; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + __Pyx_memviewslice __pyx_t_6 = { 0, 0, { 0 }, { 0 }, { 0 } }; + PyArrayObject *__pyx_t_7 = NULL; + PyArrayObject *__pyx_t_8 = NULL; + PyArrayObject *__pyx_t_9 = NULL; + PyArrayObject *__pyx_t_10 = NULL; + double __pyx_t_11; + int __pyx_t_12; + PyArrayObject *__pyx_t_13 = NULL; + npy_intp *__pyx_t_14; + npy_intp __pyx_t_15; + npy_intp __pyx_t_16; + npy_intp __pyx_t_17; + double __pyx_t_18; + double __pyx_t_19; + long __pyx_t_20; + long __pyx_t_21; + unsigned int __pyx_t_22; + unsigned int __pyx_t_23; + long __pyx_t_24; + unsigned int __pyx_t_25; + size_t __pyx_t_26; + size_t __pyx_t_27; + size_t __pyx_t_28; + int __pyx_t_29; + size_t __pyx_t_30; + size_t __pyx_t_31; + size_t __pyx_t_32; + size_t __pyx_t_33; + size_t __pyx_t_34; + size_t __pyx_t_35; + long __pyx_t_36; + unsigned int __pyx_t_37; + size_t __pyx_t_38; + size_t __pyx_t_39; + size_t __pyx_t_40; + Py_ssize_t __pyx_t_41; + size_t __pyx_t_42; + size_t __pyx_t_43; + size_t __pyx_t_44; + Py_ssize_t __pyx_t_45; + size_t __pyx_t_46; + size_t __pyx_t_47; + size_t __pyx_t_48; + Py_ssize_t __pyx_t_49; + size_t __pyx_t_50; + size_t __pyx_t_51; + size_t __pyx_t_52; + Py_ssize_t __pyx_t_53; + size_t __pyx_t_54; + size_t __pyx_t_55; + size_t __pyx_t_56; + Py_ssize_t __pyx_t_57; + size_t __pyx_t_58; + size_t __pyx_t_59; + size_t __pyx_t_60; + Py_ssize_t __pyx_t_61; + size_t __pyx_t_62; + size_t __pyx_t_63; + size_t __pyx_t_64; + size_t __pyx_t_65; + Py_ssize_t __pyx_t_66; + size_t __pyx_t_67; + size_t __pyx_t_68; + size_t __pyx_t_69; + Py_ssize_t __pyx_t_70; + size_t __pyx_t_71; + size_t __pyx_t_72; + size_t __pyx_t_73; + Py_ssize_t __pyx_t_74; + size_t __pyx_t_75; + size_t __pyx_t_76; + size_t __pyx_t_77; + size_t __pyx_t_78; + Py_ssize_t __pyx_t_79; + size_t __pyx_t_80; + size_t __pyx_t_81; + size_t __pyx_t_82; + Py_ssize_t __pyx_t_83; + size_t __pyx_t_84; + size_t __pyx_t_85; + size_t __pyx_t_86; + Py_ssize_t __pyx_t_87; + size_t __pyx_t_88; + long __pyx_t_89; + unsigned int __pyx_t_90; + long __pyx_t_91; + unsigned int __pyx_t_92; + size_t __pyx_t_93; + size_t __pyx_t_94; + size_t __pyx_t_95; + size_t __pyx_t_96; + size_t __pyx_t_97; + size_t __pyx_t_98; + size_t __pyx_t_99; + size_t __pyx_t_100; + size_t __pyx_t_101; + size_t __pyx_t_102; + size_t __pyx_t_103; + size_t __pyx_t_104; + PyObject *__pyx_t_105 = NULL; + PyObject *__pyx_t_106 = NULL; + PyObject *__pyx_t_107 = NULL; + PyObject *__pyx_t_108 = NULL; + PyObject *__pyx_t_109 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("FFTinterp3D_Cython", 0); + __Pyx_INCREF(__pyx_v_e1); + __Pyx_INCREF(__pyx_v_e2); + __Pyx_INCREF(__pyx_v_e3); + __pyx_pybuffer_W.pybuffer.buf = NULL; + __pyx_pybuffer_W.refcount = 0; + __pyx_pybuffernd_W.data = NULL; + __pyx_pybuffernd_W.rcbuffer = &__pyx_pybuffer_W; + __pyx_pybuffer_eigx.pybuffer.buf = NULL; + __pyx_pybuffer_eigx.refcount = 0; + __pyx_pybuffernd_eigx.data = NULL; + __pyx_pybuffernd_eigx.rcbuffer = &__pyx_pybuffer_eigx; + __pyx_pybuffer_eigy.pybuffer.buf = NULL; + __pyx_pybuffer_eigy.refcount = 0; + __pyx_pybuffernd_eigy.data = NULL; + __pyx_pybuffernd_eigy.rcbuffer = &__pyx_pybuffer_eigy; + __pyx_pybuffer_eigz.pybuffer.buf = NULL; + __pyx_pybuffer_eigz.refcount = 0; + __pyx_pybuffernd_eigz.data = NULL; + __pyx_pybuffernd_eigz.rcbuffer = &__pyx_pybuffer_eigz; + __pyx_pybuffer_fft_charge.pybuffer.buf = NULL; + __pyx_pybuffer_fft_charge.refcount = 0; + __pyx_pybuffernd_fft_charge.data = NULL; + __pyx_pybuffernd_fft_charge.rcbuffer = &__pyx_pybuffer_fft_charge; + __pyx_pybuffer_charge.pybuffer.buf = NULL; + __pyx_pybuffer_charge.refcount = 0; + __pyx_pybuffernd_charge.data = NULL; + __pyx_pybuffernd_charge.rcbuffer = &__pyx_pybuffer_charge; + __pyx_pybuffer_G.pybuffer.buf = NULL; + __pyx_pybuffer_G.refcount = 0; + __pyx_pybuffernd_G.data = NULL; + __pyx_pybuffernd_G.rcbuffer = &__pyx_pybuffer_G; + __pyx_pybuffer_a.pybuffer.buf = NULL; + __pyx_pybuffer_a.refcount = 0; + __pyx_pybuffernd_a.data = NULL; + __pyx_pybuffernd_a.rcbuffer = &__pyx_pybuffer_a; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_charge.rcbuffer->pybuffer, (PyObject*)__pyx_v_charge, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_pybuffernd_charge.diminfo[0].strides = __pyx_pybuffernd_charge.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_charge.diminfo[0].shape = __pyx_pybuffernd_charge.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_charge.diminfo[1].strides = __pyx_pybuffernd_charge.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_charge.diminfo[1].shape = __pyx_pybuffernd_charge.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_charge.diminfo[2].strides = __pyx_pybuffernd_charge.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_charge.diminfo[2].shape = __pyx_pybuffernd_charge.rcbuffer->pybuffer.shape[2]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_G.rcbuffer->pybuffer, (PyObject*)__pyx_v_G, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 4, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_pybuffernd_G.diminfo[0].strides = __pyx_pybuffernd_G.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_G.diminfo[0].shape = __pyx_pybuffernd_G.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_G.diminfo[1].strides = __pyx_pybuffernd_G.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_G.diminfo[1].shape = __pyx_pybuffernd_G.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_G.diminfo[2].strides = __pyx_pybuffernd_G.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_G.diminfo[2].shape = __pyx_pybuffernd_G.rcbuffer->pybuffer.shape[2]; __pyx_pybuffernd_G.diminfo[3].strides = __pyx_pybuffernd_G.rcbuffer->pybuffer.strides[3]; __pyx_pybuffernd_G.diminfo[3].shape = __pyx_pybuffernd_G.rcbuffer->pybuffer.shape[3]; + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_a.rcbuffer->pybuffer, (PyObject*)__pyx_v_a, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_pybuffernd_a.diminfo[0].strides = __pyx_pybuffernd_a.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_a.diminfo[0].shape = __pyx_pybuffernd_a.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_a.diminfo[1].strides = __pyx_pybuffernd_a.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_a.diminfo[1].shape = __pyx_pybuffernd_a.rcbuffer->pybuffer.shape[1]; + + /* "cythonfn.pyx":327 + * cdef double complex arg + * + * cdef double[:,:,:] X = np.zeros((nx, ny, nz)) # <<<<<<<<<<<<<< + * cdef double[:,:,:] Y = np.zeros((nx, ny, nz)) + * cdef double[:,:,:] Z = np.zeros((nx, ny, nz)) + */ + __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_nx); + __Pyx_GIVEREF(__pyx_v_nx); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_nx); + __Pyx_INCREF(__pyx_v_ny); + __Pyx_GIVEREF(__pyx_v_ny); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_ny); + __Pyx_INCREF(__pyx_v_nz); + __Pyx_GIVEREF(__pyx_v_nz); + PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_nz); + __pyx_t_4 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + if (!__pyx_t_4) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else { + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL; + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(__pyx_t_1); + if (unlikely(!__pyx_t_6.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_X = __pyx_t_6; + __pyx_t_6.memview = NULL; + __pyx_t_6.data = NULL; + + /* "cythonfn.pyx":328 + * + * cdef double[:,:,:] X = np.zeros((nx, ny, nz)) + * cdef double[:,:,:] Y = np.zeros((nx, ny, nz)) # <<<<<<<<<<<<<< + * cdef double[:,:,:] Z = np.zeros((nx, ny, nz)) + * cdef np.ndarray[complex, ndim = 3] W = np.zeros((nx, ny, nz), dtype=complex) + */ + __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_INCREF(__pyx_v_nx); + __Pyx_GIVEREF(__pyx_v_nx); + PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_nx); + __Pyx_INCREF(__pyx_v_ny); + __Pyx_GIVEREF(__pyx_v_ny); + PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_ny); + __Pyx_INCREF(__pyx_v_nz); + __Pyx_GIVEREF(__pyx_v_nz); + PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_nz); + __pyx_t_2 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + } + } + if (!__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else { + __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL; + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(__pyx_t_1); + if (unlikely(!__pyx_t_6.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_Y = __pyx_t_6; + __pyx_t_6.memview = NULL; + __pyx_t_6.data = NULL; + + /* "cythonfn.pyx":329 + * cdef double[:,:,:] X = np.zeros((nx, ny, nz)) + * cdef double[:,:,:] Y = np.zeros((nx, ny, nz)) + * cdef double[:,:,:] Z = np.zeros((nx, ny, nz)) # <<<<<<<<<<<<<< + * cdef np.ndarray[complex, ndim = 3] W = np.zeros((nx, ny, nz), dtype=complex) + * + */ + __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_nx); + __Pyx_GIVEREF(__pyx_v_nx); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_nx); + __Pyx_INCREF(__pyx_v_ny); + __Pyx_GIVEREF(__pyx_v_ny); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_ny); + __Pyx_INCREF(__pyx_v_nz); + __Pyx_GIVEREF(__pyx_v_nz); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_nz); + __pyx_t_3 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (!__pyx_t_3) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else { + __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); __pyx_t_3 = NULL; + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_2, 0+1, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_dsdsds_double(__pyx_t_1); + if (unlikely(!__pyx_t_6.memview)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_Z = __pyx_t_6; + __pyx_t_6.memview = NULL; + __pyx_t_6.data = NULL; + + /* "cythonfn.pyx":330 + * cdef double[:,:,:] Y = np.zeros((nx, ny, nz)) + * cdef double[:,:,:] Z = np.zeros((nx, ny, nz)) + * cdef np.ndarray[complex, ndim = 3] W = np.zeros((nx, ny, nz), dtype=complex) # <<<<<<<<<<<<<< + * + * cdef np.ndarray[complex] eigx = np.zeros(nx, dtype=complex) + */ + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_nx); + __Pyx_GIVEREF(__pyx_v_nx); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_nx); + __Pyx_INCREF(__pyx_v_ny); + __Pyx_GIVEREF(__pyx_v_ny); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_ny); + __Pyx_INCREF(__pyx_v_nz); + __Pyx_GIVEREF(__pyx_v_nz); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_nz); + __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)(&PyComplex_Type))) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = ((PyArrayObject *)__pyx_t_5); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_W.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) { + __pyx_v_W = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_W.rcbuffer->pybuffer.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_pybuffernd_W.diminfo[0].strides = __pyx_pybuffernd_W.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_W.diminfo[0].shape = __pyx_pybuffernd_W.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_W.diminfo[1].strides = __pyx_pybuffernd_W.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_W.diminfo[1].shape = __pyx_pybuffernd_W.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_W.diminfo[2].strides = __pyx_pybuffernd_W.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_W.diminfo[2].shape = __pyx_pybuffernd_W.rcbuffer->pybuffer.shape[2]; + } + } + __pyx_t_7 = 0; + __pyx_v_W = ((PyArrayObject *)__pyx_t_5); + __pyx_t_5 = 0; + + /* "cythonfn.pyx":332 + * cdef np.ndarray[complex, ndim = 3] W = np.zeros((nx, ny, nz), dtype=complex) + * + * cdef np.ndarray[complex] eigx = np.zeros(nx, dtype=complex) # <<<<<<<<<<<<<< + * cdef np.ndarray[complex] eigy = np.zeros(ny, dtype=complex) + * cdef np.ndarray[complex] eigz = np.zeros(nz, dtype=complex) + */ + __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v_nx); + __Pyx_GIVEREF(__pyx_v_nx); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_nx); + __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyComplex_Type))) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_eigx.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_eigx = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_eigx.rcbuffer->pybuffer.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_pybuffernd_eigx.diminfo[0].strides = __pyx_pybuffernd_eigx.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_eigx.diminfo[0].shape = __pyx_pybuffernd_eigx.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_8 = 0; + __pyx_v_eigx = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "cythonfn.pyx":333 + * + * cdef np.ndarray[complex] eigx = np.zeros(nx, dtype=complex) + * cdef np.ndarray[complex] eigy = np.zeros(ny, dtype=complex) # <<<<<<<<<<<<<< + * cdef np.ndarray[complex] eigz = np.zeros(nz, dtype=complex) + * + */ + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_v_ny); + __Pyx_GIVEREF(__pyx_v_ny); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_ny); + __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, ((PyObject *)(&PyComplex_Type))) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_9 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_eigy.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_eigy = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_eigy.rcbuffer->pybuffer.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_pybuffernd_eigy.diminfo[0].strides = __pyx_pybuffernd_eigy.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_eigy.diminfo[0].shape = __pyx_pybuffernd_eigy.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_9 = 0; + __pyx_v_eigy = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "cythonfn.pyx":334 + * cdef np.ndarray[complex] eigx = np.zeros(nx, dtype=complex) + * cdef np.ndarray[complex] eigy = np.zeros(ny, dtype=complex) + * cdef np.ndarray[complex] eigz = np.zeros(nz, dtype=complex) # <<<<<<<<<<<<<< + * + * # normalize e1 + */ + __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_v_nz); + __Pyx_GIVEREF(__pyx_v_nz); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_nz); + __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyComplex_Type))) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_10 = ((PyArrayObject *)__pyx_t_2); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_eigz.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_eigz = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_eigz.rcbuffer->pybuffer.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_pybuffernd_eigz.diminfo[0].strides = __pyx_pybuffernd_eigz.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_eigz.diminfo[0].shape = __pyx_pybuffernd_eigz.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_10 = 0; + __pyx_v_eigz = ((PyArrayObject *)__pyx_t_2); + __pyx_t_2 = 0; + + /* "cythonfn.pyx":337 + * + * # normalize e1 + * m1 = np.linalg.norm(e1) # <<<<<<<<<<<<<< + * if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 + * e1 = a[0] + */ + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_linalg); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_norm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (!__pyx_t_1) { + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_e1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + } else { + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL; + __Pyx_INCREF(__pyx_v_e1); + __Pyx_GIVEREF(__pyx_v_e1); + PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_e1); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_m1 = __pyx_t_11; + + /* "cythonfn.pyx":338 + * # normalize e1 + * m1 = np.linalg.norm(e1) + * if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 # <<<<<<<<<<<<<< + * e1 = a[0] + * m1 = np.linalg.norm(e1) + */ + __pyx_t_12 = ((fabs(__pyx_v_m1) < 1.0E-6) != 0); + if (__pyx_t_12) { + + /* "cythonfn.pyx":339 + * m1 = np.linalg.norm(e1) + * if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 + * e1 = a[0] # <<<<<<<<<<<<<< + * m1 = np.linalg.norm(e1) + * e10 = e1[0] / m1 + */ + __pyx_t_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_a), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_e1, __pyx_t_2); + __pyx_t_2 = 0; + + /* "cythonfn.pyx":340 + * if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 + * e1 = a[0] + * m1 = np.linalg.norm(e1) # <<<<<<<<<<<<<< + * e10 = e1[0] / m1 + * e11 = e1[1] / m1 + */ + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_linalg); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_norm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (!__pyx_t_5) { + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_e1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + } else { + __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = NULL; + __Pyx_INCREF(__pyx_v_e1); + __Pyx_GIVEREF(__pyx_v_e1); + PyTuple_SET_ITEM(__pyx_t_1, 0+1, __pyx_v_e1); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_m1 = __pyx_t_11; + + /* "cythonfn.pyx":338 + * # normalize e1 + * m1 = np.linalg.norm(e1) + * if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 # <<<<<<<<<<<<<< + * e1 = a[0] + * m1 = np.linalg.norm(e1) + */ + } + + /* "cythonfn.pyx":341 + * e1 = a[0] + * m1 = np.linalg.norm(e1) + * e10 = e1[0] / m1 # <<<<<<<<<<<<<< + * e11 = e1[1] / m1 + * e12 = e1[2] / m1 + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_e1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_m1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_e10 = __pyx_t_11; + + /* "cythonfn.pyx":342 + * m1 = np.linalg.norm(e1) + * e10 = e1[0] / m1 + * e11 = e1[1] / m1 # <<<<<<<<<<<<<< + * e12 = e1[2] / m1 + * + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_e1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_m1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_e11 = __pyx_t_11; + + /* "cythonfn.pyx":343 + * e10 = e1[0] / m1 + * e11 = e1[1] / m1 + * e12 = e1[2] / m1 # <<<<<<<<<<<<<< + * + * # normalize e2 + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_e1, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_m1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 343; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_e12 = __pyx_t_11; + + /* "cythonfn.pyx":346 + * + * # normalize e2 + * m2 = np.linalg.norm(e2) # <<<<<<<<<<<<<< + * if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 + * e2 = a[1] + */ + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_linalg); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_norm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (!__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_e2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + } else { + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL; + __Pyx_INCREF(__pyx_v_e2); + __Pyx_GIVEREF(__pyx_v_e2); + PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_e2); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 346; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_m2 = __pyx_t_11; + + /* "cythonfn.pyx":347 + * # normalize e2 + * m2 = np.linalg.norm(e2) + * if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 # <<<<<<<<<<<<<< + * e2 = a[1] + * m2 = np.linalg.norm(e2) + */ + __pyx_t_12 = ((fabs(__pyx_v_m2) < 1.0E-6) != 0); + if (__pyx_t_12) { + + /* "cythonfn.pyx":348 + * m2 = np.linalg.norm(e2) + * if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 + * e2 = a[1] # <<<<<<<<<<<<<< + * m2 = np.linalg.norm(e2) + * e20 = e2[0] / m2 + */ + __pyx_t_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_a), 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_e2, __pyx_t_1); + __pyx_t_1 = 0; + + /* "cythonfn.pyx":349 + * if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 + * e2 = a[1] + * m2 = np.linalg.norm(e2) # <<<<<<<<<<<<<< + * e20 = e2[0] / m2 + * e21 = e2[1] / m2 + */ + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_linalg); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_norm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (!__pyx_t_5) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_e2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + } else { + __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL; + __Pyx_INCREF(__pyx_v_e2); + __Pyx_GIVEREF(__pyx_v_e2); + PyTuple_SET_ITEM(__pyx_t_2, 0+1, __pyx_v_e2); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_m2 = __pyx_t_11; + + /* "cythonfn.pyx":347 + * # normalize e2 + * m2 = np.linalg.norm(e2) + * if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 # <<<<<<<<<<<<<< + * e2 = a[1] + * m2 = np.linalg.norm(e2) + */ + } + + /* "cythonfn.pyx":350 + * e2 = a[1] + * m2 = np.linalg.norm(e2) + * e20 = e2[0] / m2 # <<<<<<<<<<<<<< + * e21 = e2[1] / m2 + * e22 = e2[2] / m2 + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_e2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_m2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_e20 = __pyx_t_11; + + /* "cythonfn.pyx":351 + * m2 = np.linalg.norm(e2) + * e20 = e2[0] / m2 + * e21 = e2[1] / m2 # <<<<<<<<<<<<<< + * e22 = e2[2] / m2 + * + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_e2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_m2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_e21 = __pyx_t_11; + + /* "cythonfn.pyx":352 + * e20 = e2[0] / m2 + * e21 = e2[1] / m2 + * e22 = e2[2] / m2 # <<<<<<<<<<<<<< + * + * # normalize e3 + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_e2, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_m2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_e22 = __pyx_t_11; + + /* "cythonfn.pyx":355 + * + * # normalize e3 + * m3 = np.linalg.norm(e3) # <<<<<<<<<<<<<< + * if abs(m3) < 1.0E-6: # if the module is less than 1.0E-6 + * e3 = a[2] + */ + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_linalg); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_norm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (!__pyx_t_1) { + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_e3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + } else { + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL; + __Pyx_INCREF(__pyx_v_e3); + __Pyx_GIVEREF(__pyx_v_e3); + PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_e3); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_m3 = __pyx_t_11; + + /* "cythonfn.pyx":356 + * # normalize e3 + * m3 = np.linalg.norm(e3) + * if abs(m3) < 1.0E-6: # if the module is less than 1.0E-6 # <<<<<<<<<<<<<< + * e3 = a[2] + * m3 = np.linalg.norm(e3) + */ + __pyx_t_12 = ((fabs(__pyx_v_m3) < 1.0E-6) != 0); + if (__pyx_t_12) { + + /* "cythonfn.pyx":357 + * m3 = np.linalg.norm(e3) + * if abs(m3) < 1.0E-6: # if the module is less than 1.0E-6 + * e3 = a[2] # <<<<<<<<<<<<<< + * m3 = np.linalg.norm(e3) + * e30 = e3[0] / m3 + */ + __pyx_t_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_a), 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF_SET(__pyx_v_e3, __pyx_t_2); + __pyx_t_2 = 0; + + /* "cythonfn.pyx":358 + * if abs(m3) < 1.0E-6: # if the module is less than 1.0E-6 + * e3 = a[2] + * m3 = np.linalg.norm(e3) # <<<<<<<<<<<<<< + * e30 = e3[0] / m3 + * e31 = e3[1] / m3 + */ + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_linalg); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_norm); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (!__pyx_t_5) { + __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_e3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + } else { + __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); __pyx_t_5 = NULL; + __Pyx_INCREF(__pyx_v_e3); + __Pyx_GIVEREF(__pyx_v_e3); + PyTuple_SET_ITEM(__pyx_t_1, 0+1, __pyx_v_e3); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_m3 = __pyx_t_11; + + /* "cythonfn.pyx":356 + * # normalize e3 + * m3 = np.linalg.norm(e3) + * if abs(m3) < 1.0E-6: # if the module is less than 1.0E-6 # <<<<<<<<<<<<<< + * e3 = a[2] + * m3 = np.linalg.norm(e3) + */ + } + + /* "cythonfn.pyx":359 + * e3 = a[2] + * m3 = np.linalg.norm(e3) + * e30 = e3[0] / m3 # <<<<<<<<<<<<<< + * e31 = e3[1] / m3 + * e32 = e3[2] / m3 + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_e3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_m3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 359; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_e30 = __pyx_t_11; + + /* "cythonfn.pyx":360 + * m3 = np.linalg.norm(e3) + * e30 = e3[0] / m3 + * e31 = e3[1] / m3 # <<<<<<<<<<<<<< + * e32 = e3[2] / m3 + * + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_e3, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_m3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 360; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_e31 = __pyx_t_11; + + /* "cythonfn.pyx":361 + * e30 = e3[0] / m3 + * e31 = e3[1] / m3 + * e32 = e3[2] / m3 # <<<<<<<<<<<<<< + * + * # Computes the FFT of the charge + */ + __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_e3, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_m3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_e32 = __pyx_t_11; + + /* "cythonfn.pyx":364 + * + * # Computes the FFT of the charge + * cdef np.ndarray[complex, ndim = 3] fft_charge = np.fft.fftn(charge) # <<<<<<<<<<<<<< + * nr = charge.shape + * + */ + __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_fft); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fftn); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + } + } + if (!__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_charge)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + } else { + __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL; + __Pyx_INCREF(((PyObject *)__pyx_v_charge)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_charge)); + PyTuple_SET_ITEM(__pyx_t_5, 0+1, ((PyObject *)__pyx_v_charge)); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_13 = ((PyArrayObject *)__pyx_t_1); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_fft_charge.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) { + __pyx_v_fft_charge = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.buf = NULL; + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } else {__pyx_pybuffernd_fft_charge.diminfo[0].strides = __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_fft_charge.diminfo[0].shape = __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_fft_charge.diminfo[1].strides = __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_fft_charge.diminfo[1].shape = __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_fft_charge.diminfo[2].strides = __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_fft_charge.diminfo[2].shape = __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.shape[2]; + } + } + __pyx_t_13 = 0; + __pyx_v_fft_charge = ((PyArrayObject *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "cythonfn.pyx":365 + * # Computes the FFT of the charge + * cdef np.ndarray[complex, ndim = 3] fft_charge = np.fft.fftn(charge) + * nr = charge.shape # <<<<<<<<<<<<<< + * + * nr0, nr1, nr2 = nr[0], nr[1], nr[2] + */ + __pyx_t_14 = __pyx_v_charge->dimensions; + __pyx_v_nr = __pyx_t_14; + + /* "cythonfn.pyx":367 + * nr = charge.shape + * + * nr0, nr1, nr2 = nr[0], nr[1], nr[2] # <<<<<<<<<<<<<< + * x00, x01, x02 = x0[0], x0[1], x0[2] + * nxx, nyy, nzz = nx, ny, nz + */ + __pyx_t_15 = (__pyx_v_nr[0]); + __pyx_t_16 = (__pyx_v_nr[1]); + __pyx_t_17 = (__pyx_v_nr[2]); + __pyx_v_nr0 = __pyx_t_15; + __pyx_v_nr1 = __pyx_t_16; + __pyx_v_nr2 = __pyx_t_17; + + /* "cythonfn.pyx":368 + * + * nr0, nr1, nr2 = nr[0], nr[1], nr[2] + * x00, x01, x02 = x0[0], x0[1], x0[2] # <<<<<<<<<<<<<< + * nxx, nyy, nzz = nx, ny, nz + * + */ + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x0, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x0, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_18 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_18 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_x0, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 368; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_x00 = __pyx_t_11; + __pyx_v_x01 = __pyx_t_18; + __pyx_v_x02 = __pyx_t_19; + + /* "cythonfn.pyx":369 + * nr0, nr1, nr2 = nr[0], nr[1], nr[2] + * x00, x01, x02 = x0[0], x0[1], x0[2] + * nxx, nyy, nzz = nx, ny, nz # <<<<<<<<<<<<<< + * + * # Steps along the e1 and e2 directions... + */ + __pyx_t_20 = __Pyx_PyInt_As_long(__pyx_v_nx); if (unlikely((__pyx_t_20 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_21 = __Pyx_PyInt_As_long(__pyx_v_ny); if (unlikely((__pyx_t_21 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __pyx_v_nz; + __Pyx_INCREF(__pyx_t_1); + __pyx_v_nxx = __pyx_t_20; + __pyx_v_nyy = __pyx_t_21; + __pyx_v_nzz = __pyx_t_1; + __pyx_t_1 = 0; + + /* "cythonfn.pyx":372 + * + * # Steps along the e1 and e2 directions... + * deltax = m1 / (nx - 1) # <<<<<<<<<<<<<< + * deltay = m2 / (ny - 1) + * deltaz = m3 / (nz - 1) + */ + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_m1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_v_nx, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_deltax = __pyx_t_19; + + /* "cythonfn.pyx":373 + * # Steps along the e1 and e2 directions... + * deltax = m1 / (nx - 1) + * deltay = m2 / (ny - 1) # <<<<<<<<<<<<<< + * deltaz = m3 / (nz - 1) + * + */ + __pyx_t_5 = PyFloat_FromDouble(__pyx_v_m2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_v_ny, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_deltay = __pyx_t_19; + + /* "cythonfn.pyx":374 + * deltax = m1 / (nx - 1) + * deltay = m2 / (ny - 1) + * deltaz = m3 / (nz - 1) # <<<<<<<<<<<<<< + * + * for i in range(0, nxx): + */ + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_m3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_v_nz, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_deltaz = __pyx_t_19; + + /* "cythonfn.pyx":376 + * deltaz = m3 / (nz - 1) + * + * for i in range(0, nxx): # <<<<<<<<<<<<<< + * for j in range(0, nyy): + * for k in range(0, nzz): + */ + __pyx_t_21 = __pyx_v_nxx; + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) { + __pyx_v_i = __pyx_t_22; + + /* "cythonfn.pyx":377 + * + * for i in range(0, nxx): + * for j in range(0, nyy): # <<<<<<<<<<<<<< + * for k in range(0, nzz): + * X[i, j, k] = i * deltax + */ + __pyx_t_20 = __pyx_v_nyy; + for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_t_20; __pyx_t_23+=1) { + __pyx_v_j = __pyx_t_23; + + /* "cythonfn.pyx":378 + * for i in range(0, nxx): + * for j in range(0, nyy): + * for k in range(0, nzz): # <<<<<<<<<<<<<< + * X[i, j, k] = i * deltax + * Y[i, j, k] = j * deltay + */ + __pyx_t_24 = __Pyx_PyInt_As_long(__pyx_v_nzz); if (unlikely((__pyx_t_24 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + for (__pyx_t_25 = 0; __pyx_t_25 < __pyx_t_24; __pyx_t_25+=1) { + __pyx_v_k = __pyx_t_25; + + /* "cythonfn.pyx":379 + * for j in range(0, nyy): + * for k in range(0, nzz): + * X[i, j, k] = i * deltax # <<<<<<<<<<<<<< + * Y[i, j, k] = j * deltay + * Z[i, j, k] = k * deltaz + */ + __pyx_t_26 = __pyx_v_i; + __pyx_t_27 = __pyx_v_j; + __pyx_t_28 = __pyx_v_k; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_26 >= (size_t)__pyx_v_X.shape[0])) __pyx_t_29 = 0; + if (unlikely(__pyx_t_27 >= (size_t)__pyx_v_X.shape[1])) __pyx_t_29 = 1; + if (unlikely(__pyx_t_28 >= (size_t)__pyx_v_X.shape[2])) __pyx_t_29 = 2; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_X.data + __pyx_t_26 * __pyx_v_X.strides[0]) ) + __pyx_t_27 * __pyx_v_X.strides[1]) ) + __pyx_t_28 * __pyx_v_X.strides[2]) )) = (__pyx_v_i * __pyx_v_deltax); + + /* "cythonfn.pyx":380 + * for k in range(0, nzz): + * X[i, j, k] = i * deltax + * Y[i, j, k] = j * deltay # <<<<<<<<<<<<<< + * Z[i, j, k] = k * deltaz + * + */ + __pyx_t_30 = __pyx_v_i; + __pyx_t_31 = __pyx_v_j; + __pyx_t_32 = __pyx_v_k; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_30 >= (size_t)__pyx_v_Y.shape[0])) __pyx_t_29 = 0; + if (unlikely(__pyx_t_31 >= (size_t)__pyx_v_Y.shape[1])) __pyx_t_29 = 1; + if (unlikely(__pyx_t_32 >= (size_t)__pyx_v_Y.shape[2])) __pyx_t_29 = 2; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_Y.data + __pyx_t_30 * __pyx_v_Y.strides[0]) ) + __pyx_t_31 * __pyx_v_Y.strides[1]) ) + __pyx_t_32 * __pyx_v_Y.strides[2]) )) = (__pyx_v_j * __pyx_v_deltay); + + /* "cythonfn.pyx":381 + * X[i, j, k] = i * deltax + * Y[i, j, k] = j * deltay + * Z[i, j, k] = k * deltaz # <<<<<<<<<<<<<< + * + * # loop(s) over the G points + */ + __pyx_t_33 = __pyx_v_i; + __pyx_t_34 = __pyx_v_j; + __pyx_t_35 = __pyx_v_k; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_33 >= (size_t)__pyx_v_Z.shape[0])) __pyx_t_29 = 0; + if (unlikely(__pyx_t_34 >= (size_t)__pyx_v_Z.shape[1])) __pyx_t_29 = 1; + if (unlikely(__pyx_t_35 >= (size_t)__pyx_v_Z.shape[2])) __pyx_t_29 = 2; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + *((double *) ( /* dim=2 */ (( /* dim=1 */ (( /* dim=0 */ (__pyx_v_Z.data + __pyx_t_33 * __pyx_v_Z.strides[0]) ) + __pyx_t_34 * __pyx_v_Z.strides[1]) ) + __pyx_t_35 * __pyx_v_Z.strides[2]) )) = (__pyx_v_k * __pyx_v_deltaz); + } + } + } + + /* "cythonfn.pyx":384 + * + * # loop(s) over the G points + * for x in range(0, nr0): # <<<<<<<<<<<<<< + * for y in range(0, nr1): + * for z in range(0, nr2): + */ + __pyx_t_21 = __pyx_v_nr0; + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) { + __pyx_v_x = __pyx_t_22; + + /* "cythonfn.pyx":385 + * # loop(s) over the G points + * for x in range(0, nr0): + * for y in range(0, nr1): # <<<<<<<<<<<<<< + * for z in range(0, nr2): + * + */ + __pyx_t_20 = __pyx_v_nr1; + for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_t_20; __pyx_t_23+=1) { + __pyx_v_y = __pyx_t_23; + + /* "cythonfn.pyx":386 + * for x in range(0, nr0): + * for y in range(0, nr1): + * for z in range(0, nr2): # <<<<<<<<<<<<<< + * + * # eigx=exp(iG*e1+iGx0), eigy=(iG*e2), eigz=(iG*e3) + */ + __pyx_t_24 = __pyx_v_nr2; + for (__pyx_t_25 = 0; __pyx_t_25 < __pyx_t_24; __pyx_t_25+=1) { + __pyx_v_z = __pyx_t_25; + + /* "cythonfn.pyx":390 + * # eigx=exp(iG*e1+iGx0), eigy=(iG*e2), eigz=(iG*e3) + * # compute these factors to save CPU time + * for i in range(0, nxx): # <<<<<<<<<<<<<< + * arg = (2.0 * pi * complesso2(0.0, 1.0) * + * (i * deltax * (e10 * G[x, y, z, 0] + e11 * G[x, y, z, 1] + e12 * G[x, y, z, 2]) + + */ + __pyx_t_36 = __pyx_v_nxx; + for (__pyx_t_37 = 0; __pyx_t_37 < __pyx_t_36; __pyx_t_37+=1) { + __pyx_v_i = __pyx_t_37; + + /* "cythonfn.pyx":392 + * for i in range(0, nxx): + * arg = (2.0 * pi * complesso2(0.0, 1.0) * + * (i * deltax * (e10 * G[x, y, z, 0] + e11 * G[x, y, z, 1] + e12 * G[x, y, z, 2]) + # <<<<<<<<<<<<<< + * (x00 * G[x, y, z, 0] + x01 * G[x, y, z, 1] + x02 * G[x, y, z, 2]))) + * eigx[i] = cexp(arg) # much more efficient with cexp + */ + __pyx_t_38 = __pyx_v_x; + __pyx_t_39 = __pyx_v_y; + __pyx_t_40 = __pyx_v_z; + __pyx_t_41 = 0; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_38 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_39 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_40 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_41 < 0) { + __pyx_t_41 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_41 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_41 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_42 = __pyx_v_x; + __pyx_t_43 = __pyx_v_y; + __pyx_t_44 = __pyx_v_z; + __pyx_t_45 = 1; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_42 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_43 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_44 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_45 < 0) { + __pyx_t_45 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_45 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_45 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_46 = __pyx_v_x; + __pyx_t_47 = __pyx_v_y; + __pyx_t_48 = __pyx_v_z; + __pyx_t_49 = 2; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_46 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_47 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_48 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_49 < 0) { + __pyx_t_49 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_49 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_49 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "cythonfn.pyx":393 + * arg = (2.0 * pi * complesso2(0.0, 1.0) * + * (i * deltax * (e10 * G[x, y, z, 0] + e11 * G[x, y, z, 1] + e12 * G[x, y, z, 2]) + + * (x00 * G[x, y, z, 0] + x01 * G[x, y, z, 1] + x02 * G[x, y, z, 2]))) # <<<<<<<<<<<<<< + * eigx[i] = cexp(arg) # much more efficient with cexp + * + */ + __pyx_t_50 = __pyx_v_x; + __pyx_t_51 = __pyx_v_y; + __pyx_t_52 = __pyx_v_z; + __pyx_t_53 = 0; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_50 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_51 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_52 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_53 < 0) { + __pyx_t_53 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_53 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_53 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_54 = __pyx_v_x; + __pyx_t_55 = __pyx_v_y; + __pyx_t_56 = __pyx_v_z; + __pyx_t_57 = 1; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_54 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_55 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_56 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_57 < 0) { + __pyx_t_57 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_57 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_57 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_58 = __pyx_v_x; + __pyx_t_59 = __pyx_v_y; + __pyx_t_60 = __pyx_v_z; + __pyx_t_61 = 2; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_58 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_59 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_60 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_61 < 0) { + __pyx_t_61 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_61 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_61 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "cythonfn.pyx":391 + * # compute these factors to save CPU time + * for i in range(0, nxx): + * arg = (2.0 * pi * complesso2(0.0, 1.0) * # <<<<<<<<<<<<<< + * (i * deltax * (e10 * G[x, y, z, 0] + e11 * G[x, y, z, 1] + e12 * G[x, y, z, 2]) + + * (x00 * G[x, y, z, 0] + x01 * G[x, y, z, 1] + x02 * G[x, y, z, 2]))) + */ + __pyx_v_arg = __Pyx_c_prod(__Pyx_c_prod(__pyx_t_double_complex_from_parts((2.0 * __pyx_v_8cythonfn_pi), 0), __pyx_f_8cythonfn_complesso2(0.0, 1.0)), __pyx_t_double_complex_from_parts((((__pyx_v_i * __pyx_v_deltax) * (((__pyx_v_e10 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_40, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_41, __pyx_pybuffernd_G.diminfo[3].strides))) + (__pyx_v_e11 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_43, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_44, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_45, __pyx_pybuffernd_G.diminfo[3].strides)))) + (__pyx_v_e12 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_48, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_49, __pyx_pybuffernd_G.diminfo[3].strides))))) + (((__pyx_v_x00 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_50, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_51, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_52, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_53, __pyx_pybuffernd_G.diminfo[3].strides))) + (__pyx_v_x01 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_56, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_57, __pyx_pybuffernd_G.diminfo[3].strides)))) + (__pyx_v_x02 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_58, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_59, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_60, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_61, __pyx_pybuffernd_G.diminfo[3].strides))))), 0)); + + /* "cythonfn.pyx":394 + * (i * deltax * (e10 * G[x, y, z, 0] + e11 * G[x, y, z, 1] + e12 * G[x, y, z, 2]) + + * (x00 * G[x, y, z, 0] + x01 * G[x, y, z, 1] + x02 * G[x, y, z, 2]))) + * eigx[i] = cexp(arg) # much more efficient with cexp # <<<<<<<<<<<<<< + * + * for j in range(0, nyy): + */ + __pyx_t_62 = __pyx_v_i; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_62 >= (size_t)__pyx_pybuffernd_eigx.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + *__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigx.rcbuffer->pybuffer.buf, __pyx_t_62, __pyx_pybuffernd_eigx.diminfo[0].strides) = cexp(__pyx_v_arg); + } + + /* "cythonfn.pyx":396 + * eigx[i] = cexp(arg) # much more efficient with cexp + * + * for j in range(0, nyy): # <<<<<<<<<<<<<< + * arg = (2.0 * pi * complesso2(0.0, 1.0) * + * (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) + */ + __pyx_t_36 = __pyx_v_nyy; + for (__pyx_t_37 = 0; __pyx_t_37 < __pyx_t_36; __pyx_t_37+=1) { + __pyx_v_j = __pyx_t_37; + + /* "cythonfn.pyx":398 + * for j in range(0, nyy): + * arg = (2.0 * pi * complesso2(0.0, 1.0) * + * (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) # <<<<<<<<<<<<<< + * eigy[j] = cexp(arg) # much more efficient with cexp + * + */ + __pyx_t_63 = __pyx_v_x; + __pyx_t_64 = __pyx_v_y; + __pyx_t_65 = __pyx_v_z; + __pyx_t_66 = 0; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_63 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_64 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_65 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_66 < 0) { + __pyx_t_66 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_66 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_66 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_67 = __pyx_v_x; + __pyx_t_68 = __pyx_v_y; + __pyx_t_69 = __pyx_v_z; + __pyx_t_70 = 1; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_67 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_68 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_69 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_70 < 0) { + __pyx_t_70 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_70 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_70 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_71 = __pyx_v_x; + __pyx_t_72 = __pyx_v_y; + __pyx_t_73 = __pyx_v_z; + __pyx_t_74 = 2; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_71 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_72 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_73 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_74 < 0) { + __pyx_t_74 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_74 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_74 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "cythonfn.pyx":397 + * + * for j in range(0, nyy): + * arg = (2.0 * pi * complesso2(0.0, 1.0) * # <<<<<<<<<<<<<< + * (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) + * eigy[j] = cexp(arg) # much more efficient with cexp + */ + __pyx_v_arg = __Pyx_c_prod(__Pyx_c_prod(__pyx_t_double_complex_from_parts((2.0 * __pyx_v_8cythonfn_pi), 0), __pyx_f_8cythonfn_complesso2(0.0, 1.0)), __pyx_t_double_complex_from_parts(((__pyx_v_j * __pyx_v_deltay) * (((__pyx_v_e20 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_64, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_65, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_66, __pyx_pybuffernd_G.diminfo[3].strides))) + (__pyx_v_e21 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_67, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_68, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_69, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_70, __pyx_pybuffernd_G.diminfo[3].strides)))) + (__pyx_v_e22 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_71, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_72, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_73, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_74, __pyx_pybuffernd_G.diminfo[3].strides))))), 0)); + + /* "cythonfn.pyx":399 + * arg = (2.0 * pi * complesso2(0.0, 1.0) * + * (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) + * eigy[j] = cexp(arg) # much more efficient with cexp # <<<<<<<<<<<<<< + * + * for k in range(0, nzz): + */ + __pyx_t_75 = __pyx_v_j; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_75 >= (size_t)__pyx_pybuffernd_eigy.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + *__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigy.rcbuffer->pybuffer.buf, __pyx_t_75, __pyx_pybuffernd_eigy.diminfo[0].strides) = cexp(__pyx_v_arg); + } + + /* "cythonfn.pyx":401 + * eigy[j] = cexp(arg) # much more efficient with cexp + * + * for k in range(0, nzz): # <<<<<<<<<<<<<< + * arg = (2.0 * pi * complesso2(0.0, 1.0) * + * (k * deltaz * (e30 * G[x, y, z, 0] + e31 * G[x, y, z, 1] + e32 * G[x, y, z, 2]))) + */ + __pyx_t_36 = __Pyx_PyInt_As_long(__pyx_v_nzz); if (unlikely((__pyx_t_36 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + for (__pyx_t_37 = 0; __pyx_t_37 < __pyx_t_36; __pyx_t_37+=1) { + __pyx_v_k = __pyx_t_37; + + /* "cythonfn.pyx":403 + * for k in range(0, nzz): + * arg = (2.0 * pi * complesso2(0.0, 1.0) * + * (k * deltaz * (e30 * G[x, y, z, 0] + e31 * G[x, y, z, 1] + e32 * G[x, y, z, 2]))) # <<<<<<<<<<<<<< + * eigz[k] = cexp(arg) # much more efficient with cexp + * + */ + __pyx_t_76 = __pyx_v_x; + __pyx_t_77 = __pyx_v_y; + __pyx_t_78 = __pyx_v_z; + __pyx_t_79 = 0; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_76 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_77 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_78 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_79 < 0) { + __pyx_t_79 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_79 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_79 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_80 = __pyx_v_x; + __pyx_t_81 = __pyx_v_y; + __pyx_t_82 = __pyx_v_z; + __pyx_t_83 = 1; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_80 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_81 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_82 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_83 < 0) { + __pyx_t_83 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_83 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_83 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_84 = __pyx_v_x; + __pyx_t_85 = __pyx_v_y; + __pyx_t_86 = __pyx_v_z; + __pyx_t_87 = 2; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_84 >= (size_t)__pyx_pybuffernd_G.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_85 >= (size_t)__pyx_pybuffernd_G.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_86 >= (size_t)__pyx_pybuffernd_G.diminfo[2].shape)) __pyx_t_29 = 2; + if (__pyx_t_87 < 0) { + __pyx_t_87 += __pyx_pybuffernd_G.diminfo[3].shape; + if (unlikely(__pyx_t_87 < 0)) __pyx_t_29 = 3; + } else if (unlikely(__pyx_t_87 >= __pyx_pybuffernd_G.diminfo[3].shape)) __pyx_t_29 = 3; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + + /* "cythonfn.pyx":402 + * + * for k in range(0, nzz): + * arg = (2.0 * pi * complesso2(0.0, 1.0) * # <<<<<<<<<<<<<< + * (k * deltaz * (e30 * G[x, y, z, 0] + e31 * G[x, y, z, 1] + e32 * G[x, y, z, 2]))) + * eigz[k] = cexp(arg) # much more efficient with cexp + */ + __pyx_v_arg = __Pyx_c_prod(__Pyx_c_prod(__pyx_t_double_complex_from_parts((2.0 * __pyx_v_8cythonfn_pi), 0), __pyx_f_8cythonfn_complesso2(0.0, 1.0)), __pyx_t_double_complex_from_parts(((__pyx_v_k * __pyx_v_deltaz) * (((__pyx_v_e30 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_76, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_77, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_78, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_79, __pyx_pybuffernd_G.diminfo[3].strides))) + (__pyx_v_e31 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_80, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_81, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_82, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_83, __pyx_pybuffernd_G.diminfo[3].strides)))) + (__pyx_v_e32 * (*__Pyx_BufPtrStrided4d(double *, __pyx_pybuffernd_G.rcbuffer->pybuffer.buf, __pyx_t_84, __pyx_pybuffernd_G.diminfo[0].strides, __pyx_t_85, __pyx_pybuffernd_G.diminfo[1].strides, __pyx_t_86, __pyx_pybuffernd_G.diminfo[2].strides, __pyx_t_87, __pyx_pybuffernd_G.diminfo[3].strides))))), 0)); + + /* "cythonfn.pyx":404 + * arg = (2.0 * pi * complesso2(0.0, 1.0) * + * (k * deltaz * (e30 * G[x, y, z, 0] + e31 * G[x, y, z, 1] + e32 * G[x, y, z, 2]))) + * eigz[k] = cexp(arg) # much more efficient with cexp # <<<<<<<<<<<<<< + * + * for i in range(0, nxx): + */ + __pyx_t_88 = __pyx_v_k; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_88 >= (size_t)__pyx_pybuffernd_eigz.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + *__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigz.rcbuffer->pybuffer.buf, __pyx_t_88, __pyx_pybuffernd_eigz.diminfo[0].strides) = cexp(__pyx_v_arg); + } + + /* "cythonfn.pyx":406 + * eigz[k] = cexp(arg) # much more efficient with cexp + * + * for i in range(0, nxx): # <<<<<<<<<<<<<< + * for j in range(0, nyy): + * for k in range(0, nzz): + */ + __pyx_t_36 = __pyx_v_nxx; + for (__pyx_t_37 = 0; __pyx_t_37 < __pyx_t_36; __pyx_t_37+=1) { + __pyx_v_i = __pyx_t_37; + + /* "cythonfn.pyx":407 + * + * for i in range(0, nxx): + * for j in range(0, nyy): # <<<<<<<<<<<<<< + * for k in range(0, nzz): + * W[i, j, k] = W[i, j, k] + fft_charge[x, y, z] * eigx[i] * eigy[j] * eigz[k] + */ + __pyx_t_89 = __pyx_v_nyy; + for (__pyx_t_90 = 0; __pyx_t_90 < __pyx_t_89; __pyx_t_90+=1) { + __pyx_v_j = __pyx_t_90; + + /* "cythonfn.pyx":408 + * for i in range(0, nxx): + * for j in range(0, nyy): + * for k in range(0, nzz): # <<<<<<<<<<<<<< + * W[i, j, k] = W[i, j, k] + fft_charge[x, y, z] * eigx[i] * eigy[j] * eigz[k] + * + */ + __pyx_t_91 = __Pyx_PyInt_As_long(__pyx_v_nzz); if (unlikely((__pyx_t_91 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + for (__pyx_t_92 = 0; __pyx_t_92 < __pyx_t_91; __pyx_t_92+=1) { + __pyx_v_k = __pyx_t_92; + + /* "cythonfn.pyx":409 + * for j in range(0, nyy): + * for k in range(0, nzz): + * W[i, j, k] = W[i, j, k] + fft_charge[x, y, z] * eigx[i] * eigy[j] * eigz[k] # <<<<<<<<<<<<<< + * + * W = W / (nr[0] * nr[1] * nr[2]) + */ + __pyx_t_93 = __pyx_v_i; + __pyx_t_94 = __pyx_v_j; + __pyx_t_95 = __pyx_v_k; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_93 >= (size_t)__pyx_pybuffernd_W.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_94 >= (size_t)__pyx_pybuffernd_W.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_95 >= (size_t)__pyx_pybuffernd_W.diminfo[2].shape)) __pyx_t_29 = 2; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_96 = __pyx_v_x; + __pyx_t_97 = __pyx_v_y; + __pyx_t_98 = __pyx_v_z; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_96 >= (size_t)__pyx_pybuffernd_fft_charge.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_97 >= (size_t)__pyx_pybuffernd_fft_charge.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_98 >= (size_t)__pyx_pybuffernd_fft_charge.diminfo[2].shape)) __pyx_t_29 = 2; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_99 = __pyx_v_i; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_99 >= (size_t)__pyx_pybuffernd_eigx.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_100 = __pyx_v_j; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_100 >= (size_t)__pyx_pybuffernd_eigy.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_101 = __pyx_v_k; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_101 >= (size_t)__pyx_pybuffernd_eigz.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + __pyx_t_102 = __pyx_v_i; + __pyx_t_103 = __pyx_v_j; + __pyx_t_104 = __pyx_v_k; + __pyx_t_29 = -1; + if (unlikely(__pyx_t_102 >= (size_t)__pyx_pybuffernd_W.diminfo[0].shape)) __pyx_t_29 = 0; + if (unlikely(__pyx_t_103 >= (size_t)__pyx_pybuffernd_W.diminfo[1].shape)) __pyx_t_29 = 1; + if (unlikely(__pyx_t_104 >= (size_t)__pyx_pybuffernd_W.diminfo[2].shape)) __pyx_t_29 = 2; + if (unlikely(__pyx_t_29 != -1)) { + __Pyx_RaiseBufferIndexError(__pyx_t_29); + {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + } + *__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_W.rcbuffer->pybuffer.buf, __pyx_t_102, __pyx_pybuffernd_W.diminfo[0].strides, __pyx_t_103, __pyx_pybuffernd_W.diminfo[1].strides, __pyx_t_104, __pyx_pybuffernd_W.diminfo[2].strides) = __Pyx_c_sum((*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_W.rcbuffer->pybuffer.buf, __pyx_t_93, __pyx_pybuffernd_W.diminfo[0].strides, __pyx_t_94, __pyx_pybuffernd_W.diminfo[1].strides, __pyx_t_95, __pyx_pybuffernd_W.diminfo[2].strides)), __Pyx_c_prod(__Pyx_c_prod(__Pyx_c_prod((*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.buf, __pyx_t_96, __pyx_pybuffernd_fft_charge.diminfo[0].strides, __pyx_t_97, __pyx_pybuffernd_fft_charge.diminfo[1].strides, __pyx_t_98, __pyx_pybuffernd_fft_charge.diminfo[2].strides)), (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigx.rcbuffer->pybuffer.buf, __pyx_t_99, __pyx_pybuffernd_eigx.diminfo[0].strides))), (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigy.rcbuffer->pybuffer.buf, __pyx_t_100, __pyx_pybuffernd_eigy.diminfo[0].strides))), (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigz.rcbuffer->pybuffer.buf, __pyx_t_101, __pyx_pybuffernd_eigz.diminfo[0].strides)))); } - *__Pyx_BufPtrStrided2d(__pyx_t_double_complex *, __pyx_pybuffernd_Z.rcbuffer->pybuffer.buf, __pyx_t_79, __pyx_pybuffernd_Z.diminfo[0].strides, __pyx_t_80, __pyx_pybuffernd_Z.diminfo[1].strides) = __Pyx_c_sum((*__Pyx_BufPtrStrided2d(__pyx_t_double_complex *, __pyx_pybuffernd_Z.rcbuffer->pybuffer.buf, __pyx_t_72, __pyx_pybuffernd_Z.diminfo[0].strides, __pyx_t_73, __pyx_pybuffernd_Z.diminfo[1].strides)), __Pyx_c_prod(__Pyx_c_prod((*__Pyx_BufPtrStrided3d(__pyx_t_double_complex *, __pyx_pybuffernd_fft_charge.rcbuffer->pybuffer.buf, __pyx_t_74, __pyx_pybuffernd_fft_charge.diminfo[0].strides, __pyx_t_75, __pyx_pybuffernd_fft_charge.diminfo[1].strides, __pyx_t_76, __pyx_pybuffernd_fft_charge.diminfo[2].strides)), (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigx.rcbuffer->pybuffer.buf, __pyx_t_77, __pyx_pybuffernd_eigx.diminfo[0].strides))), (*__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_eigy.rcbuffer->pybuffer.buf, __pyx_t_78, __pyx_pybuffernd_eigy.diminfo[0].strides)))); } } } } } - /* "cythonfn.pyx":314 - * Z[i, j] = Z[i, j] + fft_charge[x, y, z] * eigx[i] * eigy[j] + /* "cythonfn.pyx":411 + * W[i, j, k] = W[i, j, k] + fft_charge[x, y, z] * eigx[i] * eigy[j] * eigz[k] * - * Z = Z / (nr[0] * nr[1] * nr[2]) # <<<<<<<<<<<<<< + * W = W / (nr[0] * nr[1] * nr[2]) # <<<<<<<<<<<<<< * - * return np.asarray(X), np.asarray(Y), np.asarray(Z) + * return np.asarray(X), np.asarray(Y), np.asarray(Z), np.asarray(W) */ - __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t((((__pyx_v_nr[0]) * (__pyx_v_nr[1])) * (__pyx_v_nr[2]))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyNumber_Divide(((PyObject *)__pyx_v_Z), __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_7 = ((PyArrayObject *)__pyx_t_3); + __pyx_t_5 = __Pyx_PyInt_From_Py_intptr_t((((__pyx_v_nr[0]) * (__pyx_v_nr[1])) * (__pyx_v_nr[2]))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyNumber_Divide(((PyObject *)__pyx_v_W), __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_7 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z.rcbuffer->pybuffer); - __pyx_t_25 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack); - if (unlikely(__pyx_t_25 < 0)) { - PyErr_Fetch(&__pyx_t_81, &__pyx_t_82, &__pyx_t_83); - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z.rcbuffer->pybuffer, (PyObject*)__pyx_v_Z, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) { - Py_XDECREF(__pyx_t_81); Py_XDECREF(__pyx_t_82); Py_XDECREF(__pyx_t_83); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_W.rcbuffer->pybuffer); + __pyx_t_29 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_W.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack); + if (unlikely(__pyx_t_29 < 0)) { + PyErr_Fetch(&__pyx_t_105, &__pyx_t_106, &__pyx_t_107); + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_W.rcbuffer->pybuffer, (PyObject*)__pyx_v_W, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) { + Py_XDECREF(__pyx_t_105); Py_XDECREF(__pyx_t_106); Py_XDECREF(__pyx_t_107); __Pyx_RaiseBufferFallbackError(); } else { - PyErr_Restore(__pyx_t_81, __pyx_t_82, __pyx_t_83); + PyErr_Restore(__pyx_t_105, __pyx_t_106, __pyx_t_107); } } - __pyx_pybuffernd_Z.diminfo[0].strides = __pyx_pybuffernd_Z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Z.diminfo[0].shape = __pyx_pybuffernd_Z.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Z.diminfo[1].strides = __pyx_pybuffernd_Z.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Z.diminfo[1].shape = __pyx_pybuffernd_Z.rcbuffer->pybuffer.shape[1]; - if (unlikely(__pyx_t_25 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_pybuffernd_W.diminfo[0].strides = __pyx_pybuffernd_W.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_W.diminfo[0].shape = __pyx_pybuffernd_W.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_W.diminfo[1].strides = __pyx_pybuffernd_W.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_W.diminfo[1].shape = __pyx_pybuffernd_W.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_W.diminfo[2].strides = __pyx_pybuffernd_W.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_W.diminfo[2].shape = __pyx_pybuffernd_W.rcbuffer->pybuffer.shape[2]; + if (unlikely(__pyx_t_29 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_t_7 = 0; - __Pyx_DECREF_SET(__pyx_v_Z, ((PyArrayObject *)__pyx_t_3)); - __pyx_t_3 = 0; + __Pyx_DECREF_SET(__pyx_v_W, ((PyArrayObject *)__pyx_t_4)); + __pyx_t_4 = 0; - /* "cythonfn.pyx":316 - * Z = Z / (nr[0] * nr[1] * nr[2]) + /* "cythonfn.pyx":413 + * W = W / (nr[0] * nr[1] * nr[2]) * - * return np.asarray(X), np.asarray(Y), np.asarray(Z) # <<<<<<<<<<<<<< + * return np.asarray(X), np.asarray(Y), np.asarray(Z), np.asarray(W) # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_X, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = NULL; - if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - if (!__pyx_t_5) { - __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GOTREF(__pyx_t_3); - } else { - __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL; - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 0+1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_Y, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_5 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_X, 3, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_5)) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_1, function); } } - if (!__pyx_t_5) { - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!__pyx_t_2) { + __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_GOTREF(__pyx_t_4); } else { - __pyx_t_84 = PyTuple_New(1+1); if (unlikely(!__pyx_t_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_84); - __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_84, 0, __pyx_t_5); __pyx_t_5 = NULL; - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_84, 0+1, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_84, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2); __pyx_t_2 = NULL; + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_84); __pyx_t_84 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_84 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_84)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_84); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_84, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_84); __pyx_t_84 = 0; - __pyx_t_84 = NULL; - if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_84 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_84)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_84); + __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_Y, 3, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_2); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __Pyx_DECREF_SET(__pyx_t_5, function); } } - if (!__pyx_t_84) { - __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_Z)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (!__pyx_t_2) { + __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_GOTREF(__pyx_t_1); } else { - __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_84); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_84); __pyx_t_84 = NULL; - __Pyx_INCREF(((PyObject *)__pyx_v_Z)); - __Pyx_GIVEREF(((PyObject *)__pyx_v_Z)); - PyTuple_SET_ITEM(__pyx_t_5, 0+1, ((PyObject *)__pyx_v_Z)); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_108 = PyTuple_New(1+1); if (unlikely(!__pyx_t_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_108); + __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_108, 0, __pyx_t_2); __pyx_t_2 = NULL; + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_108, 0+1, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_108, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_108); __pyx_t_108 = 0; } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_108 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_108); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_108, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_108); __pyx_t_108 = 0; + __pyx_t_108 = __pyx_memoryview_fromslice(__pyx_v_Z, 3, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_108); + __pyx_t_2 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + } + } + if (!__pyx_t_2) { + __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_108); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_108); __pyx_t_108 = 0; + __Pyx_GOTREF(__pyx_t_5); + } else { + __pyx_t_109 = PyTuple_New(1+1); if (unlikely(!__pyx_t_109)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_109); + __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_109, 0, __pyx_t_2); __pyx_t_2 = NULL; + __Pyx_GIVEREF(__pyx_t_108); + PyTuple_SET_ITEM(__pyx_t_109, 0+1, __pyx_t_108); + __pyx_t_108 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_109, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_109); __pyx_t_109 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_109 = __Pyx_GetModuleGlobalName(__pyx_n_s_np); if (unlikely(!__pyx_t_109)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_109); + __pyx_t_108 = __Pyx_PyObject_GetAttrStr(__pyx_t_109, __pyx_n_s_asarray); if (unlikely(!__pyx_t_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_108); + __Pyx_DECREF(__pyx_t_109); __pyx_t_109 = 0; + __pyx_t_109 = NULL; + if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_108))) { + __pyx_t_109 = PyMethod_GET_SELF(__pyx_t_108); + if (likely(__pyx_t_109)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_108); + __Pyx_INCREF(__pyx_t_109); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_108, function); + } + } + if (!__pyx_t_109) { + __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_108, ((PyObject *)__pyx_v_W)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + } else { + __pyx_t_2 = PyTuple_New(1+1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_109); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_109); __pyx_t_109 = NULL; + __Pyx_INCREF(((PyObject *)__pyx_v_W)); + __Pyx_GIVEREF(((PyObject *)__pyx_v_W)); + PyTuple_SET_ITEM(__pyx_t_2, 0+1, ((PyObject *)__pyx_v_W)); + __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_108, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __Pyx_DECREF(__pyx_t_108); __pyx_t_108 = 0; + __pyx_t_108 = PyTuple_New(4); if (unlikely(!__pyx_t_108)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_108); __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_108, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1); - __pyx_t_3 = 0; + PyTuple_SET_ITEM(__pyx_t_108, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_108, 2, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_108, 3, __pyx_t_3); __pyx_t_4 = 0; __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; + __pyx_t_5 = 0; + __pyx_t_3 = 0; + __pyx_r = __pyx_t_108; + __pyx_t_108 = 0; goto __pyx_L0; - /* "cythonfn.pyx":242 + /* "cythonfn.pyx":319 * * - * def FFTinterp2D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndim=4] G, np.ndarray[double, ndim=2] a, # <<<<<<<<<<<<<< - * x0, e1, e2, nx, ny): + * def FFTinterp3D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndim=4] G, np.ndarray[double, ndim=2] a, # <<<<<<<<<<<<<< + * x0, e1, e2, e3, nx, ny, nz): * */ @@ -7197,37 +9440,44 @@ static PyObject *__pyx_pf_8cythonfn_10FFTinterp2D_Cython(CYTHON_UNUSED PyObject __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1); - __Pyx_XDECREF(__pyx_t_84); + __Pyx_XDECREF(__pyx_t_108); + __Pyx_XDECREF(__pyx_t_109); { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_G.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_W.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_a.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_charge.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigx.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigy.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigz.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fft_charge.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("cythonfn.FFTinterp2D_Cython", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("cythonfn.FFTinterp3D_Cython", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_G.rcbuffer->pybuffer); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_W.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_a.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_charge.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigx.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigy.rcbuffer->pybuffer); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_eigz.rcbuffer->pybuffer); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_fft_charge.rcbuffer->pybuffer); __pyx_L2:; __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1); __PYX_XDEC_MEMVIEW(&__pyx_v_Y, 1); - __Pyx_XDECREF((PyObject *)__pyx_v_Z); + __PYX_XDEC_MEMVIEW(&__pyx_v_Z, 1); + __Pyx_XDECREF((PyObject *)__pyx_v_W); __Pyx_XDECREF((PyObject *)__pyx_v_eigx); __Pyx_XDECREF((PyObject *)__pyx_v_eigy); + __Pyx_XDECREF((PyObject *)__pyx_v_eigz); __Pyx_XDECREF((PyObject *)__pyx_v_fft_charge); + __Pyx_XDECREF(__pyx_v_nzz); __Pyx_XDECREF(__pyx_v_e1); __Pyx_XDECREF(__pyx_v_e2); + __Pyx_XDECREF(__pyx_v_e3); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; @@ -21587,6 +23837,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, {&__pyx_n_s_FFTinterp1D_Cython, __pyx_k_FFTinterp1D_Cython, sizeof(__pyx_k_FFTinterp1D_Cython), 0, 0, 1, 1}, {&__pyx_n_s_FFTinterp2D_Cython, __pyx_k_FFTinterp2D_Cython, sizeof(__pyx_k_FFTinterp2D_Cython), 0, 0, 1, 1}, + {&__pyx_n_s_FFTinterp3D_Cython, __pyx_k_FFTinterp3D_Cython, sizeof(__pyx_k_FFTinterp3D_Cython), 0, 0, 1, 1}, {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0}, {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0}, {&__pyx_n_s_G, __pyx_k_G, sizeof(__pyx_k_G), 0, 0, 1, 1}, @@ -21608,6 +23859,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_n_s_W, __pyx_k_W, sizeof(__pyx_k_W), 0, 0, 1, 1}, {&__pyx_n_s_X, __pyx_k_X, sizeof(__pyx_k_X), 0, 0, 1, 1}, {&__pyx_n_s_Y, __pyx_k_Y, sizeof(__pyx_k_Y), 0, 0, 1, 1}, {&__pyx_n_s_Z, __pyx_k_Z, sizeof(__pyx_k_Z), 0, 0, 1, 1}, @@ -21643,6 +23895,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_cythonfn, __pyx_k_cythonfn, sizeof(__pyx_k_cythonfn), 0, 0, 1, 1}, {&__pyx_n_s_deltax, __pyx_k_deltax, sizeof(__pyx_k_deltax), 0, 0, 1, 1}, {&__pyx_n_s_deltay, __pyx_k_deltay, sizeof(__pyx_k_deltay), 0, 0, 1, 1}, + {&__pyx_n_s_deltaz, __pyx_k_deltaz, sizeof(__pyx_k_deltaz), 0, 0, 1, 1}, {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, {&__pyx_n_s_e1, __pyx_k_e1, sizeof(__pyx_k_e1), 0, 0, 1, 1}, @@ -21653,11 +23906,16 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_e20, __pyx_k_e20, sizeof(__pyx_k_e20), 0, 0, 1, 1}, {&__pyx_n_s_e21, __pyx_k_e21, sizeof(__pyx_k_e21), 0, 0, 1, 1}, {&__pyx_n_s_e22, __pyx_k_e22, sizeof(__pyx_k_e22), 0, 0, 1, 1}, + {&__pyx_n_s_e3, __pyx_k_e3, sizeof(__pyx_k_e3), 0, 0, 1, 1}, + {&__pyx_n_s_e30, __pyx_k_e30, sizeof(__pyx_k_e30), 0, 0, 1, 1}, + {&__pyx_n_s_e31, __pyx_k_e31, sizeof(__pyx_k_e31), 0, 0, 1, 1}, + {&__pyx_n_s_e32, __pyx_k_e32, sizeof(__pyx_k_e32), 0, 0, 1, 1}, {&__pyx_n_s_ecutm, __pyx_k_ecutm, sizeof(__pyx_k_ecutm), 0, 0, 1, 1}, {&__pyx_n_s_ecutm2, __pyx_k_ecutm2, sizeof(__pyx_k_ecutm2), 0, 0, 1, 1}, {&__pyx_n_s_ecutrho, __pyx_k_ecutrho, sizeof(__pyx_k_ecutrho), 0, 0, 1, 1}, {&__pyx_n_s_eigx, __pyx_k_eigx, sizeof(__pyx_k_eigx), 0, 0, 1, 1}, {&__pyx_n_s_eigy, __pyx_k_eigy, sizeof(__pyx_k_eigy), 0, 0, 1, 1}, + {&__pyx_n_s_eigz, __pyx_k_eigz, sizeof(__pyx_k_eigz), 0, 0, 1, 1}, {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, @@ -21680,9 +23938,11 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0}, {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1}, + {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1}, {&__pyx_n_s_linalg, __pyx_k_linalg, sizeof(__pyx_k_linalg), 0, 0, 1, 1}, {&__pyx_n_s_m1, __pyx_k_m1, sizeof(__pyx_k_m1), 0, 0, 1, 1}, {&__pyx_n_s_m2, __pyx_k_m2, sizeof(__pyx_k_m2), 0, 0, 1, 1}, + {&__pyx_n_s_m3, __pyx_k_m3, sizeof(__pyx_k_m3), 0, 0, 1, 1}, {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, @@ -21702,6 +23962,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = { {&__pyx_n_s_nxx, __pyx_k_nxx, sizeof(__pyx_k_nxx), 0, 0, 1, 1}, {&__pyx_n_s_ny, __pyx_k_ny, sizeof(__pyx_k_ny), 0, 0, 1, 1}, {&__pyx_n_s_nyy, __pyx_k_nyy, sizeof(__pyx_k_nyy), 0, 0, 1, 1}, + {&__pyx_n_s_nz, __pyx_k_nz, sizeof(__pyx_k_nz), 0, 0, 1, 1}, + {&__pyx_n_s_nzz, __pyx_k_nzz, sizeof(__pyx_k_nzz), 0, 0, 1, 1}, {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, {&__pyx_n_s_pi, __pyx_k_pi, sizeof(__pyx_k_pi), 0, 0, 1, 1}, @@ -22041,6 +24303,18 @@ static int __Pyx_InitCachedConstants(void) { __Pyx_GIVEREF(__pyx_tuple__30); __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(8, 0, 42, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_mauropalumbo_pythonproject, __pyx_n_s_FFTinterp2D_Cython, 242, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /* "cythonfn.pyx":319 + * + * + * def FFTinterp3D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndim=4] G, np.ndarray[double, ndim=2] a, # <<<<<<<<<<<<<< + * x0, e1, e2, e3, nx, ny, nz): + * + */ + __pyx_tuple__32 = PyTuple_Pack(53, __pyx_n_s_charge, __pyx_n_s_G, __pyx_n_s_a, __pyx_n_s_x0, __pyx_n_s_e1, __pyx_n_s_e2, __pyx_n_s_e3, __pyx_n_s_nx, __pyx_n_s_ny, __pyx_n_s_nz, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_nr0, __pyx_n_s_nr1, __pyx_n_s_nr2, __pyx_n_s_nxx, __pyx_n_s_nyy, __pyx_n_s_x00, __pyx_n_s_x01, __pyx_n_s_x02, __pyx_n_s_e10, __pyx_n_s_e11, __pyx_n_s_e12, __pyx_n_s_e20, __pyx_n_s_e21, __pyx_n_s_e22, __pyx_n_s_e30, __pyx_n_s_e31, __pyx_n_s_e32, __pyx_n_s_m1, __pyx_n_s_m2, __pyx_n_s_m3, __pyx_n_s_deltax, __pyx_n_s_deltay, __pyx_n_s_deltaz, __pyx_n_s_xi, __pyx_n_s_yi, __pyx_n_s_zi, __pyx_n_s_arg, __pyx_n_s_X, __pyx_n_s_Y, __pyx_n_s_Z, __pyx_n_s_W, __pyx_n_s_eigx, __pyx_n_s_eigy, __pyx_n_s_eigz, __pyx_n_s_fft_charge, __pyx_n_s_nr, __pyx_n_s_nzz); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(10, 0, 53, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_mauropalumbo_pythonproject, __pyx_n_s_FFTinterp3D_Cython, 319, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + /* "View.MemoryView":278 * return self.name * @@ -22048,9 +24322,9 @@ static int __Pyx_InitCachedConstants(void) { * cdef strided = Enum("") # default * cdef indirect = Enum("") */ - __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__32); - __Pyx_GIVEREF(__pyx_tuple__32); + __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__34); + __Pyx_GIVEREF(__pyx_tuple__34); /* "View.MemoryView":279 * @@ -22059,9 +24333,9 @@ static int __Pyx_InitCachedConstants(void) { * cdef indirect = Enum("") * */ - __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__33)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__33); - __Pyx_GIVEREF(__pyx_tuple__33); + __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__35)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); /* "View.MemoryView":280 * cdef generic = Enum("") @@ -22070,9 +24344,9 @@ static int __Pyx_InitCachedConstants(void) { * * */ - __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__34); - __Pyx_GIVEREF(__pyx_tuple__34); + __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__36)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__36); + __Pyx_GIVEREF(__pyx_tuple__36); /* "View.MemoryView":283 * @@ -22081,9 +24355,9 @@ static int __Pyx_InitCachedConstants(void) { * cdef indirect_contiguous = Enum("") * */ - __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__35)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__35); - __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__37)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); /* "View.MemoryView":284 * @@ -22092,9 +24366,9 @@ static int __Pyx_InitCachedConstants(void) { * * */ - __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__36)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_tuple__36); - __Pyx_GIVEREF(__pyx_tuple__36); + __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__38)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_tuple__38); + __Pyx_GIVEREF(__pyx_tuple__38); __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; @@ -22353,6 +24627,18 @@ PyMODINIT_FUNC PyInit_cythonfn(void) if (PyDict_SetItem(__pyx_d, __pyx_n_s_FFTinterp2D_Cython, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "cythonfn.pyx":319 + * + * + * def FFTinterp3D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndim=4] G, np.ndarray[double, ndim=2] a, # <<<<<<<<<<<<<< + * x0, e1, e2, e3, nx, ny, nz): + * + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_8cythonfn_13FFTinterp3D_Cython, NULL, __pyx_n_s_cythonfn); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_FFTinterp3D_Cython, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 319; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + /* "cythonfn.pyx":1 * import numpy as np # <<<<<<<<<<<<<< * cimport numpy as np @@ -22383,7 +24669,7 @@ PyMODINIT_FUNC PyInit_cythonfn(void) * cdef strided = Enum("") # default * cdef indirect = Enum("") */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(generic); __Pyx_DECREF_SET(generic, __pyx_t_2); @@ -22397,7 +24683,7 @@ PyMODINIT_FUNC PyInit_cythonfn(void) * cdef indirect = Enum("") * */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__33, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(strided); __Pyx_DECREF_SET(strided, __pyx_t_2); @@ -22411,7 +24697,7 @@ PyMODINIT_FUNC PyInit_cythonfn(void) * * */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(indirect); __Pyx_DECREF_SET(indirect, __pyx_t_2); @@ -22425,7 +24711,7 @@ PyMODINIT_FUNC PyInit_cythonfn(void) * cdef indirect_contiguous = Enum("") * */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(contiguous); __Pyx_DECREF_SET(contiguous, __pyx_t_2); @@ -22439,7 +24725,7 @@ PyMODINIT_FUNC PyInit_cythonfn(void) * * */ - __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(indirect_contiguous); __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_2); diff --git a/postqe/cythonextensions/cythonfn.pyx b/postqe/cythonextensions/cythonfn.pyx index 211169a..5748530 100755 --- a/postqe/cythonextensions/cythonfn.pyx +++ b/postqe/cythonextensions/cythonfn.pyx @@ -252,7 +252,7 @@ def FFTinterp2D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndi cdef np.ndarray[complex, ndim = 2] Z = np.zeros((nx, ny), dtype=complex) cdef np.ndarray[complex] eigx = np.zeros(nx, dtype=complex) - cdef np.ndarray[complex] eigy = np.zeros(nx, dtype=complex) + cdef np.ndarray[complex] eigy = np.zeros(ny, dtype=complex) # normalize e1 m1 = np.linalg.norm(e1) @@ -304,7 +304,7 @@ def FFTinterp2D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndi for j in range(0, nyy): arg = (2.0 * pi * complesso2(0.0, 1.0) * - (j * deltax * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) + (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) eigy[j] = cexp(arg) # much more efficient with cexp for i in range(0, nxx): @@ -314,3 +314,100 @@ def FFTinterp2D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndi Z = Z / (nr[0] * nr[1] * nr[2]) return np.asarray(X), np.asarray(Y), np.asarray(Z) + + +def FFTinterp3D_Cython(np.ndarray[double, ndim=3] charge, np.ndarray[double, ndim=4] G, np.ndarray[double, ndim=2] a, + x0, e1, e2, e3, nx, ny, nz): + + cdef unsigned int i, j, k, x, y, z + cdef long nr0, nr1, nr2, nxx, nyy + cdef double x00, x01, x02, e10, e11, e12, e20, e21, e22, e30, e31, e32, m1, m2, m3, deltax, deltay, deltaz, xi, yi, zi + cdef double complex arg + + cdef double[:,:,:] X = np.zeros((nx, ny, nz)) + cdef double[:,:,:] Y = np.zeros((nx, ny, nz)) + cdef double[:,:,:] Z = np.zeros((nx, ny, nz)) + cdef np.ndarray[complex, ndim = 3] W = np.zeros((nx, ny, nz), dtype=complex) + + cdef np.ndarray[complex] eigx = np.zeros(nx, dtype=complex) + cdef np.ndarray[complex] eigy = np.zeros(ny, dtype=complex) + cdef np.ndarray[complex] eigz = np.zeros(nz, dtype=complex) + + # normalize e1 + m1 = np.linalg.norm(e1) + if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 + e1 = a[0] + m1 = np.linalg.norm(e1) + e10 = e1[0] / m1 + e11 = e1[1] / m1 + e12 = e1[2] / m1 + + # normalize e2 + m2 = np.linalg.norm(e2) + if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 + e2 = a[1] + m2 = np.linalg.norm(e2) + e20 = e2[0] / m2 + e21 = e2[1] / m2 + e22 = e2[2] / m2 + + # normalize e3 + m3 = np.linalg.norm(e3) + if abs(m3) < 1.0E-6: # if the module is less than 1.0E-6 + e3 = a[2] + m3 = np.linalg.norm(e3) + e30 = e3[0] / m3 + e31 = e3[1] / m3 + e32 = e3[2] / m3 + + # Computes the FFT of the charge + cdef np.ndarray[complex, ndim = 3] fft_charge = np.fft.fftn(charge) + nr = charge.shape + + nr0, nr1, nr2 = nr[0], nr[1], nr[2] + x00, x01, x02 = x0[0], x0[1], x0[2] + nxx, nyy, nzz = nx, ny, nz + + # Steps along the e1 and e2 directions... + deltax = m1 / (nx - 1) + deltay = m2 / (ny - 1) + deltaz = m3 / (nz - 1) + + for i in range(0, nxx): + for j in range(0, nyy): + for k in range(0, nzz): + X[i, j, k] = i * deltax + Y[i, j, k] = j * deltay + Z[i, j, k] = k * deltaz + + # loop(s) over the G points + for x in range(0, nr0): + for y in range(0, nr1): + for z in range(0, nr2): + + # eigx=exp(iG*e1+iGx0), eigy=(iG*e2), eigz=(iG*e3) + # compute these factors to save CPU time + for i in range(0, nxx): + arg = (2.0 * pi * complesso2(0.0, 1.0) * + (i * deltax * (e10 * G[x, y, z, 0] + e11 * G[x, y, z, 1] + e12 * G[x, y, z, 2]) + + (x00 * G[x, y, z, 0] + x01 * G[x, y, z, 1] + x02 * G[x, y, z, 2]))) + eigx[i] = cexp(arg) # much more efficient with cexp + + for j in range(0, nyy): + arg = (2.0 * pi * complesso2(0.0, 1.0) * + (j * deltay * (e20 * G[x, y, z, 0] + e21 * G[x, y, z, 1] + e22 * G[x, y, z, 2]))) + eigy[j] = cexp(arg) # much more efficient with cexp + + for k in range(0, nzz): + arg = (2.0 * pi * complesso2(0.0, 1.0) * + (k * deltaz * (e30 * G[x, y, z, 0] + e31 * G[x, y, z, 1] + e32 * G[x, y, z, 2]))) + eigz[k] = cexp(arg) # much more efficient with cexp + + for i in range(0, nxx): + for j in range(0, nyy): + for k in range(0, nzz): + W[i, j, k] = W[i, j, k] + fft_charge[x, y, z] * eigx[i] * eigy[j] * eigz[k] + + W = W / (nr[0] * nr[1] * nr[2]) + + return np.asarray(X), np.asarray(Y), np.asarray(Z), np.asarray(W) diff --git a/postqe/plot.py b/postqe/plot.py index 3fe41b9..e0ae5a6 100644 --- a/postqe/plot.py +++ b/postqe/plot.py @@ -15,7 +15,7 @@ import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d import axes3d -from .writecharge import write_1Dcharge_file, write_2Dcharge_file +from .writecharge import write_1Dcharge_file, write_2Dcharge_file, write_3Dcharge_file from .oldeos import calculate_fitted_points from .oldbands import set_high_symmetry_points, compute_kx from .constants import pi @@ -26,7 +26,7 @@ def FFTinterp1D(charge, G, a, x0, e1, nx): # normalize e1 m1 = np.linalg.norm(e1) if abs(m1) < 1.0E-6: # if the module is less than 1.0E-6 - e1 = a[1] + e1 = a[0] m1 = np.linalg.norm(e1) e1 = e1 / m1 @@ -78,9 +78,9 @@ def spherical1D(charge, G, a, x0, e1, nx): # normalize e1 m1 = np.linalg.norm(e1) if abs(m1) < 1.0E-6: # if the module is less than 1.0E-6 - e1 = a[1] + e1 = a[0] m1 = np.linalg.norm(e1) - e1 = e1 / m1 + #e1 = e1 / m1 # Computes the FFT of the charge fft_charge = np.fft.fftn(charge) @@ -117,14 +117,14 @@ def FFTinterp2D(charge, G, a, x0, e1, e2, nx, ny): # normalize e1 m1 = np.linalg.norm(e1) if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 - e1 = a[1] + e1 = a[0] m1 = np.linalg.norm(e1) e1 = e1 / m1 # normalize e2 m2 = np.linalg.norm(e2) if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 - e2 = a[2] + e2 = a[1] m2 = np.linalg.norm(e2) e2 = e2 / m2 @@ -154,17 +154,11 @@ def FFTinterp2D(charge, G, a, x0, e1, e2, nx, ny): # compute these factors to save CPU time eigx = np.zeros(nx, dtype=complex) for i in range(0, nx): - eigx[i] = np.exp(2.0 * pi * complex(0.0, 1.0) * (i * deltax * - (e1[0] * G[x, y, z, 0] + e1[1] * G[x, y, z, 1] + - e1[2] * G[x, y, z, 2]) + - (x0[0] * G[x, y, z, 0] + x0[1] * G[x, y, z, 1] + - x0[2] * G[x, y, z, 2]))) + np.exp(np.complex(0, 2.0 * pi * i * deltax * np.dot(e1, G[x, y, z])) + np.dot(x0, G[x, y, z])) eigy = np.zeros(ny, dtype=complex) for j in range(0, ny): - eigy[j] = np.exp(2.0 * pi * complex(0.0, 1.0) * (j * deltax * - (e2[0] * G[x, y, z, 0] + e2[1] * G[x, y, z, 1] + - e2[2] * G[x, y, z, 2]))) + eigy[j] = np.exp(np.complex(0, 2.0 * pi * j * deltay * np.dot(e2, G[x, y, z]))) for i in range(0, nx): for j in range(0, ny): @@ -258,7 +252,7 @@ def polar2D(charge, G, nx, ny, radius, alat): for z in range(0, nr[2]): for i in range(0, nx): for j in range(0, ny): - eig = np.exp(np.complex(0,2.0 * pi * np.dot(r[i,j],G[x,y,z]))) + eig = np.exp(np.complex(0,2.0 * pi * np.dot(r[i,j], G[x,y,z]))) Z[i,j] += fft_charge[x, y, z] * eig Z = Z / (nr[0] * nr[1] * nr[2]) @@ -269,11 +263,11 @@ def polar2D(charge, G, nx, ny, radius, alat): def plot_2Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, 0), nx=20, ny=20, radius=1, zlab='charge', plot_file='', method='FFT', format=''): """ - This function calculates a 2D plot of the input charge (or else), starting from the + This function calculates a 2D plot of the input charge (or else). If method=='FFT', the plot starts from the input point x0 and along the directions given by the vectors e1, e2. These - vectors define the section plane along which the plot is draw. The G vectors - in the reciprocal space must also be given in input. nx is the number of - points where the charge is effectively calculated using Fourier interpolation. + vectors define the section plane along which the plot is draw. If method=='polar', the plot is a polar one on a + sphere of radius = 'radius'. The G vectors in the reciprocal space must also be given in input. nx and ny define the + grid of points where the charge is effectively calculated using Fourier interpolation (or polar projection). :param charge: eletronic charge density (or other quantity) to be plotted :param G: G vectors in the reciprocal space @@ -335,12 +329,91 @@ def plot_2Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, return fig -def plot_3Dcharge(charge, G, a, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, 0), e3=(0, 0, 1), nx=20, ny=20, nz=20, - zlab='charge', plot_file='', method='FFT', format=''): - # TODO: this is to be implemented +def FFTinterp3D(charge, G, a, x0, e1, e2, e3, nx, ny, nz): + # normalize e1 + m1 = np.linalg.norm(e1) + if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 + e1 = a[0] + m1 = np.linalg.norm(e1) + e1 = e1 / m1 + + # normalize e2 + m2 = np.linalg.norm(e2) + if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 + e2 = a[1] + m2 = np.linalg.norm(e2) + e2 = e2 / m2 + + # normalize e3 + m3 = np.linalg.norm(e3) + if abs(m3) < 1.0E-6: # if the module is less than 1.0E-6 + e3 = a[2] + m3 = np.linalg.norm(e3) + e3 = e3 / m3 + + # Computes the FFT of the charge + fft_charge = np.fft.fftn(charge) + nr = charge.shape + + # Steps along the e1, e2 and e3 directions... + deltax = m1 / (nx - 1) + deltay = m2 / (ny - 1) + deltaz = m3 / (nz - 1) + + X = np.zeros((nx, ny, nz)) + Y = np.zeros((nx, ny, nz)) + Z = np.zeros((nx, ny, nz)) + W = np.zeros((nx, ny, nz), dtype=complex) + + for i in range(0, nx): + for j in range(0, ny): + for k in range(0, nz): + X[i, j, k] = i * deltax + Y[i, j, k] = j * deltay + Z[i, j, k] = k * deltaz + + # loop(s) over the G points + for x in range(0, nr[0]): + for y in range(0, nr[1]): + for z in range(0, nr[2]): + + # eigx=exp(iG*e1+iGx0), eigy=(iG*e2) + # compute these factors to save CPU time + eigx = np.zeros(nx, dtype=complex) + for i in range(0, nx): + eigx[i] = np.exp( np.complex(0, 2.0 * pi * i * deltax * np.dot(e1,G[x, y, z])) + np.dot(x0,G[x, y, z])) + + eigy = np.zeros(ny, dtype=complex) + for j in range(0, ny): + eigy[j] = np.exp( np.complex(0, 2.0 * pi * j * deltay * np.dot(e2,G[x, y, z]))) + + eigz = np.zeros(nz, dtype=complex) + for k in range(0, nz): + eigz[k] = np.exp( np.complex(0, 2.0 * pi * k * deltaz * np.dot(e3,G[x, y, z]))) + + for i in range(0, nx): + for j in range(0, ny): + for k in range(0, nz): + W[i, j, k] += fft_charge[x, y, z] * eigx[i] * eigy[j] * eigz[k] + + W = W / (nr[0] * nr[1] * nr[2]) + + return X, Y, Z, W + + +def plot_3Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, 0), e3=(0, 0, 1), nx=20, ny=20, nz=20, + zlab='charge', plot_file='', method='FFT', format=''): + try: + # TODO: to be implemented + from cythonfn import FFTinterp3D_Cython + X, Y, Z, W = FFTinterp3D_Cython(charge, G, struct_info['a'], x0, e1, e2, e3, nx, ny, nz) + except ImportError: + X, Y, Z, W = FFTinterp3D(charge, G, struct_info['a'], x0, e1, e2, e3, nx, ny, nz) pass + write_3Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, e3, nx, ny, nz, plot_file, method, format) + def simple_plot_xy(x, y, xlabel="", ylabel=""): """ diff --git a/postqe/writecharge.py b/postqe/writecharge.py index b4089d6..3444e30 100644 --- a/postqe/writecharge.py +++ b/postqe/writecharge.py @@ -54,14 +54,14 @@ def write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx=1, ny=1, plot_file # normalize e1 m1 = np.linalg.norm(e1) if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 - e1 = a[1] + e1 = a[0] m1 = np.linalg.norm(e1) e1 = e1 / m1 # normalize e2 m2 = np.linalg.norm(e2) if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 - e2 = a[2] + e2 = a[1] m2 = np.linalg.norm(e2) e2 = e2 / m2 @@ -124,3 +124,68 @@ def write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx=1, ny=1, plot_file else: print('Format not implemented') raise NotImplementedError + + +def write_3Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, e3, nx=1, ny=1, nz=1, plot_file = 'chargeplot3D.out', method='FFT', format='gnuplot'): + """ + Writes a file for a 2D plot of the charge in different formats. + + :param X: variable x along the 1st direction chosen for the plot + :param Y: variable y along the 2nd direction chosen for the plot + :param Z: charge on the grid + :param nx: number of points along the 1st direction + :param ny: number of points along the 2nd direction + :param plot_file: output charge plot file + :param format: 'gnuplot' -> 3 columns with x, y coordinates and charge data (suitable for gnuplot or similar) + 'plotrho.x' -> format for plotrho.x + 'xsf' -> xsf format for XCrySDen + :return: + """ + + a = struct_info['a'] + # normalize e1 + m1 = np.linalg.norm(e1) + if (abs(m1) < 1.0E-6): # if the module is less than 1.0E-6 + e1 = a[0] + m1 = np.linalg.norm(e1) + e1 = e1 / m1 + + # normalize e2 + m2 = np.linalg.norm(e2) + if abs(m2) < 1.0E-6: # if the module is less than 1.0E-6 + e2 = a[1] + m2 = np.linalg.norm(e2) + e2 = e2 / m2 + + # normalize e3 + m3 = np.linalg.norm(e3) + if abs(m3) < 1.0E-6: # if the module is less than 1.0E-6 + e3 = a[2] + m3 = np.linalg.norm(e3) + e3 = e3 / m3 + + # Steps along the e1, e2 and e3 directions... + deltax = m1 / (nx - 1) + deltay = m2 / (ny - 1) + deltaz = m3 / (nz - 1) + + # Determine max and min of the (real) charge and the sum of imaginary (absolute) charge + charge_min = np.min(Z.real) + charge_max = np.max(Z.real) + charge_im = np.sum(np.abs(Z.imag)) / nx / ny + + f = open(plot_file,'w') + + if format == 'gOpenMol': + #TODO: not implemented + raise NotImplementedError + elif format == 'xsf': + one = xsf_struct(struct_info) + two = xsf_datagrid_3d(W, nx, ny, nz, m1, m2, m3, x0, e1, e2, e3, struct_info) + f.write(one+two) + elif format == 'cube': + #TODO: not implemented + raise NotImplementedError + else: + print('Format not implemented') + raise NotImplementedError \ No newline at end of file From e739613cd99577dde1f6373075ebcbb2aa991795 Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Thu, 12 Oct 2017 17:24:32 +0200 Subject: [PATCH 011/166] 3D xsf format implemented, some issues to be fixed (Note: there is a mismatch between pp.x and postqe results, it seems to me postqe results are fine) --- my_tests/work/test.py | 11 ++++++----- postqe/plot.py | 2 +- postqe/writecharge.py | 10 +++++----- postqe/xsf_format.py | 33 ++++++++++++++++++++++++++++++--- 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/my_tests/work/test.py b/my_tests/work/test.py index b0dd1bd..69165a3 100644 --- a/my_tests/work/test.py +++ b/my_tests/work/test.py @@ -6,8 +6,8 @@ #figure = charge.plot(x0=(0, 0, 0), e1=(1, 0, 0), nx=10, dim=1, ifmagn='total', # plot_file='postqeiflag0out0', method='spherical', format='gnuplot') -figure = charge.plot(x0=(0, 0, 0), e1=(1, 0, 0), nx=10, dim=1, ifmagn='total', - plot_file='postqeiflag1out0', method='FFT', format='gnuplot') +#figure = charge.plot(x0=(0, 0, 0), e1=(1, 0, 0), nx=10, dim=1, ifmagn='total', +# plot_file='postqeiflag1out0', method='FFT', format='gnuplot') #figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', # plot_file='postqeiflag2out7', method='FFT', format='gnuplot') #figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, dim=2, ifmagn='total', @@ -18,9 +18,10 @@ # plot_file='postqeiflag2out3', method='FFT', format='xsf') #figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, radius = 10, dim=2, ifmagn='total', # plot_file='postqeiflag4out7', method='polar', format='gnuplot') -figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, radius = 10, dim=2, ifmagn='total', - plot_file='postqeiflag4out1', method='polar', format='contour.x') - +#figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, radius = 10, dim=2, ifmagn='total', +# plot_file='postqeiflag4out1', method='polar', format='contour.x') +figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, e3 = (0., 0., 1.), nz=10, + dim=3, ifmagn='total', plot_file='postqeiflag3out3', method='FFT', format='xsf') figure.savefig("figure_1.png") figure.savefig("figure_1.pdf", format='pdf') \ No newline at end of file diff --git a/postqe/plot.py b/postqe/plot.py index e0ae5a6..296d3d2 100644 --- a/postqe/plot.py +++ b/postqe/plot.py @@ -412,7 +412,7 @@ def plot_3Dcharge(charge, G, struct_info, x0=(0, 0, 0), e1=(1, 0, 0), e2=(0, 1, X, Y, Z, W = FFTinterp3D(charge, G, struct_info['a'], x0, e1, e2, e3, nx, ny, nz) pass - write_3Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, e3, nx, ny, nz, plot_file, method, format) + write_3Dcharge_file(X, Y, Z, W, struct_info, x0, e1, e2, e3, nx, ny, nz, plot_file, method, format) def simple_plot_xy(x, y, xlabel="", ylabel=""): diff --git a/postqe/writecharge.py b/postqe/writecharge.py index 3444e30..c4d07c1 100644 --- a/postqe/writecharge.py +++ b/postqe/writecharge.py @@ -8,7 +8,7 @@ import numpy as np from .constants import pi -from .xsf_format import xsf_struct, xsf_datagrid_2d +from .xsf_format import xsf_struct, xsf_datagrid_2d, xsf_datagrid_3d def write_1Dcharge_file(X, Y, nx=1, plot_file = 'chargeplot1D.out'): """ @@ -126,7 +126,7 @@ def write_2Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, nx=1, ny=1, plot_file raise NotImplementedError -def write_3Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, e3, nx=1, ny=1, nz=1, plot_file = 'chargeplot3D.out', method='FFT', format='gnuplot'): +def write_3Dcharge_file(X, Y, Z, W, struct_info, x0, e1, e2, e3, nx=1, ny=1, nz=1, plot_file = 'chargeplot3D.out', method='FFT', format='gnuplot'): """ Writes a file for a 2D plot of the charge in different formats. @@ -170,9 +170,9 @@ def write_3Dcharge_file(X, Y, Z, struct_info, x0, e1, e2, e3, nx=1, ny=1, nz=1, deltaz = m3 / (nz - 1) # Determine max and min of the (real) charge and the sum of imaginary (absolute) charge - charge_min = np.min(Z.real) - charge_max = np.max(Z.real) - charge_im = np.sum(np.abs(Z.imag)) / nx / ny + charge_min = np.min(W.real) + charge_max = np.max(W.real) + charge_im = np.sum(np.abs(W.imag)) / nx / ny f = open(plot_file,'w') diff --git a/postqe/xsf_format.py b/postqe/xsf_format.py index d5ba33c..c51f9c1 100644 --- a/postqe/xsf_format.py +++ b/postqe/xsf_format.py @@ -44,11 +44,38 @@ def xsf_datagrid_2d(Z, nx, ny, m1, m2, x0, e1, e2, struct_info): for x in e2: xsf += '{:15.9f} '.format(x*m2*fact) xsf += '\n' - for i in range(0, nx): - for j in range(0, ny): + for j in range(0, ny-1): + for i in range(0, nx-1): xsf += '{:12.4E}'.format(Z[i, j].real) - if ((i * ny + j + 1) % 6) == 0: + if ((j * (nx-1) + i + 1) % 6) == 0: xsf += '\n' xsf += '\n' xsf += 'END_DATAGRID_2D\nEND_BLOCK_DATAGRID_2D' + return xsf + +def xsf_datagrid_3d(W, nx, ny, nz, m1, m2, m3, x0, e1, e2, e3, struct_info): + + xsf = 'BEGIN_BLOCK_DATAGRID_3D\n3D_PWSCF\nDATAGRID_3D_UNKNOWN\n' + xsf += '{:4d} {:4d} {:4d}\n'.format(nx, ny, nz) + fact = struct_info['alat']*BOHR_RADIUS_SI*1e9 + for x in x0: + xsf += '{:15.9f} '.format(x*fact) + xsf += '\n' + for x in e1: + xsf += '{:15.9f} '.format(x*m1*fact) + xsf += '\n' + for x in e2: + xsf += '{:15.9f} '.format(x*m2*fact) + xsf += '\n' + for x in e3: + xsf += '{:15.9f} '.format(x * m3 * fact) + xsf += '\n' + for k in range(0, nz-1): + for j in range(0, ny-1): + for i in range(0, nx-1): + xsf += '{:12.4E}'.format(W[i, j, k].real) + if ((k * ((ny-1)*(nx-1)) + j * (nx-1) + i + 1) % 6) == 0: + xsf += '\n' + xsf += '\n' + xsf += 'END_DATAGRID_3D\nEND_BLOCK_DATAGRID_3D' return xsf \ No newline at end of file From d2e03cb36facdb934e3d8d07601639ed325264d4 Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Fri, 13 Oct 2017 11:46:04 +0200 Subject: [PATCH 012/166] small fixes in xsf format --- postqe/xsf_format.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/postqe/xsf_format.py b/postqe/xsf_format.py index c51f9c1..a647641 100644 --- a/postqe/xsf_format.py +++ b/postqe/xsf_format.py @@ -21,20 +21,21 @@ def xsf_struct(struct_info): #TODO: check a vectors. It seems right here but it is different from pp.x (why?) xsf = ' CRYSTAL\n PRIMVEC\n' - a = struct_info['a']*struct_info['alat']*BOHR_RADIUS_SI*1e9 # convert in Ang + fact = BOHR_RADIUS_SI*1e10 + a = struct_info['a']*fact # convert in Ang for at in a: xsf += '{:15.9f} {:15.9f} {:15.9f}\n'.format(float(at[0]),float(at[1]),float(at[2])) xsf += ' PRIMCOORD\n' xsf += ' {:4d} 1\n'.format(int(struct_info['nat'])) for at in struct_info['atomic_positions']: - xsf += ' {:3s} {:15.9f} {:15.9f} {:15.9f}\n'.format(at['@name'], at['$'][0], at['$'][1], at['$'][2]) + xsf += ' {:3s} {:15.9f} {:15.9f} {:15.9f}\n'.format(at['@name'], at['$'][0]*fact, at['$'][1]*fact, at['$'][2]*fact) return xsf def xsf_datagrid_2d(Z, nx, ny, m1, m2, x0, e1, e2, struct_info): xsf = 'BEGIN_BLOCK_DATAGRID_2D\n2D_PWSCF\nDATAGRID_2D_UNKNOWN\n' xsf += '{:4d} {:4d}\n'.format(nx, ny) - fact = struct_info['alat']*BOHR_RADIUS_SI*1e9 + fact = struct_info['alat']*BOHR_RADIUS_SI*1e10 for x in x0: xsf += '{:15.9f} '.format(x*fact) xsf += '\n' @@ -44,10 +45,10 @@ def xsf_datagrid_2d(Z, nx, ny, m1, m2, x0, e1, e2, struct_info): for x in e2: xsf += '{:15.9f} '.format(x*m2*fact) xsf += '\n' - for j in range(0, ny-1): - for i in range(0, nx-1): + for j in range(0, ny): + for i in range(0, nx): xsf += '{:12.4E}'.format(Z[i, j].real) - if ((j * (nx-1) + i + 1) % 6) == 0: + if ((j * nx + i + 1) % 6) == 0: xsf += '\n' xsf += '\n' xsf += 'END_DATAGRID_2D\nEND_BLOCK_DATAGRID_2D' @@ -57,7 +58,7 @@ def xsf_datagrid_3d(W, nx, ny, nz, m1, m2, m3, x0, e1, e2, e3, struct_info): xsf = 'BEGIN_BLOCK_DATAGRID_3D\n3D_PWSCF\nDATAGRID_3D_UNKNOWN\n' xsf += '{:4d} {:4d} {:4d}\n'.format(nx, ny, nz) - fact = struct_info['alat']*BOHR_RADIUS_SI*1e9 + fact = struct_info['alat']*BOHR_RADIUS_SI*1e10 for x in x0: xsf += '{:15.9f} '.format(x*fact) xsf += '\n' @@ -68,13 +69,13 @@ def xsf_datagrid_3d(W, nx, ny, nz, m1, m2, m3, x0, e1, e2, e3, struct_info): xsf += '{:15.9f} '.format(x*m2*fact) xsf += '\n' for x in e3: - xsf += '{:15.9f} '.format(x * m3 * fact) + xsf += '{:15.9f} '.format(x*m3*fact) xsf += '\n' - for k in range(0, nz-1): - for j in range(0, ny-1): - for i in range(0, nx-1): + for k in range(0, nz): + for j in range(0, ny): + for i in range(0, nx): xsf += '{:12.4E}'.format(W[i, j, k].real) - if ((k * ((ny-1)*(nx-1)) + j * (nx-1) + i + 1) % 6) == 0: + if ((k * (ny*nx) + j * nx + i + 1) % 6) == 0: xsf += '\n' xsf += '\n' xsf += 'END_DATAGRID_3D\nEND_BLOCK_DATAGRID_3D' From e18fa9b13a41efe683543cf3e24f573f0bb3c887 Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Fri, 13 Oct 2017 14:49:27 +0200 Subject: [PATCH 013/166] tentative 3D cube Gaussian format implemented (not tested) --- postqe/cube_format.py | 63 +++++++++++++++++++++++++++++++++++++++++++ postqe/writecharge.py | 11 ++++---- postqe/xsf_format.py | 10 ++++--- 3 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 postqe/cube_format.py diff --git a/postqe/cube_format.py b/postqe/cube_format.py new file mode 100644 index 0000000..51e5e94 --- /dev/null +++ b/postqe/cube_format.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +A tentative collection of functions for the cube Gaussian format. See http://paulbourke.net/dataformats/cube/ or + http://gaussian.com/cubegen/ for more info. + +Note that this is different from Fortran routines written by Axel Kohlmeyer (file cube.f90 in Quantum +Espresso) and still untested! Use at your own risk. +""" +################################################################################ + +import numpy as np +from ase import Atom +from .constants import BOHR_RADIUS_SI + + +def cube(W, nx, ny, nz, e1, e2, e3, struct_info): + """ + Creates and returns a string with cube Gaussian format. + :param struct_info: a dictionary containing the structural parameters + :return: a string formatted as the XSF format + """ + + # TODO: this format is untested with Gaussian or other reader + + cube = 'Cubefile created from PWScf calculation\nContains the selected quantity on a FFT grid\n' + cube += '{:5d} {:12.6f} {:12.6f} {:12.6f}\n'.format(int(struct_info['nat']),0.,0.,0.) + cube += '{:5d}'.format(nx) + alat = struct_info['alat'] + for ecomp in e1: + cube += ' {:12.6f}'.format(ecomp*alat) + cube += '\n' + cube += '{:5d}'.format(ny) + for ecomp in e2: + cube += ' {:12.6f}'.format(ecomp*alat) + cube += '\n' + cube += '{:5d}'.format(nz) + for ecomp in e3: + cube += ' {:12.6f}'.format(ecomp*alat) + cube += '\n' + fact = BOHR_RADIUS_SI*1e10 + for at in struct_info['atomic_positions']: + atomic_number = Atom(at['@name']).number + charge = atomic_number # !!! it is unclear how this is used in the Gaussian format, here it is just the atomic number again + cube += '{:5d} {:12.6f} {:12.6f} {:12.6f} {:12.6f}' \ + '\n'.format(atomic_number, charge, at['$'][0]*fact, at['$'][1]*fact, at['$'][2]*fact) + # Now print the real data + count = 0 + for i in range(0, nx): + for j in range(0, ny): + for k in range(0, nz): + cube += '{:13.5E}'.format(W[i, j, k].real) + if ((count + 1) % 6) == 0: + cube += '\n' + count = 0 + else: + count += 1 + cube += '\n' + count = 0 + + return cube + diff --git a/postqe/writecharge.py b/postqe/writecharge.py index c4d07c1..4640433 100644 --- a/postqe/writecharge.py +++ b/postqe/writecharge.py @@ -9,6 +9,7 @@ import numpy as np from .constants import pi from .xsf_format import xsf_struct, xsf_datagrid_2d, xsf_datagrid_3d +from .cube_format import cube def write_1Dcharge_file(X, Y, nx=1, plot_file = 'chargeplot1D.out'): """ @@ -180,12 +181,12 @@ def write_3Dcharge_file(X, Y, Z, W, struct_info, x0, e1, e2, e3, nx=1, ny=1, nz= #TODO: not implemented raise NotImplementedError elif format == 'xsf': - one = xsf_struct(struct_info) - two = xsf_datagrid_3d(W, nx, ny, nz, m1, m2, m3, x0, e1, e2, e3, struct_info) - f.write(one+two) + temp_struct = xsf_struct(struct_info) + temp_grid = xsf_datagrid_3d(W, nx, ny, nz, m1, m2, m3, x0, e1, e2, e3, struct_info) + f.write(temp_struct+temp_grid) elif format == 'cube': - #TODO: not implemented - raise NotImplementedError + temp = cube(W, nx, ny, nz, e1, e2, e3, struct_info) + f.write(temp) else: print('Format not implemented') raise NotImplementedError \ No newline at end of file diff --git a/postqe/xsf_format.py b/postqe/xsf_format.py index a647641..08bf5c1 100644 --- a/postqe/xsf_format.py +++ b/postqe/xsf_format.py @@ -14,12 +14,11 @@ def xsf_struct(struct_info): """ - Create a string with XSF format for structural info (periodic systems) + Creates and returns a string with XSF format for structural info (periodic systems) :param struct_info: a dictionary containing the structural parameters :return: a string formatted as the XSF format """ - #TODO: check a vectors. It seems right here but it is different from pp.x (why?) xsf = ' CRYSTAL\n PRIMVEC\n' fact = BOHR_RADIUS_SI*1e10 a = struct_info['a']*fact # convert in Ang @@ -32,6 +31,9 @@ def xsf_struct(struct_info): return xsf def xsf_datagrid_2d(Z, nx, ny, m1, m2, x0, e1, e2, struct_info): + """ + Creates and returns a string with XSF 2D datablock for the charge (or similar quantity) on a grid. + """ xsf = 'BEGIN_BLOCK_DATAGRID_2D\n2D_PWSCF\nDATAGRID_2D_UNKNOWN\n' xsf += '{:4d} {:4d}\n'.format(nx, ny) @@ -55,7 +57,9 @@ def xsf_datagrid_2d(Z, nx, ny, m1, m2, x0, e1, e2, struct_info): return xsf def xsf_datagrid_3d(W, nx, ny, nz, m1, m2, m3, x0, e1, e2, e3, struct_info): - + """ + Creates and returns a string with XSF 3D datablock for the charge (or similar quantity) on a grid. + """ xsf = 'BEGIN_BLOCK_DATAGRID_3D\n3D_PWSCF\nDATAGRID_3D_UNKNOWN\n' xsf += '{:4d} {:4d} {:4d}\n'.format(nx, ny, nz) fact = struct_info['alat']*BOHR_RADIUS_SI*1e10 From 9b94339d670995099589f68879602d3dae0f3054 Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Fri, 13 Oct 2017 16:02:46 +0200 Subject: [PATCH 014/166] small fix in the cli parser --- my_tests/work/test.py | 4 +++- postqe/cli.py | 10 +++++----- tests/Si/reference/run_example | 2 ++ tests/Si/reference/sipp0.out | 6 +++--- tests/Si/reference/sipp1.out | 6 +++--- tests/Si/reference/sipp11.out | 6 +++--- tests/Si/reference/sipp2.out | 6 +++--- tests/Si/reference/sipp6.out | 6 +++--- 8 files changed, 25 insertions(+), 21 deletions(-) diff --git a/my_tests/work/test.py b/my_tests/work/test.py index 69165a3..ecedc9a 100644 --- a/my_tests/work/test.py +++ b/my_tests/work/test.py @@ -20,8 +20,10 @@ # plot_file='postqeiflag4out7', method='polar', format='gnuplot') #figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, radius = 10, dim=2, ifmagn='total', # plot_file='postqeiflag4out1', method='polar', format='contour.x') +#figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, e3 = (0., 0., 1.), nz=10, +# dim=3, ifmagn='total', plot_file='postqeiflag3out3', method='FFT', format='xsf') figure = charge.plot(x0 = (0., 0., 0.), e1 = (1., 0., 0.), nx = 10, e2 = (0., 1., 0.), ny=10, e3 = (0., 0., 1.), nz=10, - dim=3, ifmagn='total', plot_file='postqeiflag3out3', method='FFT', format='xsf') + dim=3, ifmagn='total', plot_file='postqeiflag3out6', method='FFT', format='cube') figure.savefig("figure_1.png") figure.savefig("figure_1.pdf", format='pdf') \ No newline at end of file diff --git a/postqe/cli.py b/postqe/cli.py index 12533ec..8245b50 100644 --- a/postqe/cli.py +++ b/postqe/cli.py @@ -112,12 +112,12 @@ def get_cli_parser(): charge_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) # create the parser for the "potential" command - charge_parser = subparsers.add_parser( + potential_parser = subparsers.add_parser( 'potential', help='Get the potential from Espresso XML and HDF5 output.') - charge_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) - charge_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) - charge_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) - charge_parser.add_argument( + potential_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) + potential_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) + potential_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) + potential_parser.add_argument( '-pot_type', type=str, default=None, help="Type of the potential ('vtot', ...).") return parser diff --git a/tests/Si/reference/run_example b/tests/Si/reference/run_example index f1afe32..e9386b5 100755 --- a/tests/Si/reference/run_example +++ b/tests/Si/reference/run_example @@ -34,6 +34,8 @@ $PP_COMMAND < sipp0biflag2out7.in # 3D $PP_COMMAND < sipp0biflag3out3.in $PP_COMMAND < sipp0biflag3out5.in +$PP_COMMAND < sipp0biflag3out6.in +$PP_COMMAND < sipp0biflag3out6splines.in # polar $PP_COMMAND < sipp0biflag4out0.in $PP_COMMAND < sipp0biflag4out1.in diff --git a/tests/Si/reference/sipp0.out b/tests/Si/reference/sipp0.out index 2a6970e..94989a9 100644 --- a/tests/Si/reference/sipp0.out +++ b/tests/Si/reference/sipp0.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:41 + Program POST-PROC v.6.1 starts on 13Oct2017 at 14:19:35 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -31,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.11s CPU 0.12s WALL + POST-PROC : 0.10s CPU 0.11s WALL - This run was terminated on: 14:50:41 11Oct2017 + This run was terminated on: 14:19:35 13Oct2017 =------------------------------------------------------------------------------= JOB DONE. diff --git a/tests/Si/reference/sipp1.out b/tests/Si/reference/sipp1.out index 0978cbf..1cfd974 100644 --- a/tests/Si/reference/sipp1.out +++ b/tests/Si/reference/sipp1.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:41 + Program POST-PROC v.6.1 starts on 13Oct2017 at 14:19:35 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -31,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.12s CPU 0.13s WALL + POST-PROC : 0.11s CPU 0.12s WALL - This run was terminated on: 14:50:42 11Oct2017 + This run was terminated on: 14:19:36 13Oct2017 =------------------------------------------------------------------------------= JOB DONE. diff --git a/tests/Si/reference/sipp11.out b/tests/Si/reference/sipp11.out index e84acc8..22fbfcb 100644 --- a/tests/Si/reference/sipp11.out +++ b/tests/Si/reference/sipp11.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:42 + Program POST-PROC v.6.1 starts on 13Oct2017 at 14:19:36 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -31,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.12s CPU 0.12s WALL + POST-PROC : 0.10s CPU 0.11s WALL - This run was terminated on: 14:50:42 11Oct2017 + This run was terminated on: 14:19:36 13Oct2017 =------------------------------------------------------------------------------= JOB DONE. diff --git a/tests/Si/reference/sipp2.out b/tests/Si/reference/sipp2.out index 2ece434..a7c2a47 100644 --- a/tests/Si/reference/sipp2.out +++ b/tests/Si/reference/sipp2.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:42 + Program POST-PROC v.6.1 starts on 13Oct2017 at 14:19:36 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -31,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.10s CPU 0.11s WALL + POST-PROC : 0.11s CPU 0.11s WALL - This run was terminated on: 14:50:42 11Oct2017 + This run was terminated on: 14:19:36 13Oct2017 =------------------------------------------------------------------------------= JOB DONE. diff --git a/tests/Si/reference/sipp6.out b/tests/Si/reference/sipp6.out index 0a41a0e..aba1740 100644 --- a/tests/Si/reference/sipp6.out +++ b/tests/Si/reference/sipp6.out @@ -1,5 +1,5 @@ - Program POST-PROC v.6.1 starts on 11Oct2017 at 14:50:42 + Program POST-PROC v.6.1 starts on 13Oct2017 at 14:19:36 This program is part of the open-source Quantum ESPRESSO suite for quantum simulation of materials; please cite @@ -31,10 +31,10 @@ Message from routine chdens: namelist plot not found or invalid, exiting - POST-PROC : 0.11s CPU 0.12s WALL + POST-PROC : 0.10s CPU 0.11s WALL - This run was terminated on: 14:50:42 11Oct2017 + This run was terminated on: 14:19:36 13Oct2017 =------------------------------------------------------------------------------= JOB DONE. From 1c443c3bd4f2407796619afeb12a62c11bcf054a Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Mon, 16 Oct 2017 15:48:38 +0200 Subject: [PATCH 015/166] revised api, command line interface and documentation for fitting EOS. --- doc/_build/doctrees/environment.pickle | Bin 11683 -> 11710 bytes doc/_build/doctrees/postqe.doctree | Bin 36090 -> 41838 bytes doc/_build/doctrees/tutorial.doctree | Bin 48541 -> 48650 bytes doc/_build/html/genindex.html | 12 +-- doc/_build/html/objects.inv | 4 +- doc/_build/html/postqe.html | 97 ++++++++++++-------- doc/_build/html/searchindex.js | 2 +- doc/_build/html/tutorial.html | 3 +- postqe/api.py | 108 ++++++++++++---------- postqe/cli.py | 65 ++++++++++++-- postqe/pp.py | 118 ++----------------------- 11 files changed, 192 insertions(+), 217 deletions(-) diff --git a/doc/_build/doctrees/environment.pickle b/doc/_build/doctrees/environment.pickle index 98c263521518c03cee3287e928470f4db7dc60be..3db97b564d04469ea90b74523dacfc9f204189c3 100644 GIT binary patch literal 11710 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 ReP(W#rZro$zPG}1;r|^!!Z82< literal 11683 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 diff --git a/doc/_build/doctrees/postqe.doctree b/doc/_build/doctrees/postqe.doctree index 3d1e600cd8d8072b2aee4f50d1ba1a57bc679c2b..82b26ccad93fba884d19daab2bf24cafa5aee545 100644 GIT binary patch literal 41838 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 literal 36090 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 XO6EuEzwkoTX6W9|J*M9KhiCr}#B;?+ diff --git a/doc/_build/doctrees/tutorial.doctree b/doc/_build/doctrees/tutorial.doctree index 788997bd6522e8882fb033d887a0af565c517593..95941f4e4aaa7e9e4b5006bc5a69dde93eaffb09 100644 GIT binary patch literal 48650 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 literal 48541 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 E9}`Eny8r+H diff --git a/doc/_build/html/genindex.html b/doc/_build/html/genindex.html index 322f6ae..423d74b 100644 --- a/doc/_build/html/genindex.html +++ b/doc/_build/html/genindex.html @@ -50,22 +50,16 @@

Navigation

Index

- F + C | G | P
-

F

+

C

- diff --git a/doc/_build/html/objects.inv b/doc/_build/html/objects.inv index 9aade16..d41ba95 100644 --- a/doc/_build/html/objects.inv +++ b/doc/_build/html/objects.inv @@ -2,5 +2,5 @@ # Project: postqe # Version: 0.1 # The remainder of this file is compressed using zlib. -xڕA ED5eoЅ,Ӗa!kUh|t@ű/NV |1"ْg QT #+Ԗ*~7Ԥ,Aד 5i޺M &wt-!%~لIDsef?\ F 9;f7C`,jԃpu7'6f#-0 -d3|Røg7re*s \ No newline at end of file +xڕA EDmԥ7pabalIZaHҪ>g`zB)Ps췝U冺vb /@P$m _'/S TQ'$y^WgzT;j< ZCZ ܓƈb͵!'.p5mRvR#wÚ}_zHƠ}wըdQk#p50 +d >SӸgwV \ No newline at end of file diff --git a/doc/_build/html/postqe.html b/doc/_build/html/postqe.html index 5dc2312..36e75b6 100644 --- a/doc/_build/html/postqe.html +++ b/doc/_build/html/postqe.html @@ -59,39 +59,40 @@

Submodules

postqe.api module

A collection of functions to be part of postqe API and exposed to the user.

-
-postqe.api.fit_and_plot_eos(label, eos='murnaghan', filename='EOSplot', show=None, ax=None)
+
+postqe.api.compute_eos(prefix, outdir=None, eos_type='murnaghan', fileout='', fileplot='EOSplot', show=True, ax=None)

This function fits an Equation of state of type eos and writes the results into filename. Different equation of states are available: Murnaghan, Birch, Vinet, etc.

-
fit_and_plot_eos() (in module postqe.api) -
- -
- -
fit_and_write_eos() (in module postqe.api) +
compute_eos() (in module postqe.api)
- - -
Parameters:
    -
  • label – input file for volumes and energies (possibly including the full path)
  • -
  • eos – type of Equation of State (Murnaghan, Birch, Vinet, etc.)
  • -
  • filename – name of the output file
  • +
Parameters:
    +
  • prefix – prefix of saved files for volumes and energies
  • +
  • outdir – directory containing the input data. Default to the value of +ESPRESSO_TMPDIR environment variable if set, or current directory (‘.’) otherwise
  • +
  • eos_type

    type of equation of state (EOS) for fitting. Available types are:

    +

    ‘murnaghan’ (default) -> Murnaghan EOS, PRB 28, 5480 (1983)

    +

    ‘sjeos’ -> A third order inverse polynomial fit, PhysRevB.67.026103

    +
    +
    E(V) = c_0 + c_1 t + c_2 t^2 + c_3 t^3 , t = V^(-1/3)
    +

    ‘taylor’ -> A third order Taylor series expansion around the minimum volume

    +

    ‘vinet’ -> Vinet EOS, PRB 70, 224107

    +

    ‘birch’ -> Birch EOS, Intermetallic compounds: Principles and Practice, Vol I: Principles, p. 195

    +

    ‘birchmurnaghan’ -> Birch-Murnaghan EOS, PRB 70, 224107

    +

    ‘pouriertarantola’ -> Pourier-Tarantola EOS, PRB 70, 224107

    +

    ‘antonschmidt’ -> Anton-Schmidt EOS, Intermetallics 11, 23 - 32(2003)

    +

    ‘p3’ -> A third order inverse polynomial fit

    +
  • +
  • fileout – output file with fitting data and results (default=’‘, not written).
  • +
  • fileplot – output file with fitting only data for plotting (default=’EOSplot’).
  • +
  • show – True -> plot results with Matplotlib; None or False -> do nothing. Default = True
  • +
  • ax – a Matplotlib “Axes” instance (see Matplotlib documentation for details). If ax=None (default), creates +a new one
-
- -
-
-postqe.api.fit_and_write_eos(label, eos='murnaghan', filename='eos.out')
-

This function fits an Equation of state of type eos and writes the results into filename. -Different equation of states are available: Murnaghan, Birch, Vinet, etc.

- --- - @@ -109,7 +110,8 @@

Submodules

- + +
Parameters:
    -
  • label – input file for volumes and energies (possibly including the full path)
  • -
  • eos – type of Equation of State (Murnaghan, Birch, Vinet, etc.)
  • -
  • filename – name of the output file
  • -
+
Returns:

an EOS object and a Matplotlib figure object

Parameters:
  • prefix – prefix of saved output files
  • -
  • outdir – directory containing the input data. Default to the value of ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
  • +
  • outdir – directory containing the input data. Default to the value of +ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
  • schema – the XML schema to be used to read and validate the XML output file
  • reference_energy – the Fermi level
@@ -131,21 +133,24 @@

Submodules

Parameters:
    +
Parameters:
  • prefix – prefix of saved output files
  • -
  • outdir – directory containing the input data. Default to the value of ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
  • +
  • outdir – directory containing the input data. Default to the value of +ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
  • schema – the XML schema to be used to read and validate the XML output file
Returns:

a Charge object

+
-

:return a Charge object

-postqe.api.get_dos(prefix, outdir=None, schema=None, width=0.01, npts=100)
+postqe.api.get_dos(prefix, outdir=None, schema=None, width=0.01, window=None, npts=100)

This function returns an DOS object from an output xml Espresso file containing the results of a DOS calculation.

@@ -154,9 +159,11 @@

Submodules

@@ -170,8 +177,8 @@

Submodules
-postqe.api.get_eos(prefix, outdir=None, eos='murnaghan')
-

This function returns an EOS object from a text input file containing the volumes +postqe.api.get_eos(prefix, outdir=None, eos_type='murnaghan') +

Returns an EOS object from a text input file containing the volumes and corresponding calculated energies. Different equation of states are available: Murnaghan, Birch, Vinet, etc.

Parameters:
  • prefix – prefix of saved output files
  • -
  • outdir – directory containing the input data. Default to the value of ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
  • +
  • outdir – directory containing the input data. Default to the value of +ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
  • schema – the XML schema to be used to read and validate the XML output file
  • width – width of the gaussian to be used for the DOS (in eV)
  • +
  • = emin, emax (window) – defines the minimun and maximun energies for the DOS
  • npts – number of points of the DOS
@@ -180,8 +187,21 @@

Submodules

@@ -208,17 +228,20 @@

Submodules

- + +
Parameters:
  • prefix – prefix of saved files for volumes and energies
  • -
  • outdir – directory containing the input data. Default to the value of ESPRESSO_TMPDIR environment variable if set, or current directory (‘.’) otherwise
  • -
  • eos – type of Equation of State (Murnaghan, Birch, Vinet, etc.)
  • +
  • outdir – directory containing the input data. Default to the value of +ESPRESSO_TMPDIR environment variable if set, or current directory (‘.’) otherwise
  • +
  • eos_type

    type of equation of state (EOS) for fitting. Available types are:

    +

    ‘murnaghan’ (default) -> Murnaghan EOS, PRB 28, 5480 (1983)

    +

    ‘sjeos’ -> A third order inverse polynomial fit, PhysRevB.67.026103

    +
    +
    E(V) = c_0 + c_1 t + c_2 t^2 + c_3 t^3 , t = V^(-1/3)
    +

    ‘taylor’ -> A third order Taylor series expansion around the minimum volume

    +

    ‘vinet’ -> Vinet EOS, PRB 70, 224107

    +

    ‘birch’ -> Birch EOS, Intermetallic compounds: Principles and Practice, Vol I: Principles, p. 195

    +

    ‘birchmurnaghan’ -> Birch-Murnaghan EOS, PRB 70, 224107

    +

    ‘pouriertarantola’ -> Pourier-Tarantola EOS, PRB 70, 224107

    +

    ‘antonschmidt’ -> Anton-Schmidt EOS, Intermetallics 11, 23 - 32(2003)

    +

    ‘p3’ -> A third order inverse polynomial fit

    +
Parameters:
    +
Parameters:
  • prefix – prefix of saved output files
  • -
  • outdir – directory containing the input data. Default to the value of ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
  • +
  • outdir – directory containing the input data. Default to the value of +ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
  • schema – the XML schema to be used to read and validate the XML output file
  • pot_type – type of the Potential (‘vtot’, ....)
Returns:

a Potential object

+
-

:return a Potential object

diff --git a/doc/_build/html/searchindex.js b/doc/_build/html/searchindex.js index c750f4f..4260356 100644 --- a/doc/_build/html/searchindex.js +++ b/doc/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{fit_and_plot_eos:[2,1,1,""],fit_and_write_eos:[2,1,1,""],get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},postqe:{api:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"0e24":3,"2nd":3,"3rd":3,"case":3,"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":1,"return":[1,2,3],"true":3,abov:1,accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,ang:3,ani:1,anton:3,api:1,approxim:3,atom:1,automat:3,avail:[1,2,3],band:1,bare:[1,2,3],base:[1,3],below:3,birch:[1,2,3],bodi:3,brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,calcul:1,call:3,can:[1,2,3],center:3,charg:1,choic:1,code:[1,3],collect:2,column:3,command:1,common:[1,3],commun:1,comput:3,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:3,cubic:3,current:[1,2,3],dat:3,data:[1,2,3],defin:3,demonstr:3,densiti:1,detail:1,dev:1,develop:1,differ:1,dim:3,direct:3,directli:1,directori:[2,3],doc:1,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:3,emin:3,energi:1,environ:[1,2],eosplot:2,equat:[1,2,3],equilibrium:3,espresso:[1,2,3],espresso_tmpdir:2,essentiali:3,etc:[1,2],everyth:1,exampl:1,except:3,exchang:[1,2,3],expos:2,extract:3,f2py:1,face:3,fact:[1,3],featur:1,fermi:[2,3],fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:3,figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:[2,3],first:3,fit:1,fit_and_plot_eo:2,fit_and_write_eo:2,follow:3,format:3,fortran:1,found:3,framework:1,from:[1,2,3],full:[2,3],fulli:1,further:[1,3],fysik:1,gaussian:[2,3],gener:[],get:3,get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:3,glue:1,gpa:3,hartre:[1,2,3],hdf5:[2,3],henc:1,here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,implement:1,includ:[1,2],incomplet:2,index:0,inform:3,initi:3,input:[2,3],instal:[],intepret:3,interact:3,interfac:1,introduct:[],isotrop:3,label:[2,3],languag:1,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:1,link:1,look:3,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,3],meant:1,method:3,modifi:3,modul:1,modulu:3,more:1,most:[1,3],murnaghan:1,must:3,name:2,nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:[],npt:[2,3],number:[1,2,3],numpi:1,object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:1,option:3,order:3,org:1,origin:3,other:[1,3],otherwis:2,out:2,outdir:[2,3],output:[2,3],outputcharg:3,own:1,packag:1,page:0,paramet:[2,3],pars:3,part:[1,2],path:[2,3],pdf:3,peopl:1,perform:3,person:1,planar:3,plane:3,pleas:2,plot:[],plot_ev:3,plt:3,plu:3,png:3,point:[2,3],polynomi:3,popular:1,possibl:[1,2],post:1,postprocess:1,pot_typ:[2,3],potenti:1,pourier:3,prefix:[2,3],previou:3,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:3,provid:1,pseudopotenti:3,pyplot:3,python:[1,3],quantiti:3,quantum:[1,3],ratio:3,read:[2,3],reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:3,scipi:1,script:3,search:0,second:3,section:1,see:[1,3],session:3,set:2,setup:1,sever:3,shift:3,show:[2,3],shown:3,siband:3,silicon:[],similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,softwar:1,some:[1,3],specif:1,specifi:3,standard:3,state:1,step:3,still:[1,2],str:3,structur:1,submodul:1,sudo:1,system:3,tailor:3,taken:3,tarantola:3,task:[1,3],tast:1,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],tinker:1,togeth:[1,3],tool:1,total:1,tutori:1,two:3,type:[2,3],under:1,unit:[1,3],user:[1,2],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:2,vector:3,version:[],vinet:[1,2,3],volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,3],who:1,width:[2,3],wiki:1,wrapper:1,write:[2,3],written:3,wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:3,densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file +Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{compute_eos:[2,1,1,""],get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},postqe:{api:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"0e24":3,"2nd":3,"3rd":3,"case":3,"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":[1,2],"return":[1,2,3],"true":[2,3],abov:1,accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,ang:3,ani:1,anton:[2,3],antonschmidt:2,api:1,approxim:3,around:2,atom:1,automat:3,avail:[1,2,3],band:1,bare:[1,2,3],base:[1,3],below:3,birch:[1,2,3],birchmurnaghan:2,bodi:3,brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,c_0:2,c_1:2,c_2:2,c_3:2,calcul:1,call:3,can:[1,2,3],center:3,charg:1,choic:1,code:[1,3],collect:2,column:3,command:1,common:[1,3],commun:1,compound:2,comput:3,compute_eo:2,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:[2,3],cubic:3,current:[1,2,3],dat:3,data:[1,2,3],defin:[2,3],demonstr:3,densiti:1,detail:[1,2],dev:1,develop:1,differ:1,dim:3,direct:3,directli:1,directori:[2,3],doc:1,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:[2,3],emin:[2,3],energi:1,environ:[1,2],eos_typ:2,eosplot:2,equat:[1,2,3],equilibrium:3,espresso:[1,2,3],espresso_tmpdir:2,essentiali:3,etc:[1,2],everyth:1,exampl:1,except:3,exchang:[1,2,3],expans:2,expos:2,extract:3,f2py:1,face:3,fact:[1,3],fals:2,featur:1,fermi:[2,3],fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:[2,3],figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:[2,3],fileout:2,fileplot:2,first:3,fit:1,fit_and_plot_eo:[],fit_and_write_eo:[],follow:3,format:3,fortran:1,found:3,framework:1,from:[1,2,3],full:3,fulli:1,further:[1,3],fysik:1,gaussian:[2,3],gener:[],get:3,get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:3,glue:1,gpa:3,hartre:[1,2,3],hdf5:[2,3],henc:1,here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,implement:1,includ:1,incomplet:2,index:0,inform:3,initi:3,input:[2,3],instal:[],instanc:2,intepret:3,interact:3,interfac:1,intermetal:2,introduct:[],invers:2,isotrop:3,label:3,languag:1,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:1,link:1,look:3,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,2,3],maximun:2,meant:1,method:3,minimum:2,minimun:2,modifi:3,modul:1,modulu:3,more:1,most:[1,3],murnaghan:1,must:3,name:[],nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:[],noth:2,npt:[2,3],number:[1,2,3],numpi:1,object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:[1,2],option:3,order:[2,3],org:1,origin:3,other:[1,3],otherwis:2,out:3,outdir:[2,3],output:[2,3],outputcharg:3,own:1,packag:1,page:0,param:[],paramet:[2,3],pars:3,part:[1,2],path:[2,3],pdf:3,peopl:1,perform:3,person:1,physrevb:2,planar:3,plane:3,pleas:2,plot:[],plot_ev:3,plt:3,plu:3,png:3,point:[2,3],polynomi:[2,3],popular:1,possibl:1,post:1,postprocess:1,pot_typ:[2,3],potenti:1,pourier:[2,3],pouriertarantola:2,practic:2,prb:2,prefix:[2,3],previou:3,principl:2,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:3,provid:1,pseudopotenti:3,pyplot:3,python:[1,3],quantiti:3,quantum:[1,3],ratio:3,read:[2,3],reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:[2,3],scipi:1,script:3,search:0,second:3,section:1,see:[1,2,3],seri:2,session:3,set:2,setup:1,sever:3,shift:3,show:[2,3],shown:3,siband:3,silicon:[],similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,sjeo:2,softwar:1,some:[1,3],specif:1,specifi:3,standard:3,state:1,step:3,still:[1,2],str:3,structur:1,submodul:1,sudo:1,system:3,tailor:3,taken:3,tarantola:[2,3],task:[1,3],tast:1,taylor:2,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],third:2,tinker:1,togeth:[1,3],tool:1,total:1,tutori:1,two:3,type:[2,3],under:1,unit:[1,3],user:[1,2],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:2,vector:3,version:[],vinet:[1,2,3],vol:2,volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,3],who:1,width:[2,3],wiki:1,window:2,wrapper:1,write:[2,3],written:[2,3],wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:3,densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file diff --git a/doc/_build/html/tutorial.html b/doc/_build/html/tutorial.html index 4fbfd24..36e0314 100644 --- a/doc/_build/html/tutorial.html +++ b/doc/_build/html/tutorial.html @@ -115,7 +115,8 @@

Calculate and plot the density of states (DOS) of silicon (examples 3)plt.savefig('figure.png') plt.show() - +# save DOS in a file +dos.write('DOS.out')

The get_dos() needs in input the xml file produced by pw.x, after a proper DOS calculation. This is identified using label which may contain the full path to the file (.xml is automatically added). The schema (optional) parameter allows the code to properly parse and validate the xml file. You must also specify the number of energy steps in the DOS (npts), plus the Gaussian broadening (width). get_dos() then returns a DOS object.

diff --git a/postqe/api.py b/postqe/api.py index 9b05993..227bd56 100644 --- a/postqe/api.py +++ b/postqe/api.py @@ -31,37 +31,80 @@ def get_label(prefix, outdir=None): return label -def get_eos(prefix, outdir=None, eos='murnaghan'): +def get_eos(prefix, outdir=None, eos_type='murnaghan'): """ - This function returns an EOS object from a text input file containing the volumes + Returns an EOS object from a text input file containing the volumes and corresponding calculated energies. Different equation of states are available: Murnaghan, Birch, Vinet, etc. :param prefix: prefix of saved files for volumes and energies - :param outdir: directory containing the input data. Default to the value of \ - ESPRESSO_TMPDIR environment variable if set, or current directory ('.') otherwise - :param eos: type of Equation of State (Murnaghan, Birch, Vinet, etc.) + :param outdir: directory containing the input data. Default to the value of + ESPRESSO_TMPDIR environment variable if set, or current directory ('.') otherwise + :param eos_type: type of equation of state (EOS) for fitting. Available types are:\n + 'murnaghan' (default) -> Murnaghan EOS, PRB 28, 5480 (1983)\n + 'sjeos' -> A third order inverse polynomial fit, PhysRevB.67.026103\n + \t\tE(V) = c_0 + c_1 t + c_2 t^2 + c_3 t^3 , t = V^(-1/3)\n + 'taylor' -> A third order Taylor series expansion around the minimum volume\n + 'vinet' -> Vinet EOS, PRB 70, 224107 \n + 'birch' -> Birch EOS, Intermetallic compounds: Principles and Practice, Vol I: Principles, p. 195\n + 'birchmurnaghan' -> Birch-Murnaghan EOS, PRB 70, 224107\n + 'pouriertarantola' -> Pourier-Tarantola EOS, PRB 70, 224107\n + 'antonschmidt' -> Anton-Schmidt EOS, Intermetallics 11, 23 - 32(2003)\n + 'p3' -> A third order inverse polynomial fit\n + :return: an EOS object """ label = get_label(prefix, outdir) - # Extract volumes and energies from the input file: volumes, energies = read_EtotV(label) - # Create an object EquationOfState and fit with Murnaghan (or other) EOS - eos = QEEquationOfState(volumes, energies, eos=eos) - + eos = QEEquationOfState(volumes, energies, eos=eos_type) return eos +def compute_eos(prefix, outdir=None, eos_type='murnaghan', fileout='', fileplot='EOSplot', show=True, ax=None): + """ + This function fits an Equation of state of type *eos* and writes the results into *filename*. + Different equation of states are available: Murnaghan, Birch, Vinet, etc. + + :param prefix: prefix of saved files for volumes and energies + :param outdir: directory containing the input data. Default to the value of + ESPRESSO_TMPDIR environment variable if set, or current directory ('.') otherwise + :param eos_type: type of equation of state (EOS) for fitting. Available types are:\n + 'murnaghan' (default) -> Murnaghan EOS, PRB 28, 5480 (1983)\n + 'sjeos' -> A third order inverse polynomial fit, PhysRevB.67.026103\n + \t\tE(V) = c_0 + c_1 t + c_2 t^2 + c_3 t^3 , t = V^(-1/3)\n + 'taylor' -> A third order Taylor series expansion around the minimum volume\n + 'vinet' -> Vinet EOS, PRB 70, 224107 \n + 'birch' -> Birch EOS, Intermetallic compounds: Principles and Practice, Vol I: Principles, p. 195\n + 'birchmurnaghan' -> Birch-Murnaghan EOS, PRB 70, 224107\n + 'pouriertarantola' -> Pourier-Tarantola EOS, PRB 70, 224107\n + 'antonschmidt' -> Anton-Schmidt EOS, Intermetallics 11, 23 - 32(2003)\n + 'p3' -> A third order inverse polynomial fit + :param fileout: output file with fitting data and results (default='', not written). + :param fileplot: output plot file (default='EOSplot') in png format. + :param show: True -> plot results with Matplotlib; None or False -> do nothing. Default = True + :param ax: a Matplotlib "Axes" instance (see Matplotlib documentation for details). If ax=None (default), creates + a new one + :return: an EOS object and a Matplotlib figure object + """ + + eos = get_eos(prefix, outdir, eos_type) + v0, e0, B = eos.fit() + if fileout !='': + eos.write(fileout) + fig = eos.plot(fileplot, show=show, ax=ax) + + return eos, fig + def get_band_structure(prefix, outdir=None, schema=None, reference_energy=0): """ This function returns a "band structure" object from an output xml Espresso file containing the results of a proper calculation along a path in the Brilluoin zone. :param prefix: prefix of saved output files - :param outdir: directory containing the input data. Default to the value of \ - ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise + :param outdir: directory containing the input data. Default to the value of + ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise :param schema: the XML schema to be used to read and validate the XML output file :param reference_energy: the Fermi level :return: a band structure object @@ -87,8 +130,8 @@ def get_dos(prefix, outdir=None, schema=None, width=0.01, window= None, npts=100 results of a DOS calculation. :param prefix: prefix of saved output files - :param outdir: directory containing the input data. Default to the value of \ - ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise + :param outdir: directory containing the input data. Default to the value of + ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise :param schema: the XML schema to be used to read and validate the XML output file :param width: width of the gaussian to be used for the DOS (in eV) :param window = emin, emax: defines the minimun and maximun energies for the DOS @@ -117,10 +160,10 @@ def get_charge(prefix, outdir=None, schema=None): corresponding HDF5 charge file containing the results of a calculation. :param prefix: prefix of saved output files - :param outdir: directory containing the input data. Default to the value of \ - ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise + :param outdir: directory containing the input data. Default to the value of + ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise :param schema: the XML schema to be used to read and validate the XML output file - :return a Charge object + :return: a Charge object """ label = get_label(prefix, outdir) @@ -150,11 +193,11 @@ def get_potential(prefix, outdir=None, schema=None, pot_type='vtot'): exchange-correlation (pot_type='v_xc') and total (pot_type='v_tot'). :param prefix: prefix of saved output files - :param outdir: directory containing the input data. Default to the value of \ - ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise + :param outdir: directory containing the input data. Default to the value of + ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise :param schema: the XML schema to be used to read and validate the XML output file :param pot_type: type of the Potential ('vtot', ....) - :return a Potential object + :return: a Potential object """ label = get_label(prefix, outdir) @@ -176,30 +219,3 @@ def get_potential(prefix, outdir=None, schema=None, pot_type='vtot'): return potential -def fit_and_write_eos(label, eos='murnaghan', filename='eos.out'): - """ - This function fits an Equation of state of type *eos* and writes the results into *filename*. - Different equation of states are available: Murnaghan, Birch, Vinet, etc. - - :param label: input file for volumes and energies (possibly including the full path) - :param eos: type of Equation of State (Murnaghan, Birch, Vinet, etc.) - :param filename: name of the output file - """ - - eos = get_eos(label, eos) - v0, e0, B = eos.fit() - eos.write(filename) - -def fit_and_plot_eos(label, eos='murnaghan', filename='EOSplot', show=None, ax=None): - """ - This function fits an Equation of state of type *eos* and writes the results into *filename*. - Different equation of states are available: Murnaghan, Birch, Vinet, etc. - - :param label: input file for volumes and energies (possibly including the full path) - :param eos: type of Equation of State (Murnaghan, Birch, Vinet, etc.) - :param filename: name of the output file - """ - - eos = get_eos(label, eos) - v0, e0, B = eos.fit() - fig = eos.plot(filename, show=show, ax=ax) \ No newline at end of file diff --git a/postqe/cli.py b/postqe/cli.py index 8245b50..27fdbdf 100644 --- a/postqe/cli.py +++ b/postqe/cli.py @@ -15,7 +15,7 @@ from .api import get_charge, get_potential - +# TODO: This is an old version of the parser, to be deleted eventually def get_cli_parser_pp(): import argparse @@ -93,32 +93,81 @@ def get_cli_parser_pp(): return parser - +# New parser with submenus def get_cli_parser(): import argparse + # all help strings are here: + EOS_HELP = 'Fit energy vs volume data with an equation of state.' + BANDS_HELP = 'Calculate energy bands.' + DOS_HELP = 'Calculate the electronic density of states' + CHARGE_HELP = 'Get the electronic charge from Espresso XML and HDF5 output.' + POTENTIAL_HELP = 'Get a potential from Espresso XML and HDF5 output.' PREFIX_HELP = 'prefix of files saved by program pw.x' OUTDIR_HELP = 'directory containing the input data, i.e. the same as in pw.x' SCHEMA_HELP = 'the XSD schema file for QE XML output file. If not provided the schema' \ 'information is taken from xsi:schemaLocation attributes.' + EOS_PREFIX_HELP = 'file containing the energy/volume data.' + EOS_TYPE_HELP = 'type of equation of state (EOS) for fitting. Available types are:\n' \ + 'murnaghan (default) -> Murnaghan EOS, PRB 28, 5480 (1983)\n' \ + 'sjeos -> A third order inverse polynomial fit, PhysRevB.67.026103\n' \ + '\t\tE(V) = c_0 + c_1 t + c_2 t^2 + c_3 t^3 , t = V^(-1/3)\n' \ + 'taylor -> A third order Taylor series expansion around the minimum volume\n' \ + 'vinet -> Vinet EOS, PRB 70, 224107 \n' \ + 'birch -> Birch EOS, Intermetallic compounds: Principles and Practice, Vol I: Principles, p. 195\n' \ + 'birchmurnaghan -> Birch-Murnaghan EOS, PRB 70, 224107\n' \ + 'pouriertarantola -> Pourier-Tarantola EOS, PRB 70, 224107\n' \ + 'antonschmidt -> Anton-Schmidt EOS, Intermetallics 11, 23 - 32(2003)\n' \ + 'p3 -> A third order inverse polynomial fit\n' + EOS_FILEOUT_HELP = 'output file with fitting data and results (default='', not written)' + EOS_FILEPLOT_HELP = 'output plot file in png format (default=\'EOSplot\'). Other formats are available from the ' \ + 'Matplotlib GUI.' + EOS_SHOW_HELP = 'True -> plot results with Matplotlib; None or False -> do nothing. Default = True' + + POT_TYPE_HELP = 'type of the potential to calculate. Available types are:\n' \ + 'v_tot (default) -> the total potential (v_bare+v_hartree+v_xc).\n' \ + 'v_bare -> the bare potential.\n' \ + 'v_hartree = the Hartree potential.\n' \ + 'v_xc -> the exchange-correlation potential.\n' \ + + # TODO: to be finished parser = argparse.ArgumentParser(description='QE post processing') subparsers = parser.add_subparsers(help='sub-command help') + # create the parser for the "eos" command + eos_parser = subparsers.add_parser('eos', help=EOS_HELP) + eos_parser.add_argument('-prefix', type=str, required=True, help=EOS_PREFIX_HELP) + eos_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) + eos_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) + eos_parser.add_argument('-eos_type', type=str, default='murnaghan', help=EOS_TYPE_HELP) + eos_parser.add_argument('-fileout', type=str, default='', help=EOS_FILEOUT_HELP) + eos_parser.add_argument('-fileplot', type=str, default='EOSplot', help=EOS_FILEPLOT_HELP) + eos_parser.add_argument('-show', type=bool, default=True, help=EOS_SHOW_HELP) + + # create the parser for the "bands" command + bands_parser = subparsers.add_parser('bands', help=BANDS_HELP) + bands_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) + bands_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) + bands_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) + + # create the parser for the "dos" command + dos_parser = subparsers.add_parser('dos', help=DOS_HELP) + dos_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) + dos_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) + dos_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) + # create the parser for the "charge" command - charge_parser = subparsers.add_parser( - 'charge', help='Get the charge from Espresso XML and HDF5 output.') + charge_parser = subparsers.add_parser('charge', help=CHARGE_HELP) charge_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) charge_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) charge_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) # create the parser for the "potential" command - potential_parser = subparsers.add_parser( - 'potential', help='Get the potential from Espresso XML and HDF5 output.') + potential_parser = subparsers.add_parser('potential', help=POTENTIAL_HELP) potential_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) potential_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) potential_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) - potential_parser.add_argument( - '-pot_type', type=str, default=None, help="Type of the potential ('vtot', ...).") + potential_parser.add_argument('-pot_type', type=str, default=None, help=POT_TYPE_HELP) return parser diff --git a/postqe/pp.py b/postqe/pp.py index a61e362..ce23b08 100755 --- a/postqe/pp.py +++ b/postqe/pp.py @@ -3,121 +3,13 @@ import numpy as np import os.path -from .readutils import ( read_charge_file_hdf5, - read_wavefunction_file_hdf5, write_charge, create_header -) -from .compute_vs import compute_v_bare, compute_v_h, compute_v_xc -# from .pyqe import pyqe_getcelldms - -# TODO this function must be revised or deleted (see xmlfile.py and possibly use it) -def get_from_xml(filename): - """ - Get some useful values from xml file - """ - import xmlschema - - ########################################################## - # TODO for whatever reason this is not working now - # schemaLoc = xmlschema.fetch_schema(filename) - # xs = xmlschema.XMLSchema(schemaLoc) - # - # temporary local solution - xs = xmlschema.XMLSchema('schemas/qes.xsd') - ########################################################## - - print ("Reading xml file: ", filename) - d = xs.to_dict(filename) - try: - pseudodir = d["input"]["control_variables"]["pseudo_dir"] - except KeyError: - pseudodir = './' # DB: ['./', os.path.dirname(filename)] ... alternatives? - dout = d["output"] - prefix = (d["input"]["control_variables"]["prefix"]) - outdir = (d["input"]["control_variables"]["outdir"]) - ecutwfc = (dout["basis_set"]["ecutwfc"]) - ecutrho = (dout["basis_set"]["ecutrho"]) - alat = (dout["atomic_structure"]["@alat"]) - a1 = np.array(dout["atomic_structure"]["cell"]["a1"]) - a2 = np.array(dout["atomic_structure"]["cell"]["a2"]) - a3 = np.array(dout["atomic_structure"]["cell"]["a3"]) - ibrav = (dout["atomic_structure"]["@bravais_index"]) - b1 = np.array(dout["basis_set"]["reciprocal_lattice"]["b1"]) - b2 = np.array(dout["basis_set"]["reciprocal_lattice"]["b2"]) - b3 = np.array(dout["basis_set"]["reciprocal_lattice"]["b3"]) - functional = np.array(dout["dft"]["functional"]) - a_p = (dout["atomic_structure"]["atomic_positions"]["atom"]) - a_s = (dout["atomic_species"]["species"]) - nat = (dout["atomic_structure"]["@nat"]) - ntyp = (dout["atomic_species"]["@ntyp"]) - lsda = (dout["magnetization"]["lsda"]) - noncolin = (dout["magnetization"]["noncolin"]) - nr = np.array([dout["basis_set"]["fft_grid"]["@nr1"],dout["basis_set"]["fft_grid"]["@nr2"],dout["basis_set"]["fft_grid"]["@nr3"]]) - nr_smooth = np.array([dout["basis_set"]["fft_smooth"]["@nr1"],dout["basis_set"]["fft_smooth"]["@nr2"],dout["basis_set"]["fft_smooth"]["@nr3"]]) - nks = (dout["band_structure"]["nks"]) - nbnd = (dout["band_structure"]["nbnd"]) - ks_energies = (dout["band_structure"]["ks_energies"]) - - # for subsequent loops it is important to have always lists for atomic_positions - # and atomic_species. If this is not, convert - if (type(a_s)==type([])): - atomic_species = a_s - else: - atomic_species = [a_s] - - if (type(a_p)==type([])): - atomic_positions = a_p - else: - atomic_positions = [a_p] - - a = np.array([a1,a2,a3]) - b = np.array([b1,b2,b3]) - - return (prefix, outdir, ecutwfc, ecutrho, ibrav, alat, a, b, functional, atomic_positions, - atomic_species, nat, ntyp, lsda, noncolin, pseudodir, nr, nr_smooth) - def run(pars): - """Run pp with configuration parameters""" - ### DB: creare un oggetto per i parametri?? - # get some needed values from the xml output - prefix, ecutwfc, ecutrho, ibrav, alat, a, b, functional, atomic_positions, atomic_species, \ - nat, ntyp, lsda, noncolin, pseudodir, nr, nr_smooth = get_from_xml("Ni.xml") - celldms = py_getcelldms(alat, a[0], a[1], a[2], ibrav) - - charge_file = pars.outdir + "/charge-density.hdf5" - charge, chargediff = read_charge_file_hdf5(charge_file) - header = create_header("Ni", nr, nr_smooth, ibrav, celldms, nat, ntyp, atomic_species, atomic_positions) - - if (pars.plot_num==0): # Read the charge and write it in filplot - # TODO: handle different spin cases (easy) - write_charge(pars.filplot, charge, header) - - elif (pars.plot_num==1): - v_bare = compute_v_bare( - ecutrho, alat, a[0], a[1], a[2], nr, atomic_positions, atomic_species, pseudodir - ) - v_h = compute_v_h(charge,ecutrho, alat, b) - charge_core = np.zeros(charge.shape) # only for now, later in input - v_xc = compute_v_xc(charge, charge_core, str(functional)) - v_tot = v_bare + v_h + v_xc - write_charge(pars.filplot,v_tot,header) - - elif (pars.plot_num==2): - v_bare = compute_v_bare( - ecutrho, alat, a[0], a[1], a[2], nr, atomic_positions, atomic_species, pseudodir - ) - write_charge(pars.filplot,v_bare,header) + #if (pars. == 0): # Read the charge and write it in filplot + #else: + # print("Not implemented yet") + from .api import compute_eos + compute_eos(pars.prefix, pars.outdir, pars.eos_type, pars.fileout, pars.fileplot, pars.show) - if (pars.plot_num==6): # Write the charge difference (spin up - spin down) for magnetic systems - write_charge(pars.filplot, chargediff, header) - elif (pars.plot_num==11): - v_bare = compute_v_bare(ecutrho, alat, a[0], a[1], a[2], nr, atomic_positions, - atomic_species, pseudodir) - v_h = compute_v_h(charge, ecutrho, alat, b) - v_tot = v_bare + v_h - write_charge(pars.filplot, v_tot, header) - - else: - print ("Not implemented yet") From 08e29ab3e14e7b1df6bbcf5eba7e281302522cdb Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Mon, 16 Oct 2017 16:58:42 +0200 Subject: [PATCH 016/166] revised api, command line interface and documentation for band structure calculation. Minor fixes in other parts. --- doc/_build/doctrees/environment.pickle | Bin 11710 -> 15391 bytes doc/_build/doctrees/introduction.doctree | Bin 16792 -> 17537 bytes doc/_build/doctrees/postqe.doctree | Bin 41838 -> 89703 bytes doc/_build/doctrees/tutorial.doctree | Bin 48650 -> 49071 bytes doc/_build/html/_sources/introduction.txt | 12 +- doc/_build/html/_sources/postqe.txt | 24 +++ doc/_build/html/_sources/tutorial.txt | 4 +- doc/_build/html/genindex.html | 132 +++++++++++++ doc/_build/html/index.html | 3 + doc/_build/html/introduction.html | 11 +- doc/_build/html/objects.inv | Bin 338 -> 501 bytes doc/_build/html/postqe.html | 222 ++++++++++++++++++++-- doc/_build/html/searchindex.js | 2 +- doc/_build/html/tutorial.html | 6 +- doc/introduction.rst | 12 +- doc/postqe.rst | 24 +++ doc/tutorial.rst | 4 +- examples/example1/example1.py | 2 +- postqe/api.py | 43 +++-- postqe/cli.py | 11 ++ postqe/eos.py | 8 +- postqe/pp.py | 13 +- 22 files changed, 476 insertions(+), 57 deletions(-) diff --git a/doc/_build/doctrees/environment.pickle b/doc/_build/doctrees/environment.pickle index 3db97b564d04469ea90b74523dacfc9f204189c3..8c69ac30c8895e11bb27f1b95a049ad5ccacfd20 100644 GIT binary patch literal 15391 zcmds8eT*H~Rkyv~Z|~aPI7tafGxjF&?#A!EtnGE3)U-JE+PEvP9Xm}3#Cpt|H}Bn< z%$s?c4|`Wlr0_?bSiMROOjQ&K)IShvMS)6H)Jh;eN>LFFb}3c(P^iQos6wRz1*uXf zE&T4s%-oqb`@HKlRMgVjnYkb5p7T5Bo^$S*@hjUuwddFt{*O)tU1GT_Rnxs}`JUS` z-7u!Ro{TJ~xu`V#T0Hy9@yqcH9SVG-Y56fdP$OQ)tabFr_qw_hbsAo+yBZSD?fRZ= z8evfDdO`T2S!;SmOn18&VftpX9(qRTn`RJyGNxlKFLIl8j9`y5bkK5}=1NRQ!YK57 zOLt;AB&fu6hvkO8*NlwN^4$13ow{uL0d6g~T{pZ=SNF~M8r{(}yC#UZhJ_^<#~CfQ z!gRG-GgtIZ*D-_S=18q&wIkoGU#^pC*KNmCD;*{09jSI#W4gCw$U;JBUXXdHWQ?-d zim~=;3kh=ze6=!$=93{<4GcY4ve+TX(Aw)9Oo$v@Q>w!SsmgdcSi5L7bhjC-z0#p% zr9*tBM@raLuxUV@YtuTM&^o-P=<~H@t73YRp@;jg7J4CH>^hlXMzRZ|rSa-ri!X6k z)?^UfZ-Y5tt_&_K@m2aP&b=L~JmhnQ}YP%lnA6sffcO0>yVEkn6^zpZ?AHMni_kWK};dZt5nThBA zf=sa6`G1^!-)doHKIET9slgyAkY~s{)I$79yS7UOI?3$2W^I|ul=U&;f zGo2*25c(dJeY?}X)P&G`pX?nIyR#vmTJ0 z)d4qdVKc!dwZ3bBE=;Mkg(|8-;Z^cdrSQVmcay zt;*3#VBvm;-!c@o?oZeXJoxHYXy|(_NpI*u}+75(=nm@m<~Kvosa2cceTxuhCpZ+@mdIn9!H1z>KM-Zxq0iI zpygq3Oz(a^3QS=80=&k@lIEA=fbL=n0x>vRxaCF)}F-E47UI%4}Ww+y`t&beXi z2K$!V^4Kb>c;pQx6F}6?xu)h=_=A-V-|8|DHLs;fMO0zjXRW|69f)jtQNZMf%NS*% z)SG&!Gcy?C8-x2eGROB13l>4*(FS?92o#7pbi^PCKiH1Y7Wrek{b|@Z^JM#;H60{= zrWSgd5MqCzC7g5h?u|bli?nsr*RKehUf(>#T_hmLg~?Z-QI20#a_Cch3Fj?TRo+D4jDHytq2fThE!uu%~m4)wMGUy2$v$Q1cgkztdsLdvhv zk*AXkSc(81vNm#qe4Fz{Zjx_oh8OY<&3Kq7@GvR2jNGOPnBb(?1AgAUL;R3G0U8Sh zPIjD8bN>vHd^@>e4{qJEM_T2+o~axuRw|4CKKdcvLN_i$rX+> zFe6_cM#vnLJB8l_oD(}tA&Ma^)4QbmK(?vPba2RV%vpqcaaYMYV{$W$XY75DlGfOv z2gZn)ha(hH1e}a;h?$wyW-M0|Q{}#>f-dOo%?MS?C#&=yN`@e_?L+jQ5~7%)QhF4T zeEnQLpb+exsM4Kg-69+B!{FTodSZe~M`Lu5toI=@RUm@VJrw%mRHRVAXdmMN5!iJ4 za3NzDQ)e|Duk!H-YwaR~aYG!Q`%rpcL7sGuN-eQUu)4NY7UbCf)Z*fc5%<35S{D&z zO>KsIMGZzN7sV7<8^%J5Lv@l-r=12ZvxO2U=vuClo~V(iqdfSVhAD`IS}O00@ptZwLz5h2_2 zxVe=vk&&G)>n>1H7ub&lF6%ybW@S?|%85nf^q-0 zs6HybH%}{_qVjb(iBPHc>eW&@F=KOf4bo{$Ov$N>?JqZ}68Z&P(-A#}HM0h;>5Po$ zBq&Pc(-FPs&NGXXQL)Yst)$snD0ORs81_@a#!4xuSO~`Zh2E5O!6vxGaw4Z_k_DC$ zkHCBD@_c{-)62+`@SDJI;bnC1WTg@$UpRIvxzy4&GPN{JCYFZC!qOn}>ZZesRx$Yy za_LXT4LXM704p~0iuJLLRIF>_^u&tSqFPNy4NDvvd8KBe?Rbq`Eqk<{RY~YLl6@2| zTpXxE92Us0FV*OP-erd{@Pt~2n+Qt>f{@qNvXkx77MwL)&*kZWIBN_ArtTYr9k0a= zxp@`m4t5YH3*w6B?X82TH=;q@pk>>Od;q)PX{2qUp2RBb_HQGFJK9-Afa4(Iz&C!8%Z@?_j?!0gva`R$$bK1rK91+ctFirA*6=y}Avf(e z**zOUcbw%ZwRVQfp3VFtbS5(yAQBa2=3sHkSCuKhgL^V%e;ya*Yz8iVk992Azt1}I zN0e8A%Qz0pZI2(FxhV~M4gS6ab`sG6R%XG8&i*teFKw~EfeUNjYLvBZgSvYL&)6-t z{sd|eJS74&w$;;eNVJTwvK}vmVARt+qZWHwj+D%+l(g;dZA+^pJZEJ5akVi1p6Xf0 z?`c`-rDz}PZKD%8{|+x=|0_mekzWvl2YEiqR&@#uDT7F`vw3MNvYo8ej>KdIQbn zYhi5vSN`!w`N!|)9wS(_0oT`Ks1e;}3+j1ekLaGNy@@DO6sY+L_)rKDJI{-?`{144!?gu++oF*8B7~xg!vo5D&=;5UE!^C&kAWI0J_>`ZR>EnQq9bM< z5wl7Jj~ezII6X+q@%CkH7-iO zO9OP+(7CHb7sG7!0^f?g zw^Z7rLTQR&Ls<)XWqmOJ__Mi3)F7u2{4B!^G!&S$kiG8+lp0`JFED!@R8qm@UfYPp z(z~Vs8(X%5Wh-)7)rvoX705gGQ|dx}%=a}h{O8v>TmWak%7>dw`&jE0{)AYsm^FMlB@wgU6tmXj0A>n;-%{?!Pg(qpr-oM|DCCE_qnWPhw^y}@6-TwR5gb_??p|AD zC6eUR4Q+l_F~v;~0mScY5@LFEx+R3DK!^$#q9TN-a3Lz4L<)EYpGC*$92cW zs~~eP)#Ra^Cij6OIQ#W#@|FRHTn2?*eClkMANnTlN$TLK)!ipep6Ii@J?2! zRoQljRpo7h2=sMkv-BjB$0id(FvT#xDTJsb%1gcE;hc_6ZA?ceeoQ(# zxB(q4tfiw35`m67cT`6Q*R7+4oQ~{`>8SmGsG}#+eU$B@fcd?q)#9K0gm_6MU!Mh< zvXPFcO4_*Cg#YniH8m}OQolPXK(!N+$sPNDdZhfyZ-=62POm#-9KHS>b&R0MWHJfJ!F-baSvs0L@&Z z1n~J>eeN$Ao9C{$p1>^4&VeR*NNA*N--|q4w$}m2VtTU zs17U37C`%JF0cJ(>Wb?z4uRGUG5arXZ}!*u?7kJYTU*@3X;wHy5tRKm1hv{;=m4zm zscdf2`sgISrQ{1&#KHw!zb}xvO_@S7 Ma%L8^qNq{*A2Gr`sQ>@~ literal 11710 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 ReP(W#rZro$zPG}1;r|^!!Z82< diff --git a/doc/_build/doctrees/introduction.doctree b/doc/_build/doctrees/introduction.doctree index 4cd0304bd6ba587f4666c4f270fb4a07d15db0ff..97cc18490731fb962e1ff4d47b4c100c05895e5f 100644 GIT binary patch literal 17537 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 ST~fHUB%L)1V-ziEH~$y-450`B diff --git a/doc/_build/doctrees/postqe.doctree b/doc/_build/doctrees/postqe.doctree index 82b26ccad93fba884d19daab2bf24cafa5aee545..9287e49adc1fa7080b3970fcabd222fd5ec8b454 100644 GIT binary patch literal 89703 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 Y32_~m;3$kVFmID*ylh literal 41838 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 diff --git a/doc/_build/doctrees/tutorial.doctree b/doc/_build/doctrees/tutorial.doctree index 95941f4e4aaa7e9e4b5006bc5a69dde93eaffb09..53fd090b455911c33808ed2c83d9d4ba5e583610 100644 GIT binary patch literal 49071 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%0D*r9YY-ND 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 diff --git a/doc/_build/html/_sources/introduction.txt b/doc/_build/html/_sources/introduction.txt index 2ff818d..479aa65 100644 --- a/doc/_build/html/_sources/introduction.txt +++ b/doc/_build/html/_sources/introduction.txt @@ -5,19 +5,21 @@ Introduction **************** -:py:mod:`postqe` is a Python package for postprocessing of results obtained with the Quantum Espresso (QE) code [#QE]_. The package provides Python API functions for example for plotting the charge density (or the bare/Hartree/total potentials) on 1D or 2D sections, fitting the total energy with an equation of state (EOS) and other tasks. The package makes available in Python some QE functionalities using the F2PY code [#F2PY]_ and wrappers to generate Python modules from QE dynamically linked libraries. Finally, it also includes an interface with the popular Atomic Simulation Environment (*ASE*) [#ASE]_, which in fact leverages for some functionalities. +:py:mod:`postqe` is a Python package for postprocessing of results obtained with the Quantum Espresso (*QE*) code [#QE]_. The package provides Python API functions for the most common tasks, such as plotting the charge density or fitting the total energy with an equation of state (EOS). It also makes available in Python some QE functionalities using the F2PY code [#F2PY]_ and wrappers to generate Python modules from QE dynamically linked libraries. Finally, it also includes an interface with the popular Atomic Simulation Environment (*ASE*) [#ASE]_, from which in fact leverages for some functionalities. -It is meant to be imported in your own Python code or used from the command line (see the Tutorial part of this documentation). It is also meant for people who want to tinker with the code and adapt it to their own needs. The package is based on *numpy*, *scipy*, *matplotlib* and *ASE* libraries. +The package implents some Python classes for handling the most important quantities, such as the charge or a potential. Some classes are derived from *ASE* and adapted to the postprocessing needs of QE. -It is also meant as a software framework where Quantum Espresso developers or advanced users may implement new functionalities which are needed by the community. In this respect, it offers the possibility to develop code in different languages (Python, C/C++, Fortran) and then use Python to "glue" everything together. +It is meant to be imported into your own Python scripts or used from the command line interface (see the Tutorial for some examples). It is also meant for people who want to tinker with the code and adapt it to their own needs. The package is based on *numpy*, *scipy*, *matplotlib* and *ASE* libraries. + +Finally it is a software framework where Quantum Espresso developers or advanced users may implement new functionalities which are needed by the community. In this respect, it offers the possibility to develop code in different languages (Python, C/C++, Fortran) and then use Python to "glue" everything together. Current features of the package include: * Fit the total energy :math:`E_{tot}(V)` with an equation of state (Murnaghan, Vinet, Birch, etc.) * Calculate and plot the electronic band structure * Calculate and plot the electronic density of states (DOS) -* Plot 1D or 2D sections of the charge density -* Plot 1D or 2D sections of different potentials (Hartree, exchange-correlation, etc.) +* Plot 1D, 2D or 3D sections of the charge density +* Plot 1D, 2D or 3D sections of different potentials (Hartree, exchange-correlation, etc.) .. [#QE] http://www.quantum-espresso.org/ .. [#F2PY] https://docs.scipy.org/doc/numpy-dev/f2py/ diff --git a/doc/_build/html/_sources/postqe.txt b/doc/_build/html/_sources/postqe.txt index 50b48ab..f488962 100644 --- a/doc/_build/html/_sources/postqe.txt +++ b/doc/_build/html/_sources/postqe.txt @@ -14,6 +14,30 @@ postqe.api module :undoc-members: :show-inheritance: +postqe.eos module +------------------------- + +.. automodule:: postqe.eos + :members: + :undoc-members: + :show-inheritance: + +postqe.dos module +------------------------- + +.. automodule:: postqe.dos + :members: + :undoc-members: + :show-inheritance: + +postqe.charge module +------------------------- + +.. automodule:: postqe.charge + :members: + :undoc-members: + :show-inheritance: + diff --git a/doc/_build/html/_sources/tutorial.txt b/doc/_build/html/_sources/tutorial.txt index 26f2aa2..89c43d4 100644 --- a/doc/_build/html/_sources/tutorial.txt +++ b/doc/_build/html/_sources/tutorial.txt @@ -4,7 +4,7 @@ Tutorial ********* -This is a simple tutorial demonstrating the main functionalities of :py:mod:`postqe`. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory *examples* of the package and can be run either as interactive sessions in your Python intepreter or as scripts. +This is a simple tutorial demonstrating the main functionalities of :py:mod:`postqe`. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory *examples* of the package and can be run either as interactive sessions in your Python interpreter or as scripts. The tutorial is based on the following examples: +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ @@ -31,7 +31,7 @@ Fitting the total energy using Murnaghan EOS (examples 1) =========================================================== The simplest task you can do with :py:mod:`postqe` is to fit the total energy as a function of volume :math:`E_{tot}(V)`. You can use -an equation of state (EOS) such as Murnaghan's or similar. Currently you can use Murnaghan, Vinet, Birch, Birch-Murnaghan, Pourier-Tarantola and Anton-schmidt EOS and 2nd and 3rd order polynomials in :py:mod:`postqe`. +an equation of state (EOS) such as Murnaghan's or similar. Currently you can use Murnaghan, Vinet, Birch, Birch-Murnaghan, Pourier-Tarantola and Anton-schmidt EOS and 3rd order (direct and inverse) polynomials in :py:mod:`postqe`. See the documentation of :py:func:`get_eos` for details. Let's see how to fit :math:`E_{tot}(V)`. This is the case of isotropic cubic systems (simple cubic, body centered cubic, face centered cubic) or systems which can be approximated as isotropic (for example an hexagonal system with nearly constant :math:`c/a` ratio). diff --git a/doc/_build/html/genindex.html b/doc/_build/html/genindex.html index 423d74b..83392ad 100644 --- a/doc/_build/html/genindex.html +++ b/doc/_build/html/genindex.html @@ -53,15 +53,37 @@

Index

C | G | P + | Q + | R + | S + | W

C

+
+
Charge (class in postqe.charge) +
+ + +
compute_band_structure() (in module postqe.api) +
+ +
compute_eos() (in module postqe.api)
+
+ +
compute_potential() (postqe.charge.Potential method) +
+ + +
create_header() (in module postqe.eos) +
+
@@ -80,6 +102,10 @@

G

get_dos() (in module postqe.api)
+ +
get_dos_int() (postqe.dos.QEDOS method) +
+

@@ -101,9 +127,115 @@

P

+ +
+
plot() (postqe.charge.Charge method) +
+ +
+ +
(postqe.charge.Potential method) +
+ +
+
postqe.api (module)
+ +
postqe.charge (module) +
+ +
+ +
postqe.dos (module) +
+ + +
postqe.eos (module) +
+ + +
Potential (class in postqe.charge) +
+ +
+ +

Q

+ + + +
+ +
QEDOS (class in postqe.dos) +
+ +
+ +
QEEquationOfState (class in postqe.eos) +
+ +
+ +

R

+ + + +
+ +
read() (postqe.charge.Charge method) +
+ +
+ +
read_charge_file_hdf5() (in module postqe.charge) +
+ +
+ +

S

+ + + +
+ +
set_calculator() (postqe.charge.Charge method) +
+ +
+ +
setvars() (postqe.charge.Charge method) +
+ +
+ +

W

+ + +
+ +
write() (postqe.charge.Charge method) +
+ +
+ +
(postqe.charge.Potential method) +
+ + +
(postqe.dos.QEDOS method) +
+ + +
(postqe.eos.QEEquationOfState method) +
+ +
+
+ +
write_charge() (in module postqe.charge) +
+
diff --git a/doc/_build/html/index.html b/doc/_build/html/index.html index 80fa5ca..ec01c6a 100644 --- a/doc/_build/html/index.html +++ b/doc/_build/html/index.html @@ -75,6 +75,9 @@

Welcome to postqe’s documentation!postqe package diff --git a/doc/_build/html/introduction.html b/doc/_build/html/introduction.html index 0d47bee..571a4be 100644 --- a/doc/_build/html/introduction.html +++ b/doc/_build/html/introduction.html @@ -55,16 +55,17 @@

Navigation

Introduction

-

postqe is a Python package for postprocessing of results obtained with the Quantum Espresso (QE) code [1]. The package provides Python API functions for example for plotting the charge density (or the bare/Hartree/total potentials) on 1D or 2D sections, fitting the total energy with an equation of state (EOS) and other tasks. The package makes available in Python some QE functionalities using the F2PY code [2] and wrappers to generate Python modules from QE dynamically linked libraries. Finally, it also includes an interface with the popular Atomic Simulation Environment (ASE) [3], which in fact leverages for some functionalities.

-

It is meant to be imported in your own Python code or used from the command line (see the Tutorial part of this documentation). It is also meant for people who want to tinker with the code and adapt it to their own needs. The package is based on numpy, scipy, matplotlib and ASE libraries.

-

It is also meant as a software framework where Quantum Espresso developers or advanced users may implement new functionalities which are needed by the community. In this respect, it offers the possibility to develop code in different languages (Python, C/C++, Fortran) and then use Python to “glue” everything together.

+

postqe is a Python package for postprocessing of results obtained with the Quantum Espresso (QE) code [1]. The package provides Python API functions for the most common tasks, such as plotting the charge density or fitting the total energy with an equation of state (EOS). It also makes available in Python some QE functionalities using the F2PY code [2] and wrappers to generate Python modules from QE dynamically linked libraries. Finally, it also includes an interface with the popular Atomic Simulation Environment (ASE) [3], from which in fact leverages for some functionalities.

+

The package implents some Python classes for handling the most important quantities, such as the charge or a potential. Some classes are derived from ASE and adapted to the postprocessing needs of QE.

+

It is meant to be imported into your own Python scripts or used from the command line interface (see the Tutorial for some examples). It is also meant for people who want to tinker with the code and adapt it to their own needs. The package is based on numpy, scipy, matplotlib and ASE libraries.

+

Finally it is a software framework where Quantum Espresso developers or advanced users may implement new functionalities which are needed by the community. In this respect, it offers the possibility to develop code in different languages (Python, C/C++, Fortran) and then use Python to “glue” everything together.

Current features of the package include:

  • Fit the total energy \(E_{tot}(V)\) with an equation of state (Murnaghan, Vinet, Birch, etc.)
  • Calculate and plot the electronic band structure
  • Calculate and plot the electronic density of states (DOS)
  • -
  • Plot 1D or 2D sections of the charge density
  • -
  • Plot 1D or 2D sections of different potentials (Hartree, exchange-correlation, etc.)
  • +
  • Plot 1D, 2D or 3D sections of the charge density
  • +
  • Plot 1D, 2D or 3D sections of different potentials (Hartree, exchange-correlation, etc.)
diff --git a/doc/_build/html/objects.inv b/doc/_build/html/objects.inv index d41ba95205922e970d23535d42a0f2511cc31b16..f5a58e9d9682aa409ee18bf7d1083c5cb96446e4 100644 GIT binary patch delta 392 zcmV;30eAk=0`&uscYmFfO;5ux42JLh6_McDiXm~?6?Wi&HZ<;)m$)BN)?|qT?BA0v zZMRB8OLlAB_pxKYb+oc{zyfs3^l`aY!bxOLOownod-)K8`6J6SJ*f+>_SzAaJLp7d z$v95VV4tLN9j8`xY%xpo50A>mLp9Rf1$&k^VCqChq#iK2BYz1ylxc`ogdMdIiJkk7 zbT|OT>%?&h*4`>G=nE|sor)nfO2kqIL8Mc*w-qFJ5=fc5_-`;a9sDsZVFI?fv@C9% z6Ebbf%=gs7slJ@S)Lwflhh;0PR$|$R>Luk@4Hc92b=cF$AKa^p&(+&{8{x*J9q)s( z?V{#*2BQavNq=47sle*spr6gU+7eLAx?bgy4q0&Tv3IEPPNTWu5LjfE#4=oT`GWcR z8Q;uFf0k9x`WU0Dv1>blzjN&v4LbJTKWCQ-Zl`{~h-H4-SE}e^K7JSqeFUpQy+c%^ m7Qyglt_-mu=Qap7P-8~U-)sHG&*WotO!_svXMY;w!vWOq1;%y& delta 227 zcmV<90384I1JVMJcYl?VK@P$o5JmT#f<(7%)TK9YVPc~D24QSTS{PwS?CrJEsu&Z? z4nFVCXJF8Jxy|g;A9!7bFD-d0yEFS7&-u?gg_uYQ-7aJPTR^Lt6Z^30x1{liJ3JV$HQ7_xO(| z|HdvG?B{Sb7;O~XQg%`!$9Kb;eHQp%diSBR$H4qZ!M>Od#-M$iwwQOF)u;#IWRsFn d8*3gTa1b>x3S`~z#tA;DQ_<77XLnYS6Az3JYj6Mn diff --git a/doc/_build/html/postqe.html b/doc/_build/html/postqe.html index 36e75b6..b0c54d2 100644 --- a/doc/_build/html/postqe.html +++ b/doc/_build/html/postqe.html @@ -58,17 +58,46 @@

Submodules

postqe.api module

A collection of functions to be part of postqe API and exposed to the user.

+
+
+postqe.api.compute_band_structure(prefix, outdir=None, schema=None, reference_energy=0, emin=-50, emax=50, fileplot='bandsplot.png', show=True)
+

This function returns a “band structure” object from an output xml Espresso file +containing the results of a proper calculation along a path in the Brilluoin zone.

+

+++ + + + + + +
Parameters:
    +
  • prefix – prefix of saved output files
  • +
  • outdir – directory containing the input data. Default to the value of +ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
  • +
  • schema – the XML schema to be used to read and validate the XML output file
  • +
  • reference_energy – the Fermi level, defines the zero of the plot along y axis
  • +
  • emin – the minimum energy for the band plot (default=-50)
  • +
  • emax – the maximum energy for the band plot (default=50)
  • +
  • fileplot – output plot file (default=’bandsplot.png’) in png format.
  • +
  • show – True -> plot results with Matplotlib; None or False -> do nothing. Default = True
  • +
+
Returns:

an ASE band structure object and a Matplotlib figure object

+
+
+
postqe.api.compute_eos(prefix, outdir=None, eos_type='murnaghan', fileout='', fileplot='EOSplot', show=True, ax=None)
-

This function fits an Equation of state of type eos and writes the results into filename. -Different equation of states are available: Murnaghan, Birch, Vinet, etc.

+

Fits an Equation of state of type eos, writes the results into fileout (optionally) and creates a Matplotlib +figure. Different equation of states are available (see below).

@@ -113,11 +142,11 @@

Submodules

@@ -178,15 +207,14 @@

Submodules
postqe.api.get_eos(prefix, outdir=None, eos_type='murnaghan')
-

Returns an EOS object from a text input file containing the volumes -and corresponding calculated energies. -Different equation of states are available: Murnaghan, Birch, Vinet, etc.

+

Fits an Equation of state of type eos and returns an QEEquationOfState object. +Different equation of states are available (see below).

Parameters:
    -
  • prefix – prefix of saved files for volumes and energies
  • +
  • prefix – name of the input file with volumes and energies
  • outdir – directory containing the input data. Default to the value of ESPRESSO_TMPDIR environment variable if set, or current directory (‘.’) otherwise
  • eos_type

    type of equation of state (EOS) for fitting. Available types are:

    @@ -85,14 +114,14 @@

    Submodules

Returns:

an EOS object and a Matplotlib figure object

+
Returns:

an QEEquationOfState object and a Matplotlib figure object

Returns:

a band structure object

+
Returns:

an ASE band structure object

@@ -244,6 +272,173 @@

Submodules +

postqe.eos module

+

A specialization of ASE EquationOfState class with a modified default EOS type and a write method.

+
+
+class postqe.eos.QEEquationOfState(volumes, energies, eos_type='murnaghan')
+

Bases: ase.eos.EquationOfState

+
+
+write(filename='eos.out')
+
+ +
+ +
+
+postqe.eos.create_header(eos, v0, e0, B)
+
+ + +
+

postqe.dos module

+
+
+class postqe.dos.QEDOS(calc, width=0.1, window=None, npts=201)
+

Bases: ase.dft.dos.DOS

+
+
+get_dos_int()
+

Get array of integral DOS values (always for the total DOS).

+
+ +
+
+write(filename='dos.out')
+
+ +
+ +
+
+

postqe.charge module

+
+
+class postqe.charge.Charge(*args, **kwargs)
+

Bases: object

+

A class for charge density.

+
+
+plot(x0=(0.0, 0.0, 0.0), e1=(1.0, 0.0, 0.0), nx=50, e2=(0.0, 1.0, 0.0), ny=50, e3=(0.0, 0.0, 1.0), nz=50, radius=1, dim=1, ifmagn='total', plot_file='', method='FFT', format='gnuplot')
+

Plot a 1D or 2D section of the charge from x0 along e1 (e2) direction(s) using Fourier interpolation.

+

Parameters:
    -
  • prefix – prefix of saved files for volumes and energies
  • +
  • prefix – name of the input file with volumes and energies
  • outdir – directory containing the input data. Default to the value of ESPRESSO_TMPDIR environment variable if set, or current directory (‘.’) otherwise
  • eos_type

    type of equation of state (EOS) for fitting. Available types are:

    @@ -205,7 +233,7 @@

    Submodules

Returns:

an EOS object

+
Returns:

an QEEquationOfState object

+++ + + + + + +
Parameters:
    +
  • x0 – 3D vector, origin of the line
  • +
  • e2 (e1,) – 3D vectors which determines the plotting lines
  • +
  • ny (nx,) – number of points along e1, e2
  • +
  • dim – 1 for a 1D section, 2 for a 2D section
  • +
  • ifmagn – for a magnetic calculation, ‘total’ plot the total charge, ‘up’ plot the charge with spin up, ‘down’ for spin down
  • +
+
Returns:

a Matplotlib figure object

+
+
+ +
+
+read(filename, nr=None)
+

Read the charge from a HDF5 file.

+ +++ + + + + + +
Parameters:
    +
  • filename – HDF5 file with charge data
  • +
  • nr – a numpy array or list of length 3 containing the grid dimensions
  • +
+
Returns:

nothing

+
+
+ +
+
+set_calculator(calculator)
+
+ +
+
+setvars(nr_temp, charge=None, charge_diff=None)
+
+ +
+
+write(filename)
+
+ + + +
+
+class postqe.charge.Potential(*args, **kwargs)
+

Bases: postqe.charge.Charge

+

A class for a potential. This is derived from a Charge class and additionally contains the potential.

+
+
+compute_potential(pot_type='v_tot')
+
+ +
+
+plot(x0=(0.0, 0.0, 0.0), e1=(1.0, 0.0, 0.0), nx=50, e2=(1.0, 0.0, 0.0), ny=50, dim=1, ifmagn='total')
+

Plot a 1D or 2D section of the charge from x0 along e1 (e2) direction(s) using Fourier interpolation.

+ +++ + + + + + +
Parameters:
    +
  • x0 – 3D vector, origin of the line
  • +
  • e2 (e1,) – 3D vectors which determines the plotting lines
  • +
  • ny (nx,) – number of points along e1, e2
  • +
  • dim – 1 for a 1D section, 2 for a 2D section
  • +
  • ifmagn – for a magnetic calculation, ‘total’ plot the total charge, ‘up’ plot the charge with spin up, ‘down’ for spin down
  • +
+
Returns:

a Matplotlib figure object

+
+
+ +
+
+write(filename)
+
+ +
+ +
+
+postqe.charge.read_charge_file_hdf5(filename, nr=None)
+

Reads a charge file written with QE in HDF5 format. nr = [nr1,nr2,nr3] (the dimensions of +the charge k-points grid) are given as parameter (taken for the xml output file by the caller).

+

Notes: In the new format, the values of the charge in the reciprocal space are stored. +Besides, only the values of the charge > cutoff are stored, together with the Miller indexes. +Hence

+
+ +
+
+postqe.charge.write_charge(filename, charge, header)
+

Write the charge or another quantity calculated by postqe into a text file filename.

+
+ @@ -258,6 +453,9 @@

Table Of Contents

  • postqe package
  • diff --git a/doc/_build/html/searchindex.js b/doc/_build/html/searchindex.js index 4260356..33df1d0 100644 --- a/doc/_build/html/searchindex.js +++ b/doc/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{compute_eos:[2,1,1,""],get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},postqe:{api:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"]},objtypes:{"0":"py:module","1":"py:function"},terms:{"0e24":3,"2nd":3,"3rd":3,"case":3,"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":[1,2],"return":[1,2,3],"true":[2,3],abov:1,accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,ang:3,ani:1,anton:[2,3],antonschmidt:2,api:1,approxim:3,around:2,atom:1,automat:3,avail:[1,2,3],band:1,bare:[1,2,3],base:[1,3],below:3,birch:[1,2,3],birchmurnaghan:2,bodi:3,brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,c_0:2,c_1:2,c_2:2,c_3:2,calcul:1,call:3,can:[1,2,3],center:3,charg:1,choic:1,code:[1,3],collect:2,column:3,command:1,common:[1,3],commun:1,compound:2,comput:3,compute_eo:2,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:[2,3],cubic:3,current:[1,2,3],dat:3,data:[1,2,3],defin:[2,3],demonstr:3,densiti:1,detail:[1,2],dev:1,develop:1,differ:1,dim:3,direct:3,directli:1,directori:[2,3],doc:1,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:[2,3],emin:[2,3],energi:1,environ:[1,2],eos_typ:2,eosplot:2,equat:[1,2,3],equilibrium:3,espresso:[1,2,3],espresso_tmpdir:2,essentiali:3,etc:[1,2],everyth:1,exampl:1,except:3,exchang:[1,2,3],expans:2,expos:2,extract:3,f2py:1,face:3,fact:[1,3],fals:2,featur:1,fermi:[2,3],fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:[2,3],figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:[2,3],fileout:2,fileplot:2,first:3,fit:1,fit_and_plot_eo:[],fit_and_write_eo:[],follow:3,format:3,fortran:1,found:3,framework:1,from:[1,2,3],full:3,fulli:1,further:[1,3],fysik:1,gaussian:[2,3],gener:[],get:3,get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:3,glue:1,gpa:3,hartre:[1,2,3],hdf5:[2,3],henc:1,here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,implement:1,includ:1,incomplet:2,index:0,inform:3,initi:3,input:[2,3],instal:[],instanc:2,intepret:3,interact:3,interfac:1,intermetal:2,introduct:[],invers:2,isotrop:3,label:3,languag:1,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:1,link:1,look:3,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,2,3],maximun:2,meant:1,method:3,minimum:2,minimun:2,modifi:3,modul:1,modulu:3,more:1,most:[1,3],murnaghan:1,must:3,name:[],nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:[],noth:2,npt:[2,3],number:[1,2,3],numpi:1,object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:[1,2],option:3,order:[2,3],org:1,origin:3,other:[1,3],otherwis:2,out:3,outdir:[2,3],output:[2,3],outputcharg:3,own:1,packag:1,page:0,param:[],paramet:[2,3],pars:3,part:[1,2],path:[2,3],pdf:3,peopl:1,perform:3,person:1,physrevb:2,planar:3,plane:3,pleas:2,plot:[],plot_ev:3,plt:3,plu:3,png:3,point:[2,3],polynomi:[2,3],popular:1,possibl:1,post:1,postprocess:1,pot_typ:[2,3],potenti:1,pourier:[2,3],pouriertarantola:2,practic:2,prb:2,prefix:[2,3],previou:3,principl:2,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:3,provid:1,pseudopotenti:3,pyplot:3,python:[1,3],quantiti:3,quantum:[1,3],ratio:3,read:[2,3],reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:[2,3],scipi:1,script:3,search:0,second:3,section:1,see:[1,2,3],seri:2,session:3,set:2,setup:1,sever:3,shift:3,show:[2,3],shown:3,siband:3,silicon:[],similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,sjeo:2,softwar:1,some:[1,3],specif:1,specifi:3,standard:3,state:1,step:3,still:[1,2],str:3,structur:1,submodul:1,sudo:1,system:3,tailor:3,taken:3,tarantola:[2,3],task:[1,3],tast:1,taylor:2,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],third:2,tinker:1,togeth:[1,3],tool:1,total:1,tutori:1,two:3,type:[2,3],under:1,unit:[1,3],user:[1,2],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:2,vector:3,version:[],vinet:[1,2,3],vol:2,volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,3],who:1,width:[2,3],wiki:1,window:2,wrapper:1,write:[2,3],written:[2,3],wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:3,densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file +Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{compute_band_structure:[2,1,1,""],compute_eos:[2,1,1,""],get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},"postqe.charge":{Charge:[2,2,1,""],Potential:[2,2,1,""],read_charge_file_hdf5:[2,1,1,""],write_charge:[2,1,1,""]},"postqe.charge.Charge":{plot:[2,3,1,""],read:[2,3,1,""],set_calculator:[2,3,1,""],setvars:[2,3,1,""],write:[2,3,1,""]},"postqe.charge.Potential":{compute_potential:[2,3,1,""],plot:[2,3,1,""],write:[2,3,1,""]},"postqe.dos":{QEDOS:[2,2,1,""]},"postqe.dos.QEDOS":{get_dos_int:[2,3,1,""],write:[2,3,1,""]},"postqe.eos":{QEEquationOfState:[2,2,1,""],create_header:[2,1,1,""]},"postqe.eos.QEEquationOfState":{write:[2,3,1,""]},postqe:{api:[2,0,0,"-"],charge:[2,0,0,"-"],dos:[2,0,0,"-"],eos:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"0e24":3,"2nd":[],"3rd":3,"case":3,"class":[1,2],"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":[1,2],"return":[1,2,3],"true":[2,3],abov:1,accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],addition:2,advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,alwai:2,ang:3,ani:1,anoth:2,anton:[2,3],antonschmidt:2,api:[],approxim:3,arg:2,around:2,arrai:2,atom:1,automat:3,avail:[1,2,3],axi:2,band:[],bandsplot:2,bare:[2,3],base:[1,2,3],below:[2,3],besid:2,birch:[1,2,3],birchmurnaghan:2,bodi:3,brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,c_0:2,c_1:2,c_2:2,c_3:2,calc:2,calcul:[],call:3,caller:2,can:[1,2,3],center:3,charg:[],charge_diff:2,choic:1,code:[1,3],collect:2,column:3,command:1,common:[1,3],commun:1,compound:2,comput:3,compute_band_structur:2,compute_eo:2,compute_potenti:2,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:[2,3],create_head:2,cubic:3,current:[1,2,3],cutoff:2,dat:3,data:[1,2,3],defin:[2,3],demonstr:3,densiti:[],deriv:[1,2],detail:[1,2,3],determin:2,dev:1,develop:1,dft:2,differ:[],dim:[2,3],dimens:2,direct:[2,3],directli:1,directori:[2,3],doc:1,down:2,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:[2,3],emin:[2,3],energi:[],environ:[1,2],eos_typ:[2,3],eosplot:2,equat:[1,2,3],equationofst:2,equilibrium:3,espresso:[1,2,3],espresso_tmpdir:2,essentiali:3,etc:1,everyth:1,exampl:[],except:3,exchang:[1,2,3],expans:2,expos:2,extract:3,f2py:1,face:3,fact:[1,3],fals:2,featur:1,fermi:[2,3],fft:2,fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:[2,3],figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:[2,3],fileout:2,fileplot:2,first:3,fit:[],fit_and_plot_eo:[],fit_and_write_eo:[],follow:3,format:[2,3],fortran:1,found:3,fourier:2,framework:1,from:[1,2,3],full:3,fulli:1,further:[1,3],fysik:1,gaussian:[2,3],gener:[],get:[2,3],get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_dos_int:2,get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:[2,3],glue:1,gnuplot:2,gpa:3,grid:2,handl:1,hartre:[1,2,3],hdf5:[2,3],header:2,henc:[1,2],here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,ifmagn:2,implement:1,implent:1,includ:1,incomplet:2,index:[0,2],inform:3,initi:3,input:[2,3],instal:[],instanc:2,integr:2,intepret:[],interact:3,interfac:1,intermetal:2,interpol:2,interpret:3,introduct:[],invers:[2,3],isotrop:3,kwarg:2,label:3,languag:1,length:2,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:[1,2],link:1,list:2,look:3,magnet:2,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,2,3],maximum:2,maximun:2,meant:1,method:[2,3],miller:2,minimum:2,minimun:2,modifi:[2,3],modul:[],modulu:3,more:1,most:[1,3],murnaghan:[],must:3,name:2,nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:[],noth:2,npt:[2,3],nr1:2,nr2:2,nr3:2,nr_temp:2,number:[1,2,3],numpi:[1,2],object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:[1,2],option:[2,3],order:[2,3],org:1,origin:[2,3],other:[1,3],otherwis:2,out:[2,3],outdir:[2,3],output:[2,3],outputcharg:3,own:1,packag:[],page:0,param:[],paramet:[2,3],pars:3,part:2,path:[2,3],pdf:3,peopl:1,perform:3,person:1,physrevb:2,planar:3,plane:3,pleas:2,plot:[],plot_ev:3,plot_fil:2,plt:3,plu:3,png:[2,3],point:[2,3],polynomi:[2,3],popular:1,possibl:1,post:1,postprocess:1,pot_typ:[2,3],potenti:[],pourier:[2,3],pouriertarantola:2,practic:2,prb:2,prefix:[2,3],previou:3,principl:2,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:3,provid:1,pseudopotenti:3,pyplot:3,python:[1,3],qedo:2,qeequationofst:2,quantiti:[1,2,3],quantum:[1,3],radiu:2,ratio:3,read:[2,3],read_charge_file_hdf5:2,reciproc:2,reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:[2,3],scipi:1,script:[1,3],search:0,second:3,section:[],see:[1,2,3],seri:2,session:3,set:2,set_calcul:2,setup:1,setvar:2,sever:3,shift:3,show:[2,3],shown:3,siband:3,silicon:[],similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,sjeo:2,softwar:1,some:[1,3],space:2,special:2,specif:1,specifi:3,spin:2,standard:3,state:[],step:3,still:[1,2],store:2,str:3,structur:[],submodul:[],sudo:1,system:3,tailor:3,taken:[2,3],tarantola:[2,3],task:[1,3],tast:1,taylor:2,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],third:2,tinker:1,togeth:[1,2,3],tool:1,total:[],tutori:[],two:3,type:[2,3],under:1,unit:[1,3],user:[1,2],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:2,vector:[2,3],version:[],vinet:[1,2,3],vol:2,volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,2,3],who:1,width:[2,3],wiki:1,window:2,wrapper:1,write:[2,3],write_charg:2,written:[2,3],wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zero:2,zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:[2,3],densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file diff --git a/doc/_build/html/tutorial.html b/doc/_build/html/tutorial.html index 36e0314..87d2e3c 100644 --- a/doc/_build/html/tutorial.html +++ b/doc/_build/html/tutorial.html @@ -55,18 +55,18 @@

    Navigation

    Tutorial

    -

    This is a simple tutorial demonstrating the main functionalities of postqe. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory examples of the package and can be run either as interactive sessions in your Python intepreter or as scripts. +

    This is a simple tutorial demonstrating the main functionalities of postqe. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory examples of the package and can be run either as interactive sessions in your Python interpreter or as scripts. The tutorial is based on the following examples:

    Several simplified plotting functions are available in postqe and are used in the following tutorial to show what you can plot. Note however that all plotting functions need the matplotlib library, which must be available on your system and can be used to further tailor your plot.

    Fitting the total energy using Murnaghan EOS (examples 1)

    The simplest task you can do with postqe is to fit the total energy as a function of volume \(E_{tot}(V)\). You can use -an equation of state (EOS) such as Murnaghan’s or similar. Currently you can use Murnaghan, Vinet, Birch, Birch-Murnaghan, Pourier-Tarantola and Anton-schmidt EOS and 2nd and 3rd order polynomials in postqe.

    +an equation of state (EOS) such as Murnaghan’s or similar. Currently you can use Murnaghan, Vinet, Birch, Birch-Murnaghan, Pourier-Tarantola and Anton-schmidt EOS and 3rd order (direct and inverse) polynomials in postqe. See the documentation of get_eos() for details.

    Let’s see how to fit \(E_{tot}(V)\). This is the case of isotropic cubic systems (simple cubic, body centered cubic, face centered cubic) or systems which can be approximated as isotropic (for example an hexagonal system with nearly constant \(c/a\) ratio).

    from postqe import units, get_eos
     
    -eos = get_eos(prefix='Nienergies.dat', eos='murnaghan')
    +eos = get_eos(prefix='Nienergies.dat', eos_type='murnaghan')
     v0, e0, B = eos.fit()
     # Print some data and plot
     print('Equilibrium volume = '+str(v0)+' Ang^3')
    diff --git a/doc/introduction.rst b/doc/introduction.rst
    index 2ff818d..479aa65 100644
    --- a/doc/introduction.rst
    +++ b/doc/introduction.rst
    @@ -5,19 +5,21 @@
     Introduction
     ****************
     
    -:py:mod:`postqe` is a Python package for postprocessing of results obtained with the Quantum Espresso (QE) code [#QE]_. The package provides Python API functions for example for plotting the charge density (or the bare/Hartree/total potentials) on 1D or 2D sections, fitting the total energy with an equation of state (EOS) and other tasks. The package makes available in Python some QE functionalities using the F2PY code [#F2PY]_ and wrappers to generate Python modules from QE dynamically linked libraries. Finally, it also includes an interface with the popular Atomic Simulation Environment (*ASE*) [#ASE]_, which in fact leverages for some functionalities.
    +:py:mod:`postqe` is a Python package for postprocessing of results obtained with the Quantum Espresso (*QE*) code [#QE]_. The package provides Python API functions for the most common tasks, such as plotting the charge density or fitting the total energy with an equation of state (EOS). It also makes available in Python some QE functionalities using the F2PY code [#F2PY]_ and wrappers to generate Python modules from QE dynamically linked libraries. Finally, it also includes an interface with the popular Atomic Simulation Environment (*ASE*) [#ASE]_, from which in fact leverages for some functionalities.
     
    -It is meant to be imported in your own Python code or used from the command line (see the Tutorial part of this documentation). It is also meant for people who want to tinker with the code and adapt it to their own needs. The package is based on *numpy*, *scipy*, *matplotlib* and *ASE* libraries.
    +The package implents some Python classes for handling the most important quantities, such as the charge or a potential. Some classes are derived from *ASE* and adapted to the postprocessing needs of QE.
     
    -It is also meant as a software framework where Quantum Espresso developers or advanced users may implement new functionalities which are needed by the community. In this respect, it offers the possibility to develop code in different languages (Python, C/C++, Fortran) and then use Python to "glue" everything together.
    +It is meant to be imported into your own Python scripts or used from the command line interface (see the Tutorial for some examples). It is also meant for people who want to tinker with the code and adapt it to their own needs. The package is based on *numpy*, *scipy*, *matplotlib* and *ASE* libraries.
    +
    +Finally it is a software framework where Quantum Espresso developers or advanced users may implement new functionalities which are needed by the community. In this respect, it offers the possibility to develop code in different languages (Python, C/C++, Fortran) and then use Python to "glue" everything together.
     
     Current features of the package include: 
     
     * Fit the total energy :math:`E_{tot}(V)` with an equation of state (Murnaghan, Vinet, Birch, etc.)
     * Calculate and plot the electronic band structure
     * Calculate and plot the electronic density of states (DOS)
    -* Plot 1D or 2D sections of the charge density 
    -* Plot 1D or 2D sections of different potentials (Hartree, exchange-correlation, etc.)
    +* Plot 1D, 2D or 3D sections of the charge density 
    +* Plot 1D, 2D or 3D sections of different potentials (Hartree, exchange-correlation, etc.)
     
     .. [#QE] http://www.quantum-espresso.org/
     .. [#F2PY]  https://docs.scipy.org/doc/numpy-dev/f2py/
    diff --git a/doc/postqe.rst b/doc/postqe.rst
    index 50b48ab..f488962 100644
    --- a/doc/postqe.rst
    +++ b/doc/postqe.rst
    @@ -14,6 +14,30 @@ postqe.api module
         :undoc-members:
         :show-inheritance:
     
    +postqe.eos module
    +-------------------------
    +
    +.. automodule:: postqe.eos
    +    :members:
    +    :undoc-members:
    +    :show-inheritance:
    +
    +postqe.dos module
    +-------------------------
    +
    +.. automodule:: postqe.dos
    +    :members:
    +    :undoc-members:
    +    :show-inheritance:
    +
    +postqe.charge module
    +-------------------------
    +
    +.. automodule:: postqe.charge
    +    :members:
    +    :undoc-members:
    +    :show-inheritance:
    +
     
     
     
    diff --git a/doc/tutorial.rst b/doc/tutorial.rst
    index 26f2aa2..89c43d4 100644
    --- a/doc/tutorial.rst
    +++ b/doc/tutorial.rst
    @@ -4,7 +4,7 @@
     Tutorial
     *********
     
    -This is a simple tutorial demonstrating the main functionalities of :py:mod:`postqe`. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory *examples* of the package and can be run either as interactive sessions in your Python intepreter or as scripts.
    +This is a simple tutorial demonstrating the main functionalities of :py:mod:`postqe`. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory *examples* of the package and can be run either as interactive sessions in your Python interpreter or as scripts.
     The tutorial is based on the following examples:
     
     +---------------+------------------------------------------------------------------------------------------------------------------------------------------+
    @@ -31,7 +31,7 @@ Fitting the total energy using Murnaghan EOS (examples 1)
     ===========================================================
     
     The simplest task you can do with :py:mod:`postqe` is to fit the total energy as a function of volume :math:`E_{tot}(V)`. You can use
    -an equation of state (EOS) such as Murnaghan's or similar.  Currently you can use Murnaghan, Vinet, Birch, Birch-Murnaghan, Pourier-Tarantola and Anton-schmidt EOS and 2nd and 3rd order polynomials in :py:mod:`postqe`. 
    +an equation of state (EOS) such as Murnaghan's or similar.  Currently you can use Murnaghan, Vinet, Birch, Birch-Murnaghan, Pourier-Tarantola and Anton-schmidt EOS and 3rd order (direct and inverse) polynomials in :py:mod:`postqe`. See the documentation of :py:func:`get_eos` for details.
     
     Let's see how to fit :math:`E_{tot}(V)`. This is the case of isotropic cubic systems (simple cubic, body centered cubic, face centered cubic) or systems which can be approximated as isotropic (for example an hexagonal system with nearly constant :math:`c/a` ratio).
     
    diff --git a/examples/example1/example1.py b/examples/example1/example1.py
    index f84a21e..756f10e 100755
    --- a/examples/example1/example1.py
    +++ b/examples/example1/example1.py
    @@ -9,7 +9,7 @@
     if __name__ == "__main__":
         from postqe import units, get_eos
     
    -    eos = get_eos(prefix='Nienergies.dat', eos='murnaghan')
    +    eos = get_eos(prefix='Nienergies.dat', eos_type='murnaghan')
         v0, e0, B = eos.fit()
         # Print some data and plot
         print('Equilibrium volume = '+str(v0)+' Ang^3')
    diff --git a/postqe/api.py b/postqe/api.py
    index 227bd56..dca3fda 100644
    --- a/postqe/api.py
    +++ b/postqe/api.py
    @@ -33,11 +33,10 @@ def get_label(prefix, outdir=None):
     
     def get_eos(prefix, outdir=None, eos_type='murnaghan'):
         """
    -    Returns an EOS object from a text input file containing the volumes
    -    and corresponding calculated energies.
    -    Different equation of states are available: Murnaghan, Birch, Vinet, etc.
    +    Fits an Equation of state of type *eos* and returns an QEEquationOfState object.
    +    Different equation of states are available (see below).
     
    -    :param prefix: prefix of saved files for volumes and energies
    +    :param prefix: name of the input file with volumes and energies
         :param outdir: directory containing the input data. Default to the value of
                 ESPRESSO_TMPDIR environment variable if set, or current directory ('.') otherwise
         :param eos_type: type of equation of state (EOS) for fitting. Available types are:\n
    @@ -52,7 +51,7 @@ def get_eos(prefix, outdir=None, eos_type='murnaghan'):
                 'antonschmidt' -> Anton-Schmidt EOS, Intermetallics 11, 23 - 32(2003)\n
                 'p3' -> A third order inverse polynomial fit\n
     
    -    :return: an EOS object
    +    :return: an QEEquationOfState object
         """
         label = get_label(prefix, outdir)
         # Extract volumes and energies from the input file:
    @@ -64,10 +63,10 @@ def get_eos(prefix, outdir=None, eos_type='murnaghan'):
     
     def compute_eos(prefix, outdir=None, eos_type='murnaghan', fileout='', fileplot='EOSplot', show=True, ax=None):
         """
    -    This function fits an Equation of state of type *eos* and writes the results into *filename*.
    -    Different equation of states are available: Murnaghan, Birch, Vinet, etc.
    +    Fits an Equation of state of type *eos*, writes the results into *fileout* (optionally) and creates a Matplotlib
    +    figure. Different equation of states are available (see below).
     
    -    :param prefix: prefix of saved files for volumes and energies
    +    :param prefix: name of the input file with volumes and energies
         :param outdir: directory containing the input data. Default to the value of
                 ESPRESSO_TMPDIR environment variable if set, or current directory ('.') otherwise
         :param eos_type: type of equation of state (EOS) for fitting. Available types are:\n
    @@ -86,7 +85,7 @@ def compute_eos(prefix, outdir=None, eos_type='murnaghan', fileout='', fileplot=
         :param show: True -> plot results with Matplotlib; None or False -> do nothing. Default = True
         :param ax: a Matplotlib "Axes" instance (see Matplotlib documentation for details). If ax=None (default), creates
                 a new one
    -    :return: an EOS object and a Matplotlib figure object
    +    :return: an QEEquationOfState object and a Matplotlib figure object
         """
     
         eos = get_eos(prefix, outdir, eos_type)
    @@ -106,8 +105,8 @@ def get_band_structure(prefix, outdir=None, schema=None, reference_energy=0):
         :param outdir: directory containing the input data. Default to the value of
                 ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise
         :param schema: the XML schema to be used to read and validate the XML output file
    -    :param reference_energy: the Fermi level
    -    :return: a band structure object
    +    :param reference_energy: the Fermi level, defines the zero of the plot along y axis
    +    :return: an ASE band structure object
         """
         label = get_label(prefix, outdir)
     
    @@ -123,6 +122,28 @@ def get_band_structure(prefix, outdir=None, schema=None, reference_energy=0):
     
         return bs
     
    +def compute_band_structure(prefix, outdir=None, schema=None, reference_energy=0,
    +                           emin=-50, emax=50, fileplot='bandsplot.png', show=True):
    +    """
    +    This function returns a "band structure" object from an output xml Espresso file
    +    containing the results of a proper calculation along a path in the Brilluoin zone.
    +
    +    :param prefix: prefix of saved output files
    +    :param outdir: directory containing the input data. Default to the value of
    +            ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise
    +    :param schema: the XML schema to be used to read and validate the XML output file
    +    :param reference_energy: the Fermi level, defines the zero of the plot along y axis
    +    :param emin: the minimum energy for the band plot (default=-50)
    +    :param emax: the maximum energy for the band plot (default=50)
    +    :param fileplot: output plot file (default='bandsplot.png') in png format.
    +    :param show: True -> plot results with Matplotlib; None or False -> do nothing. Default = True
    +    :return: an ASE band structure object and a Matplotlib figure object
    +    """
    +
    +    bs = get_band_structure(prefix, outdir, schema=schema, reference_energy=reference_energy)
    +    fig = bs.plot(emin=emin, emax=emax, show=show, filename=fileplot)
    +
    +    return bs, fig
     
     def get_dos(prefix, outdir=None, schema=None, width=0.01, window= None, npts=100):
         """
    diff --git a/postqe/cli.py b/postqe/cli.py
    index 27fdbdf..98725b4 100644
    --- a/postqe/cli.py
    +++ b/postqe/cli.py
    @@ -123,6 +123,12 @@ def get_cli_parser():
                             'Matplotlib GUI.'
         EOS_SHOW_HELP = 'True -> plot results with Matplotlib; None or False -> do nothing. Default = True'
     
    +    BANDS_REFERENCE_ENERGY_HELP = 'the Fermi level, defines the zero of the plot along y axis (default=0)'
    +    BANDS_REFERENCE_EMIN_HELP = 'the minimum energy for the band plot (default=-50)'
    +    BANDS_REFERENCE_EMAX_HELP = 'the maximum energy for the band plot (default=50)'
    +    BANDS_REFERENCE_FILEPLOT_HELP = 'output plot file (default=\'bandsplot\') in png format.'
    +
    +
         POT_TYPE_HELP = 'type of the potential to calculate. Available types are:\n' \
                         'v_tot (default) -> the total potential (v_bare+v_hartree+v_xc).\n' \
                         'v_bare -> the bare potential.\n' \
    @@ -149,6 +155,11 @@ def get_cli_parser():
         bands_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP)
         bands_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP)
         bands_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP)
    +    bands_parser.add_argument('-reference_energy', type=float, default=0, help=BANDS_REFERENCE_ENERGY_HELP)
    +    bands_parser.add_argument('-emin', type=float, default=-50, help=BANDS_REFERENCE_EMIN_HELP)
    +    bands_parser.add_argument('-emax', type=float, default=50, help=BANDS_REFERENCE_EMAX_HELP)
    +    bands_parser.add_argument('-fileplot', type=str, default='bandsplot', help=BANDS_REFERENCE_FILEPLOT_HELP)
    +    bands_parser.add_argument('-show', type=bool, default=True, help=EOS_SHOW_HELP)
     
         # create the parser for the "dos" command
         dos_parser = subparsers.add_parser('dos', help=DOS_HELP)
    diff --git a/postqe/eos.py b/postqe/eos.py
    index bb72e2c..0b4d851 100644
    --- a/postqe/eos.py
    +++ b/postqe/eos.py
    @@ -1,6 +1,10 @@
     #!/usr/bin/env python3
     #encoding: UTF-8
     
    +"""
    +A specialization of ASE EquationOfState class with a modified default EOS type and a write method.
    +"""
    +
     from ase.eos import EquationOfState
     
     def create_header(eos, v0, e0, B):
    @@ -12,8 +16,8 @@ def create_header(eos, v0, e0, B):
     
     class QEEquationOfState(EquationOfState):
     
    -    def __init__(self, volumes, energies, eos='murnaghan'):
    -        EquationOfState.__init__(self, volumes, energies, eos=eos)
    +    def __init__(self, volumes, energies, eos_type='murnaghan'):
    +        EquationOfState.__init__(self, volumes, energies, eos=eos_type)
     
         def write(self,filename='eos.out'):
             self.filename = filename
    diff --git a/postqe/pp.py b/postqe/pp.py
    index ce23b08..6964961 100755
    --- a/postqe/pp.py
    +++ b/postqe/pp.py
    @@ -1,15 +1,12 @@
     #!/usr/bin/env python3
     #encoding: UTF-8
     
    -import numpy as np
    -import os.path
    +from .api import compute_eos, compute_band_structure
     
     def run(pars):
     
    -    #if (pars. == 0):  # Read the charge and write it in filplot
    -    #else:
    -    #    print("Not implemented yet")
    -    from .api import compute_eos
    -    compute_eos(pars.prefix, pars.outdir, pars.eos_type, pars.fileout, pars.fileplot, pars.show)
    -
    +    # TODO: implement submenus
    +    #compute_eos(pars.prefix, pars.outdir, pars.eos_type, pars.fileout, pars.fileplot, pars.show)
     
    +    compute_band_structure(pars.prefix, pars.outdir, pars.schema, pars.reference_energy,
    +                           pars.emin, pars.emax, pars.fileplot, pars.show)
    \ No newline at end of file
    
    From 0808a9c13a4b9e844e9634433bc055b7dfab90d4 Mon Sep 17 00:00:00 2001
    From: Mauro Palumbo 
    Date: Mon, 16 Oct 2017 17:47:17 +0200
    Subject: [PATCH 017/166] revised api, command line interface and documentation
     for dos calculation. Minor fixes in other parts.
    
    ---
     doc/_build/doctrees/environment.pickle | Bin 15391 -> 15525 bytes
     doc/_build/doctrees/postqe.doctree     | Bin 89703 -> 98944 bytes
     doc/_build/doctrees/tutorial.doctree   | Bin 49071 -> 50767 bytes
     doc/_build/html/_sources/tutorial.txt  |   4 ++-
     doc/_build/html/genindex.html          |   8 +++--
     doc/_build/html/objects.inv            | Bin 501 -> 504 bytes
     doc/_build/html/postqe.html            |  34 ++++++++++++++++++-
     doc/_build/html/searchindex.js         |   2 +-
     doc/_build/html/tutorial.html          |   4 ++-
     doc/tutorial.rst                       |   4 ++-
     postqe/api.py                          |  44 ++++++++++++++++++++++++-
     postqe/cli.py                          |  29 +++++++++++-----
     postqe/dos.py                          |   5 +++
     postqe/pp.py                           |   7 ++--
     14 files changed, 123 insertions(+), 18 deletions(-)
    
    diff --git a/doc/_build/doctrees/environment.pickle b/doc/_build/doctrees/environment.pickle
    index 8c69ac30c8895e11bb27f1b95a049ad5ccacfd20..5dc95b364b6b1f44183ece2e41ac95b5da1fd503 100644
    GIT binary patch
    literal 15525
    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
    q1RxbLFFb}3c(P^iQos6wRz1*uXf
    zE&T4s%-oqb`@HKlRMgVjnYkb5p7T5Bo^$S*@hjUuwddFt{*O)tU1GT_Rnxs}`JUS`
    z-7u!Ro{TJ~xu`V#T0Hy9@yqcH9SVG-Y56fdP$OQ)tabFr_qw_hbsAo+yBZSD?fRZ=
    z8evfDdO`T2S!;SmOn18&VftpX9(qRTn`RJyGNxlKFLIl8j9`y5bkK5}=1NRQ!YK57
    zOLt;AB&fu6hvkO8*NlwN^4$13ow{uL0d6g~T{pZ=SNF~M8r{(}yC#UZhJ_^<#~CfQ
    z!gRG-GgtIZ*D-_S=18q&wIkoGU#^pC*KNmCD;*{09jSI#W4gCw$U;JBUXXdHWQ?-d
    zim~=;3kh=ze6=!$=93{<4GcY4ve+TX(Aw)9Oo$v@Q>w!SsmgdcSi5L7bhjC-z0#p%
    zr9*tBM@raLuxUV@YtuTM&^o-P=<~H@t73YRp@;jg7J4CH>^hlXMzRZ|rSa-ri!X6k
    z)?^UfZ-Y5tt_&_K@m2aP&b=L~JmhnQ}YP%lnA6sffcO0>yVEkn6^zpZ?AHMni_kWK};dZt5nThBA
    zf=sa6`G1^!-)doHKIET9slgyAkY~s{)I$79yS7UOI?3$2W^I|ul=U&;f
    zGo2*25c(dJeY?}X)P&G`pX?nIyR#vmTJ0
    z)d4qdVKc!dwZ3bBE=;Mkg(|8-;Z^cdrSQVmcay
    zt;*3#VBvm;-!c@o?oZeXJoxHYXy|(_NpI*u}+75(=nm@m<~Kvosa2cceTxuhCpZ+@mdIn9!H1z>KM-Zxq0iI
    zpygq3Oz(a^3QS=80=&k@lIEA=fbL=n0x>vRxaCF)}F-E47UI%4}Ww+y`t&beXi
    z2K$!V^4Kb>c;pQx6F}6?xu)h=_=A-V-|8|DHLs;fMO0zjXRW|69f)jtQNZMf%NS*%
    z)SG&!Gcy?C8-x2eGROB13l>4*(FS?92o#7pbi^PCKiH1Y7Wrek{b|@Z^JM#;H60{=
    zrWSgd5MqCzC7g5h?u|bli?nsr*RKehUf(>#T_hmLg~?Z-QI20#a_Cch3Fj?TRo+D4jDHytq2fThE!uu%~m4)wMGUy2$v$Q1cgkztdsLdvhv
    zk*AXkSc(81vNm#qe4Fz{Zjx_oh8OY<&3Kq7@GvR2jNGOPnBb(?1AgAUL;R3G0U8Sh
    zPIjD8bN>vHd^@>e4{qJEM_T2+o~axuRw|4CKKdcvLN_i$rX+>
    zFe6_cM#vnLJB8l_oD(}tA&Ma^)4QbmK(?vPba2RV%vpqcaaYMYV{$W$XY75DlGfOv
    z2gZn)ha(hH1e}a;h?$wyW-M0|Q{}#>f-dOo%?MS?C#&=yN`@e_?L+jQ5~7%)QhF4T
    zeEnQLpb+exsM4Kg-69+B!{FTodSZe~M`Lu5toI=@RUm@VJrw%mRHRVAXdmMN5!iJ4
    za3NzDQ)e|Duk!H-YwaR~aYG!Q`%rpcL7sGuN-eQUu)4NY7UbCf)Z*fc5%<35S{D&z
    zO>KsIMGZzN7sV7<8^%J5Lv@l-r=12ZvxO2U=vuClo~V(iqdfSVhAD`IS}O00@ptZwLz5h2_2
    zxVe=vk&&G)>n>1H7ub&lF6%ybW@S?|%85nf^q-0
    zs6HybH%}{_qVjb(iBPHc>eW&@F=KOf4bo{$Ov$N>?JqZ}68Z&P(-A#}HM0h;>5Po$
    zBq&Pc(-FPs&NGXXQL)Yst)$snD0ORs81_@a#!4xuSO~`Zh2E5O!6vxGaw4Z_k_DC$
    zkHCBD@_c{-)62+`@SDJI;bnC1WTg@$UpRIvxzy4&GPN{JCYFZC!qOn}>ZZesRx$Yy
    za_LXT4LXM704p~0iuJLLRIF>_^u&tSqFPNy4NDvvd8KBe?Rbq`Eqk<{RY~YLl6@2|
    zTpXxE92Us0FV*OP-erd{@Pt~2n+Qt>f{@qNvXkx77MwL)&*kZWIBN_ArtTYr9k0a=
    zxp@`m4t5YH3*w6B?X82TH=;q@pk>>Od;q)PX{2qUp2RBb_HQGFJK9-Afa4(Iz&C!8%Z@?_j?!0gva`R$$bK1rK91+ctFirA*6=y}Avf(e
    z**zOUcbw%ZwRVQfp3VFtbS5(yAQBa2=3sHkSCuKhgL^V%e;ya*Yz8iVk992Azt1}I
    zN0e8A%Qz0pZI2(FxhV~M4gS6ab`sG6R%XG8&i*teFKw~EfeUNjYLvBZgSvYL&)6-t
    z{sd|eJS74&w$;;eNVJTwvK}vmVARt+qZWHwj+D%+l(g;dZA+^pJZEJ5akVi1p6Xf0
    z?`c`-rDz}PZKD%8{|+x=|0_mekzWvl2YEiqR&@#uDT7F`vw3MNvYo8ej>KdIQbn
    zYhi5vSN`!w`N!|)9wS(_0oT`Ks1e;}3+j1ekLaGNy@@DO6sY+L_)rKDJI{-?`{144!?gu++oF*8B7~xg!vo5D&=;5UE!^C&kAWI0J_>`ZR>EnQq9bM<
    z5wl7Jj~ezII6X+q@%CkH7-iO
    zO9OP+(7CHb7sG7!0^f?g
    zw^Z7rLTQR&Ls<)XWqmOJ__Mi3)F7u2{4B!^G!&S$kiG8+lp0`JFED!@R8qm@UfYPp
    z(z~Vs8(X%5Wh-)7)rvoX705gGQ|dx}%=a}h{O8v>TmWak%7>dw`&jE0{)AYsm^FMlB@wgU6tmXj0A>n;-%{?!Pg(qpr-oM|DCCE_qnWPhw^y}@6-TwR5gb_??p|AD
    zC6eUR4Q+l_F~v;~0mScY5@LFEx+R3DK!^$#q9TN-a3Lz4L<)EYpGC*$92cW
    zs~~eP)#Ra^Cij6OIQ#W#@|FRHTn2?*eClkMANnTlN$TLK)!ipep6Ii@J?2!
    zRoQljRpo7h2=sMkv-BjB$0id(FvT#xDTJsb%1gcE;hc_6ZA?ceeoQ(#
    zxB(q4tfiw35`m67cT`6Q*R7+4oQ~{`>8SmGsG}#+eU$B@fcd?q)#9K0gm_6MU!Mh<
    zvXPFcO4_*Cg#YniH8m}OQolPXK(!N+$sPNDdZhfyZ-=62POm#-9KHS>b&R0MWHJfJ!F-baSvs0L@&Z
    z1n~J>eeN$Ao9C{$p1>^4&VeR*NNA*N--|q4w$}m2VtTU
    zs17U37C`%JF0cJ(>Wb?z4uRGUG5arXZ}!*u?7kJYTU*@3X;wHy5tRKm1hv{;=m4zm
    zscdf2`sgISrQ{1&#KHw!zb}xvO_@S7
    Ma%L8^qNq{*A2Gr`sQ>@~
    
    diff --git a/doc/_build/doctrees/postqe.doctree b/doc/_build/doctrees/postqe.doctree
    index 9287e49adc1fa7080b3970fcabd222fd5ec8b454..ac364f0dcee6a84eceacf0735f036c1d0565b60b 100644
    GIT binary patch
    literal 98944
    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� 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 E4^bPIQvd(} literal 89703 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 Y32_~m;3$kVFmID*ylh diff --git a/doc/_build/doctrees/tutorial.doctree b/doc/_build/doctrees/tutorial.doctree index 53fd090b455911c33808ed2c83d9d4ba5e583610..46561bff309b3f1e38bc5996a073b4b10855009f 100644 GIT binary patch literal 50767 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 aU%AN%Hw5P#3a6(sTO9U0?H*{Z=KnvvWrLXj literal 49071 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%0D*r9YY-ND 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 -

    compute_band_structure() (in module postqe.api) +
    comput_dos() (in module postqe.api)
    -
    compute_eos() (in module postqe.api) +
    compute_band_structure() (in module postqe.api)
    +
    compute_eos() (in module postqe.api) +
    + +
    compute_potential() (postqe.charge.Potential method)
    diff --git a/doc/_build/html/objects.inv b/doc/_build/html/objects.inv index f5a58e9d9682aa409ee18bf7d1083c5cb96446e4..b97cd6f94d74baad1170a592e6f974a904f85058 100644 GIT binary patch delta 393 zcmV;40e1fN1NZ}wd4E4|!Y~lU_k0RV?V6}m>cZMGFjP>{Ju>#?k7QzFpWE{7>)<31 z2?-w?T;9(wch4829Uh_Jre)@|JZR|^uoq@xxxs^aipBhy<(Zk(h0q7%v6R~NVC6f3 zt?t-jhTdeL-1APB4y_mHEzo(OnAU&~8}_VdxUGqdq`n}zBY(yBplFEE2pzUO5xexA zcq<}Myic4^+_`%OgT63IeXLvwuQ+P^5dXuiql3S;MId0?>&Vi^ zIU&=w%yOq1Q**h1)L#22hh;0PRzcaw>Wy+$qa$fwhdoWa;6Yt{tv)upgfu4Y_&q4w zE@_SzFnNGL>VE>x2CJjz{cJYX4mqZ*>rIaIl7$EvhlHAtG}t={aR;i nfLqbbm9aLQxr>4=uOUMpzH9x)&*WouJoJ0`pZx>kVFK2Ay_C&; delta 389 zcmV;00eb%U1N8%td4Ek$!!Qhn@BI~#;M$5IaoH7i;D9zX?vnY;LJFg6|hF)d*Nwz;${Zk!V` zZOhE})WWI0oWayydn<=!E2~yw*@)^TfoTC&AQqWP|Uhs<&q9raPP5qsPRstx#194WR}D-Ty*(@`S}^& z%t?QiRnPhuqpPuNJAuD*?HCO@_TE2dmkDmCe!qxie%e>6=wm*97z%v^t3tg)RHGKb j@Mf+Iu_5O+2sTh-M$X@B{l?GaV{}aVHN0nk8so#%mionP diff --git a/doc/_build/html/postqe.html b/doc/_build/html/postqe.html index b0c54d2..f4636cc 100644 --- a/doc/_build/html/postqe.html +++ b/doc/_build/html/postqe.html @@ -57,7 +57,37 @@

    Submodules

    postqe.api module

    -

    A collection of functions to be part of postqe API and exposed to the user.

    +

    A collection of functions defining postqe API and exposed to the user.

    +
    +
    +postqe.api.comput_dos(prefix, outdir=None, schema=None, width=0.01, window=None, npts=100, fileout='', fileplot='dosplot.png', show=True)
    +

    This function returns an DOS object from an output xml Espresso file containing the +results of a DOS calculation.

    + +++ + + + + + +
    Parameters:
      +
    • prefix – prefix of saved output files
    • +
    • outdir – directory containing the input data. Default to the value of +ESPRESSO_TMPDIR environment variable if set or current directory (‘.’) otherwise
    • +
    • schema – the XML schema to be used to read and validate the XML output file
    • +
    • width – width of the gaussian to be used for the DOS (in eV)
    • +
    • = emin, emax (window) – defines the minimun and maximun energies for the DOS
    • +
    • npts – number of points of the DOS
    • +
    • fileout – output file with DOS results (default=’‘, not written).
    • +
    • fileplot – output plot file (default=’dosplot’) in png format.
    • +
    • show – True -> plot results with Matplotlib; None or False -> do nothing. Default = True
    • +
    +
    Returns:

    a DOS object and a Matplotlib figure object

    +
    +
    +
    postqe.api.compute_band_structure(prefix, outdir=None, schema=None, reference_energy=0, emin=-50, emax=50, fileplot='bandsplot.png', show=True)
    @@ -295,6 +325,8 @@

    Submodules

    postqe.dos module

    +

    A specialization of ASE DOS class with a new get_dos_int method for computing the integral of the DOS +and a modified write method to write it properly.

    class postqe.dos.QEDOS(calc, width=0.1, window=None, npts=201)
    diff --git a/doc/_build/html/searchindex.js b/doc/_build/html/searchindex.js index 33df1d0..2e9b040 100644 --- a/doc/_build/html/searchindex.js +++ b/doc/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{compute_band_structure:[2,1,1,""],compute_eos:[2,1,1,""],get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},"postqe.charge":{Charge:[2,2,1,""],Potential:[2,2,1,""],read_charge_file_hdf5:[2,1,1,""],write_charge:[2,1,1,""]},"postqe.charge.Charge":{plot:[2,3,1,""],read:[2,3,1,""],set_calculator:[2,3,1,""],setvars:[2,3,1,""],write:[2,3,1,""]},"postqe.charge.Potential":{compute_potential:[2,3,1,""],plot:[2,3,1,""],write:[2,3,1,""]},"postqe.dos":{QEDOS:[2,2,1,""]},"postqe.dos.QEDOS":{get_dos_int:[2,3,1,""],write:[2,3,1,""]},"postqe.eos":{QEEquationOfState:[2,2,1,""],create_header:[2,1,1,""]},"postqe.eos.QEEquationOfState":{write:[2,3,1,""]},postqe:{api:[2,0,0,"-"],charge:[2,0,0,"-"],dos:[2,0,0,"-"],eos:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"0e24":3,"2nd":[],"3rd":3,"case":3,"class":[1,2],"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":[1,2],"return":[1,2,3],"true":[2,3],abov:1,accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],addition:2,advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,alwai:2,ang:3,ani:1,anoth:2,anton:[2,3],antonschmidt:2,api:[],approxim:3,arg:2,around:2,arrai:2,atom:1,automat:3,avail:[1,2,3],axi:2,band:[],bandsplot:2,bare:[2,3],base:[1,2,3],below:[2,3],besid:2,birch:[1,2,3],birchmurnaghan:2,bodi:3,brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,c_0:2,c_1:2,c_2:2,c_3:2,calc:2,calcul:[],call:3,caller:2,can:[1,2,3],center:3,charg:[],charge_diff:2,choic:1,code:[1,3],collect:2,column:3,command:1,common:[1,3],commun:1,compound:2,comput:3,compute_band_structur:2,compute_eo:2,compute_potenti:2,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:[2,3],create_head:2,cubic:3,current:[1,2,3],cutoff:2,dat:3,data:[1,2,3],defin:[2,3],demonstr:3,densiti:[],deriv:[1,2],detail:[1,2,3],determin:2,dev:1,develop:1,dft:2,differ:[],dim:[2,3],dimens:2,direct:[2,3],directli:1,directori:[2,3],doc:1,down:2,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:[2,3],emin:[2,3],energi:[],environ:[1,2],eos_typ:[2,3],eosplot:2,equat:[1,2,3],equationofst:2,equilibrium:3,espresso:[1,2,3],espresso_tmpdir:2,essentiali:3,etc:1,everyth:1,exampl:[],except:3,exchang:[1,2,3],expans:2,expos:2,extract:3,f2py:1,face:3,fact:[1,3],fals:2,featur:1,fermi:[2,3],fft:2,fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:[2,3],figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:[2,3],fileout:2,fileplot:2,first:3,fit:[],fit_and_plot_eo:[],fit_and_write_eo:[],follow:3,format:[2,3],fortran:1,found:3,fourier:2,framework:1,from:[1,2,3],full:3,fulli:1,further:[1,3],fysik:1,gaussian:[2,3],gener:[],get:[2,3],get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_dos_int:2,get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:[2,3],glue:1,gnuplot:2,gpa:3,grid:2,handl:1,hartre:[1,2,3],hdf5:[2,3],header:2,henc:[1,2],here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,ifmagn:2,implement:1,implent:1,includ:1,incomplet:2,index:[0,2],inform:3,initi:3,input:[2,3],instal:[],instanc:2,integr:2,intepret:[],interact:3,interfac:1,intermetal:2,interpol:2,interpret:3,introduct:[],invers:[2,3],isotrop:3,kwarg:2,label:3,languag:1,length:2,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:[1,2],link:1,list:2,look:3,magnet:2,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,2,3],maximum:2,maximun:2,meant:1,method:[2,3],miller:2,minimum:2,minimun:2,modifi:[2,3],modul:[],modulu:3,more:1,most:[1,3],murnaghan:[],must:3,name:2,nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:[],noth:2,npt:[2,3],nr1:2,nr2:2,nr3:2,nr_temp:2,number:[1,2,3],numpi:[1,2],object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:[1,2],option:[2,3],order:[2,3],org:1,origin:[2,3],other:[1,3],otherwis:2,out:[2,3],outdir:[2,3],output:[2,3],outputcharg:3,own:1,packag:[],page:0,param:[],paramet:[2,3],pars:3,part:2,path:[2,3],pdf:3,peopl:1,perform:3,person:1,physrevb:2,planar:3,plane:3,pleas:2,plot:[],plot_ev:3,plot_fil:2,plt:3,plu:3,png:[2,3],point:[2,3],polynomi:[2,3],popular:1,possibl:1,post:1,postprocess:1,pot_typ:[2,3],potenti:[],pourier:[2,3],pouriertarantola:2,practic:2,prb:2,prefix:[2,3],previou:3,principl:2,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:3,provid:1,pseudopotenti:3,pyplot:3,python:[1,3],qedo:2,qeequationofst:2,quantiti:[1,2,3],quantum:[1,3],radiu:2,ratio:3,read:[2,3],read_charge_file_hdf5:2,reciproc:2,reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:[2,3],scipi:1,script:[1,3],search:0,second:3,section:[],see:[1,2,3],seri:2,session:3,set:2,set_calcul:2,setup:1,setvar:2,sever:3,shift:3,show:[2,3],shown:3,siband:3,silicon:[],similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,sjeo:2,softwar:1,some:[1,3],space:2,special:2,specif:1,specifi:3,spin:2,standard:3,state:[],step:3,still:[1,2],store:2,str:3,structur:[],submodul:[],sudo:1,system:3,tailor:3,taken:[2,3],tarantola:[2,3],task:[1,3],tast:1,taylor:2,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],third:2,tinker:1,togeth:[1,2,3],tool:1,total:[],tutori:[],two:3,type:[2,3],under:1,unit:[1,3],user:[1,2],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:2,vector:[2,3],version:[],vinet:[1,2,3],vol:2,volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,2,3],who:1,width:[2,3],wiki:1,window:2,wrapper:1,write:[2,3],write_charg:2,written:[2,3],wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zero:2,zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:[2,3],densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file +Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{comput_dos:[2,1,1,""],compute_band_structure:[2,1,1,""],compute_eos:[2,1,1,""],get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},"postqe.charge":{Charge:[2,2,1,""],Potential:[2,2,1,""],read_charge_file_hdf5:[2,1,1,""],write_charge:[2,1,1,""]},"postqe.charge.Charge":{plot:[2,3,1,""],read:[2,3,1,""],set_calculator:[2,3,1,""],setvars:[2,3,1,""],write:[2,3,1,""]},"postqe.charge.Potential":{compute_potential:[2,3,1,""],plot:[2,3,1,""],write:[2,3,1,""]},"postqe.dos":{QEDOS:[2,2,1,""]},"postqe.dos.QEDOS":{get_dos_int:[2,3,1,""],write:[2,3,1,""]},"postqe.eos":{QEEquationOfState:[2,2,1,""],create_header:[2,1,1,""]},"postqe.eos.QEEquationOfState":{write:[2,3,1,""]},postqe:{api:[2,0,0,"-"],charge:[2,0,0,"-"],dos:[2,0,0,"-"],eos:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"0e24":3,"2nd":[],"3rd":3,"case":3,"class":[1,2],"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":[1,2],"return":[1,2,3],"true":[2,3],abov:1,accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],addition:2,advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,alwai:2,ang:3,ani:1,anoth:2,anton:[2,3],antonschmidt:2,api:[],approxim:3,arg:2,around:2,arrai:2,assum:3,atom:1,automat:3,avail:[1,2,3],axi:2,band:[],bandsplot:2,bare:[2,3],base:[1,2,3],below:[2,3],besid:2,birch:[1,2,3],birchmurnaghan:2,bodi:3,brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,c_0:2,c_1:2,c_2:2,c_3:2,calc:2,calcul:[],call:3,caller:2,can:[1,2,3],center:3,charg:[],charge_diff:2,choic:1,code:[1,3],collect:2,column:3,command:1,common:[1,3],commun:1,compound:2,comput:[2,3],comput_do:2,compute_band_structur:2,compute_eo:2,compute_potenti:2,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:[2,3],create_head:2,cubic:3,current:[1,2,3],customari:3,cutoff:2,dat:3,data:[1,2,3],defin:[2,3],demonstr:3,densiti:[],deriv:[1,2],detail:[1,2,3],determin:2,dev:1,develop:1,dft:2,differ:[],dim:[2,3],dimens:2,direct:[2,3],directli:1,directori:[2,3],doc:1,dosplot:2,down:2,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:[2,3],emin:[2,3],energi:[],environ:[1,2,3],eos_typ:[2,3],eosplot:2,equat:[1,2,3],equationofst:2,equilibrium:3,espresso:[1,2,3],espresso_tmpdir:[2,3],essentiali:3,etc:1,everyth:1,exampl:[],except:3,exchang:[1,2,3],expans:2,expos:2,extract:3,f2py:1,face:3,fact:[1,3],fail:3,fals:2,featur:1,fermi:[2,3],fetch:3,fft:2,fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:[2,3],figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:[2,3],fileout:2,fileplot:2,first:3,fit:[],fit_and_plot_eo:[],fit_and_write_eo:[],follow:3,format:[2,3],fortran:1,found:3,fourier:2,framework:1,from:[1,2,3],full:3,fulli:1,further:[1,3],fysik:1,gaussian:[2,3],gener:[],get:[2,3],get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_dos_int:2,get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:[2,3],glue:1,gnuplot:2,gpa:3,grid:2,handl:1,hartre:[1,2,3],hdf5:[2,3],header:2,henc:[1,2],here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,ifmagn:2,implement:1,implent:1,includ:1,incomplet:2,index:[0,2],inform:3,initi:3,input:[2,3],instal:[],instanc:2,integr:2,intepret:[],interact:3,interfac:1,intermetal:2,interpol:2,interpret:3,introduct:[],invers:[2,3],isotrop:3,itself:3,kwarg:2,label:3,languag:1,length:2,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:[1,2],link:1,list:2,look:3,magnet:2,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,2,3],maximum:2,maximun:2,meant:1,method:[2,3],miller:2,minimum:2,minimun:2,modifi:[2,3],modul:[],modulu:3,more:1,most:[1,3],murnaghan:[],must:3,name:2,nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:[],noth:2,npt:[2,3],nr1:2,nr2:2,nr3:2,nr_temp:2,number:[1,2,3],numpi:[1,2],object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:[1,2],option:[2,3],order:[2,3],org:1,origin:[2,3],other:[1,3],otherwis:2,out:[2,3],outdir:[2,3],output:[2,3],outputcharg:3,overrid:3,own:1,packag:[],page:0,param:[],paramet:[2,3],pars:3,part:[],path:[2,3],pdf:3,peopl:1,perform:3,person:1,physrevb:2,planar:3,plane:3,pleas:2,plot:[],plot_ev:3,plot_fil:2,plt:3,plu:3,png:[2,3],point:[2,3],polynomi:[2,3],popular:1,possibl:1,post:1,postprocess:1,pot_typ:[2,3],potenti:[],pourier:[2,3],pouriertarantola:2,practic:2,prb:2,prefix:[2,3],previou:3,principl:2,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:[2,3],provid:[1,3],pseudopotenti:3,pyplot:3,python:[1,3],qedo:2,qeequationofst:2,quantiti:[1,2,3],quantum:[1,3],radiu:2,ratio:3,read:[2,3],read_charge_file_hdf5:2,reciproc:2,reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:[2,3],scipi:1,script:[1,3],search:0,second:3,section:[],see:[1,2,3],seri:2,session:3,set:[2,3],set_calcul:2,setup:1,setvar:2,sever:3,shift:3,show:[2,3],shown:3,siband:3,silicon:[],similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,sjeo:2,softwar:1,some:[1,3],sourc:3,space:2,special:2,specif:1,specifi:3,spin:2,standard:3,state:[],step:3,still:[1,2],store:2,str:3,structur:[],submodul:[],sudo:1,system:3,tailor:3,taken:[2,3],tarantola:[2,3],task:[1,3],tast:1,taylor:2,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],third:2,tinker:1,togeth:[1,2,3],too:3,tool:1,total:[],tri:3,tutori:[],two:3,type:[2,3],under:1,unit:[1,3],user:[1,2,3],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:[2,3],vector:[2,3],version:[],vinet:[1,2,3],vol:2,volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,2,3],who:1,width:[2,3],wiki:1,window:2,work:3,wrapper:1,write:[2,3],write_charg:2,written:[2,3],wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zero:2,zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:[2,3],densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file diff --git a/doc/_build/html/tutorial.html b/doc/_build/html/tutorial.html index 87d2e3c..3e5eb95 100644 --- a/doc/_build/html/tutorial.html +++ b/doc/_build/html/tutorial.html @@ -91,7 +91,9 @@

    Calculate and plot the band structure of silicon (examples 2)fig = bs.plot(emin=-20, emax=50, show=True, filename='Sibands.png') -

    The get_band_structure() needs a parameter label which identies the system and the corresponding xml file (label.xml). label may contain the full path to the file. The schema (optional) parameter allows the code to properly parse and validate the xml file. The parameter reference_energy (usually the Fermi level) allows you to shift the plot accordingly. get_band_structure() returns a band structure object which can be further processed. +

    The get_band_structure() needs a parameter prefix which identies the system and the corresponding xml file (prefix.xml). As customary in Quantum Espresso, you can optionally provide an outdir contain the full path to the file (and other output files). If not provided, postqe tries to get the ESPRESSO_TMPDIR environment variable. If this fails too, it assumes the output file are in the current working directory. +The schema (optional) parameter allows the code to properly parse and validate the xml file. The necessary xml schema is fetched from the source specified in the xml files itself, but the user can override this default schema by setting the schema parameter. +The parameter reference_energy (usually the Fermi level) allows you to shift the plot accordingly. get_band_structure() returns a band structure object which can be further processed. For example, the method plot() creates a figure and save it in a png file.

    _images/Sibands.png diff --git a/doc/tutorial.rst b/doc/tutorial.rst index 89c43d4..40e806a 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -59,7 +59,9 @@ This example shows how to calculate the electronic band structure of silicon wit :dedent: 4 :lines: 10- -The :py:func:`get_band_structure` needs a parameter *label* which identies the system and the corresponding xml file (label.xml). *label* may contain the full path to the file. The *schema* (optional) parameter allows the code to properly parse and validate the xml file. The parameter *reference_energy* (usually the Fermi level) allows you to shift the plot accordingly. :py:func:`get_band_structure` returns a band structure object which can be further processed. +The :py:func:`get_band_structure` needs a parameter *prefix* which identies the system and the corresponding xml file (prefix.xml). As customary in Quantum Espresso, you can optionally provide an *outdir* contain the full path to the file (and other output files). If not provided, :py:mod:`postqe` tries to get the ESPRESSO_TMPDIR environment variable. If this fails too, it assumes the output file are in the current working directory. +The *schema* (optional) parameter allows the code to properly parse and validate the xml file. The necessary xml schema is fetched from the source specified in the xml files itself, but the user can override this default schema by setting the *schema* parameter. +The parameter *reference_energy* (usually the Fermi level) allows you to shift the plot accordingly. :py:func:`get_band_structure` returns a band structure object which can be further processed. For example, the method :py:func:`plot` creates a figure and save it in a png file. .. image:: ../examples/example2/Sibands.png diff --git a/postqe/api.py b/postqe/api.py index dca3fda..9ef4be5 100644 --- a/postqe/api.py +++ b/postqe/api.py @@ -8,7 +8,7 @@ # https://opensource.org/licenses/LGPL-2.1 # """ -A collection of functions to be part of postqe API and exposed to the user. +A collection of functions defining postqe API and exposed to the user. """ import os from postqe.eos import QEEquationOfState @@ -174,6 +174,48 @@ def get_dos(prefix, outdir=None, schema=None, width=0.01, window= None, npts=100 return dos +def comput_dos(prefix, outdir=None, schema=None, width=0.01, window= None, npts=100, + fileout='', fileplot='dosplot.png', show=True): + """ + This function returns an DOS object from an output xml Espresso file containing the + results of a DOS calculation. + + :param prefix: prefix of saved output files + :param outdir: directory containing the input data. Default to the value of + ESPRESSO_TMPDIR environment variable if set or current directory ('.') otherwise + :param schema: the XML schema to be used to read and validate the XML output file + :param width: width of the gaussian to be used for the DOS (in eV) + :param window = emin, emax: defines the minimun and maximun energies for the DOS + :param npts: number of points of the DOS + :param fileout: output file with DOS results (default='', not written). + :param fileplot: output plot file (default='dosplot') in png format. + :param show: True -> plot results with Matplotlib; None or False -> do nothing. Default = True + :return: a DOS object and a Matplotlib figure object + """ + + # get a DOS object + dos = get_dos(prefix, schema=schema, width=width, window=window, npts=npts) + + # save DOS in a file + if fileout != '': + dos.write('DOS.out') + + # get the dos and energies for further processing + d = dos.get_dos() + e = dos.get_energies() + + # Plot the DOS with Matplotlib... + import matplotlib.pyplot as plt + plt.plot(e, d) + plt.xlabel('energy [eV]') + plt.ylabel('DOS') + plt.savefig(fileplot) + if show: + plt.show() + + return dos, plt + + def get_charge(prefix, outdir=None, schema=None): """ diff --git a/postqe/cli.py b/postqe/cli.py index 98725b4..aa31cf5 100644 --- a/postqe/cli.py +++ b/postqe/cli.py @@ -105,7 +105,7 @@ def get_cli_parser(): PREFIX_HELP = 'prefix of files saved by program pw.x' OUTDIR_HELP = 'directory containing the input data, i.e. the same as in pw.x' SCHEMA_HELP = 'the XSD schema file for QE XML output file. If not provided the schema' \ - 'information is taken from xsi:schemaLocation attributes.' + 'information is taken from xsi:schemaLocation attributes in the xml espresso file.' EOS_PREFIX_HELP = 'file containing the energy/volume data.' EOS_TYPE_HELP = 'type of equation of state (EOS) for fitting. Available types are:\n' \ 'murnaghan (default) -> Murnaghan EOS, PRB 28, 5480 (1983)\n' \ @@ -118,15 +118,21 @@ def get_cli_parser(): 'pouriertarantola -> Pourier-Tarantola EOS, PRB 70, 224107\n' \ 'antonschmidt -> Anton-Schmidt EOS, Intermetallics 11, 23 - 32(2003)\n' \ 'p3 -> A third order inverse polynomial fit\n' - EOS_FILEOUT_HELP = 'output file with fitting data and results (default='', not written)' + EOS_FILEOUT_HELP = 'text output file with fitting data and results (default='', not written)' EOS_FILEPLOT_HELP = 'output plot file in png format (default=\'EOSplot\'). Other formats are available from the ' \ 'Matplotlib GUI.' EOS_SHOW_HELP = 'True -> plot results with Matplotlib; None or False -> do nothing. Default = True' BANDS_REFERENCE_ENERGY_HELP = 'the Fermi level, defines the zero of the plot along y axis (default=0)' - BANDS_REFERENCE_EMIN_HELP = 'the minimum energy for the band plot (default=-50)' - BANDS_REFERENCE_EMAX_HELP = 'the maximum energy for the band plot (default=50)' - BANDS_REFERENCE_FILEPLOT_HELP = 'output plot file (default=\'bandsplot\') in png format.' + BANDS_EMIN_HELP = 'the minimum energy for the band plot (default=-50)' + BANDS_EMAX_HELP = 'the maximum energy for the band plot (default=50)' + BANDS_FILEPLOT_HELP = 'output plot file (default=\'bandsplot\') in png format.' + + DOS_EMIN_HELP = 'the minimum energy for the dos plot (default=-50)' + DOS_EMAX_HELP = 'the maximum energy for the dos plot (default=50)' + DOS_NPTS_HELP = 'number of points of the DOS' + DOS_FILEOUT_HELP = 'text output file with dos data (default='', not written)' + DOS_FILEPLOT_HELP = 'output plot file (default=\'dosplot\') in png format.' POT_TYPE_HELP = 'type of the potential to calculate. Available types are:\n' \ @@ -156,9 +162,9 @@ def get_cli_parser(): bands_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) bands_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) bands_parser.add_argument('-reference_energy', type=float, default=0, help=BANDS_REFERENCE_ENERGY_HELP) - bands_parser.add_argument('-emin', type=float, default=-50, help=BANDS_REFERENCE_EMIN_HELP) - bands_parser.add_argument('-emax', type=float, default=50, help=BANDS_REFERENCE_EMAX_HELP) - bands_parser.add_argument('-fileplot', type=str, default='bandsplot', help=BANDS_REFERENCE_FILEPLOT_HELP) + bands_parser.add_argument('-emin', type=float, default=-50, help=BANDS_EMIN_HELP) + bands_parser.add_argument('-emax', type=float, default=50, help=BANDS_EMAX_HELP) + bands_parser.add_argument('-fileplot', type=str, default='bandsplot', help=BANDS_FILEPLOT_HELP) bands_parser.add_argument('-show', type=bool, default=True, help=EOS_SHOW_HELP) # create the parser for the "dos" command @@ -166,6 +172,13 @@ def get_cli_parser(): dos_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) dos_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) dos_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) + dos_parser.add_argument('-width', type=float, default=0.01, help=SCHEMA_HELP) + dos_parser.add_argument('-emin', type=float, default=-50, help=DOS_EMIN_HELP) + dos_parser.add_argument('-emax', type=float, default=50, help=DOS_EMAX_HELP) + dos_parser.add_argument('-npts', type=int, default=100, help=DOS_NPTS_HELP) + dos_parser.add_argument('-fileout', type=str, default='', help=DOS_FILEOUT_HELP) + dos_parser.add_argument('-fileplot', type=str, default='bandsplot', help=DOS_FILEPLOT_HELP) + dos_parser.add_argument('-show', type=bool, default=True, help=EOS_SHOW_HELP) # create the parser for the "charge" command charge_parser = subparsers.add_parser('charge', help=CHARGE_HELP) diff --git a/postqe/dos.py b/postqe/dos.py index 81862f9..154f165 100644 --- a/postqe/dos.py +++ b/postqe/dos.py @@ -1,6 +1,11 @@ #!/usr/bin/env python3 #encoding: UTF-8 +""" +A specialization of ASE DOS class with a new get_dos_int method for computing the integral of the DOS +and a modified write method to write it properly. +""" + import numpy as np from ase.dft.dos import DOS diff --git a/postqe/pp.py b/postqe/pp.py index 6964961..a438b5c 100755 --- a/postqe/pp.py +++ b/postqe/pp.py @@ -8,5 +8,8 @@ def run(pars): # TODO: implement submenus #compute_eos(pars.prefix, pars.outdir, pars.eos_type, pars.fileout, pars.fileplot, pars.show) - compute_band_structure(pars.prefix, pars.outdir, pars.schema, pars.reference_energy, - pars.emin, pars.emax, pars.fileplot, pars.show) \ No newline at end of file + #compute_band_structure(pars.prefix, pars.outdir, pars.schema, pars.reference_energy, + # pars.emin, pars.emax, pars.fileplot, pars.show) + + comput_dos(pars.prefix, pars.outdir, pars.schema, pars.width, pars.window, pars.npts, + pars.fileout, pars.fileplot, pars.show) \ No newline at end of file From 6eba88140bf049d38dc5d5552bc6ec67df774799 Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Tue, 17 Oct 2017 13:45:54 +0200 Subject: [PATCH 018/166] submenus choice properly implemented for commands eos, bands and dos. documentation updated and minor fixes. --- doc/_build/doctrees/environment.pickle | Bin 15525 -> 15464 bytes doc/_build/doctrees/postqe.doctree | Bin 98944 -> 98108 bytes doc/_build/doctrees/tutorial.doctree | Bin 50767 -> 53346 bytes doc/_build/html/_sources/tutorial.txt | 34 +++++++++++--- doc/_build/html/postqe.html | 2 +- doc/_build/html/searchindex.js | 2 +- doc/_build/html/tutorial.html | 59 ++++++++++++++++++++++--- doc/tutorial.rst | 42 +++++++++++++++--- examples/example1/figure.pdf | Bin 18535 -> 18185 bytes postqe/cli.py | 6 +-- postqe/eos.py | 4 +- postqe/pp.py | 22 ++++----- 12 files changed, 138 insertions(+), 33 deletions(-) diff --git a/doc/_build/doctrees/environment.pickle b/doc/_build/doctrees/environment.pickle index 5dc95b364b6b1f44183ece2e41ac95b5da1fd503..baab93b44b98125464535e8b30d8ed286fc440e9 100644 GIT binary patch literal 15464 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 XTr;ShE;a|WA8>??me9oUQuF@+qx?A1 literal 15525 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 q1Rxb)hb7_Veg9ue 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 literal 98944 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� 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 E4^bPIQvd(} diff --git a/doc/_build/doctrees/tutorial.doctree b/doc/_build/doctrees/tutorial.doctree index 46561bff309b3f1e38bc5996a073b4b10855009f..04c5c1dd99907e28d13e42e333883f0d10406cbb 100644 GIT binary patch literal 53346 zcmeHw36LDuc^*Juv5UdUOB5tZY=RQ^Aa?cuz+;`?FE57Fw`Rw({F6rEPIs}=3TP&8@x*5P2@50C7f*eUSK@!i zmhIxzhO@$7MvE0Y2t@zjAf_sF>s_o$mE6ifg^ zBcT^ooU|q<8B52av5Ru06i>?<~_+wiE(b2I~*H+1?`n4cz*r8WjwL;gis+`? zA9XKC%Ip(Jj3IXKz+fK|G#m9M4o6ro|SyUXv5F^%B8D3=kc_`_6_C$<|AdX9lkcj$I<=Af|A@6vv{!n71y1s?LT@ zgb%D`r{b?$fs6mp-_W<30r&w;>X1387Z}#il;w&rl-x$*+?FZPyF0-#JQ-c}nV7Qx#p5&-$q!sWCpCu6|s5 z`!vrlyH}Uoid*H?!`EuXeZHGIahqC+e1VzwD<_CCOAc75;%EV1@hi|JV4r;M8NW$7 zrCBLi#LUDwlK(Bqn8c=%g{GOqG(W90e4%NIegj-t_gVSt_q7^1VXeDf(M2ycV&ywP#~_2^09XG%NRos|~+dk6Rpd|0VrIF2QKguLO0cX#V&;e$R4WiPgHa z%h^mD!z=4vDRf)sjwrkA4nXp+^`eozgHM?q&{SNB_uf&c#_@c)y(`2Ta!@JBJ8Qv4V~&HvV@=>^<@ zM;)=SkRK;KPbmDvW7jGl*}ZEQ4_rQoPyK)_zeP27`@%_T`oHy?4EehTXLOk{(Q?@@ znS?3N5V*{DKh*e;bnK3xBL?+$&lzaJ7a(In&8~c37Gyl6o1dcQJ*-`~H{CQ?5 zJ5%^r=!Y*%T$*GTn!F?e{aADox(Q~qRctPMMQg$f{1AqPSDds&q(z#^Pc|Dhd)0-r zbLOcF#ss$Xx}Gaosk}t%4)?-Sb4vPcj=ofXbi9fSPiooBv!EIJ?V`3D)c*cBR-P=3%F&UhxtB!aBB0E)aqy z&0^SWIAo;+9)e>DO*HtsnCfTsEdFMeNq<2%&ob%lAmYs?5l@;#JV`|SrUvjgvdrh7 z>E{2Knr~g>m|#87g@`4m7I@(%Q!fOG18d^Zr!GvUQ}Y@+0UExi=k-b!H2gp}&w_^S zAnUCrSx=c{Jw;^wu?Fx*S?2S9b@Ts0&9_cg6RdmALmGJ@v8}mB5h&q!rScexE=8%~ zu`-Q~2@LcarkaDFCG_MdKK0Ykp@hSD)aR#=$$-L6#9NLq6+1eu_40O-|H(Hs_6@&Z#+#)y*_F+?r6CHfwIu z;MZ&D1kCUQt)PCN^h6)ey!=N(8zgo1U8c@Hei3sK*>}h%B~rBxDEZbpvVW#}&e9rC z{ueQ9tchvJ!8GxY^+bO}6CI8wCb%@t`fB1or`B87#5e3A6CKOqDGE4~Hlr$)cFsZm z%GPBK1!zK9R6{hZ=zTO zI-SA}1!eEv#&6#zT*B^Apx3B!0sa z*27+-=*oYlb#EuE^T7eLV5$2|_7(YGPK+wNY!jdu} z@^}2yt6_Z$oJrV-mCc%8B_okC+lJJ>G3Kjz#xSA=7u~y=@hL=h7e2izqB~CmZ(Vdx z^9&%mZ_is79O!yTt*VmKOm1*T&t`)nbwA433XUI47^?;wr;lsAp6!d*QB(?%#T}Ol z-9!sKJzBUT2av@=tgX|u;$H5cy~xMy6|oUxWCqENXR5)-Vm#uw3zrSL5WWaM&i?qvgLt zGE7Obyp6^2C6C=W6cp!6 zb~t{*LbC$Z%r1^sRc3X3GPgF1U-0)~bb%ImsG^C<++EiB21+BX02S00UKi#kMJaN1 z`e9=H%=1m8;g%a-v#PB7MQi*XB>ges2@0QqZ^vYdIL4fn97Q`DyK%^PXI5| z^mDzo3Y<`kXz^mB=}hJ@=LbZ+ zuXtA-8W31qMY1vkYk0CV6GlOV66~5&^8=J6 zQ(d~$?a^V^TXie=8y1j+p%VY-fNY7%=CE~ccfhqVx+?x`=Bjw*>CeaybNWM`%C`4! zR4WSs>X=a}Fb1XzoW>e`tk|{HCQ6&Ru$!vwm6Carok><+_w3wZ`%Ig*&t9@%W0sG^ zcX0b}Fy9+48okyny3*B~_#G`hzl~3^DP$A_=}>p4H*rgcT{khQ{0V|@0Ds~YYM$`b z2J;$t$5hJB7Xy-Mc4(#TGH%lYy7^4Gpg~_pH`6l_%f-?n1?&M%_(zUWs zhlMv|T6p=Vc)J>M>d2CtnRi~!6~l54jg8x1$bYi?L5GY-(Msn*4XD)Tb zpg*Z4@e}wo=+a=spydE+aUkdhuo*v1%@d2msO&J?0@31WV1dXB3S+PMsz+fm;lRTp zX*letAxg&~wz>~jJ`toI^i55ItSTU?4aOd^XeitcI5&>Ej3BHCk5nB6AhvB|CrbG% zgmO{Qo^ZDlKK6*%R1)nuJv%El1m~b{OCHe5o9d(8Q?2NZd|vs-f%-5v69*ewL9_=c zy;k`fG^8+fqXpobL0ed``n;dBENg)QS+D>{jyAd`W6Y;aDZDCnre5z&sn>N_FyC(p zmXGD1kkC#3)fVq$b=2>27Zh;$7EwmKDuyMiUB;|i)fuid$xq#_Uj98AI3f57)J(aj ze=Cr1EIOXI&SKSPA43LhgbL;|C5ru-Tfnlk)+o*_-+%i$G9D=h^PGST({C=9e;KZI zq8jGjMAS8U=3TUx8|Ok$Jk**N@l-1rPPHh8$k9|w2UD$Sa?E{fjpg^~3+XJpsREAi zTE_<9|J0n9&^_fZ1HeR-ul!X!d4W|=`PcC=+KUZ3Zmawc@wxnu@E@g5wh{CWb+e$< z4Hld$TvNxjbZW&%bQ)f8rEVEJj*Ttvdi|ev$xxl1=C*RDJ5)RlGBC0}CfjcRSYZ0y zBg(x^kfzICq4F3v@8qoaCOPZvnzN?eoc_$*;%-du)&x0T{W4=68# z?6j21u$c2{3W>@vn}g2x$quH`!8CU;Eu6Y(J_uo2cR&I%t>Vqob1j<~TE)24#<7`% z&^`k8%cs@0(GRM&ZL!OCl&*V-Ez-1Ca37^43ErJ+3+AoTI830YZ@*qKY#F1hE~H&L)Ae zu9Ya|wo5h&zL0&fu-2%P7${Z$!6x$FNHLrV$jT4=6BhjbQnQHnmp3h&zR~dwiaTf! zyW-1}h;V8aj*vlVJ2pFtK&4|n-0*PdL=$1lkNP#oj2*nzAlIx%c1#ulynK{H6-)#^ z%x5?f)@iZ4rWhd2dip?ejr&|~S!JV1+Z6Q9O`Vv&;8EhW=sHzA>oQyZ`>?i#m{XlsuHro9RAYlqn0atF%miw*({bBjBR*j+ zSY1$^N`4CQm}$QUuU#n9K}DMYlUadK1YiaZ`5Ao~z9 zX4q$gquqFkOj+lY(;@r^3O&+dw}z41a%ejTrk<3*!j4MrHcEVb5K4$1Bqf&AF-{zU zU1`#GCtBu_mn0$xltW2cKEC3Nv)HT%fd0ol!*GNkj0 z#?-&Sr{40PIi%A~;?qMqe?S8#1YUufDWvm%FIqUg6WirMD)Oj_TxTwvfBMXY z3r`g;K6(Dp$Dc-?Y|VptPlugaYc|dY#i2V)HI4(VV3!%a4r>rara0RZ`!Gb_&>%DK zUgYdFL{jWru-5&?RXVLs9|@MvUBu`yQ|>_6V)jWpvYnTiMK; zd^V&GW4vTrOtP4kCp5k$@u~OHa(zt8`w5Q3O0#9t@;y8`tUAx=LK3?pX2kV7$&^voC@W)c=};wq!`9UCsI0yQ z(jbTveig}0Ghx$KZIKAK^{%!ke+^x|&?-*lJ7SvMGEEUT@626ZO2&2X)A>q9w$6)R@GRPpjurRdz)9X~a|PI?<$4Pa#ZZ3`O4aJ-U-=yf#gpa0-+Y1fP|U=Lhb>qaJPtm`+H2>6sF{h(?kwUI{pqlUrQK59snkr%UtUS9bCViZ+7^y4m8IM{JeT`#@oBI$Cl_=s&gM^_uxhwaWO05Lc}_V7dCk-{X>Yyr ziMY1S-G&K~D**ts%}X$`?bR`!sJHQ$cJ`_@ji$i5F5bwR&*yV;moYZG(wc!izDP~- z>VZx9^$IosS72u0mkI1>Dq(*wzHZ>w5~ngTE^@Wjhn-8$(q>-#vMGPTSn^57o>*+e z6>UjK1&HjJ5_s&Hl2=MdmRowq@k1WM+PQc3PgtFh<&zMDuExc%v$-c#Huq$PZ0?(! z_L}0fj@-6mnjc+r+q*{jysUVcr`NhI^SrHk1~)49dht6%(!aNRZGUPBrrpo#Lt`WBtBL}q9GBAbR$q~L+hq5!hT8=xbH1W>E#k(= zI`~ms#X|f#5l=1Jfxz{m&0aE1V(^(VAIwgfeN*(lf)m>1Gp885;M3TkhLQI!&eQfR9eGc_ty>0}+Xl5b@V|^lMb`AJtH;E0?@3RUVOUO3rm3I_8N^6Fe7(J7Q*HqvnU2_DrZW+ABN!;8fg;G!X6)CbSGA za>S(K`&R>;84qNUPSHV0GvzbTYkFRp*Tnnfnz-G1GRgS7=8`^6KGyPZomtT&)*w{s zpT|rDng+;Yrfv5=iHpbs;+sSk^OiBFA(_Q|Pwy;dqJ#c9%!*n}p>{Mp61>kDfi9Gcu{NY=}0Xk_FVhMO7~>yyG=-+}%!wGG?hx z^Ku_%-?@3`MMgfk6-@Iq_EDzgn5rfek<2ENsihLuT0ZgG+#yWYAPulZ7#l$1@VKPM zI7gGm;}UcgvW(Sz^eO=m<2akxvTG#RvcswSoW}m&A{k1Q9hQm-+z#D`g^P{ayhvQi^Jcg?h|`(>HPP;+w3Q0 z2dc0_tlOd=J~STnB67RHqFnJs<;TYC;so~F(;visow>z{IsL7+u{cLnEb_?nwsMcc z9G|@2u@V3KTH7RqrK>+N?9z=>s&wO2hSH7b^-PzJnETJ0X8A#4Z^|2!0cjWs$>-2{ z|5dC~@!Cz@bTheot=&J-obkW#X{c*A!I)-#cUil4@4x1?doQ{Gf{#T9jCy(ljfuxG z7E{)2X)z?7lv}xbvNCyUX?9L*Wr`l;n*E5%&T$!l_(^3<=q3eRGb@U*LRg$)$GE7l zAgjJ}Z`V+|i|3z>i$>*@4>3O3bGt_)Wr7HphLj%0pK8aiS3jc|9_ zOuhx40@&u5u=JDwrX#;cqd`%czAFxq8f+<*xEnGS>wurcmgh0g;elO(pJ}H>lL5K~LD6xwr$?4y{38bLOPF z{763c@FpGhPaEgOMFkT5@JEO!i9@>tC15e(|Fk7qpSh)H1^bD9>+s{Ycbs0B>dx6; z%8s!V&VIR_v&Bv+orUyq;|^W1t+R^y#50wVXLbjgWu7sSpcJHFsgPT+#2#03gKI~U z-;|LZ30_R6YzyIjWpo?yU1s)wqDl94d>V8qH0ns@09#xPzfFTD7Q<25VYcP)J3I|6 zhqnuX5xefl9X3J%W+tk4JB{AVzWRr7iLPk~r@Nf-p6e-TYYoB3iiZ;BNLPa(Zb;&Q zYsl24B9@sAZI?#m{I<5vkls#JZBtO1+o>&k&1MJamY57mW_t2$|BQ3OKOP|Cd}qqe z*;6yZOBY_b-Z=Y1l24g(esAxTbFzn&oHJyq{ao4md4Z&2PuMcpRVi2Yq#2{Ka`CaU z$X1Ee+r8@jX?uDO8!E;7lw*S#G%ZAJTIJ#Nsj{cCq}yJElbV`tqaV`JZS#-zf!|2C zoi@~QBHcD%C(u{_k2N4UdVfZ=>UU%MNRHjk7AxO)9RkCO4mqOGK5{ zJRfztlnZh;icVeZpcA$Ff|i&Due=~6l?K^08&v^G;&#n638A2ua3Vz@uTd)HkfwkP z!|)ApeKn5draK8^11@?kK@D0R6lCahBRWmyTev9^m|jXJ%?dk5b#t$i|R5jPV|ubR>}7B4p`~_<4X%r(V z-6bma5gIvR%njg(7kC1k%L;u&wyCzLef#wh=%B<;G447gX{6*;7u#8vh=t{cgmTc z8j9S-#*?sNlZ+rql}@9y?8+}BvMZN&1LxbFU>Q7r;>>eyg%T>rtst91CmYu``5)%Z zj?~I=(}+9X>*vzS@jlnjeoBig^f<*!WL8y{~a~2kYGeEO@&v?leba!EZDiOoeI{Q*od1g<$}^4*+iz+aW%t_rQtk zdQze6(P$Wuy#tV8^cNNtvF~Br(tkSvZuL1SCd59YT73IS+c7B$*AXR1BbSui@u zl5^Shz-gBJ7!!QjIjn2m!yO;C3`1XvqbW^06TV@PshceBHr*S1(PPmPoJ9*>{(QSD zGc+|PFKbndb)}oyh}%8(f^5`Bh~qcFqgOOXwM$XltUHHa*@-M21J3&QN}i0Mj*IX< zm-LS&_jL7-v^eE*Yq*UAi;<{7)6exWNEyn|a3TQiWu@y07so|!INC>iP?c%&8;(rJ zPjGkUFrIuyR^3FOg0$139&IkK5@X6`Qhn4`;WuGScX;z~c@l0s16P*R0sMIe-_2A^ zCt;sYfgK$vz&DD+gM6dNpl=jo*zsB8{v-pBCj(&qWD4}ug90DoG(7mx8BYNJ#xtNV zdJ3m_3iN1zIh;zF19!obi2W*#R-QSawyPy{=5_O|;9Uy1gHQOUIGjm&cq`3XM;%kvH(-GMG^-Ui&Kc0q-Esy; zs8l>&kqy6?Rn)RpQ3ZU8JvU=FZI9%^TjSVlVi;8tLXc{QxqlX+M$HphghPpLvlWIs z&r?D=VL|10;;ILY2w8+d&I7s9WOt~1BbB(uiu{^-iHX%2OdFNLrb`j+-_WpqhA5Q=TMuUGRzy1>ll%$|onVqd zifF&YQvh@H$VUz&U+FoyZ)i+?Z3~#{l9L+{QQzu7)BriT-&J_}j6MX141CB+jcyP^ z(#N;B_K3wt?)8M=*j8K{PDek;WBj-knOShT^@(V@oIs_!CeXnO?mDH`$oUt!z<|Uv zz|D3>Vs_GWPj@JQTI4dj%EbMt;TBXo8pL#dHG z&o0_?dUjS^25;VsaCb_5*S#wD5c|2h$m`EYN5}-kL%oZpU+KSJ`h|3JS=aAw`L!^*I66`+Jfl+73hk58k&9pWvjSKAWP0fN4fP12x zzC^9mI=4Hz&Dp^HePJPfT3FsJc%{}0NSA~-rxo`(R$A_^XkTbIU=g=oZke~LoZF3% z-Tj2g8=pm}*4?8`ZZm5sk}wzo{g&@D@O}t*FQ`!#Aj3g)EEOQSN;wHqc>(guu6h=*9q( z#z{s^%IXwQ>O*a!n-WiH^89!|eWGFM+eG=hNO&!k&tendQu!w+!(3tnyjZ>ycSM{6!o|zSNAy8cyAB;1J{1QgmyuSzY!kg%#fqaj~kSpxhN5^=jg_&4M6y(88<_ z;12j&K=;Da+wN}g&`tVL0gwguDgXkG4@%BB>Kwsj8BJi1@$e)4=yxU%I`7E=9J6paB6e<5ciuTL@ z3N+)2tn!yY8NT(qJd4pdwNZWywB)nnn^CUhAm7Jh0PEV{k$lWx8|+E2MmN#9%I#F$ z9gPy#CqvA6SKfH_La~C|XThmU(ZR+_5m|%4DKs0E zR&=`?hV@`!W(K#^0vOK;SMq*ib;b>=m6=v_Yq8?nR|~jd$g31^ST#&H>gL4=$EDXC zkjN*gI!uE=k*;}xC!QP-b0(I#N)7nrR~-C^*bE9`0D3cAnZ6%a@Zj^|b-O{k>*%_A z$F8FJfrh<~#*}wwMSZaD)D4&|1@rp)IwGueO*_L}a@J$XKZIC)a+uM^kDTslQ?JiZIY#^$PQ__c6qo5O$ zZyzZ&tM!7&uNIJ+1=fyY_3%Mg)M-178d9uyc9Rx~WxIHls1cB;9}0b90`qEM*kI+zp`#Er;!{0=}@jn$}DT!o-+7oFBi?#ZPnCz*g4Z7CWp zNI7sH1m`x;iU0sB-JV2wJ0gx!vjF_-LXTId^N50L0VJ1fra4S3*;)KolH2E~yEW z-by^mT!-lvLZ=E?L%=$Q=hN?=Jq39^1RkI>gyNSD020z;_S0c5P(QQ1R>xA0inpfx!u{D zS?umCXJ+pqld)y_A(qCm9jt7Z%OyLh*il@SKa@&Us#5tQj;*-ja@iHfsXWSm$B){+L?&+T0*}dJnJ?cn;B)Hhwp0B_D`s?rA-9L8dYnT7+L;O#CyyO>~ zkyj1#b-(0zX2{jC`vj_fu1)^blaSM4x9 znUJvn!iM%5g8@m7hg)If)YQ{thTJFOhg$AOm~2NtC3`Kf8?OHOgYFsk33oxZIJE3+ z5?SN?i(3sRz`*WVg4Wh4MTJwA7h0Gk3j=aMhN4r-w|=t4{NR4jy+GiAtNSsKz_rlv z6#hJoKhNOL#A~gld)hr`Hi$>7&bm_t1MIN^4`A_l z;57UoV&=+~oT48vTehwfIx&-(rsUbO7e!uuZ8mb9*~pLV>a0_Dg0-#LW=M}~&7f|t zxpsZl@xxhX)2=nDPB=SHTz5DGV}Pkm;@uYO0OKBspKvxCXhADM(xtGvRq#sS1^0ye zSjcq#u=^y@dJ^zPu}Z3r3GFUsYkXO;x+~kdi^fAu=oP?QB|3r!-KVaN_9Xc0%~kh& zf-CyDvvuI1hn8JTCH}Lm(4&D`YL2avQ}gQ~n2m^Kfml|}_Ucx-S!WX1RWI_K(DKXH zVqSua_@i{O>K0Mz$`Eo)l!K1~Rkec5O(-wm2|%kl7I zVA&u-9js$xZ0nANr5R$H>7lg+Nn+h#$spP^0tYQEpWh0Lf!Bz_d~O;2C$s}Wu~eOs zMI*ouWxom<5FHg>i!C*`lbGDg!vy4X9i-U-}}r_)V5Ri}9FXA!8^%Mr+2D6-t;)#)r83_+VoT zVxqA%3m$Aari}T!^xjj~4vTdG;RDs+luJG_a?6eRo75vo&n$EfqnVH~BLp-)A~?K> zwR)We8iZN=Fs<^aF5{cW1)X=tKbumB(#gdXzB9;9cZ>a(g&ln(S%;8^y$?N#kn zC@YBPc4=dgfTvbaGKpf)@>i`z(mAY>He5R*8P7_AI?U&;!~7&wMF>HB<9EAS%|fQ` zpbL`kH9MkLtKO=GKY<-=%~%_*S9Gmf6S@p~O5+Tbz$!&pYmBbcM~pG>DmMdGN)d($ zEyJxDvqX}T&Uki*1T$90Z-Je53 z`6sjG{C{!p_muALFLjgY?ys;Ycfaobs{3n($o`Y}G?Qs@L$mtc9;+5vl6iWFtk1jJ z)Q9;Dk14U_3kiS!4M?{1f?X{(t2U$v2_ss%EG1Uy8!YN(F=|3U!7vRySPu{glS*}2 z3scD=#~R-yBt4UV3w-~#_7u(!;3;54cOFrmg2a zMpoH_VgPMF+qCOZvu0fhVX%jxKV!kMFE!z-TB}>|ckm5P2gJUZE13Hb^S*R-Ht;SQ zHf*3Nor_C>2P3|TZ(sE5PCl6?lEpXKejh4vw3x0O0`n=z4B3lJ8YT$Pv2eKmn>~HYwt4rwcwSL+(Ym_6d#jrV_~)G z7w?(A0Lk00=T<{&$wD}=KoX~rh}cQ2{Ia*XG;zzDn6bj5>(uO}iF|$z|A}wm+#61q z-waFmo!mJNW)(y{Xz9#UuI#M=@@kkTAwKEUy!z7Y!kHNhfHs%T<1b`GE-eR5XNCn2 z1?s3f!UHeW*CwWNiKKv_*zc%nwtCK3ydu1GF;N=v5y;!c5aAm{;l@e4I>9;ultzdz z6}yYC_8n|hif~T;Wg+=Xp4|NLs$E}eB4)%MKSgWdR8#P^?uYQfkGtNQTg9KKfbg)0 zI?G?-=SPSyhH$(q7ce$RJ{=7s9rqtbC>rLlR-z!+;z}n&tw1|DC5o0&9JR)AplQKm z)6(GgN{B*JV2pI3VdK+Rgd{<$hR?wh)>*8qB%9_z)G0`z&?>@dK#+n}V1^!3-iqI# zSR{OtEmCId=o$8gH4Qz8K-e^TtHXnk0jMT}kUl1yyW75w)z9O2Xm1hVfUMh2Z zSAs3gbm(deVQw0vPs@%WUb%JS=9OEwUMVcUeB<&-oXkH z1{OZ7L|=hJNHGeXYI(*&l7Ksc*GE=J-SXjX1~iFGAS6WWW;IfM!DI;?;S3XY$#4@s z6l6%gTGQ>~45Vp>P39JYaMcNFp2cDJDe`ZLKEzlcP3U@Mfg78yb`g9_;lAotew)>S z$S9)cv_9HRzg0@9$R(mex6;kUOpwKg9766Y++DfwXP7uxVy<5@dL@ijtYY9`o~R!P zXtJeg`a&C#TQCzSj`ax^;pt1HFWG5_mN9a}vbw=SPCicALh_fVD7?^B8YHmY#KEoH zWssFu>4S1Ei}7Qfa%6JKK;kuiV;eK+FyfnpM`nQY2ea)YmjK_7Pj>dt85xd7%1jD_ z9^4WBK!!XtMka}v*$UMD$I5G}$cE!ema356n2@ao$Txcst23temHi@=jSYFh(3e>=tyc*exnEN`U-V* zS@GW_xWo30er~_%`p(JUe<)@zDrux7i%NVq#`CQnjL|9H{``Gn?HB}-tNnd5@*VQg ze;$aBp46styBXO@`d*E*uszvni7Ng-(Qcy}z5UfdBe*gYO1 z&s^ncJ=bF#f-)V4XZC7#&xqMQL_H46RhSvbY145ixey0?T}KzCq0}?FIO^3XqNFMs zQOQM7#UDWBApfwqXdzzM8JIGnd^yXq7B{?7V(Jb)_m(-ExKbwSLXZ`Z5%yQ{kx`mdl$^buy1+slwt>Q4N$5&rSQcdLXQ=c3r zK+G-lqAgCTp%@jBfyv9S+?vWxv7Jq&*oFmCbF9m_Rw_ITsy6SXgacIll4;JRYV*`! zzq5m+Qa3{EalTCi$#j(k2iYhzp5zEiK80qG&(k?i3W*uPzD4Vn$05)}98$#Q#;}QC zNdI-gRKxEgCG=%4eff?*Dp==B^wG_C{4%%MCS2639PV0nwCL{<++q8Uzc{?C+HiSH zFIPD~`xa9z$>qd#*JYJwVId|#H6b(a{1ZImgt;iKgifO>Y0j3F{4ke$nj`qO1%YY# z9H!0Txy+~GZ-XV#ST!x3$)BIG>ZprdS~!C&n(TwZ&IFo7H>cPrgFqrd6+FpEFhb3_ z5)eS!JjE^viK(1pJW+4sF<{?NYJi5olJ4cC9xI>E=j4cWkrq-(tU6Hj+o(o4{E_*+ z8LKqKUpG--=2RyqL?+OB)w%r|GI`W+Oa6ksql)#0tys4HcjYp zaGCAV+QwlBH*r zm3o$vrIk;k8!C+EG->5C`1W??W&HoGR^=6ZbV-Iv^W)C%qY0%;w6h}DqDq2-mAyJu z+|asK`K?ruO=Ba!Ib+#nDwj_RZfF%K(-G-Q66;8$(SMvd<-$+iiD6CiQd5c5n!VLe z44F&_-q3(O6jVEeu8`zI?YdJ!UXuota)YaZZ-YFP_?(<(89R;9WK0d_ zqHcK31Xl?4biq=4BJ5u>&t@gUX`%3IIBm4E+45#uf`Va=pkwk(Ume=nZOQe01 zP!j*{8JD=3ZN&T$0lps}mYojEd39x;YtLEUpphi}JJ&U=R-KWPy&slqP(|!Uc}W^r z{#lQiG(8+qV}CmI(Mj^e8a-=5JxWHQia&5(9$^+ucA?z>lSE<&^tVGhPA6sF_a3CO} zo+iw)9H^hPl2?6TLnrFNs5pqqqWLdW!lS&lnqBuAqTC%_pq5G?p0|u@p5&#PeGh?0 z5xHYmjj)otE9KT1Yg)T+)52tvVIp?gs=j|O#5Nnip?8y@Q+h{bX&JxmH5HBJ^(r%b z{LXZnTEDXAKG$!F@vM~TqsRJnx!E>Brk)1ca<+jM65!#l-%(yBo%11|XA$g)F3g@~ z*8a4h+S{6H$H~G}3nW#}_0_#1-7g5z9W{F%mVxWP!%Mt#rrvQ3QYu(3qNAqhQF=J1 z#gT#bZ}ynxPBY^4AaYFW8;RCHZ)^P{mtc4OQ@I8kwJly4FZRxRot@KRuJ*K-UOH`A zugXnygs{UhKH`sOWYbKjeP+9U4-=rXT^*`4evy1}uB$CWcQ&cWmnx#YdJ~GnPeKq- zolqlz^#*Mh5=R=q%Y(8*rh@nOYsVSsh~WX%ll(`_NtHjQ@g!$C+)YA8S@|Lyo}sqd zrV~r?RTWxkOYdbQh7f@4o*~nDzDo(jbe>N_?SpCJz zSI_5+6r4=a)BZRjaQhCrWX;fCIV=*j(*QZ1QVC0k_9EapBKj0~qy2QK%pPFZ9<~Bt zG9ytpFL9XQfWw3?P*M@IwDuO1SV=aD?|Gz;%*!%us!;n0FnwIN4O+uqP^q=%ZVrag5t+V*~a|G_GWufR7T~VJ8}Y zdH*hx&S~Ax$fnF9$x`ELr7M$Y3_=4NaEy^X(}P($&7tP^L}VD~%7J~4@W@)Wk7o)r zZBgkRCeJacD~t3Y)-JmQLIkEORZn+L7YyG{gFM0&-SfDv>77#_Irwrwml_x^l&gz1qsrs`>$Q95d9)-o9sTPlHKQalkApeIh9V* za-?iAS=*Vy*r;Hg7W{2hI zw>TgPXR`@sA&Dd>2ZE?THxCg=$=Gr#C@m0YO2|1ATS(3QqrK)!N&z`z*x60{b<_60 z4jxc3<582v49)gayolOYw!>N~dw~!VtuO(YZu(C{VMwh&@EHsac4eEGzR{ zOo7Vp(uZK6!=hTv+=1}#dXT9<1G5Y7{4oK(k4kqckQKmC(4lVWc-Sa3>ZD-m*Q{kYK(PJcQLsbbIs2E|wT3td zV+T60b5uiwokf#Fq;-{8I=FepK;UBo(ctk+J!^nd8YR13Hf~V-32x530c?IC+`h1v z)`NkS9OB+~mqn=oIQ#NIl)K-~+55mA>LmES#1iwQYhEO07&&ug%Vnv;&+{Br?$U=) zg-4VFXez^3dral7lwp|wBWEr<9hN%$s8EMp>{jjKNn-VGu7d(nqxT33q_U1OD6q|L zyK^$@C_L?*nV zuMnk^oM!emzqin3Y+K9h15LO)pU2@pEpi9@PCltZ@(DvzqF^c~*P~TT%mHO@$ znbEyOa7b`dmW%}5kN^3XOoYm}=|h+?o&M)v_aIb%HcXHm4Einsz8??O|9qrPaCK6= zqeT|a9+m=6vCb&VKLgmYG2q^}_xX6X;MBTJPFa_B+K`fz>|scyvMW;K9e~E$>jcZ- z`4eY>b1RfkL2d=v6goS#zQrF*?vB*TDUoUs2H&Y(KbOjO69g~ln)3( z1kvpGNrRh3#-^FrRePJUIj=G{=XaB_k;dw&Wn@N#??N_ODh0x}8tx3y2edE7$J6Z% zf;`6r>1dD=6|&6$j{WlnncKtaol1CI*q6XrPn7Ia|D;937n2#wvV>6`n6B)UBwOlT z*?GRFkCjWPDem~tN1CLHJF}duG~hm+EF1Lebh6SeK+4Hl=-T*`26Vz&H(a;ulFNa&)*5D}9vCCCal9&Z~v-sAEFoMxP-w2n90DgIENg;9? ze|hmO`aiwB%_$cVHoaiKjJma;?cfutXZ`Gz1OY0_RJE=80OCgIG)un5o_-;BlJ^73xO-E`<(~n-q~d-s%to2z(r7&+ z(AtL8J8|suz1<-^CRRrp;}0i{-oDa0vFy=ycbGi|%(^euhJCCnNl$7Yw)Ph zrz@-MhA$KMm$pJn9n zWB|&a&A^@@DD)wFhKE0Z@c{6tM?hbaA)MnO(4zsya4usE41x!ty@AC$4;GGH-MIjG zuy8~?h(kQ@gN38LuRmoAS;Xl@B<80Q#kIGQmjtQ?$ zKP2h5lAM7+Y8)PCUECB3&xzk*CsgiGc+r z|Hu7R4jfKW36G>+O6@`!p;leO=l$grzABbQ+Xc>*;{^DAd@R-Vu&N^#cg~cZ6SEs& zsW_yZtRo5EtE9zYxe$!LPxYXCX9RLg|QF)d=x>k~2?1AjA znB+169(E;ZM|M)uN@pi^t&#kxpA6j{L8-r^Db<;w`@&ukYE2Mos2RGi?N4E=Rj{0# zeTt{{Xr%<~o(nY2KahcDPLL#C)Ash5#Z{lxu)Bf1gCx(A3AXS zGl})mS5`ve`F!uJ#08a=(7x-=%D+CDQT~+yywCK+FVM)7v)0q;7CEpV?0aDB*zRmp zPxl@bL+*1(zrOvDeyHyu32%32WBR_{V-leI9MnJGeo#N$_n@TvyR%U}(|c4BcAvxg z?bNVT31T{P6JI0)m5ooYsmfBC9R;v5@kMaZWeHt)1>u*G5yqrScy^ zfCR}&_e4D6mF96d-o$GrG#g9Qr7H$te(GefzODQ7xaZ;GRqWHF6fzm+m<3eh$y1-j zv1u>kMniiInI!899nz}GEUo!eK5iFKv{e0X7!*!r_#ZU6NjmQ1sezlv2GihD={OhT zxkGo0kpqD;$41o&;e6QPy?##_DdUj-4mv<%;G#w4#35U??pJYLr^+y05wY~i+f&Gc zsY7>gt7Q%(b8xH%WrfY6OPVMl?gSWxl4HL7y*BK$7$ad|<#@T9DH|LQ(VO&=^0{XWGzpe6| zJR@WvCN~BviMKN_?U@h(tlz9;PA{@_cIr>x4@<6d4&EQb-tp3%rseZQWrjYwE!{k~ z8UE6}xED+JBR!;SCwKI0okdh*BM=3XNK$8oyFFv9wmw_J|aCZNF=;RHE6BSIVZz5tt^QaU$sY5GoU=WKpRsNn=^% zqlFyrsYiJW{v*v=L}dqsfW6R<0>9xEaYgzn{x9xV$8AqS2a2b-TH7xn{0vR(1UM0w zo1#J#x7D{j#PN5qIks>Te=U?DXn7ET-9Vss6W4#yK?W4zO*)<=4Xy&bFiTwgeT`2( zlb5~o9*VkS2e4gm;2@nykPNUmXRlZR*#~VQ-^Vk_VsQ34^HkiWUAuA-t#_?l{*YpV z@1a@fr008XguCN}5in@lz8Fu~Rf`45i~1)m5x%ddv(jF9!9wA`LnvgFT{N*X3Y(v# zIL_rD?_|oH#H~ILNS(pU*=`)$W+4)K~b<@79B6Q^;z-Q@b2snZkI^YyjY&!U5j_R@(| z?Hz9K+|F)%sad^e!K!W2%^&KOOV*slWXRw9v^8zb=g&9`=cw0D-LL_M2Er*T3$*W%*W4Rc7Oxj&gmiM>s8&#N>y&ga_k zeMl^%eoF>bIz0NxsgCQA5G$eLTyZ85w$&9WT2c=edC`@<03n&=ydn`vfdNB-1ySm3 z=bQQ0&#qvb3|T(dW$GhD!7nILXSTk%Rhlb0)#?fkPomfh*8|IqYuM2VG+bLmI$&xc zgn~+Ix^W0foo%WlVloj*U7y5xl4Lxc_~eJ_qpmuRq+*G>Vl|wAcH#)D4bQ~ky%>Ok zMq@%ys9mZ~ub-KQh^{-q+7`N_lc(^~swowxFUcgo0xLFu&_MVOB|aI7K(q4Pexe~sgj2gVs5QwMvhR-BRihaS?=&y z>c}oB&J1X3(PuWx5)Vcxgph?OPDVMBsHIMvjo-3yfFet9a7-LNGY}49 z_kBtmb|RD2C=06*C{l&gflCIQ!az9vkf;{|H?fW%Tp8-1-5VadBHDkYlskr`1 zgK{<~SlpUP5>D(Nk-ehEmRN1t5}-DPE4MjZg$PyPt$B0^zHlaCeFY9YRjP;-VI)50 zqb>21AFOXC>#MreHt-np5RKyK`!)w1j+-`1^a;E6mSn=fAyDq0ddc zSvRzpVEZgm_$Fpc*T|?Mg>*hUzNjP!t+b5vdlJT>z)d>+p5*`CWt$TJD%pR+y<727 zp<1DR&y^yM_I3ZJ^6!zUtWaf6<&FCDeW_*My5~#>HL|MWl zR~dYzQpH=>D}NuYu2=pinq9B_0baab`Bxa<^~wt1UvF~J!Z90V3}xSs>e#^>wx|>V zWefz8z{QV+TeVfcT2L*h7=l|p-u?rE#zEA&_E3DntBaI$0Z$MM#HPTLhBu_@hn`_yI1}Lg_Q=F$&@<3NK1kCuqedR_)@wuxf`c zgld(#j*sGRxXWDOdNBSVdEN!D9y$TZbHK7!t4^u)mH7CE9ndMr7#{9GsiC`*bbwRX zT*ak7cxRK`Rt)AC&S_d}+G|dM3b0%8L8p$)b0I`I0eWyY&3>0vS zF| zb6`xthj^(Ta@YU^csQ^(l6kv!Abwbqqw3Y~;pdYH?^7@IFhqS&{79kXg*4Y7sAQ)T zs5tUN;s&IFpp=O^qa|mxNxXI<+(MnkX2JE=+$#P=*f&h)QUj$na)A^)VvLp;2G=-C zUO}(NBEN|3fC`Uz6f+rYfoMz@v*TkDFQx}C;*Ss`GzvI2jOV{V#zmnB_NM72O4_S< zR*Kx#wek3fS1O2*cgtM>*?pW#R`xX_M~T$5{h7HYw%jOcgo|@?8yg#le9`^ic|Ta2 zD>>_PXc^97m=Gp(C^<18)^UXS%DHwmSxciBgpXYtskI?c)<_;Fc~{W5#Rol1>Inxo zU6-)XworcLI!=UTb(GjrBluB;VC4IdRGt%+89_IyRp+pgGd^Av^*?IiVd72MNwa8eqWSjA$sdtss9S7nP&cXOFNolX7#lCxj<-SlPB>RP$Ao(ve2Q>v=&6hdFZTpQ>eZRX^; z$L)P#Fp5JF6DBkiwS536n|D z0O}pN$Ut5ukObYi0x<=AurHuo8ymHMZ~OV3{7RHtNR8)B>jk@76gLI)UOGxZlG(pX z-=JKY#fYwDp;}QS2%yPRuMhLfzNg&T)M&d>PF;Se%4^{v;nL&OwT>x3JO8rpDRwS3 zwl}RC;4YDV>f`Rn)Vo9evhOK(J~iMJ<+eY-H}&q2zwCR;T}Tbspj=;Pd!=3;?w9>d zIcbePu$p!;>6qa*L#X|G+t2Uh*9TV9PA#nmR?}`M_rPizgnGnl53Hs^D5lyHC&O~_=#`r{ aU%AN%Hw5P#3a6(sTO9U0?H*{Z=KnvvWrLXj diff --git a/doc/_build/html/_sources/tutorial.txt b/doc/_build/html/_sources/tutorial.txt index 40e806a..e3a5f72 100644 --- a/doc/_build/html/_sources/tutorial.txt +++ b/doc/_build/html/_sources/tutorial.txt @@ -4,7 +4,9 @@ Tutorial ********* -This is a simple tutorial demonstrating the main functionalities of :py:mod:`postqe`. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory *examples* of the package and can be run either as interactive sessions in your Python interpreter or as scripts. +This is a simple tutorial demonstrating the main functionalities of :py:mod:`postqe`. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory *examples* of the package and can be run either as interactive sessions in your Python interpreter or as scripts. It is also possible to obtain the same results using the command line and the available commands and options of :py:mod:`postqe`, as detailed in the following. +You should run the example scripts or command-line commands from the corresponding example directory, which contains the proper input files. + The tutorial is based on the following examples: +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ @@ -14,7 +16,7 @@ The tutorial is based on the following examples: +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ | 2 | Calculate and plot the band structure of silicon | +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ -| 3 | Calculate and plot the density of states (DOS) of silicon | +| 3 | Calculate and plot the density of states (DOS) of silicon | +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ | 4 | Plotting a 1D section of the charge density | +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ @@ -47,12 +49,24 @@ Optionally, you can plot the results with the :py:func:`plot_EV`. The original d .. image:: ../examples/example1/Ni-eos.png :width: 500 +It is possible to obtain the same results using the command line and the available commands and options of :py:mod:`postqe`. For this example, you must type: + +.. code-block:: bash + + $ postqe eos -prefix Nienergies.dat -eos_type murnaghan -fileout eos -fileplot Ni-eos.png + +Note that you can get help from the command line with the -h or --help options. Try for example: + +.. code-block:: bash + + $ postqe -h + $ postqe eos -h ==================================================================================================================== Calculate and plot the band structure of silicon (examples 2) ==================================================================================================================== -This example shows how to calculate the electronic band structure of silicon with :py:mod:`postqe`. All necessary information is extracted from the standard xml output file of Quantum Espresso, produced by a proper calculation along the wanted path in the Brillouin zone. +This example shows how to calculate the electronic band structure of silicon with :py:mod:`postqe`. All necessary information is extracted from the standard xml output file of Quantum Espresso, produced by a proper calculation along the desired path in the Brillouin zone. .. literalinclude:: ../examples/example2/example2.py :language: python @@ -64,9 +78,14 @@ The *schema* (optional) parameter allows the code to properly parse and validate The parameter *reference_energy* (usually the Fermi level) allows you to shift the plot accordingly. :py:func:`get_band_structure` returns a band structure object which can be further processed. For example, the method :py:func:`plot` creates a figure and save it in a png file. -.. image:: ../examples/example2/Sibands.png +.. image:: ../examples/example2/bandsplot.png :width: 500 +The above results can be obtained from the command line typing: + +.. code-block:: bash + + $ postqe bands -prefix Si -schema ../../schemas/qes.xsd ============================================================================================================================== Calculate and plot the density of states (DOS) of silicon (examples 3) @@ -83,11 +102,16 @@ The :py:func:`get_dos` needs in input the xml file produced by pw.x, after a pro The DOS values and the corresponding energies can be obtained from the DOS object using the methods :py:func:`get_dos` and :py:func:`get_energies`. If you want you can further manipulate these values. For example you can make a plot with the Python library *Matplotlib*. The output plot looks like the following: -.. image:: ../examples/example3/figure.png +.. image:: ../examples/example3/dosplot.png :width: 500 You can of course continue to calculate other quantities in your script. +The above results can be obtained from the command line typing: + +.. code-block:: bash + + $ postqe dos -prefix Si -schema ../../schemas/qes.xsd -npts 200 -width 0.5 =========================================================== Plotting a 1D section of the charge density (examples 4) diff --git a/doc/_build/html/postqe.html b/doc/_build/html/postqe.html index f4636cc..54a0829 100644 --- a/doc/_build/html/postqe.html +++ b/doc/_build/html/postqe.html @@ -308,7 +308,7 @@

    Submodules
    -class postqe.eos.QEEquationOfState(volumes, energies, eos_type='murnaghan')
    +class postqe.eos.QEEquationOfState(volumes, energies, eos='murnaghan')

    Bases: ase.eos.EquationOfState

    diff --git a/doc/_build/html/searchindex.js b/doc/_build/html/searchindex.js index 2e9b040..077482d 100644 --- a/doc/_build/html/searchindex.js +++ b/doc/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{comput_dos:[2,1,1,""],compute_band_structure:[2,1,1,""],compute_eos:[2,1,1,""],get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},"postqe.charge":{Charge:[2,2,1,""],Potential:[2,2,1,""],read_charge_file_hdf5:[2,1,1,""],write_charge:[2,1,1,""]},"postqe.charge.Charge":{plot:[2,3,1,""],read:[2,3,1,""],set_calculator:[2,3,1,""],setvars:[2,3,1,""],write:[2,3,1,""]},"postqe.charge.Potential":{compute_potential:[2,3,1,""],plot:[2,3,1,""],write:[2,3,1,""]},"postqe.dos":{QEDOS:[2,2,1,""]},"postqe.dos.QEDOS":{get_dos_int:[2,3,1,""],write:[2,3,1,""]},"postqe.eos":{QEEquationOfState:[2,2,1,""],create_header:[2,1,1,""]},"postqe.eos.QEEquationOfState":{write:[2,3,1,""]},postqe:{api:[2,0,0,"-"],charge:[2,0,0,"-"],dos:[2,0,0,"-"],eos:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"0e24":3,"2nd":[],"3rd":3,"case":3,"class":[1,2],"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":[1,2],"return":[1,2,3],"true":[2,3],abov:1,accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],addition:2,advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,alwai:2,ang:3,ani:1,anoth:2,anton:[2,3],antonschmidt:2,api:[],approxim:3,arg:2,around:2,arrai:2,assum:3,atom:1,automat:3,avail:[1,2,3],axi:2,band:[],bandsplot:2,bare:[2,3],base:[1,2,3],below:[2,3],besid:2,birch:[1,2,3],birchmurnaghan:2,bodi:3,brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,c_0:2,c_1:2,c_2:2,c_3:2,calc:2,calcul:[],call:3,caller:2,can:[1,2,3],center:3,charg:[],charge_diff:2,choic:1,code:[1,3],collect:2,column:3,command:1,common:[1,3],commun:1,compound:2,comput:[2,3],comput_do:2,compute_band_structur:2,compute_eo:2,compute_potenti:2,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:[2,3],create_head:2,cubic:3,current:[1,2,3],customari:3,cutoff:2,dat:3,data:[1,2,3],defin:[2,3],demonstr:3,densiti:[],deriv:[1,2],detail:[1,2,3],determin:2,dev:1,develop:1,dft:2,differ:[],dim:[2,3],dimens:2,direct:[2,3],directli:1,directori:[2,3],doc:1,dosplot:2,down:2,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:[2,3],emin:[2,3],energi:[],environ:[1,2,3],eos_typ:[2,3],eosplot:2,equat:[1,2,3],equationofst:2,equilibrium:3,espresso:[1,2,3],espresso_tmpdir:[2,3],essentiali:3,etc:1,everyth:1,exampl:[],except:3,exchang:[1,2,3],expans:2,expos:2,extract:3,f2py:1,face:3,fact:[1,3],fail:3,fals:2,featur:1,fermi:[2,3],fetch:3,fft:2,fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:[2,3],figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:[2,3],fileout:2,fileplot:2,first:3,fit:[],fit_and_plot_eo:[],fit_and_write_eo:[],follow:3,format:[2,3],fortran:1,found:3,fourier:2,framework:1,from:[1,2,3],full:3,fulli:1,further:[1,3],fysik:1,gaussian:[2,3],gener:[],get:[2,3],get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_dos_int:2,get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:[2,3],glue:1,gnuplot:2,gpa:3,grid:2,handl:1,hartre:[1,2,3],hdf5:[2,3],header:2,henc:[1,2],here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,ifmagn:2,implement:1,implent:1,includ:1,incomplet:2,index:[0,2],inform:3,initi:3,input:[2,3],instal:[],instanc:2,integr:2,intepret:[],interact:3,interfac:1,intermetal:2,interpol:2,interpret:3,introduct:[],invers:[2,3],isotrop:3,itself:3,kwarg:2,label:3,languag:1,length:2,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:[1,2],link:1,list:2,look:3,magnet:2,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,2,3],maximum:2,maximun:2,meant:1,method:[2,3],miller:2,minimum:2,minimun:2,modifi:[2,3],modul:[],modulu:3,more:1,most:[1,3],murnaghan:[],must:3,name:2,nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:[],noth:2,npt:[2,3],nr1:2,nr2:2,nr3:2,nr_temp:2,number:[1,2,3],numpi:[1,2],object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:[1,2],option:[2,3],order:[2,3],org:1,origin:[2,3],other:[1,3],otherwis:2,out:[2,3],outdir:[2,3],output:[2,3],outputcharg:3,overrid:3,own:1,packag:[],page:0,param:[],paramet:[2,3],pars:3,part:[],path:[2,3],pdf:3,peopl:1,perform:3,person:1,physrevb:2,planar:3,plane:3,pleas:2,plot:[],plot_ev:3,plot_fil:2,plt:3,plu:3,png:[2,3],point:[2,3],polynomi:[2,3],popular:1,possibl:1,post:1,postprocess:1,pot_typ:[2,3],potenti:[],pourier:[2,3],pouriertarantola:2,practic:2,prb:2,prefix:[2,3],previou:3,principl:2,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:[2,3],provid:[1,3],pseudopotenti:3,pyplot:3,python:[1,3],qedo:2,qeequationofst:2,quantiti:[1,2,3],quantum:[1,3],radiu:2,ratio:3,read:[2,3],read_charge_file_hdf5:2,reciproc:2,reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:[2,3],scipi:1,script:[1,3],search:0,second:3,section:[],see:[1,2,3],seri:2,session:3,set:[2,3],set_calcul:2,setup:1,setvar:2,sever:3,shift:3,show:[2,3],shown:3,siband:3,silicon:[],similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,sjeo:2,softwar:1,some:[1,3],sourc:3,space:2,special:2,specif:1,specifi:3,spin:2,standard:3,state:[],step:3,still:[1,2],store:2,str:3,structur:[],submodul:[],sudo:1,system:3,tailor:3,taken:[2,3],tarantola:[2,3],task:[1,3],tast:1,taylor:2,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],third:2,tinker:1,togeth:[1,2,3],too:3,tool:1,total:[],tri:3,tutori:[],two:3,type:[2,3],under:1,unit:[1,3],user:[1,2,3],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:[2,3],vector:[2,3],version:[],vinet:[1,2,3],vol:2,volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,2,3],who:1,width:[2,3],wiki:1,window:2,work:3,wrapper:1,write:[2,3],write_charg:2,written:[2,3],wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zero:2,zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:[2,3],densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file +Search.setIndex({envversion:47,filenames:["index","introduction","postqe","tutorial"],objects:{"postqe.api":{comput_dos:[2,1,1,""],compute_band_structure:[2,1,1,""],compute_eos:[2,1,1,""],get_band_structure:[2,1,1,""],get_charge:[2,1,1,""],get_dos:[2,1,1,""],get_eos:[2,1,1,""],get_label:[2,1,1,""],get_potential:[2,1,1,""]},"postqe.charge":{Charge:[2,2,1,""],Potential:[2,2,1,""],read_charge_file_hdf5:[2,1,1,""],write_charge:[2,1,1,""]},"postqe.charge.Charge":{plot:[2,3,1,""],read:[2,3,1,""],set_calculator:[2,3,1,""],setvars:[2,3,1,""],write:[2,3,1,""]},"postqe.charge.Potential":{compute_potential:[2,3,1,""],plot:[2,3,1,""],write:[2,3,1,""]},"postqe.dos":{QEDOS:[2,2,1,""]},"postqe.dos.QEDOS":{get_dos_int:[2,3,1,""],write:[2,3,1,""]},"postqe.eos":{QEEquationOfState:[2,2,1,""],create_header:[2,1,1,""]},"postqe.eos.QEEquationOfState":{write:[2,3,1,""]},postqe:{api:[2,0,0,"-"],charge:[2,0,0,"-"],dos:[2,0,0,"-"],eos:[2,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"0e24":3,"2nd":[],"3rd":3,"case":3,"class":[1,2],"default":[2,3],"final":1,"function":[1,2,3],"import":[1,3],"new":[1,2],"return":[1,2,3],"true":[2,3],"try":3,abov:[1,3],accept:3,access:1,accordingli:3,adapt:1,addit:[2,3],addition:2,advanc:1,after:3,all:[1,3],allow:3,along:[2,3],also:[1,3],altern:1,alwai:2,ang:3,ani:1,anoth:2,anton:[2,3],antonschmidt:2,api:[],approxim:3,arg:2,around:2,arrai:2,assum:3,atom:1,automat:3,avail:[1,2,3],axi:2,band:[],bandsplot:2,bare:[2,3],base:[1,2,3],below:[2,3],besid:2,birch:[1,2,3],birchmurnaghan:2,bodi:3,boh:[],brillouin:3,brilluoin:2,broaden:3,bug:1,bulk:3,c_0:2,c_1:2,c_2:2,c_3:2,calc:2,calcul:[],call:3,caller:2,can:[1,2,3],center:3,charg:[],charge_diff:2,choic:1,code:[1,3],collect:2,column:3,command:[1,3],common:[1,3],commun:1,compound:2,comput:[2,3],comput_do:2,compute_band_structur:2,compute_eo:2,compute_potenti:2,constant:[1,3],contain:[1,2,3],content:0,continu:3,convers:1,correl:[1,2,3],correspond:[2,3],cours:[1,3],creat:[2,3],create_head:2,cubic:3,current:[1,2,3],customari:3,cutoff:2,dat:3,data:[1,2,3],def:[],defin:[2,3],demonstr:3,densiti:[],deriv:[1,2],descript:3,desir:3,detail:[1,2,3],determin:2,dev:1,develop:1,dft:2,differ:[],dim:[2,3],dimens:2,direct:[2,3],directli:1,directori:[2,3],doc:1,dosplot:2,down:2,download:1,dtu:1,dynam:1,either:3,electron:[1,3],emax:[2,3],emin:[2,3],energi:[],environ:[1,2,3],eos_typ:[2,3],eosplot:2,equat:[1,2,3],equationofst:2,equilibrium:3,espresso:[1,2,3],espresso_tmpdir:[2,3],essentiali:3,etc:1,everyth:1,exampl:[],except:3,exchang:[1,2,3],expans:2,expos:2,extract:3,f2py:1,face:3,fact:[1,3],fail:3,fals:2,featur:1,fermi:[2,3],fetch:3,fft:2,fig1:3,fig2:3,fig3:3,fig4:3,fig:3,figur:[2,3],figure_1:3,figure_v_bar:3,figure_v_h:3,figure_v_tot:3,figure_v_xc:3,file:[1,2,3],filenam:[2,3],fileout:[2,3],fileplot:[2,3],first:3,fit:[],fit_and_plot_eo:[],fit_and_write_eo:[],follow:3,format:[2,3],fortran:1,found:3,fourier:2,framework:1,from:[1,2,3],full:3,fulli:1,fun:[],further:[1,3],fysik:1,gaussian:[2,3],gener:[],get:[2,3],get_band_structur:[2,3],get_charg:[2,3],get_do:[2,3],get_dos_int:2,get_energi:3,get_eo:[2,3],get_label:2,get_potenti:[2,3],github:1,given:[2,3],glue:1,gnuplot:2,gpa:3,grid:2,handl:1,hartre:[1,2,3],hdf5:[2,3],header:2,help:3,henc:[1,2],here:3,hexagon:3,how:3,howev:[1,3],http:1,identi:3,identifi:3,ifmagn:2,implement:1,implent:1,includ:1,incomplet:2,index:[0,2],inform:3,initi:3,input:[2,3],instal:[],instanc:2,integr:2,intepret:[],interact:3,interfac:1,intermetal:2,interpol:2,interpret:3,introduct:[],invers:[2,3],isotrop:3,itself:3,kwarg:2,label:3,languag:1,length:2,less:1,let:3,level:[2,3],leverag:1,librari:[1,3],like:3,line:[1,2,3],link:1,list:2,look:3,magnet:2,mai:[1,3],main:3,make:[1,3],manipul:[1,3],matplotlib:[1,2,3],maximum:2,maximun:2,meant:1,method:[2,3],miller:2,minimum:2,minimun:2,modifi:[2,3],modul:[],modulu:3,more:1,most:[1,3],murnaghan:[],must:3,name:2,nearli:3,necessari:3,need:[1,3],nienergi:3,none:2,note:[],noth:2,npt:[2,3],nr1:2,nr2:2,nr3:2,nr_temp:2,number:[1,2,3],numpi:[1,2],object:[1,2,3],obtain:[1,3],offer:1,ongo:2,onli:[1,2],option:[2,3],order:[2,3],org:1,origin:[2,3],other:[1,3],otherwis:2,out:[2,3],outdir:[2,3],output:[2,3],outputcharg:3,overrid:3,own:1,packag:[],page:0,param:[],paramet:[2,3],pars:3,part:[],pass:[],path:[2,3],pdf:3,peopl:1,perform:3,person:1,physrevb:2,planar:3,plane:3,pleas:2,plot:[],plot_ev:3,plot_fil:2,plt:3,plu:3,png:[2,3],point:[2,3],polynomi:[2,3],popular:1,possibl:[1,3],post:1,postprocess:1,pot_typ:[2,3],potenti:[],pourier:[2,3],pouriertarantola:2,practic:2,prb:2,prefix:[2,3],previou:3,principl:2,print:3,procecess:1,process:3,produc:3,proper:[2,3],properli:[2,3],provid:[1,3],pseudopotenti:3,pyplot:3,python:[1,3],qedo:2,qeequationofst:2,quantiti:[1,2,3],quantum:[1,3],radiu:2,ratio:3,read:[2,3],read_charge_file_hdf5:2,reciproc:2,reference_energi:[2,3],relat:1,repres:3,respect:1,result:[1,2,3],risk:1,run:3,same:3,save:[2,3],savefig:3,schema:[2,3],schmidt:[2,3],scipi:1,script:[1,3],search:0,second:3,section:[],see:[1,2,3],seri:2,session:3,set:[2,3],set_calcul:2,setup:1,setvar:2,sever:3,shift:3,should:3,show:[2,3],shown:3,siband:3,silicon:[],similar:3,simpl:3,simplest:3,simpli:1,simplifi:3,simul:1,sjeo:2,softwar:1,some:[1,3],sourc:3,space:2,special:2,specif:1,specifi:3,spin:2,standard:3,state:[],step:3,still:[1,2],store:2,str:3,structur:[],submodul:[],sudo:1,system:3,tailor:3,taken:[2,3],tarantola:[2,3],task:[1,3],tast:1,taylor:2,text:[2,3],thei:[1,3],them:1,thi:[1,2,3],third:2,tinker:1,togeth:[1,2,3],too:3,tool:1,total:[],tri:3,tutori:[],two:3,type:[2,3],under:1,unit:[1,3],user:[1,2,3],usual:3,v_bare:[2,3],v_h:[2,3],v_tot:[2,3],v_xc:[2,3],valid:[2,3],valu:[2,3],variabl:[2,3],vector:[2,3],version:[],vinet:[1,2,3],vol:2,volum:[2,3],vtot:2,want:[1,3],well:1,what:3,where:1,which:[1,2,3],who:1,width:[2,3],wiki:1,window:2,work:3,wrapper:1,write:[2,3],write_charg:2,written:[2,3],wrong:2,www:1,xlabel:3,xml:[2,3],xsd:3,ylabel:3,you:[1,3],your:[1,3],zero:2,zone:[2,3]},titles:["Welcome to postqe’s documentation!","Introduction","postqe package","Tutorial"],titleterms:{api:2,band:3,calcul:3,charg:[2,3],densiti:3,differ:3,document:0,energi:3,exampl:3,fit:3,gener:1,indic:0,instal:1,introduct:1,modul:2,murnaghan:3,note:1,packag:2,plot:[1,3],postq:[0,2],potenti:3,section:3,silicon:3,state:3,structur:3,submodul:2,tabl:0,total:3,tutori:3,version:1,welcom:0}}) \ No newline at end of file diff --git a/doc/_build/html/tutorial.html b/doc/_build/html/tutorial.html index 3e5eb95..67a0958 100644 --- a/doc/_build/html/tutorial.html +++ b/doc/_build/html/tutorial.html @@ -55,8 +55,40 @@

    Navigation

    Tutorial

    -

    This is a simple tutorial demonstrating the main functionalities of postqe. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory examples of the package and can be run either as interactive sessions in your Python interpreter or as scripts. -The tutorial is based on the following examples:

    +

    This is a simple tutorial demonstrating the main functionalities of postqe. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory examples of the package and can be run either as interactive sessions in your Python interpreter or as scripts. It is also possible to obtain the same results using the command line and the available commands and options of postqe, as detailed in the following. +You should run the example scripts or command-line commands from the corresponding example directory, which contains the proper input files.

    +

    The tutorial is based on the following examples:

    + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
    Example n.Description
    1Fitting \(E_{tot}(V)\) for a cubic (isotropic) system using Murnaghan EOS
    2Calculate and plot the band structure of silicon
    3Calculate and plot the density of states (DOS) of silicon
    4Plotting a 1D section of the charge density
    5Plotting a 2D section of the charge density
    6Plotting 1D sections of different potentials

    Several simplified plotting functions are available in postqe and are used in the following tutorial to show what you can plot. Note however that all plotting functions need the matplotlib library, which must be available on your system and can be used to further tailor your plot.

    @@ -82,10 +114,19 @@

    Fitting the total energy using Murnaghan EOS (examples 1)get_eos() needs in input a file with two columns: the first with the volumes (in \(a.u.^3\)), the second with energies (in \(Ryd/cell\)). You also define here what EOS to use, in this case Murnaghan’s. This function returns an eos object. The method fit() performs the fitting and returns the equilibrium volume v0, energy e0 and bulk modulus B. The fitting results can then be printed or further processed.

    Optionally, you can plot the results with the plot_EV(). The original data are represented as points.

    _images/Ni-eos.png +

    It is possible to obtain the same results using the command line and the available commands and options of postqe. For this example, you must type:

    +
    $ postqe eos -prefix Nienergies.dat -eos_type murnaghan -fileout eos -fileplot Ni-eos.png
    +
    +
    +

    Note that you can get help from the command line with the -h or –help options. Try for example:

    +
    $ postqe -h
    +$ postqe eos -h
    +
    +

    Calculate and plot the band structure of silicon (examples 2)

    -

    This example shows how to calculate the electronic band structure of silicon with postqe. All necessary information is extracted from the standard xml output file of Quantum Espresso, produced by a proper calculation along the wanted path in the Brillouin zone.

    +

    This example shows how to calculate the electronic band structure of silicon with postqe. All necessary information is extracted from the standard xml output file of Quantum Espresso, produced by a proper calculation along the desired path in the Brillouin zone.

     bs = get_band_structure(prefix='Si', schema='../../schemas/qes.xsd', reference_energy=0)
     fig = bs.plot(emin=-20, emax=50, show=True, filename='Sibands.png')
    @@ -95,7 +136,11 @@ 

    Calculate and plot the band structure of silicon (examples 2)get_band_structure() returns a band structure object which can be further processed. For example, the method plot() creates a figure and save it in a png file.

    -
    _images/Sibands.png +_images/bandsplot.png +

    The above results can be obtained from the command line typing:

    +
    $ postqe bands -prefix Si -schema ../../schemas/qes.xsd
    +
    +

    Plotting a 1D section of the charge density (examples 4)

    diff --git a/doc/tutorial.rst b/doc/tutorial.rst index 40e806a..a26736f 100644 --- a/doc/tutorial.rst +++ b/doc/tutorial.rst @@ -4,7 +4,9 @@ Tutorial ********* -This is a simple tutorial demonstrating the main functionalities of :py:mod:`postqe`. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory *examples* of the package and can be run either as interactive sessions in your Python interpreter or as scripts. +This is a simple tutorial demonstrating the main functionalities of :py:mod:`postqe`. The examples below show how to use the package to perform the most common tasks. The code examples can be found in the directory *examples* of the package and can be run either as interactive sessions in your Python interpreter or as scripts. It is also possible to obtain the same results using the command line and the available commands and options of :py:mod:`postqe`, as detailed in the following. +You should run the example scripts or command-line commands from the corresponding example directory, which contains the proper input files. + The tutorial is based on the following examples: +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ @@ -14,7 +16,7 @@ The tutorial is based on the following examples: +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ | 2 | Calculate and plot the band structure of silicon | +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ -| 3 | Calculate and plot the density of states (DOS) of silicon | +| 3 | Calculate and plot the density of states (DOS) of silicon | +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ | 4 | Plotting a 1D section of the charge density | +---------------+------------------------------------------------------------------------------------------------------------------------------------------+ @@ -47,12 +49,24 @@ Optionally, you can plot the results with the :py:func:`plot_EV`. The original d .. image:: ../examples/example1/Ni-eos.png :width: 500 +It is possible to obtain the same results using the command line and the available commands and options of :py:mod:`postqe`. For this example, you must type: + +.. code-block:: bash + + $ postqe eos -prefix Nienergies.dat -eos_type murnaghan -fileout eos -fileplot Ni-eos.png + +Note that you can get help from the command line with the -h or --help options. Try for example: + +.. code-block:: bash + + $ postqe -h + $ postqe eos -h ==================================================================================================================== Calculate and plot the band structure of silicon (examples 2) ==================================================================================================================== -This example shows how to calculate the electronic band structure of silicon with :py:mod:`postqe`. All necessary information is extracted from the standard xml output file of Quantum Espresso, produced by a proper calculation along the wanted path in the Brillouin zone. +This example shows how to calculate the electronic band structure of silicon with :py:mod:`postqe`. All necessary information is extracted from the standard xml output file of Quantum Espresso, produced by a proper calculation along the desired path in the Brillouin zone. .. literalinclude:: ../examples/example2/example2.py :language: python @@ -64,9 +78,14 @@ The *schema* (optional) parameter allows the code to properly parse and validate The parameter *reference_energy* (usually the Fermi level) allows you to shift the plot accordingly. :py:func:`get_band_structure` returns a band structure object which can be further processed. For example, the method :py:func:`plot` creates a figure and save it in a png file. -.. image:: ../examples/example2/Sibands.png +.. image:: ../examples/example2/bandsplot.png :width: 500 +The above results can be obtained from the command line typing: + +.. code-block:: bash + + $ postqe bands -prefix Si -schema ../../schemas/qes.xsd ============================================================================================================================== Calculate and plot the density of states (DOS) of silicon (examples 3) @@ -88,13 +107,18 @@ The DOS values and the corresponding energies can be obtained from the DOS objec You can of course continue to calculate other quantities in your script. +The above results can be obtained from the command line typing: + +.. code-block:: bash + + $ postqe dos -prefix Si -schema ../../schemas/qes.xsd -npts 200 -width 0.5 -fileplot figure.png =========================================================== Plotting a 1D section of the charge density (examples 4) =========================================================== -A common task you can do with :py:mod:`postqe` is to plot the electronic charge density along one direction. The charge is read from the HDF5 -output file create by the Quantum Espresso calculation in *outdir*. Additional information are extracted from the standard xml output file, identified by the 'label' parameter in the :py:func:`get_charge` function. The *schema* (optional) parameter allows the code to properly parse and validate the xml file. The full code to do this is shown below: +A common task you can perform with :py:mod:`postqe` is to plot the electronic charge density along one direction. The charge is read from the HDF5 +output file create by the Quantum Espresso calculation in *outdir*. Additional information are extracted from the standard xml output file, identified by the *prefix* parameter in the :py:func:`get_charge` function. The *schema* (optional) parameter allows the code to properly parse and validate the xml file. The full code to do this is shown below: .. literalinclude:: ../examples/example4/example4.py :language: python @@ -107,6 +131,12 @@ By default, the charge is plotted from the point (0,0,0) along the direction (1, .. image:: ../examples/example4/figure_1.png :width: 500 +The above results can be obtained from the command line typing: + +.. code-block:: bash + + $ postqe dos -prefix Si -schema ../../schemas/qes.xsd -npts 200 -width 0.5 -fileplot figure.png + =========================================================== Plotting a 2D section of the charge density (examples 5) =========================================================== diff --git a/examples/example1/figure.pdf b/examples/example1/figure.pdf index 243542b3f23c0f355e06969a8a4c6c6401a455c1..a8bd41aa24de4ab32ac9e3055b5dbfec1b8f2af3 100644 GIT binary patch delta 6652 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 diff --git a/postqe/cli.py b/postqe/cli.py index aa31cf5..3089588 100644 --- a/postqe/cli.py +++ b/postqe/cli.py @@ -144,7 +144,7 @@ def get_cli_parser(): # TODO: to be finished parser = argparse.ArgumentParser(description='QE post processing') - subparsers = parser.add_subparsers(help='sub-command help') + subparsers = parser.add_subparsers(help='sub-command help', dest='commands') # create the parser for the "eos" command eos_parser = subparsers.add_parser('eos', help=EOS_HELP) @@ -177,7 +177,7 @@ def get_cli_parser(): dos_parser.add_argument('-emax', type=float, default=50, help=DOS_EMAX_HELP) dos_parser.add_argument('-npts', type=int, default=100, help=DOS_NPTS_HELP) dos_parser.add_argument('-fileout', type=str, default='', help=DOS_FILEOUT_HELP) - dos_parser.add_argument('-fileplot', type=str, default='bandsplot', help=DOS_FILEPLOT_HELP) + dos_parser.add_argument('-fileplot', type=str, default='dosplot', help=DOS_FILEPLOT_HELP) dos_parser.add_argument('-show', type=bool, default=True, help=EOS_SHOW_HELP) # create the parser for the "charge" command @@ -191,7 +191,7 @@ def get_cli_parser(): potential_parser.add_argument('-prefix', type=str, required=True, help=PREFIX_HELP) potential_parser.add_argument('-outdir', type=str, default=None, help=OUTDIR_HELP) potential_parser.add_argument('-schema', type=str, default=None, help=SCHEMA_HELP) - potential_parser.add_argument('-pot_type', type=str, default=None, help=POT_TYPE_HELP) + potential_parser.add_argument('-pot_type', type=str, default='v_tot', help=POT_TYPE_HELP) return parser diff --git a/postqe/eos.py b/postqe/eos.py index 0b4d851..7f64ae4 100644 --- a/postqe/eos.py +++ b/postqe/eos.py @@ -16,8 +16,8 @@ def create_header(eos, v0, e0, B): class QEEquationOfState(EquationOfState): - def __init__(self, volumes, energies, eos_type='murnaghan'): - EquationOfState.__init__(self, volumes, energies, eos=eos_type) + def __init__(self, volumes, energies, eos='murnaghan'): + EquationOfState.__init__(self, volumes, energies, eos=eos) def write(self,filename='eos.out'): self.filename = filename diff --git a/postqe/pp.py b/postqe/pp.py index a438b5c..d567a66 100755 --- a/postqe/pp.py +++ b/postqe/pp.py @@ -1,15 +1,17 @@ #!/usr/bin/env python3 #encoding: UTF-8 -from .api import compute_eos, compute_band_structure +from .api import compute_eos, compute_band_structure, comput_dos def run(pars): - - # TODO: implement submenus - #compute_eos(pars.prefix, pars.outdir, pars.eos_type, pars.fileout, pars.fileplot, pars.show) - - #compute_band_structure(pars.prefix, pars.outdir, pars.schema, pars.reference_energy, - # pars.emin, pars.emax, pars.fileplot, pars.show) - - comput_dos(pars.prefix, pars.outdir, pars.schema, pars.width, pars.window, pars.npts, - pars.fileout, pars.fileplot, pars.show) \ No newline at end of file + # just go through the possible commands and call the proper API function + if (pars.commands == 'eos'): + compute_eos(pars.prefix, pars.outdir, pars.eos_type, pars.fileout, pars.fileplot, pars.show) + elif (pars.commands == 'bands'): + compute_band_structure(pars.prefix, pars.outdir, pars.schema, pars.reference_energy, + pars.emin, pars.emax, pars.fileplot, pars.show) + elif (pars.commands == 'dos'): + comput_dos(pars.prefix, pars.outdir, pars.schema, pars.width, (pars.emin, pars.emax), pars.npts, + pars.fileout, pars.fileplot, pars.show) + else: + print('Command not implemented! Exiting...') \ No newline at end of file From 955f3732dddef42d5038dccc0080c368139616d4 Mon Sep 17 00:00:00 2001 From: Mauro Palumbo Date: Tue, 17 Oct 2017 16:01:55 +0200 Subject: [PATCH 019/166] revised api, command line interface and documentation for charge calculation. --- doc/_build/doctrees/environment.pickle | Bin 15464 -> 15069 bytes doc/_build/doctrees/introduction.doctree | Bin 17537 -> 18029 bytes doc/_build/doctrees/postqe.doctree | Bin 98108 -> 120310 bytes doc/_build/doctrees/tutorial.doctree | Bin 53346 -> 54346 bytes doc/_build/html/_sources/introduction.txt | 2 + doc/_build/html/_sources/tutorial.txt | 14 ++- doc/_build/html/genindex.html | 4 + doc/_build/html/introduction.html | 1 + doc/_build/html/objects.inv | Bin 504 -> 508 bytes doc/_build/html/postqe.html | 99 +++++++++++++++++++--- doc/_build/html/searchindex.js | 2 +- doc/_build/html/tutorial.html | 12 ++- doc/introduction.rst | 2 + postqe/api.py | 61 +++++++++++-- postqe/charge.py | 48 ++++++++--- postqe/cli.py | 70 ++++++++++++++- postqe/pp.py | 20 +++-- 17 files changed, 282 insertions(+), 53 deletions(-) diff --git a/doc/_build/doctrees/environment.pickle b/doc/_build/doctrees/environment.pickle index baab93b44b98125464535e8b30d8ed286fc440e9..00cd0f3a9e32ff23dbcd9e2a8de752715f5aa6e6 100644 GIT binary patch literal 15069 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 XTr;ShE;a|WA8>??me9oUQuF@+qx?A1 diff --git a/doc/_build/doctrees/introduction.doctree b/doc/_build/doctrees/introduction.doctree index 97cc18490731fb962e1ff4d47b4c100c05895e5f..18d94a7865b1b2118a366a83c7afc8ee72cec632 100644 GIT binary patch literal 18029 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

    =i;U~8jj}Fmo@FpBa;~_` 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�exVo0G|Uj1}MG)*86 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 literal 98108 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 diff --git a/doc/_build/doctrees/tutorial.doctree b/doc/_build/doctrees/tutorial.doctree index 04c5c1dd99907e28d13e42e333883f0d10406cbb..2f540bd68ecab68ee8400d723c6f43968894cccc 100644 GIT binary patch literal 54346 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 ZcXW$a6)z&r3-pSPKsOIf-x{mA{|{UXy^#O_ literal 53346 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

    compute_band_structure() (in module postqe.api)
    + +
    compute_charge() (in module postqe.api) +
    +

    diff --git a/doc/_build/html/introduction.html b/doc/_build/html/introduction.html index 571a4be..394304d 100644 --- a/doc/_build/html/introduction.html +++ b/doc/_build/html/introduction.html @@ -107,6 +107,7 @@

    Version

    Plotting

    postqe uses the matplotlib library for Plotting. Some functions in the package are simply useful wrappers for matplotlib functionalities of common uses. They return a matplotlib object which can be further adapted to specific needs and personal taste. Alternatively, you can of course manipulate and plot the post-procecessed data with any other Python tool of your choice.

    +

    It is also possible to export the charge (and various potentials) into text files according to different available formats (XSF XCrySDen format, cube Gaussian format, Gnuplot formats, contour.x and plotrho.x formats).

    diff --git a/doc/_build/html/objects.inv b/doc/_build/html/objects.inv index b97cd6f94d74baad1170a592e6f974a904f85058..e5a7318b193d24f746ad09940dcccae6d6c843b2 100644 GIT binary patch delta 397 zcmV;80doHM1N;M!d4D}`!Y~kq_xuV=?V6}m>cZMGFjP>{Ju>!%L^83l&u#hljd4DR zgoKX`F7M;}czrh7;RyMYOK3r&EsYM1xQhy61ccl0p6b&&Np~Z$L zVpHFVw!m+NPE8H`fl)sAKE!JG(yM{?Y5JSk_JZMiz6s10k@)_D`Tuba~B0$et-;p_pXJFpUH>laOijcKL+~;FAnOdJnqDm delta 393 zcmV;40e1fU1NZ}wd4E4|!Y~lU_k0RV?V6}m>cZMGFjP>{Ju>#?k7QzFpWE{7>)<31 z2?-w?T;9(wch4829Uh_Jre)@|JZR|^uoq@xxxs^aipBhy<(Zk(h0q7%v6R~NVC6f3 zt?t-jhTdeL-1APB4y_mHEzo(OnAU&~8}_VdxUGqdq`n}zBY(yBplFEE2pzUO5xexA zcq<}Myic4^+_`%OgT63IeXLvwuQ+P^5dXuiql3S;MId0?>&Vi^ zIU&=w%yOq1Q**h1)L#22hh;0PRzcaw>Wy+$qa$fwhdoWa;6Yt{tv)upgfu4Y_&q4w zE@_SzFnNGL>VE>x2CJjz{cJYX4mqZ*>rIaIl7$EvhlHAtG}t={aR;i nfLqbbm9aLQxr>4=uOUMpzH9x)&*WouJoJ0`pZx>kVFK2A$WzUP diff --git a/doc/_build/html/postqe.html b/doc/_build/html/postqe.html index 54a0829..ace5ad4 100644 --- a/doc/_build/html/postqe.html +++ b/doc/_build/html/postqe.html @@ -98,7 +98,7 @@

    Submodules

    Parameters:
    , *may* have spurious - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare or - wrap[1] === "
    " && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { - var elem, type, id, data, - i = 0, - internalKey = jQuery.expando, - cache = jQuery.cache, - deleteExpando = support.deleteExpando, - special = jQuery.event.special; - - for ( ; (elem = elems[i]) != null; i++ ) { - if ( acceptData || jQuery.acceptData( elem ) ) { - - id = elem[ internalKey ]; - data = id && cache[ id ]; - - if ( data ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Remove cache only if it was not already removed by jQuery.event.remove - if ( cache[ id ] ) { - - delete cache[ id ]; - - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== strundefined ) { - elem.removeAttribute( internalKey ); - - } else { - elem[ internalKey ] = null; - } - - deletedIds.push( id ); - } - } - } - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; - }, - - empty: function() { - var elem, - i = 0; - - for ( ; (elem = this[i]) != null; i++ ) { - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - } - - // Remove any remaining nodes - while ( elem.firstChild ) { - elem.removeChild( elem.firstChild ); - } - - // If this is a select, ensure that it displays empty (#12336) - // Support: IE<9 - if ( elem.options && jQuery.nodeName( elem, "select" ) ) { - elem.options.length = 0; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map(function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined ) { - return elem.nodeType === 1 ? - elem.innerHTML.replace( rinlinejQuery, "" ) : - undefined; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - ( support.htmlSerialize || !rnoshimcache.test( value ) ) && - ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1>" ); - - try { - for (; i < l; i++ ) { - // Remove element nodes and prevent memory leaks - elem = this[i] || {}; - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch(e) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[i], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - i = 0, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); - - // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - - -var iframe, - elemdisplay = {}; - -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? - - // Use of this method is a temporary fix (more like optmization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); - - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - - // Use the already-created iframe if possible - iframe = (iframe || jQuery( "