!*************************************************************************************!
! TITLE: CFVR7612 - Solid to Shell: Irregular mesh
! SUBTITLE: Test of Solid to Shell utility on an irregular mesh.
!
! DESCRIPTION: Results obtained from a SOLID95 model with tetrahedral elements
! DESCRIPTION: are compared with a SHELL281 elements model.
! DESCRIPTION: The models are equivalent: 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: SOLID95, SHELL281, MESH200
! KEYWORD1: Shell
!
!*************************************************************************************!
   FINISH
  ~CFCLEAR,,1
  NomFile='CFVR7612'
  /TITLE, %NomFile%, Solid to Shell: Irregular mesh

! ---------------------------------------------------------------------------------
! Model definition
! ---------------------------------------------------------------------------------
! CivilFEM Setup: Units
~UNITS,SI              ! Set International System units

/PREP7
! Preprocessor
! --------------------------------------------------
! Element type
ET,1,SOLID95
ET,2,SHELL281

! Materials
~CFMP,1,LIB,CONCRETE,EC2,C20/25
~CFMP,2,LIB,REINF,EC2,S400

! Solid Modeling
Length = 2.0
Width  = 1.0
Thickness = 0.30
El_Size = 0.10
MC = 0.05
Z3 = 5*Thickness

! Model 0: Shell
~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,281,,,,Shell 1

! Model 1: Solid45
NREAD,NL7612,txt
EREAD,EL7612,txt

! Boundary conditions
NSEL,S,LOC,X,0
NSEL,A,LOC,Y,0
D,ALL,ALL,0
NSEL,ALL

! Solid To Shell Model 1
NSEL,S,LOC,Z,Z3-Thickness/2,Z3+Thickness/2
ESLN,S
CM,ELEM_M1,ELEM
NSEL,S,LOC,Z,Z3+Thickness/2
CM,NODE_M1,NODE
~SD2SH,NODE_M1,ELEM_M1,,,2,MC,,,0.01

! Change element axis
LOCAL,11
ESEL,S,ENAME,,181
ESEL,A,ENAME,,281
NSLE,S
EMODIF,ALL,ESYS,11
ALLSEL

! Loads and solve
/SOLU
ACEL,10,10,10
ALLSEL
SOLVE

/POST1
!--------------------------------------------------------------------------------------
! DATA CHECK
!--------------------------------------------------------------------------------------
! Data comparison number
  NComp = 8*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
    LABEL(group+1) = 'TX'
    LABEL(group+2) = 'TY'
    LABEL(group+3) = 'TXY'
    LABEL(group+4) = 'NX'
    LABEL(group+5) = 'NY'
    LABEL(group+6) = 'MX'
    LABEL(group+7) = 'MY'
    LABEL(group+8) = 'MXY'
    group = group + 8
  *ENDDO

! Correct data, obtained data
!--------------------------------------------------------------------------------------
 ~CFSET,,1

 group = 0
 Node1 = NODE( 1.0275,0.54307,0)
 Node2 = NODE(0.98656,0.64038,0)
 Node3 = NODE( 1.0886,0.63862,0)
 NSEL,S,NODE,,Node1
 NSEL,A,NODE,,Node2
 NSEL,A,NODE,,Node3
 ESLN,S,1,CORNER
	elemn1 = ELNEXT(0)
 ~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
 ALLSEL,ALL
	Node1 = NODE( 1.0275,0.54307,Z3)
	Node2 = NODE(0.98656,0.64038,Z3)
	Node3 = NODE( 1.0886,0.63862,Z3)
	NSEL,S,NODE,,Node1
 NSEL,A,NODE,,Node2
 NSEL,A,NODE,,Node3
 ESLN,S,1,CORNER
 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
	ALLSEL,ALL
	group=group+8
 Node1 = NODE(1.0275,0.54307,0)
	Node2 = NODE(1.0886,0.63862,0)
	Node3 = NODE(1.1320,0.53934,0)
	NSEL,S,NODE,,Node1
 NSEL,A,NODE,,Node2
 NSEL,A,NODE,,Node3
 ESLN,S,1,CORNER
	elemn1 = ELNEXT(0)
 ~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
 ALLSEL,ALL
	Node1 = NODE(1.0275,0.54307,Z3)
	Node2 = NODE(1.0886,0.63862,Z3)
	Node3 = NODE(1.1320,0.53934,Z3)
	NSEL,S,NODE,,Node1
 NSEL,A,NODE,,Node2
 NSEL,A,NODE,,Node3
 ESLN,S,1,CORNER
 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
	ALLSEL,ALL
	group=group+8	
	Node1 = NODE(1.0275,0.54307,0)
	Node2 = NODE(1.1320,0.53934,0)
	Node3 = NODE(1.0666,0.44625,0)
	NSEL,S,NODE,,Node1
 NSEL,A,NODE,,Node2
 NSEL,A,NODE,,Node3
 ESLN,S,1,CORNER
	elemn1 = ELNEXT(0)
 ~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
 ALLSEL,ALL
	Node1 = NODE(1.0275,0.54307,Z3)
	Node2 = NODE(1.1320,0.53934,Z3)
	Node3 = NODE(1.0666,0.44625,Z3)
	NSEL,S,NODE,,Node1
 NSEL,A,NODE,,Node2
 NSEL,A,NODE,,Node3
 ESLN,S,1,CORNER
 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
	ALLSEL,ALL
	group=group+8	
	Node1 = NODE( 1.0275,0.54307,0)
	Node2 = NODE( 1.0666,0.44625,0)
	Node3 = NODE(0.96761,0.44892,0)
	NSEL,S,NODE,,Node1
 NSEL,A,NODE,,Node2
 NSEL,A,NODE,,Node3
 ESLN,S,1,CORNER
	elemn1 = ELNEXT(0)
 ~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
 ALLSEL,ALL
	Node1 = NODE( 1.0275,0.54307,Z3)
	Node2 = NODE( 1.0666,0.44625,Z3)
	Node3 = NODE(0.96761,0.44892,Z3)
	NSEL,S,NODE,,Node1
 NSEL,A,NODE,,Node2
 NSEL,A,NODE,,Node3
 ESLN,S,1,CORNER
 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
	
! 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 course mesh.

   *DO,II,1,NComp
     TOLER(II,1)= 1E2 $ TOLER(II,2)= 1E2
   *ENDDO
   TOLER( 1,1)= 1E3 $ TOLER( 1,2)= 1E3
   TOLER( 5,1)= 1E3 $ TOLER( 5,2)= 1E3
   TOLER( 9,1)= 1E3 $ TOLER( 9,2)= 1E3
   TOLER(10,1)= 1E3 $ TOLER(10,2)= 1E3
   TOLER(11,1)= 1E3 $ TOLER(11,2)= 1E3
   TOLER(13,1)= 1E3 $ TOLER(13,2)= 1E3
   TOLER(18,1)= 1E3 $ TOLER(18,2)= 1E3
   TOLER(21,1)= 1E3 $ TOLER(21,2)= 1E3
   TOLER(27,1)= 1E3 $ TOLER(27,2)= 1E3
   TOLER(29,1)= 1E3 $ TOLER(29,2)= 1E3

!--------------------------------------------------------------------------------------
! Results Comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
