Author Topic: gating_molecularjunction_transmission  (Read 2000 times)

0 Members and 1 Guest are viewing this topic.

Offline jcj

  • New QuantumATK user
  • *
  • Posts: 4
  • Country: se
  • Reputation: 0
    • View Profile
gating_molecularjunction_transmission
« on: December 5, 2016, 10:42 »
Hi,

I have two zero-bias electronic transmissions of a molecular system(DFT+NEGF approach). One  is calculated from the standard way. The other is calculated from a gating loop at 0 gating voltage[the gating script below].

My question: Isn't that the two transmissions should be the same? But I got two different transmissions. Any idea?


Regards,
Chengjun



  1 # Read in the old configuration
  2 device_configuration = nlread("/analysis.nc",DeviceConfiguration)[0]
  3 calculator = device_configuration.calculator()
  4 metallic_region0 = device_configuration.metallicRegions()[0]
  5
  6 # test keywords: metallicaRigions
  7
  8
  9 # Define gate_voltages
 10 gate_voltage_list=numpy.linspace(-2.0, 1.0, 10)*Volt
 11 for gate_voltage in gate_voltage_list:
 12     # set the gate potential
 13     device_configuration.setMetallicRegions(
 14         [metallic_region0(value = gate_voltage)] )
 15
 16     # make a copy of the calculator and attach it to the configuration
 17     # restart from the previous scf state
 18     device_configuration.setCalculator(calculator(),
 19         initial_state=device_configuration)
 20
 21     #Analysis
 22     filename= 'gate_vdp.nc'
 23     electron_density = ElectronDifferenceDensity(device_configuration)
 24     nlsave(filename, electron_density,object_id='dens'+str(gate_voltage))
 25
 26     electrostatic_potential = ElectrostaticDifferencePotential(device_configuration)
 27     nlsave(filename, electrostatic_potential, object_id='pot'+str(gate_voltage))
 28
 29     transmission_spectrum = TransmissionSpectrum(
 30         configuration=device_configuration,
 31         energies=numpy.linspace(-2,2,200)*eV,
 32         )
 33     nlsave(filename, transmission_spectrum,object_id='trans'+str(gate_voltage))
 34     nlprint(transmission_spectrum)

Offline Petr Khomyakov

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 1290
  • Country: dk
  • Reputation: 25
    • View Profile
Re: gating_molecularjunction_transmission
« Reply #1 on: December 5, 2016, 11:23 »
Could you attach all the relevant scripts to your post, including the one for what you call the standard way of calculating the transmission spectrum?

Offline jcj

  • New QuantumATK user
  • *
  • Posts: 4
  • Country: se
  • Reputation: 0
    • View Profile
Re: gating_molecularjunction_transmission
« Reply #2 on: December 5, 2016, 12:17 »
Hi,

Attached is the script I calculated the transmission (let's label it trans_A). Then I do the gating looping over numpy.linspace(-2.0, 1.0, 10)*Volt. (Let's label the transmission at 0 gating voltage as trans_B)

The trans_A and trans_B is different.  Any idea? Thanks,


Offline Petr Khomyakov

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 1290
  • Country: dk
  • Reputation: 25
    • View Profile
Re: gating_molecularjunction_transmission
« Reply #3 on: December 5, 2016, 12:49 »
If you compare the computational settings for the two transmission spectrum calculations, you may see that the two sets of computational parameters are different for these two calculations. So, I would not expect the corresponding results to be identical either.

transmission_spectrum = TransmissionSpectrum(
  configuration=device_configuration,
  energies=numpy.linspace(-2,2,200)*eV,)

transmission_spectrum = TransmissionSpectrum(
    configuration=device_configuration,
    energies=numpy.linspace(-3,3,401)*eV,
    kpoints=MonkhorstPackGrid(4,4),
    energy_zero_parameter=AverageFermiLevel,
    infinitesimal=1e-06*eV,
    self_energy_calculator=RecursionSelfEnergy(),
    )