# -------------------------------------------------------------
# Left Electrode
# -------------------------------------------------------------

# Set up lattice
vector_a = [3.84026316114, 0.0, 0.0]*Angstrom
vector_b = [0.0, 3.84026316114, 0.0]*Angstrom
vector_c = [0.0, 0.0, 5.43095224555]*Angstrom
left_electrode_lattice = UnitCell(vector_a, vector_b, vector_c)

# Define elements
left_electrode_elements = [Silicon, Silicon, Silicon, Silicon]

# Define coordinates
left_electrode_coordinates = [[ 1.920131580572,  0.            ,  0.678869030696],
                              [ 1.920131580572,  1.920131580572,  2.036607092089],
                              [-0.            ,  1.920131580572,  3.394345153482],
                              [-0.            ,  0.            ,  4.752083214875]]*Angstrom

# Set up configuration
left_electrode = BulkConfiguration(
    bravais_lattice=left_electrode_lattice,
    elements=left_electrode_elements,
    cartesian_coordinates=left_electrode_coordinates
    )

# Add external potential
external_potential = AtomicCompensationCharge([
    ('doping_0', 0.000400468130919),
    ('doping_1', -0.000400468130919)
    ])

left_electrode.setExternalPotential(external_potential)

# -------------------------------------------------------------
# Right Electrode
# -------------------------------------------------------------

# Set up lattice
vector_a = [3.84026316114, 0.0, 0.0]*Angstrom
vector_b = [0.0, 3.84026316114, 0.0]*Angstrom
vector_c = [0.0, 0.0, 5.43095224555]*Angstrom
right_electrode_lattice = UnitCell(vector_a, vector_b, vector_c)

# Define elements
right_electrode_elements = [Silicon, Silicon, Silicon, Silicon]

# Define coordinates
right_electrode_coordinates = [[ 1.920131580572,  0.            ,  0.678869030638],
                               [ 1.920131580572,  1.920131580572,  2.036607092031],
                               [-0.            ,  1.920131580572,  3.394345153424],
                               [-0.            ,  0.            ,  4.752083214817]]*Angstrom

# Set up configuration
right_electrode = BulkConfiguration(
    bravais_lattice=right_electrode_lattice,
    elements=right_electrode_elements,
    cartesian_coordinates=right_electrode_coordinates
    )

# Add external potential
external_potential = AtomicCompensationCharge([
    ('doping_0', 0.000400468130919),
    ('doping_1', -0.000400468130919)
    ])

right_electrode.setExternalPotential(external_potential)

# -------------------------------------------------------------
# Central Region
# -------------------------------------------------------------

# Set up lattice
vector_a = [3.84026316114, 0.0, 0.0]*Angstrom
vector_b = [0.0, 3.84026316114, 0.0]*Angstrom
vector_c = [0.0, 0.0, 65.1714269469]*Angstrom
central_region_lattice = UnitCell(vector_a, vector_b, vector_c)

# Define elements
central_region_elements = [Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
                           Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
                           Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
                           Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
                           Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
                           Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
                           Silicon, Silicon, Silicon, Silicon, Silicon, Silicon]

# Define coordinates
central_region_coordinates = [[  1.920131580572,   0.            ,   0.678869030696],
                              [  1.920131580572,   1.920131580572,   2.036607092089],
                              [ -0.            ,   1.920131580572,   3.394345153482],
                              [ -0.            ,   0.            ,   4.752083214875],
                              [  1.920131580572,   0.            ,   6.109821276268],
                              [  1.920131580572,   1.920131580572,   7.467559337661],
                              [ -0.            ,   1.920131580572,   8.825297399054],
                              [ -0.            ,   0.            ,  10.183035460447],
                              [  1.920131580572,   0.            ,  11.54077352184 ],
                              [  1.920131580572,   1.920131580572,  12.898511583233],
                              [ -0.            ,   1.920131580572,  14.256249644626],
                              [ -0.            ,   0.            ,  15.613987706019],
                              [  1.920131580572,   0.            ,  16.971725767412],
                              [  1.920131580572,   1.920131580572,  18.329463828805],
                              [ -0.            ,   1.920131580572,  19.687201890198],
                              [ -0.            ,   0.            ,  21.044939951591],
                              [  1.920131580572,   0.            ,  22.402678012984],
                              [  1.920131580572,   1.920131580572,  23.760416074377],
                              [ -0.            ,   1.920131580572,  25.11815413577 ],
                              [ -0.            ,   0.            ,  26.475892197163],
                              [  1.920131580572,   0.            ,  27.833630258556],
                              [  1.920131580572,   1.920131580572,  29.191368319949],
                              [ -0.            ,   1.920131580572,  30.549106381342],
                              [ -0.            ,   0.            ,  31.906844442735],
                              [  1.920131580572,   0.            ,  33.264582504128],
                              [  1.920131580572,   1.920131580572,  34.622320565521],
                              [ -0.            ,   1.920131580572,  35.980058626914],
                              [ -0.            ,   0.            ,  37.337796688307],
                              [  1.920131580572,   0.            ,  38.6955347497  ],
                              [  1.920131580572,   1.920131580572,  40.053272811093],
                              [ -0.            ,   1.920131580572,  41.411010872486],
                              [ -0.            ,   0.            ,  42.768748933879],
                              [  1.920131580572,   0.            ,  44.126486995272],
                              [  1.920131580572,   1.920131580572,  45.484225056665],
                              [ -0.            ,   1.920131580572,  46.841963118058],
                              [ -0.            ,   0.            ,  48.199701179451],
                              [  1.920131580572,   0.            ,  49.557439240844],
                              [  1.920131580572,   1.920131580572,  50.915177302237],
                              [ -0.            ,   1.920131580572,  52.27291536363 ],
                              [ -0.            ,   0.            ,  53.630653425023],
                              [  1.920131580572,   0.            ,  54.988391486416],
                              [  1.920131580572,   1.920131580572,  56.346129547809],
                              [ -0.            ,   1.920131580572,  57.703867609202],
                              [ -0.            ,   0.            ,  59.061605670595],
                              [  1.920131580572,   0.            ,  60.419343731988],
                              [  1.920131580572,   1.920131580572,  61.777081793381],
                              [ -0.            ,   1.920131580572,  63.134819854774],
                              [ -0.            ,   0.            ,  64.492557916167]]*Angstrom

# Set up configuration
central_region = BulkConfiguration(
    bravais_lattice=central_region_lattice,
    elements=central_region_elements,
    cartesian_coordinates=central_region_coordinates
    )

# Add external potential
external_potential = AtomicCompensationCharge([
    ('doping_0', 0.000400468130919),
    ('doping_1', -0.000400468130919)
    ])

central_region.setExternalPotential(external_potential)

device_configuration = DeviceConfiguration(
    central_region,
    [left_electrode, right_electrode]
    )

# Add tags
device_configuration.addTags('doping_0', [ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12,
                                          13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23])
device_configuration.addTags('doping_1', [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
                                          37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47])
