! ============================================================
! M08 - Macros, archivos y depuracion
! Uso:
! Unidades coherentes: m, kg, s, N, Pa.
! No ejecutes /CLEAR dentro de esta macro.
! ============================================================
/FILNAME,m08_macro,1                ! Driver reutilizable: valida ARG, orquesta build/solve/extract.
/TITLE,M08 - Macros, archivos y depuracion
/UNITS,SI

! --- 1. CONTRATO DE ARGUMENTOS ---
beam_h=ARG1                         ! ARG1 recibe la altura de viga pasada por *USE desde la linea de comandos.
tip_force=ARG2                      ! ARG2 recibe la fuerza de punta (debe ser distinta de cero).
mesh_h=ARG3                         ! ARG3 recibe el tamano objetivo de elemento para el mallado.
case_id=ARG4                        ! ARG4 identifica el caso del estudio (entero positivo para trazabilidad).

*IF,beam_h,LE,0,THEN
  /COM,ERROR: ARG1 beam_h must be positive
  /STATUS,PARM                      ! /STATUS,PARM lista parametros activos para depurar el contrato de ARG.
  /EOF
*ENDIF
*IF,tip_force,EQ,0,THEN
  /COM,ERROR: ARG2 tip_force must be nonzero
  /STATUS,PARM                      ! /STATUS,PARM muestra valores recibidos cuando ARG2 es nulo.
  /EOF
*ENDIF
*IF,mesh_h,LE,0,THEN
  /COM,ERROR: ARG3 mesh_h must be positive
  /STATUS,PARM                      ! /STATUS,PARM documenta mesh_h antes de abortar por contrato invalido.
  /EOF
*ENDIF
*IF,case_id,LE,0,THEN
  /COM,ERROR: ARG4 case_id must be a positive integer
  /STATUS,PARM                      ! /STATUS,PARM expone case_id cuando el identificador no es valido.
  /EOF
*ENDIF

beam_l=1.0                          ! --- 2. PARAMETROS FIJOS DEL PROYECTO ---
beam_b=0.05
young=210E9
nu=0.30
select_tol=MIN(beam_h,beam_b)*1E-5
equilibrium_tol=0.005
displacement_tol=0.05
spread_tol=0.01
stress_tol=0.10
symmetry_tol=0.05

/COM,M08 DRIVER: case_id=%case_id% h=%beam_h% F=%tip_force% mesh_h=%mesh_h%
/STATUS,PARM                        ! /STATUS,PARM imprime el estado del contrato antes de lanzar las fases.

! --- 3. FASES SEPARADAS ---
/INPUT,08_build,mac,,,,1            ! /INPUT incluye 08_build.mac como submacro de construccion reutilizable.
/INPUT,08_solve,mac,,,,1            ! /INPUT encadena la fase de solucion sin duplicar codigo en el driver.
/INPUT,08_extract,mac,,,,1          ! /INPUT delega extraccion y validacion en un tercer archivo modular.

*IF,passes,EQ,1,THEN
  /COM,M08 CASE PASSED
*ELSE
  /COM,M08 CASE FAILED - inspect m08_results.csv and .out
*ENDIF

FINISH



