!*************************************************************************************!
! TITLE: CFVR0851 - Linear combination test
! SUBTITLE: Example to check the linear combinations utility
!
! DESCRIPTION: This example checks the functionality of the combinations module.
! DESCRIPTION:
! DESCRIPTION: It checks the following:
! DESCRIPTION:
! DESCRIPTION: - Linear combinations.
! DESCRIPTION:
! DESCRIPTION: - Date handle with unsorted numeration (elements, load steps...)
! DESCRIPTION:
! DESCRIPTION:
! DESCRIPTION: The model is a simple three spans beam with a rectangular section (1.0m x 2.0m).
! DESCRIPTION: The spans are 10m, 16m and 10m long and are meshed with two elements each.
! DESCRIPTION:
! DESCRIPTION: No Civil materials or shell properties have been used in this example,
! DESCRIPTION: only ANSYS results will be checked.
! DESCRIPTION:
! DESCRIPTION: The load cases are:
! DESCRIPTION:
! DESCRIPTION: - Load Step 2, Sub Step 1, Time 10: Surface load (1 N/m) on Span 1 and a
! DESCRIPTION: vertical load of 0.1N on the mid-point of Span 1.
! DESCRIPTION:
! DESCRIPTION: - Load Step 3, Sub Step 3, Time 30: Surface load (2 N/m) on Span 2 and a
! DESCRIPTION: vertical load of 0.2N on the mid-point of Span 2.
! DESCRIPTION:
! DESCRIPTION: - Load Step 6, Sub Step 2, Time 50: The end of span 3 (node 14) has a
! DESCRIPTION: vertical displacement of -0.1mm.
! DESCRIPTION:
! DESCRIPTION:
! DESCRIPTION: The combination rules defined are:
! DESCRIPTION:
! DESCRIPTION: - Combination rule 12: Addition with variable coefficients [(2.0 or 3.0)*H1+(1.0 or 2.0)*H2]
! DESCRIPTION:
! DESCRIPTION: - Combination rule 15: Opposed [(-1.0 or 1.0)*H3]
! DESCRIPTION:
! DESCRIPTION: - Combination rule 18: Compatible [Combination 12 and/or Combination 15]
! DESCRIPTION:
! DESCRIPTION:
! DESCRIPTION: The targets used to test the utility are:
! DESCRIPTION:
! DESCRIPTION: - Maximum value of the vertical reaction on node 2.
! DESCRIPTION:
! DESCRIPTION: - Minumum vertical displacement on node 8.
! DESCRIPTION:
! DESCRIPTION: - Absolute value of the bending moment of element 13, node 12.
! DESCRIPTION:
! DESCRIPTION: The following concomitant values are also checked:
! DESCRIPTION:
! DESCRIPTION: - Maximum stress on the top of the section of element 9, node 8.
! DESCRIPTION:
! DESCRIPTION: - Minimum shear force of element 7, node 6.
! DESCRIPTION:
! DESCRIPTION: - Absolute vertical displacement of node 12.
! DESCRIPTION:
! DESCRIPTION: - Applied load on node 4.
! DESCRIPTION:
! DESCRIPTION: - Applied displacement/restrains on node 14.
! DESCRIPTION:
!
! ELEMENT TYPE: Beam3, Beam54
! MODULES:
! UNITS: SI
! KEYWORD1: Beam
! KEYWORD2: Combinations
!*************************************************************************************!
  FINISH
  ~CFCLEAR,,1 
 AnsLic='ansys'

  NomFile='CFVR0851'
  /TITLE, %NomFile%, Combination module test.
! ---------------------------------------------------------------------------------

! ---------------------------------------------------------------------------------
! Model definition and solve
! ---------------------------------------------------------------------------------
!
!  General data:
!  - Section Rectang 1.00 x 2.00 m
!  - UX, UZ, ROTX y ROTY = 0
!
!  Load scheme:
!              F=0.1               F=0.2
!               |                   |
!       LS2 SB1 |TM10 Q=1    LS3 SB3| TM30 Q=2
!       ||||||||||||||||||  |||||||||||||||||
!       ||||||||||||||||||  |||||||||||||||||    LS6 SB2  TM50
!       vvvvvvvvvvvvvvvvvv  vvvvvvvvvvvvvvvvv   UY=-1E-4 node 14
!     2         4         6         8        10        12        14  : Nodes
!     o=========o=========o=========o=========o=========o=========o
!     ^    5         7    ^    9        11    ^   13        15    ^  : Elements
!          3         5         7         9        11        13       : Material
!          2         4         6         8        10        12       : Section
!          4         4         6         6         8         8       : Types
!         54        54         3         3        54        54       : Ename
!     |------ 10 m -------|------ 16 m -------|------ 10 m -------|
!
! ---------------------------------------------------------------------------------

