Dear quantumwise staff:
Recently i confronted a convergence problems in MoS2 ,so i referred to the forum and increase the max steps ,the problem is as follows:
if i don't restart from the convergened state ,that is i calculate it from zero bias ,here is my max steps setting.
#----------------------------------------
# Iteration Control Settings
#----------------------------------------
left_electrode_iteration_control_parameters = IterationControlParameters(
max_steps=500,
)
right_electrode_iteration_control_parameters = IterationControlParameters(
max_steps=500,
)
device_iteration_control_parameters = IterationControlParameters(
damping_factor=0.31,
max_steps=2000,
number_of_history_steps=10,
)
#----------------------------------------
# Poisson Solver Settings
#----------------------------------------
left_electrode_poisson_solver = FastFourier2DSolver(
boundary_conditions=[[PeriodicBoundaryCondition,PeriodicBoundaryCondition],
[PeriodicBoundaryCondition,PeriodicBoundaryCondition],
[PeriodicBoundaryCondition,PeriodicBoundaryCondition]]
)
right_electrode_poisson_solver = FastFourier2DSolver(
boundary_conditions=[[PeriodicBoundaryCondition,PeriodicBoundaryCondition],
[PeriodicBoundaryCondition,PeriodicBoundaryCondition],
[PeriodicBoundaryCondition,PeriodicBoundaryCondition]]
)
#----------------------------------------
# Contour Integral Settings
#----------------------------------------
contour_parameters = DoubleContourIntegralParameters(
real_axis_infinitesimal=1e-06*Rydberg,
real_axis_point_density=0.02*eV,
integral_lower_bound=50.0*eV,
)
#----------------------------------------
# Electrode Calculators
#----------------------------------------
left_electrode_calculator = LCAOCalculator(
basis_set=basis_set,
exchange_correlation=exchange_correlation,
iteration_control_parameters=left_electrode_iteration_control_parameters,
poisson_solver=left_electrode_poisson_solver,
)
right_electrode_calculator = LCAOCalculator(
basis_set=basis_set,
exchange_correlation=exchange_correlation,
iteration_control_parameters=right_electrode_iteration_control_parameters,
poisson_solver=right_electrode_poisson_solver,
)
#----------------------------------------
# Device Calculator
#----------------------------------------
calculator = DeviceLCAOCalculator(
basis_set=basis_set,
exchange_correlation=exchange_correlation,
iteration_control_parameters=device_iteration_control_parameters,
contour_parameters=contour_parameters,
electrode_calculators=
[left_electrode_calculator, right_electrode_calculator],
)
device_configuration.setCalculator(calculator)
# -------------------------------------------------------------
# Initial State
# -------------------------------------------------------------
initial_spin = InitialSpin(scaled_spins=[0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0, 0.0, 0.0])
device_configuration.setCalculator(
calculator,
initial_spin=initial_spin,
)
device_configuration.update()
nlsave('CONFIG.nc', device_configuration)
nlprint(device_configuration)
# -------------------------------------------------------------
# IV Curve
# -------------------------------------------------------------
calculator=device_configuration.calculator()
biases = [0.100000, 0.200000, 0.300000, 0.400000, 0.500000,
0.600000, 0.700000, 0.800000, 0.900000, 1.000000]*Volt
for bias in biases:
calculator=calculator(
electrode_voltages=(bias/2, -bias/2))
device_configuration.setCalculator(
calculator(),
initial_state=device_configuration)
device_configuration.update()
nlsave("ivcurve_selfconsistent_configurations_bias_%g.nc" % bias.inUnitsOf(Volt), device_configuration)
My calculation is slowly converged in the step =635 ,
350627:| 615 E = -447.349 dE = 4.819839e-04 dH = 2.388363e-04
350846:| 616 E = -447.35 dE = 9.950206e-04 dH = 8.781832e-04
351065:| 617 E = -447.35 dE = 1.495225e-04 dH = 1.050059e-03
351284:| 618 E = -447.349 dE = 7.514605e-04 dH = 2.417407e-04
351503:| 619 E = -447.349 dE = 8.285889e-05 dH = 1.792596e-04
351722:| 620 E = -447.348 dE = 6.273245e-04 dH = 1.333994e-04
351941:| 621 E = -447.348 dE = 4.864245e-04 dH = 3.458751e-04
352160:| 622 E = -447.348 dE = 1.074768e-04 dH = 2.376046e-04
352379:| 623 E = -447.349 dE = 6.705824e-04 dH = 3.217824e-04
352598:| 624 E = -447.348 dE = 6.934614e-04 dH = 3.254210e-04
352817:| 625 E = -447.348 dE = 3.242197e-04 dH = 2.692547e-04
353036:| 626 E = -447.348 dE = 1.095985e-04 dH = 1.103893e-04
353255:| 627 E = -447.349 dE = 7.666417e-04 dH = 1.624413e-04
353474:| 628 E = -447.349 dE = 1.769304e-05 dH = 4.870540e-04
353693:| 629 E = -447.348 dE = 8.042218e-04 dH = 1.483390e-04
353912:| 630 E = -447.348 dE = 1.963235e-06 dH = 2.435271e-04
354131:| 631 E = -447.349 dE = 6.199732e-04 dH = 5.196899e-04
354350:| 632 E = -447.348 dE = 5.375404e-04 dH = 1.000946e-04
354569:| 633 E = -447.348 dE = 1.350441e-05 dH = 1.004250e-04
354788:| 634 E = -447.348 dE = 1.106934e-04 dH = 1.264113e-04
355007:| 635 E = -447.348 dE = 3.390452e-05 dH = 9.519258e-05
355462:| 0 E = -428.204 dE = 1.917845e+01 dH = 1.470380e-01
355681:| 1 E = -439.981 dE = 1.177661e+01 dH = 3.916571e+00
355900:| 2 E = -445.977 dE = 5.996319e+00 dH = 7.775032e-01
356119:| 3 E = -446.527 dE = 5.499668e-01 dH = 2.842024e-01
356338:| 4 E = -446.857 dE = 3.301646e-01 dH = 8.742580e-02
356557:| 5 E = -446.732 dE = 1.250417e-01 dH = 1.973932e-01
356776:| 6 E = -446.928 dE = 1.960541e-01 dH = 8.639483e-02
356995:| 7 E = -446.951 dE = 2.286883e-02 dH = 8.455163e-02
357214:| 8 E = -447.205 dE = 2.537133e-01 dH = 9.177060e-02
357433:| 9 E = -447.073 dE = 1.319129e-01 dH = 7.540765e-02
357652:| 10 E = -447.258 dE = 1.854489e-01 dH = 5.404163e-02
357871:| 11 E = -447.261 dE = 3.214866e-03 dH = 8.341868e-02
358090:| 12 E = -447.239 dE = 2.249815e-02 dH = 6.084702e-02
358309:| 13 E = -447.096 dE = 1.428855e-01 dH = 5.987770e-02
358528:| 14 E = -447.068 dE = 2.819535e-02 dH = 4.608637e-02
358747:| 15 E = -447.118 dE = 5.013750e-02 dH = 8.704623e-02
358966:| 16 E = -447.188 dE = 6.975315e-02 dH = 6.939250e-02
359185:| 17 E = -447.285 dE = 9.755813e-02 dH = 1.863129e-01
but when i set same max step in another restarting py ,
#----------------------------------------
# Iteration Control Settings
#----------------------------------------
left_electrode_iteration_control_parameters = IterationControlParameters(
max_steps=1000,
)
right_electrode_iteration_control_parameters = IterationControlParameters(
max_steps=1000,
)
device_iteration_control_parameters = IterationControlParameters(
damping_factor=0.36,
max_steps=2000,
number_of_history_steps=8,
)
#----------------------------------------
# Poisson Solver Settings
#----------------------------------------
left_electrode_poisson_solver = FastFourier2DSolver(
boundary_conditions=[[PeriodicBoundaryCondition,PeriodicBoundaryCondition],
[PeriodicBoundaryCondition,PeriodicBoundaryCondition],
[PeriodicBoundaryCondition,PeriodicBoundaryCondition]]
)
right_electrode_poisson_solver = FastFourier2DSolver(
boundary_conditions=[[PeriodicBoundaryCondition,PeriodicBoundaryCondition],
[PeriodicBoundaryCondition,PeriodicBoundaryCondition],
[PeriodicBoundaryCondition,PeriodicBoundaryCondition]]
)
#----------------------------------------
# Contour Integral Settings
#----------------------------------------
contour_parameters = DoubleContourIntegralParameters(
real_axis_infinitesimal=1e-06*Rydberg,
real_axis_point_density=0.02*eV,
integral_lower_bound=50.0*eV,
)
#----------------------------------------
# Electrode Calculators
#----------------------------------------
left_electrode_calculator = LCAOCalculator(
basis_set=basis_set,
exchange_correlation=exchange_correlation,
iteration_control_parameters=left_electrode_iteration_control_parameters,
poisson_solver=left_electrode_poisson_solver,
)
right_electrode_calculator = LCAOCalculator(
basis_set=basis_set,
exchange_correlation=exchange_correlation,
iteration_control_parameters=right_electrode_iteration_control_parameters,
poisson_solver=right_electrode_poisson_solver,
)
#----------------------------------------
# Device Calculator
#----------------------------------------
calculator = DeviceLCAOCalculator(
basis_set=basis_set,
exchange_correlation=exchange_correlation,
iteration_control_parameters=device_iteration_control_parameters,
contour_parameters=contour_parameters,
electrode_calculators=
[left_electrode_calculator, right_electrode_calculator],
)
device_configuration.setCalculator(calculator)
# -------------------------------------------------------------
# Initial State
# -------------------------------------------------------------
initial_spin = InitialSpin(scaled_spins=[0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0])
device_configuration.setCalculator(
calculator,
initial_spin=initial_spin,
)
device_configuration = nlread("ivcurve_selfconsistent_configurations_bias_-0.1.nc")[0]
device_configuration.update(force_restart=True)
nlsave('CONFIG.nc', device_configuration)
nlprint(device_configuration)
# -------------------------------------------------------------
# IV Curve
# -------------------------------------------------------------
calculator=device_configuration.calculator()
biases = [-0.200000, -0.300000, -0.400000, -0.500000,
-0.600000, -0.700000, -0.800000, -0.900000, -1.000000]*Volt
for bias in biases:
calculator=calculator(
electrode_voltages=(bias/2, -bias/2))
device_configuration.setCalculator(
calculator(),
initial_state=device_configuration)
device_configuration.update()
nlsave("ivcurve_selfconsistent_configurations_bias_%g.nc" % bias.inUnitsOf(Volt), device_configuration)
it stopped in the step=499 (i should mentioned that in the previous V= -0.1,i used max steps as 500) ,so i wonder if it is because the restarting for -0.1 make the new max step =2000 invalid ,can anyone explain about it ?