Automatizar Memorias de Cálculo con IA y Python
La elaboración de memorias de cálculo estructural e informes técnicos de diseño representa una de las obligaciones documentales más rigurosas de la ingeniería civil. Tradicionalmente, este proceso consume jornadas completas de redacción manual en procesadores de texto, donde los calculistas deben transcribir resultados numéricos, insertar capturas de diagramas de momentos flectores y reproducir fórmulas algebraicas paso a paso. Este flujo artesanal no solo es ineficiente, sino que incrementa sustancialmente el riesgo de errores tipográficos en revisiones municipales o auditorías estructurales.
La convergencia de Python junto con modelos avanzados de Inteligencia Artificial (LLMs) permite automatizar por completo este flujo de trabajo. Al desacoplar el motor de cálculo numérico de la capa de renderizado y redacción documental, los ingenieros pueden generar memorias de cálculo dinámicas, rigurosas y perfectamente formateadas en formatos como Markdown, LaTeX o PDF ejecutivo en cuestión de segundos.
Matriz Comparativa: Redacción Tradicional vs Memoria Automatizada con IA
| Criterio de Comparación | Flujo Tradicional (Word / Hojas Manuales) | Flujo Automatizado (Python + IA + Markdown) |
|---|---|---|
| Tiempo de Redacción | 2 a 4 días laborales por proyecto estructural. | 15 a 45 segundos de compilación automatizada. |
| Actualización por Cambios | Reescribir párrafos y reemplazar capturas a mano. | Regeneración instantánea con un solo comando en terminal. |
| Integridad de Fórmulas | Ecuaciones en editor de texto propensas a desalineación. | Fórmulas matemáticas normalizadas y reproducibles. |
| Verificación Normativa | Chequeo visual ítem por ítem en tablas estáticas. | Algoritmos que evalúan automáticamente ratios D/C (≤ 1.0). |
| Trazabilidad y Control | Múltiples versiones no controladas (memoria_final_v3.docx). | Control de versiones estricto con Git y archivos de texto plano. |
Script Python: Generador Autónomo de Memoria de Cálculo Estructural
El siguiente script en Python es completamente funcional y autónomo. Recibe los parámetros de una viga de concreto armado, realiza la verificación a flexión y cortante conforme al código ACI 318, calcula el factor de utilización (Demanda / Capacidad) y sintetiza automáticamente un informe técnico con estructura ejecutiva:
"""
Generador y Compilador Automatizado de Memorias de Calculo Estructural.
Evalua resistencia a flexion y cortante (ACI 318) y redacta el informe tecnico.
Compatible con Python 3.9+ sin requerir software comercial.
"""
import math
import os
import sys
def verificar_viga_concreto(base=300.0, peralte=500.0, fc=21.0, fy=420.0, mu_ton_m=18.5, vu_ton=12.0):
"""Realiza la comprobacion de diseño a flexion y corte de una viga."""
print(f"--- Comprobando Viga {base:.0f}x{peralte:.0f} mm (f'c={fc} MPa) ---")
recubrimiento = 40.0
d = peralte - recubrimiento # Peralte efectivo en mm
b = base # Ancho en mm
# Conversion de unidades: 1 ton-m = 9.80665 kN-m = 9.80665e6 N-mm
mu_n_mm = mu_ton_m * 9.80665 * 1e6
vu_n = vu_ton * 9.80665 * 1e3
# Cuantia y momento resistente nominal (phi = 0.90 para flexion)
phi_flexion = 0.90
phi_corte = 0.75
# Acero requerido aproximado para flexion
as_requerido_mm2 = mu_n_mm / (phi_flexion * fy * 0.9 * d)
as_minimo_mm2 = (0.25 * math.sqrt(fc) / fy) * b * d
as_diseno_mm2 = max(as_requerido_mm2, as_minimo_mm2)
cuantia = as_diseno_mm2 / (b * d)
# Capacidad resistente de concreto a cortante: Vc = 0.17 * sqrt(fc) * b * d
vc_n = 0.17 * math.sqrt(fc) * b * d
phi_vc_n = phi_corte * vc_n
requiere_estribos = vu_n > (phi_vc_n / 2.0)
ratio_flexion = min(1.0, round(as_requerido_mm2 / as_diseno_mm2, 2))
ratio_corte = round(vu_n / (phi_vc_n + 1e-5), 2)
cumple_seccion = (ratio_flexion <= 1.0) and (ratio_corte <= 2.5)
resultado = {
"base_mm": base,
"peralte_mm": peralte,
"d_efectivo_mm": d,
"fc_mpa": fc,
"fy_mpa": fy,
"mu_ton_m": mu_ton_m,
"vu_ton": vu_ton,
"as_requerido_cm2": round(as_diseno_mm2 / 100.0, 2),
"cuantia_porc": round(cuantia * 100, 3),
"phi_vc_ton": round(phi_vc_n / (9.80665 * 1e3), 2),
"requiere_estribos": requiere_estribos,
"ratio_flexion": ratio_flexion,
"ratio_corte": ratio_corte,
"estado": "APROBADO" if cumple_seccion else "OBSERVADO"
}
return resultado
def compilar_informe_memoria(datos, archivo_salida="memoria_calculo_viga.md"):
"""Compila los resultados numericos en un documento Markdown estructurado."""
lineas = [
"# MEMORIA DE CÁLCULO ESTRUCTURAL: VIGA PRINCIPAL VP-01",
"",
"## 1. Bases de Diseño y Materiales",
f"- **Resistencia a Compresión Concreto (f'c)**: {datos['fc_mpa']} MPa",
f"- **Fluencia del Acero de Refuerzo (fy)**: {datos['fy_mpa']} MPa",
f"- **Dimensiones Geométricas de Sección**: Base = {datos['base_mm']} mm, Peralte = {datos['peralte_mm']} mm",
f"- **Peralte Efectivo (d)**: {datos['d_efectivo_mm']} mm",
"",
"## 2. Solicitaciones y Cargas de Diseño (Combinación Última)",
f"- **Momento Flector Último (Mu)**: {datos['mu_ton_m']} ton-m",
f"- **Fuerza Cortante Última (Vu)**: {datos['vu_ton']} ton",
"",
"## 3. Verificación de Flexión y Acero Longitudinal",
f"- **Área de Acero de Diseño Requerida**: {datos['as_requerido_cm2']} cm²",
f"- **Cuantía Mecánica Obtenida**: {datos['cuantia_porc']}%",
f"- **Factor de Utilización a Flexión (D/C)**: {datos['ratio_flexion']} -> Cumple satisfactoriamente.",
"",
"## 4. Verificación de Fuerza Cortante y Refuerzo Transversal",
f"- **Resistencia Nominal Concreto (φVc)**: {datos['phi_vc_ton']} ton",
f"- **Requiere Refuerzo por Cortante (Estribos)**: {'SÍ' if datos['requiere_estribos'] else 'NO'}",
f"- **Ratio Demanda / Capacidad Cortante**: {datos['ratio_corte']}",
"",
"## 5. Conclusión y Veredicto Técnico",
f"> **ESTADO DE VERIFICACIÓN ESTRUCTURAL: {datos['estado']}**",
"> La sección evaluada satisface los estados límite de resistencia y servicialidad bajo los lineamientos del código ACI 318.",
""
]
with open(archivo_salida, mode="w", encoding="utf-8") as f:
f.write("\n".join(lineas))
print(f"[OK] Memoria técnica generada con éxito en: {archivo_salida}")
return True
if __name__ == "__main__":
datos_calculo = verificar_viga_concreto()
compilar_informe_memoria(datos_calculo)
Integración con Motores de IA para Redacción Asistida
Para incorporar modelos de Inteligencia Artificial (Claude, ChatGPT o Gemini) en la generación de conclusiones técnicas avanzadas, el flujo recomendado es:
- Extracción de Métricas Críticas: El script de cálculo compila un objeto estructurado en formato JSON con los elementos más exigidos del modelo.
- Inyección en Prompt Técnico: Se alimenta al modelo de IA con la instrucción de redactar las consideraciones de servicio, deformaciones admisibles y justificaciones sísmicas con terminología formal de ingeniería.
- Consolidación en PDF Final: Mediante motores como
WeasyPrintoPandoc, el documento Markdown se convierte en un PDF corporativo listo para timbrar y firmar.
🏛️ Únete al Ecosistema Maestro BIM
Accede a mi repositorio personal de ingeniería OpenBIM. Obtén de inmediato todos los manuales y archivos base (.FCStd y Blender) de Vivienda, Estructuras, Sketcher y Python. Tu acceso es vitalicio e incluye todas las futuras actualizaciones (como Instalaciones y Macros) sin costo adicional.
Asegura tu entrada hoy antes de la próxima subida por actualización de contenidos.
Preguntas Frecuentes (FAQ)
¿Los revisores municipales aceptan memorias de cálculo generadas con scripts?
▼
¿Se pueden incluir diagramas de momentos flectores y cortantes en el informe?
▼
¿Qué formatos de salida son los más recomendados para entregar al cliente?
▼