/PREP7
! Materials
  *DO,IMAT,2,14
    MP,EX,IMAT,3E6
    MP,NUXY,IMAT,0.2
  *ENDDO
  *GET,VERSION,ACTIVE,,REV
! Cross Sections
  H=2
  A=2
  IZ=1/12*1*2**3
  *DO,ISEC,1,4
    *IF,VERSION,GE,22.2,THEN
      R,ISEC,A,IZ,H
    *ELSE
      R,ISEC,A,IZ,H/2,H/2,A,IZ
      RMORE,H/2,H/2
    *ENDIF
  *ENDDO
  *DO,ISEC,9,13
    *IF,VERSION,GE,22.2,THEN
      R,ISEC,A,IZ,H
    *ELSE
      R,ISEC,A,IZ,H/2,H/2,A,IZ
      RMORE,H/2,H/2
    *ENDIF
  *ENDDO
  *DO,ISEC,5,8
    R,ISEC,A,IZ,H
  *ENDDO
! Element types
  ET,1,BEAM3
  *DO,ITYP,2,10,4
    ET,ITYP,BEAM3
  *ENDDO
  *DO,ITYP,4,12,4
	*IF,VERSION,GE,22.2,THEN
		ET,ITYP,BEAM3        ! BEAM 3 (BEAM 54 no longer supported)
	*ELSE
		ET,ITYP,BEAM54        ! BEAM 54 (represents reinforcement)
	*ENDIF
  *ENDDO
! Nodes
  N, 1,-1
  N, 2, 0
  N, 4, 5
  N, 6,10
  N,10,26
  FILL,6,10
  N,14,36
  FILL,10,14
! Elements
  MAT, 3 $ REAL, 2 $ TYPE, 4 $ EN, 5, 2, 4
  MAT, 5 $ REAL, 4 $ TYPE, 4 $ EN, 7, 4, 6
  MAT, 7 $ REAL, 6 $ TYPE, 6 $ EN, 9, 6, 8
  MAT, 9 $ REAL, 8 $ TYPE, 6 $ EN,11, 8,10
  MAT,11 $ REAL,10 $ TYPE, 8 $ EN,13,10,12
  MAT,13 $ REAL,12 $ TYPE, 8 $ EN,15,12,14
! Boundary conditions
  D,8,UX
  D,2,UY
  D,6,UY
  D,10,UY
  D,14,UY
! Initial hypothesis solve
  /SOLU
  SOLCONTROL,OFF
  AUTOTS,OFF
  ! Hypothesis 0: LS1 Ignored
    TIME, 2
    OUTRES,ALL,NONE
    SOLVE
  ! Hypothesis 1: LS2 SB1 TM10 Q=1 (1st Span)
    /TITLE,Test %NomFile% . H1: LS2 SB1 TM10 Q=1 (1st Span)
    TIME,10
    OUTRES,ALL,ALL
    SFBEAM, 5,1,PRES,1,1
    SFBEAM, 7,1,PRES,1,1
    F,4,FY,-0.1
    SOLVE
    SFEDELE,ALL,ALL,PRES
    FDELE,ALL,ALL
  ! Hypothesis 2: LS3 SB3 TM30 Q=2 (2nd Span)
    /TITLE,Test %NomFile% . H2: LS3 SB3 TM30 Q=2 (2nd Span)
    TIME,30
    NSUBST,3
    OUTRES,ALL,LAST
    D,2,UX
    DDELE,8,UX
    SFBEAM, 9,1,PRES,2,2
    SFBEAM,11,1,PRES,2,2
    F,8,FY,-0.2
    SOLVE
    SFEDELE,ALL,ALL,PRES
    FDELE,ALL,ALL
  ! Hypothesis 0: LS4 Ignored
    TIME,31
    OUTRES,ALL,NONE
    SOLVE
  ! Hypothesis 0: LS5 Ignored
    TIME,32
    OUTRES,ALL,NONE
    SOLVE
  ! Hypothesis 3: LS6 SB2 TM50 UY(14)=-1E-4
    /TITLE,Test %NomFile% . H3: LS6 SB2 TM50 UY(14)=-1E-4
    TIME,50
    NSUBST,2
    OUTRES,ALL,ALL
    D,10,UX
    D,14,UX
    DDELE,2,UX
    D,14,UY,-1.E-4
    SOLVE
    D,14,UY,0

/POST1
! ---------------------------------------------------------------------------------
! Definition and solving of combinations
! ---------------------------------------------------------------------------------
! Reset combinations module
  ~CMBCLR
