!*************************************************************************************!
! TITLE: CFVR0809 - Combination module test
! 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 BEAM23 elements.
! DESCRIPTION:
! DESCRIPTION: - Date handle with unsorted numeration (elements, load steps...)
! DESCRIPTION:
! DESCRIPTION:
! DESCRIPTION: The model is a three elements horizontal cantilever beam, each element is one third of
! DESCRIPTION: the length of the beam (total 3 meters).
! DESCRIPTION:
! DESCRIPTION: The load cases are:
! DESCRIPTION:
! DESCRIPTION: - Load Step 1, Sub Step 1: Imposed horizontal movement on the free end of 1 meter in
! DESCRIPTION: horizontal (direction of the beam).
! DESCRIPTION:
! DESCRIPTION: - Load Step 2, Sub Step 1: Imposed vertical and horizontal movement (perpendicular to the beam)
! DESCRIPTION:  on the free end of 1 meter each.
! DESCRIPTION:
! DESCRIPTION: No Civil materials or beam properties have been used in this example,
! DESCRIPTION: only ANSYS results will be checked.
! DESCRIPTION:
! DESCRIPTION:
! DESCRIPTION: The target for the combinations is:
! DESCRIPTION:
! DESCRIPTION: - Target 45; Maximum Bending moment MZ
! DESCRIPTION:
! DESCRIPTION:
! DESCRIPTION: The combination rule defined is:
! DESCRIPTION:
! DESCRIPTION: - Combination rule 10: ADDITION: H1+H2
! DESCRIPTION:
!
! ELEMENT TYPE: Beam23
! MODULES:
! UNITS: SI
! KEYWORD1: Beam
! KEYWORD2: Combinations
!*************************************************************************************!
  FINISH
  ~CFCLEAR,,1 
 AnsLic='ansys'

  NomFile='CFVR0809'
  /TITLE, %NomFile%, Combination module test with BEAM23
! ---------------------------------------------------------------------------------
! Model definition and solve
! ---------------------------------------------------------------------------------
/PREP7
! Materials
  MP,EX,5,3E6
  MP,NUXY,5,0.2
! Sections
  R,10,0.80E-01,0.30515E-02,0.57330E-03,0.17142E-03,0.57330E-03,0.30515E-02
! Element types
  ET,2,BEAM23
  KEYOPT,2,6,4
! Nodes
  N,10,0.0,0.0
  N,20,1.0,0.0
  N,30,2.0,0.0
  N,40,3.0,0.0
! Elements
  MAT,5
  REAL,10
  TYPE,2
  EN,100, 10, 20
  EN,200, 20, 30
  EN,300, 30, 40
! Boundary conditions
  D,10,ALL,0.0
! Initial hypothesis solve
  /SOLU
  ! Hypothesis 1:
    /TITLE, Hypothesis 1
    OUTRES,ALL,ALL
    D,40,UX,1
    SOLVE
    DDELE,40,ALL
  ! Hypothesis 2:
    /TITLE, Hypothesis 2
    OUTRES,ALL,ALL
    D,40,UY,1
    SOLVE
    DDELE,40,ALL

/POST1
! ---------------------------------------------------------------------------------
!  Read correct data from simple hypothesis
! ---------------------------------------------------------------------------------
  Dat=26 ! Number of data to check
  RES= $ *DIM,RES,,Dat,2
