# -*- coding: utf-8 -*-
# -------------------------------------------------------------
# Two-probe Configuration
# -------------------------------------------------------------

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

# Set up lattice
vector_a = [3.84001408591, 0.0, 0.0]*Angstrom
vector_b = [0.0, 3.84001408591, 0.0]*Angstrom
vector_c = [0.0, 0.0, 5.4306]*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.920007042956,  0.            ,  0.678625      ],
                              [ 1.920007042956,  1.920007042956,  2.036275      ],
                              [ 0.            ,  1.920007042956,  3.393925      ],
                              [ 0.            ,  0.            ,  4.751575      ]]*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([
    (Silicon, -0.000400390214211)
    ])

left_electrode.setExternalPotential(external_potential)

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

# Set up lattice
vector_a = [3.84001408591, 0.0, 0.0]*Angstrom
vector_b = [0.0, 3.84001408591, 0.0]*Angstrom
vector_c = [0.0, 0.0, 5.4306]*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.920007042956,  0.            ,  0.679025      ],
                               [ 1.920007042956,  1.920007042956,  2.036675      ],
                               [ 0.            ,  1.920007042956,  3.394325      ],
                               [ 0.            ,  0.            ,  4.751975      ]]*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([
    (Silicon, 0.000400390214211)
    ])

right_electrode.setExternalPotential(external_potential)

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

# Set up lattice
vector_a = [3.84001408591, 0.0, 0.0]*Angstrom
vector_b = [0.0, 3.84001408591, 0.0]*Angstrom
vector_c = [0.0, 0.0, 65.1668]*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.920007042956,   0.            ,   0.678625      ],
                              [  1.920007042956,   1.920007042956,   2.036275      ],
                              [  0.            ,   1.920007042956,   3.393925      ],
                              [  0.            ,   0.            ,   4.751575      ],
                              [  1.920007042956,   0.            ,   6.109225      ],
                              [  1.920007042956,   1.920007042956,   7.466875      ],
                              [  0.            ,   1.920007042956,   8.824525      ],
                              [  0.            ,   0.            ,  10.182175      ],
                              [  1.920007042956,   0.            ,  11.539825      ],
                              [  1.920007042956,   1.920007042956,  12.897475      ],
                              [  0.            ,   1.920007042956,  14.255125      ],
                              [  0.            ,   0.            ,  15.612775      ],
                              [  1.920007042956,   0.            ,  16.970425      ],
                              [  1.920007042956,   1.920007042956,  18.328075      ],
                              [  0.            ,   1.920007042956,  19.685725      ],
                              [  0.            ,   0.            ,  21.043375      ],
                              [  1.920007042956,   0.            ,  22.401025      ],
                              [  1.920007042956,   1.920007042956,  23.758675      ],
                              [  0.            ,   1.920007042956,  25.116325      ],
                              [  0.            ,   0.            ,  26.473975      ],
                              [  1.920007042956,   0.            ,  27.831625      ],
                              [  1.920007042956,   1.920007042956,  29.189275      ],
                              [  0.            ,   1.920007042956,  30.546925      ],
                              [  0.            ,   0.            ,  31.904575      ],
                              [  1.920007042956,   0.            ,  33.262225      ],
                              [  1.920007042956,   1.920007042956,  34.619875      ],
                              [  0.            ,   1.920007042956,  35.977525      ],
                              [  0.            ,   0.            ,  37.335175      ],
                              [  1.920007042956,   0.            ,  38.692825      ],
                              [  1.920007042956,   1.920007042956,  40.050475      ],
                              [  0.            ,   1.920007042956,  41.408125      ],
                              [  0.            ,   0.            ,  42.765775      ],
                              [  1.920007042956,   0.            ,  44.123425      ],
                              [  1.920007042956,   1.920007042956,  45.481075      ],
                              [  0.            ,   1.920007042956,  46.838725      ],
                              [  0.            ,   0.            ,  48.196375      ],
                              [  1.920007042956,   0.            ,  49.554025      ],
                              [  1.920007042956,   1.920007042956,  50.911675      ],
                              [  0.            ,   1.920007042956,  52.269325      ],
                              [  0.            ,   0.            ,  53.626975      ],
                              [  1.920007042956,   0.            ,  54.984625      ],
                              [  1.920007042956,   1.920007042956,  56.342275      ],
                              [  0.            ,   1.920007042956,  57.699925      ],
                              [  0.            ,   0.            ,  59.057575      ],
                              [  1.920007042956,   0.            ,  60.415225      ],
                              [  1.920007042956,   1.920007042956,  61.772875      ],
                              [  0.            ,   1.920007042956,  63.130525      ],
                              [  0.            ,   0.            ,  64.488175      ]]*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.000400390214211),
    ('doping_1', 0.000400390214211)
    ])

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])

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
#----------------------------------------
# Basis Set
#----------------------------------------