! Combinations definition
  ! Combination 12: ADDITION CFV  : (2.0 or 3.0)*H1+(1.0 or 2.0)*H2
    /TITLE,(2.0 or 3.0)*H1+(1.0 or 2.0)*H2
      ~CMBDEF,12,ADDVC,2
      ~STSTDEF,12,1,LSTEP,2         ! H1: LS2 SB1 TM10 Q=1 (1st Span)
      ~STSTDEF,12,2,NSET ,2         ! H2: LS3 SB3 TM30 Q=2 (2nd Span)
      ~STSTCFT,12,1,3.00,2.00
      ~STSTCFT,12,2,2.00,1.00
  ! Combination 15: OPPOSED      : [H3] OPPOSED
    /TITLE,[H3] Opposed
      ~CMBDEF,15,OPPOSED,1
      ~STSTDEF,15,1,LSTEP,6         ! H3: LS6 SB2 TM50 UY(14)=-1E-4
  ! Combination 18: COMPATIBLE   : [C12, C15] Compatibles
    /TITLE,[C12, C15] Compatibles
      ~CMBDEF,18,COMPATIB,2
      ~STSTDEF,18,1,CMB,12    ! Combination 12
      ~STSTDEF,18,2,CMB,15    ! Combination 15
  ~LINCMB
!--------------------------------------------------------------------------------------
! DATA CHECK
!--------------------------------------------------------------------------------------
! Data comparison number
  NComp = 24
  NComp_ch = 0

! Marix dim.
  *DIM,LABEL,CHAR,Ncomp,1
  *DIM,VALUE,,Ncomp,3
  *DIM,TOLER,,Ncomp,2

! ---------------------------------------------------------------------------------
! Control tests
! ---------------------------------------------------------------------------------
! Definition of the matrix which stores the targets+concomintant values for each simple hypothesis
  RES=
  *DIM,RES,,9,3
! Load data of each simple hypothesis
  ! Hypothesis 1
    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
    *GET,RES(1,1),NODE, 2,RF,FY
    *GET,RES(2,1),NODE, 8, U, Y
    *GET,RES(3,1),ELEM,13,ETAB,MZ_J
    ETABLE,SBYT_J,LS,5
    *GET,RES(4,1),ELEM, 9,ETAB,SBYT_J
    *GET,RES(5,1),ELEM, 7,ETAB,FY_J
    *GET,RES(6,1),NODE,12, U, Y
    RES(7,1)= -0.1
    RES(8,1)=  0

  ! Hypothesis 2
    SET,3,3
    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
    *GET,RES(1,2),NODE, 2,RF,FY
    *GET,RES(2,2),NODE, 8, U, Y
    *GET,RES(3,2),ELEM,13,ETAB,MZ_J
    ETABLE,SBYT_J,LS,5
    *GET,RES(4,2),ELEM, 9,ETAB,SBYT_J
    *GET,RES(5,2),ELEM, 7,ETAB,FY_J
    *GET,RES(6,2),NODE,12, U, Y
    RES(7,2)=  0.0
    RES(8,2)=  0

  ! Hypothesis 3
    SET,6,2
    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
    *GET,RES(1,3),NODE, 2,RF,FY
    *GET,RES(2,3),NODE, 8, U, Y
    *GET,RES(3,3),ELEM,13,ETAB,MZ_J
    ETABLE,SBYT_J,LS,5
    *GET,RES(4,3),ELEM, 9,ETAB,SBYT_J
    *GET,RES(5,3),ELEM, 7,ETAB,FY_J
    *GET,RES(6,3),NODE,12, U, Y
    RES(7,3)=  0.0
    RES(8,3)=  -1E-4

! Correct values
!--------------------------------------------------------------------------------------
  *DO,I,1,8
    VALUE(I,1)=3.0*RES(I,1)+1.0*RES(I,2)+1.0*RES(I,3)
  *ENDDO
  *DO,I,1,8
    VALUE(I+8,1)=2.0*RES(I,1)+2.0*RES(I,2)-1.0*RES(I,3)
  *ENDDO
  *DO,I,1,8
    VALUE(I+16,1)=2.0*RES(I,1)+2.0*RES(I,2)+1.0*RES(I,3)
  *ENDDO

