Dear all,
I would like to ask a question about geometry optimization for a two probe system.
Recently, I have been trying to obtain an optimized geometry of a molecular junction (two probe system), dimethylenebenzene sandwiched in two Au electrodes.
I have completed geometry optimization calculation as seen in the attached image file.
But, the distance between two Au electrodes is not changed (optimized); it is 10.43A before and after optimization while the geometry of the molecule is optimized.
Because the dimethylenebenzene is not a planar molecule, defining geometry including distance between electrode and molecule is very important to get right transmission information.
Therefore, I would like to ask a question that:
In ATK, is there no way to find optimum distance between two electrodes? and between molecule and electrode?
I mean how to optimize the geometry also in Z-direction?
I hope some advice.
Thank you very much.
I'm attaching the input of the optimization calculation, so please refer to it.
# -------------------------------------------------------------
# TwoProbe configuration
# -------------------------------------------------------------
# -------------------------------------------------------------
# Left electrode
# -------------------------------------------------------------
# Set up lattice
vector_a = [8.65127469112, -6.75261456523e-33, 0.0]*Angstrom
vector_b = [-4.32563734556, 7.49222365763, 4.09015759516e-16]*Angstrom
vector_c = [0.0, 0.0, 7.06373620597]*Angstrom
left_electrode_lattice = UnitCell(vector_a, vector_b, vector_c)
# Define elements
left_electrode_elements = [Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold,
Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold,
Gold, Gold, Gold, Gold, Gold, Gold, Gold]
# Define coordinates
left_electrode_coordinates = [[ 0.75183977, 1.24918839, 1.17728937],
[ 3.635598 , 1.24918839, 1.17728937],
[ 6.51935623, 1.24918839, 1.17728937],
[-0.69003934, 3.74659628, 1.17728937],
[ 2.19371889, 3.74659628, 1.17728937],
[ 5.07747712, 3.74659628, 1.17728937],
[-2.13191846, 6.24400417, 1.17728937],
[ 0.75183977, 6.24400417, 1.17728937],
[ 3.635598 , 6.24400417, 1.17728937],
[-0.69003934, 2.08165769, 3.5318681 ],
[ 2.19371889, 2.08165769, 3.5318681 ],
[ 5.07747712, 2.08165769, 3.5318681 ],
[-2.13191846, 4.57906558, 3.5318681 ],
[ 0.75183977, 4.57906558, 3.5318681 ],
[ 3.635598 , 4.57906558, 3.5318681 ],
[-3.57379757, 7.07647346, 3.5318681 ],
[-0.69003934, 7.07647346, 3.5318681 ],
[ 2.19371889, 7.07647346, 3.5318681 ],
[ 2.19371889, 0.4167191 , 5.88644684],
[ 5.07747712, 0.4167191 , 5.88644684],
[ 7.96123535, 0.4167191 , 5.88644684],
[ 0.75183977, 2.91412699, 5.88644684],
[ 3.635598 , 2.91412699, 5.88644684],
[ 6.51935623, 2.91412699, 5.88644684],
[-0.69003934, 5.41153487, 5.88644684],
[ 2.19371889, 5.41153487, 5.88644684],
[ 5.07747712, 5.41153487, 5.88644684]]*Angstrom
# Set up configuration
left_electrode = BulkConfiguration(
bravais_lattice=left_electrode_lattice,
elements=left_electrode_elements,
cartesian_coordinates=left_electrode_coordinates
)
# -------------------------------------------------------------
# Right electrode
# -------------------------------------------------------------
# Set up lattice
vector_a = [8.65127469112, -6.75261456523e-33, 0.0]*Angstrom
vector_b = [-4.32563734556, 7.49222365763, 4.09015759516e-16]*Angstrom
vector_c = [0.0, 0.0, 7.06373620597]*Angstrom
right_electrode_lattice = UnitCell(vector_a, vector_b, vector_c)
# Define elements
right_electrode_elements = [Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold,
Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold,
Gold, Gold, Gold, Gold, Gold, Gold, Gold]
# Define coordinates
right_electrode_coordinates = [[-0.75184086, 2.08018876, 1.17728937],
[ 2.13191737, 2.08018876, 1.17728937],
[ 5.0156756 , 2.08018876, 1.17728937],
[-2.19371998, 4.57759665, 1.17728937],
[ 0.69003825, 4.57759665, 1.17728937],
[ 3.57379648, 4.57759665, 1.17728937],
[-3.63559909, 7.07500453, 1.17728937],
[-0.75184086, 7.07500453, 1.17728937],
[ 2.13191737, 7.07500453, 1.17728937],
[ 2.13191737, 0.41525017, 3.5318681 ],
[ 5.0156756 , 0.41525017, 3.5318681 ],
[ 7.89943383, 0.41525017, 3.5318681 ],
[ 0.69003825, 2.91265806, 3.5318681 ],
[ 3.57379648, 2.91265806, 3.5318681 ],
[ 6.45755472, 2.91265806, 3.5318681 ],
[-0.75184086, 5.41006594, 3.5318681 ],
[ 2.13191737, 5.41006594, 3.5318681 ],
[ 5.0156756 , 5.41006594, 3.5318681 ],
[ 0.69003825, 1.24771946, 5.88644684],
[ 3.57379648, 1.24771946, 5.88644684],
[ 6.45755472, 1.24771946, 5.88644684],
[-0.75184086, 3.74512735, 5.88644684],
[ 2.13191737, 3.74512735, 5.88644684],
[ 5.0156756 , 3.74512735, 5.88644684],
[-2.19371998, 6.24253524, 5.88644684],
[ 0.69003825, 6.24253524, 5.88644684],
[ 3.57379648, 6.24253524, 5.88644684]]*Angstrom
# Set up configuration
right_electrode = BulkConfiguration(
bravais_lattice=right_electrode_lattice,
elements=right_electrode_elements,
cartesian_coordinates=right_electrode_coordinates
)
# -------------------------------------------------------------
# Central region
# -------------------------------------------------------------
# Set up lattice
vector_a = [8.65127469112, -6.75261456523e-33, 0.0]*Angstrom
vector_b = [-4.32563734556, 7.49222365763, 4.09015759516e-16]*Angstrom
vector_c = [0.0, 0.0, 21.6389764739]*Angstrom
central_region_lattice = UnitCell(vector_a, vector_b, vector_c)
# Define elements
central_region_elements = [Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold,
Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold,
Gold, Gold, Gold, Gold, Gold, Gold, Gold, Hydrogen, Hydrogen,
Carbon, Carbon, Hydrogen, Hydrogen, Carbon, Carbon, Carbon,
Carbon, Hydrogen, Hydrogen, Carbon, Carbon, Hydrogen, Hydrogen,
Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold,
Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold, Gold,
Gold, Gold, Gold, Gold, Gold, Gold, Gold]
# Define coordinates
central_region_coordinates = [[ 0.75183977, 1.24918839, 1.17728937],
[ 3.635598 , 1.24918839, 1.17728937],
[ 6.51935623, 1.24918839, 1.17728937],
[ -0.69003934, 3.74659628, 1.17728937],
[ 2.19371889, 3.74659628, 1.17728937],
[ 5.07747712, 3.74659628, 1.17728937],
[ -2.13191846, 6.24400417, 1.17728937],
[ 0.75183977, 6.24400417, 1.17728937],
[ 3.635598 , 6.24400417, 1.17728937],
[ -0.69003934, 2.08165769, 3.5318681 ],
[ 2.19371889, 2.08165769, 3.5318681 ],
[ 5.07747712, 2.08165769, 3.5318681 ],
[ -2.13191846, 4.57906558, 3.5318681 ],
[ 0.75183977, 4.57906558, 3.5318681 ],
[ 3.635598 , 4.57906558, 3.5318681 ],
[ -3.57379757, 7.07647346, 3.5318681 ],
[ -0.69003934, 7.07647346, 3.5318681 ],
[ 2.19371889, 7.07647346, 3.5318681 ],
[ 2.19371889, 0.4167191 , 5.88644684],
[ 5.07747712, 0.4167191 , 5.88644684],
[ 7.96123535, 0.4167191 , 5.88644684],
[ 0.75183977, 2.91412699, 5.88644684],
[ 3.635598 , 2.91412699, 5.88644684],
[ 6.51935623, 2.91412699, 5.88644684],
[ -0.69003934, 5.41153487, 5.88644684],
[ 2.19371889, 5.41153487, 5.88644684],
[ 5.07747712, 5.41153487, 5.88644684],
[ 2.68803462, 4.63813503, 7.48490567],
[ 1.17074902, 3.73512826, 7.48579329],
[ 2.19371889, 3.74659628, 7.88644684],
[ 2.19371889, 3.74659628, 9.39796011],
[ 2.19216958, 1.60034561, 9.58728037],
[ 2.19102095, 5.89254533, 9.58831624],
[ 2.17967176, 2.54790079, 10.12212133],
[ 2.17903092, 4.94460065, 10.12265559],
[ 2.14660645, 2.54752301, 11.516221 ],
[ 2.14596317, 4.94422281, 11.51695525],
[ 2.1346164 , 1.59967832, 12.05056037],
[ 2.13346654, 5.89187802, 12.05169624],
[ 2.13191718, 3.74582735, 12.24101655],
[ 2.13191737, 3.74512735, 13.75252964],
[ 3.15489378, 3.73219537, 14.15317673],
[ 1.61690008, 2.86518312, 14.15382052],
[ -0.75184086, 2.08018876, 15.75252964],
[ 2.13191737, 2.08018876, 15.75252964],
[ 5.0156756 , 2.08018876, 15.75252964],
[ -2.19371998, 4.57759665, 15.75252964],
[ 0.69003825, 4.57759665, 15.75252964],
[ 3.57379648, 4.57759665, 15.75252964],
[ -3.63559909, 7.07500453, 15.75252964],
[ -0.75184086, 7.07500453, 15.75252964],
[ 2.13191737, 7.07500453, 15.75252964],
[ 2.13191737, 0.41525017, 18.10710837],
[ 5.0156756 , 0.41525017, 18.10710837],
[ 7.89943383, 0.41525017, 18.10710837],
[ 0.69003825, 2.91265806, 18.10710837],
[ 3.57379648, 2.91265806, 18.10710837],
[ 6.45755472, 2.91265806, 18.10710837],
[ -0.75184086, 5.41006594, 18.10710837],
[ 2.13191737, 5.41006594, 18.10710837],
[ 5.0156756 , 5.41006594, 18.10710837],
[ 0.69003825, 1.24771946, 20.46168711],
[ 3.57379648, 1.24771946, 20.46168711],
[ 6.45755472, 1.24771946, 20.46168711],
[ -0.75184086, 3.74512735, 20.46168711],
[ 2.13191737, 3.74512735, 20.46168711],
[ 5.0156756 , 3.74512735, 20.46168711],
[ -2.19371998, 6.24253524, 20.46168711],
[ 0.69003825, 6.24253524, 20.46168711],
[ 3.57379648, 6.24253524, 20.46168711]]*Angstrom
# Set up configuration
central_region = BulkConfiguration(
bravais_lattice=central_region_lattice,
elements=central_region_elements,
cartesian_coordinates=central_region_coordinates
)
device_configuration = DeviceConfiguration(
central_region,
[left_electrode, right_electrode]
)
# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
#----------------------------------------
# Basis Set
#----------------------------------------
basis_set = [
GGABasis.Hydrogen_DoubleZetaPolarized,
GGABasis.Carbon_DoubleZetaPolarized,
GGABasis.Gold_SingleZetaPolarized,
]
#----------------------------------------
# Exchange-Correlation
#----------------------------------------
exchange_correlation = GGA.PBE
#----------------------------------------
# Numerical Accuracy Settings
#----------------------------------------
left_electrode_numerical_accuracy_parameters = NumericalAccuracyParameters(
grid_mesh_cutoff=100.0*Rydberg,
k_point_sampling=(3, 3, 100),
)
right_electrode_numerical_accuracy_parameters = NumericalAccuracyParameters(
grid_mesh_cutoff=100.0*Rydberg,
k_point_sampling=(3, 3, 100),
)
device_numerical_accuracy_parameters = NumericalAccuracyParameters(
grid_mesh_cutoff=100.0*Rydberg,
k_point_sampling=(3, 3, 100),
)
#----------------------------------------
# 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]]
)
#----------------------------------------
# Electrode Calculators
#----------------------------------------
left_electrode_calculator = LCAOCalculator(
basis_set=basis_set,
exchange_correlation=exchange_correlation,
numerical_accuracy_parameters=left_electrode_numerical_accuracy_parameters,
poisson_solver=left_electrode_poisson_solver,
)
right_electrode_calculator = LCAOCalculator(
basis_set=basis_set,
exchange_correlation=exchange_correlation,
numerical_accuracy_parameters=right_electrode_numerical_accuracy_parameters,
poisson_solver=right_electrode_poisson_solver,
)
#----------------------------------------
# Device Calculator
#----------------------------------------
calculator = DeviceLCAOCalculator(
basis_set=basis_set,
exchange_correlation=exchange_correlation,
numerical_accuracy_parameters=device_numerical_accuracy_parameters,
electrode_calculators=
[left_electrode_calculator, right_electrode_calculator],
)
device_configuration.setCalculator(calculator)
nlprint(device_configuration)
device_configuration.update()
nlsave('/pwork01/p037cjk/ATK_sinbaram/DMB-Au_GOA/DMB-Au_GOA.nc', device_configuration)
device_configuration = OptimizeGeometry(
device_configuration,
max_forces=0.04*eV/Ang,
max_steps=200,
max_step_length=0.4*Ang,
trajectory_filename=None,
disable_stress=True,
optimizer_method=QuasiNewton(),
)
nlsave('/pwork01/p037cjk/ATK_sinbaram/DMB-Au_GOA/DMB-Au_GOA.nc', device_configuration)
nlprint(device_configuration)