!***********************************************************************!
! TITLE: CFVR5301 - Tunnel 3D generation
! SUBTITLE: 3D Tunnel model generated by CivilFEM with excavation phases
!
! DESCRIPTION: Create a tunnel on a 3D regular terrain model, by modeling
! DESCRIPTION: the excavation phases.
! DESCRIPTION:
! DESCRIPTION: The cross section of the trusses is a double T.
! DESCRIPTION:
! DESCRIPTION: Only half of the model is created due to its symmetry.
!
! ELEMENT TYPE: MESH200, SOLID45, BEAM188, MESH200, SHELL63
! MODULES: GETC
! UNITS: SI
! KEYWORD1: Solid Section
! KEYWORD2: Beam
! KEYWORD3: Shell
! KEYWORD4: Tunnels
!
!***********************************************************************!

  FINISH
  ~CFACTIV,GETC,Y
  ~CFCLEAR,,1
  NomFile='CFVR5301'
  /TITLE, %NomFile%, Tunnel 3D generation

! -------------------------------------------------------------------------------------
! Initial data
! -------------------------------------------------------------------------------------

! Geometrical parameters
ROut=10
TShotcrete=0.5
TConcrete=0.5
Terr_Height=ROut*4
Terr_Width=ROut*1.5
Tun_advance=10

! Setup

/PREP7
! Element type
ET,1,MESH200,6
ET,2,SOLID45
ET,4,BEAM188,,,2
ET,5,MESH200,0
ET,6,SHELL63  !plate

! Materials
~CFMP,1,LIB,SOIL,,SP
~CFMP,2,LIB,CONCRETE,EC2,C30/37
~CFMP,3,LIB,CONCRETE,EC2,C40/50
~CFMP,4,LIB,STEEL,EC3,Fe 430

! Cross section
~SSECLIB,1,4,15,9   !HD 320 x 127

! Beam & Shell prop.
~BMSHPRO,1,BEAM,1,1,,,188,1,0,,Beam 1

! Solid model
! 2D cross section of the tunnel excavation phases

CYL4, , ,0, 90,Rout,180                             ! Area #1
RECTNG,0,-Terr_Width,-Terr_Height/4,Terr_Height*3/4 ! Area #2
ASBA,2,1
NUMCMP,ALL                                          ! renumber entities

CYL4, , ,0, 90,ROut,180                             ! Area #2
CYL4, , ,ROut-TShotcrete, 90,ROut,180               ! Area #3
CYL4, , ,ROut-TShotcrete-TConcrete, 90,ROut-TShotcrete,180     ! Area #4

NUMMRG,KP, , , ,LOW

! Mesh areas
! mesh lines of area 5
LDIV,5,0.75

LESIZE,4,Terr_Width/4
LESIZE,6,,,10,4
LESIZE,5,,,20,0.2
LESIZE,1,,,15
LESIZE,2,,,10
LESIZE,3,,,7
LESIZE,7,,,8,4
LESIZE,8,,,8,4

MAT,1
MSHAPE,0,2D
MSHKEY,0
AMESH,1,2,1

SMRT,OFF
ESIZE,0.25

MAT,2
MSHKEY,1
AMESH,3

MAT,3
MSHKEY,1
AMESH,4

! Mesh lines of cercha
MAT,4
TYPE,3
SECNUM,1
LMESH,13     ! line #13

! Mesh line of plate
R,2,0.01
TYPE,4
REAL,2
MAT,4
LMESH,1

ALLSEL

! capture the cross section
~TN2DIN

! layout of the tunnel
~TNINIP,-1,0,,,-Terr_Height
~TNADDPL,0,60,0,0,0,

~TNADV,10,8,6,4,4,4,6,8,10

~TNSKTCH,2

! definition of excavation steps inside the cross section (2D)
! areas
~TSTEP,1,1,2,0,0
~TSTEP,4,1,3,1,1
~TSTEP,5,1,4,1,2
! lines
~TSTEP,2,2,13,1,0
~TSTEP,3,2, 1,1,0

! define elements of cercha
~TTRUSS,3,,,,

! Generate 3D geometry and mesh
~TNGEN,2
/NUMBER,1
/PNUM,MAT,1
/VIEW,1,0.7,0.7,0.2
/ZOOM,1,RECT,-0.55,0.002 ,0.460 ,-0.619
CMSEL,s,_TunSolve_10
EPLOT
/IMAGE,SAVE,%NomFile%,BMP
ALLSEL


