# -------------------------------------------------------------
# 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],
                              [  2.016434286971,  -0.145381165458,   6.055048892488],
                              [  2.041706216937,   1.791571901428,   7.390059732641],
                              [  0.101628682282,   1.737630464589,   8.80411540975 ],
                              [  0.148408430807,  -0.169510385806,  10.137385408199],
                              [  2.10143194895 ,  -0.149195478597,  11.494514511156],
                              [  2.114528647857,   1.719848115881,  12.888963951414],
                              [  0.190841326463,   1.763675162684,  14.18449067944 ],
                              [  0.121327731208,  -0.098827584478,  15.578319940167],
                              [  2.044668177382,  -0.136863117206,  16.929042568229],
                              [  2.050235969426,   1.757785977319,  18.245850508062],
                              [  0.069681685258,   1.909141511531,  19.65712647311 ],
                              [ -0.113877763972,   0.048149363626,  20.994156550441],
                              [  1.865590259113,  -0.049551084619,  22.350296509555],
                              [  2.009663410249,   1.85370923752 ,  23.767667181882],
                              [  0.049137240717,   2.038000110037,  25.103040223946],
                              [ -0.079944850806,   0.13297953392 ,  26.493238465813],
                              [  1.872608130901,   0.02387778566 ,  27.880012659765],
                              [  1.851207751749,   1.930700820986,  29.234036817021],
                              [ -0.091984884736,   1.852677225623,  30.595368317226],
                              [ -0.023475283546,  -0.049913322863,  31.975393052062],
                              [  1.879858465184,   0.168182719329,  33.306303749712],
                              [  1.650990414659,   2.184819187793,  34.65358767029 ],
                              [ -0.237118060174,   2.3213312816  ,  36.02050264461 ],
                              [ -0.406155536694,   0.394155985364,  37.350949046846],
                              [  1.456114549281,   0.384440379066,  38.687787197549],
                              [  1.562815721344,   2.239269110379,  40.095015953875],
                              [ -0.334669678911,   2.124039561303,  41.404230711471],
                              [ -0.213614542809,   0.295581008497,  42.810967752924],
                              [  1.814557869562,   0.17620749236 ,  44.2047963348  ],
                              [  1.838386021514,   2.092429872894,  45.562876431854],
                              [ -0.078194718975,   2.026734675101,  46.970096901005],
                              [ -0.046920390973,   0.037474629241,  48.378333558798],
                              [  1.871971528372,  -0.033892320355,  49.709828528662],
                              [  1.947557004967,   1.909412947625,  51.119117480308],
                              [  0.072384373867,   1.847169572046,  52.439585087926],
                              [  0.010918185597,  -0.01090151496 ,  53.790952952659],
                              [  2.050352626651,  -0.167276970215,  55.026255899368],
                              [  2.010668056959,   1.834352197794,  56.434665821068],
                              [  0.18693983567 ,   1.791445340793,  57.548913946246],
                              [  0.169501428036,  -0.065266913841,  58.842712853748],
                              [  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])