hydrogen_onsite_term = SlaterKosterOnsiteParameters(
    element=PeriodicTable.Hydrogen,
    angular_momenta=[ 0 ],
    occupations=[ 1.0 ],
    filling_method=SphericalSymmetric,
    ionization_potential=[ 0.6*eV ],
    onsite_hartree_shift=[ 10.89*eV ],
    onsite_spin_split=[[0.0]]*eV,
    onsite_spin_orbit_split=[0.0]*eV,
    vacuum_level=0.0*Hartree,
    )

silicon_onsite_term = SlaterKosterOnsiteParameters(
    element=PeriodicTable.Silicon,
    angular_momenta=[ 0 , 1 , 0 ],
    occupations=[ 1.239 , 2.679 , 0.082 ],
    filling_method=SphericalSymmetric,
    ionization_potential=[ -4.2*eV , 1.715*eV , 6.685*eV ],
    onsite_hartree_shift=[ 7.1173688*eV , 7.1173688*eV , 7.1173688*eV ],
    onsite_spin_split=[[-0.5613, -0.43065, -0.5613], [-0.43065, -0.3727, -0.43065], [-0.5613, -0.43065, -0.5613]]*eV,
    onsite_spin_orbit_split=[0.0, 0.02933333333333333, 0.0]*eV,
    vacuum_level=0.0*Hartree,
    )

