Esta sección recoge las ecuaciones que MatLens usa para analizar lazos M–H, curvas ZFC/FC y la ley de Curie–Weiss, con las unidades y convenciones del código (internamente campo en Oe y momento en emu, sistema cgs).
Conversión de unidades
Código: matlens/core/magnetism.py::field_to_oe, matlens/core/magnetism.py::moment_to_emu, matlens/core/magnetism.py::per_mass, matlens/core/magnetism.py::per_volume.
| Magnitud | Equivalencia usada |
|---|---|
| Momento | 1 emu =10^{-3} A·m² |
| Magnetización másica | 1 emu/g =1 A·m²/kg |
| Magnetización volumétrica | 1 emu/cm³ =10^{3} A/m |
| Campo | 1 Oe =10^{3}/(4\pi) A/m; 1 T (como \mu_0 H) =10^{4} Oe; 1 mT =10 Oe; 1 G =1 Oe |
con m en emu, la masa de muestra en mg (convertida a g) y V en cm³.
Referencias: Goldfarb & Fickett, NBS Special Publication 696 (1985); IEEE/ASTM SI-10.
Momento por fórmula unidad
Código: matlens/core/magnetism.py::emu_g_to_muB, matlens/core/magnetism.py::muB_to_emu_g.
M_s en emu/g, M_{fu} masa molar de la fórmula en g/mol (a partir de la fórmula química o dada directamente), n_B en \mu_B por fórmula unidad. Constantes CODATA 2018 (N_A = 6.02214076\times10^{23} mol⁻¹, \mu_B = 9.2740100783\times10^{-21} erg/G).
Referencia: Cullity & Graham, Introduction to Magnetic Materials, 2.ª ed., Wiley 2009, §6.2.
Pendiente de campo alto y parámetros del lazo
Código: matlens/core/magnetism.py::high_field_slope, matlens/core/magnetism.py::loop_parameters, matlens/core/magnetism.py::split_branches, matlens/core/magnetism.py::center_loop.
Fondo lineal (para- o diamagnético) ajustado conjuntamente en ambas ramas de campo alto con pendiente común e interceptos separados:
Por defecto (saturation="approach", matlens/core/magnetism.py::high_field_approach) se añade el término de aproximación a la saturación, con ambas ramas plegadas a H>0:
El ajuste es lineal en los parámetros: mínimos cuadrados ordinarios (numpy.linalg.lstsq, sin pesos) sobre la matriz [1,\ h,\ h^{-2}] con h = |H|/H_{\max} (campo reducido, para que la matriz esté bien condicionada) y M\,\mathrm{sign}(H) como variable dependiente; \chi_{hf} se devuelve dividiendo la pendiente reducida por H_{\max}. Se necesitan al menos 6 puntos y rango 3. Si el ajuste da a > 0 (aproximación desde arriba, no física) o M_s \le 0, se usa el ajuste lineal y se añade la nota «Aproximación a la saturación no aplicable». Sin este término, un lazo que no satura en el campo máximo atribuye la curvatura a \chi_{hf} y subestima M_s.
Referencias: K. Fabian, Phys. Earth Planet. Inter. 154 (2006) 299; M. Jackson y P. Solheid, Geochem. Geophys. Geosyst. 11 (2010) Q04Z15.
Parámetros del lazo tras restar \chi_{hf} H:
| Símbolo | Significado | Unidades |
|---|---|---|
| H_{\min} | campo mínimo del ajuste de campo alto; por defecto 0.7\,\max\lvert H\rvert | Oe |
| \chi_{hf} | susceptibilidad de campo alto restada | (unidad de M)/Oe |
| M_s | magnetización de saturación | unidad de M |
| H_{c1}, H_{c2} | cruces por M=0 de la rama descendente y ascendente | Oe |
| M_r^{+}, M_r^{-} | M(H=0) en la rama descendente y ascendente | unidad de M |
| H_{EB} | desplazamiento por exchange bias | Oe |
| M_{\mathrm{shift}} | desplazamiento vertical | unidad de M |
Procedimiento: el barrido se divide en ramas monótonas (se descartan las de menos de 5 puntos); los cruces por cero y M_r se obtienen por interpolación lineal; si hay varios cruces en una rama se toma el de menor |H|. Sin restar fondo, M_s = \tfrac{1}{2}(\max M - \min M). Si solo hay una rama, H_c es el |H_c| de esa rama, H_{EB} = 0 y se anota que el lazo es incompleto. Se informan valores absolutos de M_s, M_r y H_c. center_loop resta H_{EB} y M_{\mathrm{shift}}.
Incertidumbre: no se propaga en estos parámetros.
Validez: el fondo lineal solo es correcto si la muestra está saturada para |H| \ge H_{\min}.
Referencias: Cullity & Graham 2009, cap. 9 y §9.5; Nogués & Schuller, J. Magn. Magn. Mater. 192, 203 (1999).
Ley de aproximación a la saturación y anisotropía
Código: matlens/core/magnetism.py::law_of_approach, matlens/core/magnetism.py::anisotropy_from_b.
| Símbolo | Significado | Unidades |
|---|---|---|
| a | término de inclusiones/defectos (opcional) | Oe |
| b | término de anisotropía magnetocristalina | Oe² |
| \chi | susceptibilidad forzada (opcional) | (unidad de M)/Oe |
| c | 8/105 (cúbica) o 4/15 (uniaxial) | — |
| K_1 | primera constante de anisotropía, policristal aleatorio | erg/cm³ (×0.1 para J/m³) |
| M_s en K_1 | magnetización por volumen | emu/cm³ |
Ajuste: mínimos cuadrados no lineales sin pesos (scipy.optimize.curve_fit) con los puntos |H| \ge H_{\min}; ambas ramas se pliegan a H>0 con M\,\mathrm{sign}(H). Valores iniciales: M_s = \max M, a = 0, b = (0.05\,H_{\min})^2, \chi = 0. a y \chi pueden fijarse en 0. Se exige b \ge 0 para calcular K_1.
Incertidumbre: \sigma(M_s) y \sigma(b) son la raíz de la diagonal de la covarianza de curve_fit (escalada por el residuo), k=1.
Nota (comportamiento del código): cuando a o \chi se fijan en 0, el parámetro sigue entre los argumentos de curve_fit aunque no influye en el modelo; la covarianza resulta singular y \sigma(M_s), \sigma(b) salen NaN (véase el ejemplo resuelto). Los valores centrales no se ven afectados.
Referencias: Akulov (1931); Néel (1948); Chikazumi, Physics of Ferromagnetism, 2.ª ed., OUP 1997, §18.4, ec. 18.61–18.62.
Temperatura de bloqueo (ZFC/FC)
Código: matlens/core/magnetism.py::blocking_temperature.
Método max: T_B = T_{\max}, máximo de la curva ZFC suavizada (media móvil de 5 puntos) refinado con una parábola por los tres puntos alrededor del máximo.
Método derivative:
con f recortada a valores no negativos, ambas curvas interpoladas sobre la rejilla común de temperaturas y suavizadas. T_{irr} es la temperatura a partir de la cual |M_{FC}-M_{ZFC}| cae por debajo del 2 % (por defecto) de su máximo.
Validez: conjunto de nanopartículas no interactuantes; T_{\max} \approx \beta\langle T_B\rangle con \beta \approx 1.5–2. Incertidumbre: no se propaga.
Referencias: Micha et al., J. Magn. Magn. Mater. 272–276, e967 (2004); Bruvera et al., J. Appl. Phys. 118, 184304 (2015).
Ley de Curie–Weiss y momento efectivo
Código: matlens/core/magnetism.py::curie_weiss_fit, matlens/core/magnetism.py::molar_susceptibility, matlens/core/magnetism.py::spin_only_moment.
| Símbolo | Significado | Unidades |
|---|---|---|
| \chi_{mol} | susceptibilidad molar | emu/(mol·Oe) |
| C | constante de Curie | emu·K/(mol·Oe) |
| \theta | temperatura de Weiss (\theta<0: interacciones antiferromagnéticas dominantes) | K |
| \chi_0 | término independiente de T (opcional) | emu/(mol·Oe) |
| \mu_{\mathrm{eff}} | momento efectivo | \mu_B por fórmula unidad |
| g, n | factor g (2 por defecto) y número de electrones desapareados | — |
Ajuste: valores iniciales de la recta 1/\chi = (T-\theta)/C; después curve_fit no lineal sin pesos sobre \chi en el intervalo [T_{\min}, T_{\max}] elegido (mínimo 4 puntos). k_B = 1.380649\times10^{-16} erg/K.
Incertidumbre: \sigma(C) y \sigma(\theta) de la covarianza del ajuste, k=1.
Validez: solo en el régimen paramagnético, T muy por encima de la temperatura de orden.
Referencias: Kittel, Introduction to Solid State Physics, 8.ª ed., cap. 11; Blundell, Magnetism in Condensed Matter, OUP 2001, §2.3 y §5.1.
Modelo de Néel para espinelas e inversión a partir de Ms
Código: matlens/core/magnetism.py::neel_moment, matlens/core/magnetism.py::inversion_from_moment.
Para (\mathrm{M}_{1-x}\mathrm{Fe}_x)[\mathrm{M}_x\mathrm{Fe}_{2-x}]\mathrm{O}_4 con dos subredes colineales:
m_M es el momento de solo espín del catión (\mu_B, tabla de reglas de Hund: Fe³⁺ 5, Fe²⁺ 4, Mn²⁺ 5, Co²⁺ 3, Ni²⁺ 2, Cu²⁺ 1, Zn²⁺/Mg²⁺ 0…) y m_{Fe} = 5\,\mu_B. Si no se da u(n_B) se toma el 5 % de n_B. El resultado se recorta a [0,1] con aviso.
Validez: espines colineales; la inclinación (Yafet–Kittel), el desorden superficial y los momentos orbitales (Co²⁺, con aviso específico) alteran M_s; n_B debe ser el momento a 0 K o baja temperatura. Valor solo orientativo.
Referencias: Néel, Ann. Phys. 3, 137 (1948); Cullity & Graham 2009, §6.4 y tablas 6.2–6.3; Yafet & Kittel, Phys. Rev. 87, 290 (1952); Smit & Wijn, Ferrites, Philips 1959, tabla 9.2 (valores de validación).
Supuestos físicos y límites de validez
- Unidades cgs. Todo el cálculo interno es en Oe y emu; el campo en tesla se interpreta como \mu_0 H (1 T → 10^4 Oe). En materiales con magnetización grande y muestras no esféricas el campo interno difiere del aplicado por el campo desmagnetizante H_i = H - N_d M; MatLens no corrige la desimanación, lo que afecta a la forma del lazo y a M_r/M_s, no a M_s.
- Pendiente de campo alto. Restar \chi_{hf} H supone que la fase ferromagnética está saturada para |H| \ge H_{\min}; si no lo está, la ley de aproximación absorbe la curvatura, pero un lazo muy lejos de la saturación (p. ej. superparamagnético a temperatura ambiente) sigue dando M_s subestimado.
- Curie–Weiss solo describe el régimen paramagnético con T \gg |\theta|; cerca de la temperatura de orden, la curvatura de 1/\chi sesga \theta. La relación \mu_{\mathrm{eff}} \approx 2.828\sqrt{C} supone C en emu K mol⁻¹ Oe⁻¹ por fórmula unidad y no resta diamagnetismo del núcleo salvo que se ajuste \chi_0.
- ZFC/FC. El método de la derivada supone partículas no interactuantes y una distribución de barreras de energía; con interacciones dipolares fuertes T_B es aparente.
Incertidumbre: qué se informa y qué no
| Resultado | Incertidumbre | Tipo |
|---|---|---|
| M_s, M_r, H_c, H_{EB} del lazo | ninguna | — |
| Ley de aproximación: M_s, b | covarianza de curve_fit | analítica, k = 1 |
| K_1 | ninguna (no se propaga \sigma(b)) | — |
| Curie–Weiss: C, \theta | covarianza de curve_fit | analítica, k = 1 |
| \mu_{\mathrm{eff}} | ninguna | — |
| Inversión x | u(n_B)/\lvert 2m_M - 2m_{Fe}\rvert, con u(n_B) = 5 % si no se da | analítica, k = 1 |
No se incluye: la incertidumbre de la masa o del volumen de la muestra, la calibración del magnetómetro, el campo remanente del imán superconductor (que desplaza H_c y simula exchange bias de unas decenas de Oe), la elección de H_{\min} ni el error del modelo de Néel.
Avisos de validez
Notas y avisos que añade el código:
loop_parameters: «Aproximación a la saturación no aplicable: Ms por ajuste lineal a campo alto» (el ajuste no lineal da a > 0, M_s \le 0 o está indeterminado); «Lazo incompleto: Hc de una sola rama, sin desplazamiento de intercambio».inversion_from_moment: siempre advierte que supone espines colineales; además «La inversión calculada cae fuera de [0, 1]; se recorta» y, para Co, «Co²⁺ tiene contribución orbital…».- Errores (
ValueError): masa o volumen no positivos; menos de 3 puntos a campo alto; lazo con menos de 10 puntos; menos de 5 puntos en la ley de aproximación; b < 0 al calcular K_1; método de la derivada sin curva FC; Curie–Weiss con unidades distintas de emu o emu/g, sin masa molar o con menos de 4 puntos; m_M = m_{Fe} en la inversión (el momento no depende de x, p. ej. Mn²⁺).
Nota: el primer aviso de inversion_from_moment (espines colineales) es una cadena literal sin marcar para traducción (N_), a diferencia de los otros dos.
Referencias con DOI
DOI comprobados en Crossref: J. Nogués e I. K. Schuller, J. Magn. Magn. Mater. 192 (1999) 203, doi:10.1016/S0304-8853(98)00266-2; Y. Yafet y C. Kittel, Phys. Rev. 87 (1952) 290, doi:10.1103/PhysRev.87.290. Los demás artículos (Fabian 2006; Jackson y Solheid 2010; Micha et al. 2004; Bruvera et al. 2015; Néel 1948) se citan sin DOI porque no se han verificado; los libros se citan por edición.
Ejemplos resueltos
Generados por tools/gen_equation_examples.py (módulo tools/equation_examples/magnetism.py) ejecutando las funciones de MatLens sobre casos sintéticos; no se editan a mano.
Ejemplo resuelto: parámetros del lazo M–H
Lazo sintético (emu/g frente a Oe): ramas M_s\tanh[(H - H_{EB} \pm H_c)/w] con M_s = 60 emu/g, H_c = 150 Oe, H_{EB} = -20 Oe, w = 400 Oe, más una cola de aproximación -M_s b/H^2 (b = 4e+05 Oe², solo para |H| > 3000 Oe), un fondo diamagnético \chi = -2e-05 emu g⁻¹ Oe⁻¹ y ruido gaussiano de 0.02 emu/g (semilla fija); barrido ±20 kOe, 1601 puntos. loop_parameters:
| Saturación | M_s (emu/g) | \chi_{hf} | M_r (emu/g) | H_c (Oe) | H_{EB} (Oe) | M_r/M_s |
|---|---|---|---|---|---|---|
| aproximación (por defecto) | 59.895 | -1.59e-05 | 21.45 | 150 | -19.9 | 0.358 |
| lineal | 59.746 | -9.99e-06 | 21.45 | 150 | -19.9 | 0.359 |
Con la fórmula Fe₃O₄ (M_{fu} = 231.533 g/mol), emu_g_to_muB da n_B = 2.483 \mu_B/f.u.
La diferencia entre las dos filas es el sesgo que introduce atribuir la curvatura de campo alto a \chi_{hf} (ajuste lineal); no se informa como incertidumbre.
Ejemplo resuelto: ley de aproximación a la saturación y K₁
Rama sintética M = M_s(1 - b/H^2) con M_s = 480 emu/cm³ y b = 4e+05 Oe², 151 puntos entre 5 y 20 kOe, ruido 0.05 emu/cm³ (semilla fija); law_of_approach con a y \chi libres y anisotropy_from_b (cúbica):
| Magnitud | Valor |
|---|---|
| M_s (emu/cm³) | 480.146 ± 0.23 |
| b (Oe²) | 3.8844e+05 ± 1.5e+04 |
| rms del residuo (emu/cm³) | 0.0437 |
| a (Oe) | 3.39 |
| \chi | -4.31e-06 |
| \lvert K_1\rvert (erg/cm³) | 1.084e+06 |
Con a y \chi fijados en 0 el ajuste da M_s = 479.993 y b = 3.9937e+05 Oe², pero u(M_s) = nan y u(b) = nan: los parámetros fijados siguen dentro de curve_fit sin influir en el modelo, la covarianza es singular y las incertidumbres salen NaN.
Ejemplo resuelto: Curie–Weiss y momento efectivo
Susceptibilidad molar sintética \chi = C/(T-\theta) con C = 4.38 emu K mol⁻¹ Oe⁻¹ y \theta = -15 K, ruido relativo 0.2 % (semilla fija), ajustada con curie_weiss_fit en 100–300 K:
| Magnitud | Valor |
|---|---|
| C (emu K mol⁻¹ Oe⁻¹) | 4.3794 ± 0.0035 |
| \theta (K) | -14.96 ± 0.13 |
| \mu_{eff} (\mu_B) | 5.918 |
| \mu_{so} con n = 5, g = 2 (\mu_B) | 5.916 |
Ejemplo resuelto: inversión de espinelas a partir de n_B
inversion_from_moment con los momentos de la tabla de validación FERRITE_LITERATURE_MUB (NiFe₂O₄, CuFe₂O₄, MgFe₂O₄, CoFe₂O₄) y u(n_B) por defecto (5 %):
| Ion M | n_B (\mu_B) | x | u(x) | n.º de avisos |
|---|---|---|---|---|
| Ni2+ | 2.3 | 0.95 | 0.019 | 1 |
| Cu2+ | 1.3 | 0.963 | 0.0081 | 1 |
| Mg2+ | 1.1 | 0.89 | 0.0055 | 1 |
| Co2+ | 3.7 | 0.825 | 0.046 | 2 |
Siempre hay al menos un aviso (espines colineales); Co²⁺ añade el de contribución orbital y, si x cae fuera de [0, 1], el de recorte. Con Mn²⁺ (m = 5 \mu_B = m_{Fe}) la función rechaza el cálculo: el momento no depende de x.