Thank you very much!i will try first method,but i don't know how to use the second method.i am looking forward to the tutorial for 2D/1D doping.
i have some other questions
1.when i pasted my input.py into ATK's Editor and i sent it to Builder ,then i sent to Editor again.The code changed.the codes are attached below.what is the difference between doping code and external_potential = AtomicCompensationCharge()
2.There are two ways to calculate ivcurve.i want to know the differences between iv_curve = IVCurve() and the code below def transmission(device_configuration):
# Calculate the transmission spectrum and save it in a file
transmission_spectrum = TransmissionSpectrum(
configuration=device_configuration,
energies=numpy.linspace(-2,2,101)*eV,
kpoints=MonkhorstPackGrid(7,1),
energy_zero_parameter=AverageFermiLevel,
infinitesimal=1e-06*eV,
self_energy_calculator=RecursionSelfEnergy(),
)
nlsave('s2.5_iv.nc', transmission_spectrum)
# Read in the converged zero-bias calculation
##device_configuration = nlread("li-h2.nc",DeviceConfiguration)[0]
##calculator = device_configuration.calculator()
# Calculate and save the transmission spectrum for zero bias
transmission(device_configuration)
# Define the bias voltages for the I-V curve
voltage_list=[0.25, 0.5, 0.75, 1.0]*Volt
# Loop over the bias voltages
for voltage in voltage_list:
# Set electrode voltages and use the self-consistent state
# of the previous calculation as starting guess
device_configuration.setCalculator(
calculator(electrode_voltages=(voltage/2, -voltage/2)),
initial_state=device_configuration)
device_configuration.update()
nlsave('s2.5device_configuration.nc', device_configuration)
# Calculate and save the transmission spectrum for each bias
transmission(device_configuration)
Thank you very much!
i want to know how to proceed with smaller steps from that points in details.
ivcurve_selfconsistent_configuration at 0 and 1.2V bias are the same.
i use the ivcurve_selfconsistent_configuration at 1.2V as device configuration ,and calculate the ivcurve using electrode_voltages=( 0.6*Volt, -0.6*Volt),but it doesn't converge!
how exactly did you do it? (script)
You are saying that you run a calculation at 1.2V starting from the same state at 1.2 V ?!?
If you start from 1.2 V, which is good, you then need to specify a bias range from 1.25 V to 2.0 V with steps of 0.05 V.
Since there are many calculations involved I suggest you to split this calculation into smaller part, e.g. from 1.25 to 1.5 V first.
device_configuration=nlread('filename.nc', DeviceConfiguration)[-1] #configuration at 1.2 V
# Set bias list
bias_list = [1.25, .........]*Volt
# Get the calculator
calculator = device_configuration.calculator()
for bias in bias_list:
# Set the source-drain voltage of the calculator
calculator=calculator(
electrode_voltages=(bias/2, -bias/2))
# Set new calculator with modified electrode voltages on the configuration
# use the self consistent state of the old calculation as starting input.
device_configuration.setCalculator(
calculator(),
initial_state=device_configuration)
device_configuration.update()
nlsave('ivcurve_selfconsistent_configurations.nc', device_configuration)
And monitor how the calculation proceed.