# 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
)

# Setting up the reference calculator.
# A cheap force-field calculator is used so that this example script
# does not take too long.
potentialSet = Tersoff_Si_1988()
reference_calculator = TremoloXCalculator(parameters=potentialSet)
bulk_configuration.setCalculator(reference_calculator)

# Setting up the calculator that should be validated against the reference calcultor.
potentialSet = MTP_Si_2019b()
calculator = TremoloXCalculator(parameters=potentialSet)

crystal_property_validation = CrystalPropertyValidation(
    bulk_configuration,
    calculator,
    calculate_reference_data=True,
    calculate_volume_energy_plot=True,
    calculate_elastic_constants=True,
    calculate_phonon_bandstructure=True,
    calculate_delta_test=True,
    optimize_geometry_parameters=None,
    log_filename_prefix=None,
    dynamical_matrix_filename='dynamical_matrix.hdf5',
    dynamical_matrix_repetitions=(5, 5, 5),
)

nlsave('crystal_property_validation.hdf5', crystal_property_validation)
nlprint(crystal_property_validation)
crystal_property_validation.plotEnergyvsVolume()