ESEL,S,TYPE,,2             ! solids
*GET,SOLIDS,ELEM,0,COUNT
*IF,SOLIDS,GT,9000,THEN
  SOLIDS=1
*ENDIF
ESEL,S,TYPE,,3             ! beams
*GET,BEAMS,ELEM,0,COUNT
ESEL,S,TYPE,,5             ! shells
*GET,SHELLS,ELEM,0,COUNT

ALLSEL,ALL
*GET,ELEMENT,ELEM,0,COUNT
*IF,ELEMENT,GT,9000,THEN
  ELEMENT=1
*ENDIF

cmsel,s,_TunSolve_10
ESEL,R,TYPE,,3             ! beams
*GET,BEAMS10,ELEM,0,COUNT
cmsel,s,_TunSolve_10
ESEL,R,TYPE,,5             ! shells
*GET,SHELLS10,ELEM,0,COUNT
cmsel,s,_TunSolve_10
ESEL,R,MAT,,3
*GET,CONCRETE10,ELEM,0,COUNT

cmsel,s,_TunSolve_20
ESEL,R,TYPE,,3             ! beams
*GET,BEAMS20,ELEM,0,COUNT
cmsel,s,_TunSolve_20
ESEL,R,TYPE,,5             ! shells
*GET,SHELLS20,ELEM,0,COUNT
cmsel,s,_TunSolve_20
ESEL,R,MAT,,3
*GET,CONCRETE20,ELEM,0,COUNT

cmsel,s,_TunSolve_30
ESEL,R,TYPE,,3             ! beams
*GET,BEAMS30,ELEM,0,COUNT
cmsel,s,_TunSolve_30
ESEL,R,TYPE,,5             ! shells
*GET,SHELLS30,ELEM,0,COUNT
cmsel,s,_TunSolve_30
ESEL,R,MAT,,3
*GET,CONCRETE30,ELEM,0,COUNT

!--------------------------------------------------------------------------------------
! DATA CHECK
!--------------------------------------------------------------------------------------
! Data comparison number
  NComp    = 14
  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)  = 'ELEMENTS'
  LABEL( 2)  = 'SOLIDS'
  LABEL( 3)  = 'BEAMS'
  LABEL( 4)  = 'BEAMS_10'
  LABEL( 5)  = 'BEAMS_20'
  LABEL( 6)  = 'BEAMS_30'
  LABEL( 7)  = 'SHELLS'
  LABEL( 8)  = 'SHELL_10'
  LABEL( 9)  = 'SHELL_20'
  LABEL(10)  = 'SHELL_30'
  LABEL(11)  = 'CONCR_10'
  LABEL(12)  = 'CONCR_20'
  LABEL(13)  = 'CONCR_30'
  LABEL(14)  = 'NSTEPS'

! Correct data
  VALUE( 1,1)=   1
  VALUE( 2,1)=   1
  VALUE( 3,1)= 120
  VALUE( 4,1)=  45
  VALUE( 5,1)=  90
  VALUE( 6,1)= 120
  VALUE( 7,1)= 450
  VALUE( 8,1)= 180
  VALUE( 9,1)= 270
  VALUE(10,1)= 450
  VALUE(11,1)= 150
  VALUE(12,1)= 480
  VALUE(13,1)= 900
  VALUE(14,1)= 30

! Obtained data
  VALUE( 1,2)= ELEMENT
  VALUE( 2,2)= SOLIDS
  VALUE( 3,2)= BEAMS
  VALUE( 4,2)= BEAMS10
  VALUE( 5,2)= BEAMS20
  VALUE( 6,2)= BEAMS30
  VALUE( 7,2)= SHELLS
  VALUE( 8,2)= SHELLS10
  VALUE( 9,2)= SHELLS20
  VALUE(10,2)= SHELLS30
  VALUE(11,2)= CONCRETE10
  VALUE(12,2)= CONCRETE20
  VALUE(13,2)= CONCRETE30
  VALUE(14,2)= _STEPMAX

! Warning and error tolerances
  *DO,II,1,14
    TOLER(II, 1)= 1E-02 $ TOLER(II, 2)= 1E-02
  *ENDDO

!--------------------------------------------------------------------------------------
! Result comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC

