Marc & Structures
Índice
M08 Intermedio ~65 min (lectura + práctica)

Macros, archivos y depuración

/INPUT, *USE, ARGx, *CFOPEN, *VWRITE, /STATUS y archivos .out

Entregable del módulo

08_macro_debug.mac

Script APDL listo para ejecutar en MAPDL

Descargar .mac

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 *USE y ARGx.
  • Escribir evidencias reproducibles con *CFOPEN y *VWRITE.
  • Diagnosticar fallos con /STATUS, el archivo .out y 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.

Cómo usar esta lección

RutaDuraciónRecorrido
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

  1. Misión: objetivos, descargas y predicción para dos alturas.
  2. Modelo mental: contrato antes que código.
  3. Demostración: invocación, submacros y evidencias CSV.
  4. Caza de errores: rutas, argumentos y KEYOPT mal propagado.
  5. Reto: reproducibilidad entre dos directorios limpios.
  6. 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 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

Driver que valida argumentos y llama a build, solve y extract
Figura 1. Una macro pública orquesta tres fases privadas con fallos explícitos.

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 ARG1ARG4. 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

Ciclo de depuración: síntoma, evidencia, causa y corrección
Figura 2. Cada fallo se cierra con una corrección mínima y una re-ejecución limpia.
/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: 126 nodos, 40 elementos, uy_ref=−3.80952381E−4.
  • Caso 2: 156 nodos, 50 elementos, uy_ref=−7.44047619E−4.
  • Error de flecha < 5 %, tensión interior < 10 %, equilibrio < 0.5 %.
  • passes=1 en ambos casos.

Trampas frecuentes

  • Invocar *USE sin copiar también 08_build, 08_solve y 08_extract.
  • Olvidar ALLSEL,ALL entre 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.mac invocable con cuatro argumentos.
  • Submacros 08_build, 08_solve y 08_extract.
  • m08_results.csv de ambos casos con passes=1.
  • Log .out y, si aplica, /STATUS de un fallo diagnosticado.
  • Tabla de diagnóstico del bug hunt.
  • Prueba de reproducibilidad entre dos directorios limpios.

Checklist de salida

  • ☐ Valido ARG1ARG4 antes 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, .out y 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, ARG1ARGn, /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.

Demuestra que puedes hacerlo sin pistas

Necesitas al menos 80 % y acertar todas las comprobaciones críticas. Puedes repetirla sin límite; después de cada intento recibirás una ruta de repaso concreta.

6 comprobaciones

Competencia

Reutilizar el modelo validado mediante macros con contrato y evidencias.

Evidencia esperada

Dos casos (h=0,08 y 0,10) con passes=1 y CSV reproducible entre directorios limpios.

Guarda el dominio entre dispositivos

Introduce tu email y recibirás un enlace seguro. La cuenta solo guarda progreso, intentos y puntuaciones.

1.¿Cuál es la forma correcta de limpiar la sesión antes de invocar el driver? Crítica
2.ARG1 llega con beam_h=0. ¿Qué debe hacer el driver? Crítica
3.Introduce uy_ref teórico (m) para h=0,08 m con F=−1000 N, L=1 m, b=0,05 m y E=210 GPa. Crítica
m
4./INPUT no encuentra 08_build.mac. ¿Cuál es la comprobación inmediata? Crítica
5.Para el caso 2 (h=0,08, mesh_h=0,04), ¿cuántos elementos espera el contrato? Crítica
elementos
6.Predicción: ejecutas el mismo *USE desde dos directorios limpios. ¿Qué debe ocurrir?

Las respuestas se corrigen en el servidor; el navegador no puede desbloquear módulos.

El módulo se completa al superar la prueba de dominio. Las lecciones anteriores permanecen disponibles.

Descargar 08_macro_debug.mac