# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------
lattice = Hexagonal(2.4612*Angstrom, 6.709*Angstrom)

elements = [Carbon, Carbon]

fractional_coordinates = [[0.0           , 0.0           , 0.5],
                          [0.333333333333, 0.666666666667, 0.5]]

bulk_configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=(5, 5, 1),
    )

calculator = LCAOCalculator(
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    )

bulk_configuration.setCalculator(calculator)
bulk_configuration.update()


# -------------------------------------------------------------
# Mobility
# -------------------------------------------------------------
kpoint_grid = RegularKpointGrid(
    ka_range=[0.32, 0.34],
    kb_range=[0.32, 0.34],
    kc_range=[0.0, 0.0],
    na=15,
    nb=15,
    nc=1,
    )

# Setup energy list.
energies = numpy.linspace(-0.05, 0.05, 100)*eV,

# Setup inverse relaxation time as an array with the same length as the energies.
inverse_relaxation_time = abs(numpy.linspace(-1e12, 1e+12, 100))*Second**-1

mobility_linear_relaxation_time = Mobility(
    configuration=bulk_configuration,
    method=Isotropic,
    energies=energies,
    inverse_relaxation_time=inverse_relaxation_time,
    electron_bands=[3,4],
    kpoints=kpoint_grid,
    temperature=300*Kelvin,
    )

nlsave('graphene_linear_relaxation_time.nc', mobility_linear_relaxation_time)
