En M00 ejecutaste una simulación preparada. Ahora harás que el modelo deje de ser una secuencia rígida: recibirá entradas, comprobará si tienen sentido y tomará su primera decisión de ingeniería.
Tu misión
La viga no puede superar 0,25 mm de flecha ni 150 MPa. Entre varias alturas candidatas, ¿cuál es la menor que cumple?
Al terminar, el script responderá por ti. Pero antes tendrás que enseñarle qué significa cada número.
Objetivos
Al completar M01 podrás demostrar que:
- Sustituyes números dispersos por parámetros con significado físico y unidades conocidas.
- Distingues entradas, magnitudes derivadas, referencias analíticas y resultados FEA.
- Construyes expresiones APDL y predices su tendencia antes de ejecutar.
- Detienes entradas inválidas mediante
*IF. - Defines un array con
*DIMy lo recorres mediante*DO. - Generas una tabla CSV y seleccionas la primera alternativa admisible.
Prerrequisitos y archivos
- Haber completado M00 o reconocer el flujo
/PREP7 → /SOLU → /POST1. - Conocer el significado de módulo elástico, momento de inercia y flecha.
- Trabajar con el sistema coherente SI: metros, newtons y pascales.
01_start.mac— punto de partida.01_parametric_beam.mac— solución guiada.01_bug_hunt.mac— cinco defectos deliberados.01_challenge.mac— plantilla del reto.01_expected_results.csv— autocorrección.
Antes de programar: haz una predicción
En M00 la altura era 0.10 m. Imagina que la duplicamos:
beam_h=0.20¿La flecha será la mitad, la cuarta parte o la octava parte?
Para una sección rectangular:
I = B·H³/12
uy = P·L³/(3·E·I)
Como I ∝ H³ y uy ∝ 1/I, obtenemos uy ∝ 1/H³.
Duplicar la altura reduce la flecha teórica a 1/8. Guarda esta predicción:
será nuestro primer test.
Modelo mental: el contrato del script
Organizaremos el programa como si fuera una función de ingeniería:
ENTRADAS → COMPROBACIONES → MODELO → SOLUCIÓN → RESULTADOS
Esto separa cuatro categorías que no deben confundirse:
| Categoría | Ejemplo | Quién la controla |
|---|---|---|
| Entrada | beam_h | Usuario o estudio |
| Derivada | inertia | Expresión del programa |
| Referencia | uy_ref | Modelo analítico |
| Resultado FEA | uy_tip | Solver y postprocesado |
Una referencia analítica no es «el resultado correcto» por decreto. Es una comparación independiente, basada en hipótesis distintas, que ayuda a detectar errores de unidades, cargas o rigidez.
Paso 1 — Encontrar los números mágicos
Abre 01_start.mac. Encontrarás expresiones como:
MP,EX,1,210E9
BLOCK,0,1.0,0,0.10,0,0.05
ESIZE,0.025
F,ALL,FY,-1000/n_tip
Los valores no son incorrectos, pero su significado está oculto y aparecen dentro de las instrucciones.
Cambiar la longitud exige buscar cada aparición de 1.0 y decidir si representa longitud,
coordenada o cualquier otra cosa.
Reúne las entradas al principio:
! --- INPUTS: SI units ---
beam_l=1.0
beam_h=0.10
beam_b=0.05
young=210E9
nu=0.30
tip_force=-1000
mesh_h=0.025Después reemplaza los números físicos:
MP,EX,1,young
MP,PRXY,1,nu
BLOCK,0,beam_l,0,beam_h,0,beam_b
ESIZE,mesh_h
NSEL,S,LOC,X,beam_l
F,ALL,FY,tip_force/n_tipReglas prácticas para nombres
- Usa nombres que indiquen objeto y magnitud:
beam_h, noh1. - Conserva un idioma y un estilo en todo el proyecto.
- No codifiques unidades distintas dentro del nombre si todo el contrato usa un sistema coherente.
- Reserva nombres como
ipara índices breves de bucles. - No reutilices un parámetro de entrada para almacenar un resultado.
Paso 2 — Construir expresiones verificables
Calcula primero la inercia:
inertia=beam_b*beam_h**3/12
En APDL, ** representa potencia. beam_h*3 no es una forma alternativa:
es otra operación.
Añade las referencias:
uy_ref=tip_force*beam_l**3/(3*young*inertia)
uy_ref_abs=ABS(uy_ref)
sigma_ref=ABS(tip_force)*beam_l*(beam_h/2)/inertiaPara el caso base deben obtenerse aproximadamente:
| Parámetro | Valor esperado | Interpretación |
|---|---|---|
inertia | 4.1667E-6 m⁴ | Propiedad geométrica |
uy_ref | -3.8095E-4 m | Signo hacia −Y |
uy_ref_abs | 0.381 mm | Magnitud de comparación |
sigma_ref | 12.0 MPa | Tensión nominal de flexión |
La trampa de los milímetros
Si escribes beam_h=100 dentro de este modelo, MAPDL no sabe que querías decir
100 mm. Interpretará 100 metros. /UNITS,SI documenta el convenio, pero no convierte entradas.
Paso 3 — Rechazar entradas imposibles
Esperar hasta VMESH para descubrir que una dimensión es cero produce mensajes lejanos a la causa.
Es mejor comprobar el contrato inmediatamente:
*IF,beam_h,LE,0,THEN
/COM,ERROR: beam_h must be positive
/EOF
*ENDIF
*IF,mesh_h,GT,beam_h/2,THEN
/COM,WARNING: mesh_h is larger than beam_h/2
*ENDIFEl primer bloque representa un error que impide continuar. El segundo es una advertencia: el modelo puede ejecutarse, pero la discretización transversal merece atención.
Experimento controlado
- Cambia temporalmente
beam_ha cero. - Ejecuta el script.
- Comprueba que no se crea geometría.
- Restaura
beam_h=0.10.
No celebres que MAPDL «ha fallado correctamente». Celebra que tu programa detectó el problema antes de entregar datos absurdos al modelador.
Paso 4 — Dar memoria al programa con arrays
Queremos probar cuatro alturas sin crear cuatro parámetros independientes:
*DIM,heights,ARRAY,4
heights(1)=0.08
heights(2)=0.10
heights(3)=0.12
heights(4)=0.14
*DIM reserva un array. Cada posición contiene una alternativa. El array describe datos;
todavía no indica qué hacer con ellos.
Paso 5 — Recorrer alternativas con *DO
*DO,i,1,4
trial_h=heights(i)
trial_i=beam_b*trial_h**3/12
trial_uy=ABS(tip_force)*beam_l**3/(3*young*trial_i)
trial_stress=ABS(tip_force)*beam_l*(trial_h/2)/trial_i
*ENDDO
El índice i toma sucesivamente los valores 1, 2, 3 y 4. En cada vuelta,
trial_h representa una altura distinta. El cálculo analítico cuesta prácticamente nada;
por eso es un buen lugar para aprender bucles. Ejecutar una simulación completa en cada vuelta llegará en M09.
Paso 6 — Convertir límites en una decisión
passes=0
*IF,trial_uy,LE,uy_limit,THEN
*IF,trial_stress,LE,stress_limit,THEN
passes=1
*IF,selected_h,EQ,0,THEN
selected_h=trial_h
*ENDIF
*ENDIF
*ENDIF
selected_h comienza en cero. Solo se actualiza para la primera alternativa válida,
por lo que al finalizar contiene la menor altura admisible de un array ordenado.
| Altura | Flecha | Tensión | Estado |
|---|---|---|---|
| 80 mm | 0,744 mm | 18,75 MPa | No cumple flecha |
| 100 mm | 0,381 mm | 12,00 MPa | No cumple flecha |
| 120 mm | 0,220 mm | 8,33 MPa | Cumple |
| 140 mm | 0,139 mm | 6,12 MPa | Cumple |
La primera candidata válida es 120 mm.
Paso 7 — Escribir una evidencia reutilizable
Una tabla es más útil que valores enterrados en el output:
*CFOPEN,m01_design_table,csv
*VWRITE
('height_m,uy_ref_m,sigma_ref_pa,passes')
! Dentro del bucle:
*VWRITE,trial_h,trial_uy,trial_stress,passes
(E16.8,',',E16.8,',',E16.8,',',F2.0)
*CFCLOS
Al ejecutar el entregable aparecerá m01_design_table.csv en el Working Directory.
Ábrelo en un editor de texto antes de llevarlo a una hoja de cálculo: debes poder entender su estructura sin depender de otra aplicación.
Caza de errores
Descarga 01_bug_hunt.mac.
No lo ejecutes todavía. Encuentra cinco defectos:
- Una altura expresada en unidades incompatibles.
- Un tamaño de malla imposible.
- Una potencia escrita como multiplicación.
- Una magnitud de tensión con signo inadecuado para compararla con un límite.
- Una geometría que ignora el bloque de parámetros.
Para cada defecto escribe: síntoma probable, causa y corrección mínima.
Reto verificable
Abre 01_challenge.mac
y completa los cuatro TODO.
- Añade una quinta altura elegida por ti.
- Recorre las cinco alternativas sin duplicar las expresiones.
- Identifica la primera que cumple flecha y tensión.
- Genera un CSV con entradas, referencias y estado.
Criterios de aceptación
uy_refbase difiere menos del 0,1 % de3.8095E-4 m.sigma_refbase difiere menos del 0,1 % de12 MPa.- Al duplicar altura:
uy_nuevo/uy_base = 0.125 ± 0.001. - Una entrada negativa se rechaza antes de `/PREP7`.
- El CSV contiene una fila por alternativa y puede reproducirse.
Autoevaluación
¿Por qué beam_h es una entrada e inertia no?
Porque la altura es elegida por el usuario, mientras que la inercia se deriva de la geometría mediante una expresión.
¿Qué diferencia hay entre uy_ref y un desplazamiento FEA?
uy_ref procede de teoría de vigas; el desplazamiento FEA procede del modelo discreto y sus hipótesis.
¿Qué significa ** en una expresión APDL?
Es el operador de potencia; beam_h**3 representa el cubo de la altura.
¿Por qué validar antes de /PREP7?
Para detener el programa cerca de la causa y evitar que geometría o solver reciban entradas imposibles.
¿Por qué no ejecutamos cuatro FEA dentro del bucle?
M01 se centra en lógica y predimensionado barato. La automatización de simulaciones completas requiere controlar reconstrucción, resultados y archivos, y se aborda en M09.
Evidencia de aprendizaje
01_parametric_beam.macejecutado desde una sesión limpia.m01_design_table.csvcon cuatro alternativas.- Archivo del reto con una quinta alternativa.
- Tabla «defecto → síntoma → causa → corrección» de la caza de errores.
- Predicción y comprobación de la razón
1/8al duplicar altura.
Checklist de validación
- Reuní todas las entradas físicas en un bloque documentado.
- Eliminé los números mágicos de geometría, material, malla y carga.
- Distingo entradas, derivados, referencias y resultados FEA.
- El script rechaza dimensiones y malla no positivas.
- El CSV coincide con los resultados esperados dentro de la tolerancia.
- La primera altura válida del conjunto base es 120 mm.
- Completé la caza de errores y el reto sin utilizar la GUI.
Lo siguiente
Tu modelo ya acepta entradas y toma decisiones. En M02 resolverás un problema más sutil: aplicar cargas y restricciones sin confiar en números de nodo que cambian al modificar geometría o malla.