DEV Community

Cover image for PHASEMAP: Diagramas de fase verificables en Python puro (stdlib)
Fenix
Fenix

Posted on Edited on

PHASEMAP: Diagramas de fase verificables en Python puro (stdlib)

PHASEMAP: Diagramas de fase verificables en Python puro (stdlib)

El equilibrio de fases no se dibuja: se minimiza. Tangentes comunes sobre la envolvente convexa de G(x), refinadas con Newton hasta |Δμ| < 1×10⁻⁷ J/mol.

PHASEMAP es una librería Python para calcular y visualizar diagramas de fase binarios y multicomponente con rigor termodinámico, usando solo la biblioteca estándar (cero dependencias externas). Incluye modelo de solución regular con términos de Redlich-Kister, lacunas de miscibilidad, agua P–T (IAPWS-95 / Wagner) y un visor web interactivo Canvas sin frameworks.

Repositorio: https://github.com/amurlaniakea/phasemap

Visor en vivo: https://amurlaniakea.github.io/phasemap/

Licencia: AGPL-3.0-or-later


¿Qué hace PHASEMAP?

Capacidad Descripción
Núcleo termodinámico Energía de Gibbs G(x,T), derivadas analíticas, potenciales químicos μₐ, μᵦ
Equilibrio de fases Envolvente convexa inferior (monotone chain), tangentes comunes, refinamiento Newton 2×2
Diagramas T–x Barrido de temperatura, regla de la palanca, etiquetado α/β por conectividad con puros
Modelos implementados Solución regular + Redlich-Kister (L₀, L₁), lacuna de miscibilidad simétrica, agua IAPWS-95
Sistemas con datos experimentales Pb-Sn, Cu-Ni, Ag-Cu, Fe-C, Al-Si, genérico A-B (referencias ASM / Massalski)
Verificación 80+ tests analíticos (derivadas, Gibbs-Duhem, tangentes, palanca, regla de fases, binodal/espinodal, Clausius-Clapeyron)
Visor web Canvas 2D zero-deps, temas oscuros, exportar PNG/CSV, móvil responsive

Instalación rápida

python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
python -m pytest -q        # 80 tests en ~0.5 s
python -m phasemap         # CLI demo
python scripts/build_data.py  # Genera CSV + tabla de límites
Enter fullscreen mode Exit fullscreen mode

El paquete se instala en modo editable; el visor web está en web/index.html (se sirve estáticamente vía GitHub Pages).


Ejemplo mínimo

from phasemap import PRESETS, scan_diagram

# Sistema Pb-Sn con parámetros ajustados a ASM
system = PRESETS["pbsn"].system()

# Barrido T-x: 200 temperaturas, 240 puntos de composición
diagram = scan_diagram(system, rows=200, n=240)

# Eutéctico calculado
if diagram.eutectic:
    e = diagram.eutectic
    print(f"Eutéctico: T = {e['T']:.1f} K, x_Sn = {e['xE']:.3f}")
    # → Eutéctico: T = 447.0 K, x_Sn = 0.733 (ref ASM: 456 K, 0.739)

# Segments de fase a 480 K
from phasemap import equilibrium_at
segs = equilibrium_at(system, 480.0)
for s in segs:
    print(f"  {s.label:8s}  x ∈ [{s.x0:.3f}, {s.x1:.3f}]  φ = {s.phase_fraction:.3f}")
Enter fullscreen mode Exit fullscreen mode

Salida típica:

Eutéctico: T = 447.0 K, x_Sn = 0.733
  LIQUID       x ∈ [0.000, 0.291]  φ = 0.123
  ALPHA+LIQUID x ∈ [0.291, 0.733]  φ = 0.567
  BETA+LIQUID  x ∈ [0.733, 1.000]  φ = 0.310
Enter fullscreen mode Exit fullscreen mode

Arquitectura del núcleo (stdlib only)

src/phasemap/
├── core/
│   ├── gibbs.py        # Constantes, entropía de mezcla, μₐ/μᵦ, clip numérico
│   ├── hull.py         # Envolvente convexa inferior (monotone chain O(n))
│   ├── equilibrium.py  # Tangentes comunes, Newton 2×2, palanca, scan T-x
│   └── multiphase.py   # Motor multifase, compuestos de línea, invariantes
├── models/
│   ├── regular.py      # Solución regular Bragg-Williams + Redlich-Kister
│   ├── miscibility.py  # Lacuna simétrica: T_c, binodal, espinodal analíticos
│   └── water.py        # Wagner (IAPWS-95), sublimación, fusión Ih, hielos III–VII
└── systems/
    ├── presets.py      # Pb-Sn, Cu-Ni, Ag-Cu, Fe-C, Al-Si, genérico (refs ASM)
    └── compounds.py    # Compuestos estequiométricos (Fe₃C, etc.)
