) in ATK and it worked as expected. However, I adapted the code to calculate the Bloch state velocity in silicene but the script gives "v = 0.00e+00 m/s". I'll be happy if you could say what I'm doing wrong in my code:
# Set up lattice
vector_a = [10.0, 0.0, 0.0]*Angstrom
vector_b = [0.0, 27.52, 0.0]*Angstrom
vector_c = [0.0, 0.0, 3.79319126858]*Angstrom
lattice = UnitCell(vector_a, vector_b, vector_c)
# Define elements
elements = [Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
Silicon, Silicon, Silicon, Hydrogen, Hydrogen]
# Define coordinates
fractional_coordinates = [[ 0.485470918896, 0.182646995637, 0. ],
[ 0.548086613279, 0.21992408583 , 0.5 ],
[ 0.496179292117, 0.300404683423, 0.5 ],
[ 0.551593763211, 0.340364254506, 0. ],
[ 0.494273148721, 0.420353418505, 0. ],
[ 0.549308621502, 0.460381450687, 0.5 ],
[ 0.494925490948, 0.540461848335, 0.5 ],
[ 0.552265117634, 0.579881857971, 0. ],
[ 0.492744063004, 0.659628645016, 0. ],
[ 0.542868494137, 0.699147125462, 0.5 ],
[ 0.503460722888, 0.751973737953, 0.5 ],
[ 0.508748721009, 0.128517272588, 0. ]]
# Set up configuration
bulk_configuration = BulkConfiguration(
bravais_lattice=lattice,
elements=elements,
fractional_coordinates=fractional_coordinates
)
numerical_accuracy_parameters = NumericalAccuracyParameters(
interaction_max_range=10.0*Angstrom,
k_point_sampling=(10, 10, 10),
)
calculator = LCAOCalculator(
numerical_accuracy_parameters=numerical_accuracy_parameters,
)
bulk_configuration.setCalculator(calculator)
nlprint(bulk_configuration)
bulk_configuration.update()
# Fractional k-point, slighly displaced away from the Dirac point.
k = [1./3, 1./3, 0 ]
# Calculate the velocity of the band with band-index 3 (valence band)
velocity = calculateVelocity(bulk_configuration, kpoint=k, spin=Spin.Up, band_indices=[3])
# Take the velocity component along the X cartesian direction.
velocity = velocity[0][0][0]
# Print the result.
print 'Fermi velocity of silicene:'
print 'v = %.2e m/s' %abs(velocity.inUnitsOf(Meter/Second))