Author Topic: Two basic questions, I hope you can give me some advice  (Read 4740 times)

0 Members and 1 Guest are viewing this topic.

Offline xjtumse

  • Regular QuantumATK user
  • **
  • Posts: 8
  • Reputation: 0
    • View Profile
Two basic questions, I hope you can give me some advice
« 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?

Offline zh

  • QuantumATK Support
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 1141
  • Reputation: 24
    • View Profile
Re: Two basic questions, I hope you can give me some advice
« Reply #1 on: November 17, 2009, 09:43 »
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

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
The details of calculation steps and visualizing the transimission eigenchannels are outlined there.

Offline xjtumse

  • Regular QuantumATK user
  • **
  • Posts: 8
  • Reputation: 0
    • View Profile
Re: Two basic questions, I hope you can give me some advice
« Reply #2 on: November 17, 2009, 11:16 »
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.
« Last Edit: November 17, 2009, 12:06 by xjtumse »

Offline xjtumse

  • Regular QuantumATK user
  • **
  • Posts: 8
  • Reputation: 0
    • View Profile
Re: Two basic questions, I hope you can give me some advice
« Reply #3 on: November 17, 2009, 14:18 »
I have solved the second problem. By controlling the argument in index_list, I could get all the transmission eigenchannels. :)

Offline zh

  • QuantumATK Support
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 1141
  • Reputation: 24
    • View Profile
Re: Two basic questions, I hope you can give me some advice
« Reply #4 on: November 18, 2009, 09:10 »
In your script file 'Cu_bias', there are something wrong or unreasonable:
 
Quote
    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:
 
Quote
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()



Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5418
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
Re: Two basic questions, I hope you can give me some advice
« Reply #5 on: November 18, 2009, 09:32 »
Another alternative is to set scf (or old_scf) to "None" before the loop.

Offline xjtumse

  • Regular QuantumATK user
  • **
  • Posts: 8
  • Reputation: 0
    • View Profile
Re: Two basic questions, I hope you can give me some advice
« Reply #6 on: November 18, 2009, 13:52 »
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?
« Last Edit: November 18, 2009, 13:58 by xjtumse »

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5418
  • Country: dk
  • Reputation: 89
    • View Profile
    • QuantumATK at Synopsys
Re: Two basic questions, I hope you can give me some advice
« Reply #7 on: November 18, 2009, 14:24 »
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).

Offline xjtumse

  • Regular QuantumATK user
  • **
  • Posts: 8
  • Reputation: 0
    • View Profile
Re: Two basic questions, I hope you can give me some advice
« Reply #8 on: November 19, 2009, 13:00 »
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?
« Last Edit: November 19, 2009, 13:02 by xjtumse »

Offline zh

  • QuantumATK Support
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 1141
  • Reputation: 24
    • View Profile
Re: Two basic questions, I hope you can give me some advice
« Reply #9 on: November 22, 2009, 07:56 »
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:
Quote
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")