To start the impurity program, you should first prepare the initial potential. The information for preparing such a potential you can find in the "impurity.coefs" file, and the utility program 'potutil.f' will help you to do that. This small FORTRAN file is usually placed in the /util subdirectory of the directory where you keep your SKKR-package. You should compile the 'potutil.f' file using simply the g77 compiler, and should run the executable file in your working directory. Copy the self-consistent potential of your reference system into the working directory. After running the utility program, you should refer to the "impurity.coefs" file for the correct input information, which will be asked by the utility program. In our example of the impurity on the Cu (111)-surface, the "impurity.coefs" contains the following data:
...
Position of Impurity Host Imp Shell Dist Host id in Bulk
0.00000000 | 0.00000000 | 0.00000000 | 2 | 1 | 1 | 0.000000 | 3 |
0.20412415 | -0.35355339 | -0.57735027 | 1 | 2 | 2 | 0.707107 | 2 |
-0.40824829 | 0.00000000 | -0.57735027 | 1 | 3 | 3 | 0.707107 | 2 |
0.20412415 | 0.35355339 | -0.57735027 | 1 | 4 | 4 | 0.707107 | 2 |
0.00000000 | -0.70710678 | 0.00000000 | 2 | 5 | 5 | 0.707107 | 3 |
-0.61237244 | -0.35355339 | 0.00000000 | 2 | 6 | 6 | 0.707107 | 3 |
0.61237244 | -0.35355339 | 0.00000000 | 2 | 7 | 7 | 0.707107 | 3 |
-0.61237244 | 0.35355339 | 0.00000000 | 2 | 8 | 8 | 0.707107 | 3 |
0.61237244 | 0.35355339 | 0.00000000 | 2 | 9 | 9 | 0.707107 | 3 |
0.00000000 | 0.70710678 | 0.00000000 | 2 | 10 | 10 | 0.707107 | 3 |
-0.20412415 | -0.35355339 | 0.57735027 | 3 | 11 | 11 | 0.707107 | 4 |
0.40824829 | -0.00000000 | 0.57735027 | 3 | 12 | 12 | 0.707107 | 4 |
-0.20412415 | 0.35355339 | 0.57735027 | 3 | 13 | 13 | 0.707107 | 4 |
-0.40824829 | -0.70710678 | -0.57735027 | 1 | 14 | 14 | 1.000000 | 2 |
0.81649658 | 0.00000000 | -0.57735027 | 1 | 15 | 15 | 1.000000 | 2 |
-0.40824829 | 0.70710678 | -0.57735027 | 1 | 16 | 16 | 1.000000 | 2 |
0.40824829 | -0.70710678 | 0.57735027 | 3 | 17 | 17 | 1.000000 | 4 |
-0.81649658 | -0.00000000 | 0.57735027 | 3 | 18 | 18 | 1.000000 | 4 |
0.40824829 | 0.70710678 | 0.57735027 | 3 | 19 | 19 | 1.000000 | 4 |
304 354
1
Host order, no of host sites: 3
2 3 4
...
You see, that 3 host sites with id-numbers 2, 3 and 4 should be used to produce the potential of the host, therefore the total number of sites for the output potential is for this example. You can then choose the number of spins (1 or 2) for your potential. Then you input the order of atoms for the output potential in the following way: first must be the host sites in the order like they are given in the "impurity.coefs" file, e.g., 2, 3 and 4 for our example; then you input one by one the "host id-numbers in the bulk" (last column in the "impurity.coefs" file), e.g, 3, 2, 2, 2, 3, .... (see the table above). The output file with initial potential has the name "composed.potent". Then you can cut out from the "composed.potent" file the potentials for some atoms belonging to the impurity cluster and replace them by potentials of your impurities, which you can obtain either from the 'voronoi' program (jellium potentials) or from the bulk calculation for impurity atoms.
In your SKKR-package directory you have the subdirectory usually called /impurity with the impurity program. You should recompile (i.e., running make command) the impurity program before you start a calculation for the new system, pointing out yours attention on the parameters in the "parameters.file". The parameters you must care of before compilation are: NTREFD - the number of host sites (=3 for our example), NATOMD - the number of sites in the impurity cluster (=19 for our example), NSPIND - number of spins (1 or 2), IEMXD must be larger, than the total number NPT1 + NPT2 + NPT3 + NPOL of points on the energy contour in the complex energy plane, NSEC is the dimension of the structural Green's function matrix [ for our example], the value of this parameter can be found in the "impurity.coefs" file), LMAXD is cutoff, and other parameters you usually do not have to change. The executable file name of the impurity program is "kkrimp.exe".
To start the calculation, you need to prepare a file with input parameters, say, call this file "input.imp". Then you should run the impurity program in you working directory from the command line typing
./kkrimp.exe < input.imp > res.dat
where the "res.dat" (or any other name) is the output file. The example of the input file for the case of impurity on Cu (111)-surface is given below:
green
potential.file
lebedevascii.gga
bcoefs
impurity.coefs
shapefun
madelung
0 | 12 | 0 | 0 | iresist,ifile,ipe,iwtmat | ||||
2 | 353 | 0 | 0 | nspin,irm,ins,icst | ||||
2 | 0 | 2 | 0 | 0 | 0 | 2 | kcor,kvrel,kws,khyp,khfeld,kfsr,kxc | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | kte,kpre,ksph,kefg,kvmad,kf,igga | |
3 | 19 | 0 | 0 | natref,natper,icut,kshape | ||||
2 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | (iref(i),i=1,natper) |
2 | 2 | 3 | 3 | 3 | 1 | 1 | 1 | (iref(i),i=1,natper) |
3 | 3 | 3 | (iref(i),i=1,natper) | |||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | (ntcell(i),i=1,natyp) |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | (ntcell(i),i=1,natyp) |
1 | 1 | 1 | 1 | 1 | 1 | (ntcell(i),i=1,natyp) | ||
100 | 5 | 000 | itclst,imix,ief(for real e) |
0.0050 | 20.000 | 1.d-6 | strmixing,fcm,qbound |
0.0150 | 0.0000000 | 0.0000000 | brymix,ef(1),ef(2) |
0.0000 | 0.7384277 | 0.0000000 | hfield,vbcc,vconst |
0 0 0 0 0 klatr,ksymm,lkonv,ksymmat,kesym
Pay attention, that this input file is prepared for the formatted input, so do not change the format of this file, do not add extra spacings, and so on. It would be better if you make your input file from the input file that you can get from the previous calculations. The "potential.file" (or any other name) is the file with the initial potential, that you have prepared. The program starts the iterations using this file and saves the current potential to the file "fort.11" after each iteration. You should also have in your working directory the files "green", "impurity.coefs" and "lebedevascii.gga".
You can easily then recognize the parameters nspin, irm, ins, icst, kcor, kvrel, etc., that are the same as parameters in the inputcard for the 'tb-kkr' program. Parameter natref is the number of host sites (=3 in our example), natper is the number of sites in the "impurity" cluster (=19 in our example), natyp = natref + natper. The id-numbers in the cycle (iref(i),i=1,natper) should be the numbers from the 4-th column (called 'Host') of the "impurity.coefs" file (see the example above). The following lines [the cycle (iref(i),i=1,natyp)] should contain natyp units ("1"). Then, itclst is the number of iterations, imix is a type of the mixing scheme ("0" for simple mixing, "5" for Anderson scheme, etc.), qbound is the required convergence quality, strmixing and brymix are parameters for mixing scheme. The vbcc is the "MT-zero" value, it should be taken from the potential file of the host.
After you get the self-consistent potential, you can make one iteration of the impurity program in order to obtain the DOS files for all atoms in the cluster. Before that, you should first do one iteration of the 'tb-kkr' program with energy mesh along the real axis and get the new "green" file. Then recompile the impurity program, paying attention to the fact, that parameter IEMXD must be large enough in the "parameters.file". In the input file for 'impkkr.exe' program set itclst = 1 and ief = 1. After one iteration you will get the files with names "dos.ipotXXX" with up- and down-spin DOS for all atoms of the impurity cluster. The columns in the output files are energy, then -decomposion of the DOS (s,p,d,f, ...), then -decomposition of the DOS for every .