! Obtained values
!--------------------------------------------------------------------------------------
  !  RY+ on node 2
    *DO,II,13,26
      SET,II,LAST,1
      *GET,VALUE(1,2),NODE, 2,RF,FY
      *IF,VALUE(1,2),EQ,Value(1,1),THEN
        LS = II
        *EXIT
      *ENDIF
    *ENDDO
    SET,LS,LAST,1
  ! Test 1 to 9
    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
    *GET,VALUE(1,2),NODE, 2,RF,FY
    *GET,VALUE(2,2),NODE, 8, U, Y
    *GET,VALUE(3,2),ELEM,13,ETAB,MZ_J
    ETABLE,SBYT_J,LS,5
    *GET,VALUE(4,2),ELEM, 9,ETAB,SBYT_J
    *GET,VALUE(5,2),ELEM, 7,ETAB,FY_J
    *GET,VALUE(6,2),NODE,12, U, Y
    *GET,VALUE(7,2),NODE, 4, F,FY
    *GET,VALUE(8,2),NODE,14, D,UY
  !   UY- on node 8
    *DO,II,13,26
      SET,II,LAST,1
      *GET,VALUE(10,2),NODE, 8, U, Y
      *IF,VALUE(10,2),EQ,Value(10,1),THEN
        LS = II
        *EXIT
      *ENDIF
    *ENDDO
    SET,LS,LAST,1
  ! Test 9 to 16
    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
    *GET,VALUE(9,2),NODE, 2,RF,FY
    *GET,VALUE(11,2),ELEM,13,ETAB,MZ_J
    ETABLE,SBYT_J,LS,5
    *GET,VALUE(12,2),ELEM, 9,ETAB,SBYT_J
    *GET,VALUE(13,2),ELEM, 7,ETAB,FY_J
    *GET,VALUE(14,2),NODE,12, U, Y
    *GET,VALUE(15,2),NODE, 4, F,FY
    *GET,VALUE(16,2),NODE,14, D,UY
  !  MZ* on Element 13, node 12
    *DO,II,13,26
      SET,II,LAST,1
      ETABLE,MZ_J   ,SMISC,12
      *GET,VALUE(19,2),ELEM,13,ETAB,MZ_J
      !*IF,VALUE(19,2),EQ,Value(19,1),THEN
	   *IF,ABS(VALUE(19,2)-Value(19,1)),LT,1e-6,THEN
        LS = II
        *EXIT
      *ENDIF
    *ENDDO
    SET,LS,LAST,1
  ! Test 17 to 24
    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
    *GET,VALUE(17,2),NODE, 2,RF,FY
    *GET,VALUE(18,2),NODE, 8, U, Y
    ETABLE,SBYT_J,LS,5
    *GET,VALUE(20,2),ELEM, 9,ETAB,SBYT_J
    *GET,VALUE(21,2),ELEM, 7,ETAB,FY_J
    *GET,VALUE(22,2),NODE,12, U, Y
    *GET,VALUE(23,2),NODE, 4, F,FY
    *GET,VALUE(24,2),NODE,14, D,UY

! Labels
!--------------------------------------------------------------------------------------
  *DO,I,1,NComp
    LABEL(I) ='TEST%I%'
  *ENDDO

! Warning and error tolerances
  TOLER( 1, 1)= 1E-08     $   TOLER( 1, 2)= 1E-07
  TOLER( 2, 1)= 1E-13     $   TOLER( 2, 2)= 1E-12
  TOLER( 3, 1)= 1E-06     $   TOLER( 3, 2)= 1E-05
  TOLER( 4, 1)= 1E-06     $   TOLER( 4, 2)= 1E-05
  TOLER( 5, 1)= 1E-06     $   TOLER( 5, 2)= 1E-05
  TOLER( 6, 1)= 1E-14     $   TOLER( 6, 2)= 1E-13
  TOLER( 7, 1)= 1E-10     $   TOLER( 7, 2)= 1E-09
  TOLER( 8, 1)= 1E-13     $   TOLER( 8, 2)= 1E-12
  TOLER( 9, 1)= 1E-09     $   TOLER( 9, 2)= 1E-08
  TOLER(10, 1)= 1E-09     $   TOLER(10, 2)= 1E-08
  TOLER(11, 1)= 1E-06     $   TOLER(11, 2)= 1E-05
  TOLER(12, 1)= 1E-05     $   TOLER(12, 2)= 1E-04
  TOLER(13, 1)= 1E-06     $   TOLER(13, 2)= 1E-05
  TOLER(14, 1)= 1E-08     $   TOLER(14, 2)= 1E-07
  TOLER(15, 1)= 1E-13     $   TOLER(15, 2)= 1E-12
  TOLER(16, 1)= 1E-10     $   TOLER(16, 2)= 1E-09
  TOLER(17, 1)= 1E-13     $   TOLER(17, 2)= 1E-12
  TOLER(18, 1)= 1E-09     $   TOLER(18, 2)= 1E-08
  TOLER(19, 1)= 1E-06     $   TOLER(19, 2)= 1E-05
  TOLER(20, 1)= 1E-05     $   TOLER(20, 2)= 1E-04
  TOLER(21, 1)= 1E-05     $   TOLER(21, 2)= 1E-04
  TOLER(22, 1)= 1E-08     $   TOLER(22, 2)= 1E-07
  TOLER(23, 1)= 1E-08     $   TOLER(23, 2)= 1E-07
  TOLER(24, 1)= 1E-13     $   TOLER(24, 2)= 1E-12

!--------------------------------------------------------------------------------------
! Results comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
