File:BlochWaves1D.svg

Summary

Description
English: A Bloch wave (bottom) can be broken up into the product of a periodic function (top) and a plane-wave (center). Blue is real part, red is imaginary part. The left side and right side represent the same Bloch wave broken up in two different ways, involving the wave vector k1 (left) or k2 (right). The difference (k1-k2) is a reciprocal lattice vector.
Español: Una onda de Bloch (abajo) puede expresarse como el producto de una función periódica (arriba) y una onda plana (medio). La parte real es azul, y la parte imaginaria en rojo. Los lados izquierdo y derecho representan la misma onda de Bloch expresada de dos formas diferentes, involucrando los vectores de onda k1 (izquierda) o k2 (derecha). La diferencia (k1-k2) es un vector de la red recíproca.
Date
Source Own work
Author Sbyrnes321
SVG development
InfoField
Source code
InfoField

Python code

"""
Steven Byrnes, 2013. This code is released to the public domain.

Written using Python 2.7, Matplotlib 1.2.1
"""
from __future__ import division
import math
from math import pi
import matplotlib.pyplot as plt
import numpy as np

def u1(x):
    """a funny looking function with period 1"""
    fpart = math.modf(x)[0]
    d = abs(fpart - 0.5)
    return ((1j * math.cos(2 * pi * x + 2) + 1 / (d + 0.3) - 3)) * (1+1j)

x_list = np.linspace(0,5,num=5000)
k1 = 1.8
k2 = k1 - 2 * pi

u1_list = np.array([u1(x) for x in x_list])
u1_re_list = u1_list.real
u1_im_list = u1_list.imag

u2_list = u1_list * np.exp(2 * pi * 1j * x_list)
u2_re_list = u2_list.real
u2_im_list = u2_list.imag

exp1_list = np.exp(1j * k1 * x_list)
exp1_re_list = exp1_list.real
exp1_im_list = exp1_list.imag

exp2_list = np.exp(1j * k2 * x_list)
exp2_re_list = exp2_list.real
exp2_im_list = exp2_list.imag

psi1_list = u1_list * exp1_list
psi1_re_list = psi1_list.real
psi1_im_list = psi1_list.imag

psi2_list = u2_list * exp2_list
psi2_re_list = psi2_list.real
psi2_im_list = psi2_list.imag

assert max(abs(psi1_list - psi2_list)) < 1e-10

fig, ((ax1, ax2), (ax3, ax4), (ax5, ax6)) = plt.subplots(3, 2, sharex=True,
                                                         figsize=(6,5))
ax1.set_title('$u_1(x)$')
ax1.plot(x_list, u1_re_list, 'b', x_list, u1_im_list, 'r', linewidth=2)
ax2.set_title('$u_2(x)$')
ax2.plot(x_list, u2_re_list, 'b', x_list, u2_im_list, 'r', linewidth=2)
ax3.set_title('$e^{i k_1 x}$')
ax3.plot(x_list, exp1_re_list, 'b', x_list, exp1_im_list, 'r', linewidth=2)
ax4.set_title('$e^{i k_2 x}$')
ax4.plot(x_list, exp2_re_list, 'b', x_list, exp2_im_list, 'r', linewidth=2)
ax5.set_title('$\psi(x) = u_1(x) e^{i k_1 x}$')
ax5.plot(x_list, psi1_re_list, 'b', x_list, psi1_im_list, 'r', linewidth=2)
ax6.set_title('$\psi(x) = u_2(x) e^{i k_2 x}$')
ax6.plot(x_list, psi2_re_list, 'b', x_list, psi2_im_list, 'r', linewidth=2)
for ax in [ax1, ax2, ax3, ax4, ax5, ax6]:
    ax.xaxis.grid(which='major', linestyle='-')
    ax.xaxis.set_ticklabels([])
    ax.yaxis.set_visible(False)
    ax.axhline(y=0, color='k')
for ax in [ax1, ax2]:
    ax.set_ylim(-3, 3)
fig.subplots_adjust(left=0.05, right=0.95, bottom=0.02, top=0.94, hspace=0.3)
fig.savefig('/home/steve/Desktop/out.svg')

Licensing

I, the copyright holder of this work, hereby publish it under the following license:
Creative Commons CC-Zero This file is made available under the Creative Commons CC0 1.0 Universal Public Domain Dedication.
The person who associated a work with this deed has dedicated the work to the public domain by waiving all of their rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.

Category:CC-Zero#BlochWaves1D.svgCategory:Self-published work
Category:Condensed matter physics Category:Images with Python source code
Category:CC-Zero Category:Condensed matter physics Category:Images with Python source code Category:Self-published work Category:Valid SVG created with Matplotlib code