Author Topic: some qusestion about Id dependence on Vg  (Read 3124 times)

0 Members and 1 Guest are viewing this topic.

Offline Zhongjun Li

  • Regular QuantumATK user
  • **
  • Posts: 8
  • Country: cn
  • Reputation: 0
    • View Profile
some qusestion about Id dependence on Vg
« on: May 30, 2013, 17:13 »
Dear everyone,
At a certain bias voltage of 0.4 V, I have calculated drain current of Id  at different gate voltages. when the gate voltages are set to -6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6 V, the dependent curve of Id on gate voltages is smooth, and the trend is consistent with the experimental result. However, as the gate voltages are set to fractions, such as -6.5,-5.5,-4.5,-3.5,-2.5,-1.5,......or -6.1,-6.2,-6.3,-6.4,-6.5,-6.6,......, the curve shows very obvious oscillations. I can not understand and resolve my question. Have you experienced this case? maybe your experiences can lead me out of my troubles. Thank you for your attention.

Offline Zhongjun Li

  • Regular QuantumATK user
  • **
  • Posts: 8
  • Country: cn
  • Reputation: 0
    • View Profile
Re: some qusestion about Id dependence on Vg
« Reply #1 on: May 30, 2013, 17:19 »
the following is my script.

from ATK.TwoProbe import *
import numpy
import ATK
ATK.setVerbosityLevel(1)

# Read the atomic configuration from a VNL file
vnl_file = VNLFile("2-G-opt.vnl")
configurations = vnl_file.readAtomicConfigurations()
two_probe_conf = configurations["2-G-opt"]

###############################################
# setting global parameters
###############################################

kpoints = (50,1,30)
mesh_cutoff = 250.*Rydberg
xc = LDA.PZ
temperature = 300.*Kelvin
tolerance = 1e-6
diagonal_mixing_parameter = 0.02
history_steps = 15
max_steps = 1000

 
 
basis_set_parameters = [basisSetParameters(SingleZeta,element = Carbon),   
                        basisSetParameters(SingleZeta,element = Nitrogen)]

###############################################
# setting two electrodes parameters
###############################################

electrode_brillouin_zone_integration_parameters = brillouinZoneIntegrationParameters(
    monkhorst_pack_parameters = (kpoints)
    )


electrode_electron_density_parameters = electronDensityParameters(
    mesh_cutoff = mesh_cutoff,
    )

electrode_iteration_control_parameters = iterationControlParameters(
    tolerance = tolerance,
    criterion = IterationControl.Strict,
    max_steps = max_steps
    )

electrode_iteration_mixing_parameters = iterationMixingParameters(
    algorithm = IterationMixing.Pulay,
    diagonal_mixing_parameter = diagonal_mixing_parameter,
    quantity = IterationMixing.Hamiltonian,
    history_steps = history_steps
    )

electrode_eigenstate_occupation_parameters = eigenstateOccupationParameters(
    temperature = temperature
    )
   
electrode_parameters = ElectrodeParameters(
    brillouin_zone_integration_parameters = electrode_brillouin_zone_integration_parameters,
    electron_density_parameters = electrode_electron_density_parameters,
    eigenstate_occupation_parameters = electrode_eigenstate_occupation_parameters,
    iteration_mixing_parameters = electrode_iteration_mixing_parameters,
    iteration_control_parameters = electrode_iteration_control_parameters
    )

###############################################
# setting scattering region parameters
###############################################

ite_mix_para = iterationMixingParameters(
    diagonal_mixing_parameter = diagonal_mixing_parameter,
    quantity = IterationMixing.Hamiltonian,
    history_steps = history_steps
    )

ite_con_para = iterationControlParameters(
    tolerance = tolerance,
    criterion = IterationControl.Strict,
    max_steps = max_steps
    )


ele_den_para = electronDensityParameters(
    mesh_cutoff = mesh_cutoff,
    )

two_probe_algorithm_parameters = twoProbeAlgorithmParameters(
    electrode_constraint = ElectrodeConstraints.RealSpaceDensity,
    initial_density_type = InitialDensityType.EquivalentBulk
    )

energy_contour_integral_parameters = energyContourIntegralParameters(
    circle_points = 300,
    integral_lower_bound = 30.0*Rydberg,
    fermi_line_points = 10,
    fermi_function_poles = 4,
    real_axis_infinitesimal = 0.01*electronVolt,
    real_axis_point_density = 0.02*electronVolt
    )

two_center_integral_parameters = twoCenterIntegralParameters(
    cutoff = 2500.0*Rydberg,
    points = 1024
    )

use_old=False 
#use_old=True                                                                     
for voltage0 in numpy.arange(0.00, 6.00+0.50, 0.50):       # gate_valtages
    voltage = -voltage0
    two_probe_method = TwoProbeMethod(
        exchange_correlation_type = xc,
        electrode_parameters = (electrode_parameters, electrode_parameters),               ###############
        electrode_voltages = (0.20, -0.20)*Volt,                                             ## parameters##
        iteration_mixing_parameters = ite_mix_para,                                        ###############
        iteration_control_parameters = ite_con_para,
        energy_contour_integral_parameters = energy_contour_integral_parameters,
        two_center_integral_parameters = two_center_integral_parameters,
        electron_density_parameters = ele_den_para,
        basis_set_parameters = basis_set_parameters,
        algorithm_parameters = two_probe_algorithm_parameters
        )
                                                                                            ###############
    #voltage = 0                                                                            ## parameters##
    three_probe_method = GatedTwoProbeMethod(                                               ###############
        two_probe_method = two_probe_method,                                                ###############
        gate_voltage = voltage*Volt,                                                             ## parameters##
        surface_atoms = (5, 5)                                                              ###############
        )

   
    if use_old:
        scf = executeSelfConsistentCalculation(                                                                 
                atomic_configuration = two_probe_conf,                                                         
                method = three_probe_method,                                                                   
                initial_calculation = Old_Scf,                                                                 
                runtime_parameters = runtimeParameters(verbosity_level = 1,                                     
                checkpoint_filename = 'GScf-gate-%.2f.nc' % voltage)                          ## parameters##
                )                                                                                               
    else:
        scf = executeSelfConsistentCalculation(                             
                atomic_configuration = two_probe_conf,                     
                method = three_probe_method,                                                             
                runtime_parameters = runtimeParameters(verbosity_level = 1,
                checkpoint_filename = 'GScf-gate-%.2f.nc' % voltage)     
                )                                                           
        use_old=True   
    Old_Scf=scf   
   

   
   
    current = calculateCurrent(scf)

    print "%.1f\t\t%.2e" %(voltage, current.inUnitsOf(Ampere))

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5576
  • Country: dk
  • Reputation: 96
    • View Profile
    • QuantumATK at Synopsys
Re: some qusestion about Id dependence on Vg
« Reply #2 on: May 30, 2013, 23:36 »
I admit that's odd, however we have no possibility to look into it - the version of the software you are using is too old (I don't even have a binary installation of it, much less access to the source code). The gate model used in newer ATK versions is also much more realistic from a physical perspective, perhaps you can try that (on a demo license), and consider an upgrade.

Just a few tips though: SingleZeta basis sets are often not accurate enough for any serious work. But also, 50 kpoints in the A direction is most likely overkill, I have never seen a system yet that really needed from than 10-13 or so. For the SCF loop at least - for the transmission spectrum it's a different story, but those parameters are separate.

Offline Zhongjun Li

  • Regular QuantumATK user
  • **
  • Posts: 8
  • Country: cn
  • Reputation: 0
    • View Profile
Re: some qusestion about Id dependence on Vg
« Reply #3 on: May 31, 2013, 07:37 »
Thank Dr. Anders Blom for the reply. Ok, I will employ szp basis set to calculate again.