# -*- coding: utf-8 -*-
# -------------------------------------------------------------
# Bulk Configuration
# -------------------------------------------------------------

# Set up lattice
lattice = FaceCenteredCubic(5.4306*Angstrom)

# Define elements
elements = [Silicon, Silicon]

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

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

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
#----------------------------------------
# Basis Set
#----------------------------------------
basis_set = [
    LDABasis.Silicon_SingleZetaPolarized,
    ]

for tb09 in (0.9, 1.0, 1.1, 1.2):
    #----------------------------------------
    # Exchange-Correlation
    #----------------------------------------
    exchange_correlation = MGGA.TB09LDA

    k_point_sampling = MonkhorstPackGrid(
        na=25,
        nb=25,
        nc=25,
        )
    numerical_accuracy_parameters = NumericalAccuracyParameters(
        occupation_method=FermiDirac(300.0*Kelvin*boltzmann_constant),
        k_point_sampling=k_point_sampling,
        density_mesh_cutoff=75.0*Hartree,
        )

    calculator = LCAOCalculator(
        basis_set=basis_set,
        exchange_correlation=exchange_correlation,
        numerical_accuracy_parameters=numerical_accuracy_parameters,
        )

    bulk_configuration.setCalculator(calculator)
    nlprint(bulk_configuration)
    bulk_configuration.update()
    nlsave('MGGA_bulk.hdf5', bulk_configuration)

    # -------------------------------------------------------------
    # Bandstructure
    # -------------------------------------------------------------
    bandstructure = Bandstructure(
        configuration=bulk_configuration,
        route=['L', 'G', 'X', 'U', 'K', 'G'],
        points_per_segment=401
        )
    nlsave('MGGA_bulk.hdf5', bandstructure)
