!*************************************************************************************!
! TITLE: CFVR0834 - Combination module test with CivilFEM results
! SUBTITLE: Example to check the combinations utility
!
! DESCRIPTION: This example checks the functionality of the combinations module.
! DESCRIPTION:
! DESCRIPTION: It checks the following:
! DESCRIPTION:
! DESCRIPTION: - Results handle on SHELL63 elements.
! DESCRIPTION:
! DESCRIPTION: - Date handle with unsorted numeration (elements, load steps...)
! DESCRIPTION:
! DESCRIPTION:
! DESCRIPTION: The model is a two elements horizontal slab, each element is 1.00m * 1.50m.
! DESCRIPTION: All the nodes are restrained (no movement or rotation allowed).
! DESCRIPTION:
! DESCRIPTION: The load cases are:
! DESCRIPTION:
! DESCRIPTION: - Load Step 1, Sub Step 1: Imposed vertical movement on the middle point of one side
! DESCRIPTION: (node 50) of 1 meter.
! DESCRIPTION:
! DESCRIPTION: - Load Step 2, Sub Step 1: Imposed horizontal movement on the middle point of one side
! DESCRIPTION: (node 50) of 1 meter (Y direction).
! DESCRIPTION:
! DESCRIPTION:
! DESCRIPTION: The target for the combinations is:
! DESCRIPTION:
! DESCRIPTION: - Target 45; Maximum Axial force in the Y direction TY
! DESCRIPTION:
! DESCRIPTION:
! DESCRIPTION: The combination rule defined is:
! DESCRIPTION:
! DESCRIPTION: - Combination rule 10: ADDITION: H1+H2
! DESCRIPTION:
!
! ELEMENT TYPE: Shell63
! MODULES:
! UNITS: SI
! KEYWORD1: Shell
! KEYWORD2: Combinations
!*************************************************************************************!
  FINISH
  ~CFCLEAR,,1 
 AnsLic='ansys'

  NomFile='CFVR0834'
  /TITLE, %NomFile%, Combination module test SHELL63
! ---------------------------------------------------------------------------------
! Model definition and solve
! ---------------------------------------------------------------------------------
! Setup
~CFCONFG,PLRES   ,SHELL   ,EPSW 

! Preprocessor
/PREP7
! Materials
  ~CFMP,5,LIB,CONCRETE,EC2,C20/25
! Sections
  ~SHLRNF,10,0.3,5,0,0,0,0,0,0,0,0,45.0
! Beam Property
  ~BMSHPRO,10,SHELL,10,10,10,10,63
! Element types
  ET,2,SHELL63
! Nodes
  N,10,0.0,0.0
  N,20,1.0,0.0
  N,30,2.0,0.0
  N,40,0.0,1.5
  N,50,1.0,1.5
  N,60,2.0,1.5
! Elements
  MAT,5
  REAL,10
  TYPE,2
  EN,100, 10, 20, 50, 40
  EN,200, 20, 30, 60, 50
! Boundary conditions
  D,ALL,ALL,0.0
! Initial hypothesis solve
  /SOLU
  ! Hypothesis 1:
    /TITLE, Hypothesis 1
    OUTRES,ALL,ALL
    D,50,UZ,0.1
    SOLVE
    D,50,UZ,0.0
  ! Hypothesis 2:
    /TITLE, Hypothesis 2
    OUTRES,ALL,ALL
    D,50,UY,0.1
    SOLVE
    D,50,UY,0.0

/POST1
! ---------------------------------------------------------------------------------
! Read correct data from simple hypothesis
! ---------------------------------------------------------------------------------
  Dat=30 ! Number of data to check
  RES=
  *DIM,RES,,Dat,2
