Transforming & Combining Skyrmions
Once you have a skyrmion, there's a lot you can do with it. Suppose you've made a B=2
torus like so
using Skyrmions3D
toroidal_skyrmion = Skyrmion(30,0.2)
p(z) = z^2
q(z) = 1
make_rational_map!(toroidal_skyrmion, p, q)
It's important here to remember that functions ending in !
modify the skyrmion, while functions with no !
will return a new skyrmion. With that in mind, you could now apply a...
Translation
Translations take in a skyrmion and a 3-vector. You can make a new skyrmion
X = [0.0,0.0,1.0]
translated_skyrmion = translate_sk(toroidal_skyrmion, X=X)
or modify an existing skyrmion
translate_sk!(toroidal_skyrmion, X=X)
You can also "center" your skyrmion. This computes the center of mass, then translates so that the skyrmion has zero center of mass:
# compute CoM for the translated skyrmion
center_of_mass(toroidal_skyrmion)
>>>3-element Vector{Float64}:
-7.075309546463488e-17
-2.5354376531123876e-17
0.976781807200457
center_skyrmion!(toroidal_skyrmion)
center_of_mass(toroidal_skyrmion)
>>>3-element Vector{Float64}:
-1.0516044516158566e-16
8.101616160453117e-17
1.0194091904102672e-8
Rotation
Rotations take in a skyrmion, an angle and a rotation vector. You can make a new skyrmion
rotated_skyrmion = rotate_sk(toroidal_skyrmion, theta=pi/4, n=[1.0,0.0,0.0])
or modify an existing skyrmion
theta = pi/4
n = [1.0,0.0,0.0]
rotate_sk!(toroidal_skyrmion, theta=theta, n=n)
Isorotation
Isorotations take in a skyrmion, an angle and a rotation vector. You can make a new skyrmion
isorotated_skyrmion = isorotate_sk(toroidal_skyrmion, theta=pi/4, n=[1.0,0.0,0.0])
or modify an existing skyrmion
theta = pi/4
n = [1.0,0.0,0.0]
isorotate_sk!(toroidal_skyrmion, theta=theta, n=n)
Product Approximation
We can also combine skyrmions using the Product Approximation. This codebase always applies a symmetrised product approx. Let's first create two tori
p(z) = z^2
q(z) = 1
make_rational_map!(toroidal_skyrmion, p, q)
skyrmion_up = translate_sk(toroidal_skyrmion, X=[0.0,0.0,1.5])
skyrmion_down = translate_sk(toroidal_skyrmion, X=[0.0,0.0,-1.5])
Then apply a product approximation
product_skyrmion = product_approx(skyrmion_up, skyrmion_down)
Baryon(product_skyrmion)
>>> 3.938613862543325
Oop, the product skyrmion is losing some baryon density - the box might be a bit small!