!*************************************************************************************!
! TITLE: CFVR7611 - Solid to Shell: Regular mesh
! SUBTITLE: Test of Solid to Shell utility on a regular mesh.
!
! DESCRIPTION: Results obtained from a SOLID45 model and a SOLID95 model (both with hexaedral elements)
! DESCRIPTION: are compared with a SHELL181 elements model.
! DESCRIPTION: The models are all the same: rectangular slab with all the degrees of freedom
! DESCRIPTION: restrained on two adjacent sides.
! DESCRIPTION:
! DESCRIPTION: The load is an acceleration of 10 m/s<sup>2</sup> on the three directions (X, Y and Z).
!
! ELEMENT TYPE: SOLID45, SOLID95, SHELL181
! KEYWORD1: Shell
!
!*************************************************************************************!
   FINISH
  ~CFCLEAR,,1
  NomFile='CFVR7611'
  /TITLE, %NomFile%, Solid to Shell: Regular mesh

! ---------------------------------------------------------------------------------
! Model definition
! ---------------------------------------------------------------------------------
! CivilFEM Setup: Units
~UNITS,SI              ! Set International System units

/PREP7
! Preprocessor
! --------------------------------------------------
! Element type
ET,1,SOLID45
ET,2,SOLID95
ET,3,SHELL181

! Materials
~CFMP,1,LIB,CONCRETE,EC2,C20/25
~CFMP,2,LIB,REINF,EC2,S400

! Solid Modeling
Length = 6.0
Width  = 2.0
Thickness = 0.60
El_Size = 0.20
MC = 0.05
Z1 = -5*Thickness
Z2 = Thickness/2
Z3 = 5*Thickness

! Model 0: Shell
K,21,0,0,Z1
K,22,Length,0,Z1
K,23,Length,Width,Z1
K,24,0,Width,Z1
A,21,22,23,24
~SHLRNF,1,Thickness,1,2,MC,0.0,0.0,0.0,0.0,0,0.0,45.0
~BMSHPRO,10,SHELL,1,1,1,1,181,,,,Shell 1

! Model 1: Solid45
K,1,0,0,Z2-Thickness/2
K,2,Length,0,Z2-Thickness/2
K,3,Length,Width,Z2-Thickness/2
K,4,0,Width,Z2-Thickness/2
K,5,0,0,Z2+Thickness/2
K,6,Length,0,Z2+Thickness/2
K,7,Length,Width,Z2+Thickness/2
K,8,0,Width,Z2+Thickness/2
V,1,2,3,4,5,6,7,8

! Model 2: Solid45
K,11,0,0,Z3-Thickness/2
K,12,Length,0,Z3-Thickness/2
K,13,Length,Width,Z3-Thickness/2
K,14,0,Width,Z3-Thickness/2
K,15,0,0,Z3+Thickness/2
K,16,Length,0,Z3+Thickness/2
K,17,Length,Width,Z3+Thickness/2
K,18,0,Width,Z3+Thickness/2
V,11,12,13,14,15,16,17,18

! Mesh
ESIZE,El_Size
MAT,1
TYPE,1
VMESH,1
TYPE,2
VMESH,2
TYPE,3
SECNUM,10
AMESH,1

! Boundary conditions
NSEL,S,LOC,X,0
NSEL,A,LOC,Y,0
D,ALL,ALL,0
NSEL,ALL

! Solid To Shell Model 1
VSEL,S,VOLU,,1
ESLV,S
CM,ELEM_M1,ELEM
NSEL,S,LOC,Z,Z2+Thickness/2
CM,NODE_M1,NODE
~SD2SH,NODE_M1,ELEM_M1,,,2,MC,,,0.01

! Solid To Shell Model 2
VSEL,S,VOLU,,2
ESLV,S
CM,ELEM_M2,ELEM
NSEL,S,LOC,Z,Z3+Thickness/2
CM,NODE_M2,NODE
~SD2SH,NODE_M2,ELEM_M2,,,2,MC,,,0.01