basis_set = SlaterKosterTable(
    hydrogen=hydrogen_onsite_term,
    silicon=silicon_onsite_term,
    h_si_sss=[
        (1.36*Angstrom, -3.5*eV),
        (1.394*Angstrom, -3.5*eV),
        (1.428*Angstrom, -3.5*eV),
        (1.462*Angstrom, -3.5*eV),
        (1.496*Angstrom, -3.5*eV),
        (1.53*Angstrom, -3.5*eV),
        (1.564*Angstrom, -3.5*eV),
        (1.598*Angstrom, -3.5*eV),
        (1.632*Angstrom, -3.5*eV),
        (1.666*Angstrom, -3.5*eV),
        (1.7*Angstrom, -3.5*eV),
        (1.734*Angstrom, -3.5*eV),
        (1.768*Angstrom, -3.5*eV),
        (1.802*Angstrom, -3.5*eV),
        (1.836*Angstrom, -3.5*eV),
        (1.87*Angstrom, -3.5*eV),
        (1.904*Angstrom, -3.5*eV),
        (1.938*Angstrom, -3.5*eV),
        (1.972*Angstrom, -3.5*eV),
        (2.006*Angstrom, -3.5*eV),
        (2.04*Angstrom, -3.5*eV),
        (2.2*Angstrom, 0.0*eV),
    ],
    si_si_sps=[
        (2.11613307415*Angstrom, 3.06273626133*eV),
        (2.13964566386*Angstrom, 2.99579322749*eV),
        (2.16315825357*Angstrom, 2.93102123308*eV),
        (2.18667084329*Angstrom, 2.86832740396*eV),
        (2.210183433*Angstrom, 2.80762377963*eV),
        (2.23369602271*Angstrom, 2.74882700463*eV),
        (2.25720861242*Angstrom, 2.69185804219*eV),
        (2.28072120214*Angstrom, 2.63664190847*eV),
        (2.30423379185*Angstrom, 2.58310742574*eV),
        (2.32774638156*Angstrom, 2.53118699284*eV),
        (2.35125897127*Angstrom, 2.48081637168*eV),
        (2.37477156099*Angstrom, 2.43193448846*eV),
        (2.3982841507*Angstrom, 2.38448324844*eV),
        (2.42179674041*Angstrom, 2.33840736326*eV),
        (2.44530933013*Angstrom, 2.29365418979*eV),
        (2.46882191984*Angstrom, 2.25017357976*eV),
        (2.49233450955*Angstrom, 2.20791773913*eV),
        (2.51584709926*Angstrom, 2.16684109676*eV),
        (2.53935968898*Angstrom, 2.12690018148*eV),
        (2.56287227869*Angstrom, 2.08805350701*eV),
        (2.5863848684*Angstrom, 2.0502614642*eV),
        (3.09542439656*Angstrom, 0.0*eV),
    ],
    h_si_sps=[
        (1.36*Angstrom, 4.5*eV),
        (1.394*Angstrom, 4.5*eV),
        (1.428*Angstrom, 4.5*eV),
        (1.462*Angstrom, 4.5*eV),
        (1.496*Angstrom, 4.5*eV),
        (1.53*Angstrom, 4.5*eV),
        (1.564*Angstrom, 4.5*eV),
        (1.598*Angstrom, 4.5*eV),
        (1.632*Angstrom, 4.5*eV),
        (1.666*Angstrom, 4.5*eV),
        (1.7*Angstrom, 4.5*eV),
        (1.734*Angstrom, 4.5*eV),
        (1.768*Angstrom, 4.5*eV),
        (1.802*Angstrom, 4.5*eV),
        (1.836*Angstrom, 4.5*eV),
        (1.87*Angstrom, 4.5*eV),
        (1.904*Angstrom, 4.5*eV),
        (1.938*Angstrom, 4.5*eV),
        (1.972*Angstrom, 4.5*eV),
        (2.006*Angstrom, 4.5*eV),
        (2.04*Angstrom, 4.5*eV),
        (2.2*Angstrom, 0.0*eV),
    ],
    h_si_ss1s=[
        (1.36*Angstrom, 0.0*eV),
        (1.394*Angstrom, 0.0*eV),
        (1.428*Angstrom, 0.0*eV),
        (1.462*Angstrom, 0.0*eV),
        (1.496*Angstrom, 0.0*eV),
        (1.53*Angstrom, 0.0*eV),
        (1.564*Angstrom, 0.0*eV),
        (1.598*Angstrom, 0.0*eV),
        (1.632*Angstrom, 0.0*eV),
        (1.666*Angstrom, 0.0*eV),
        (1.7*Angstrom, 0.0*eV),
        (1.734*Angstrom, 0.0*eV),
        (1.768*Angstrom, 0.0*eV),
        (1.802*Angstrom, 0.0*eV),
        (1.836*Angstrom, 0.0*eV),
        (1.87*Angstrom, 0.0*eV),
        (1.904*Angstrom, 0.0*eV),
        (1.938*Angstrom, 0.0*eV),
        (1.972*Angstrom, 0.0*eV),
        (2.006*Angstrom, 0.0*eV),
        (2.04*Angstrom, 0.0*eV),
        (2.2*Angstrom, 0.0*eV),
    ],
    si_si_ps1s=[
        (2.11613307415*Angstrom, 2.87333329803*eV),
        (2.13964566386*Angstrom, 2.81053009468*eV),
        (2.16315825357*Angstrom, 2.74976367131*eV),
        (2.18667084329*Angstrom, 2.69094689721*eV),
        (2.210183433*Angstrom, 2.63399725147*eV),
        (2.23369602271*Angstrom, 2.57883653341*eV),
        (2.25720861242*Angstrom, 2.52539059397*eV),
        (2.28072120214*Angstrom, 2.47358908641*eV),
        (2.30423379185*Angstrom, 2.42336523469*eV),
        (2.32774638156*Angstrom, 2.3746556182*eV),
        (2.35125897127*Angstrom, 2.3273999714*eV),
        (2.37477156099*Angstrom, 2.28154099735*eV),
        (2.3982841507*Angstrom, 2.23702419396*eV),
        (2.42179674041*Angstrom, 2.19379769196*eV),
        (2.44530933013*Angstrom, 2.15181210374*eV),
        (2.46882191984*Angstrom, 2.11102038222*eV),
        (2.49233450955*Angstrom, 2.07137768904*eV),
        (2.51584709926*Angstrom, 2.0328412712*eV),
        (2.53935968898*Angstrom, 1.99537034585*eV),
        (2.56287227869*Angstrom, 1.95892599226*eV),
        (2.5863848684*Angstrom, 1.92347105074*eV),
        (3.09542439656*Angstrom, 0.0*eV),
    ],
    si_si_pps=[
        (2.11613307415*Angstrom, 3.35339506173*eV),
        (2.13964566386*Angstrom, 3.28009902186*eV),
        (2.16315825357*Angstrom, 3.20918005671*eV),
        (2.18667084329*Angstrom, 3.14053647821*eV),
        (2.210183433*Angstrom, 3.07407197827*eV),
        (2.23369602271*Angstrom, 3.00969529086*eV),
        (2.25720861242*Angstrom, 2.94731987847*eV),
        (2.28072120214*Angstrom, 2.88686364119*eV),
        (2.30423379185*Angstrom, 2.8282486464*eV),
        (2.32774638156*Angstrom, 2.77140087746*eV),
        (2.35125897127*Angstrom, 2.71625*eV),
        (2.37477156099*Angstrom, 2.6627291442*eV),
        (2.3982841507*Angstrom, 2.61077470204*eV),
        (2.42179674041*Angstrom, 2.56032613818*eV),
        (2.44530933013*Angstrom, 2.51132581361*eV),
        (2.46882191984*Angstrom, 2.46371882086*eV),
        (2.49233450955*Angstrom, 2.41745283019*eV),
        (2.51584709926*Angstrom, 2.37247794567*eV),
        (2.53935968898*Angstrom, 2.32874657064*eV),
        (2.56287227869*Angstrom, 2.28621328171*eV),
        (2.5863848684*Angstrom, 2.24483471074*eV),
        (3.09542439656*Angstrom, 0.0*eV),
    ],
    si_si_ppp=[
        (2.11613307415*Angstrom, -0.882716049383*eV),
        (2.13964566386*Angstrom, -0.863422291994*eV),
        (2.16315825357*Angstrom, -0.844754253308*eV),
        (2.18667084329*Angstrom, -0.826685165915*eV),
        (2.210183433*Angstrom, -0.809189678588*eV),
        (2.23369602271*Angstrom, -0.792243767313*eV),
        (2.25720861242*Angstrom, -0.775824652778*eV),
        (2.28072120214*Angstrom, -0.759910723775*eV),
        (2.30423379185*Angstrom, -0.744481466056*eV),
        (2.32774638156*Angstrom, -0.729517396184*eV),
        (2.35125897127*Angstrom, -0.715*eV),
        (2.37477156099*Angstrom, -0.700911675326*eV),
        (2.3982841507*Angstrom, -0.687235678585*eV),
        (2.42179674041*Angstrom, -0.673956075031*eV),
        (2.44530933013*Angstrom, -0.661057692308*eV),
        (2.46882191984*Angstrom, -0.648526077098*eV),
        (2.49233450955*Angstrom, -0.63634745461*eV),
        (2.51584709926*Angstrom, -0.624508690715*eV),
        (2.53935968898*Angstrom, -0.612997256516*eV),
        (2.56287227869*Angstrom, -0.601801195186*eV),
        (2.5863848684*Angstrom, -0.590909090909*eV),
        (3.09542439656*Angstrom, 0.0*eV),
    ],
    si_si_sss=[
        (2.11613307415*Angstrom, -2.56172839506*eV),
        (2.13964566386*Angstrom, -2.50573602222*eV),
        (2.16315825357*Angstrom, -2.45155954631*eV),
        (2.18667084329*Angstrom, -2.3991212857*eV),
        (2.210183433*Angstrom, -2.34834766863*eV),
        (2.23369602271*Angstrom, -2.29916897507*eV),
        (2.25720861242*Angstrom, -2.25151909722*eV),
        (2.28072120214*Angstrom, -2.20533531725*eV),
        (2.30423379185*Angstrom, -2.16055810079*eV),
        (2.32774638156*Angstrom, -2.11713090501*eV),
        (2.35125897127*Angstrom, -2.075*eV),
        (2.37477156099*Angstrom, -2.03411430252*eV),
        (2.3982841507*Angstrom, -1.99442522107*eV),
        (2.42179674041*Angstrom, -1.95588651145*eV),
        (2.44530933013*Angstrom, -1.91845414201*eV),
        (2.46882191984*Angstrom, -1.8820861678*eV),
        (2.49233450955*Angstrom, -1.84674261303*eV),
        (2.51584709926*Angstrom, -1.81238536117*eV),
        (2.53935968898*Angstrom, -1.77897805213*eV),
        (2.56287227869*Angstrom, -1.74648598603*eV),
        (2.5863848684*Angstrom, -1.71487603306*eV),
        (3.09542439656*Angstrom, 0.0*eV),
    ],
    )


