# -------------------------------------------------------------
# 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()

# -------------------------------------------------------------
# Hamiltonian derivatives
# -------------------------------------------------------------
hamiltonian_derivatives = HamiltonianDerivatives(
    bulk_configuration,
    repetitions=(5, 5, 1),
    )

# -------------------------------------------------------------
# Dynamical matrix
# -------------------------------------------------------------
dynamical_matrix = DynamicalMatrix(
    bulk_configuration,
    repetitions=(5, 5, 1),
    max_interaction_range=10*Angstrom,
    )

# -------------------------------------------------------------
# Deformation potential
# -------------------------------------------------------------
deformation_potential_1 = DeformationPotential(
    bulk_configuration,
    hamiltonian_derivatives,
    dynamical_matrix,
    symmetry_label='L',
    q_route=['G', 'M', 'L', 'A', 'G', 'K', 'H', 'A'],
    points_per_segment=30,
    electron_bands=[0, 1, 2],
    phonon_modes=[0, 1],
    )

nlsave('graphene.nc', deformation_potential_1)

deformation_potential_2 = DeformationPotential(
    bulk_configuration,
    hamiltonian_derivatives,
    dynamical_matrix,
    kpoint_fractional=[0.0, 0.0, 0.5],
    q_path=[[0.0, 0.0, 0.0], [0.2, 0.0, 0.0], [0.3, 0.0, 0.0], \
            [0.4, 0.0, 0.0], [0.45, 0.0, 0.0], [0.5, 0.0, 0.0]],
    electron_bands=[0, 1, 2],
    phonon_modes=[0, 1],
    )

nlsave('graphene.nc', deformation_potential_2)