See http://quantumwise.com/publications/tutorials/item/877-inelastic-electron-spectroscopy-of-h-molecule-between-1d-au-chains
Dear Anders,
Before, I have used inelastica to repeat the theoretical results in PRL 104,077801(2010). And can get a very comparable result with one in that paper (please see blow).
Now I want to use ATK to repeat this result since I can fllow the tutorial you suggest me (please see the input *py file in the attachment). However, I was stucked in the step of "HamiltonianDerivatives" while the steps of "DynamicalMatrix" can be done sucessfully with a reasonable computing time.
As seen, the junction consists of a CH3-C7 molecule sandwiched bwetween to Au(111) electrodes. And periodic boundary condictions are used in x and y directions.
In the "HamiltonianDerivatives", the following settings are first used, and repetitions=(1, 1, 1) is used to save computational time.
# -------------------------------------------------------------
# Hamiltonian Derivatives
# -------------------------------------------------------------
hamiltonian_derivatives = HamiltonianDerivatives(
configuration=device_configuration,
repetitions=(1, 1, 1),
atomic_displacement=0.01*Angstrom,
constraints=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169],
use_equivalent_bulk=True,
)
nlsave('CH3-C7-Au-IETS.nc', hamiltonian_derivatives)
However, errors occur. And it suggests me increase the unit cell repetition in the direction.
Traceback (most recent call last):
File "/tmp/1366.node00/CH3-C7-Au-IETS.py", line 463, in <module>
Traceback (most recent call last):
File "/tmp/1366.node00/CH3-C7-Au-IETS.py", line 463, in <module>
Traceback (most recent call last):
File "/tmp/1366.node00/CH3-C7-Au-IETS.py", line 463, in <module>
Traceback (most recent call last):
File "/tmp/1366.node00/CH3-C7-Au-IETS.py", line 463, in <module>
use_equivalent_bulk=True,
File "./zipdir/NL/Analysis/HamiltonianDerivatives.py", line 132, in __init__
use_equivalent_bulk=True,
File "./zipdir/NL/Analysis/HamiltonianDerivatives.py", line 132, in __init__
use_equivalent_bulk=True,
File "./zipdir/NL/Analysis/HamiltonianDerivatives.py", line 132, in __init__
use_equivalent_bulk=True,
File "./zipdir/NL/Analysis/HamiltonianDerivatives.py", line 978, in setAndCheckAtomsDisplacedWithinSuperCell
File "./zipdir/NL/Analysis/HamiltonianDerivatives.py", line 978, in setAndCheckAtomsDisplacedWithinSuperCell
File "./zipdir/NL/Analysis/HamiltonianDerivatives.py", line 978, in setAndCheckAtomsDisplacedWithinSuperCell
File "./zipdir/NL/Analysis/HamiltonianDerivatives.py", line 978, in setAndCheckAtomsDisplacedWithinSuperCell
NL.ComputerScienceUtilities.Exceptions.NLValueError: File "./zipdir/NL/Analysis/HamiltonianDerivatives.py", line 978, in setAndCheckAtomsDisplacedWithinSuperCell
NL.ComputerScienceUtilities.Exceptions.NLValueError: Atoms are being displaced out of the unit cell in directions where the cell repetition is less that 3. Please increase the unit cell repetition in the direction(s): A.
NL.ComputerScienceUtilities.Exceptions.NLValueError: Atoms are being displaced out of the unit cell in directions where the cell repetition is less that 3. Please increase the unit cell repetition in the direction(s): A.
Atoms are being displaced out of the unit cell in directions where the cell repetition is less that 3. Please increase the unit cell repetition in the direction(s): A.
NL.ComputerScienceUtilities.Exceptions.NLValueError: Atoms are being displaced out of the unit cell in directions where the cell repetition is less that 3. Please increase the unit cell repetition in the direction(s): A.
NL.ComputerScienceUtilities.Exceptions.NLValueError: Atoms are being displaced out of the unit cell in directions where the cell repetition is less that 3. Please increase the unit cell repetition in the direction(s): A.
NL.ComputerScienceUtilities.Exceptions.NLValueError: Atoms are being displaced out of the unit cell in directions where the cell repetition is less that 3. Please increase the unit cell repetition in the direction(s): A.
NL.ComputerScienceUtilities.ExceptionsNL.ComputerScienceUtilities.Exceptions.NLValueError: Atoms are being displaced out of the unit cell in directions where the cell repetition is less that 3. Please increase the unit cell repetition in the direction(s): A.
.NLValueError: Atoms are being displaced out of the unit cell in directions where the cell repetition is less that 3. Please increase the unit cell repetition in the direction(s): A.
I can not understand this note "Atoms are being displaced out of the unit cell in directions where the cell repetition is less that 3." As is seen in the .py file, only the CH3-C7 molecule is not constrainedin the "HamiltonianDerivatives" calculation. And displacement of atoms of CH3-C7 by 0.01 Angstrom will not move the atom out of the unit cell. So, what does the note really mean?
As I understand, "HamiltonianDerivatives" calculation is very similar with "DynamicalMatrix" calcualtion in numerical technique. Anyway, I increase the unit cell repetition in x and y directions to 3
# -------------------------------------------------------------
# Hamiltonian Derivatives
# -------------------------------------------------------------
hamiltonian_derivatives = HamiltonianDerivatives(
configuration=device_configuration,
repetitions=(3, 3, 1),
atomic_displacement=0.01*Angstrom,
constraints=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169],
use_equivalent_bulk=True,
)
nlsave('CH3-C7-Au-IETS.nc', hamiltonian_derivatives)
However, the calcualtion can be go further, but the self-consistent calcualtion is very slow. One cycle needs more than 24 hours with 4 cores.
As I guess, the "HamiltonianDerivatives" is equivalent to the PHrun in inelastica calcualtion. And as I remember, the whole PHrun needs less than 4 hours with one core for this system.
For a similar system, I think the PHrun in inelastica read the *TSHS file generated in FCrun and does the "HamiltonianDerivatives" in the following step,
Phonons.Analyze: Reading (H0,S0,dH) from .TSHS and .onlyS files:
SiestaIO.HS.__init__: Reading ../FCrun/M1-Au-FC 151 0.TSHS
Found 324 atoms, (11792, 2948) orbitals in super-, unit-cell
SiestaIO.HS.setkpoint: ../FCrun/M1-Au-FC 151 0.TSHS k = [ 0. 0. 0.]
SiestaIO.HS.__init__: Reading ../FCrun/M1-Au-FC 151 1.TSHS
Found 324 atoms, (11792, 2948) orbitals in super-, unit-cell
SiestaIO.HS.setkpoint: ../FCrun/M1-Au-FC 151 1.TSHS k = [ 0. 0. 0.]
SiestaIO.HS.__init__: Reading ../FCrun/M1-Au-FC 151 2.TSHS
Found 324 atoms, (11792, 2948) orbitals in super-, unit-cell
...
...
...
SiestaIO.HS.setkpoint: ../FCrun/M1-Au-FC 151 143.TSHS k = [ 0. 0. 0.]
SiestaIO.HS.__init__: Reading ../FCrun/M1-Au-FC 151 144.TSHS
Found 324 atoms, (11792, 2948) orbitals in super-, unit-cell
SiestaIO.HS.setkpoint: ../FCrun/M1-Au-FC 151 144.TSHS k = [ 0. 0. 0.]
Phonons.CorrectdH: Applying correction to dH...
I guess the repetitions=(3, 3, 1) leads to the huge increase in the computational effort.
Also, I see there will be k-points sampling in the "HamiltonianDerivatives" calculation if use_equivalent_bulk is set to True. However, I did not find where to set the k-points sampling in Class HamiltonianDerivatives. Does it share the same with "DeviceLCAOCalculator"? If yes, can I have different k-points sampling for them?
Finally, I saw "use_equivalent_bulk" parameters in "HamiltonianDerivatives" and "DynamicalMatrix" to decide whether the DeviceConfiguration should be treated as a BulkConfiguration. As I understand, if it is set to True, the number of atoms in "HamiltonianDerivatives" should equal to that of central region in DeviceConfiguration. But in my case, the number in the output file equals to central region + two electrodes. That is, the number of atoms in two electrode are counted by twice, which would increase the computational burden.
Did I make some misunderstanding of the calcualtions or give wrong settings in ATK for IEST.
Can you please give me some suggesions?
With best regards.
/Guangping