#----------------------------------------
# Numerical Accuracy Settings
#----------------------------------------
left_electrode_k_point_sampling = MonkhorstPackGrid(
    na=7,
    nb=7,
    nc=100,
    )
left_electrode_numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=left_electrode_k_point_sampling,
    density_mesh_cutoff=10.0*Hartree,
    )

right_electrode_k_point_sampling = MonkhorstPackGrid(
    na=7,
    nb=7,
    nc=100,
    )
right_electrode_numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=right_electrode_k_point_sampling,
    density_mesh_cutoff=10.0*Hartree,
    )

device_k_point_sampling = MonkhorstPackGrid(
    na=7,
    nb=7,
    nc=100,
    )
device_numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=device_k_point_sampling,
    density_mesh_cutoff=10.0*Hartree,
    )

#----------------------------------------
# Iteration Control Settings
#----------------------------------------
left_electrode_iteration_control_parameters = IterationControlParameters(
    tolerance=4e-05,
    )

right_electrode_iteration_control_parameters = IterationControlParameters(
    tolerance=4e-05,
    )

device_iteration_control_parameters = IterationControlParameters(
    tolerance=4e-05,
    )

#----------------------------------------
# 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
#----------------------------------------
non_equilibrium_contour = RealAxisContour(
    real_axis_point_density=0.0001*Hartree,
    real_axis_infinitesimal=0.0001*Hartree,
    )
