!*************************************************************************************!
! TITLE: CFVR1907 - Steel checking according to British Standard 5950 1985
! SUBTITLE: Compression buckling check of a steel column.
!
! DESCRIPTION: A doube UPN shape steel column is subjected to an axial compression force.
! DESCRIPTION:
! DESCRIPTION: Determine the section class and total criterion, including values of Perry
! DESCRIPTION: factor and Robertson constant according to BS 5950-85.
! DESCRIPTION:
!
! ELEMENT TYPE: BEAM4
! MODULES:
! UNITS: User
! KEYWORD1: Beam
! KEYWORD2: Cross Section
! KEYWORD3: Code Checking/Design
! KEYWORD4: Steel
! KEYWORD5: BS 5950-85
!
!*************************************************************************************!
   FINISH
  ~CFCLEAR,,1
   NomFile='CFVR1907'
   /TITLE, %NomFile%, British Standard 5950 (1985): Compression Buckling

! -------------------------------------------------------------------------------------
! Initial data
! -------------------------------------------------------------------------------------
! CivilFEM Setup: Code & Units
  ~UNITS,,LENG,M
  ~UNITS,,TIME,S
  ~UNITS,,FORC,KN
  ~CODESEL,BS595085
/PREP7
! Preprocessor
! --------------------------------------------------
! Materials
  ~CFMP,1,LIB,STEEL,BS5950,GrWR50A !GrWR50A

! Element Types
  ET,1,BEAM4 ! Type 1: 3D Beam

! Cross Sections
  ~SSECLIB,1,1,94,6    !2 UPN 180

! Member properties
  L        = 10
  KLTXY    = 1.0
  KLTXZ    = 1.0
  KCXY     = 1.1
  KCXZ     = 1.1
  CteRob   = 0
  n        = 1
  m        = 1
  DL       = 0
  CFBUCKXY = 1
  CFBUCKXZ = 1
  CHCKAXIS = 0
  ~MEMBPRO,1,BS595085,ALL,L,KLTXY,KLTXZ,KCXY,KCXZ,CteRob,n,m,DL,CFBUCKXY,CFBUCKXZ,CHCKAXIS

! Beam properties
 ~BMSHPRO,1,BEAM,1,,,,4,1,0

! Nodes
  N, 1
  N,25,,10
  FILL, 1,25
! Elements
  E,1,2
  EGEN,24,1,1
  EPLOT
/SOLU
! Solution
! --------------------------------------------------
! Displacements
  D, 1,UX
  D, 1,UY
  D, 1,UZ
  D,25,UX
  D,25,UZ
  D,ALL,ROTY
! Apply Load
  F,25,FY,-250
! Solve
  SOLVE
/POST1
! Postprocessor
! --------------------------------------------------
! Read results
  ~CFSET,,1,1       ! Load first load case

! Buckling Compression
  ~CHKSTL,BUCK_CMP

!--------------------------------------------------------------------------------------
! DATA CHECK
!--------------------------------------------------------------------------------------
! Data comparison number
  NComp = 10
  NComp_ch =  0

! Matrix dim.
  *DIM,LABEL,CHAR,Ncomp,1
  *DIM,LABEL_CH,CHAR,Ncomp_ch,1
  *DIM,VALUE,,Ncomp,3
  *DIM,VALUE_CH,CHAR,Ncomp_ch,3
  *DIM,TOLER,,Ncomp,2

! Labels
  LABEL( 1,1) ='CLASS'
  LABEL( 2,1) ='WEBCLASS'
  LABEL( 3,1) ='CRT_TOT'
  LABEL( 4,1) ='F'
  LABEL( 5,1) ='PC'
  LABEL( 6,1) ='LAMBDA'
  LABEL( 7,1) ='LAMBDA0'
  LABEL( 8,1) ='PERRYFCT'
  LABEL( 9,1) ='ROBERSTS'
  LABEL(10,1) ='RHOC'

! Correct values
  VALUE( 1,1)= 3
  VALUE( 2,1)= 1
  VALUE( 3,1)= 0.94929
  VALUE( 4,1)= 250.
  VALUE( 5,1)= 263.353
  VALUE( 6,1)= 201.242
  VALUE( 7,1)= 15.316
  VALUE( 8,1)= 0.371
  VALUE( 9,1)= 2.
  VALUE(10,1)= 47037.4

! Obtained values
 ~PLLSSTL,CLASS
  *GET,VALUE( 1,2),ELEM,1,ETAB,CLASS_J
 ~PLLSSTL,WEBCLASS
  *GET,VALUE( 2,2),ELEM,1,ETAB,CLASS_J
 ~PLLSSTL,CRT_TOT
  *GET,VALUE( 3,2),ELEM,1,ETAB,CFETAB_J
 ~PLLSSTL,F
  *GET,VALUE( 4,2),ELEM,1,ETAB,CFETAB_J
 ~PLLSSTL,PC
  *GET,VALUE( 5,2),ELEM,1,ETAB,CFETAB_J
 ~PLLSSTL,LAMBDA
  *GET,VALUE( 6,2),ELEM,1,ETAB,CFETAB_J
 ~PLLSSTL,LAMBDA0
  *GET,VALUE( 7,2),ELEM,1,ETAB,CFETAB_J
 ~PLLSSTL,PERRYFCT
  *GET,VALUE( 8,2),ELEM,1,ETAB,CFETAB_J
 ~PLLSSTL,ROBERSTS
  *GET,VALUE( 9,2),ELEM,1,ETAB,CFETAB_J
 ~PLLSSTL,RHOC
  *GET,VALUE(10,2),ELEM,1,ETAB,CFETAB_J

! Warning and error tolerances
  TOLER( 1,1)= 1E-3 $ TOLER( 1,2)= 1E-3
  TOLER( 2,1)= 1E-3 $ TOLER( 2,2)= 1E-3
  TOLER( 3,1)= 1E-3 $ TOLER( 3,2)= 1E-3
  TOLER( 4,1)= 1E-3 $ TOLER( 4,2)= 1E-3
  TOLER( 5,1)= 1E-3 $ TOLER( 5,2)= 1E-3
  TOLER( 6,1)= 1E-3 $ TOLER( 6,2)= 1E-3
  TOLER( 7,1)= 1E-3 $ TOLER( 7,2)= 1E-3
  TOLER( 8,1)= 1E-3 $ TOLER( 8,2)= 1E-3
  TOLER( 9,1)= 1E-3 $ TOLER( 9,2)= 1E-3
  TOLER(10,1)= 1E+1 $ TOLER(10,2)= 1E+1  ! Rounding error accepted

!--------------------------------------------------------------------------------------
! Results comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
