!*************************************************************************************!
! TITLE: CFVR1903 - Steel checking according to British Standard 5950 1985
! SUBTITLE: Tension & compression buckling checking of a steel structure.
!
! DESCRIPTION: A structure consisting in two steel bars with L angle shape section is
! DESCRIPTION: subjected to the action of a vertical load of 30000 Kp.
! 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: LINK1
! MODULES:
! UNITS: User
! KEYWORD1: Beam
! KEYWORD2: Cross Section
! KEYWORD3: Code Checking/Design
! KEYWORD4: Steel
! KEYWORD5: BS 5950-85
!
!*************************************************************************************!
    FINISH
  ~CFCLEAR,,1
   NomFile='CFVR1903'
   /TITLE, %NomFile%, BS 5950 (1985): Tension and compression buckling

! -------------------------------------------------------------------------------------
! Initial data
! -------------------------------------------------------------------------------------
! CivilFEM Setup: Code & Units
  ~UNITS,,LENG,CM
  ~UNITS,,TIME,S
  ~UNITS,,FORC,Kp
  ~CODESEL,BS595085

/PREP7
! Preprocessor
! --------------------------------------------------
! Materials
  ~CFMP,1,LIB,STEEL,BS5950,GR55   !GR55 (BS 5950 85)
! Element Types
  ET,1,LINK1 ! Type 1: 2D Spar

! Cross Sections
  ~SSECLIB,1,1,23,11   !Angle L 120 x 120 x 12
! Code Properties
  ~SECMDF,1,BS5950PR,AHOLES,,3.6

! Member Properties
  L        = 111.8
  KLTXY    = 1.1
  KLTXZ    = 1.1
  KCXY     = 1.2
  KCXZ     = 1.2
  CteRob   = 0
  n        = 1
  m        = 1
  DL       = 0
  CFBUCKXY = 1
  CFBUCKXZ = 1
  CHCKAXIS = 1
  ~MEMBPRO,1,BS595085,ALL,L,KLTXY,KLTXZ,KCXY,KCXZ,CteRob,n,m,DL,CFBUCKXY,CFBUCKXZ,CHCKAXIS

! Beam Properties
 ~BMSHPRO,1,BEAM,1,1,,,1,1,0,,

! Nodes
  N, 1 $ N,2,100 $ N,3,,-50
! Elements
  E,1,2
  E,3,2
  EPLOT
/SOLU
! Solution
! --------------------------------------------------
! Displacements
  D, 1,ALL
  D, 3,ALL
! Apply Load
  F,2,FY,-30000      ! Kp
! Capture Image
/IMAGE,SAVE,%NomFile%,BMP
! Solve
  SOLVE
/POST1
! Postprocessor
! --------------------------------------------------
 ! Read results
   ~CFSET,,1,1       ! Load first load case
 ! Plot axial force
   ~PLLSFOR,F,X,-1
 ! BS 5950 85 Check for Tension
   ~CHKSTL,TENSION
 ! BS 5950 85 Check for Compresion + buckling
   ~CHKSTL,BUCK_CMP

!--------------------------------------------------------------------------------------
! DATA CHECK
!--------------------------------------------------------------------------------------
! Data comparison number
  NComp = 13
  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) = 'Crt_1'
  LABEL(2 ,1) = 'F1'
  LABEL(3 ,1) = 'PT1'
  LABEL(4 ,1) = 'Class2'
  LABEL(5 ,1) = 'WebClass2'
  LABEL(6 ,1) = 'Crt_2'
  LABEL(7 ,1) = 'F2'
  LABEL(8 ,1) = 'Pc2'
  LABEL(9 ,1) = 'Lambda'
  LABEL(10,1) = 'Lambda0'
  LABEL(11,1) = 'PerryFac'
  LABEL(12,1) = 'Robersts'
  LABEL(13,1) = 'Rhoc'

! Correct values
  VALUE(1 ,1)=0.54618
  VALUE(2 ,1)=60000.
  VALUE(3 ,1)=109854.
  VALUE(4 ,1)=4
  VALUE(5 ,1)=1
  VALUE(6 ,1)=0.6586
  VALUE(7 ,1)=67082.
  VALUE(8 ,1)=101846.
  VALUE(9 ,1)=36.7561
  VALUE(10,1)=13.832
  VALUE(11,1)=0.12608
  VALUE(12,1)=5.5
  VALUE(13,1)=3698.

! Obtained values
!   ! BS 5950 (1985) Check for Tension
   ~CFSET,1      ! Load first alternative
   ~PLLSSTL,CRT_TOT
   *GET,VALUE(1,2),ELEM,1,ETAB,CFETAB_I
   ~PLLSSTL,F
   *GET,VALUE(2,2),ELEM,1,ETAB,CFETAB_I
   ~PLLSSTL,PT
   *GET,VALUE(3,2),ELEM,1,ETAB,CFETAB_I

 ! BS 5950 (1985) Check for Compression
   ~CFSET,2      ! Load second alternative
   ~PLLSSTL,CLASS
   *GET,VALUE(4,2),ELEM,2,ETAB,CLASS_I
   ~PLLSSTL,WEBCLASS
   *GET,VALUE(5,2),ELEM,2,ETAB,CLASS_I
   ~PLLSSTL,CRT_TOT
   *GET,VALUE(6,2),ELEM,2,ETAB,CFETAB_I
   ~PLLSSTL,F
   *GET,VALUE(7,2),ELEM,2,ETAB,CFETAB_I
   ~PLLSSTL,PC
   *GET,VALUE(8,2),ELEM,2,ETAB,CFETAB_I
   ~PLLSSTL,LAMBDA
   *GET,VALUE(9,2),ELEM,2,ETAB,CFETAB_I
   ~PLLSSTL,LAMBDA0
   *GET,VALUE(10,2),ELEM,2,ETAB,CFETAB_I
   ~PLLSSTL,PERRYFCT
   *GET,VALUE(11,2),ELEM,2,ETAB,CFETAB_I
   ~PLLSSTL,ROBERSTS
   *GET,VALUE(12,2),ELEM,2,ETAB,CFETAB_I
   ~PLLSSTL,RHOC
   *GET,VALUE(13,2),ELEM,2,ETAB,CFETAB_I

! Warning and error tolerances
  TOLER( 1 ,1)= 1E-4   $ TOLER( 1 , 2)= 1E-4
  TOLER( 2 ,1)= 1E-3   $ TOLER( 2 , 2)= 1E-3
  TOLER( 3 ,1)= 1E-1   $ TOLER( 3 , 2)= 1E-1  ! Rounding error accepted
  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-1   $ TOLER( 7 , 2)= 1E-1  ! Rounding error accepted
  TOLER( 8 ,1)= 1E-1   $ TOLER( 8 , 2)= 1E-1  ! Rounding error accepted
  TOLER( 9 ,1)= 1E-3   $ TOLER( 9 , 2)= 1E-3
  TOLER( 10,1)= 1E-3   $ TOLER( 10, 2)= 1E-3
  TOLER( 11,1)= 1E-3   $ TOLER( 11, 2)= 1E-3
  TOLER( 12,1)= 1E-3   $ TOLER( 12, 2)= 1E-3
  TOLER( 13,1)= 1E-0   $ TOLER( 13, 2)= 1E-0  ! Rounding error accepted

!--------------------------------------------------------------------------------------
! Results comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
