# Set up a Tausonite configuration.
fractional_coordinates = [[ 0.5,  0.5,  0.5],
                          [ 0. ,  0. ,  0. ],
                          [ 0.5,  0. ,  0. ],
                          [ 0. ,  0.5,  0. ],
                          [ 0. ,  0. ,  0.5]]

bulk_configuration = BulkConfiguration(
    bravais_lattice=SimpleCubic(3.90528 * Angstrom),
    elements=[Strontium, Titanium, Oxygen, Oxygen, Oxygen],
    fractional_coordinates=fractional_coordinates
)

# Instantiate a generator for BulkConfiguration.
generator = GrainBoundaryGenerator(
    rotation_axis=[0, 0, 1],
    rotation_angle=36.8698976458 * Degrees,
    sigma=5,
    boundary_plane=[-2, -1, 0],
    overlap_distance=0.5 * Angstrom,
    reduce_by_symmetry=True,
)

# Generate a grain boundary in a BulkConfiguration, with strontium as the origin_index atom.
configuration_1 = generator.bulkConfiguration(
    bulk_configuration,
    repeats=[1, 1, 1],
    origin_index=0
)

# Generate a grain boundary in a BulkConfiguration, with titanium as the origin_index atom.
configuration_2 = generator.bulkConfiguration(
    bulk_configuration,
    repeats=[1, 1, 1],
    origin_index=1
)

# Instantiate a generator for DeviceConfiguration.
generator = GrainBoundaryGenerator(
    rotation_axis=[0, 0, 1],
    rotation_angle=36.8698976458 * Degrees,
    sigma=5,
    boundary_plane=[-2, -1, 0],
    minimum_electrode_length=5.0 * Angstrom,
    buffer_layer=5.0 * Angstrom,
    overlap_distance=0.5 * Angstrom,
    reduce_by_symmetry=True,
)

# Generate a grain boundary in a DeviceConfiguration, with strontium as the origin_index atom.
configuration_3 = generator.deviceConfiguration(
    bulk_configuration,
    origin_index=0
)