! Load data of each simple hypothesis
    ESEL,S,ELEM,,100
  ! Hypothesis 1
    ~CFSET,,1,1
    ~PLSHFOR,TX
    *GET,RES( 1,1),NODE,20,EPSW
    ~PLSHFOR,TY
    *GET,RES( 2,1),NODE,20,EPSW
    ~PLSHFOR,TXY
    *GET,RES( 3,1),NODE,20,EPSW
    ~PLSHFOR,MX
    *GET,RES( 4,1),NODE,20,EPSW
    ~PLSHFOR,MY
    *GET,RES( 5,1),NODE,20,EPSW
    ~PLSHFOR,MXY
    *GET,RES( 6,1),NODE,20,EPSW
    SHELL,TOP
    ~PLSHSTR,SX
    *GET,RES( 7,1),NODE,20,EPSW
    ~PLSHSTR,SY
    *GET,RES( 8,1),NODE,20,EPSW
    ~PLSHSTR,SZ
    *GET,RES( 9,1),NODE,20,EPSW
    ~PLSHSTR,SXY
    *GET,RES(10,1),NODE,20,EPSW
    ~PLSHSTR,SYZ
    *GET,RES(11,1),NODE,20,EPSW
    ~PLSHSTR,SXZ
    *GET,RES(12,1),NODE,20,EPSW
    ~PLSHSTR,EPX
    *GET,RES(13,1),NODE,20,EPSW
    ~PLSHSTR,EPY
    *GET,RES(14,1),NODE,20,EPSW
    ~PLSHSTR,EPZ
    *GET,RES(15,1),NODE,20,EPSW
    ~PLSHSTR,EPXY
    *GET,RES(16,1),NODE,20,EPSW
    ~PLSHSTR,EPYZ
    *GET,RES(17,1),NODE,20,EPSW
    ~PLSHSTR,EPZX
    *GET,RES(18,1),NODE,20,EPSW
    SHELL,BOT
    ~PLSHSTR,SX
    *GET,RES(19,1),NODE,20,EPSW
    ~PLSHSTR,SY
    *GET,RES(20,1),NODE,20,EPSW
    ~PLSHSTR,SZ
    *GET,RES(21,1),NODE,20,EPSW
    ~PLSHSTR,SXY
    *GET,RES(22,1),NODE,20,EPSW
    ~PLSHSTR,SYZ
    *GET,RES(23,1),NODE,20,EPSW
    ~PLSHSTR,SXZ
    *GET,RES(24,1),NODE,20,EPSW
    ~PLSHSTR,EPX
    *GET,RES(25,1),NODE,20,EPSW
    ~PLSHSTR,EPY
    *GET,RES(26,1),NODE,20,EPSW
    ~PLSHSTR,EPZ
    *GET,RES(27,1),NODE,20,EPSW
    ~PLSHSTR,EPXY
    *GET,RES(28,1),NODE,20,EPSW
    ~PLSHSTR,EPYZ
    *GET,RES(29,1),NODE,20,EPSW
    ~PLSHSTR,EPZX
    *GET,RES(30,1),NODE,20,EPSW
    ESEL,ALL
  ! Hypothesis 2
    ESEL,S,ELEM,,100
    ~CFSET,,2,1
    ~PLSHFOR,TX
    *GET,RES( 1,2),NODE,20,EPSW
    ~PLSHFOR,TY
    *GET,RES( 2,2),NODE,20,EPSW
    ~PLSHFOR,TXY
    *GET,RES( 3,2),NODE,20,EPSW
    ~PLSHFOR,MX
    *GET,RES( 4,2),NODE,20,EPSW
    ~PLSHFOR,MY
    *GET,RES( 5,2),NODE,20,EPSW
    ~PLSHFOR,MXY
    *GET,RES( 6,2),NODE,20,EPSW
    SHELL,TOP
    ~PLSHSTR,SX
    *GET,RES( 7,2),NODE,20,EPSW
    ~PLSHSTR,SY
    *GET,RES( 8,2),NODE,20,EPSW
    ~PLSHSTR,SZ
    *GET,RES( 9,2),NODE,20,EPSW
    ~PLSHSTR,SXY
    *GET,RES(10,2),NODE,20,EPSW
    ~PLSHSTR,SYZ
    *GET,RES(11,2),NODE,20,EPSW
    ~PLSHSTR,SXZ
    *GET,RES(12,2),NODE,20,EPSW
    ~PLSHSTR,EPX
    *GET,RES(13,2),NODE,20,EPSW
    ~PLSHSTR,EPY
    *GET,RES(14,2),NODE,20,EPSW
    ~PLSHSTR,EPZ
    *GET,RES(15,2),NODE,20,EPSW
    ~PLSHSTR,EPXY
    *GET,RES(16,2),NODE,20,EPSW
    ~PLSHSTR,EPYZ
    *GET,RES(17,2),NODE,20,EPSW
    ~PLSHSTR,EPZX
    *GET,RES(18,2),NODE,20,EPSW
    SHELL,BOT
    ~PLSHSTR,SX
    *GET,RES(19,2),NODE,20,EPSW
    ~PLSHSTR,SY
    *GET,RES(20,2),NODE,20,EPSW
    ~PLSHSTR,SZ
    *GET,RES(21,2),NODE,20,EPSW
    ~PLSHSTR,SXY
    *GET,RES(22,2),NODE,20,EPSW
    ~PLSHSTR,SYZ
    *GET,RES(23,2),NODE,20,EPSW
    ~PLSHSTR,SXZ
    *GET,RES(24,2),NODE,20,EPSW
    ~PLSHSTR,EPX
    *GET,RES(25,2),NODE,20,EPSW
    ~PLSHSTR,EPY
    *GET,RES(26,2),NODE,20,EPSW
    ~PLSHSTR,EPZ
    *GET,RES(27,2),NODE,20,EPSW
    ~PLSHSTR,EPXY
    *GET,RES(28,2),NODE,20,EPSW
    ~PLSHSTR,EPYZ
    *GET,RES(29,2),NODE,20,EPSW
    ~PLSHSTR,EPZX
    *GET,RES(30,2),NODE,20,EPSW
  ESEL,ALL

