!*************************************************************************************!
! TITLE: CFVR0811 - 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 BEAM44 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: Beam44
! MODULES:
! UNITS: SI
! KEYWORD1: Beam
! KEYWORD2: Combinations
!*************************************************************************************!
  FINISH
  ~CFCLEAR,,1 
 AnsLic='ansys'

  NomFile='CFVR0811'
  /TITLE, %NomFile%, Combination module test with BEAM44
! ---------------------------------------------------------------------------------
! Model definition and solve
! ---------------------------------------------------------------------------------
/PREP7
! Materials
  MP,EX,5,3E6
  MP,NUXY,5,0.2
! Sections
  R,10,0.108E-1,0.407E-4,0.407E-4,0.1418,0.612E-1,0.297E-5
  RMORE,0.108E-1,0.407E-4,0.407E-4,0.1418,0.612E-1,0.297E-5
  RMORE,0.0,0.0,0.0,0.0,0.0,0.0
  RMORE,0.0,0.0,0.612E-1,0.1418,0.612E-1,0.1418
  RMORE,0.58058E-2,0.58058E-2,0.58058E-2, 0.58058E-2,9629.6,9629.6
  RMORE,0.46900E-1,-0.46900E-1,0.46900E-1,-0.46900E-1,0.0,0.0
! Element types
  ET,2,BEAM44
! 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
    D,40,UZ,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,FZ_I   ,SMISC, 3
    ETABLE,MX_I   ,SMISC, 4
    ETABLE,MY_I   ,SMISC, 5
    ETABLE,MZ_I   ,SMISC, 6
    ETABLE,FX_J   ,SMISC, 7
    ETABLE,FY_J   ,SMISC, 8
    ETABLE,FZ_J   ,SMISC, 9
    ETABLE,MX_J   ,SMISC,10
    ETABLE,MY_J   ,SMISC,11
    ETABLE,MZ_J   ,SMISC,12
    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,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
    *GET,RES( 7,1),ELEM,200,ETAB,SDIR_I
    *GET,RES( 8,1),ELEM,200,ETAB,SBYT_I
    *GET,RES( 9,1),ELEM,200,ETAB,SBYB_I
    *GET,RES(10,1),ELEM,200,ETAB,SBZT_I
    *GET,RES(11,1),ELEM,200,ETAB,SBZB_I
    *GET,RES(12,1),ELEM,200,ETAB,SDIR_J
    *GET,RES(13,1),ELEM,200,ETAB,SBYT_J
    *GET,RES(14,1),ELEM,200,ETAB,SBYB_J
    *GET,RES(15,1),ELEM,200,ETAB,SBZT_J
    *GET,RES(16,1),ELEM,200,ETAB,SBZB_J
    *GET,RES(17,1),ELEM,200,ETAB,EPDIR_I
    *GET,RES(18,1),ELEM,200,ETAB,EPBYT_I
    *GET,RES(19,1),ELEM,200,ETAB,EPBYB_I
    *GET,RES(20,1),ELEM,200,ETAB,EPBZT_I
    *GET,RES(21,1),ELEM,200,ETAB,EPBZB_I
    *GET,RES(22,1),ELEM,200,ETAB,EPDIR_J
    *GET,RES(23,1),ELEM,200,ETAB,EPBYT_J
    *GET,RES(24,1),ELEM,200,ETAB,EPBYB_J
    *GET,RES(25,1),ELEM,200,ETAB,EPBZT_J
    *GET,RES(26,1),ELEM,200,ETAB,EPBZB_J
  ! Hypothesis 2
    SET,2,1
    ETABLE,FX_I   ,SMISC, 1
    ETABLE,FY_I   ,SMISC, 2
    ETABLE,FZ_I   ,SMISC, 3
    ETABLE,MX_I   ,SMISC, 4
    ETABLE,MY_I   ,SMISC, 5
    ETABLE,MZ_I   ,SMISC, 6
    ETABLE,FX_J   ,SMISC, 7
    ETABLE,FY_J   ,SMISC, 8
    ETABLE,FZ_J   ,SMISC, 9
    ETABLE,MX_J   ,SMISC,10
    ETABLE,MY_J   ,SMISC,11
    ETABLE,MZ_J   ,SMISC,12
    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,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
    *GET,RES( 7,2),ELEM,200,ETAB,SDIR_I
    *GET,RES( 8,2),ELEM,200,ETAB,SBYT_I
    *GET,RES( 9,2),ELEM,200,ETAB,SBYB_I
    *GET,RES(10,2),ELEM,200,ETAB,SBZT_I
    *GET,RES(11,2),ELEM,200,ETAB,SBZB_I
    *GET,RES(12,2),ELEM,200,ETAB,SDIR_J
    *GET,RES(13,2),ELEM,200,ETAB,SBYT_J
    *GET,RES(14,2),ELEM,200,ETAB,SBYB_J
    *GET,RES(15,2),ELEM,200,ETAB,SBZT_J
    *GET,RES(16,2),ELEM,200,ETAB,SBZB_J
    *GET,RES(17,2),ELEM,200,ETAB,EPDIR_I
    *GET,RES(18,2),ELEM,200,ETAB,EPBYT_I
    *GET,RES(19,2),ELEM,200,ETAB,EPBYB_I
    *GET,RES(20,2),ELEM,200,ETAB,EPBZT_I
    *GET,RES(21,2),ELEM,200,ETAB,EPBZB_I
    *GET,RES(22,2),ELEM,200,ETAB,EPDIR_J
    *GET,RES(23,2),ELEM,200,ETAB,EPBYT_J
    *GET,RES(24,2),ELEM,200,ETAB,EPBYB_J
    *GET,RES(25,2),ELEM,200,ETAB,EPBZT_J
    *GET,RES(26,2),ELEM,200,ETAB,EPBZB_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,NComp
    VALUE(I,1)=RES(I,1)+RES(I,2)
  *ENDDO

! Obtained values
!--------------------------------------------------------------------------------------
! Point to combined data
  ~CMBDAT,2
  ~CFSET,,10,45
  ETABLE,FX_I   ,SMISC, 1
  ETABLE,FY_I   ,SMISC, 2
  ETABLE,FZ_I   ,SMISC, 3
  ETABLE,MX_I   ,SMISC, 4
  ETABLE,MY_I   ,SMISC, 5
  ETABLE,MZ_I   ,SMISC, 6
  ETABLE,FX_J   ,SMISC, 7
  ETABLE,FY_J   ,SMISC, 8
  ETABLE,FZ_J   ,SMISC, 9
  ETABLE,MX_J   ,SMISC,10
  ETABLE,MY_J   ,SMISC,11
  ETABLE,MZ_J   ,SMISC,12
  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-01   $   TOLER(12, 2)= 1E-00
  TOLER(13, 1)= 1E-03   $   TOLER(13, 2)= 1E-02
  TOLER(14, 1)= 1E-03   $   TOLER(14, 2)= 1E-02
  TOLER(15, 1)= 1E-04   $   TOLER(15, 2)= 1E-03
  TOLER(16, 1)= 1E-04   $   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
