API

Here are all the exported functions of Skyrmions3D.

Types

Skyrmions3D.Skyrmion — Type
Skyrmion(lp::Int64, ls::Float64)
Skyrmion([lpx,lpy,lpx], [lsx,lsy,lsz])

Create a skyrme field with lp lattice points and ls lattice spacing.

Optional arguments

  • mpi = 0.0: sets the pion mass for this Skyrme field
source

Set up the system

Skyrmions3D.set_lattice! — Function
set_lattice!(skyrmion, lp = [lpx, lpy, lpz], ls = [lsx, lsy, lsz])

Sets the underlying lattice to one with lpxxlpyxlpz points and lsxxlsyxlsz spacings, and reinterpolates skyrmion on the new grid.

source
Skyrmions3D.set_physical! — Function
set_physical!(skyrmion::Skyrmion, is_physical; Fpi=Fpi, ee=ee)

Sets skyrmion to use physical units with Fpi MeV and skyrme coupling ee, when is_physical is true. Also used to turn off physical units by setting is_physical=false

source

Create

Skyrmions3D.make_rational_map! — Function
make_rational_map!(skyrmion, prof, pfn, qfn; kwargs... )

Writes a rational map skyrmion in to skyrmion. The rational map is given by the polynomials R(z) = p(z)/q(z) and the profile f(r).

If no f is given, the function will find an OK approximation for the profile.

Optional arguments

  • X=[0.0,0.0,0.0]: translate the initial skyrmion by X
  • iTH = 0.0: isorotate by initial skyrmion by iTH
  • i_n = 0.0: isorotate initial skyrmion around i_n
  • jTH = 0.0: isorotate by initial skyrmion by jTH
  • j_n = 0.0: isorotate initial skyrmion around j_n
source
Skyrmions3D.make_RM_product! — Function
make_RM_product!(skyrmion, X_list)

Makes a product approximation of many rational map skyrmions, determined through the list X_list. The final field is written into skyrmion.

The formatting of the list is as follow: X_list = [ data_1, data_2, data_3, ... ] where data_1 = [ p(z), q(z), f(r), X, θiso, n_iso, θrot, n_rot ]

See also [product]

Example of list

p1(z) = z; q1(z) = 1; f1(r) = 4*atan(exp(-r));
p2(z) = z^2; q2(z) = 1; f2(r) = 4*atan(exp(-0.7*r));
X_list = [ [ p1, q1, f1, [0.0,0.0,1.5], 0.0, [0.0,0.0,1.0], 0.0, [0.0,0.0,1.0] ], [ p2, q2, f2, [0.0,0.0,-1.5], pi, [1.0,0.0,0.0], 0.0, [0.0,0.0,1.0] ] ]

Technical details

The product is taken pairwise in order. E.g. for a list of 3 skyrmions, we first calculate the symmetrised product of the first and second skyrmions then calculate the symmtrised product with the third skyrmion. Hence the final solution is not symmetric under permutations.

source
Skyrmions3D.make_ADHM! — Function
make_ADHM!(skyrmion, L, M )

Writes an ADHM skyrmion in to skyrmion. The ADHM data is given by L and M. L and M can be given by Bx4 and BxBx4 arrays or as B and BxB arrays of Quaternions, from the GLMakie package.

Example of data

B=2

L = [ Quaternion(0.0,0.0,0.0,0.0) for a in 1:B ]
M = [ Quaternion(0.0,0.0,0.0,0.0) for a in 1:B, b in 1:B ]

L[1] = Quaternion(0.0, 0.0, 0.0, sqrt(2.0))
L[2] = Quaternion(0.0, 0.0, sqrt(2.0), 0.0)

M[1,1] = Quaternion(1.0, 0.0, 0.0, 0.0)
M[1,2] = Quaternion(0.0, 1.0, 0.0, 0.0)
M[2,1] = Quaternion(0.0, 1.0, 0.0, 0.0)
M[2,2] = Quaternion(-1.0, 0.0, 0.0, 0.0)
source
Skyrmions3D.product_approx! — Function
product_approx!(skyrmion1,skyrmion2)

Makes the symmetrised product approximation of skyrmion1 and skyrmion2. The output is written in to skyrmion1. The returned field is normalised.

See also [product_approx]

source
Skyrmions3D.product_approx — Function
product_approx(skyrmion1,skyrmion2) -> product_skyrmion

Returns the symmetrised product approximation of skyrmion1 and skyrmion2. The returned field is normalised.

