Author Topic: Is it possible to calculate the PLDOS at a definite bias from the I-V curve?  (Read 211 times)

0 Members and 1 Guest are viewing this topic.

Offline beauyy

  • Regular ATK user
  • **
  • Posts: 43
  • Country: cn
  • Reputation: 0
    • View Profile
 In the calculation of Ids-Vg curve, I forgot to analyze the PLDOS. Can I get the PLDOS at a definite Vg from the  Ids-Vg curve results? If possible, how can I do that? Is there any guideline?

Offline Anders Blom

  • QuantumATK Staff
  • Supreme ATK Wizard
  • *****
  • Posts: 5012
  • Country: dk
  • Reputation: 85
    • View Profile
    • QuantumATK at Synopsys
Did you use the IVCharacteristics workflow? If so, it's very easy to write a script that uses the "addAnalysis" method
See https://docs.quantumatk.com/manual/Types/IVCharacteristics/IVCharacteristics.html (I don't think this can be done in the GUI, however)

If you looped manually over Vd/Vg and and have each calculation saved in a separate file, you can just "nlread" it and add any analysis you want. You can set this up in the Script Generator using "Analysis From File"


Offline beauyy

  • Regular ATK user
  • **
  • Posts: 43
  • Country: cn
  • Reputation: 0
    • View Profile
Thank you. But when I calculated the PLDOS and Mulliken charge from the IV characteristics, it always terminated with exit code 139. Even though I recalcuated the IV characteristics with PLDOS and Mulliken charge from the device, the same problem still existed. This error occured after the PLDOS and Mulliken charge calculations were finished. I guess it is not because of the out of memory. How can I solve this problem?
The script is attached.
« Last Edit: October 29, 2021, 05:45 by beauyy »

Offline Anders Blom

  • QuantumATK Staff
  • Supreme ATK Wizard
  • *****
  • Posts: 5012
  • Country: dk
  • Reputation: 85
    • View Profile
    • QuantumATK at Synopsys
This is not the actual error message from QuantumATK, there must be more, either before this, or in another file. This part is just the MPI library shutting down.

Offline beauyy

  • Regular ATK user
  • **
  • Posts: 43
  • Country: cn
  • Reputation: 0
    • View Profile
Thanks very much. I have known the reason for this error. I still have another question. The calculation of Mulliken Population is finished.  But I don't kown how to read the data. I know the way to read PLDOS is similar to transmission spectra.  But I can't find Milliken Population at the same place.

Offline Anders Blom

  • QuantumATK Staff
  • Supreme ATK Wizard
  • *****
  • Posts: 5012
  • Country: dk
  • Reputation: 85
    • View Profile
    • QuantumATK at Synopsys
Do you mean how to interpret the data or how to actually read the results? I assume the latter.

The simplest way to read the Mulliken data is to select the object on the Lab Floor and then click "Text Representation" in the plugin list on the right. If the system is big, however, looking at all the numbers is not so useful, however. Instead you can drop the Mulliken population object on the Viewer, and color the atoms by either the net or total charge. There is currently no way to graphically analyze the s, p, d components, however note that those are not really trustworthy quantities in the Mulliken population anyway (and in fact, even the total charge is a very rough measure).

Offline beauyy

  • Regular ATK user
  • **
  • Posts: 43
  • Country: cn
  • Reputation: 0
    • View Profile
Yes, I can see the view of Mulliken Population according to your instruction. Then, how can I get a total charge of the device at a definite Vds and Vg from it, even though it is very rough. Is it possible to get a .txt file , like the Mulliken Population of a bulk structure. I need this data to further evaluate the device performance of a FET. 

Offline Anders Blom

  • QuantumATK Staff
  • Supreme ATK Wizard
  • *****
  • Posts: 5012
  • Country: dk
  • Reputation: 85
    • View Profile
    • QuantumATK at Synopsys
You can sum the Mulliken charges easily in a script

m = nlread("file.hdf5", MullikenPopulation)[0]
print(m.atomicCharge().sum())

It will be a rough measure of the net charge in the device, but I would maybe renormalize it with the value at zero bias (or rather, at the flatband gate potential).

Offline beauyy

  • Regular ATK user
  • **
  • Posts: 43
  • Country: cn
  • Reputation: 0
    • View Profile
I have run this script
m = nlread("pldos-Sn4S8-1e19-n-Vds0.64V-Vg-1.0V.hdf5", MullikenPopulation)[0]       
print(m.atomicCharge().sum())                                                           
                                                                                                                                                                           
Then, there appeared an error message as IndexError: list index out of range.
The script for calculating MullikenPopulation is as follows:
# -*- coding: utf-8 -*-                                               
# -------------------------------------------------------------       
# Analysis from File                                                 
# -------------------------------------------------------------       
filename = u'pldos-Sn4S8-1e19-n-Vds0.64V-Vg-1.0V.hdf5'               
                                                                     
iv_characteristics = IVCharacteristics(                               
    configuration=nlread(filename, object_id='DeviceConfiguration_0')[
    filename=filename,                                               
    object_id='iv-Sn4S8-1e19-n',                                     
    gate_regions=[0, 1],                                             
    gate_source_voltages= -1.0 * Volt,                               
    drain_source_voltages= 0.64 * Volt,                               
    log_filename_prefix=LogToStdOut,                                 
    number_of_processes_per_task=12,                                 
)                                                                     
                                                                     
iv_characteristics.addAnalysis(                                       
    -1.0 * Volt, 0.64 * Volt, MullikenPopulation)                     
iv_characteristics.addProjectedLocalDensityOfStates(                 
    -1.0 *Volt, 0.64 * Volt)                                         
iv_characteristics.update()   

How can I modify the script?

The attached view of MullikenPopulation indicates the .hdf5 does contain the MullikenPopulation data.                                     

Offline Petr Khomyakov

  • QuantumATK Staff
  • Supreme ATK Wizard
  • *****
  • Posts: 1286
  • Country: dk
  • Reputation: 24
    • View Profile
I think you should first read the Milliken population results from the IVCharacteristics study object as described in the following, and then the extracted data for further analysis:
Code
iv_characteristics = nlread('pldos-Sn4S8-1e19-n-Vds0.64V-Vg-1.0V.hdf5', IVCharacteristics)[-1]

mp = iv_characteristics.results(
    -1.0*Volt,
    0.64*Volt,
    [MullikenPopulation])[-1]
nlsave('mp_results.hdf5', mp) 

m = nlread('mp_results.hdf5', MullikenPopulation)[0]
print(m.atomicCharge().sum())