CrCl3 — Zigzag antiferromagnet#

CrCl3 orders below \(T_N \approx 14\) K in a zigzag antiferromagnetic pattern with Cr3+ moments in the ab-plane [1]. Space group \(R\bar{3}\) (No. 148), propagation vector k = (0, 0, 3/2) in the hexagonal setting. The MSG from diffraction refinement is BNS 2.7 (\(P_S\bar{1}\), type IV). The k-maximal MSG of R\(\bar{3}\) (BNS 148.20) forces mc due to the C3 site symmetry, so the in-plane ordering is non-maximal and is only recovered by a subgroup search.

Setup#

import numpy as np
from msgjson import analyze_msg, orbit_moments, magnetic_structure_factors

K        = [0, 0, 3/2]
CR_SITES = [[0, 0, 1/3], [0, 0, 2/3]]   # Cr^3+ Wyckoff 6c

Magnetic space group#

BNS 2.7 is identified by refinement. Two domain states exist: the anti-translation τ = (0, 0, ½) can be placed at origin_shift = 0 or 0.5; both give the same \(|F_M|^2\).

res = analyze_msg("2.7", CR_SITES)

for i, s in enumerate(res.sites):
    print(f"  Cr{i+1} at {s.site}:  n_free = {s.n_free}")
Cr1 at [0.  0.  0.333]:  n_free = 3
Cr2 at [0.  0.  0.667]:  n_free = 3

n_free = 3 — any moment direction is symmetry-allowed; the in-plane orientation is selected by exchange anisotropy.

Moment orbit#

m_amp = 3.0                          # μ_B, Cr³⁺ ordered moment
m_ref = np.array([m_amp, 0.0, 0.0])  # along hexagonal a*

site_moms = orbit_moments(res, site_idx=0, m_ref=m_ref, k=K, centering="R")

for pos, mom in site_moms:
    print(f"  {np.round(pos, 4)}:  m = {np.round(mom, 2)} μ_B")
[0.     0.     0.3333]:  m = [3. 0. 0.] μ_B
[0.     0.     0.6667]:  m = [3. 0. 0.] μ_B
[0.     0.     0.8333]:  m = [-3.  0.  0.] μ_B
[0.     0.     0.1667]:  m = [-3.  0.  0.] μ_B

Four-site zigzag +,+,−,− along c. Net moment zero (antiferromagnet).

Structure factors#

Satellites appear at Q = τ + k where τ satisfies the R-centering condition −h + k + l ≡ 0 (mod 3):

a, c_lat = 5.963, 17.28
lattice = np.array([[a,    0,              0    ],
                    [-a/2, a*np.sqrt(3)/2, 0    ],
                    [0,    0,              c_lat]])
B = 2 * np.pi * np.linalg.inv(lattice).T

hkl_list = [(0,0,0), (0,0,3), (2,-1,0), (-1,2,0)]
F2 = magnetic_structure_factors(
    site_moms, hkl_list, K, lattice=lattice, ion="Cr3+"
)

print(f"  {'τ':12s}  {'Q = τ+k':12s}  {'|F_M|²':>8s}  {'sin²α':>6s}  {'|F_M⊥|²':>9s}")
for hkl_i, f2 in zip(hkl_list, F2):
    Q_frac = tuple(h + ki for h, ki in zip(hkl_i, K))
    Q_cart = B @ np.array(Q_frac)
    Q_mag  = np.linalg.norm(Q_cart)
    s2     = 1 - np.dot(Q_cart / Q_mag, m_ref / np.linalg.norm(m_ref))**2
    qstr   = "({:.0f},{:.0f},{:.1f})".format(*Q_frac)
    print(f"  {str(hkl_i):12s}  {qstr:12s}  {f2:8.2f}  {s2:6.3f}  {f2*s2:9.2f}")
τ             Q = τ+k        |F_M|²  sin²α    |F_M⊥|²
(0, 0, 0)     (0,0,1.5)       34.61   1.000      34.61
(0, 0, 3)     (0,0,4.5)       25.36   1.000      25.36
(2, -1, 0)    (2,-1,1.5)      21.36   0.442       9.43
(-1, 2, 0)    (-1,2,1.5)      16.20   0.996      16.13

The (0, 0, 3/2) and (0, 0, 9/2) satellites lie along c so sin²α = 1 for in-plane moments — these are the most sensitive probes of the ordering.