Enter fullscreen mode Exit fullscreen mode

Sin numpy, scipy, pandas, matplotlib. Todo con math, dataclasses, itertools, csv, json. Esto hace que PHASEMAP sea:

  • Portable: corre en cualquier Python ≥ 3.10 (incluyendo WASM / Pyodide)
  • Auditable: < 2500 LOC en src/, cada derivada tiene test analítico
  • Integrable: ideal como backend de notebooks, apps web, pipelines CI

Verificación contra datos experimentales

Sistema Magnitud Modelo Referencia (ASM) Desv.
Pb-Sn T eutéctico 447.0 K 456.15 K 2.0 %
Pb-Sn x eutéctico 0.733 0.739 0.8 %
Pb-Sn Sol. máx. Sn en α 0.291 0.293 0.7 %
Ag-Cu T eutéctico 1055 K 1052 K 0.3 %
Ag-Cu x eutéctico 0.426 0.399 6.7 %
Cu-Ni Isomorfo (sin eutéctico) ✓ ✓ 0 %
H₂O T ebullición 1 atm 373.124 K 373.124 K <0.01 %
H₂O Fusión hielo VII 13.09 GPa 13.09 GPa (Datchi 2000) ancla exacta
Lacuna T_c = Ω/2R 1082.5 K analítico 0 %

Transparencia: las desviaciones se declaran abiertamente en docs/limits.md. El modelo de solución regular (Ω independiente de T, sin entropía de exceso, una sola red) explica los límites sistemáticos — no se ocultan.


🎓 ¿En qué áreas de estudio y sectores se usa esto?

PHASEMAP no es solo un ejercicio académico: los diagramas de fase son la "hoja de ruta" de la ciencia de materiales y la termodinámica aplicada. Aquí tienes una guía por audiencia:

1. Ciencias de Materiales / Ingeniería Metalúrgica

  • Diseño de aleaciones: predecir rangos de solubilidad, temperaturas de eutéctico/peritectico, fracciones de fase en equilibrio.
  • Tratamientos térmicos: temple, revenido, envejecimiento → entender qué fases aparecen al enfriar desde el líquido o al recocer en estado sólido.
  • Soldadura y brasado: aleaciones de aporte (Pb-Sn, Ag-Cu, Au-Sn) → elegir composición que funda a la temperatura deseada y solidifique sin grietas.
  • Metalurgia de polvos / AM (manufactura aditiva): mapas de proceso, solidificación rápida, segregación microsegregación (regla de Scheil, futura).

2. Química Física / Termodinámica Química

  • Enseñanza de equilibrio de fases: visualizar G(x) curvas, tangentes comunes, regla de la palanca, punto crítico de miscibilidad.
  • Modelado de soluciones no ideales: Redlich-Kister, parámetros L₀/L₁, conexión con datos calorimétricos.
  • Agua y fluidos geológicos: curva de saturación P–T, punto crítico, hielos de alta presión → planetología, criosfera, yacimientos geotérmicos.

3. Ingeniería Química / Procesos

  • Destilación y extracción: diagramas T-x-y binarios → diseño de columnas, puntos de azeotropía (extensible).
  • Cristalización fraccionada: purificación de sales, fármacos, semiconductores → lever rule para rendimientos.
  • Diseño de disolventes: predicción de gaps de miscibilidad (lacuna) en sistemas orgánicos/acuosos.

4. Geología / Petrología / Cosmoquímica

  • Sistemas silicatos: análogo simplificado a binarios eutécticos (p. ej. sistema diopsida-anortita).
  • Meteoritos / diferenciación planetaria: solidificación de núcleo metálico (Fe-Ni-S, Fe-C) → PHASEMAP ya incluye Fe-C con cementita (Fe₃C).
  • Hidrotermalismo: curva de agua P–T hasta 22 MPa / 647 K → yacimientos epitermales, black smokers.

5. Sector Industrial (ejemplos concretos)

