|
|
###### Perform impurity calculations {#perform_impurity_calculations}
|
|
|
|
|
|
#### Writeout of Green function and \$t\$-matrix from host code {#writeout_of_green_function_and_t_matrix_from_host_code}
|
|
|
|
|
|
To write out the host's structural Green function
|
|
|
\$\\underline{\\underline{G}}\_{\\mathrm{host}}\^{nn'}(E)\$ choose an
|
|
|
appropriate energy contour in your calculation of the host system (scf
|
|
|
or DOS contour for scf or DOS calculation in impurity case). Then choose
|
|
|
a single iteration (*NSTEPS=1*), set the *RUNOPT KKRFLEX* ((make sure to
|
|
|
include this in the correct format as described in [List of inputcard
|
|
|
keywords](jumu:inputcard_codewords "wikilink"))). Finally you have to
|
|
|
provide information about the impurity cluster. Here you have to
|
|
|
construct the file called scoef that contains in the first line the
|
|
|
number of sites in the impurity cluster, and in the following lines the
|
|
|
x, y, z atoms coordinates, centered around the impurity position in
|
|
|
cartesian units. The fourth column corresponds to the layer number of
|
|
|
the host system. This file can be very easily constructed from the
|
|
|
clusters file which is written out in the host code.
|
|
|
|
|
|
#### Step-by-step recipe {#step_by_step_recipe}
|
|
|
|
|
|
A step-by-step calculation for embedding an impurity into a slab system
|
|
|
is given below. Here a thin film of Cu(111) with 4 layers is considered
|
|
|
in lmax=3 as the host system. The impurity is a self-adatom on the
|
|
|
surface (i.e. subsituional in the first vacuum layer). The following
|
|
|
steps have to be done in a typical calculation: ((These steps are quite
|
|
|
compelling, specially doing them in separate folders. However this steps
|
|
|
separation allows to reuse easily the host\_in\_host files for different
|
|
|
kind of impurities lying in a same site.))
|
|
|
|
|
|
### Preparing the system and first steps {#preparing_the_system_and_first_steps}
|
|
|
|
|
|
` - Converge the host system, in a folder __**sfc**__.On the example below, the test system consists of a thin film (4 layers) of Cu(111).`\
|
|
|
` - Create the folder __**kkrflex**__ and copy on it (from the **__sfc__** folder) the following files: `*`inputcard`*`, `*`shapefun`*`, `*`potential`*`, `*`clusters`*`, `*`kkr.x`*\
|
|
|
` - Write out the Green function and $t$-matrix (`[`kkrflex_*-files`](kkrimp:kkrflex_files "wikilink")`) for scf-contour`\
|
|
|
` - Change inputcard`\
|
|
|
` - add the `*`RUNOPT`*` `*`KKRFLEX`*` ((In the case were the self-consistency was done with the `*`RUNOPT`*` `*`LLOYD`*`, this option should be conserved in the following steps. Otherwise the rms-error will be enormous.))`\
|
|
|
` - `*`NSTEPS=1`*\
|
|
|
` - Create `*`scoef`*` file`\
|
|
|
` - Open the cluster file. ((In the new versions, this file is written out automatically during the convergence of the system))`\
|
|
|
` - Select the site on which it is desired to set the impurity. Then select N+1 lines, if N is the number of atoms in your impurity cluster. ((The scattering center at (0.,0.,0.) is the impurity site itself))`\
|
|
|
` - See example below for updated inputcard and the created `[`scoef`](jumu:scoef_file "wikilink")` file. On the example, the selected site is the **3**, and we want __12__ additional atoms in the impurity cluster. So we should copy __13__ lines under '**3** 1' (at line 101) from the cluster file to the scoef file.`\
|
|
|
` - Run one iteration : `*`mpirun`` ``-np`` ``10`` ``kkr.x`*
|
|
|
|
|
|
### Converge the host-in-host system {#converge_the_host_in_host_system}
|
|
|
|
|
|
This steps aims to perform a test which allows to check the setup. For
|
|
|
doing so an impurity calculation is performed using the already
|
|
|
converged potentials from the host system. Later on some parts of this
|
|
|
setup will be used to set up the real impurity calculations.
|
|
|
|
|
|
` - Create the folder __**host_in_host**__ and copy on it (from the __**kkrflex**__ folder) the following files : `[`kkrflex*`` ``files`](kkrimp:kkrflex_files "wikilink")`, `[`scoef`](jumu:scoef_file "wikilink")`, `*`potential`*`, `*`shapefun`*`, `*`inputcard`*`.((Some ofthese files can be quite big. So creating links might be the better idea: e.g. `*`ln`` ``-s`` ``../kkrflex/kkrflex_*`` ``.`*` However `*`potential`*` and `*`shapefunction`*` files should be copied since they will be overwritten in later steps.))`\
|
|
|
` - Download the `[`kkrimpurity`` ``code`](https://iffgit.fz-juelich.de/groups/kkr "wikilink")` and after setting the good environment parameters, compile it. A `*`kkrflex.exe`*` file should be written out. Copy this file to __**host_in_host**__.`\
|
|
|
` - Check files by doing host-in-host calculation`\
|
|
|
` - Set up `[`config.cfg`](kkrimp:config_file "wikilink")` and choose the same parameters for solver, accuracy etc. as in host code.`\
|
|
|
` - Create impurity potential and shapefunction using the `[`modify`` ``potential`` ``script`](kkrimp:modifypotential.py "wikilink")`((See below in paragraph "How to use the modifypotential.py")). Don't forget to rename `*`shapefun_new`*` -> `*`shapefun`*` and `*`potential_new`*` -> `*`potential`*`.`\
|
|
|
` - Run a single iteration (e.g. `*`mpirun`` ``-np`` ``10`` ``kkrflex.exe`*`) and check if RMS-error is sufficiently low.`
|
|
|
|
|
|
### Converge the impurity system {#converge_the_impurity_system}
|
|
|
|
|
|
` - Create the folder __**imp**__.`\
|
|
|
` - __Case 1__ (the easiest) : The impurity is an atom from the host system (Intrinsic impurities)`\
|
|
|
` - Construct the impurity potential from the converged system potential and the potential in the __**host_in_host**__ folder. For doing so the `[`modify`` ``potential`` ``script`](kkrimp:modifypotential.py "wikilink")` should be used and some basic unix commands. **In the following steps the original potential files((i.e. scf/potential, host_in_host/potential, ...)) should not be modified**.`\
|
|
|
` - From __**sfc**__/`*`potential`*` keep only the potential corresponding to the desired impurity and delete all the others potentials. Rename the output potential pot1.`\
|
|
|
` - From __**host_in_host**__/`*`potential`*` delete the first potential. Rename the output potential `*`pot2`*`.`\
|
|
|
` - Paste __**sfc**__/pot1 in __**host_in_host**__.`\
|
|
|
` - Go to __**host_in_host**__ and execute the command `*`cat`` ``pot1`` ``pot2`` ``>`` ``potential`*`.`\
|
|
|
` - Modify the file `*`kkrflex_atominfo`*`, changing the ZATOM of the first atom with the ZATOM of the desired impurity in the 4th column.`\
|
|
|
` - Do the self-consistency calculation of the impurity:`\
|
|
|
` - Change `[`config.cfg`](kkrimp:config_file "wikilink")` (Don't forget to change the number of steps) ((In the case of magnetic impurities one have to set an "initial" weak magnetic field during the first iterations, in order to enhance the magnetisation. For example we can set `*`HFIELD=**0.020**`` ``__10__`*` which means that a magnetic field of **0.020**, will be set only in the first __10__ iterations, then it will come back to 0))`\
|
|
|
` - Execute `*`mpirun`` ``-np`` ``10`` ``kkrflex.exe`*\
|
|
|
` - __Case 2__ : The impurity is not an atom from the host system (Extrinsic impurities)`\
|
|
|
` - Create a new `*`inputcard`*` corresponding to the system with the impurity. Then generate a starting potential using the `[`voronoi`](voronoi:voronoi_program "wikilink")` code, as it is done for the usual setup.`\
|
|
|
` - Then follow the same steps as in the __Case 1__ of combinig the starting potential for the impurity with the rest of the impurity cluster taken from the host_in_host calculation.`
|
|
|
|
|
|
#### Post-processing {#post_processing}
|
|
|
|
|
|
` - Post-processing, e.g. impurity DOS`\
|
|
|
` - create `[`kkrflex_*`](kkrimp:kkrflex_files "wikilink")` files for DOS energy contour`\
|
|
|
` - run a single iteration using the converged impurity potential and the DOS `[`kkrflex_*`](kkrimp:kkrflex_files "wikilink")` files`\
|
|
|
` - plot the impurity DOS as seen below `
|
|
|
|
|
|
{{ :kkrimp:cu\_cu111\_dos.png?500 \|}}
|
|
|
|
|
|
{{ :kkrimp:step\_by\_step\_cu\_cu111.tar.gz \|Here the example can be
|
|
|
downloaded}}. It containes the following directories: *scf* with the
|
|
|
converged potential etc for the host system, *kkrflex* for the writeout
|
|
|
of the kkrflex\_\*files in the scf contour, *host\_in\_host* for the
|
|
|
host-in-host check, *imp* for the Cu-adatom scf calculation,
|
|
|
*kkrflex\_dos* for the writeout of DOS contour files, and *impdos* for
|
|
|
the DOS calculation of the impurity.
|
|
|
|
|
|
#### How to use the modifypotential.py {#how_to_use_the_modifypotential.py}
|
|
|
|
|
|
potential file {#potential_file}
|
|
|
--------------
|
|
|
|
|
|
` - __Case 1__ : without spin-orbit coupling (`*`KORBIT=0`*`) and `*`NSPIN=1`*\
|
|
|
` - Execute "(10) read scoef nonmag host" and then "1" or "2", if one's want to double the potential or not.`\
|
|
|
` - __Case 2__: with spin-orbit coupling (`*`KORBIT=1`*`) or `*`NSPIN=2`*\
|
|
|
` - Execute "(14) read scoef maghost".`
|
|
|
|
|
|
shapefun file {#shapefun_file}
|
|
|
-------------
|
|
|
|
|
|
` - Execute `*`modifypotential.py`` ``shape`*` and then follow the same steps as for the potential file, depending on the case `*`KORBIT=0`*` or `*`KORBIT==1`*`.`
|
|
|
|
|
|
##### Further examples {#further_examples}
|
|
|
|
|
|
This section discusses the different types of impurity calculations
|
|
|
available currently in the KKRimp program.
|
|
|
|
|
|
` - `[`Self-consistent`` ``atomic`` ``impurity`](Self-consistent_atomic_impurity "wikilink")\
|
|
|
` - `[`Self-consistent`` ``spin`` ``impurity`](Self-consistent_spin_impurity "wikilink")\
|
|
|
` - `[`One-shot`` ``magnetic`` ``parameter`` ``extraction`` ``(Jij/Dij)`](One-shot_magnetic_parameter_extraction_(Jij/Dij) "wikilink")` `\
|
|
|
` - `[`DOS`` ``calculation`` ``for`` ``an`` ``impurity`](DOS_calculation_for_an_impurity "wikilink")\
|
|
|
` - `[`Lloyds`` ``formula`` ``in`` ``KKRimpurity`` ``code`](Lloyds_formula_in_KKRimpurity_code "wikilink") |