# Set minimal log verbosity
setVerbosity(MinimalLog)

# %% BulkConfiguration

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


# %% Set ForceFieldCalculator

potentialSet = Tersoff_Si_2005()
calculator = TremoloXCalculator(parameters=potentialSet)


# %% Set Calculator

bulk_configuration.setCalculator(calculator)


# %% GrueneisenCoefficient

grueneisen_coefficient = GrueneisenCoefficient(
    configuration=bulk_configuration,
    filename='grueneisen_coefficient_example.hdf5',
    object_id='gc',
    points_per_segment=10,
)
grueneisen_coefficient.update()

print('%15s%30s%30s' % ('Temperature (K)', 'Grueneisen', 'Linear CTE (1/K)'))


temperatures = numpy.linspace(300, 1200, 10) * Kelvin
for temperature in temperatures:
    grueneisen = grueneisen_coefficient.grueneisenCoefficient(temperature)
    linear_thermal_expansion_coefficient = (
        grueneisen_coefficient.linearThermalExpansionCoefficient(temperature)
    )
    print(
        '%15.0f%30.5f%30.5E' % (
            temperature.inUnitsOf(Kelvin),
            grueneisen,
            linear_thermal_expansion_coefficient.inUnitsOf(Kelvin**-1)
        )
    )
