API
Here are all the exported functions of Skyrmions3D.
Types
Skyrmions3D.Skyrmion
— TypeSkyrmion(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
Skyrmions3D.Grid
— TypeGrid([lpx,lpy,lpx], [lsx,lsy,lsz], boundary_conditions::String)
Create a Grid field with lp
lattice points and ls
lattice spacing.
Optional arguments
- boundary_conditions
Set up the system
Skyrmions3D.set_lattice!
— Functionset_lattice!(skyrmion, lp = [lpx, lpy, lpz], ls = [lsx, lsy, lsz])
Sets the underlying lattice to one with lpx
xlpy
xlpz
points and lsx
xlsy
xlsz
spacings, and reinterpolates skyrmion
on the new grid.
Skyrmions3D.set_dirichlet!
— Functionset_dirichlet!(skyrmion::Skyrmion)
Sets the skyrmion
to have periodic boundary conditions.
Skyrmions3D.set_neumann!
— Functionset_dirichlet!(skyrmion::Skyrmion)
Sets the skyrmion
to have Dirichlet boundary conditions.
Skyrmions3D.set_periodic!
— Functionset_periodic!(skyrmion::Skyrmion)
Sets the skyrmion
to have periodic boundary conditions.
Skyrmions3D.set_mpi!
— Functionset_mpi!(skyrmion::Skyrmion, mpi)
Set the pion mass of skyrmion
to mpi
.
Skyrmions3D.set_physical!
— Functionset_physical!(skyrmion::Skyrmion, is_physical; Fpi=Fpi, ee=ee)
Sets skyrmion
to use physical units, when is_physical
is true
. Also used to turn off physical units by setting is_physical=false
Skyrmions3D.set_Fpi!
— Functionset_Fpi!(skyrmion::Skyrmion, Fpi)
Sets the pion decay constant of skyrmion
to Fpi
.
Skyrmions3D.set_ee!
— Functionset_ee!(skyrmion::Skyrmion, ee)
Sets the Skyrme coupling constant of skyrmion
to ee
.
Getters and checkers
Skyrmions3D.get_grid
— Functionget_grid(skyrmion::Skyrmion)
Returns an array of 3D arrays [x, y, z]
, which can be used in integrals.
Skyrmions3D.check_if_normalised
— Functioncheck_if_normalised(skyrmion)
Check if skyrmion is normalised.
Throws an error if any point is not normalised
Skyrmions3D.get_field
— Functionget_field(skyrmion::Skyrmion)
Returns an array of pion fields [π1, π2, π3, π0]
, which can be used in integrals.
Create
Skyrmions3D.make_rational_map!
— Functionmake_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 byX
iTH = 0.0
: isorotate by initial skyrmion byiTH
i_n = 0.0
: isorotate initial skyrmion aroundi_n
jTH = 0.0
: isorotate by initial skyrmion byjTH
j_n = 0.0
: isorotate initial skyrmion aroundj_n
Skyrmions3D.make_RM_product!
— Functionmake_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.
Skyrmions3D.make_ADHM!
— Functionmake_ADHM!(skyrmion, L, M )
Writes an ADHM skyrmion in to skyrmion
. The ADHM data is given by L and M. L and M should be given by 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)
Skyrmions3D.product_approx!
— Functionproduct_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
]
Skyrmions3D.product_approx
— Functionproduct_approx(skyrmion1,skyrmion2) -> product_skyrmion
Returns the symmetrised product approximation of skyrmion1
and skyrmion2
. The returned field is normalised.
See also [product_approx!
]
Transform
Skyrmions3D.translate_sk!
— Functiontranslate_sk!(skyrmion,X)
Translates skyrmion
by the 3-Vector X
, e.g. X = [1.0, 0.0, 0.0]
See also [translate_sk
]
Skyrmions3D.translate_sk
— Functiontranslate_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!
]
Skyrmions3D.rotate_sk!
— Functionrotate_sk!(skyrmion,theta,n)
Rotates skyrmion
by theta
around the vector n
. The given vector is automatically normalised.
See also [rotate_sk
]
Skyrmions3D.rotate_sk
— Functionrotate_sk(skyrmion,theta,n) -> rotated_skyrmion
Returns skyrmion
rotated by theta
around the vector n
. The given vector is automatically normalised.
See also [rotate_sk!
]
Skyrmions3D.isorotate_sk!
— Functionisorotate_sk!(skyrmion,theta,n)
Isorotates skyrmion
by theta
around the vector n
. The given vector is automatically normalised.
See also [isorotate_sk!
]
Skyrmions3D.isorotate_sk
— Functionisorotate_sk(skyrmion,theta,n) -> isorotated_skyrmion
Returns skyrmion
isorotated by theta
around the vector n
. The given vector is automatically normalised.
See also [isorotate_sk!
]
Skyrmions3D.center_skyrmion!
— Functioncenter_skyrmion(my_skyrmion)
Translates skyrmion' so that the center of mass is
(0,0,0)'.
Skyrmions3D.normer
— Functionnormer(skyrmion)
Returns normalised skyrmion
.
See also [normer!
]
Skyrmions3D.normer!
— Functionnormer!(skyrmion)
Normalises skyrmion
.
See also [normer
]
Probe
Skyrmions3D.overview
— Functionoverview(skyrmion)
Displays an overview of skyrmion
's properties.
Skyrmions3D.Energy
— FunctionEnergy(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.
Skyrmions3D.Baryon
— FunctionBaryon(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.
Skyrmions3D.center_of_mass
— Functioncenter_of_mass(skyrmion; density=false, moment=0)
Compute the center of mass of skyrmion
, based on the energy density.
Skyrmions3D.compute_current
— Functioncompute_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.stress
: the stress tensor.
Skyrmions3D.rms_baryon
— Functionrms_baryon(skyrmion)
Compute root mean square charge radius of a skyrmion, using the baryon density.
Flow
Skyrmions3D.gradient_flow!
— Functiongradient_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!
]
Skyrmions3D.newton_flow!
— Functionnewton_flow!(skyrmion; skyrmion_dot, steps = n, dt=ls^2/80.0, frequency_of_printing = freq, print_stuff = true)
Applies a 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 energy is checked every freq
steps.
See also [gradient_flow!
, arrested_newton_flow!
]
Skyrmions3D.arrested_newton_flow!
— Functionarrested_newton_flow!(skyrmion; skyrmion_dot, steps = n, tolerance = tol, dt=ls^2/80.0, checks = 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!
]
Visualise
Skyrmions3D.plot_overview
— Functionplot_overview(skyrmion)
Plots the pion fields and a baryon density of skyrmion
.
Skyrmions3D.plot_field
— Functionplot_field!(skyrmion; component=3, iso_value=0.5 )
Plots an isosurface of constant value, skyrme_field[component] = iso_value
Skyrmions3D.plot_baryon_density
— Functionplot_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: [].
Skyrmions3D.interactive_flow
— Functioninteractive_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'.