OK, I am posting this with full details in hopes that you can help:
I have been having a hard time getting ldos to finish ... (it runs forever):
I am probably doing something wrong, but please take a look. I have no errors, and my logs are updated so I know it is running, but no matter what I do it does not finish! .. I tried parallelization with a 24 core machine, and my latest attempt is a simple single core, running just 1 energy point. It has been running for 8 hours already ... is it almost done? Last time I ran a parallelized version with -n 12 it ran for 2 days and never completed. No errors.
Here is the script I am running: Attached also is the log file
# file: run.sh
# run single instance
./QuantumWise/atk-11.8.2/atkpython/bin/atkpython ./makeCfg.py
./QuantumWise/atk-11.8.2/atkpython/bin/atkpython ./gnr_12_0_AGNR_z10.py > log1.txt
makeCfg is a script that makes a simple GNR FET type device, attached. parms.py is also attached which has some parameters.
The second file is where the trouble is (code below). Note that ldos_energies = numpy.linspace(0,0,1)*eV, (I am running only 1 energy point only because I was hoping it would complete within a shorter amount of time, so I could estimate how long an actual calc would take)
def my_DeviceLCAOCalculator():
# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
#----------------------------------------
# Numerical Accuracy Settings
#----------------------------------------
left_electrode_numerical_accuracy_parameters = NumericalAccuracyParameters(
k_point_sampling=(kPntsX, kPntsY, kPntsZ),
)
right_electrode_numerical_accuracy_parameters = NumericalAccuracyParameters(
k_point_sampling=(kPntsX, kPntsY, kPntsZ),
)
#----------------------------------------
# Iteration Control Settings
#----------------------------------------
left_electrode_iteration_control_parameters = IterationControlParameters()
right_electrode_iteration_control_parameters = IterationControlParameters()
device_iteration_control_parameters = IterationControlParameters()
if SCF == 1:
#----------------------------------------
# Electrode Calculators
#----------------------------------------
left_electrode_calculator = LCAOCalculator(
numerical_accuracy_parameters=left_electrode_numerical_accuracy_parameters,
# set these for SCF
iteration_control_parameters=left_electrode_iteration_control_parameters,
)
right_electrode_calculator = LCAOCalculator(
numerical_accuracy_parameters=right_electrode_numerical_accuracy_parameters,
# set these for SCF
iteration_control_parameters=right_electrode_iteration_control_parameters,
)
#----------------------------------------
# Device Calculator
#----------------------------------------
calculator = DeviceLCAOCalculator(
# set these for SCF
iteration_control_parameters=device_iteration_control_parameters,
electrode_calculators=
[left_electrode_calculator, right_electrode_calculator],
)
else:
#----------------------------------------
# Electrode Calculators
#----------------------------------------
left_electrode_calculator = LCAOCalculator(
numerical_accuracy_parameters=left_electrode_numerical_accuracy_parameters,
)
right_electrode_calculator = LCAOCalculator(
numerical_accuracy_parameters=right_electrode_numerical_accuracy_parameters,
)
#----------------------------------------
# Device Calculator
#----------------------------------------
calculator = DeviceLCAOCalculator(
electrode_calculators=
[left_electrode_calculator, right_electrode_calculator],
)
return calculator
def doLDOS():
configuration = nlread(outFileName, object_id="cfg")[0]
calculator = my_DeviceLCAOCalculator()
configuration.setCalculator(calculator)
configuration.update()
# Energies at which to compute the LDOS;
# arguments to linspace are (min, max, number of points)
energies = ldos_energies
# calculate ldos for each energy in the list
for energy in energies:
LDOS = LocalDeviceDensityOfStates(
configuration=configuration,
energy=energy,
kpoints=MonkhorstPackGrid(3,3),
contributions=All,
energy_zero_parameter=AverageFermiLevel,
infinitesimal=1e-06*eV,
self_energy_calculator=KrylovSelfEnergy(),
spin=Spin.Sum,
)
nlsave(outFileName + '_ldos.nc', LDOS, object_id="LDOS at %s" % energy)
if __name__ == "__main__":
from parms import *
try:
if processIsMaster():
print "Master node"
else:
print "Slave node"
doLDOS()
print "doLDOS done"
except:
print "error", sys.exc_info()[0]
Ok I think I got it to converge now . it is still running a transmission calc, but the self-consistent part is done i think ... it took like 4 hours ...
my new parms file is below:
Thank you ... i think it was a matter of k-points and other parms but at least for now it is ok ....
# -------------------------------------------------------------
# setup parms
# -------------------------------------------------------------
from NanoLanguage import *
import numpy
import ase
nc_files = "../nc_files/"
plots = "../plots/"
# the number of carbon atoms to replace, every <dopingLvl> atoms
dopingLvl = 8
outFileName = "gnr_12_0_AGNR_z10.nc"
outFileName2 = outFileName + ".ivout.nc"
gate_voltage_list = [-0.2 + 0.05*n for n in range(0,9,1)]*Volt
bias_voltage_list = [-0.2 + 0.05*n for n in range(0,9,1)]*Volt
transSpecEnergies = numpy.linspace(-1,1,100)*eV
kPntsX = 1
kPntsY = 3
kPntsZ = 80
ldos_energies = numpy.linspace(-1.0,1.0,11)*eV
iteration_control_parameters = IterationControlParameters(number_of_history_steps=20, tolerance=1e-4)
numerical_accuracy_parameters = NumericalAccuracyParameters(k_point_sampling=(kPntsX, kPntsY, kPntsZ))
# bandstructure parms
pps=20 # points_per_segment
bafl=All # bands_above_fermi_level
SCF = 1 # self consistent or not