Internet & Technology

explains the output of a self-consistent calculation, and how to create energy bands and density-of-states

Description
FP tutorial (v6.11) This tutorial uses the Al input file ctrl.al found in directory `doc/fp/samples.' (Output files are also in this directory.) It assumes you have read the FP documentation and the ASA
Published
of 9
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Related Documents
Share
Transcript
FP tutorial (v6.11) This tutorial uses the Al input file ctrl.al found in directory `doc/fp/samples.' (Output files are also in this directory.) It assumes you have read the FP documentation and the ASA documentation. Other useful illustrations of program features not found in this tutorial can be found by invoking fp/testing/test.fp, as described at the bottom of this page. It is also helpful to go through the ASA tutorial first. To follow this tutorial, start in the top-level directory. (It is assumed that the executables lmfa, lmf, and lmchk are in your path.) This sample helps you create a complete input file for elemental Al, including optimizing the parameters for the basis set. The file is then used to compute a shear constant. You may choose to create some or all of your own input file from scratch; or you can just copy file doc/fpsamples/ctrl.al to the top-level directory. The tutorial does the following: describes how to build the input file, building it by categories outlines a simple procedure to optimize the basis set explains the output of a self-consistent calculation, and how to create energy bands and density-of-states Shows how to compute shear constants c11-c12 and c44 in Al. First, we explain how the input file doc/fpsamples/ctrl.al would be built. create category VERS. It is required, but is merely used to check version control. (optional) create category HEADER (for documentation written to the output file) and IO, which controls how much and what kind of information is printed out Set up the crystal structure, categories STRUC and SITE. Al is fcc, with a lattice constant a.u. at 0K. The input file could have read STRUC ALAT=7.606 but instead this file declares a symbolic variable a in the CONST category and uses STRUC ALAT=a See input-file-style.txt for a discussion of CONST. Knowledge of the crystal structure defines ALAT= and PLAT= in STRUC and the atom position in SITE (with one atom per cell, the position irrelevant). You must also specify NBAS= and NSPEC= in STRUC. In the SITE category each species label (following ATOM=) must match label in the SPEC category, described below. create the HAM category. Most important here is the GMAX= token specifying the mesh of points for the interstitial density. This number is important because execution efficiency deps critically on it (though for one atom/cell, efficiency isn't important). You must specify one of GMAX= or FTMESH=. lmf first looks for GMAX=; if it isn't found, FTMESH is sought. In input file doc/fpsamples/ctrl.al both are specified, but only GMAX= is used since it is sought first. It turns out that both modes will specify a mesh FTMESH= Create the OPTIONS category. Of note here is the HF={hf} token. hf is a preprocessor variable which in the absence of command-line overrides, will assumes value 0 by virtue of the preprocessor directive % const hf=f See input-file-style.txt and file-preprocessor.txt for discussion of the preprocessor. This switch enables us to specify with a command-line switch (-vhf=1) to make non self-consistent calculations, just evaluating the Harris-Foulkes total energy. We will use this feature to optimize the basis set (see discussion of basis optimization below). create the BZ category. Note the following: 1. Tokens NKABC= and BJOB= completely specify the k-points to be used Tokens SAVDOS=, NPTS=, and DOS= specify that the total DOS is to be created each time the Fermi level is determined, and the window it is created for. Token N.W=.002 EF0=0 DELEF=.1 are only relevant for sampling, so they aren't used in this tutorial, which uses tetrahedron integration (TETRA=t). 4. when HF=t, we also use NEVMX=-1, to suppress generation of the output density. This construct % ifdef hf NEVMX=-1 % if causes the preprocessor to include the line `NEVMX=-1' in the input file only when hf is nonzero. 5. We choose METAL=2; see BZ documentation. create the MIX category. As in the ASA, there is no good general prescription for the MODE line. FP ts to get finicky with Broyden mixing. Using the FP code, MIX is best used in conjunction with ELIND; see discussion of ELIND= token in the fp HAM documentation. Tokens CONV= and CONVC= are the convergence criteria in energy and charge, respectively. In the sample doc/fpsamples/ctrl.al both were set to very strict values, because the shear constant which we are going to calculate involves very small energy changes. The START category is used only to read the number of iterations NIT=. The EWALD category is optional is included here only for pedagogical purposes. Set up the SPEC category. See SPEC in the ASA tutorial for a discussion of the choice MT radius. In the present case, we choose RMT=0.91*avw (avw=space-filling radius appropriate to the ASA). This makes sphere overlaps ~0.6%, as can be verified with lmchk. The principal complication in this category is that we also must choose a basis set. We will choose initially a minimal basis, and it is defined in the following lines % const rsm1=1.8 rsmd1=1.8 ed1=-.1 RSMH={rsm1},{rsm1},{rsmd1} EH=-.1,-.1,{ed1} by writing it this way, we can systematically vary and thus optimize the parameters of the basis set. This completes the creation of the input file, except in last step we just took a guess at the selection of basis set. We are ready to optimize the basis, but we'll start with lmchk just to verify some things. Invoke lmchk to check sphere overlaps. First, just to verify that the preprocessor works as advertised, try lmchk al --showp For example, the line containing RSMH= (shown above) should have been turned into RSMH=1.8,1.8,1.8 EH=-.1,-.1,-.1 Now invoke lmchk al and verify from the output that the sphere overlaps about 0.6% (a very safe number) and that sum-of-sphere volumes equals about 75% of the total. That is a pretty large packing fraction, which lmf can handle easily. Invoke lmfa to generate the self-consistent free atom densities. lmfa al The output was doctored slightly to incorporate some hyperlinks. File `atm.al' contains the representation of the density. Note the following points: 1. The FA density is represented inside the MT spheres on a radial mesh, as in the ASA. The density for R MT radius was fit to a linear combination of smoothed Hankels, with smoothing radius specified by SPEC RSMFA=; The coefficients are stored in file atm and also printed to the standard output Additionally the core was allowed to spill into the interstitial, and the core tails were fit to a single smoothed Hankel with smoothing radius specified by RFOCA=, and whose energy was determined by the program. See this output. lmfa numerically determined the optimum shapes for the sm-hankel envelopes (RSMH,EH) by minimizing the total energy with respect to these coefficients. This can be a useful starting point for optimizing the basis. lmfa computes the free atom total energy. This is a useful quantity when computing the heat of formation of a crystal from the free-atom constituents. Caution: The proper reference energy must be computed for the spin polarized case. The reference EREF (token EFRE=) and shown there was computed spin polarized, and the difference in energy shown is the spin polarization energy of the free atom. Invoke lmf in a non self-consistent mode to determine a good basis for the crystal. See fp.html for a discussion of some general rules, which we will follow here. The input file has three preprocessor variables (rsm1, rsmd1, ed1) for which we will optimize by using the variational principle and minimizing the (non self-consistent) total energy. This choice of parameters was not arbitrary: usually for shallow states the optimum energy is actually slightly positive. But for numerical reasons we are not allowed to choose a number zero or greater, we just choose EH=-0.1. If we were dealing with an atom with a deep s state like O or even As, it would make sense to optimize EH on the s orbital; the same applies to transition metal d orbital or semiconductor d levels kept in the valence. Also, particularly for transition metals, it is best to treat the d state indepently, it is particularly important that the TM d smoothing radius be properly chosen. The d states for most transition metals are pretty atomic-like, and the free atom smoothing radius lmfa finds generally is quite close to the optimum one. (In the Al lmfa wasn't able to find RSMH and EH for the d it was not populated with any electrons in that state. The total energy is therefore indepent of the free-atom d orbital shape.) Similarly, in crystalline Al atom the energy will not dep strongly on the d orbital shape. However, we perform the minimization wrt to RSMH(d) and EH(d) because that is what you would do for a transition metal, or a deep s or p orbital. The following the minimization steps are set up for csh or tcsh. While there are fancier techniques available, this is is simple. We start by minimizing the sp RSMH (lumping s and p together) numerically with the following: rm -f save.al out foreach x ( ) lmf -vhf=1 -vnk=6 -vrsm1=$x al out We use just a few k-points, because the minimization is not sensitive to fine details of the band structure. File `save.al' should look like this: h hf=1 nk=6 rsm1=1.2 ehf= ehk= h hf=1 nk=6 rsm1=1.4 ehf= ehk= h hf=1 nk=6 rsm1=1.6 ehf= ehk= h hf=1 nk=6 rsm1=1.8 ehf= ehk= h hf=1 nk=6 rsm1=2 ehf= ehk= h hf=1 nk=6 rsm1=2.2 ehf= ehk= Note that any variables specified on the command-line are passed to the `save' file. Extract ehf as a function of rsm1 using shell script startup/vextract cat save.al startup/vextract h rsm1 ehf and use your favorite fitting program (or just look by eye) to determine that the minimum energy corresponds to rsm1=1.8. You would now adjust %const line in the input file and change whatever value rsm1 had to rsm1=1.8. It turns out that it is already 1.8. Now minimize wrt the Al d smoothing radius: rm -f save.al out foreach x ( ) lmf -vhf=1 -vnk=6 -vrsmd1=$x al out cat save.al startup/vextract h rsmd1 ehf shows that the minimum occurs near rsmd1=1.7, which is close enough to 1.8 to just set all of the rsm parameters to 1.8. Next, minimize wrt ed1: rm -f save.al out foreach x ( ) lmf -vhf=1 -vnk=6 -ved1=$x al out cat save.al startup/vextract h ed1 ehf The energy is minimum near -0.6 Ry but is only weakly sensitive to ed1. Thus we just assign -0.1 to it as well. Then all three orbitals have the same parameters, which improves efficiency. Of course we can repeat this cycle, optimizing rsm1, rsmd1, ed1 a second time, but it isn't necessary here. We might consider enlarging the basis, which we can do by adding tokens RSMH2= and EH2. Here we just add a p orbital and see what happens. The input file has lines %ifdef bigbas % const rsm2=1.8 RSMH2=0,{rsm2} EH2=-1,-1 %if which up until now have been skipped over by the preprocessor because variable bigbas never defined (an invalid expression evaluates to zero in an `%ifdef' construct). Setting RSM=0 for the s orbital has the effect of excluding it from the basis; ditto for the d orbital. Now we run lmf for a larger basis: rm -f save.al out foreach x ( ) lmf -vhf=1 -vnk=6 -vrsm2=$x -vbigbas=t al out cat save.al startup/vextract h rsm2 ehf The total energy only goes down by 1mRy or so (not much), also note that it is extremely insensitive to the choice of rsm. So, in this case, the larger basis isn't important, and we are going to ignore it. Invoke lmf to generate a self-consistent potential: lmf al Note the following points in the output file (it was doctored slightly to incorporate some hyperlinks) 1. The first stages of the output (symmetry group, k-points) follow the ASA tutorial. 2. Next follows a table of important species data. It is advisable to pay some attention to these parameters, as they can affect the results. The choice of rmt was mentioned previously and is discussed in the ASA tutorial. The augmentation l-cutoff lmxa can be set very low in this FP program, because of the special way augmentation is done; see the postscript file describing this method. You can experiment with it by increasing lmxa to 3 or 4. For transition metals, lmxa=3 is a little safer. See the FP documentation for a discussion of augmentation smoothing radius rsma, and the polynomial cutoff kmxa connected with it. Although the density l-cutoff lmxl is distinct from lmxa, usually you just set lmxl=lmxa; if you don't specify it, that's what the default will be. Parameter rg corresponds to token RSMG=. Parameters rsmv and kmxv are not usually of interest. foca corresponds to token LFOCA=. LFOCA=1 is safest; LFOCA=2 is a perturbative approximation and is more efficient, and corresponds approximately to the nonlinear core correction common in pseudopotential programs. The difference can be important if the atom has shallow core states. In this case, choosing LFOCA=1 or 2 changes the total energy by less than 1e-6 Ry. For either choice of lfoca there is a corresponding smoothing radius rfoca, specified by RFOCA=. Choosing rfoca large degrades the quality of fit of the core density, which in turn will affect the total energy somewhat; for example it will create some depence of the total energy on choice of MT radius. Choosing rfoca more sharply peaks the (smoothed) core density, and puts greater demands on the quality of the interstitial mesh density, which slows down the calculation. Next follows the setting of the mesh density which you do by one of the tokens GMAX= or FTMESH= in HAM. Finer meshes are more accurate, but the computation time scales in proportion to the total number of points. This particular choice of gmax=7 is extremely conservative: a.u. generated 10 x 10 x 10 divisions, or 609 G vectors. Shortly below ``sugcut'' a table is displayed showing how many G vectors are needed for each orbital to be converged with the specified tolerance (you specify tolerance with TOL=). It is evident from the table that the most G vectors any orbital needs is less than 200, far less than the 609 possible with gmax=7. In this case, reducing gmax to as low as 4 reduces the maximum number of G vectors to 113, and changes the total energy by a very modest ~1e-5 Ry. The lines connected with ``Makidx'' show the dimensions of the total hamiltonian. In the present FP context, the orbitals are not screened, and the only meaningful number is the `Low' dimension. Here we have the usual spd set of 9 orbitals. Next lmf looks for an input density. It can start from free-atom files or from a restart file. Unless you specify with command-line switch --rs=, lmf will: try to read from (binary) restart file rst. If this fails, it attempts to read the free-atom file and create a density by overlapping free-atom charges. In the present case, no restart file has been created, so the input density was generated by overlapping free-atom charges. Next lmf begins the iterations cycle. First the interstitial potential is created, followed by local potentials and potential parameters for over each site in the lattice (there is only one site in this example). Next follows a table summarizing the charge, magnetic moment (in the spin polarized case) and all parameters needed to compute the total energy, except the eigenvalue sum, which it determines after a band pass. Next follows the Brillouin zone integration over k-points. Because the input file chose tetrahedron integration with METAL=2, lmf tries to read k-point weights from the `wkp' file, so that it can use those weights for the present band pass. Since the file doesn't have the right number of k-points, lmf makes a special band pass to create the weights. USE METAL=3 if you want lmf to create the weights every band pass. This is safer, because there is a guaranteed connection between the weights and the eigenvalues, but slower because two passes are required each iteration. The determination of the Fermi level proceeds in the same way as in the ASA; see the ASA tutorial for a discussion of tetrahedron integration Next the output density is generated. With the output density, the HKS energy functional can be evaluated. Also the log derivative parameters P are floated to the band centers-of-gravity. How the P's are floated is prescribed by tokens IDMOD=; there is a corresponding ASA counterpart discussed in the ASA overview. A new density is constructed as follows: The output density is screened using the model Lindhard function, provided the Lindhard parameter ELIND= is nonzero: nout* = nin + eps^-1 (nout-nin) An estimate for the self-consistent density is made by mixing nin and nout* using some mixing scheme The resultant density is saved in the restart file, unless you specify otherwise using --rs=. An the of the iteration, the total energies are printed and checks are made whether self-consistency is achieved to tolerances specified by tokens CONV= and CONVC=. RMS DQ generated at the mixing step is the measure compared against tolerance CONVC=; the change in energy from one iteration to the next is the tested against tolerance CONV=. Both tolerances must be satisfied. Since only one iteration has been completed so far, there is no way to test the CONV= criterion, and no tests are made. lmf proceeds without checks to the second iteration; at the of iteration 2 and subsequent iterations checks are made. Because Al is rather well approximated by free electron gas, the Lindhard function is an excellent approximation to the true dielectric function, and the iterations converge extremely rapidly to self-consistency. However, because the tolerances were set very small, five iterations are required to achieve self-consistency. Note that the first iteration HF energy is more binding than the self-consistent energy, while the first iteration HK energy is less so. The latter should always be true, owing to the variational principle; the HF need not be (but usually is) deeper than the self-consistent total energy. At self-consistency the HK and HF energies should be nearly identical. The lines h ehf= ehk= i ehf= ehk= i ehf= ehk= i ehf= ehk= c ehf= ehk= are the same as those written to the save file. We used this file in extracting total energies when optimizing the basis set. The first character `h' marks this iteration as one computed by overlapping free-atom densities; iteration `c' marks the self-consistent energy. This is useful when trying to extract energies of a certain type from the save file. Script `vextract' expects a key as its first augment, which enables you to extract, e.g., only lines beginning with `c'. 14. You can generate and plot the energy bands using lmf. It proceeds in the same way as in the ASA tutorial except that you generate the band file by cp startup/syml.fcc./syml.al lmf al --band:fn=syml in place of lm si --band:fn=syml 15. To compute EELS spectra or Mulliken analysis in Fe, try running fp/test/test.fp fe 2 To compute total or partial DOS in hcp Co, try running fp/test/test.fp co 2 The generation of the EELS, Mulliken analysis or DOS is done first by invoking lmf with the appropriate command-line switch, followed by lmdos. The lmdos step is illustrated (including a way to plot results) in the ASA tutorial. This completes the generation of a self-consistent potential in Al. Now we proceed to compute the shear constant c11-c12, which we will do may computing the total energy at different lattice distortions, and fitting the curvature of the total energy. The tetragonal distortion is conveniently generated using the line SHEAR= dist which distorts the lattice in a way that conserves volume to all orders (this is useful because it ts to be less error-prone). The direction of distortion is set by the first three parameters; the lattice will be sheared along (001). The first difficulty is that our specification of the FT mesh using token GMAX= may cause the program to switch meshes for as parameter dist changes. This is a bad idea, since we want to resolve very small energy differences. So, the first step is to comment out the line with token GMAX=gmax
Search
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks