Documentation ¶
Index ¶
- Constants
- Variables
- func AddAnisotropyField(dst *data.Slice)
- func AddExchangeField(dst *data.Slice)
- func AddSTTorque(dst *data.Slice)
- func AddThermalField(dst *data.Slice)
- func AutoSave(quant Quantity, period float64)
- func CenterWall(magComp int)
- func Close()
- func Comp(parent Averagable, c int) *comp
- func Const(e script.Expr) bool
- func DeclConst(name string, value float64, doc string)
- func DeclFunc(name string, f interface{}, doc string)
- func DeclLValue(name string, value script.LValue, doc string)
- func DeclROnly(name string, value interface{}, doc string)
- func DeclVar(name string, value interface{}, doc string)
- func DefRegion(id int, s Shape)
- func DefRegionCell(id int, x, y, z int)
- func DoOutput()
- func Download(q Quantity) *data.Slice
- func EulerStep(s *solver, y *data.Slice)
- func Eval(code string)
- func EvalFile(code *script.BlockStmt)
- func Expect(msg string, have, want, maxError float64)
- func ExpectV(msg string, have, want data.Vector, maxErr float64)
- func Fprintln(filename string, msg ...interface{})
- func GetAnisotropyEnergy() float64
- func GetDemagEnergy() float64
- func GetExchangeEnergy() float64
- func GetMaxTorque() float64
- func GetShiftPos() float64
- func GetThermalEnergy() float64
- func GetTotalEnergy() float64
- func GetZeemanEnergy() float64
- func HeunStep(s *solver, y *data.Slice)
- func Index2Coord(ix, iy, iz int) data.Vector
- func Info(nComp int, name, unit string) info
- func InjectAndWait(task func())
- func KeepAlive() time.Time
- func LoadFile(fname string) *data.Slice
- func LogInput(msg ...interface{})
- func LogOutput(msg ...interface{})
- func Mesh() *data.Mesh
- func NewSlice(ncomp, Nx, Ny, Nz int) *data.Slice
- func NewSolver(torqueFn func(dst *data.Slice), postStep func(), dt_si, dt_mul float64, ...) solver
- func OverrideExchangeLength(region1, region2 int, exlen float64)
- func PostStep(f func())
- func RemoveLRSurfaceCharge(region int, mxLeft, mxRight float64)
- func Run(seconds float64)
- func RunInteractive()
- func RunWhile(condition func() bool)
- func Save(q Quantity)
- func SaveAs(q Quantity, fname string)
- func Serve(port string)
- func SetCellSize(cx, cy, cz float64)
- func SetDemagField(dst *data.Slice)
- func SetEffectiveField(dst *data.Slice)
- func SetGeom(s Shape)
- func SetGridSize(Nx, Ny, Nz int)
- func SetLLTorque(dst *data.Slice)
- func SetMFM(dst *data.Slice)
- func SetMFull(dst *data.Slice)
- func SetMesh(Nx, Ny, Nz int, cellSizeX, cellSizeY, cellSizeZ float64, pbcx, pbcy, pbcz int)
- func SetOD(od string, force bool)
- func SetPBC(nx, ny, nz int)
- func SetSolver(typ int)
- func SetTorque(dst *data.Slice)
- func SetTotalEdens(dst *data.Slice)
- func Shift(dx int)
- func Steps(n int)
- func TableAdd(col TableData)
- func TableAutoSave(period float64)
- func TableSave()
- func ThermSeed(seed int)
- func Vector(x, y, z float64) data.Vector
- func Voronoi(grainsize float64, numRegions, seed int)
- type Averagable
- type Config
- func AntiVortex(circ, pol int) Config
- func Antiskyrmion(charge, pol int) Config
- func RandomMag() Config
- func Skyrmion(charge, pol int) Config
- func TwoDomain(mx1, my1, mz1, mxwall, mywall, mzwall, mx2, my2, mz2 float64) Config
- func Uniform(mx, my, mz float64) Config
- func Vortex(circ, pol int) Config
- func VortexWall(mleft, mright float64, circ, pol int) Config
- type DataTable
- type GetScalar
- type GetVector
- type Param
- type Quantity
- type Regions
- func (r *Regions) Gpu() *cuda.Bytes
- func (r *Regions) HostArray() [][][]byte
- func (r *Regions) HostList() []byte
- func (r *Regions) Mesh() *data.Mesh
- func (i *Regions) NComp() int
- func (i *Regions) Name() string
- func (r *Regions) SetCell(ix, iy, iz int, region int)
- func (r *Regions) Slice() (*data.Slice, bool)
- func (i *Regions) Unit() string
- type ScalarParam
- func (p *ScalarParam) Average() float64
- func (p *ScalarParam) Child() []script.Expr
- func (p *ScalarParam) Eval() interface{}
- func (p *ScalarParam) GetRegion(region int) float64
- func (p *ScalarParam) InputType() reflect.Type
- func (p *ScalarParam) IsUniform() bool
- func (p *ScalarParam) Mesh() *data.Mesh
- func (p *ScalarParam) Name() string
- func (p *ScalarParam) Region(r int) *sOneReg
- func (p *ScalarParam) Set(v float64)
- func (p *ScalarParam) SetRegion(region int, f script.ScalarFunction)
- func (p *ScalarParam) SetValue(v interface{})
- func (p *ScalarParam) Type() reflect.Type
- func (p *ScalarParam) Unit() string
- type Shape
- func Cell(ix, iy, iz int) Shape
- func Circle(diam float64) Shape
- func Cuboid(sidex, sidey, sidez float64) Shape
- func Cylinder(diam, height float64) Shape
- func Ellipse(diamx, diamy float64) Shape
- func Ellipsoid(diamx, diamy, diamz float64) Shape
- func ImageShape(fname string) Shape
- func Layers(a, b int) Shape
- func Rect(sidex, sidey float64) Shape
- func Universe() Shape
- func XRange(a, b float64) Shape
- func YRange(a, b float64) Shape
- func ZRange(a, b float64) Shape
- func (a Shape) Add(b Shape) Shape
- func (a Shape) Intersect(b Shape) Shape
- func (s Shape) Inverse() Shape
- func (s Shape) Repeat(periodX, periodY, periodZ float64) Shape
- func (s Shape) RotX(θ float64) Shape
- func (s Shape) RotY(θ float64) Shape
- func (s Shape) RotZ(θ float64) Shape
- func (s Shape) Scale(sx, sy, sz float64) Shape
- func (a Shape) Sub(b Shape) Shape
- func (s Shape) Transl(dx, dy, dz float64) Shape
- func (a Shape) Xor(b Shape) Shape
- type TableData
- type VectorParam
- func (p *VectorParam) Average() data.Vector
- func (p *VectorParam) Child() []script.Expr
- func (p *VectorParam) Comp(c int) *comp
- func (p *VectorParam) Eval() interface{}
- func (p *VectorParam) GetRegion(region int) [3]float64
- func (p *VectorParam) InputType() reflect.Type
- func (p *VectorParam) IsUniform() bool
- func (p *VectorParam) Mesh() *data.Mesh
- func (p *VectorParam) Name() string
- func (p *VectorParam) Region(r int) *vOneReg
- func (p *VectorParam) SetRegion(region int, f script.VectorFunction)
- func (p *VectorParam) SetValue(v interface{})
- func (p *VectorParam) Type() reflect.Type
- func (p *VectorParam) Unit() string
Constants ¶
const ( TILE = 2 // tile size in grains LAMBDA = TILE * TILE // expected grains per tile )
const ( EULER = 1 HEUN = 2 )
const ( X = 0 Y = 1 Z = 2 )
const ( SCALAR = 1 VECTOR = 3 )
const DEFAULT_KERNEL_ACC = 6
Default accuracy setting for demag kernel. TODO: variable?
const NREGION = 256 // maximum number of regions. (!) duplicated in CUDA
const VERSION = "mumax3.4.0 BETA1"
Variables ¶
var (
Ku1, Kc1 ScalarParam // uniaxial and cubic anis constants
AnisU, AnisC1, AnisC2 VectorParam // unixial and cubic anis axes
B_anis vAdder // field due to uniaxial anisotropy (T)
E_anis *GetScalar // Anisotorpy energy
Edens_anis sAdder // Anisotropy energy density
)
Anisotropy variables
var ( Msat ScalarParam Bsat derivedParam M_full vSetter B_demag vSetter E_demag *GetScalar Edens_demag sAdder EnableDemag = true // enable/disable demag field )
demag variables
var ( E_total = NewGetScalar("E_total", "J", "Total energy", GetTotalEnergy) Edens_total sSetter )
var ( Aex ScalarParam // Exchange stiffness Dex ScalarParam // DMI strength B_exch vAdder // exchange field (T) output handle E_exch *GetScalar Edens_exch sAdder )
var ( BubblePos = NewGetVector("ext_bubblepos", "m", "Bubble core position", bubblePos) BubbleDist = NewGetScalar("ext_bubbledist", "m", "Bubble traveled distance", bubbleDist) BubbleSpeed = NewGetScalar("ext_bubblespeed", "m/s", "Bubble velocity", bubbleSpeed) )
var ( MFM sSetter MFMLift numberParam MFMTipSize numberParam )
var ( Solver = NewSolver(Torque.Set, M.normalize, 1e-15, mag.Gamma0, HeunStep) Time float64 // time in seconds Inject = make(chan func()) // injects code in between time steps. Used by web interface. )
var ( TotalShift float64 // accumulated window shift (X) in meter ShiftMagL, ShiftMagR data.Vector // when shifting m, put these value at the left/right edge. ShiftM, ShiftGeom, ShiftRegions bool = true, true, true // should shift act on magnetization, geometry, regions? )
var ( Temp ScalarParam B_therm vAdder E_therm *GetScalar Edens_therm sAdder )
var ( Alpha ScalarParam Xi ScalarParam Pol ScalarParam Lambda ScalarParam EpsilonPrime ScalarParam FixedLayer VectorParam Torque vSetter // total torque in T LLTorque vSetter // Landau-Lifshitz torque/γ0, in T STTorque vAdder // Spin-transfer torque/γ0, in T J excitation // Polarized electrical current density MaxTorque *GetScalar )
var ( B_ext excitation E_Zeeman *GetScalar Edens_zeeman sAdder )
var B_eff vSetter // total effective field
var CorePos = NewGetVector("ext_corepos", "m", "Vortex core position", corePos)
var (
DWPos = NewGetScalar("ext_dwpos", "m", "Position of the simulation window while following a domain wall", GetShiftPos) // TODO: make more accurate
)
var (
DWSpeed = NewGetScalar("ext_dwspeed", "m/s", "Speed of the simulation window while following a domain wall", getShiftSpeed)
)
used for speed
var DWTiltPMA = NewGetScalar("ext_dwtilt", "rad", "PMA domain wall tilt", dwTiltPMA)
PMA domain wall tilt assuming straight wall.
var (
GUI = guistate{Quants: make(map[string]Quantity), Params: make(map[string]Param)}
)
global GUI state stores what is currently shown in the web page.
var M magnetization // reduced magnetization (unit length)
var OD = "./" // Output directory
var StartTime = time.Now()
var Table = *newTable("table") // output handle for tabular data (average magnetization etc.)
var Timeout = 3 * time.Second
exit finished simulation this long after browser was closed
var UNAME = VERSION + " " + runtime.GOOS + "_" + runtime.GOARCH + " " + runtime.Version() + " (" + runtime.Compiler + ")"
var World = script.NewWorld()
holds the script state (variables etc)
Functions ¶
func AddExchangeField ¶
Adds the current exchange field to dst
func AddThermalField ¶
func CenterWall ¶
func CenterWall(magComp int)
This post-step function centers the simulation window on a domain wall between up-down (or down-up) domains (like in perpendicular media). E.g.:
PostStep(CenterPMAWall)
func Comp ¶
func Comp(parent Averagable, c int) *comp
func DeclLValue ¶
Add an LValue to the script world. Assign to LValue invokes SetValue()
func DeclROnly ¶
Add a read-only variable to the script world. It can be changed, but not by the user.
func DefRegionCell ¶
func DoOutput ¶
func DoOutput()
Periodically called by run loop to save everything that's needed at this time.
func Fprintln ¶
func Fprintln(filename string, msg ...interface{})
Append msg to file. Used to write aggregated output of many simulations in one file.
func GetAnisotropyEnergy ¶
func GetAnisotropyEnergy() float64
func GetExchangeEnergy ¶
func GetExchangeEnergy() float64
Returns the current exchange energy in Joules. Note: the energy is defined up to an arbitrary constant, ground state energy is not necessarily zero or comparable to other simulation programs.
func GetShiftPos ¶
func GetShiftPos() float64
func GetThermalEnergy ¶
func GetThermalEnergy() float64
func GetZeemanEnergy ¶
func GetZeemanEnergy() float64
func Index2Coord ¶
converts cell index to coordinate, internal coordinates
func InjectAndWait ¶
func InjectAndWait(task func())
inject code into engine and wait for it to complete.
func OverrideExchangeLength ¶
Defines the exchange coupling between different regions by specifying the exchange length of the interaction between them.
lex := sqrt(2*Aex / Msat)
In case of different materials it is not always clear what the exchange between them should be, especially if they have different Msat. By specifying the exchange length, it is up to the user to decide which Msat to use. A negative length may be specified to obtain antiferromagnetic coupling.
func PostStep ¶
func PostStep(f func())
Register function f to be called after every time step. Typically used, e.g., to manipulate the magnetization.
func RemoveLRSurfaceCharge ¶
For a nanowire magnetized in-plane, with mx = mxLeft on the left end and mx = mxRight on the right end (both -1 or +1), add a B field needed to compensate for the surface charges on the left and right edges. This will mimic an infinitely long wire.
func RunInteractive ¶
func RunInteractive()
Enter interactive mode. Simulation is now exclusively controlled by web GUI
func SetCellSize ¶
func SetCellSize(cx, cy, cz float64)
func SetEffectiveField ¶
Sets dst to the current effective field (T).
func SetGridSize ¶
func SetGridSize(Nx, Ny, Nz int)
func SetMesh ¶
Set the simulation mesh to Nx x Ny x Nz cells of given size. Can be set only once at the beginning of the simulation. TODO: dedup arguments from globals
func SetOD ¶
SetOD sets the output directory where auto-saved files will be stored. The -o flag can also be used for this purpose.
func SetTotalEdens ¶
func TableAutoSave ¶
func TableAutoSave(period float64)
Types ¶
type Averagable ¶
type Averagable interface { Quantity // contains filtered or unexported methods }
type Config ¶
Magnetic configuration returns m vector for position (x,y,z)
func AntiVortex ¶
func Antiskyrmion ¶
func TwoDomain ¶
Make a 2-domain configuration with domain wall. (mx1, my1, mz1) and (mx2, my2, mz2) are the magnetizations in the left and right domain, respectively. (mxwall, mywall, mzwall) is the magnetization in the wall. The wall is smoothed over a few cells so it will easily relax to its ground state. E.g.:
TwoDomain(1,0,0, 0,1,0, -1,0,0) // head-to-head domains with transverse (Néel) wall TwoDomain(1,0,0, 0,0,1, -1,0,0) // head-to-head domains with perpendicular (Bloch) wall TwoDomain(0,0,1, 1,0,0, 0,0,-1)// up-down domains with Bloch wall
func Uniform ¶
Returns a uniform magnetization state. E.g.:
M = Uniform(1, 0, 0)) // saturated along X
func Vortex ¶
Make a vortex magnetization with given circulation and core polarization (+1 or -1). The core is smoothed over a few exchange lengths and should easily relax to its ground state.
func VortexWall ¶
Make a vortex wall configuration.
type GetScalar ¶
type GetScalar struct {
// contains filtered or unexported fields
}
func NewGetScalar ¶
INTERNAL
type GetVector ¶
type GetVector struct {
// contains filtered or unexported fields
}
func NewGetVector ¶
INTERNAL
type Param ¶
type Param interface { NComp() int Name() string Unit() string IsUniform() bool // contains filtered or unexported methods }
displayable quantity in GUI Parameters section
type Quantity ¶
type Quantity interface { Slice() (q *data.Slice, recycle bool) // get quantity data (GPU or CPU), indicate need to recycle NComp() int Name() string Unit() string Mesh() *data.Mesh }
Any space-dependent quantity
type Regions ¶
type Regions struct {
// contains filtered or unexported fields
}
stores the region index for each cell
type ScalarParam ¶
type ScalarParam struct {
// contains filtered or unexported fields
}
specialized param with 1 component
func (*ScalarParam) Average ¶
func (p *ScalarParam) Average() float64
func (*ScalarParam) Child ¶
func (p *ScalarParam) Child() []script.Expr
func (*ScalarParam) Eval ¶
func (p *ScalarParam) Eval() interface{}
func (*ScalarParam) GetRegion ¶
func (p *ScalarParam) GetRegion(region int) float64
func (*ScalarParam) InputType ¶
func (p *ScalarParam) InputType() reflect.Type
func (*ScalarParam) Region ¶
func (p *ScalarParam) Region(r int) *sOneReg
func (*ScalarParam) Set ¶
func (p *ScalarParam) Set(v float64)
func (*ScalarParam) SetRegion ¶
func (p *ScalarParam) SetRegion(region int, f script.ScalarFunction)
func (*ScalarParam) SetValue ¶
func (p *ScalarParam) SetValue(v interface{})
func (*ScalarParam) Type ¶
func (p *ScalarParam) Type() reflect.Type
type Shape ¶
geometrical shape for setting sample geometry
func ImageShape ¶
func (Shape) Repeat ¶
Infinitely repeats the shape with given period in x, y, z. A period of 0 or infinity means no repetition.
type TableData ¶
type TableData interface { Name() string Unit() string NComp() int // contains filtered or unexported methods }
can be saved in table
type VectorParam ¶
type VectorParam struct {
// contains filtered or unexported fields
}
vector input parameter, settable by user
func (*VectorParam) Average ¶
func (p *VectorParam) Average() data.Vector
func (*VectorParam) Child ¶
func (p *VectorParam) Child() []script.Expr
func (*VectorParam) Comp ¶
func (p *VectorParam) Comp(c int) *comp
func (*VectorParam) Eval ¶
func (p *VectorParam) Eval() interface{}
func (*VectorParam) GetRegion ¶
func (p *VectorParam) GetRegion(region int) [3]float64
func (*VectorParam) InputType ¶
func (p *VectorParam) InputType() reflect.Type
func (*VectorParam) Region ¶
func (p *VectorParam) Region(r int) *vOneReg
func (*VectorParam) SetRegion ¶
func (p *VectorParam) SetRegion(region int, f script.VectorFunction)
func (*VectorParam) SetValue ¶
func (p *VectorParam) SetValue(v interface{})
func (*VectorParam) Type ¶
func (p *VectorParam) Type() reflect.Type
Source Files ¶
- adder.go
- anisotropy.go
- asyncio.go
- autosave.go
- average.go
- buffered.go
- comp.go
- config.go
- demag.go
- derivedparam.go
- effectivefield.go
- energy.go
- engine.go
- euler.go
- exchange.go
- excitation.go
- ext_bubblepos.go
- ext_centerwall.go
- ext_corepos.go
- ext_dwtilt.go
- ext_makegrains.go
- ext_rmsurfacecharge.go
- geom.go
- getfunc.go
- gui.go
- heun.go
- html.go
- info.go
- inputparam.go
- log.go
- lutdata.go
- magnetization.go
- mesh.go
- mfm.go
- numberparam.go
- od.go
- oneregion.go
- plot.go
- quantity.go
- regions.go
- render.go
- run.go
- scalarparam.go
- script.go
- setter.go
- shape.go
- shift.go
- solver.go
- table.go
- temperature.go
- torque.go
- util.go
- vectorparam.go
- zeeman.go