exchange-functional
Heisenberg bilinear exchange with a functional form based on type and interaction vector
The exchange function \(J_{a,b}(\mathbf{r}_{ij})\) is specified between materials \(a\) and \(b\). Neighbours with the given material types will be given the exchange value calculate from \(J_{a,b}(\mathbf{r}_{ij})\).
Note
Specified interactions are NOT assumed to be reciprocal between materials, so if \(A\) and \(B\) are materials both \(J_{AB}(\mathbf{r}_{ij})\) and \(J_{BA}(\mathbf{r}_{ij})\) should be specified.
Functionals
The available functionals are:
- step
A step function where \(J_0\) is constant within \(r_0\) and zero outside.
interactions = (
// type_i, type_j, functional, r_cutoff, J0
("A", "A", "step", 1.0, 20.0)
);
- exp
Exponentially decaying function with a linear shift \(r_0\) and decay constant \(\sigma\).
interactions = (
// type_i, type_j, functional, r_cutoff, J0, r0, sigma
("A", "A", "exp", 3.0, 20.0, 1.0, 1.0)
);
- gaussian
Gaussian function centered on \(r_0\) with width \(\sigma\).
interactions = (
// type_i, type_j, functional, r_cutoff, J0, r0, sigma
("A", "A", "gaussian", 3.0, 20.0, 1.0, 1.0)
);
- kaneyoshi
Function used in Kaneyoshi’s papers on amorphous magnets.
interactions = (
// type_i, type_j, functional, r_cutoff, J0, r0, sigma
("A", "A", "kaneyoshi", 3.0, 20.0, 1.0, 1.0)
);
- rkky
RKKY type interaction with oscillating sign. Defined with a shift \(r_0\) and wavenumber \(k\).
interactions = (
// type_i, type_j, functional, r_cutoff, J0, r0, wavenumber
("A", "A", "rkky", 3.0, 20.0, 1.0, 1.0)
);
- gaussian_multi
Multiple (three) gaussian functions with independent centers, widths and amplitudes.
interactions = (
// type_i, type_j, functional, r_cutoff, J0, r0, sigma0, J1, r1, sigma1, J2, r2, sigma2
("A", "A", "gaussian_multi", 4.0, 20.0, 1.0, 1.0, -10.0, 2.0, 1.0, 5.0, 3.0, 1.0)
);
- c3z
Three fold rotationally symmetric function in the x-y plane. See arXiv:2206.05264 and Nano Lett. 23, 6088 (2023).
interactions = (
// type_i, type_j, functional, r_cutoff, qs1, qc1, J0, J1s, J1c, d0, l0, l1s, l1c, r*
("A", "B", "c3z", 10.0, [ 0.7, 0.0, 0.0], [1.73, 1.0, 0.0], -0.1, -0.5, 0.1, 6.7, 0.1, 0.3, 0.6, 7.3),
("B", "A", "c3z", 10.0, [-0.7, 0.0, 0.0], [1.73, 1.0, 0.0], -0.1, -0.5, 0.1, 6.7, 0.1, 0.3, 0.6, 7.3),
);
Note
Only \(\mathbf{q}_{1}^{s,c}\) are specified and \(\mathbf{q}_{2,3}^{s,c}\) are calculated from the C3z symmetry.
Settings
- interactions (required | list)
Description of exchange parameters.
Format is
("MaterialA", "MaterialB", "functional_name", r_cutoff, functional_parameters...)
- energy_units (optional | string | "joules")
Energy units of the exchange coefficients in one of the JAMS supported units.
- distance_units (optional | string | "lattice_constants")
Distance units of \(r_{ij}\) in one of the JAMS supported units.
- output_functionals (optional | bool | false)
Output functionals to text files with columns of radius_nm and exchange_meV.
- symmetry_check (optional | string | symmetric)
Symmetry check to apply to the exchange matrix. Valid options are:
"none"Perform no symmetry check."symmetric"Verify that \(J_{ij} = J_{ji}\) for all entries. An error is raised if the matrix is not exactly symmetric."force_symmetric"Enforce symmetry by replacing each pair with \(J_{ij} = J_{ji} = \tfrac{1}{2}(J_{ij} + J_{ji})\). This is useful if the symmetry test fails due to small floating-point differences.
Example
hamiltonians = (
{
module = "exchange-functional";
energy_units = "meV";
distance_units = "lattice_constants";
interactions = (
// type_i, type_j, functional, r_cutoff, J0, r0, sigma
("A", "A", "exp", 3.0, 20.0, 1.0, 1.0)
);
}
);