# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------

# Set up lattice
lattice = SimpleCubic(5.6537*Angstrom)

# Define elements
elements = [Arsenic, Arsenic, Gallium, Gallium, Arsenic, Arsenic, Gallium,
            Gallium]

# Define coordinates
fractional_coordinates = [[ 0.75,  0.25,  0.75],
                          [ 0.25,  0.75,  0.75],
                          [ 0.5 ,  0.  ,  0.5 ],
                          [ 0.  ,  0.5 ,  0.5 ],
                          [ 0.25,  0.25,  0.25],
                          [ 0.75,  0.75,  0.25],
                          [ 0.  ,  0.  ,  0.  ],
                          [ 0.5 ,  0.5 ,  0.  ]]

# Set up configuration
bulk_configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

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

calculator = LCAOCalculator(
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    )

bulk_configuration.setCalculator(calculator)
nlprint(bulk_configuration)
bulk_configuration.update()

# -------------------------------------------------------------
# Piezoelectric tensor
# -------------------------------------------------------------
piezoelectric_tensor = PiezoelectricTensor(
    configuration=bulk_configuration,
    kpoints_a=MonkhorstPackGrid(20,5,5),
    kpoints_b=MonkhorstPackGrid(5,20,5),
    kpoints_c=MonkhorstPackGrid(5,5,20),
    )

nlprint(piezoelectric_tensor)