! Load data of each simple hypothesis
  ! Hypothesis 1
    SET,1,1
    ETABLE,FX_I   ,SMISC, 1
    ETABLE,FY_I   ,SMISC, 2
    ETABLE,MZ_I   ,SMISC, 6
    ETABLE,FX_J   ,SMISC, 1
    ETABLE,FY_J   ,SMISC, 2
    ETABLE,MZ_J   ,SMISC, 6
    ETABLE,FZ_I
    DETAB,ALL,FZ_I,0.0
    ETABLE,FZ_J
    DETAB,ALL,FZ_J,0.0
    ETABLE,MX_I
    DETAB,ALL,MX_I,0.0
    ETABLE,MX_J
    DETAB,ALL,MX_J,0.0
    ETABLE,MY_I
    DETAB,ALL,MY_I,0.0
    ETABLE,MY_J
    DETAB,ALL,MY_J,0.0
    *GET,RES( 1,1),ELEM,200,ETAB,FX_J
    *GET,RES( 2,1),ELEM,200,ETAB,FY_J
    *GET,RES( 3,1),ELEM,200,ETAB,FZ_J
    *GET,RES( 4,1),ELEM,200,ETAB,MX_J
    *GET,RES( 5,1),ELEM,200,ETAB,MY_J
    *GET,RES( 6,1),ELEM,200,ETAB,MZ_J
  ! Hypothesis 2
    SET,2,1
    ETABLE,FX_I   ,SMISC, 1
    ETABLE,FY_I   ,SMISC, 2
    ETABLE,MZ_I   ,SMISC, 6
    ETABLE,FX_J   ,SMISC, 1
    ETABLE,FY_J   ,SMISC, 2
    ETABLE,MZ_J   ,SMISC, 6
    ETABLE,FZ_I
    DETAB,ALL,FZ_I,0.0
    ETABLE,FZ_J
    DETAB,ALL,FZ_J,0.0
    ETABLE,MX_I
    DETAB,ALL,MX_I,0.0
    ETABLE,MX_J
    DETAB,ALL,MX_J,0.0
    ETABLE,MY_I
    DETAB,ALL,MY_I,0.0
    ETABLE,MY_J
    DETAB,ALL,MY_J,0.0
    *GET,RES( 1,2),ELEM,200,ETAB,FX_J
    *GET,RES( 2,2),ELEM,200,ETAB,FY_J
    *GET,RES( 3,2),ELEM,200,ETAB,FZ_J
    *GET,RES( 4,2),ELEM,200,ETAB,MX_J
    *GET,RES( 5,2),ELEM,200,ETAB,MY_J
    *GET,RES( 6,2),ELEM,200,ETAB,MZ_J

! ---------------------------------------------------------------------------------
! Definition and solving of combinations
! ---------------------------------------------------------------------------------
! Reset combinations module
  ~CMBCLR,
! Targets definition
  ~TRGDEF,45,BEAM,M,Z,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 = 26
  NComp_ch = 0

! Marix dim.
  *DIM,LABEL,CHAR,Ncomp,1
  *DIM,VALUE,,Ncomp,3
  *DIM,TOLER,,Ncomp,2

! Labels
!--------------------------------------------------------------------------------------
  *DO,I,1,NComp
    LABEL(I) ='TEST%I%'
  *ENDDO

! Correct values
!--------------------------------------------------------------------------------------
  *DO,I,1,6
    VALUE(I,1)=RES(I,1)+RES(I,2)
  *ENDDO
  *DO,I,7,NComp
    VALUE(I,1)=0.0
  *ENDDO

! Obtained values
!--------------------------------------------------------------------------------------
! Point to combined data
  ~CMBDAT,2
  ~CFSET,,10,45
  ETABLE,FX_I   ,SMISC, 1
  ETABLE,FY_I   ,SMISC, 2
  ETABLE,MZ_I   ,SMISC, 6
  ETABLE,FX_J   ,SMISC, 1
  ETABLE,FY_J   ,SMISC, 2
  ETABLE,MZ_J   ,SMISC, 6
  ETABLE,FZ_I
  DETAB,ALL,FZ_I,0.0
  ETABLE,FZ_J
  DETAB,ALL,FZ_J,0.0
  ETABLE,MX_I
  DETAB,ALL,MX_I,0.0
  ETABLE,MX_J
  DETAB,ALL,MX_J,0.0
  ETABLE,MY_I
  DETAB,ALL,MY_I,0.0
  ETABLE,MY_J
  DETAB,ALL,MY_J,0.0
  ETABLE,SDIR_I ,LS   , 1
  ETABLE,SBYT_I ,LS   , 2
  ETABLE,SBYB_I ,LS   , 3
  ETABLE,SBZT_I ,LS   , 4
  ETABLE,SBZB_I ,LS   , 5
  ETABLE,SDIR_J ,LS   , 6
  ETABLE,SBYT_J ,LS   , 7
  ETABLE,SBYB_J ,LS   , 8
  ETABLE,SBZT_J ,LS   , 9
  ETABLE,SBZB_J ,LS   ,10
  ETABLE,EPDIR_I,LEPEL, 1
  ETABLE,EPBYT_I,LEPEL, 2
  ETABLE,EPBYB_I,LEPEL, 3
  ETABLE,EPBZT_I,LEPEL, 4
  ETABLE,EPBZB_I,LEPEL, 5
  ETABLE,EPDIR_J,LEPEL, 6
  ETABLE,EPBYT_J,LEPEL, 7
  ETABLE,EPBYB_J,LEPEL, 8
  ETABLE,EPBZT_J,LEPEL, 9
  ETABLE,EPBZB_J,LEPEL,10
  *GET,VALUE( 1,2),ELEM,200,ETAB,FX_J
  *GET,VALUE( 2,2),ELEM,200,ETAB,FY_J
  *GET,VALUE( 3,2),ELEM,200,ETAB,FZ_J
  *GET,VALUE( 4,2),ELEM,200,ETAB,MX_J
  *GET,VALUE( 5,2),ELEM,200,ETAB,MY_J
  *GET,VALUE( 6,2),ELEM,200,ETAB,MZ_J
  *GET,VALUE( 7,2),ELEM,200,ETAB,SDIR_I
  *GET,VALUE( 8,2),ELEM,200,ETAB,SBYT_I
  *GET,VALUE( 9,2),ELEM,200,ETAB,SBYB_I
  *GET,VALUE(10,2),ELEM,200,ETAB,SBZT_I
  *GET,VALUE(11,2),ELEM,200,ETAB,SBZB_I
  *GET,VALUE(12,2),ELEM,200,ETAB,SDIR_J
  *GET,VALUE(13,2),ELEM,200,ETAB,SBYT_J
  *GET,VALUE(14,2),ELEM,200,ETAB,SBYB_J
  *GET,VALUE(15,2),ELEM,200,ETAB,SBZT_J
  *GET,VALUE(16,2),ELEM,200,ETAB,SBZB_J
  *GET,VALUE(17,2),ELEM,200,ETAB,EPDIR_I
  *GET,VALUE(18,2),ELEM,200,ETAB,EPBYT_I
  *GET,VALUE(19,2),ELEM,200,ETAB,EPBYB_I
  *GET,VALUE(20,2),ELEM,200,ETAB,EPBZT_I
  *GET,VALUE(21,2),ELEM,200,ETAB,EPBZB_I
  *GET,VALUE(22,2),ELEM,200,ETAB,EPDIR_J
  *GET,VALUE(23,2),ELEM,200,ETAB,EPBYT_J
  *GET,VALUE(24,2),ELEM,200,ETAB,EPBYB_J
  *GET,VALUE(25,2),ELEM,200,ETAB,EPBZT_J
  *GET,VALUE(26,2),ELEM,200,ETAB,EPBZB_J

