!****************************************************************************************************
! TITLE: CFVR5151 - Bridge loads
! SUBTITLE: Slab bridge with vehicle loads, surface loads and prestressing cables.
!
! DESCRIPTION: The example is a slab bridge on which vehicle loads are defined.
! DESCRIPTION:
! DESCRIPTION: The bridge has a rectangular cross section 3 x 4.3 made of HA-35 concrete.
! DESCRIPTION: It has the follow geometry:
! DESCRIPTION:
! DESCRIPTION: Plan View
! DESCRIPTION:
! DESCRIPTION: - Straight line: From MP 90 to MP 120.
! DESCRIPTION:
! DESCRIPTION: - Clothoid: From MP 120 (radius = 0) to MP 170 (radius = -200).
! DESCRIPTION:
! DESCRIPTION: Elevation View
! DESCRIPTION:
! DESCRIPTION: - Straight line: From MP 90 to MP 170 (0% slope).
! DESCRIPTION:
! DESCRIPTION: Families of vehicle loads are defined.
! DESCRIPTION:
! DESCRIPTION: The aim of the example is to verify the vehicle loads.
!
! ELEMENT TYPE: SOLID95
! MODULES: NLBR
! UNITS: SI
! KEYWORD1: Bridge Loads
!
!*************************************************************************************!

  FINISH
  ~CFCLEAR,,1
  ~CFACTIV,NLBR,Y
  NomFile='CFVR5151'
  /TITLE, %NomFile%, Bridge loads

! -------------------------------------------------------------------------------------
! Initial data
! -------------------------------------------------------------------------------------
  /PREP7
  ~CFCONFG,BRIDGE,PCA,0

! Materials
  ~CFMP,1,LIB,CONCRETE,EHE,HA-35

! Element type
  ET,1,SOLID95

  ! Bridge definition
  ~BRINIP,1,
  ~BRADDPL, 90,120, 0,   0   ! Straight line
  ~BRADDPL,   ,170, 0,-200   ! Clothoid

  ~BRADDEL, 90,170

  ~BRSSLAB,1,TS,1,8.1,13.5,1.35,0.2

  ~BRHL,1,C, -0.675, 3.375,.475,,1
  ~BRHL,1,C, -0.675, 2.025,.475,,1
  ~BRHL,1,C, -0.675, 0.675,.475,,1
  ~BRHL,1,C, -0.675,-0.675,.475,,1
  ~BRHL,1,C, -0.675,-2.025,.475,,1
  ~BRHL,1,C, -0.675,-3.375,.475,,1

  ~BRMVDL,1,2, 4.05
  ~BRMVDL,1,8,-4.05
  ~BRMVDL,1,1, 5.5
  ~BRMVDL,1,9,-5.5

  ~BRSGEN,1,2,1

  ~BRSMDF,1,NAME,,,Support Bridge Section

  ~BRBC,1,ADD,3
  ~BRBC,1,ADD,5
  ~BRBC,1,ADD,7

  ~BRSMDF,2,NAME,,,Midle Bridge Section

  ~BRSDIV,1,SLAB,SIZE,,0.40
  ~BRSDIV,1,SLAB,THICK,,2

  MOPT,QMESH,ALTE

  ini=110.0
  fin=120.0
  step=5
  *DO,I,ini,fin,step
    ~BRDEF,I,2,0.0,0.0,0.00,,  ,0
  *ENDDO

  ini=120.0
  fin=130.0
  step=5
  bank=0 ! %
  *DO,I,ini,fin,step
    ~BRDEF,I,2,0.0,0.0,(I-ini)/(fin-ini)*bank,,  ,0
  *ENDDO
  ~BRDEF,110.0,1,0.0,0.0,0.00,,,1
  ~BRDEF,110.8,2,0.0,0.0,0.00,,,0
  ~BRDEF,fin-0.6,2,0.0,0.0,bank,,  ,1
  ~BRDEF,fin    ,1,0.0,0.0,bank,,  ,1
  ~BRDEF,119.5,2,0.0,0.0,0,,,1
  ~BRDEF,120.0,1,0.0,0.0,0,,,1
  ~BRDEF,120.5,,0.0,0.0,0.00,,,0

  ~BRGEN,,,,1.50,

/VIEW, 1, 0.89, -0.38, 0.25
/ANG,  1, -84.93
EPLOT
/IMAGE, SAVE, %NomFile%,BMP

! Transfer DOF constraints from KPs to nodes.
  ALLSEL
  DTRAN

  ~BRSKTCH,5

  ! LOADS
  /SOLU
  /sys,del file.s*
  ALLSEL
! Familiy definition.
! The following families will contain all the vehicle steps.
! These steps are incompatible (the vehicle can only be at one location at a time).
  ~BLFDF,1001, INCOMPAT  ! Vertical loads
  ~BLFDF,1002, INCOMPAT  ! Horizontal loads (Breaking, acceleration, etc.)
