# Set up silicon crystal.
bulk_configuration = BulkConfiguration(
    bravais_lattice=FaceCenteredCubic(5.4306*Angstrom),
    elements=[Silicon, Silicon],
    cartesian_coordinates=[[ 0.     , 0.     , 0.],
                           [ 1.35765, 1.35765, 1.35765]]*Angstrom
    )
# Setup calculator.
numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=(6, 6, 6),
    )

# Setup DFT calculator using TB09 meta-GGA.
calculator = LCAOCalculator(
    basis_set=LDABasis.DoubleZetaDoublePolarized,
    exchange_correlation=MGGA.TB09LDA,
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    )
bulk_configuration.setCalculator(calculator)
bulk_configuration.update()

# Optical spectrum.
optical_spectrum = OpticalSpectrum(
    configuration=bulk_configuration,
    kpoints=MonkhorstPackGrid(15,15,15),
    energies=numpy.linspace(0,5,101)*eV,
    broadening=0.1*eV,
    bands_below_fermi_level=4,
    bands_above_fermi_level=4,
    )

nlsave('si_optical.hdf5', optical_spectrum)

# Print out the dielectric constant (Experimental value is 11.9).
print('Dielectric Tensor')
print(optical_spectrum.evaluateDielectricConstant()[:,:,0])