! Warning and error tolerances
  TOLER( 1, 1)= 1E-05   $   TOLER( 1, 2)= 1E-04
  TOLER( 2, 1)= 1E-09   $   TOLER( 2, 2)= 1E-08
  TOLER( 3, 1)= 1E-10   $   TOLER( 3, 2)= 1E-09
  TOLER( 4, 1)= 1E-15   $   TOLER( 4, 2)= 1E-14
  TOLER( 5, 1)= 1E-10   $   TOLER( 5, 2)= 1E-09
  TOLER( 6, 1)= 1E-09   $   TOLER( 6, 2)= 1E-08
  TOLER( 7, 1)= 1E-01   $   TOLER( 7, 2)= 1E-00
  TOLER( 8, 1)= 1E-03   $   TOLER( 8, 2)= 1E-02
  TOLER( 9, 1)= 1E-03   $   TOLER( 9, 2)= 1E-02
  TOLER(10, 1)= 1E-03   $   TOLER(10, 2)= 1E-02
  TOLER(11, 1)= 1E-15   $   TOLER(11, 2)= 1E-14
  TOLER(12, 1)= 1E-02   $   TOLER(12, 2)= 1E-00
  TOLER(13, 1)= 1E-02   $   TOLER(13, 2)= 1E-02
  TOLER(14, 1)= 1E-02   $   TOLER(14, 2)= 1E-02
  TOLER(15, 1)= 1E-03   $   TOLER(15, 2)= 1E-03
  TOLER(16, 1)= 1E-03   $   TOLER(16, 2)= 1E-03
  TOLER(17, 1)= 1E-09   $   TOLER(17, 2)= 1E-08
  TOLER(18, 1)= 1E-11   $   TOLER(18, 2)= 1E-10
  TOLER(19, 1)= 1E-11   $   TOLER(19, 2)= 1E-10
  TOLER(20, 1)= 1E-11   $   TOLER(20, 2)= 1E-10
  TOLER(21, 1)= 1E-11   $   TOLER(21, 2)= 1E-10
  TOLER(22, 1)= 1E-09   $   TOLER(22, 2)= 1E-08
  TOLER(23, 1)= 1E-11   $   TOLER(23, 2)= 1E-10
  TOLER(24, 1)= 1E-11   $   TOLER(24, 2)= 1E-10
  TOLER(25, 1)= 1E-11   $   TOLER(25, 2)= 1E-10
  TOLER(26, 1)= 1E-11   $   TOLER(26, 2)= 1E-10

!--------------------------------------------------------------------------------------
! Results comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