! The following family will contain all the surface loads steps.
! These steps are compatible.
  ~BLFDF,1011, COMPAT  ! Vertical loads
  ~BLFDF,1012, COMPAT  ! Horizontal loads
! The following family will contain all the cables.
  ~BLFDF,1021, ADD,1,1

! Vehicle number 15
  ~BLVST,15
    ~BLVA, 3, 1.5, 5.0,
    ~BLVB, 2, 2.3
    ~BLVC, 0,-3.0,0,0,3.25,0.5
    ~BLVD, 1,  1, -1e4,-1e4,-5e3
    ~BLVD, 2,  1, -1e4,-1e4,-5e3
  ~BLVEND

  ALLSEL
! Attach the vehicle to the family.
  ~BLVR,1001,1002,15,,,3,0.20,0

! Surface load
  ~BLSST, 1011, 1012
    ~BLSA,5,6.25,3.125,0,-3.125,-6.25
    ~BLSB,-3.5e3,,,0.04,1e2
  ~BLSEND

! Cables
  *DO,II,1,7
    ~BLCBDEL,10+II
    ~BLCBST,10+II
      CSYS,12
      ~BLCBPA,0,-0.15,4.05-(II-1)*1.35,3e5
      CSYS,14
      ~BLCBPA,0,-1.20,4.05-(II-1)*1.35,2.95e5
      CSYS,16
      ~BLCBPA,0,-0.23,4.05-(II-1)*1.35,2.90e5
      CSYS,18
      ~BLCBPA,0,-1.20,4.05-(II-1)*1.35,2.85e5
      CSYS,20
      ~BLCBPA,0,-0.15,4.05-(II-1)*1.35,2.80e5
    ~BLCBEND
  *ENDDO
  ESEL,S,ENAME,,95
  NSLE

  ~BLPL,1021,11,12,13,14,15,16,17
  CSYS,0

! Solve
  ALLSEL
  Node1 = NODE( 30.000,-2.7000,-1.3500)
  Node4 = NODE( 40.000,-0.16667E-01,-1.3500)
  D,Node1,all,all
  D,Node4,all,all
  /SOLU
  SOLVE

!--------------------------------------------------------------------------------------
! DATA CHECK
!--------------------------------------------------------------------------------------
! Data comparison number
  NComp    = 26
  NComp_ch = 0

! Marix 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)  = 'N_Vehic'
  LABEL( 2)  = 'D_'
  LABEL( 3)  = 'Q(2,3)'
  LABEL( 4)  = 'CSP(2)'
  LABEL( 5)  = 'F_Type'
  LABEL( 6)  = 'F_Stts'
  LABEL( 7)  = 'D'
  LABEL( 8)  = 'Not used'
  LABEL( 9)  = 'SumFZ'
  LABEL(10)  = 'D'
  LABEL(11)  = 'SumFX'
  LABEL(12)  = 'F_Type'
  LABEL(13)  = 'F_Stts'
  LABEL(14)  = 'D'
  LABEL(15)  = 'PressZ'
  LABEL(16)  = 'D'
  LABEL(17)  = 'PressX'
  LABEL(18)  = 'PressY'
  LABEL(19)  = 'NCables'
  LABEL(20)  = 'NPTS'
  LABEL(21)  = 'LS'
  LABEL(22)  = 'Tension'
  LABEL(23)  = 'F_Type'
  LABEL(24)  = 'F_Stts'
  LABEL(25)  = 'D'
  LABEL(26)  = 'UZ'

! Correct data, obtained data
!--------------------------------------------------------------------------------------
/SOLU
! Vehicles.
! LS 1 to 16.
  VALUE( 1,1) = 1                $  ~CFGET,value( 1,2),BRIDGE,,VEHICLE,NUMBER
  VALUE( 2,1) = -3.0             $  ~CFGET,value( 2,2),BRIDGE,,VEHICLE,D,,15
  VALUE( 3,1) = -5.0E3           $  ~CFGET,value( 3,2),BRIDGE,,VEHICLE,Q,,15,2,3
  VALUE( 4,1) = 5.0              $  ~CFGET,value( 4,2),BRIDGE,,VEHICLE,CSP,,15,2
  VALUE( 5,1) = 3                $  ~CFGET,value( 5,2),BRIDGE,,FAMILY,TYPE,,1002
  VALUE( 6,1) = 8                $  ~CFGET,value( 6,2),BRIDGE,,FAMILY,NSTATES,,1001
  Node1 = NODE( 30.000,-2.7000,-1.3500)
  Node2 = NODE( 22.900, 4.5333, 0.0000)
  Node3 = NODE( 35.003, 2.6979, 0.0000)
  fdele,all,all
  sfedele,all,all,all
  ddele,all,all
  lsread,3
  VALUE( 7,1) = 0.0              $  *GET,value( 7,2), NODE,Node1,D,UZ
  VALUE( 8,1) = 0.0              $  VALUE( 8,2) = 0.0   ! Not used
  VALUE( 9,1) = -5e4
  VALUE( 9,2) = 0.0
  *GET,N_Nodes,NODE,,NUM,MAX
  *DO,II,1,N_Nodes
    *GET,val_aux, NODE,II,NSELL
    *IF,val_aux,EQ,1,THEN
      *GET,val_aux, NODE,II,F,FZ
      VALUE( 9,2) = VALUE( 9,2) + val_aux
    *ENDIF
  *ENDDO
  fdele,all,all
  sfedele,all,all,all
  ddele,all,all
  lsread,15
  VALUE(10,1) = 0.0              $  *GET,value(10,2), NODE,Node1,D,UZ
  VALUE(11,1) = -8e3
  VALUE(11,2) = 0.0
  *DO,II,1,N_Nodes
    *GET,val_aux, NODE,II,NSELL
    *IF,val_aux,EQ,1,THEN
      *GET,val_aux, NODE,II,F,FX
      VALUE(11,2) = VALUE(11,2) + val_aux
    *ENDIF
  *ENDDO

