! ============================================================
! M03 - Elementos, materiales y secciones
! ============================================================
/CLEAR,START                        ! Termina en /PREP7: no aplica cargas ni resuelve.
/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                       ! ET,1,SOLID185 declara el tipo de elemento que se usara al mallar.
KEYOPT,1,2,0                        ! KEYOPT,1,2,0 fija la formulacion de flexion del solido (sin tratamiento especial).
MP,EX,1,young_steel                 ! MP,EX asigna el modulo de Young al material 1 en el banco de propiedades.
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                              ! TYPE,1 activa el puntero de tipo para los elementos que se crearan a continuacion.
MAT,1                               ! MAT,1 activa el puntero de material coherente con el acero homogeneo.

BLOCK,0,beam_l,0,beam_h,0,beam_b     ! No necesita SECTYPE, SECDATA ni SECNUM.
ESIZE,mesh_h
VMESH,ALL

ALLSEL,ALL                          ! Componente heredado de M02 para el reto bimaterial.
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

*GET,n_elements,ELEM,0,COUNT        ! --- 3. AUDITAR: consultar atributos almacenados en los elementos ---
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



