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 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}") 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 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.) 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
- Issues: reporta desviaciones, sugiere sistemas nuevos, pide features.
- Datos: si tienes parámetros L₀/L₁ ajustados para un binario (ASM, SGTE, literatura), abre PR a
systems/presets.py. - Modelos: implementar modelo sublattice (Compuesto de Bragg-Williams) para Al-Si, Fe-C ordenado.
- 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 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} } 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