diff --git a/academic_codes/2021.07.19_calculate_reciprocal_lattice_vectors/calculate_reciprocal_lattice_vectors.py b/academic_codes/2021.07.19_calculate_reciprocal_lattice_vectors/calculate_reciprocal_lattice_vectors.py new file mode 100644 index 0000000..14099a4 --- /dev/null +++ b/academic_codes/2021.07.19_calculate_reciprocal_lattice_vectors/calculate_reciprocal_lattice_vectors.py @@ -0,0 +1,40 @@ +import numpy as np +from math import * + +def main(): + a1 = [0, 1] + a2 = [1, 0] + b1, b2 = calculate_two_dimensional_reciprocal_lattice_vectors(a1, a2) + print(b1, b2) + + +def calculate_one_dimensional_reciprocal_lattice_vector(a1): + b1 = 2*pi/a1 + return b1 + + +def calculate_two_dimensional_reciprocal_lattice_vectors(a1, a2): + a1 = np.array(a1) + a2 = np.array(a2) + a1 = np.append(a1, 0) + a2 = np.append(a2, 0) + a3 = np.array([0, 0, 1]) + b1 = 2*pi*np.cross(a2, a3)/np.dot(a1, np.cross(a2, a3)) + b2 = 2*pi*np.cross(a3, a1)/np.dot(a1, np.cross(a2, a3)) + b1 = np.delete(b1, 2) + b2 = np.delete(b2, 2) + return b1, b2 + + +def calculate_three_dimensional_reciprocal_lattice_vectors(a1, a2, a3): + a1 = np.array(a1) + a2 = np.array(a2) + a3 = np.array(a3) + b1 = 2*pi*np.cross(a2, a3)/np.dot(a1, np.cross(a2, a3)) + b2 = 2*pi*np.cross(a3, a1)/np.dot(a1, np.cross(a2, a3)) + b3 = 2*pi*np.cross(a1, a2)/np.dot(a1, np.cross(a2, a3)) + return b1, b2, b3 + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/academic_codes/2021.07.19_calculate_reciprocal_lattice_vectors/calculate_reciprocal_lattice_vectors_with_guan.py b/academic_codes/2021.07.19_calculate_reciprocal_lattice_vectors/calculate_reciprocal_lattice_vectors_with_guan.py new file mode 100644 index 0000000..27391ce --- /dev/null +++ b/academic_codes/2021.07.19_calculate_reciprocal_lattice_vectors/calculate_reciprocal_lattice_vectors_with_guan.py @@ -0,0 +1,22 @@ +import guan +import sympy + +a1 = [0, 1] +a2 = [1, 0] +b1, b2 = guan.calculate_two_dimensional_reciprocal_lattice_vectors(a1, a2) +print(b1, b2, '\n') + +print('bases in the real space') +a = sympy.symbols('a') +a1 = sympy.Matrix(1, 2, [3*a/2, sympy.sqrt(3)*a/2]) +a2 = sympy.Matrix(1, 2, [3*a/2, -sympy.sqrt(3)*a/2]) +print('a1:') +sympy.pprint(a1) +print('a2:') +sympy.pprint(a2) +print('\nbases in the reciprocal space') +b1, b2 = guan.calculate_two_dimensional_reciprocal_lattice_vectors_with_sympy(a1, a2) +print('b1:') +sympy.pprint(b1) +print('b2:') +sympy.pprint(b2) \ No newline at end of file diff --git a/academic_codes/2021.07.19_calculate_reciprocal_lattice_vectors/calculate_reciprocal_lattice_vectors_with_sympy.py b/academic_codes/2021.07.19_calculate_reciprocal_lattice_vectors/calculate_reciprocal_lattice_vectors_with_sympy.py new file mode 100644 index 0000000..dbf0123 --- /dev/null +++ b/academic_codes/2021.07.19_calculate_reciprocal_lattice_vectors/calculate_reciprocal_lattice_vectors_with_sympy.py @@ -0,0 +1,50 @@ +import sympy + + +def main(): + print('bases in the real space') + a = sympy.symbols('a') + a1 = sympy.Matrix(1, 2, [3*a/2, sympy.sqrt(3)*a/2]) + a2 = sympy.Matrix(1, 2, [3*a/2, -sympy.sqrt(3)*a/2]) + print('a1:') + sympy.pprint(a1) + print('a2:') + sympy.pprint(a2) + print('\nbases in the reciprocal space') + b1, b2 = calculate_two_dimensional_reciprocal_lattice_vectors_with_sympy(a1, a2) + print('b1:') + sympy.pprint(b1) + print('b2:') + sympy.pprint(b2) + + +def calculate_one_dimensional_reciprocal_lattice_vector_with_sympy(a1): + b1 = 2*sympy.pi/a1 + return b1 + + +def calculate_two_dimensional_reciprocal_lattice_vectors_with_sympy(a1, a2): + a1 = sympy.Matrix(1, 3, [a1[0], a1[1], 0]) + a2 = sympy.Matrix(1, 3, [a2[0], a2[1], 0]) + a3 = sympy.Matrix(1, 3, [0, 0, 1]) + cross_a2_a3 = a2.cross(a3) + cross_a3_a1 = a3.cross(a1) + b1 = 2*sympy.pi*cross_a2_a3/a1.dot(cross_a2_a3) + b2 = 2*sympy.pi*cross_a3_a1/a1.dot(cross_a2_a3) + b1 = sympy.Matrix(1, 2, [b1[0], b1[1]]) + b2 = sympy.Matrix(1, 2, [b2[0], b2[1]]) + return b1, b2 + + +def calculate_three_dimensional_reciprocal_lattice_vectors_with_sympy(a1, a2, a3): + cross_a2_a3 = a2.cross(a3) + cross_a3_a1 = a3.cross(a1) + cross_a1_a2 = a1.cross(a2) + b1 = 2*sympy.pi*cross_a2_a3/a1.dot(cross_a2_a3) + b2 = 2*sympy.pi*cross_a3_a1/a1.dot(cross_a2_a3) + b3 = 2*sympy.pi*cross_a1_a2/a1.dot(cross_a2_a3) + return b1, b2, b3 + + +if __name__ == '__main__': + main() \ No newline at end of file