exchange-functional

Heisenberg bilinear exchange with a functional form based on type and interaction vector

\[\mathcal{H} = -\tfrac{1}{2}\sum_{ij} J_{a,b}(\mathbf{r}_{ij}) \mathbf{S}_{a,i} \cdot \mathbf{S}_{b,j}\]

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.

\[\begin{split}J(\mathbf{r}_{ij}) = \begin{cases} J_{0}, & |r_{ij}| \le r_{\mathrm{cut}}, \\ 0, & |r_{ij}| > r_{\mathrm{cut}} . \end{cases}\end{split}\]
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\).

\[J(\mathbf{r}_{ij}) = J_0 \operatorname{exp}\left( -\frac{|r_{ij}|-r_0}{\sigma} \right)\]
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\).

\[J(\mathbf{r}_{ij}) = J_0 \operatorname{exp}\left( -\frac{(|r_{ij}|-r_0)^2}{2\sigma^2} \right)\]
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.

\[J(\mathbf{r}_{ij}) = J_0 (|r_{ij}|-r_0)^2\operatorname{exp}\left( -\frac{(|r_{ij}|-r_0)^2}{2\sigma^2} \right)\]
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\).

\[J(\mathbf{r}_{ij}) = -J_0 \frac{2 k (|r_{ij}|-r_0) \cos(2 k (|r_{ij}|-r_0)) - \sin(2 k (|r_{ij}|-r_0)}{(2 k (|r_{ij}| - r_0))^4}\]
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.

\[J(\mathbf{r}_{ij}) = J_0 \operatorname{exp}\left( -\frac{(|r_{ij}|-r_0)^2}{2\sigma_0^2} \right) + J_1 \operatorname{exp}\left( -\frac{(|r_{ij}|-r_1)^2}{2\sigma_1^2} \right) + J_2 \operatorname{exp}\left( -\frac{(|r_{ij}|-r_2)^2}{2\sigma_2^2} \right)\]
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).

\[J_{ij} = J_{0}\,\exp\left(-\lvert r_{ij} - d_{0} \rvert / l_{0}\right) + J_{1}^{\mathrm{s}}\,\exp\left(-\lvert r_{ij} - r_{*} \rvert / l_{1}^{\mathrm{s}}\right) \sum_{a=1}^{3} \sin\left(\mathbf{q}_{a}^{\mathrm{s}} \cdot \mathbf{r}_{\parallel}\right) + J_{1}^{\mathrm{c}}\,\exp\left(-\lvert r_{ij} - r_{*} \rvert / l_{1}^{\mathrm{c}}\right) \sum_{a=1}^{3} \cos\left(\mathbf{q}_{a}^{\mathrm{c}} \cdot \mathbf{r}_{\parallel}\right).\]
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)
    );
  }
);