! Surface loads.
! LS 17 to 48.
  VALUE(12,1) = 4                $  ~CFGET,value(12,2),BRIDGE,,FAMILY,TYPE,,1012
  VALUE(13,1) = 16               $  ~CFGET,value(13,2),BRIDGE,,FAMILY,NSTATES,,1011
  Node1 = NODE( 30.000,-2.7000,-1.3500)
  Node2 = NODE( 27.250, 1.3500, 0.0000)
  Node3 = NODE( 37.193,-2.3687, 0.0000)
  fdele,all,all
  sfedele,all,all,all
  ddele,all,all
  lsread,26
  NSEL,S,,,Node2
  ESLN
  ESEL,R,ENAME,,154
  Elem1 = ELNEXT(0)
  ESEL,ALL
  NSEL,ALL
  VALUE(14,1) = 0.0              $  *GET,value(14,2), NODE,Node1,D,UZ
  VALUE(15,1) = -3.5e3           $  *GET,value(15,2), ELEM,Elem1,PRES,1
  fdele,all,all
  sfedele,all,all,all
  ddele,all,all
  lsread,40
  NSEL,S,,,Node3
  ESLN
  ESEL,R,ENAME,,154
  Elem2 = ELNEXT(0)
  ESEL,ALL
  NSEL,ALL
  VALUE(16,1) = 0.0              $  *GET,value(16,2), NODE,Node1,D,UZ
  VALUE(17,1) = -140             $  *GET,value(17,2), ELEM,Elem2,PRES,2
  VALUE(18,1) = 0.4083           $  *GET,value(18,2), ELEM,Elem2,PRES,3

! Cables.
! LS 49 to 55.
  VALUE(19,1) = 7                $  ~CFGET,value(19,2),BRIDGE,,CABLE,NUMBER
  VALUE(20,1) = 5                $  ~CFGET,value(20,2),BRIDGE,,CABLE,NPTS,,12
  VALUE(21,1) = 50               $  ~CFGET,value(21,2),BRIDGE,,CABLE,LS,,12
  VALUE(22,1) = 2.85e5           $  ~CFGET,value(22,2),BRIDGE,,CABLE,TENSION,,15,4
  VALUE(23,1) = 1                $  ~CFGET,value(23,2),BRIDGE,,FAMILY,TYPE,,1021
  VALUE(24,1) = 7                $  ~CFGET,value(24,2),BRIDGE,,FAMILY,NSTATES,,1021
  Node4 = NODE( 40.000,-0.16667E-01,-1.3500)
  Node2 = NODE( 25.000, 6.7500,-0.20000)
  VALUE(25,1) = 0.0              $  *GET,value(25,2), NODE,Node4,D,UZ
  ! Data from last solve (Cable 17)
  /POST1
  ~CFSET,0,1,LAST,
  VALUE(26,1) = 5.1E-05          $  value(26,2) = UZ(Node2)

! Warning and error tolerances
  *DO,I,1,NComp
    TOLER(I,1) = 1E-8  $  TOLER(I,2) = 1E-8
  *ENDDO
  TOLER(  8,1) = 1E-3  $  TOLER(  8,2) = 1E-3
  TOLER(  9,1) = 1E-2  $  TOLER(  9,2) = 1E-2
  TOLER( 11,1) = 1E-0  $  TOLER( 11,2) = 1E-0
  TOLER( 17,1) = 1E-1  $  TOLER( 17,2) = 1E-1
  TOLER( 18,1) = 1E-2  $  TOLER( 18,2) = 1E-2
  TOLER( 26,1) = 1E-5  $  TOLER( 26,2) = 1E-5

!--------------------------------------------------------------------------------------
! Results comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
