En M07 el modelo ya se construye, resuelve y valida frente a teoría. Eso todavía no lo convierte en una herramienta: sigue siendo un script monolítico. En M08 lo refactorizaremos en un driver reutilizable con argumentos, submacros y evidencias de depuración, preparando el barrido paramétrico de M09.
Tu misión
Separarás entradas, construcción, solución y resultados; invocarás la misma macro para dos
alturas con mesh_h como argumento; y generarás un CSV que pueda aprobar o
rechazar cada caso sin tocar la GUI.
Pregunta guía: ¿puedes volver a obtener el mismo resultado desde un directorio limpio?
Objetivos
Al completar M08 podrás:
- Separar un flujo FEA en fases invocables mediante
/INPUT. - Pasar y validar un contrato de argumentos con
*USEyARGx. - Escribir evidencias reproducibles con
*CFOPENy*VWRITE. - Diagnosticar fallos con
/STATUS, el archivo.outy conteos. - Ejecutar dos casos verificables sin reescribir la física de M07.
- Documentar una tabla síntoma → comprobación → causa → solución.
Prerrequisitos y descargas
- M07: el caso base aprueba flecha, tensión interior y equilibrio.
- M02: los componentes no deben depender de selecciones residuales.
- M01: las referencias analíticas viajan con los parámetros de entrada.
08_start.mac— punto de partida.08_macro_debug.mac— driver auditado.08_build.mac— construcción.08_solve.mac— solución.08_extract.mac— validación y CSV.08_bug_hunt.mac— cinco fallos de reutilización.08_challenge.mac— reto de dos casos.08_expected_results.csv— contrato de autocorrección.macro-call-tree.svg— arquitectura del driver.debug-flow.svg— flujo de depuración.
Cómo usar esta lección
| Ruta | Duración | Recorrido |
|---|---|---|
| Primera victoria | 25–30 min | Predicción, invocación del driver y primera ejecución con CSV. |
| Completa | 60–65 min | Además, submacros, depuración, reto de dos directorios limpios. |
Recomendación: define el contrato ARG antes de escribir código. Un macro sin validación temprana convierte un error de entrada en una hora de depuración posterior.
Mapa de la sesión
- Misión: objetivos, descargas y predicción para dos alturas.
- Modelo mental: contrato antes que código.
- Demostración: invocación, submacros y evidencias CSV.
- Caza de errores: rutas, argumentos y KEYOPT mal propagado.
- Reto: reproducibilidad entre dos directorios limpios.
- Dominio: prueba final antes del proyecto automatizado de M09.
Predicción — Dos alturas, una ley
Con b = 0.05 m, L = 1 m, E = 210 GPa y F = −1000 N:
I = b·h³/12
uy_ref = F·L³/(3·E·I)
sigma_ref(x=0.2L) = F·(0.8L)·(h/2)/I| Caso | h (m) | mesh_h (m) | uy_ref (m) | sigma_ref (Pa) | Topología |
|---|---|---|---|---|---|
| 1 | 0.10 | 0.05 | −3.80952381E−4 | 9.60000E6 | 126 nodos / 40 elems |
| 2 | 0.08 | 0.04 | −7.44047619E−4 | 1.50000E7 | 156 nodos / 50 elems |
Al reducir la altura de 0.10 a 0.08, la inercia cae con
h³ y la flecha teórica aumenta aproximadamente un 95 %. Si el
driver está bien encapsulado, ese cambio solo requiere nuevos argumentos.
Modelo mental — Contrato antes que código
M08 no introduce física nueva. Cambia la forma del software: entradas validadas, fases separadas, salidas en archivo y diagnóstico sistemático. Sin ese contrato, el barrido de M09 solo multiplicaría errores ocultos.
Paso 1 — Invocar con un contrato explícito
/CLEAR,START
*USE,08_macro_debug.mac,0.10,-1000,0.05,1
*USE carga la macro y asigna ARG1…ARG4. El driver
traduce esos argumentos a parámetros con nombre y rechaza valores inválidos antes de
construir nada:
beam_h=ARG1
tip_force=ARG2
mesh_h=ARG3
case_id=ARG4
*IF,beam_h,LE,0,THEN
/COM,ERROR: ARG1 beam_h must be positive
/STATUS,PARM
/EOF
*ENDIF
No ejecutes /CLEAR dentro del driver. Vaciaría la base de datos y la
pila de macros. Limpia la sesión antes de llamar a *USE.
Paso 2 — Separar construcción, solución y extracción
/INPUT,08_build,mac,,,,1
/INPUT,08_solve,mac,,,,1
/INPUT,08_extract,mac,,,,1
Cada fase asume precondiciones y las comprueba. 08_build.mac crea geometría,
malla y componentes; 08_solve.mac aplica D/F y
resuelve; 08_extract.mac activa el set, valida frente a teoría y escribe el CSV.
Las divisiones de malla se obtienen con NINT(dim/mesh_h). Así
mesh_h es un argumento real del contrato, no un valor hardcodeado en el
monolito. La construcción fija KEYOPT(2)=3 en SOLID185: con
KEYOPT(2)=0 la tensión de flexión queda artificialmente baja (~22 %) en esta
malla.
Paso 3 — Escribir evidencias, no solo mensajes
*CFOPEN,m08_results,csv
*VWRITE
('case_id,beam_h,tip_force,mesh_h,n_nodes,n_elements,...,passes')
*VWRITE,case_id,beam_h,tip_force,mesh_h,n_nodes,n_elements,...,passes
(...formato...)
*CFCLOS
El CSV debe contener entradas, topología, resultados FE, referencias analíticas, errores
relativos y passes. Un /COM en pantalla ayuda a depurar; el
archivo es la evidencia que sobrevivirá a la sesión.
Paso 4 — Diagnosticar con el mismo método siempre
/STATUS,PARM
/COM,Inspect the .out for file paths, empty selections and missing sets
Si passes=0, no relajes tolerancias. Pregunta en este orden: ¿el contrato de
argumentos es válido? ¿las submacros están en el directorio de trabajo? ¿los componentes
tienen nodos? ¿existe un set antes de extraer?
Contrato CSV de aceptación
Compara tu salida con 08_expected_results.csv:
- Caso 1:
126nodos,40elementos,uy_ref=−3.80952381E−4. - Caso 2:
156nodos,50elementos,uy_ref=−7.44047619E−4. - Error de flecha
< 5 %, tensión interior< 10 %, equilibrio< 0.5 %. passes=1en ambos casos.
Trampas frecuentes
- Invocar
*USEsin copiar también08_build,08_solvey08_extract. - Olvidar
ALLSEL,ALLentre regiones y arrastrar una selección residual. - Extraer desplazamientos cuando
n_sets=0. - Cambiar la física o la tolerancia para «hacer pasar» un caso mal invocado.
Caza de errores
Abre 08_bug_hunt.mac. Hay cinco defectos deliberados. Para cada uno completa la
tabla:
| Error | Síntoma | Comprobación | Causa | Solución mínima |
|---|---|---|---|---|
| 1 | /EOF inmediato |
/STATUS,PARM |
ARG1 ≤ 0 |
Corregir el contrato *USE |
| 2 | Macro not found | .out / ruta |
Nombre o carpeta incorrectos | Copiar los cuatro .mac al cwd |
| 3 | Carga nula | n_tip=0 |
Componente vacío | Revisar CM y SELTOL |
| 4 | Equilibrio absurdo | Selección activa | Selección residual | ALLSEL entre fases |
| 5 | Valores basura | n_sets |
Extracción sin SET |
Activar el set antes de *GET |
Reto verificable — Dos directorios limpios
Ejecuta el driver para ambos casos desde un directorio vacío. Después repite la pareja de ejecuciones desde un segundo directorio limpio. Los CSV deben coincidir numéricamente y no depender de selecciones residuales de otra sesión.
/CLEAR,START
*USE,08_macro_debug.mac,0.10,-1000,0.05,1
/CLEAR,START
*USE,08_macro_debug.mac,0.08,-1000,0.04,2| Comprobación | Caso 1 | Caso 2 |
|---|---|---|
| Topología | 126 / 40 | 156 / 50 |
| uy_ref | −3.80952381E−4 m | −7.44047619E−4 m |
| sigma_ref | 9.60000E6 Pa | 1.50000E7 Pa |
| passes | 1 | 1 |
Autoevaluación
¿Por qué el driver valida argumentos antes de construir?
Porque un argumento inválido debe fallar de forma explícita y temprana. Construir sobre un contrato roto produce evidencias engañosas.
¿Qué aporta separar build / solve / extract?
Permite depurar por bloques, reutilizar fases y evitar un monolito imposible de orquestar desde M09.
¿Cuándo basta un /COM y cuándo hace falta un CSV?
El mensaje ayuda en la sesión actual. El CSV es la evidencia comparable entre ejecuciones, directorios y revisiones.
¿Qué compruebas si tip_nodes queda vacío?
La longitud beam_l, la tolerancia SELTOL y que el componente se
creó tras mallar, no sobre una selección previa incorrecta.
Evidencia de aprendizaje
- Driver
08_macro_debug.macinvocable con cuatro argumentos. - Submacros
08_build,08_solvey08_extract. m08_results.csvde ambos casos conpasses=1.- Log
.outy, si aplica,/STATUSde un fallo diagnosticado. - Tabla de diagnóstico del bug hunt.
- Prueba de reproducibilidad entre dos directorios limpios.
Checklist de salida
- ☐ Valido
ARG1…ARG4antes de construir. - ☐ Separé construcción, solución y extracción.
- ☐ Cada fase falla de forma explícita si faltan precondiciones.
- ☐ Escribo CSV con entradas, FE, referencias y
passes. - ☐ Diagnostico con
/STATUS,.outy conteos. - ☐ Ejecuté los dos casos del contrato.
- ☐ Repetí la prueba desde un directorio limpio.
- ☐ No relajé tolerancias de M07 para forzar el aprobado.
Trazabilidad técnica
La lección utiliza Command Reference 2024 R1 para *USE,
ARG1–ARGn, /INPUT, *CFOPEN,
*VWRITE, /STATUS y /EOF, y la
APDL Guide para la organización de macros y archivos. La física y las tolerancias
de validación se heredan de M07.
Siguiente paso: M09
Con un driver verificable, M09 podrá barrer varias alturas mediante *DO,
consolidar un CSV de decisión y seleccionar el diseño admisible de menor sección sin
intervención manual.