! ---------------------------------------------------------------------------------
! Definition and solving of combinations
! ---------------------------------------------------------------------------------
! Reset combinations module
  ~CMBCLR
! Targets definition
  ~TRGDEF,45,VERTX,T,Y,MAX
! Combinations definition
  ! Combination 10: ADDITION [H1+H2]
      ~CMBDEF, 10,ADD,2
      ~STSTDEF,10,1,LSTEP,1, ,2,1,1
      ~STSTCFT,10, ,1.00
! Combine
  ~COMBINE

!--------------------------------------------------------------------------------------
! DATA CHECK
!--------------------------------------------------------------------------------------
! Data comparison number
  NComp = 30
  NComp_ch = 0

! Matrix 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
!--------------------------------------------------------------------------------------
  *DO,I,1,NComp
    LABEL(I) ='TEST%I%'
  *ENDDO

! Correct values
!--------------------------------------------------------------------------------------
  *DO,I,1,NComp
    VALUE(I,1)=RES(I,1)+RES(I,2)
  *ENDDO

! Obtained values
!--------------------------------------------------------------------------------------
  ~CMBDAT,2
  ~CFSET,,10,45
  ESEL,S,ELEM,,100
  ~PLSHFOR,TX
  *GET,VALUE( 1,2),NODE,20,EPSW
  ~PLSHFOR,TY
  *GET,VALUE( 2,2),NODE,20,EPSW
  ~PLSHFOR,TXY
  *GET,VALUE( 3,2),NODE,20,EPSW
  ~PLSHFOR,MX
  *GET,VALUE( 4,2),NODE,20,EPSW
  ~PLSHFOR,MY
  *GET,VALUE( 5,2),NODE,20,EPSW
  ~PLSHFOR,MXY
  *GET,VALUE( 6,2),NODE,20,EPSW
  SHELL,TOP
  ~PLSHSTR,SX
  *GET,VALUE( 7,2),NODE,20,EPSW
  ~PLSHSTR,SY
  *GET,VALUE( 8,2),NODE,20,EPSW
  ~PLSHSTR,SZ
  *GET,VALUE( 9,2),NODE,20,EPSW
  ~PLSHSTR,SXY
  *GET,VALUE(10,2),NODE,20,EPSW
  ~PLSHSTR,SYZ
  *GET,VALUE(11,2),NODE,20,EPSW
  ~PLSHSTR,SXZ
  *GET,VALUE(12,2),NODE,20,EPSW
  ~PLSHSTR,EPX
  *GET,VALUE(13,2),NODE,20,EPSW
  ~PLSHSTR,EPY
  *GET,VALUE(14,2),NODE,20,EPSW
  ~PLSHSTR,EPZ
  *GET,VALUE(15,2),NODE,20,EPSW
  ~PLSHSTR,EPXY
  *GET,VALUE(16,2),NODE,20,EPSW
  ~PLSHSTR,EPYZ
  *GET,VALUE(17,2),NODE,20,EPSW
  ~PLSHSTR,EPZX
  *GET,VALUE(18,2),NODE,20,EPSW
  SHELL,BOT
  ~PLSHSTR,SX
  *GET,VALUE(19,2),NODE,20,EPSW
  ~PLSHSTR,SY
  *GET,VALUE(20,2),NODE,20,EPSW
  ~PLSHSTR,SZ
  *GET,VALUE(21,2),NODE,20,EPSW
  ~PLSHSTR,SXY
  *GET,VALUE(22,2),NODE,20,EPSW
  ~PLSHSTR,SYZ
  *GET,VALUE(23,2),NODE,20,EPSW
  ~PLSHSTR,SXZ
  *GET,VALUE(24,2),NODE,20,EPSW
  ~PLSHSTR,EPX
  *GET,VALUE(25,2),NODE,20,EPSW
  ~PLSHSTR,EPY
  *GET,VALUE(26,2),NODE,20,EPSW
  ~PLSHSTR,EPZ
  *GET,VALUE(27,2),NODE,20,EPSW
  ~PLSHSTR,EPXY
  *GET,VALUE(28,2),NODE,20,EPSW
  ~PLSHSTR,EPYZ
  *GET,VALUE(29,2),NODE,20,EPSW
  ~PLSHSTR,EPZX
  *GET,VALUE(30,2),NODE,20,EPSW
  ESEL,ALL

