|
|
# 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
|
|
|
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
|
|
|
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))). Finally you have to
|
|
|
provide information about the impurity cluster. Here you have to
|
... | ... | @@ -21,26 +20,24 @@ clusters file which is written out in the host code. |
|
|
|
|
|
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.))
|
|
|
in $`\ell_{max}=3`$ as the host system. The impurity is a self-adatom on the
|
|
|
surface (i.e. substitutional in the first vacuum layer). The following
|
|
|
steps have to be done in a typical calculation:
|
|
|
|
|
|
### 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)) 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) 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 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)) for scf-contour
|
|
|
|
|
|
* Change `inputcard`
|
|
|
* add the `RUNOPT` `KKRFLEX` [^1]
|
|
|
* `NSTEPS=1`
|
|
|
* Create `scoef` file
|
|
|
* Open the `clusters` file. [^2]
|
|
|
* 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. [^3]
|
|
|
* See example below for updated `inputcard` and the created [scoef](jumu/scoef_file) 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
|
|
|
|
... | ... | @@ -49,61 +46,59 @@ 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), [scoef](jumu/scoef_file), *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) 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) 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)((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.
|
|
|
* Create the folder **host_in_host** and copy on it (from the **kkrflex** folder) the following files : [kkrflex* files](kkrimp/kkrflex_files), [scoef](jumu/scoef_file), `potential`, `shapefun`, `inputcard`. [^4]
|
|
|
* Download the [kkrimpurity code](https://iffgit.fz-juelich.de/groups/kkr) 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) 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)((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
|
|
|
|
|
|
- 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) 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) (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) 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.
|
|
|
* 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) 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) (Don't forget to change the number of steps) [^5]
|
|
|
* 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) code, as it is done for the usual setup.
|
|
|
* Then follow the same steps as in the Case 1 of combining the starting potential for the impurity with the rest of the impurity cluster taken from the host_in_host calculation.
|
|
|
|
|
|
## Post-processing
|
|
|
|
|
|
- Post-processing, e.g. impurity DOS
|
|
|
- create [kkrflex_*](kkrimp/kkrflex_files) files for DOS energy contour
|
|
|
- run a single iteration using the converged impurity potential and the DOS [kkrflex_*](kkrimp/kkrflex_files) files
|
|
|
- plot the impurity DOS as seen below
|
|
|
* Post-processing, e.g. impurity DOS
|
|
|
* create [kkrflex_*](kkrimp/kkrflex_files) files for DOS energy contour
|
|
|
* run a single iteration using the converged impurity potential and the DOS [kkrflex_*](kkrimp/kkrflex_files) 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
|
|
|
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
|
|
|
|
|
|
### potential file
|
|
|
|
|
|
## How to use the `modifypotential.py`
|
|
|
|
|
|
- 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".
|
|
|
### `potential` file
|
|
|
|
|
|
### shapefun 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
|
|
|
|
|
|
- Execute *modifypotential.py shape* and then follow the same steps as for the potential file, depending on the case *KORBIT=0* or *KORBIT==1*.
|
|
|
* 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
|
|
|
|
... | ... | @@ -115,3 +110,12 @@ available currently in the KKRimp program. |
|
|
- [One-shot magnetic parameter extraction (Jij/Dij)](One-shot_magnetic_parameter_extraction_(Jij/Dij))
|
|
|
- [DOS calculation for an impurity](DOS_calculation_for_an_impurity)\
|
|
|
- [Lloyds formula in KKRimpurity code](Lloyds_formula_in_KKRimpurity_code)
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
[^1]: 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.
|
|
|
[^2]: In the new versions, this file is written out automatically during the convergence of the system
|
|
|
[^3]: The scattering center at (0.,0.,0.) is the impurity site itself
|
|
|
[^4]: Some of these 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.
|
|
|
[^5]: 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* (in Ry units), will be set only in the first 10 iterations, then it will come back to 0. |
|
|
\ No newline at end of file |