See also [product_approx!]

source

Transform

Skyrmions3D.translate_sk! — Function
translate_sk!(skyrmion,X)

Translates skyrmion by the 3-Vector X, e.g. X = [1.0, 0.0, 0.0]

See also [translate_sk]

source
Skyrmions3D.translate_sk — Function
translate_sk(skyrmion,X) -> translated_skyrmion

Returns skyrmion translated by 3-Vector X, e.g. X = [1.0, 0.0, 0.0]

See also [translate_sk!]

source
Skyrmions3D.rotate_sk! — Function
rotate_sk!(skyrmion,θ,n)

Rotates skyrmion by θ around the vector n. The given vector is automatically normalised.

See also [rotate_sk]

source
Skyrmions3D.rotate_sk — Function
rotate_sk(skyrmion,θ,n) -> rotated_skyrmion

Returns skyrmion rotated by θ around the vector n. The given vector is automatically normalised.

See also [rotate_sk!]

source
Skyrmions3D.isorotate_sk! — Function
isorotate_sk!(skyrmion,θ,n)

Isorotates skyrmion by θ around the vector n. The given vector is automatically normalised.

See also [isorotate_sk!]

source
Skyrmions3D.isorotate_sk — Function
isorotate_sk(skyrmion,θ,n) -> isorotated_skyrmion

Returns skyrmion isorotated by θ around the vector n. The given vector is automatically normalised.

See also [isorotate_sk!]

source

Probe

Skyrmions3D.Energy — Function
Energy(skyrmion; density=false)

Compute energy of skyrmion.

Set 'density = true' to output the energy density and moment to n to calculate the nth moment of the energy density.

source
Skyrmions3D.Baryon — Function
Baryon(skyrmion; density=false)

Compute baryon number of skyrmion.

Set 'density = true' to output the baryon density and moment to n to calculate the nth moment of the baryon density.

source
Skyrmions3D.center_of_mass — Function
center_of_mass(skyrmion; density=false, moment=0)

Compute the center of mass of skyrmion, based on the energy density.

source
Skyrmions3D.compute_current — Function
compute_current(skyrmion; label="uMOI", indices=[0,0], density = false, moment=0)

Compute a variety of currents in the Skyrme model, based on a skyrmion.

You can calculate specific indices using e.g. indices = [1,2]. If indices = [0,0], the function will calculate all indices. If density = false, the function will return the integrated densities, while density = true it will return the densities.

The possible currents are (currently):

  • uMOI: the isospin moment of inertia.
  • wMOI: the mixed moment of inertia.
  • vMOI: the spin moment of inertia.
  • uAxial: the u-axial moment of inertia.
  • wAxial: the w-axial moment of inertia.
  • NoetherIso: the Noether vector current.
  • NoetherAxial: the Noether axial current.
source

Flow

Skyrmions3D.gradient_flow! — Function
gradient_flow!(skyrmion; steps = n, tolerance = tol, dt=ls^2/80.0, checks = freq, print_stuff = true)

Applies a gradient flow to skyrmion with timestep dt, either for n steps or until the error falls below tol. The error is checked every checks steps.

See also [newton_flow!, arrested_newton_flow!]

source
Skyrmions3D.arrested_newton_flow! — Function
arrested_newton_flow!(skyrmion; skyrmion_dot, steps = n, tolerance = tol, dt=ls^2/80.0, frequency_of_checking_tolerance = freq, print_stuff = true)

Applies an arrested Newton flow to skyrmion whose initial time derivative field is skyrmion_dot with timestep dt, either for n steps or until the error falls below tol. The error is checked every checks steps.

See also [gradient_flow!, newton_flow!]

source

Visualise

Skyrmions3D.plot_baryon_density — Function
plot_baryon_density(skyrmion; iso_value = 0.5*(max(BD) - min(BD)), juggling = false, kwargs...)

Plots an isosurface of constant baryon density, with value iso_value, coloured to reveal the pion field structure, originally described in [].

Can use a juggling ball colouring scheme by setting juggling = true.

Optional argument

Can accept any arguments used in Axis3 from the Makie package. See more: [].

source
Skyrmions3D.interactive_flow — Function
interactive_flow(my_skyrmion; iso_value=2.0, kwargs...)

Initialises a interface, used for dynamics. Requires GLMakie to be active. Once activated, can interactively apply a gradient flow or arrested newton flow to the initial skyrme field `my_skyrmion'.

source