! ============================================================
! M03 - Elementos, materiales y secciones
! Caso base: viga maciza homogenea de acero
! Termina en /PREP7: no aplica cargas ni resuelve.
! ============================================================

/CLEAR,START
/FILNAME,m03_attributes,1
/TITLE,M03 - Atributos auditables
/UNITS,SI

case_id=0
beam_l=1.0
beam_h=0.10
beam_b=0.05
mesh_h=0.025
young_steel=210E9
nu_steel=0.30
young_aluminum=70E9
nu_aluminum=0.33

/PREP7

! --- 1. DEFINIR: crear entradas en las tablas ---
ET,1,SOLID185
KEYOPT,1,2,0
MP,EX,1,young_steel
MP,PRXY,1,nu_steel
MP,EX,2,young_aluminum
MP,PRXY,2,nu_aluminum

! --- 2. ACTIVAR: elegir los atributos para los proximos elementos ---
TYPE,1
MAT,1

! Un solido homogeneo obtiene su seccion de la geometria del volumen.
! No necesita SECTYPE, SECDATA ni SECNUM.
BLOCK,0,beam_l,0,beam_h,0,beam_b
ESIZE,mesh_h
VMESH,ALL

! Componente heredado de M02 para el reto bimaterial.
ALLSEL,ALL
ESEL,S,CENT,X,0.4*beam_l,0.6*beam_l
CM,mid_elems,ELEM
*GET,n_mid_elems,ELEM,0,COUNT
ALLSEL,ALL

! --- 3. AUDITAR: consultar atributos almacenados en los elementos ---
*GET,n_elements,ELEM,0,COUNT
ESEL,S,TYPE,,1
*GET,n_type1,ELEM,0,COUNT
ALLSEL,ALL
ESEL,S,MAT,,1
*GET,n_mat1,ELEM,0,COUNT
ALLSEL,ALL
ESEL,S,MAT,,2
*GET,n_mat2,ELEM,0,COUNT
ALLSEL,ALL

young_ratio=young_steel/young_aluminum
passes=1
*IF,n_elements,LE,0,THEN
  passes=0
*ENDIF
*IF,n_type1,NE,n_elements,THEN
  passes=0
*ENDIF
*IF,n_mat1,NE,n_elements,THEN
  passes=0
*ENDIF
*IF,n_mat2,NE,0,THEN
  passes=0
*ENDIF
*IF,n_mid_elems,LE,0,THEN
  passes=0
*ENDIF
*IF,n_mid_elems,GE,n_elements,THEN
  passes=0
*ENDIF
*IF,young_ratio,NE,3,THEN
  passes=0
*ENDIF

ETLIST,1
MPLIST,ALL

*CFOPEN,m03_attribute_audit,csv
*VWRITE
('case,n_elements,n_type1,n_mat1,n_mat2,n_mid_elems,young_steel,young_aluminum,young_ratio,passes')
*VWRITE,case_id,n_elements,n_type1,n_mat1,n_mat2,n_mid_elems,young_steel,young_aluminum,young_ratio,passes
(F2.0,',',F10.0,',',F10.0,',',F10.0,',',F10.0,',',F10.0,',',E16.8,',',E16.8,',',F8.3,',',F2.0)
*CFCLOS

*IF,passes,EQ,1,THEN
  /COM,M03 AUDIT PASSED
*ELSE
  /COM,M03 AUDIT FAILED - inspect m03_attribute_audit.csv
*ENDIF

FINISH
