QuantumATK Forum

QuantumATK => General Questions and Answers => Topic started by: Ashutosh on January 21, 2013, 18:36

Title: Transmission pathways calculation from Transmission Spectrum?
Post by: Ashutosh on January 21, 2013, 18:36
Hi

I followed the mini tutorial to calculate transmission spectrum and I-V curve for a device (http://www.quantumwise.com/publications/tutorials/mini-tutorials/98-i-v-curve-and-voltage-drop). I was wondering if it is possible to calculate transmission pathways from the calculated transmission spectra. Since my devices are big, i break it into parts for different biases. Also, if I try to calculate transmission spectrum separately from the scf calculation or the calculated transmission spectra, what should the script look like for spin resolved case? Will I have to calculate for individual spin separately?

Thanks
Title: Re: Transmission pathways calculation from Transmission Spectrum?
Post by: Anders Blom on January 21, 2013, 23:28
The pathways (as indeed all "analysis quantities") can be computed afterwards, from the saved states in the NC files. It's not done from the transmission spectrum, however, it's from the configuration.

So, identify which configuration that is relevant, and make a note of its object ID; it will be often be gID000 if there is only one configuration in the file. Then you read the state from there, and compute whatever you want.

Code: python
configuration = nlread("file.nc", object_id="gID000")[0]
transmission_pathway = TransmissionPathway(configuration, ...)
nlsave(transmission_pathway, "results.nc")

You can use the Script Generator for this; insert "Analysis From File" and double-click it to specify the filename and object ID, and then insert Analysis blocks as usual.
Title: Re: Transmission pathways calculation from Transmission Spectrum?
Post by: Ashutosh on January 22, 2013, 23:25
Hi Anders

Thank you very much for the response. I was trying to use the similar script for transmission pathways, but I was reading the scf output file differently. I was using the version given for IV curve calculation, for different biases, and it kept running for long time without writing anything. I thought it should work on giving me pathways for a range of energies in one file (with command, energies=numpy.linspace(-2,4,50)*eV and for configurations at different biases. Is it incorrect way to do that?

Regards
Ashutosh
Title: Re: Transmission pathways calculation from Transmission Spectrum?
Post by: Anders Blom on January 22, 2013, 23:28
Perhaps not... but it's a bit hard to tell, would be better to see the actual script.
Title: Re: Transmission pathways calculation from Transmission Spectrum?
Post by: Ashutosh on January 24, 2013, 23:20
Hi Anders

Below is the script I was trying to use to calculate for the file containing scf data for different biases, where I could change the bias and also have the pathways calcualted for a range of energies. (Similar to the way IV calculation script was written)

Code
scf_filename = "analysis_%g.nc"
analysis_filename = "pathways_0v.nc"
biases = [0]
configurations = []
for bias in biases:
     configurations.append(nlread(scf_filename % bias, DeviceConfiguration)[0])
biases = [float(conf.calculator().electrodeVoltages()[0]-conf.calculator().electrodeVoltages()[1]) for conf in configurations]
configurations = [configurations[j] for j in numpy.argsort(biases)]
for configuration in configurations:
        calculator = configuration.calculator()
        bias = calculator.electrodeVoltages()[0]-calculator.electrodeVoltages()[1]
        if float(bias) == 0. : 
                zero_bias_potential = ElectrostaticDifferencePotential(configuration)
                break 
for configuration in configurations: 
    calculator = configuration.calculator()
    bias = calculator.electrodeVoltages()[0]-calculator.electrodeVoltages()[1]
    transmission_pathways = TransmissionPathways(
        configuration=configuration,
        energies=numpy.linspace(-2,8,100)*eV,
        kpoints=MonkhorstPackGrid(1,1),
        energy_zero_parameter=AverageFermiLevel,
        infinitesimal=1e-06*eV,
        contributions=Left,
        spin=Spin.Up,
        self_energy_calculator=DirectSelfEnergy(),
    )
nlsave(analysis_filename, transmission_pathways)
nlprint(transmission_pathways)
geometry = nlread('analysis_0_long.nc', DeviceConfiguration, read_state = False)[0] 
nlsave(analysis_filename, geometry)


Could you please see if this approach can be applied?

Thanks
Title: Re: Transmission pathways calculation from Transmission Spectrum?
Post by: Anders Blom on January 25, 2013, 22:40
Yes, but not exactly like that. You can only specify one energy for TransmissionPathway, so you need to loop explicitly. You can also remove the first loop over configurations, you don't need the zero-bias potential for anything. So:

Code: python
analysis_filename = "pathways.nc"

# Read the configurations
scf_filename = "analysis_%g.nc"
biases = [ 0 ]
configurations = []
for bias in biases:
     configurations.append(nlread(scf_filename % bias, DeviceConfiguration)[0])
    
# Sort the configurations by bias
biases = [float(conf.calculator().electrodeVoltages()[0]-conf.calculator().electrodeVoltages()[1]) for conf in configurations]
configurations = [configurations[j] for j in numpy.argsort(biases)]

# Loop over bias and energies
energies = numpy.linspace(-2,8,100)
for configuration in configurations:
    bias = float(configuration.calculator().electrodeVoltages()[0]-configuration.calculator().electrodeVoltages()[1])
    for energy in energies:
        transmission_pathways = TransmissionPathways(
            configuration=configuration,
            energy=energy*eV,
            kpoints=MonkhorstPackGrid(1,1),
            contributions=Left,
            spin=Spin.Up,
            self_energy_calculator=RecursionSelfEnergy(),
        )
        nlsave(analysis_filename, transmission_pathways, object_id="Bias %s E %s" % (bias,energy))

# Read the configuration (once) without state, just the geometry for convenient plotting
geometry = nlread('analysis_0_long.nc', DeviceConfiguration, read_state = False)[0]  
nlsave(analysis_filename, geometry)

Hope I didn't make any mistake, I can't test it my self.

Also, always be careful to be consistent with indentation - always just 4 spaces and never tabs.
Title: Re: Transmission pathways calculation from Transmission Spectrum?
Post by: Ashutosh on January 29, 2013, 16:30
Hi Anders

Thank you very much. I am trying to test it. I will let you know how it goes.

Title: Re: Transmission pathways calculation from Transmission Spectrum?
Post by: Ashutosh on January 29, 2013, 20:18
It's giving me the following error:

Quote
SyntaxError: invalid syntax
  File "path.py", line 4
biases = <ul style="margin-top: 0; margin-bottom: 0;"><li type="circle"></li></ul>configurations = []
Title: Re: Transmission pathways calculation from Transmission Spectrum?
Post by: Anders Blom on January 29, 2013, 20:44
It's because the hard braces with a zero in between gets interpreted as formatting code for the Forum, not as Python code :o
I fixed it above.
Title: Re: Transmission pathways calculation from Transmission Spectrum?
Post by: Ashutosh on January 29, 2013, 21:53
Thank you very much. I should have noticed it as it should have been similar to the previous script I was using, but I missed it. Thanks a lot, again. I will update you how it goes.