QuantumATK Forum
QuantumATK => General Questions and Answers => Topic started by: xjtumse on November 17, 2009, 02:49
-
1).I wanted to calculate the current versus bias curve of 1D copper wire, so I constructed two electrodes respectively, which consisted of 6 copper atoms in a line. The central region consisted of a chain of 15 copper atoms. The problem was that when the bias was applied, the calculation did not converge. I want to know why the system does not converge and what parameters should I control if I want to get the I-V curve of copper wire?
2).I have calculated three transmission eigenvectors of copper wire and I want to study the transimission eigenchannels of the wire, how can I display the transmission eigenchannels in VNL?
-
For the 1st question, it will be helpful for us to give you some suggestions if you can show your input file and the corresponding file. Before that, you may refer to a tutorial about the convergence tricks for ATK:
http://www.quantumwise.com/documents/tutorials/FeMgO%20Convergence%20Tricks.pdf (http://www.quantumwise.com/documents/tutorials/FeMgO%20Convergence%20Tricks.pdf)
For the 2nd question, you may refer to an example demonstrated in the manual of ATK:
http://www.quantumwise.com/documents/manuals/ATK-2008.10/chap.altranseigenchan.html#sect2.altranseigenchan.dopedchannels (http://www.quantumwise.com/documents/manuals/ATK-2008.10/chap.altranseigenchan.html#sect2.altranseigenchan.dopedchannels)
The details of calculation steps and visualizing the transimission eigenchannels are outlined there.
-
Thanks very much for your attention. These two attechment files are the input files for calculating I-V curve of copper wire, I hope you can give me some advice. For the second problems I have calculated transmission eigenchannels ,but I do not know how to display them in Nanoscope module respectively in VNL. In other words, in the example of aluminium wire it only display one transmission eigenchannel, I want to know how to display the other transmission eigenchannel.
-
I have solved the second problem. By controlling the argument in index_list, I could get all the transmission eigenchannels. :)
-
In your script file 'Cu_bias', there are something wrong or unreasonable:
scf = executeSelfConsistentCalculation(
atomic_configuration=perfect_cuwire,
method = dft_method
initial_calculation = scf
)
Before the loop, no object is defined for the 'scf' in "initial_calculation = scf". You may change your script file to be the following:
old_scf = executeSelfConsistentCalculation(
atomic_configuration=perfect_cuwire,
method = dft_method
)
# Restore initial density from old calculation
#scf = restoreSelfConsistentCalculation("lih2li-scf.nc")
f = open('bias.dat', 'w')
print '# Bias (Volt)\tCurrent (Ampere)'
# Run bias from 0.0 and 1.0 in steps of 0.1
for voltage in numpy.arange(0.0, 1.01, 0.1):
dft_method = TwoProbeMethod(
electrode_parameters=(electrode_params,electrode_params),
basis_set_parameters = basis_set_params,
iteration_control_parameters = iteration_control_params,
electrode_voltages = (voltage/2.0, -voltage/2.0)*Volt
)
# Store each calculation in a separate NetCDF file
ATK.setCheckpointFilename ('cu-bias-%.1f.nc' % voltage)
scf = executeSelfConsistentCalculation(
atomic_configuration=perfect_cuwire,
method = dft_method,
initial_calculation = old_scf
)
current = calculateCurrent(scf)
s = "%.1f\t\t%.2e" %(voltage, current.inUnitsOf(Ampere))
f.write(s)
print s,
old_scf=scf
# Close file and exit
f.close()
-
Another alternative is to set scf (or old_scf) to "None" before the loop.
-
Thanks very much for your attention! But that is not the point to the problem.
Before the calculation I got the lattcie constant from SCF calculation of 1D copper atoms wire. The lattice constant represents the lowest energy.
In order to make the calculation convergence, I have tried several ways:
1) Decrease the k points of Brillouin Zone;
2) Simplify the basis set that I select;
3) Reduce convergence criterion;
4) Increase calcualtion steps;
5) Decrease central region atoms from 15 to 3 gradually.
But they seemed no effect, the calculation still can not converge.
The electrodes of my calculation is also 1D copper atoms wire. Whether should I enlarge my electrodes to help the system to converge?
-
A 1D wire is generally very difficult to converge. It might look simple, but it's not.
You need a very long electrode and a long central region, but it seems you have. For k-points, anything but 1x1 in A/B (xy) is just wasted time, but 100-200 is demanded in C (transport direction). Cu needs a very large mesh cut-off, probably 350 Ry.
I would also experiment with temperature. We have recently noticed that a gold nanowire converges much better at low temperature (10 K), while as you may have read other systems (in particular those with a semiconducting central region) might benefit from a higher temperature (1000-2000 K).
-
Today I have tried several temperatures for electrode eigenstate occupation parameters, e.g. 10K ,300K, 1000K and so on. But there is no dramatic effect. Later I changed exchange correlation type and subtituted GGA PBE for LDA PZ. The result is unideal yet. In partical, atoms wire is unstable, so it may be very difficult to find an equilibrium state under bias. Is there any other way that I can utilize in ATK to calculate I-V curve for 1D copper atoms wire?
-
In order to reduce the computational cost of an infinite atomic Cu chain, you could use a small size of unit cell for the electrode, for example, 2 atoms in the unit cell of electrode. Meanwhile, the number of atoms in the scattering region could also be smaller.
Please try the following setup for the atomic Cu chain:
from ATK.TwoProbe import *
# The spacing between the wires should be
# enough large for the wire not to interact.
xy = 10.0
# The lattice distance in the wire.
zs = 2.215
# The lattice vectors of the electode.
unit_cell = [[ xy, 0.0, 0.0],
[ 0.0, xy , 0.0],
[ 0.0, 0.0, 2*zs]]*Angstrom
# Setting up the position of the atoms in the electrode.
positions = [(xy/2, xy/2, zs*0),
(xy/2, xy/2, zs*1)]*Angstrom
# Combining lattice vectors, positions and with elements.
electrode = PeriodicAtomConfiguration(unit_cell,[Copper]*2,positions)
# Setting up the central region positions for the undoped system.
scattering_positions = [(xy/2, xy/2, zs*0),
(xy/2, xy/2, zs*1),
(xy/2, xy/2, zs*2),
(xy/2, xy/2, zs*3),
(xy/2, xy/2, zs*4),
(xy/2, xy/2, zs*5)]*Angstrom
# Creating the perfect copper wire.
copper_wire = TwoProbeConfiguration((electrode,electrode),
[Copper]*6,
scattering_positions)
vnl_file = VNLFile("perfect_cuwire.vnl")
vnl_file.addToSample(copper_wire,"perfect_cuwire")