from SMW import *

# Setup the reference bulk unit cell configuration.
lattice = FaceCenteredCubic(5.4306*Angstrom)

elements = [Silicon, Silicon]

fractional_coordinates = [[ 0.  ,  0.  ,  0.  ],
                          [ 0.25,  0.25,  0.25]]

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

# Setup the calculator.
basis_set = getattr(LDABasis, 'Silicon_SingleZeta')
calculator = LCAOCalculator(
    basis_set=basis_set,
    exchange_correlation=LDA.PZ,
    numerical_accuracy_parameters=NumericalAccuracyParameters(
        k_point_sampling=MonkhorstPackGrid(1, 1, 1))
)

# Initialize the ChargedPointDefect object.
charged_point_defect = ChargedPointDefect(
    bulk_configuration=bulk_configuration,
    filename='chargedpointdefect.hdf5',
    formation_energy_calculator=calculator,
    object_id='Si_vacancy',
    point_defect=Vacancy(0),
    charge_states=[2, 1, 0, -1, -2],
    supercell_repetitions_list=[(1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4)],
    relax_atomic_coordinates=False,
    dielectric_constant=11.68,
)

# Run the calculation.
charged_point_defect.update()

# Print a summary of results.
nlprint(charged_point_defect)
