Author Topic: Geometry optimization in Z-direction for two probe system  (Read 2818 times)

0 Members and 1 Guest are viewing this topic.

Offline Jin-Kyu Choi

  • Regular QuantumATK user
  • **
  • Posts: 24
  • Country: kr
  • Reputation: 0
    • View Profile
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)


Offline Umberto Martinez

  • Supreme QuantumATK Wizard
  • *****
  • Posts: 479
  • Country: dk
  • Reputation: 26
    • View Profile
Re: Geometry optimization in Z-direction for two probe system
« Reply #1 on: June 17, 2014, 11:49 »
one strategy could be, in the OptimizeGeometry block remove the tick from the cell constraint in the z direction and set the max stress as described here:
http://www.quantumwise.com/documents/tutorials/latest/ATKTutorialDevice/index.html/chap.relax.html