! Loads and solve
/SOLU
ACEL,10,10,10
ALLSEL
SOLVE

/POST1
ESEL,S,ENAME,,181
NSLE,S
!--------------------------------------------------------------------------------------
! DATA CHECK
!--------------------------------------------------------------------------------------
! Data comparison number
  NComp = 16*4
  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
  group = 0
  *DO,II,1,4
    *DO,JJ,1,2
    LABEL(group+1) = 'TX_%JJ%'
    LABEL(group+2) = 'TY_%JJ%'
    LABEL(group+3) = 'TXY_%JJ%'
    LABEL(group+4) = 'NX_%JJ%'
    LABEL(group+5) = 'NY_%JJ%'
    LABEL(group+6) = 'MX_%JJ%'
    LABEL(group+7) = 'MY_%JJ%'
    LABEL(group+8) = 'MXY_%JJ%'
    group = group + 8
    *ENDDO
  *ENDDO

! Correct data, obtained data
!--------------------------------------------------------------------------------------
  ESEL,S,ENAME,,181
  NSLE
  NSEL,R,LOC,X,Length/3
  NSEL,R,LOC,Y,Width/2
  ESLN,R
  CM,ElemSet,ELEM

  ~CFSET,,1
  elemn1 = 0
  elemn2 = 0
  elemn3 = 0
  *DO,II,1,4
    group=16*(II-1)
    CMSEL,S,ElemSet
    NSLE,S
    NSEL,R,LOC,Z,Z1
    ESLN,R
    elemn1 = ELNEXT(elemn1)
    ~CFGET,VALUE(group+1,1),ELEMENT,elemn1,FORCE,TX,I
    ~CFGET,VALUE(group+2,1),ELEMENT,elemn1,FORCE,TY,I
    ~CFGET,VALUE(group+3,1),ELEMENT,elemn1,FORCE,TXY,I
    ~CFGET,VALUE(group+4,1),ELEMENT,elemn1,FORCE,NX,I
    ~CFGET,VALUE(group+5,1),ELEMENT,elemn1,FORCE,NY,I
    ~CFGET,VALUE(group+6,1),ELEMENT,elemn1,FORCE,MX,I
    ~CFGET,VALUE(group+7,1),ELEMENT,elemn1,FORCE,MY,I
    ~CFGET,VALUE(group+8,1),ELEMENT,elemn1,FORCE,MXY,I
    ESEL,S,ELEM,,elemn1
    NSLE,S
    Node1 = NDNEXT(0)
    Node2 = NDNEXT(Node1)
    Node3 = NDNEXT(Node2)
    CMSEL,S,ElemSet
    NSLE,S
    Node1n = NODE(NX(Node1),NY(Node1),Z2)
    Node2n = NODE(NX(Node2),NY(Node2),Z2)
    Node3n = NODE(NX(Node3),NY(Node3),Z2)
    ESLN,R
    NSEL,S,NODE,,Node1n
    ESLN,R
    NSEL,S,NODE,,Node2n
    ESLN,R
    NSEL,S,NODE,,Node3n
    ESLN,R
    elemn2 = ELNEXT(0)
    ~CFGET,VALUE(group+1,2),ELEMENT,elemn2,FORCE,TX,I
    ~CFGET,VALUE(group+2,2),ELEMENT,elemn2,FORCE,TY,I
    ~CFGET,VALUE(group+3,2),ELEMENT,elemn2,FORCE,TXY,I
    ~CFGET,VALUE(group+4,2),ELEMENT,elemn2,FORCE,NX,I
    ~CFGET,VALUE(group+5,2),ELEMENT,elemn2,FORCE,NY,I
    ~CFGET,VALUE(group+6,2),ELEMENT,elemn2,FORCE,MX,I
    ~CFGET,VALUE(group+7,2),ELEMENT,elemn2,FORCE,MY,I
    ~CFGET,VALUE(group+8,2),ELEMENT,elemn2,FORCE,MXY,I
    VALUE(group+9,1) = VALUE(group+1,1)
    VALUE(group+10,1) = VALUE(group+2,1)
    VALUE(group+11,1) = VALUE(group+3,1)
    VALUE(group+12,1) = VALUE(group+4,1)
    VALUE(group+13,1) = VALUE(group+5,1)
    VALUE(group+14,1) = VALUE(group+6,1)
    VALUE(group+15,1) = VALUE(group+7,1)
    VALUE(group+16,1) = VALUE(group+8,1)
    CMSEL,S,ElemSet
    NSLE,S
    Node1n = NODE(NX(Node1),NY(Node1),Z3)
    Node2n = NODE(NX(Node2),NY(Node2),Z3)
    Node3n = NODE(NX(Node3),NY(Node3),Z3)
    ESLN,R
    NSEL,S,NODE,,Node1n
    ESLN,R
    NSEL,S,NODE,,Node2n
    ESLN,R
    NSEL,S,NODE,,Node3n
    ESLN,R
    elemn3 = ELNEXT(0)
    ~CFGET,VALUE(group+ 9,2),ELEMENT,elemn3,FORCE,TX,I
    ~CFGET,VALUE(group+10,2),ELEMENT,elemn3,FORCE,TY,I
    ~CFGET,VALUE(group+11,2),ELEMENT,elemn3,FORCE,TXY,I
    ~CFGET,VALUE(group+12,2),ELEMENT,elemn3,FORCE,NX,I
    ~CFGET,VALUE(group+13,2),ELEMENT,elemn3,FORCE,NY,I
    ~CFGET,VALUE(group+14,2),ELEMENT,elemn3,FORCE,MX,I
    ~CFGET,VALUE(group+15,2),ELEMENT,elemn3,FORCE,MY,I
    ~CFGET,VALUE(group+16,2),ELEMENT,elemn3,FORCE,MXY,I
  *ENDDO

