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

e_cut_list = range(20,110,10)*Hartree

e_cut = 10*Hartree

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

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

# Define elements
elements = [Copper]

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

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

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
k_point_sampling = MonkhorstPackGrid(
    na=7,
    nb=7,
    nc=7,
    )
numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=k_point_sampling,
    density_mesh_cutoff=e_cut*4,
    )

calculator = PlaneWaveCalculator(
    wave_function_cutoff=e_cut,
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    )
bulk_configuration.setCalculator(calculator)
nlprint(bulk_configuration)
bulk_configuration.update()
nlsave('e-cut-conv.hdf5', bulk_configuration)

for e_cut in e_cut_list:
    old_configuration = nlread('e-cut-conv.hdf5',BulkConfiguration)[-1]
    old_calculator = old_configuration.calculator()
    old_num_acc_par = old_calculator.numericalAccuracyParameters()
    num_acc_par = old_num_acc_par(density_mesh_cutoff=e_cut*4)
    calculator = old_calculator(wave_function_cutoff=e_cut,
                                numerical_accuracy_parameters=num_acc_par)

    bulk_configuration = nlread('e-cut-conv.hdf5',BulkConfiguration)[-1]
    bulk_configuration.setCalculator(calculator,
                                     initial_state=old_configuration)
    nlprint(bulk_configuration)
    bulk_configuration.update()
    nlsave('e-cut-conv.hdf5', bulk_configuration)

    # -------------------------------------------------------------
    # Total Energy
    # -------------------------------------------------------------
    total_energy = TotalEnergy(bulk_configuration)
    nlsave('e-cut-conv.hdf5', total_energy)
    nlprint(total_energy)
