! ----------------------------------------------------------------------
! M09 - English course download: 09_parametric_core.mac
! Follow the matching English lesson for explanations and task details.
! Commands, parameter names, file names, CSV keys, and result tokens are preserved.
! ----------------------------------------------------------------------

beam_l=1.0
beam_b=0.05
young=210E9
nu=0.30
tip_force=-1000
uy_limit=0.00025
stress_limit=150E6
select_tol=MIN(0.08,beam_b)*1E-5
equilibrium_tol=0.005
displacement_tol=0.05
spread_tol=0.01
stress_tol=0.10
symmetry_tol=0.05

*IF,n_cases,LE,0,THEN
  n_cases=3
*ENDIF

/COM,M09 CORE: n_cases=%n_cases% uy_limit=%uy_limit% stress_limit=%stress_limit%

*DIM,h_store,ARRAY,n_cases
*DIM,mesh_store,ARRAY,n_cases
*DIM,uy_store,ARRAY,n_cases
*DIM,uy_ref_store,ARRAY,n_cases
*DIM,sigma_store,ARRAY,n_cases
*DIM,sigma_ref_store,ARRAY,n_cases
*DIM,uy_err_store,ARRAY,n_cases
*DIM,stress_err_store,ARRAY,n_cases
*DIM,force_err_store,ARRAY,n_cases
*DIM,moment_err_store,ARRAY,n_cases
*DIM,n_nodes_store,ARRAY,n_cases
*DIM,n_elems_store,ARRAY,n_cases
*DIM,val_pass_store,ARRAY,n_cases
*DIM,feasible_store,ARRAY,n_cases

*DO,case_id,1,n_cases
  *IF,case_id,EQ,1,THEN
    beam_h=0.08
    mesh_h=0.04
  *ENDIF
  *IF,case_id,EQ,2,THEN
    beam_h=0.10
    mesh_h=0.05
  *ENDIF
  *IF,case_id,EQ,3,THEN
    beam_h=0.12
    mesh_h=0.06
  *ENDIF
  *IF,case_id,EQ,4,THEN
    beam_h=0.14
    mesh_h=0.07
  *ENDIF
  select_tol=MIN(beam_h,beam_b)*1E-5

  /COM,M09 CASE %case_id%: h=%beam_h% mesh_h=%mesh_h%
  /INPUT,09_build,mac,,,,1
  /INPUT,09_solve,mac,,,,1
  /INPUT,09_extract,mac,,,,1

  h_store(case_id)=beam_h
  mesh_store(case_id)=mesh_h
  uy_store(case_id)=uy_tip_avg
  uy_ref_store(case_id)=uy_ref
  sigma_store(case_id)=sigma_fea
  sigma_ref_store(case_id)=sigma_ref
  uy_err_store(case_id)=uy_error
  stress_err_store(case_id)=stress_error
  force_err_store(case_id)=force_error
  moment_err_store(case_id)=moment_error
  n_nodes_store(case_id)=n_nodes
  n_elems_store(case_id)=n_elements
  val_pass_store(case_id)=validation_pass
  feasible_store(case_id)=feasible
*ENDDO

trend_pass=1
*DO,i,1,n_cases-1
  *IF,ABS(uy_store(i+1)),GE,ABS(uy_store(i)),THEN
    trend_pass=0
  *ENDIF
*ENDDO

selected_case=0
selected_h=0
*DO,i,1,n_cases
  *IF,feasible_store(i),EQ,1,THEN
    *IF,selected_case,EQ,0,THEN
      selected_case=i
      selected_h=h_store(i)
    *ELSE
      *IF,h_store(i),LT,selected_h,THEN
        selected_case=i
        selected_h=h_store(i)
      *ENDIF
    *ENDIF
  *ENDIF
*ENDDO

study_passes=0
*IF,trend_pass,EQ,1,AND,selected_case,GT,0,THEN
  study_passes=1
*ENDIF

*CFOPEN,m09_results,csv
*VWRITE
('case_id,beam_h,mesh_h,n_nodes,n_elements,uy_tip,uy_ref,uy_error,sigma_fea,sigma_ref,stress_error,force_error,moment_error,validation_pass,feasible')
*DO,i,1,n_cases
  *VWRITE,i,h_store(i),mesh_store(i),n_nodes_store(i),n_elems_store(i),uy_store(i),uy_ref_store(i),uy_err_store(i),sigma_store(i),sigma_ref_store(i),stress_err_store(i),force_err_store(i),moment_err_store(i),val_pass_store(i),feasible_store(i)
  (F4.0,',',E12.5,',',E12.5,',',F8.0,',',F8.0,',',E12.5,',',E12.5,',',E12.5,',',E12.5,',',E12.5,',',E12.5,',',E12.5,',',F1.0,',',F1.0)
*ENDDO
*VWRITE
('selected_case,selected_h,trend_pass,study_passes')
*VWRITE,selected_case,selected_h,trend_pass,study_passes
(F4.0,',',E12.5,',',F1.0,',',F1.0)
*CFCLOS

/COM,M09 SUMMARY: selected_case=%selected_case% selected_h=%selected_h% trend_pass=%trend_pass% study_passes=%study_passes%
/STATUS,PARM

FINISH