! Warning and error tolerances
!------------------------------------------------------------------------------
   *DO,II,1,NComp
     TOLER(II,1)= 1E2 $ TOLER(II,2)= 1E2
   *ENDDO
   TOLER( 4,1)= 1E3 $ TOLER( 4,2)= 1E3
   TOLER( 5,1)= 1E3 $ TOLER( 5,2)= 1E3
   TOLER( 6,1)= 1E1 $ TOLER( 6,2)= 1E1
   TOLER(10,1)= 1E3 $ TOLER(10,2)= 1E3
   TOLER(12,1)= 1E3 $ TOLER(12,2)= 1E3
   TOLER(13,1)= 1E3 $ TOLER(13,2)= 1E3
   TOLER(14,1)= 2E1 $ TOLER(14,2)= 2E1   
   TOLER(21,1)= 1E3 $ TOLER(21,2)= 1E3
   TOLER(22,1)= 2E1 $ TOLER(22,2)= 2E1
   TOLER(26,1)= 1E3 $ TOLER(26,2)= 1E3
   TOLER(28,1)= 1E3 $ TOLER(28,2)= 1E3
   TOLER(29,1)= 1E3 $ TOLER(29,2)= 1E3
   TOLER(30,1)= 2E1 $ TOLER(30,2)= 2E1
   TOLER(37,1)= 1E3 $ TOLER(37,2)= 1E3
   TOLER(38,1)= 5E1 $ TOLER(38,2)= 5E1
   TOLER(42,1)= 1E3 $ TOLER(42,2)= 1E3
   TOLER(45,1)= 1E3 $ TOLER(45,2)= 1E3   
   TOLER(58,1)= 1E3 $ TOLER(58,2)= 1E3
   TOLER(60,1)= 1E3 $ TOLER(60,2)= 1E3
   TOLER(61,1)= 1E3 $ TOLER(61,2)= 1E3

!--------------------------------------------------------------------------------------
! Results Comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
