# -*- coding: utf-8 -*-
setVerbosity(MinimalLog)

# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

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

# Define elements
elements = [Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon, Carbon]

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

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

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
k_point_sampling = MonkhorstPackGrid(
    na=8,
    nb=8,
    nc=8,
    )
numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=k_point_sampling,
    density_mesh_cutoff=55.0*Hartree,
    )

calculator = LCAOCalculator(
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    )

bulk_configuration.setCalculator(calculator)

# -------------------------------------------------------------
# Charged Point Defect
# -------------------------------------------------------------
# Defect
point_defect = Substitutional(
    element=Boron,
    site_index=0)

# Charge states
charge_states = [-1, 0, 1]

# Atomic chemical potentials
atomic_chemical_potentials = {
    Carbon : None,
    Boron : -959.61866/12.0*eV,
}

# Supercell repetion.
supercell_repetitions_list = [
    [1, 1, 1],
    [2, 2, 2],
    [3, 3, 3],
    [4, 4, 4]
]

# File name.
filename = u'cpd_b-in-c.hdf5'

charged_point_defect = ChargedPointDefect(
    bulk_configuration=bulk_configuration,
    formation_energy_calculator=calculator,
    filename=filename,
    object_id='charged_point_defect',
    point_defect=point_defect,
    charge_states=charge_states,
    atomic_chemical_potentials=atomic_chemical_potentials,
    supercell_repetitions_list=supercell_repetitions_list,
    relax_atomic_coordinates=True,
    dielectric_constant=6.28186,
    log_filename_prefix='charged_point_defect_',
    number_of_processes_per_task=None,
)
charged_point_defect.update()
