Skip to content

Commit 71e3b33

Browse files
committed
add antidot system
1 parent 249a9a1 commit 71e3b33

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

src/continuous_famous_systems.jl

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,3 +458,97 @@ function labyrinth_eom(u, p, t)
458458
zdot = sin(x)
459459
return SVector{3}(xdot, ydot, zdot)
460460
end
461+
462+
463+
"""
464+
antidots(u; B = 1.0, d0 = 0.3, c = 0.2)
465+
An antidot "superlattice" is a Hamiltonian system that corresponds to a
466+
smoothened periodic Sinai billiard with disk diameter `d0` and smooth
467+
factor `c` [1].
468+
469+
This version is the two dimensional
470+
classical form of the system, with quadratic equations of motion and
471+
a perpendicular magnetic field. Notice that the equations of motion
472+
are with respect to the velocity instead of momentum, i.e.:
473+
```math
474+
\\begin{aligned}
475+
\\dot{x} &= v_x \\\\
476+
\\dot{y} &= v_y \\\\
477+
\\dot{v_x} &= B*v_y - U_x \\\\
478+
\\dot{v_y} &= -B*v_x - U_X \\\\
479+
\\end{aligned}
480+
```
481+
with ``U`` the potential energy:
482+
```math
483+
U = \\left(\\tfrac{1}{c^4}\\right) \\left[\\tfrac{d_0}{2} + c - r_a\\right]^4
484+
```
485+
if ``r_a = \\sqrt{(x%1)^2 + (y%1)^2} < \\frac{d_0}{2} + c`` and 0
486+
otherwise. I.e. the potential is periodic with period 1 in both ``x, y`` and
487+
normalized such that for energy value of 1 it is a circle of diameter ``d0``.
488+
The magnetic field is also normalized such that for value `B=1` the cyclotron
489+
diameter is 1.
490+
491+
Fo more details see [1].
492+
493+
[1] : G. Datseris *et al*, [arXiv:1711.05833v3](https://arxiv.org/abs/1711.05833v3)
494+
"""
495+
function antidots(u0 = [0.5, 0.5, rand(2)...];
496+
d0 = 0.5, c = 0.2, B = 1.0)
497+
return CDS(antidot_eom, u0, [B, d0, c], antidot_jacob)
498+
end
499+
500+
function antidot_eom(u, p, t)
501+
B, d0, c = p
502+
x, y, vx, vy = u
503+
# Calculate quadrant of (x,y):
504+
U = Uy = Ux = 0.0
505+
xtilde = x - round(x); ytilde = y - round(y)
506+
ρ = sqrt(xtilde^2 + ytilde^2)
507+
# Calculate derivatives and potential:
508+
if ρ < 0.5*d0 + c
509+
sharedfactor = -(4*(c + d0/2 - ρ)^(3))/(c^4*ρ)
510+
Ux = sharedfactor*xtilde # derivatives
511+
Uy = sharedfactor*ytilde
512+
end
513+
Br = 2*√(2)*B # magnetic field with prefactor
514+
return SVector{4}(vx, vy, Br*vy - Ux, -vx*Br - Uy)
515+
end
516+
function antidot_jacob(u, p, t)
517+
B, d0, c = p
518+
x, y, vx, vy = u
519+
xtilde = x - round(x); ytilde = y - round(y)
520+
ρ = sqrt(xtilde^2 + ytilde^2)
521+
# Calculate derivatives and potential:
522+
if ρ < 0.5*d0 + c
523+
Uxx, Uyy, Uxy = antidot_secondderv(xtilde, ytilde, p)
524+
else
525+
Uxx, Uyy, Uxy = 0.0, 0.0, 0.0
526+
end
527+
Br = 2*√(2)*B # magnetic field with prefactor
528+
return SMatrix{4, 4}(0.0, 0, -Uxx, -Uxy, 0, 0, -Uxy, -Uyy,
529+
1, 0, 0, -Br, 0, 1, Br, 0)
530+
end
531+
532+
function antidot_potential(x::Real, y::Real, p)
533+
B, d0, c = p
534+
δ = 4
535+
# Calculate quadrant of (x,y):
536+
xtilde = x - round(x); ytilde = y - round(y)
537+
ρ = sqrt(xtilde^2 + ytilde^2)
538+
# Check distance:
539+
pot = ρ > 0.5*d0 + c ? 0.0 : (1/(c^δ))*(0.5*d0 + c - ρ)^δ
540+
end
541+
542+
function antidot_secondderv(x, y, p)
543+
B, d0, c = p
544+
r = sqrt(x^2 + y^2)
545+
Uxx = _Uxx(x, y, c, d0, r)
546+
Uyy = _Uxx(y, x, c, d0, r)
547+
Uxy = (2c + d0 - 2r)^2 * (2c + d0 + 4r)*x*y / (2c^4*r^3)
548+
return Uxx, Uyy, Uxy
549+
end
550+
551+
function _Uxx(x, y, c, d0, r)
552+
Uxx = (2c + d0 - 2r)^2 * (-2c*y^2 - d0*y^2 + 2*r*(3x^2 + y^2)) /
553+
(2 * (c^4) * r^3)
554+
end

0 commit comments

Comments
 (0)