# -*- coding: utf-8 -*-

x_range = numpy.linspace(0, 1.0, 11)
print('x_range', x_range)
for x in x_range:
    filename = 'ingaas-x%i.hdf5' % (x*100)

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

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

    # Define elements
    elements = [Indium, Arsenic]

    # 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
    #----------------------------------------
    VirtualCrystalBasis = VirtualCrystalBasisSet([BasisGGASG15.Indium_Medium,BasisGGASG15.Gallium_Medium], x=x)
    basis_set = [
        VirtualCrystalBasis,
        BasisGGASG15.Arsenic_Medium,
        ]

    #----------------------------------------
    # Exchange-Correlation
    #----------------------------------------
    exchange_correlation = GGA.PBES

    k_point_sampling = MonkhorstPackGrid(
        na=9,
        nb=9,
        nc=9,
        )
    numerical_accuracy_parameters = NumericalAccuracyParameters(
        k_point_sampling=k_point_sampling,
        density_mesh_cutoff=80.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(filename, bulk_configuration)

    # -------------------------------------------------------------
    # Optimize Geometry
    # -------------------------------------------------------------
    bulk_configuration = OptimizeGeometry(
        bulk_configuration,
        max_forces=0.05*eV/Ang,
        max_stress=0.1*GPa,
        max_steps=200,
        max_step_length=0.2*Ang,
        trajectory_filename=None,
        optimizer_method=LBFGS(),
        constrain_bravais_lattice=True,
    )
    nlsave(filename, bulk_configuration)
    nlprint(bulk_configuration)

    exchange_correlation = MGGA.TB09LDA

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

    bulk_configuration.setCalculator(calculator)
    bulk_configuration.update()
    nlsave(filename, bulk_configuration)

    # -------------------------------------------------------------
    # Bandstructure
    # -------------------------------------------------------------
    bandstructure = Bandstructure(
        configuration=bulk_configuration,
        route=['L', 'G', 'X'],
        points_per_segment=100
        )
    nlsave(filename, bandstructure)
