!*************************************************************************************!
! TITLE: CFVR7613 - Solid to Shell: Refine meshing
! SUBTITLE: Test of Solid to Shell utility on a refined mesh.
!
! DESCRIPTION: Results obtained from a SOLID45 model and a SOLID95 model (both with 
! DESCRIPTION: hexaedral elements) are compared with a SHELL181 elements model after
! DESCRIPTION: using refine mesh capability.
! 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='CFVR7613'
  /TITLE, %NomFile%, Solid to Shell: Refine meshing

! ---------------------------------------------------------------------------------
! 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, NodeComp, ElemComp, SHVTXNUM, SHPRONUM, REINF,   MC, - ,TH, TOLTH, CSYS, RMSH, 
  ~SD2SH,  NODE_M1,  ELEM_M1,         ,         ,     2,   MC,   ,  ,  0.01,     ,   3

! 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, NodeComp, ElemComp, SHVTXNUM, SHPRONUM, REINF,   MC, - ,TH, TOLTH, CSYS, RMSH, 
  ~SD2SH,  NODE_M2,  ELEM_M2,         ,         ,     2,   MC,   ,  ,  0.01,     ,   3

LOCAL,11
ESEL,S,ENAME,,181
NSLE,S
EMODIF,ALL,ESYS,11
ALLSEL


! Loads and solve
/SOLU
ACEL,10,10,10
ALLSEL
SOLVE

/POST1
 ESEL,S,ENAME,,181
 NSLE,S,ALL 
 
!--------------------------------------------------------------------------------------
! DATA CHECK
!--------------------------------------------------------------------------------------
! Data comparison number
  NComp = 16*4+1
  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
   LABEL(65,1) = 'NUM_ELEM'  

! 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
  ! Number of elements after meshing
   VALUE(65,1)=2480*2+300		! Correct
   ESEL,S,ENAME,,181
   *GET,VALUE(65,2), ELEM,  0, COUNT  

! Warning and error tolerances
!------------------------------------------------------------------------------
! Note: tolerances are greater than 1% because two diferent methods are 
!       compared and results can not be equal but must be aproximated. 
!       Moreover, the elements have a free coarse mesh.
   *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
   TOLER(65,1)= 1E0 $ TOLER(65,2)= 1E0

!--------------------------------------------------------------------------------------
! Results Comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
