Ok. The trick, which isn't so difficult in your particular case, is to overwrite the method which defines the symmetryPoints(). The problem comes when you want to plot the band structure; since this is an unsupported feature, VNL will not be happy with the plotting... But we can make custom plot scripts, let me get back to that separately.
So, to define your own symmetry points, you can do this:
def mysym():
return {
"G" : numpy.array((0.0, 0.0, 0.0)),
"K" : numpy.array((1./3., 1./3., 0.0)),
"M" : numpy.array((0.0, 0.5, 0.0)),
"A" : numpy.array((0.0, 0.0, 0.5)),
"H" : numpy.array((1./3., 1./3., 0.5)),
"L" : numpy.array((0.0, 0.5, 0.5)),
}
bulk_configuration.bravaisLattice().symmetryPoints = mysym
bandstructure = Bandstructure(
configuration=bulk_configuration,
route=['G', 'K', 'M', 'G', 'A', 'H', 'L', 'G'],
points_per_segment=100,
bands_above_fermi_level=All
)
nlsave("bandstructure.nc" bandstructure)
The code segment needs to be inserted at the end of the script, or use it as a separate script where you read the bulk_configuration from the NC file of the converged calculation.
A simplification is possible if the symmetry points are coming from an existing lattice class, like Hexagonal:
bulk_configuration._BulkConfiguration__bravais_lattice.symmetryPoints = Hexagonal.symmetryPoints
bandstructure = Bandstructure(
configuration=bulk_configuration,
route=['G', 'K', 'M', 'G', 'A', 'H', 'L', 'G'],
points_per_segment=100,
bands_above_fermi_level=All
)
nlsave("bandstructure.nc" bandstructure)
That is also to be expected, you cannot use VNL at all for this case.
To plot the band structure, use the script attached.
The script is for the general case; for you, if it's specifically the Hexagonal symmetry points you want, you can simplify a bit, skip the symmetry point definition in the script, and just do
...
bs = nlread('bandstructure.nc', Bandstructure)[0]
# Override the symmetry points
bs._Bandstructure__lattice.symmetryPoints = Hexagonal.symmetryPoints
# The bandstructure energies
data = bs.evaluate()
# Setup the axises.
...
Same in the code for the bandstructure calculation, actually, you could have done
bulk_configuration = nlread("strained_graphene.nc")[0]
bulk_configuration._BulkConfiguration__bravais_lattice.symmetryPoints = Hexagonal.symmetryPoints
bandstructure = Bandstructure(
configuration=bulk_configuration,
route=['G', 'K', 'M', 'G', 'A', 'H', 'L', 'G'],
points_per_segment=50,
)
nlsave("bandstructure.nc", bandstructure)
To export the data you can use this:
bs = nlread('bandstructure.nc', Bandstructure)[0]
bs._Bandstructure__lattice.symmetryPoints = Hexagonal.symmetryPoints
nlprint(bs)