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 |
|---|---|---|---|---|
|
Neumann |
Neumann |
Neumann |
Isolated particle / finite sample |
|
PBC |
Neumann |
Neumann |
Nanowire along x (default) |
|
PBC |
PBC |
Neumann |
Nanolayer in xy-plane |
|
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