---
title: "Ouro DFT now predicts Curie temperatures, and MAE runs at a converged cutoff"
description: "A dedicated Tc route on Monte Carlo exchange, a 100 Ry default that fixes a 50% MAE overshoot, faster magnetic paths, and validation on Fe, NiO and FePt."
url: "https://ouro.foundation/posts/mmoderwell/ouro-dft-now-predicts-curie-temperatures-and-mae-runs-at-a-converged-cutoff"
id: "01a0d45e-bc5a-7a16-bd11-10c95a933002"
type: "post"
---

# Ouro DFT now predicts Curie temperatures, and MAE runs at a converged cutoff

Post by @mmoderwell in #permanent-magnets (all) · 2026-09-24

- Asset id: `01a0d45e-bc5a-7a16-bd11-10c95a933002`
- Page: https://ouro.foundation/posts/mmoderwell/ouro-dft-now-predicts-curie-temperatures-and-mae-runs-at-a-converged-cutoff

This is a follow-up to [Ouro DFT on known magnets](https://ouro.foundation/posts/mmoderwell/ouro-dft-on-known-magnets-ms-and-mae-vs-experiment). [Ouro DFT (ABACUS)](https://ouro.foundation/services/mmoderwell/ouro-dft-abacus) has three changes that matter for magnet screening:

1. A new [Curie temperature (Tc)](https://ouro.foundation/routes/mmoderwell/curie-temperature-tc) route that runs classical Monte Carlo on the TB2J exchange couplings, instead of reporting only the mean-field upper bound.
2. Every route now defaults to a 100 Ry cutoff. At the old 50 Ry default, the FePt MAE came out 50% high.
3. The magnetic paths run fewer SCFs, and bad requests fail before any compute starts.

Everything below was run on the deployed defaults (PBE, DZP, 100 Ry, \(k\)-spacing \(0.3\,\mathrm{\AA}^{-1}\)) unless marked otherwise.

## Curie temperature

[Curie temperature (Tc)](https://ouro.foundation/routes/mmoderwell/curie-temperature-tc) takes a CIF and returns:

- `Tc_K`: the susceptibility peak of classical Heisenberg Monte Carlo, in a supercell twice as wide as the longest kept coupling. For antiferromagnets this is the Néel temperature.
- `Tc_mean_field_K`: the mean-field upper bound.
- the magnetization curve.
- `reference_ordering_overlap`: whether the couplings favor the magnetic order the SCF started from. It is near 1 when they do and near 0 when they favor another order. Below 0.5 the response carries a warning, because the Tc then belongs to a different ordering.

It shares one cached calculation with [Exchange couplings (TB2J)](https://ouro.foundation/routes/mmoderwell/exchange-couplings-jij). Whichever route runs second is nearly free: bcc Fe's Tc came back from the cache in 21 s.

| Material | Measured (K) | Monte Carlo Tc (K) | Mean-field (K) | Overlap |
| -------- | ------------ | ------------------ | -------------- | ------- |
| Fe bcc | 1043 | **1003** | 1254 | 1.0 |
| NiO AFM-II, PBE | 523 (\(T_N\)) | **596** | 795 | 1.0 |
| NiO AFM-II, PBE+U (\(U = 6.2\) eV, 50 Ry) | 523 (\(T_N\)) | **355** | 507 | 1.0 |
| FePt L1₀ | ~750 | not reliable | — | 0 |

Monte Carlo removes most of the mean-field overestimate: Fe lands within 4% of experiment. NiO is dominated by the 180° Ni–O–Ni superexchange between next-nearest neighbors. Plain PBE and PBE+U bracket the measured Néel temperature, so for oxides the Hubbard U moves \(T_N\) by roughly ±30%. Pick U deliberately and compare candidates at the same U. The NiO seed came from the [Magnetic ordering](https://ouro.foundation/routes/mmoderwell/magnetic-ordering-fm-vs-afm) route, which picked AFM-II over FM by 176 meV across 9 configurations in about 7 minutes.

**FePt is a known limit, and the route now says so.** L1₀ FePt's ferromagnetism is mediated by the moments induced on Pt. A rigid-spin Heisenberg model built from TB2J couplings favors antiferromagnetic stacking along \(c\) whether Pt is included or not, as Mryasov et al. (2005) found. The overlap comes out 0, and the response warns that the Tc is not the ferromagnet's. This also means the 868 K mean-field FePt number in the July post, which looked close to experiment, was a coincidence. It came from couplings that don't support the ferromagnetic order.

## MAE: the default cutoff is now 100 Ry

The DZP orbitals are generated for 100 Ry. On the same relaxed L1₀ FePt lattice (\(a = 2.756\), \(c = 3.766\) Å), the old default was not converged:

| FePt L1₀ | 50 Ry (old default) | 100 Ry (new default) |
| -------- | ------------------- | -------------------- |
| MAE (meV/f.u.) | 5.15 | **3.45** |
| MAE (MJ/m³) | 28.9 | **19.3** |
| Hardness \(\kappa\) | 4.31 | **3.53** |
| Easy axis | [001] | [001] |
| MAE wall time (A100) | 3.6 min | 5.8 min |

3.45 meV/f.u. sits inside the GGA literature range (about 2.7–3.5). Experiment is about 1.3–1.4 meV/f.u.; GGA overestimating FePt's anisotropy is a known effect, not something specific to this route. Treat the MJ/m³ as a ranking quantity.

The cost: SCFs are about 1.6× slower, and results cached at 50 Ry won't be reused, because the cutoff is part of the cache key. You can still pass `ecutwfc=50` for a quick first pass, but rank and don't quote MAE magnitudes at that cutoff.

## Relax, then MAE

The MAE route refuses cells that aren't DFT-relaxed. [DFT structure relaxation](https://ouro.foundation/routes/mmoderwell/dft-structure-relaxation) now checks its own output with a fresh SCF on the relaxed cell. If that SCF would fail the MAE gate, it relaxes again, for up to 3 rounds. ABACUS keeps the starting FFT grid through a cell relax, so the stress it reports at the end can disagree with a fresh calculation on the final cell. FePt went from 78 to 0.35 kbar in one round, and MAE then accepted it without a separate check.

The gate allows 5 kbar, not relax's 0.5 kbar target, because a fresh SCF on a relaxed cell carries about 3 kbar of grid error at 100 Ry (18 kbar at 50 Ry).

## Faster and easier to call

- **One SCF instead of two or three on magnetic paths.** The main SCF now also computes forces and stress, and for magnetic cells it saves the Hamiltonian and overlap matrices TB2J needs. Exchange and Tc no longer rerun the SCF, and the MAE gate reads forces off the cached SCF. [Ground-state SCF](https://ouro.foundation/routes/mmoderwell/ground-state-scf) reports max force and stress, so you can tell whether a cell is relaxed without running relax.
- **Ordering sweeps are cheaper.** The parent job that only waits on the per-configuration SCFs now runs on 1 core instead of a full 8-core DFT worker.
- **Impossible requests fail immediately with a 400.** This covers exchange, Tc or ordering on a structure with no magnetic atoms, `magnetic_elements` naming an element that isn't there, and `hubbard_u` on MAE.
- **Errors carry codes an agent can act on:** `invalid_request`, `unrelaxed_structure`, `plus_u_unsupported`, and `scf_not_converged`. The last one includes a `suggested_retry` with a smaller `mixing_beta`.
- **DOS and PDOS series come back as a JSON file** with a compact summary, instead of large arrays in the response body.

## Caveats

- **Rigid-spin magnets:** when the Tc route warns about low overlap, trust MAE and \(M_s\) for that material but not its Tc. FePt is the known case. Any magnet where induced moments carry the order is suspect.
- **Oxides:** \(T_N\) depends strongly on the Hubbard U, as the two NiO rows show.
- **Tc resolution** is about ±30 K, set by the Monte Carlo temperature grid.
- **Cost:** cold runs for 2–4 atom cells took about 12 min for relax plus MAE (FePt), 17 min for Tc on bcc Fe, and 26 min for Tc on NiO. Repeats on the same structure and settings come from the cache.

## Try it

For a candidate magnet:

1. [DFT structure relaxation](https://ouro.foundation/routes/mmoderwell/dft-structure-relaxation) on your CIF.
2. [Magnetic ordering](https://ouro.foundation/routes/mmoderwell/magnetic-ordering-fm-vs-afm) if the ground state isn't obvious.
3. [Magnetic anisotropy energy](https://ouro.foundation/routes/mmoderwell/magnetic-anisotropy-energy) and [Curie temperature (Tc)](https://ouro.foundation/routes/mmoderwell/curie-temperature-tc) on the relaxed CIF. Check `reference_ordering_overlap` before you use the Tc.

## Assets in this post

- [Ouro DFT on known magnets: Ms and MAE vs experiment](https://ouro.foundation/posts/mmoderwell/ouro-dft-on-known-magnets-ms-and-mae-vs-experiment) (post, id `019f5b99-c226-71ad-b7b9-1228c72921a3`)
- [Ouro DFT (ABACUS)](https://ouro.foundation/services/mmoderwell/ouro-dft-abacus) (service, id `accd2d6f-baa1-4094-86ef-76057444b0a3`)
- [Curie temperature (Tc)](https://ouro.foundation/routes/mmoderwell/curie-temperature-tc) (route, id `29fd80eb-7cf5-4895-a349-4e9864407567`)
- [Exchange couplings (Jij)](https://ouro.foundation/routes/mmoderwell/exchange-couplings-jij) (route, id `def3b73b-b790-4716-bb37-60b565342d48`)
- [Magnetic ordering (FM vs AFM)](https://ouro.foundation/routes/mmoderwell/magnetic-ordering-fm-vs-afm) (route, id `67393536-da30-4983-9c21-37c9fabbb296`)
- [DFT structure relaxation](https://ouro.foundation/routes/mmoderwell/dft-structure-relaxation) (route, id `d180f520-fc88-48b7-9eca-3d123f5cf680`)
- [Ground-state SCF](https://ouro.foundation/routes/mmoderwell/ground-state-scf) (route, id `e4ed9888-0c34-4a9d-a227-02fa9d7521e0`)
- [Magnetic anisotropy energy](https://ouro.foundation/routes/mmoderwell/magnetic-anisotropy-energy) (route, id `331d9faf-4b44-4679-a958-5a9a816036e1`)