Sector Aplicación típica Sistemas relevantes
Electrónica / soldadura Aleaciones sin plomo (SAC, Sn-Ag-Cu), reflow profiles Sn-Ag, Sn-Cu, Ag-Cu
Automotriz / aleaciones ligeras Al-Si (pistones, culatas), Al-Cu (2xxx), Al-Mg (5xxx) Al-Si en roadmap (Fase 10)
Acero / fundición Diagrama Fe-C, eutéctico/peritectico, cementita, grafito Fe-C eutectoide en roadmap (Fase 11)
Energía nuclear Combustibles U-Pu-Zr, aleaciones de revestimiento Fe-Cr Extensible a ternarios
Baterías / electrolitos Diagramas de fase Li-S, Na-S, sales fundidas Modelo regular + RK
Farmacéutico Polimorfos, co-cristales, diagramas de solubilidad binarios Lacuna de miscibilidad

6. Docencia universitaria (por qué usarlo en clase)

  • Código legible: cada ecuación tiene su función, cada derivada su test → los estudiantes ven la termodinámica, no solo la fórmula.
  • Experimentos numéricos: "¿qué pasa si aumento L₁?" → re-ejecutan y ven el eutéctico moverse en el visor web.
  • Proyectos de fin de grado: extender a ternarios, añadir modelo sublattice (Al-Si), acoplar con CALPHAD (pycalphad, ESPEI).
  • Reproducibilidad: pip install -e . && pytest → mismo resultado en cualquier máquina, sin contenedores pesados.

Roadmap (próximos hitos)

Fase Objetivo Estado
1–5 Núcleo, tests, visor, datos, CI/Pages ✅ Hecho
6 Ag-Cu + fix lienzo eutéctico ✅ Hecho
7/7c Motor multifase + compuestos línea + invariantes ✅ Hecho (v0.2.0)
8 Visor multifase + UI ✅ Hecho
9 Release v0.2.0 + limpieza ✅ Hecho
10 Sublattice Al-Si (dos subredes, eutéctico ~850 K / x_Si≈0.12) 🔄 En curso
11 Eutectoide Fe-C (γ → α + Fe₃C) + invariantes sólidos ⏳ Planificado
12 Contraste CALPHAD/SGTE + más binarios ⏳ Planificado

Cómo contribuir

  1. Issues: reporta desviaciones, sugiere sistemas nuevos, pide features.
  2. Datos: si tienes parámetros L₀/L₁ ajustados para un binario (ASM, SGTE, literatura), abre PR a systems/presets.py.
  3. Modelos: implementar modelo sublattice (Compuesto de Bragg-Williams) para Al-Si, Fe-C ordenado.
  4. Visor: mejoras UX, exportar SVG, animación de enfriamiento (Scheil).
git clone https://github.com/amurlaniakea/phasemap
cd phasemap
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest -q
# hack away → PR a master
Enter fullscreen mode Exit fullscreen mode

Licencia y cita

AGPL-3.0-or-later — texto verbatim FSF en LICENSE (gnu.org).

@software{phasemap2025,
  author       = {Pedro Sordo Martínez},
  title        = {PHASEMAP: Diagramas de fase verificables — núcleo stdlib},
  version      = {0.2.0},
  year         = {2025},
  url          = {https://github.com/amurlaniakea/phasemap},
  license      = {AGPL-3.0-or-later}
}
Enter fullscreen mode Exit fullscreen mode

Conclusión

PHASEMAP demuestra que un núcleo termodinámico riguroso, auditable y sin dependencias es posible en ~2500 líneas de Python estándar. No sustituye a Thermo-Calc, FactSage o pycalphad/ESPEI para trabajo industrial pesado, pero cubre un nicho real:

  • Enseñanza: caja de cristal donde cada ecuación es inspeccionable.
  • Prototipado rápido: "¿este binario tiene eutéctico? ¿a qué T?" → respuesta en milisegundos.
  • Base extensible: añadir modelos (sublattice, asociado, cuasi-químico) sin reescribir el solver.

Pruébalo en el visor en vivo → https://amurlaniakea.github.io/phasemap/

O clona, corre los tests, y empieza a explorar diagramas de fase de verdad.


¿Te ha parecido útil? Dale a ❤️ en Dev.to, ⭐ en GitHub, y si lo usas en clase o en tu trabajo, cuéntamelo en los comentarios o abriendo un issue. ¡La termodinámica se comparte!

Autor: Pedro Sordo Martínez · amurlaniakea@gmail.com · @MagoPredator

Serie: Orbitae · Relmap · Phasemap

Top comments (0)