! Warning and error tolerances
  TOLER( 1, 1)= 1E-03   $   TOLER( 1, 2)= 1E-02
  TOLER( 2, 1)= 1E-02   $   TOLER( 2, 2)= 1E-01
  TOLER( 3, 1)= 1E-03   $   TOLER( 3, 2)= 1E-02
  TOLER( 4, 1)= 1E-22   $   TOLER( 4, 2)= 1E-21
  TOLER( 5, 1)= 1E-23   $   TOLER( 5, 2)= 1E-22
  TOLER( 6, 1)= 1E-05   $   TOLER( 6, 2)= 1E-04
  TOLER( 7, 1)= 1E-03   $   TOLER( 7, 2)= 1E-02
  TOLER( 8, 1)= 1E-01   $   TOLER( 8, 2)= 1E-00
  TOLER( 9, 1)= 1E-15   $   TOLER( 9, 2)= 1E-14
  TOLER(10, 1)= 1E-00   $   TOLER(10, 2)= 1E-00
  TOLER(11, 1)= 1E-04   $   TOLER(11, 2)= 1E-03
  TOLER(12, 1)= 1E-15   $   TOLER(12, 2)= 1E-14
  TOLER(13, 1)= 1E-09   $   TOLER(13, 2)= 1E-08
  TOLER(14, 1)= 1E-09   $   TOLER(14, 2)= 1E-08
  TOLER(15, 1)= 1E-09   $   TOLER(15, 2)= 1E-08
  TOLER(16, 1)= 1E-15   $   TOLER(16, 2)= 1E-14
  TOLER(17, 1)= 1E-15   $   TOLER(17, 2)= 1E-14
  TOLER(18, 1)= 1E-15   $   TOLER(18, 2)= 1E-14
  TOLER(19, 1)= 1E-02   $   TOLER(19, 2)= 1E-01
  TOLER(20, 1)= 1E-01   $   TOLER(20, 2)= 1E-00
  TOLER(21, 1)= 1E-15   $   TOLER(21, 2)= 1E-14
  TOLER(22, 1)= 1E-05   $   TOLER(22, 2)= 1E-04
  TOLER(23, 1)= 1E-15   $   TOLER(23, 2)= 1E-14
  TOLER(24, 1)= 1E-15   $   TOLER(24, 2)= 1E-14
  TOLER(25, 1)= 1E-09   $   TOLER(25, 2)= 1E-08
  TOLER(26, 1)= 1E-09   $   TOLER(26, 2)= 1E-08
  TOLER(27, 1)= 1E-09   $   TOLER(27, 2)= 1E-08
  TOLER(28, 1)= 1E-15   $   TOLER(28, 2)= 1E-14
  TOLER(29, 1)= 1E-15   $   TOLER(29, 2)= 1E-14
  TOLER(30, 1)= 1E-15   $   TOLER(30, 2)= 1E-14

!--------------------------------------------------------------------------------------
! Results comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
