This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
how_to_prepare_the_new_tip_and_sample_for_stm_simulations [2009/11/25 13:18] vroz |
how_to_prepare_the_new_tip_and_sample_for_stm_simulations [2009/11/25 15:52] vroz |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | \\ | ||
==== I. The geometry ==== | ==== I. The geometry ==== | ||
Line 9: | Line 10: | ||
are using new FIREBALL input format, set up followings at the “fireball.in” file: | are using new FIREBALL input format, set up followings at the “fireball.in” file: | ||
- | &OPTION part | + | __&OPTION__ part |
- | ‐ basisfile = <filename> | + | ‐ basisfile = <filename> \\ |
+ | ‐ lvsfile = <filename> \\ | ||
+ | ‐ kptpreference = <filename> \\ | ||
+ | ‐ nstepf = 1 \\ | ||
- | ‐ lvsfile = <filename> | + | Than you have the “CHARGES” of both the systems tip and sample |
- | ‐ kptpreference = <filename> | + | \\ |
- | + | ||
- | ‐ nstepf = 1 | + | |
- | + | ||
- | Than you have the “CHARGES” of both the systems tip and sample | + | |
Line 27: | Line 27: | ||
We need several files before we can simulate the STM scanning for both | We need several files before we can simulate the STM scanning for both | ||
- | tip and sample. For sample it is “Atomo_i” and struc.inp files, hopping file | + | tip and sample. For sample it is “Atomo_i” and "struc.inp files", hopping file |
“tip_sample_i_j.inp” (“interaction_i_j.dat”), “tip_e_str.inp” and “tip_g_str.inp” with | “tip_sample_i_j.inp” (“interaction_i_j.dat”), “tip_e_str.inp” and “tip_g_str.inp” with | ||
the densities and geometry of the tip. | the densities and geometry of the tip. | ||
+ | \\ | ||
=== II.I. Atomo_i, struc.inp === | === II.I. Atomo_i, struc.inp === | ||
- | Once we have the “CHARGES” we can produce the Atomo_i files by the | + | Once we have the “CHARGES” we can produce the "Atomo_i" files by the |
FIREBALL. “CHARGES” file has to be at the same directory when you are running | FIREBALL. “CHARGES” file has to be at the same directory when you are running | ||
the FIREBALL. To the “fireball.in” we will write: | the FIREBALL. To the “fireball.in” we will write: | ||
- | &OPTION part | + | __&OPTION__ part |
- | ‐ nstepf = 1 | + | ‐ nstepf = 1 \\ |
+ | ‐ ifixcharge = 1 \\ | ||
- | ‐ ifixcharge = 1 | + | __&OUTPUT__ part |
- | + | ||
- | &OUTPUT part | + | |
‐ iwrtatom = 1 | ‐ iwrtatom = 1 | ||
Line 52: | Line 52: | ||
The “struc.inp” file contains some information about the sample: | The “struc.inp” file contains some information about the sample: | ||
- | 1 !number. of atoms in unit cell | + | 1 !number. of atoms in unit cell \\ |
+ | 1 !initial and final atom which is contributing to the tunneling current \\ | ||
+ | 12 ! number maximum of neighbours \\ | ||
+ | //!! you have to modify this upper part// | ||
- | 1 1 !initial and final atom which is contributing to the tunneling current | + | 0.000000 0.000000 0.000000 1 ! coordinates and type of each atom \\ |
+ | . \\ | ||
+ | . \\ | ||
+ | . \\ | ||
- | 12 ! number maximum of neighbours | + | //!! Next part (up to the lattice vectors) must be added// \\ |
- | !! you have to modify this upper part | + | 4 !number of orbitals in each type of atom (in a row) \\ |
+ | 2 !number of shells of each atom type (in a row) \\ | ||
+ | 0 1 !l of each shell type atom=1 (each atom type in a row) \\ | ||
+ | 16 !nkprl: no. of k's in one row (nk=nkprl2), =0 read a samplek.kpts file \\ | ||
+ | 1 1 !index_cell1, index_cell2 (ncell = (2*index_cell1+1)*(2*index_cell1+1) \\ | ||
- | 0.000000 0.000000 0.000000 1 ! coordinates and type of each atom | + | 0.866025 , 0.5 , 0. !Horizontal lattice vector (x‐axis) \\ |
+ | 0.866025 , ‐0.5 , 0. !Horizontal lattice vector (y‐axis) \\ | ||
+ | //!! We have to delete the last row of Lattice vector// | ||
- | . | + | The fixing the "nkprl" value to 0 and using the fireball k-points (with the |
- | + | ||
- | . | + | |
- | + | ||
- | . | + | |
- | + | ||
- | !! Next part (up to the lattice vectors) must be added | + | |
- | 4 !number of orbitals in each type of atom (in a row) | + | |
- | + | ||
- | 2 !number of shells of each atom type (in a row) | + | |
- | + | ||
- | 0 1 !l of each shell type atom=1 (each atom type in a row) | + | |
- | + | ||
- | 16 !nkprl: no. of k's in one row (nk=nkprl2), =0 read a samplek.kpts file | + | |
- | + | ||
- | 1 1 !index_cell1, index_cell2 (ncell = (2*index_cell1+1)*(2*index_cell1+1) | + | |
- | + | ||
- | 0.866025 , 0.5 , 0. !Horizontal lattice vector (x‐axis) | + | |
- | + | ||
- | 0.866025 , ‐0.5 , 0. !Horizontal lattice vector (y‐axis) | + | |
- | + | ||
- | !! We have to delete the last row of Lattice vector | + | |
- | + | ||
- | The fixing the nkprl value to 0 and using the fireball kpoints (with the | + | |
opposite to complete the Brouilloin) is strongly reccomended. | opposite to complete the Brouilloin) is strongly reccomended. | ||
- | The index_cell1 and index_cell2 are relative to the number of cells we | + | The "index_cell1" and "index_cell2" are relative to the number of cells we |
need in each direction x and y to avoid the border problems. The product of them | need in each direction x and y to avoid the border problems. The product of them | ||
gives us number of repetition unit which influence is involved to the | gives us number of repetition unit which influence is involved to the | ||
computation. | computation. | ||
- | II.II. tip_sample_i_j.inp file | + | |
+ | \\ | ||
+ | |||
+ | === II.II. tip_sample_i_j.inp file === | ||
+ | |||
In our approximation, we use a dimer formed by one kind of atom from | In our approximation, we use a dimer formed by one kind of atom from | ||
the tip and another kind from the sample. We have to generate a | the tip and another kind from the sample. We have to generate a | ||
- | tip_sample_i_j.inp (or interaction_i_j.dat) for each pair of kinds. As we want | + | "tip_sample_i_j.inp" (or "interaction_i_j.dat") for each pair of kinds. As we want |
interactions for bigger distances than we have in a crystal relaxation, we need to | interactions for bigger distances than we have in a crystal relaxation, we need to | ||
- | generate with BEGIN wave‐functions with a cut‐off radius of about 10‐15 au. | + | generate these wave-functions by the **BEGIN** with a cut‐off radius of about 10‐15 au. |
When we have the wave‐functions we generate the interactions (Fdata) with | When we have the wave‐functions we generate the interactions (Fdata) with | ||
- | CREATE. After that, we run with FIREBALL the dimer, mentioned before, for | + | **CREATE**. After that, we run with **FIREBALL** the dimer, mentioned before, for |
several distances (normally from 2 au to 20 or 30 au). To obtain the hoppings in | several distances (normally from 2 au to 20 or 30 au). To obtain the hoppings in | ||
the STM format we need (“fireball.in”): | the STM format we need (“fireball.in”): | ||
- | &OPTION part | + | |
- | ‐ ifixcharges = 1 | + | __&OPTION__ part \\ |
- | ‐ nstepf = 1 | + | |
- | &OUTPUT part | + | ‐ ifixcharges = 1 \\ |
+ | ‐ nstepf = 1 \\ | ||
+ | |||
+ | __&OUTPUT__ part \\ | ||
‐ iwrthop = 1 | ‐ iwrthop = 1 | ||
+ | |||
To do this, we can use the script “run_hops.com” which is necessary to | To do this, we can use the script “run_hops.com” which is necessary to | ||
modify in dependence what output format you expect (read the “README” file of | modify in dependence what output format you expect (read the “README” file of | ||
this script). | this script). | ||
- | The “run_hops.com” script: | + | |
- | #!/bin/bash | + | == II.II.I. The “run_hops.com” script: == |
- | #mv -f interactions.dat interactions.dat.old | + | |
- | echo 1 > lockfile | + | #!/bin/bash \\ |
- | tipo1="`cat lista`" | + | #mv -f interactions.dat interactions.dat.old \\ |
- | for i in $tipo1; do | + | echo 1 > lockfile \\ |
- | tipo2="`cat lockfile`" | + | tipo1="`cat lista`" \\ |
- | if [ $tipo2 == "2" ]; then | + | for i in $tipo1; \\ |
- | echo 1 > lockfile | + | do \\ |
- | name2="`echo $i`"; | + | tipo2="`cat lockfile`" \\ |
- | sed "s/AAAAAAA/$name2/g" tip_sample_aux >> | + | if [ $tipo2 == "2" ]; \\ |
- | interactions.dat; | + | then \\ |
- | echo $i | + | echo 1 > lockfile\\ |
- | else | + | name2="`echo $i`"; \\ |
- | echo 2 > lockfile | + | sed "s/AAAAAAA/$name2/g" tip_sample_aux >> interactions.dat; \\ |
- | name1="`echo $i`"; | + | echo $i \\ |
- | sed "s/AAAAAAA/$name1/g" model.bas > tmp.bas; | + | else \\ |
- | ./fireball.k.x > out_tmp; | + | echo 2 > lockfile \\ |
- | fi | + | name1="`echo $i`"; \\ |
- | done | + | sed "s/AAAAAAA/$name1/g" model.bas > tmp.bas; \\ |
- | cat header.dat > interaction_X_Y.dat | + | ./fireball.k.x > out_tmp; \\ |
- | cat interactions.dat >> interaction_X_Y.dat | + | fi \\ |
- | rm -f lockfile | + | done \\ |
- | rm -f inter_aux.dat | + | cat header.dat > interaction_X_Y.dat \\ |
+ | cat interactions.dat >> interaction_X_Y.dat \\ | ||
+ | rm -f lockfile \\ | ||
+ | rm -f inter_aux.dat \\ | ||
rm -f tip_sample_aux | rm -f tip_sample_aux | ||
- | The “README” file: | + | |
- | ************a short description how to generate hopping data | + | == II.II.II. The “README” file: == |
- | files we need: | + | |
- | fireball.in | + | a short description how to generate hopping data \\ |
- | model.bas | + | files we need: \\ |
- | lista | + | fireball.in \\ |
- | header.dat | + | model.bas \\ |
- | =======A. edit: | + | lista \\ |
- | CHARGES | + | header.dat \\ |
- | model.bas | + | |
- | =======B. edit run_hops.com | + | =======A. edit: \\ |
- | if you need the fireball output format, than to the | + | CHARGES \\ |
- | interactions.dat you have to write | + | model.bas \\ |
- | the inter_aux.dat | + | |
- | if you need the STM code output format, than to the | + | =======B. edit run_hops.com \\ |
- | interactions.dat you have to write | + | If you need the **fireball output format**, than to the |
- | the tip_sample_aux | + | "interactions.dat" you have to write |
- | *****The difference is amount of some writen informations at | + | the inter_aux.dat \\ |
- | the header of interaction (hopping) file,***** | + | If you need the **STM code output format**, than to the |
- | *****number of interactions and even the length units. For | + | "interactions.dat" you have to write |
- | STM format it is a.u. when for the fireball***** | + | the tip_sample_aux. \\ |
- | *****format it is Angstroms. | + | |
- | ***** | + | The difference is amount of some writen informations at |
- | =======C. launch | + | the header of interaction (hopping) file, number of interactions and even the length units. For |
- | ./run_hop.com | + | STM format it is a.u. when for the fireball format it is Angstroms. |
- | =======D. modify header of interacti_X_Y.dat file | + | |
- | ***************** Interactions for W(spd)-C(sp) using | + | =======C. launch \\ |
- | FIREBALL program ******* | + | ./run_hop.com \\ |
- | 57 !number of distances | + | |
- | 2.00000 30.00000 !dist_min dist_max | + | =======D. modify header of interacti_X_Y.dat file \\ |
- | 10 !number of interactions | + | !*Interactions for W(spd)-C(sp) using FIREBALL program*! \\ |
- | in the case you choose the STM output format, don't forget | + | 57 !number of distances \\ |
+ | 2.00000 30.00000 !dist_min, dist_max \\ | ||
+ | 10 !number of interactions \\ | ||
+ | |||
+ | //In the case you choose the STM output format, don't forget | ||
to remove duplicate (symmetric) interactions | to remove duplicate (symmetric) interactions | ||
- | from the interactions_X_Y.inp file. You have to write there | + | from the "interactions_X_Y.inp" file. You have to write there |
even the line of 3 more numbers (2 3 10) | even the line of 3 more numbers (2 3 10) | ||
which gives us the number of the shells of the tip and | which gives us the number of the shells of the tip and | ||
- | sample respectively. | + | sample respectively.// |
- | ***************** Interactions for W(spd)-C(sp) using | + | |
- | FIREBALL program ******* | + | !*Interactions for W(spd)-C(sp) using FIREBALL program*! \\ |
- | 57 !number of distances | + | 57 !number of distances \\ |
- | 2.00000 30.00000 !dist_min dist_max | + | 2.00000 30.00000 !dist_min, dist_max \\ |
2 3 10 !number of shells of the tip, of the | 2 3 10 !number of shells of the tip, of the | ||
- | sample, number of interactions | + | sample, number of interactions \\ |
- | If we put the hoppings for all the distances in a file, we will have the basis | + | |
- | for the tip_sample_i_j.inp (or interaction_i_j.dat) files (see the example in the STM | + | //If we put the hoppings for all the distances in a file, we will have the basis |
+ | for the "tip_sample_i_j.inp" (or "interaction_i_j.dat") files (see the example in the **STM** | ||
code). Then we have to complete the file with the parameters for the long | code). Then we have to complete the file with the parameters for the long | ||
- | distances approximation. See the header: | + | distances approximation.// \\ |
- | * Interactions for W‐Tid using FIREBALL program * | + | Look at the header: |
- | 57 | + | |
- | 2.000000 30.00000 | + | !*Interactions for W‐Tid using FIREBALL program*! \\ |
- | 3 3 14 | + | 57 \\ |
- | 0 0 0 ‐21.0000 1.0000 0.5738 1 1 14.5000 | + | 2.000000 30.00000 \\ |
- | 0 1 0 95.0000 1.0000 0.5738 1 1 16.5000 | + | 3 3 14 \\ |
- | …. | + | 0 0 0 ‐21.0000 1.0000 0.5738 1 1 14.5000 \\ |
+ | 0 1 0 95.0000 1.0000 0.5738 1 1 16.5000 \\ | ||
+ | . \\ | ||
+ | . \\ | ||
+ | . \\ | ||
where 57 is the number of distance steps, from 2 au to 30 ua. 3 and 3 are | where 57 is the number of distance steps, from 2 au to 30 ua. 3 and 3 are | ||
the number of shells for each kind of atom on the tip and the sample respectively. | the number of shells for each kind of atom on the tip and the sample respectively. | ||
14 is the total number of interactions for each distance. Finally, the 14 next rows | 14 is the total number of interactions for each distance. Finally, the 14 next rows | ||
are related with the long‐range approximation. 0,0,0 means orbital s (0)in the tip | are related with the long‐range approximation. 0,0,0 means orbital s (0)in the tip | ||
- | and orbital s (0) in the sample and a interaction sigma (0). Orbitals p will be 1 | + | and orbital s (0) in the sample and an interaction sigma (0). Orbitals p will be 1 |
- | and d 2, the interaction pi will be 1 and delta 2. | + | and d 2, the interaction pi will be 1 and delta 2. \\ |
For long distances, we do the parallel planes approximation using | For long distances, we do the parallel planes approximation using | ||
- | the expression: . The A (4th value in the row) is the independent value we | + | the expression: \\ |
- | have to find. α (5th value) depends on the orbitals you have in the hoppings, the | + | |
+ | A.e<sup>-W.r</sup> | ||
+ | |||
+ | The "A" (4th value in the row) is the independent value we | ||
+ | have to find. "α" (5th value) depends on the orbitals you have in the hoppings, the | ||
expression used is: α=l1+l2+1, but sometimes it could be changed depending on | expression used is: α=l1+l2+1, but sometimes it could be changed depending on | ||
- | the fix conditions. Finally, the W (6th) is related with the work function of the | + | the fix conditions. The "W" (6th) is related with the work function of the |
- | materials in the hopping: where ω’s are the work function for | + | materials in the hopping: |
- | each kind of atom. There is no function as BEGIN or CREATE to calculate these | + | |
- | long‐distance parameters, but there is a tool in the XEO program made by Daniel | + | W = ((ω<sub>T</sub> + ω<sub>S</sub>) / 2)<sup>1/2</sup> |
- | Gonzalez. Here you have to change by hand the values of A till you “see” (with the | + | |
+ | where ω’s are the work function for | ||
+ | each kind of atom. There is no function as **BEGIN** or **CREATE** to calculate these | ||
+ | long‐distance parameters, but there is a tool in the **XEO** program made by Daniel | ||
+ | Gonzalez. Here you have to change by hand the values of "A" till you “see” (with the | ||
eyes) a coincidence in the value and the derivative. Finally, let’s mention that the | eyes) a coincidence in the value and the derivative. Finally, let’s mention that the | ||
7th and 8th values in the row are related with the simple basis or double basis | 7th and 8th values in the row are related with the simple basis or double basis | ||
case. When you have a double basis you need an extra parameter to differentiate | case. When you have a double basis you need an extra parameter to differentiate | ||
- | from the simple basis orbital. The last value is the cut‐off radius. | + | from the simple basis orbital. \\ |
- | II.III. tip_g_str.inp | + | The last value is the cut‐off radius. |
+ | |||
+ | Here you can download : \\ | ||
+ | ========================. \\ | ||
+ | ="run_hops.com" script \\ | ||
+ | ="README" file \\ | ||
+ | ========================. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | === II.III. tip_g_str.inp === | ||
Last thing which we have to do is to write the “tip_g_str.inp” file. This file | Last thing which we have to do is to write the “tip_g_str.inp” file. This file | ||
contains the geometrical structure of the tip. The xyz atom coordinates should be | contains the geometrical structure of the tip. The xyz atom coordinates should be | ||
written there at the same order as we used for the “tip_e_str.inp” file, with the | written there at the same order as we used for the “tip_e_str.inp” file, with the | ||
- | apex atom at first position. The file could looks like this: | + | apex atom at first position. The file could looks like this: \\ |
- | 1 5 ! natoms_tip_contributing, natoms_tip | + | |
- | 0.000000 0.000000 0.400000 1 9 ! x, y, z, atomic type, # of orbitals | + | 1 5 ! natoms_tip_contributing, natoms_tip \\ |
- | 1.590800 1.590800 1.590800 1 9 ! x, y, z, atomic type, # of orbitals | + | 0.000000 0.000000 0.400000 1 9 ! x, y, z, atomic type, # of orbitals \\ |
- | 1.590800 ‐1.59080 1.59080 1 9 ! x, y, z, atomic type, # of orbitals | + | 1.590800 1.590800 1.590800 1 9 ! x, y, z, atomic type, # of orbitals \\ |
- | ‐1.590800 1.59080 1.59080 1 9 ! x, y, z, atomic type, # of orbitals | + | 1.590800 ‐1.59080 1.59080 1 9 ! x, y, z, atomic type, # of orbitals \\ |
- | ‐1.590800 ‐1.59080 1.59080 1 9 ! x, y, z, atomic type, # of orbitals | + | ‐1.590800 1.59080 1.59080 1 9 ! x, y, z, atomic type, # of orbitals \\ |
- | 3 ! number of shells in each type of atom | + | ‐1.590800 ‐1.59080 1.59080 1 9 ! x, y, z, atomic type, # of orbitals \\ |
- | 0 1 2 ! l for each shell in atom type=1 | + | 3 ! number of shells in each type of atom \\ |
- | ‐2.0 4.0 81 ! energy initial, range and steps in dos file | + | 0 1 2 ! l for each shell in atom type=1 \\ |
+ | ‐2.0 4.0 81 ! energy initial, range and steps in dos file \\ | ||
+ | |||
+ | // But be carefull, the energy in the STM code is related to the Fermi level. When Fermi level is -2 eV from FIREBALL in the "tip_g_str.inp" in it's last line the first value has to be 0.0 (energy initial - Fermi level)// |