diff --git a/PS11_Jung/PS11.py b/PS11_Jung/PS11.py
new file mode 100644
index 0000000000000000000000000000000000000000..bff4718c605afbe3086e64586a76a3cd33d5ad1f
--- /dev/null
+++ b/PS11_Jung/PS11.py
@@ -0,0 +1,92 @@
+import numpy as np
+import itertools
+import matplotlib.pyplot as plt
+from tqdm import tqdm
+
+N = 64
+d = 3
+sig = 1
+eps = 1
+L = 6 * sig
+m = 1
+tau = np.sqrt(m * sig**2 / eps)
+a = 1.5 * sig
+k_BT = 1.5 * eps
+dt = 0.002 * tau
+gamma = 1
+
+# create lattice
+n = int(np.round(N**(1/3)))
+x = np.linspace(-(n-1) / 2, (n-1) / 2, n)
+r0 = a * np.array(list(itertools.product(x, repeat=3)))
+
+p0 = np.random.normal(0, np.sqrt(m * k_BT), (N, d))
+
+t_max = 100 * tau
+t = np.arange(0, t_max, dt)
+
+def BAOAB(force, x0, p0, m, dt, L):
+    assert(x0.shape == p0.shape)
+
+    x = np.zeros((len(t), *x0.shape))
+    p = np.zeros((len(t), *p0.shape))
+    U = np.zeros(len(t))
+
+    x[0] = x0
+    p[0] = p0
+    xi_2 = np.sqrt(k_BT*(1 - np.exp(-2 * gamma * dt)))
+
+    f, U[0] = force(x[0], L)
+
+    for i in tqdm(range(1, len(t))):
+        r = np.random.normal(0,1,(N,d))
+        p[i] = p[i-1] + 1/2 * f * dt
+        x[i] = x[i-1] + p[i] / (2*m) * dt
+        p[i] = np.exp(-gamma*dt) * p[i] + xi_2 * r/np.sqrt(m)
+        x[i] = x[i] + (dt/2) * p[i]/m
+
+        # enforce periodic boundaries
+        x[i] -= (x[i] > L / 2) * L
+        x[i] += (x[i] < -L / 2) * L
+
+        f, U[i] = force(x[i], L)
+        p[i] = p[i] + 1/2 * f * dt
+
+    return x, p, U
+
+def LJ(r, L):
+    N = len(r)
+    f = np.zeros(r.shape)
+    U = 0
+
+    sig6 = sig**6
+
+    for i in range(1, N):
+        dr = r[i:] - r[:N-i]
+        dr -= (dr > L / 2) * L
+        dr += (dr < -L / 2) * L
+
+        r2 = 1 / np.sum(dr**2, axis=1) # scalar product per element
+        r6 = r2 * r2 * r2
+
+        U += 4 * eps * sig6 * np.sum(r6 * (sig6 * r6 - 1))
+        fval = np.transpose(-24 * eps * sig6 * r6 * r2 * (2 * sig6 * r6 - 1) * dr.T) # cursed scalar multiplication
+
+        f[:N-i] += fval
+        f[i:] -= fval
+
+    return f, U
+
+# E = 1 / (2 * m) * np.sum(p**2, axis=(1,2)) + U1
+# plt.plot(E)
+# plt.show()
+
+# a)
+r, p, U1 = BAOAB(LJ, r0, p0, m, dt, L)
+equil_t = int(20*tau)
+r = r[equil_t:]
+ms_displacement = np.average(np.linalg.norm(r - r0, axis=2)**2, axis=1)
+plt.plot(ms_displacement)
+plt.yscale('log')
+plt.xscale('log')
+plt.show()
\ No newline at end of file