This shows you the differences between two versions of the page.

band_structure_of_nanocrystals [2014/11/18 16:37] prokop |
band_structure_of_nanocrystals [2014/11/20 15:43] (current) prokop |
||
---|---|---|---|

Line 3: | Line 3: | ||

The 'fuzzy band structure' of an nanocrystal (i.e. cluster without periodic boundary condition) can be obtained by Fourier transform of it's eigenstates. See [[http://journals.aps.org/prb/abstract/10.1103/PhysRevB.87.195420|Hapala et.al,Phys.Rev.B87,195420]]. In fireball there are two methods to do this projection. | The 'fuzzy band structure' of an nanocrystal (i.e. cluster without periodic boundary condition) can be obtained by Fourier transform of it's eigenstates. See [[http://journals.aps.org/prb/abstract/10.1103/PhysRevB.87.195420|Hapala et.al,Phys.Rev.B87,195420]]. In fireball there are two methods to do this projection. | ||

- | - **3D Fourier transform of molecular orbitals** - in this method we choose several molecular orbitals, project them on grid and let fireball execute Fast fourier transform on this grid. The problem is that the result is complex ( real part correspond to symmetric components of the real wavefunction and imaginary part to antisymetric componenets ). For easier visualization we compute square of absolute value, which corresponds to density of the state in k-space. This property is exported as .xsf file. | + | - **3D Fourier transform of molecular orbitals** - in this method we choose several molecular orbitals, project them on grid and let fireball execute Fast fourier transform on this grid. The problem is that the result is complex ( real part correspond to symmetric components of the real wavefunction and imaginary part to antisymetric componenets ). For easier visualization we compute square of absolute value, which corresponds to density of the state in k-space. This property is exported as .xsf file. There also other possible formats of outputs - as described further. |

- | - **projection of Molecular orbitals on planewaves sampled along some 1D lines in k-space** - again, molecular orbitals are first projected onto real space grid, then on this gird are multiplied by planewave and product is integrated. | + | - **projection of Molecular orbitals on just selected planewaves sampled along some 1D lines in k-space** - again, molecular orbitals are first projected onto real space grid, then on this gird are multiplied by planewave and product is integrated. |

=== Availability === | === Availability === | ||

Line 33: | Line 33: | ||

&END | &END | ||

- | You have to provide also file called ''kmap.optional'' where are written more speccific stettings. In this file you can choose ''byEnerg'' option to automatically evaluate all orbitals in particular energy windows ''Emin'' and ''Emax'' instead of listing all orbitals in ''pbands'' variable. Then there are options of different output format - either 3D grid in ''.xsf'' or 2D image ''.ppn''. Both options can be switched on simultaneously. In case you choose the ''.ppn'' image the 3D grid is collapsed into 2D by evaluationg maximum along z-axis. You can also plot independently real and imaginary part of projection ( instead of just square of absolute value) by option ''PlotImag ''. | + | You have to provide also file called ''kmap.optional'' where are written more speccific stettings. In this file you can choose ''byEnerg'' option to automatically evaluate all orbitals in particular energy window ''Emin'' and ''Emax'' instead of listing all orbitals in ''pbands'' variable. Then there are options of different output format - either 3D grid in ''.xsf'' or 2D image ''.ppn''. Both options can be switched on simultaneously. In case you choose the ''.ppn'' image the 3D grid is collapsed into 2D by evaluationg maximum along z-axis. You can also plot independently real and imaginary part of projection ( instead of just square of absolute value) by option ''PlotImag ''. |

- | Then there are some very specific options ''GetMaxPos'' to output position of global maximum projection for each orbital, and ''ValIn'' to output value of the projection in particular set of points in k-space. This options are here mostly for historical reasons, and I don't expect they will be much used in general. They are shortly describet later, for completness. | + | Then there are some very specific options ''GetMaxPos'' to output position of global maximum projection for each orbital, and ''ValIn'' to output value of the projection in particular set of points in k-space. This options are here mostly for historical reasons, and I don't expect they will be much used in general. They are shortly described later, for completeness. |

The example of ''kmap.optional'' looks like: | The example of ''kmap.optional'' looks like: | ||

Line 42: | Line 42: | ||

-8.59705 1.09186 # Emin Emax - energy range | -8.59705 1.09186 # Emin Emax - energy range | ||

0 # PlotXSF? - save .xsf files | 0 # PlotXSF? - save .xsf files | ||

- | 0 # PlotPPN? - save 2D projectins (max along z-axis) into ppn image file for quick overview | + | 0 # PlotPPN? - save 2D projections (max along z-axis) into .ppn image file for quick overview |

0 # PlotImag? - save real and imaginery part to independent files fft_Im_XXXX.xsf and fft_Re_XXXX.xsf | 0 # PlotImag? - save real and imaginery part to independent files fft_Im_XXXX.xsf and fft_Re_XXXX.xsf | ||

1 # GetMaxPos - if 1 for each MO writes out position of global maximum of k-space density int kmaxs.dat | 1 # GetMaxPos - if 1 for each MO writes out position of global maximum of k-space density int kmaxs.dat | ||

Line 84: | Line 84: | ||

The code outputs fourier_XXXX.xsf if you choose ''writeXSF'' and ''orbfft_XXXX.ppm'' if you choose ''writePPN'' option. | The code outputs fourier_XXXX.xsf if you choose ''writeXSF'' and ''orbfft_XXXX.ppm'' if you choose ''writePPN'' option. | ||

- | If you choose ''PlotImag'' option you in adition get separate real and imaginary part of projection ( corresponds to symmetric and antisymmetric component ) in files ''fft_Im_XXXX.xsf'' and ''fft_Re_XXXX.xsf''. | + | If you choose ''PlotImag'' option you in addition get separate real and imaginary part of projection ( corresponds to symmetric and antisymmetric component ) in files ''fft_Im_XXXX.xsf'' and ''fft_Re_XXXX.xsf''. |

If you choose option ''GetMaxPos'' you obtaion file ''kmaxs.dat'' with following structure: | If you choose option ''GetMaxPos'' you obtaion file ''kmaxs.dat'' with following structure: | ||

Line 98: | Line 98: | ||

where ''Ei'' is eigenvalue of the MO, (imax,jmax,kmax) is index of position of maximum inside the grid, ''ValMax'' is value of projection in the maximum, and (rimax,rjmax,rkmax) are coordinates of the maximum in multiples of reciprocal lattice vector. | where ''Ei'' is eigenvalue of the MO, (imax,jmax,kmax) is index of position of maximum inside the grid, ''ValMax'' is value of projection in the maximum, and (rimax,rjmax,rkmax) are coordinates of the maximum in multiples of reciprocal lattice vector. | ||

- | |||

- | |||

''ksamples.dat'' | ''ksamples.dat'' | ||

Line 112: | Line 110: | ||

==== 1D cuts of Fuzzy Band Structure ==== | ==== 1D cuts of Fuzzy Band Structure ==== | ||

+ | |||

+ | To evaluate band structure projections densly sampled along particular 1D hi-symmetry lines in reciprocal space, you have to again set 'iwrtewf = 1' as in previous case but with option 'iewform = 6'. So the 'fireball.in' file looks eg. like this: | ||

''fireball.in'' | ''fireball.in'' | ||

Line 128: | Line 128: | ||

iewform = 6 | iewform = 6 | ||

&END | &END | ||

+ | |||

+ | In addition you have to provide file ''kscan.optional'' which contains information about the 1D cut directions. In principle it is possible take 1D cuts in arbitrary direction in k-space independent of the crystal symmetry. However, usually it make sense to respect crystal symmetry, and sample all the equivalent lines. In this particular example we choose all equivalent lines which conect the point X and Gamma in 2'nd reciprocal unit cell of silicon lattice. There is 48 such directions. Each of this lines is sampled by 100 equidistant k-points. And we choose to project all molecular orbitals in energy range from -8.000 to 1.000 eV. The example ''kscan.optional'' then look like this: | ||

''kscan.optional'' | ''kscan.optional'' | ||

1 # byEnerg | 1 # byEnerg | ||

- | -8.0000 1.0000 # Emin Emax | + | -8.0000 1.0000 # Emin Emax |

5.50 # alat | 5.50 # alat | ||

48 100 # nlines nkpoints | 48 100 # nlines nkpoints | ||

Line 183: | Line 185: | ||

-1.0 -1.0 -1.0 -1.0 0.0 -1.0 | -1.0 -1.0 -1.0 -1.0 0.0 -1.0 | ||

-1.0 -1.0 -1.0 -1.0 -1.0 0.0 | -1.0 -1.0 -1.0 -1.0 -1.0 0.0 | ||

+ | |||

+ | === Output === | ||

+ | |||

+ | Two kinds of outputfiles are produced. ''klines_XXXXX.dat'' is producet for each molecular orbital, and in addition ''klines_TOT.dat'' summarize results for all orbitals together. In the ''klines_XXXXX.dat'' files the raw projection along each lines are written separately in colmuns (each row is different k-sample along the line, each column is different line). The format looks like this: | ||

''klines_XXXXX.dat'' | ''klines_XXXXX.dat'' | ||

Line 190: | Line 196: | ||

3 389.17880205 389.77130848 387.81208053 388.10778349 306.53352273 ... | 3 389.17880205 389.77130848 387.81208053 388.10778349 306.53352273 ... | ||

... | ... | ||

+ | |||

+ | Contrarly, in ''klines_TOT.dat'' each row correspond to one molecular orbital (ordered by energy), the first column is the orbital energy eigenvalue, and in columns are projections corresponding to each k-sample along the line, [[https://en.wikipedia.org/wiki/Aggregate_function|aggreated]] (reduced) over all lines. In current implementation maximum over each line is used for aggregation (but it would make sense also to use summation). Naturally, this aggregated post processed information make sense only if all k-lines are equivalent. | ||

''klines_TOT.dat'' | ''klines_TOT.dat'' | ||

Line 200: | Line 208: | ||

-7.96729 262.72449682 269.69434762 274.26597685 275.89514172 285.23659456 ... | -7.96729 262.72449682 269.69434762 274.26597685 275.89514172 285.23659456 ... | ||

... | ... | ||

+ | |||

+ | The file ''klines_TOT.dat'' is supposed to be used as a quick overview of the whole bandstructure, but detailed information should be read directly from ''klines_XXXXX.dat''. Note that even though in bulk material (e.g. bulk silicon) all k-lines can be equivalent due to the symmetry of the lattice, this symmetry is usually not conserved in case of finite nanocrystal with some surface passivation. For this reason the value of projection may be quite different for different k-lines, which would be equivalent from lattice symmetry point of view. An other reason why the symmetric k-lines may not be equivalenet is that there are several symmetry degenerated states, and eingenvalue solver choose some arbitrary linear combination of these eingenvectors diregarding the symmetry. | ||

=== plotting results === | === plotting results === | ||

+ | |||

+ | For easy and quick plotting of results from 'klines_TOT.dat' file you may use this simple python. To make it work you will need installed [[http://wiki.scipy.org/PyLab|pylab]] | ||

#!/usr/bin/python | #!/usr/bin/python |

Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported