Domain geometry and boundary conditions

The --geometry parameter controls which axes use periodic boundary conditions (PBC) and which use Neumann (zero-flux) boundary conditions.

Available geometries

Value

x

y

z

Typical use case

finite_box

Neumann

Neumann

Neumann

Isolated particle / finite sample

periodic_wire

PBC

Neumann

Neumann

Nanowire along x (default)

periodic_layer

PBC

PBC

Neumann

Nanolayer in xy-plane

periodic_box

PBC

PBC

PBC

Fully periodic bulk simulation

The default is periodic_wire.

Physical meaning

  • Neumann boundary condition (\(\partial\mathbf{m}/\partial n = 0\) at the surface): the exchange field vanishes at the boundary, which is the correct micromagnetic condition for a free surface. This introduces a surface artifact if the grid is very coarse relative to the exchange length.

  • Periodic boundary condition: opposite faces are identified, eliminating surface effects along that axis.

Spin-wave eigenvalues

The choice of boundary conditions determines the eigenvalues \(\lambda_\mathbf{n}\) of the discrete Laplacian used in the spin-wave approximation:

  • PBC axis (\(n_i = 0, \ldots, J_i - 1\)):

    \[\lambda_{n_i} = \frac{4}{\Delta x^2}\sin^2\!\left(\frac{\pi n_i}{J_i}\right)\]
  • Neumann axis (\(n_i = 0, \ldots, J_i - 1\)):

    \[\lambda_{n_i} = \frac{4}{\Delta x^2}\sin^2\!\left(\frac{\pi n_i}{2 J_i}\right)\]

The uniform mode \(\lambda_0 = 0\) is always present.

Usage example

$ llg3d --N 10 --geometry finite_box
---
	x		y		z
J	300		21		21
L	2.99000000e-07	2.00000000e-08	2.00000000e-08
d	1.00000000e-09	1.00000000e-09	1.00000000e-09
---
dV    = 1.00000000e-27
V     = 1.19600000e-22
ntot  = 132300
ncell = 119600
---
element         : Cobalt
N               = 10
dt              = 1e-14
Jx              = 300
Jy              = 21
Jz              = 21
dx              = 1e-09
T               = 0.0
H_ext           = 0.0
init_type       : 0
result_file     : run.npz
start_averaging = 4000
n_mean          = 1
n_profile       = 0
solver          : numpy
precision       : double
blocking        = False
seed            = 12345
device          : auto
profiling       = False
verbosity       : INFO
np              = 1
geometry        : finite_box


  0%|          | 0/10 [00:00<?, ?it/s]
 30%|███       | 3/10 [00:00<00:00, 21.26it/s]
 60%|██████    | 6/10 [00:00<00:00, 22.93it/s]
 90%|█████████ | 9/10 [00:00<00:00, 23.79it/s]
100%|██████████| 10/10 [00:00<00:00, 23.53it/s]N iterations          = 10
total_time [s]        = 0.480
time/ite [s/ite]      = 4.798e-02
throughput [point/s]  = 2.757e+06
CFL                   = 0.075
Saving run.npz