contour_parameters = ContourParameters(
    non_equilibrium_contour=non_equilibrium_contour,
    )

#----------------------------------------
# Electrode Calculators
#----------------------------------------
left_electrode_calculator = SlaterKosterCalculator(
    basis_set=basis_set,
    numerical_accuracy_parameters=left_electrode_numerical_accuracy_parameters,
    iteration_control_parameters=left_electrode_iteration_control_parameters,
    poisson_solver=left_electrode_poisson_solver,
    )

right_electrode_calculator = SlaterKosterCalculator(
    basis_set=basis_set,
    numerical_accuracy_parameters=right_electrode_numerical_accuracy_parameters,
    iteration_control_parameters=right_electrode_iteration_control_parameters,
    poisson_solver=right_electrode_poisson_solver,
    )

#----------------------------------------
# Device Calculator
#----------------------------------------
calculator = DeviceSlaterKosterCalculator(
    basis_set=basis_set,
    numerical_accuracy_parameters=device_numerical_accuracy_parameters,
    iteration_control_parameters=device_iteration_control_parameters,
    contour_parameters=contour_parameters,
    electrode_calculators=
        [left_electrode_calculator, right_electrode_calculator],
    electrode_voltages=( -0.2*Volt, 0.2*Volt),
    )

device_configuration.setCalculator(calculator)
nlprint(device_configuration)
device_configuration.update()
nlsave('xloe_V-0.4_bulk.hdf5', device_configuration)

# -------------------------------------------------------------
# Dynamical Matrix
# -------------------------------------------------------------
dynamical_matrix = nlread('dynmat_bulk.hdf5',DynamicalMatrix)[-1]

# -------------------------------------------------------------
# Hamiltonian Derivatives
# -------------------------------------------------------------
hamiltonian_derivatives = nlread('dHdR_bulk.hdf5',HamiltonianDerivatives)[-1]

# -------------------------------------------------------------
# Inelastic Transmission Spectrum
# -------------------------------------------------------------
kpoints = RegularKpointGrid(
    ka_range=[-0.2, 0.2],
    kb_range=[-0.2, 0.2],
    kc_range=[0.0, 0.0],
    na=3,
    nb=3,
    nc=1,
    )

qpoints = RegularKpointGrid(
    ka_range=[-0.5, 0.5],
    kb_range=[-0.5, 0.5],
    kc_range=[0.0, 0.0],
    na=9,
    nb=9,
    nc=1,
    )

inelastic_transmission_spectrum = InelasticTransmissionSpectrum(
    configuration=device_configuration,
    bulk_dynamical_matrix=dynamical_matrix,
    bulk_hamiltonian_derivatives=hamiltonian_derivatives,
    energies=numpy.linspace(-0.5, 0.5, 25)*eV,
    kpoints=kpoints,
    qpoints=qpoints,
    self_energy_calculator=RecursionSelfEnergy(),
    energy_zero_parameter=AverageFermiLevel,
    infinitesimal=1e-06*eV,
    phonon_modes=All,
    method=XLOE,
    spectral_representation=True,
    electrode_extensions=[0, 0],
)
nlsave('xloe_V-0.4_bulk.hdf5', inelastic_transmission_spectrum)
