!*************************************************************************************!
! TITLE: CFVR3210 - Slope stability with multiple water pressure lines
! SUBTITLE: Slope stability analysis, with multiple water pressure lines and an impermeable layer.
!
! DESCRIPTION: A plane model as shown in the figure is used to check the slope stability analysis.
! DESCRIPTION: Fellenius, Bishop, Janbu and Modified Janbu methods are used.
! DESCRIPTION:
! DESCRIPTION: The model is made off four layers of materials with the following properties
! DESCRIPTION: (from top to bottom):
! DESCRIPTION:
! DESCRIPTION: - Specific weight 1 = 12600 N/m<sup>2</sup>; Porosity 1 = 0.10
! DESCRIPTION:
! DESCRIPTION: - Specific weight 2 = 14400 N/m<sup>2</sup>
! DESCRIPTION:
! DESCRIPTION: - Specific weight 3 = 11200 N/m<sup>2</sup>; Porosity 3 =  0.40
! DESCRIPTION:
! DESCRIPTION: - Specific weight 4 = 9000 N/m<sup>2</sup>; Porosity 4 =  0.10
! DESCRIPTION:
! DESCRIPTION: The terrain has a water table defined as multiple polygonal lines to define
! DESCRIPTION: several pressure levels, not following an hydrostatic pressure law. The second layer
! DESCRIPTION: is considered impermeable, no water pore pressure will act on it (RUSI=0).
! DESCRIPTION:
! DESCRIPTION: The only action on the structure is its self weight.
!
! ELEMENT TYPE: PLANE82
! MODULES: GETC
! UNITS: SI
! KEYWORD1: Geotechnics
! KEYWORD2: Slope Stability
!*************************************************************************************!
  FINISH
  ~CFCLEAR,,1
  ~CFACTIV,GETC,Y
  NomFile='CFVR3210'
  /TITLE, %NomFile%, Slope stability with multiple water pressure lines

! -------------------------------------------------------------------------------------
! 1. Initial data
! -------------------------------------------------------------------------------------
! CivilFEM SETUP
  ~UNITS,SI

/PREP7
! 2. Materials
! --------------------------------------------------
~CFMP,1,LIB,SOIL,,OH
~CFMP,2,LIB,SOIL,,CH
~CFMP,3,LIB,SOIL,,SC
~CFMP,4,LIB,SOIL,,PH
~CFMP,1,Soil,GAMD,,12600 ! OH
~CFMP,2,Soil,GAMD,,14400 ! CH
~CFMP,3,Soil,GAMD,,11200 ! SC
~CFMP,4,Soil,GAMD,,9000  ! PH
*DO,II,1,4
  ~CFMP,II,SOIL,RUSI,,1
*ENDDO
~CFMP,2,SOIL,RUSI,,0

! 3. Elements
! --------------------------------------------------
ET,1,PLANE82

! 4. Model
! --------------------------------------------------
K, 1,-12,28
K, 2,  1,29
K, 3, 10,37
K, 4, 19,38
K, 5, 35,28
K, 6, 50,27
K, 7,  6,33
K, 8, 20,29
K, 9, 26,34
K,10, 18,24
K,11, 50,21
K,12,-12,19
K,13, 50,16
K,14,-12, 6
K,15, 50,10
A,7,8,9,4,3
A,2,7,8,9,5,6,11,10
A,1,2,10,11,13,12
A,15,13,12,14

AESIZE,ALL,3

*DO,I,1,4
  MAT,I
  AMESH,I
*ENDDO
/NUMBER,1
/PNUM,MAT,1
EPLOT
/IMAGE, SAVE, %NomFile%,BMP

! 5. Capturing Model
! --------------------------------------------------
pp1=node(kx(1),ky(1),kz(1))
pp2=node(kx(6),ky(6),kz(6))
pp3=node(kx(5),ky(5),kz(5))
~SLPIN,PP1,PP2,PP3

! 6. Circles Centres Grid Input
! --------------------------------------------------
K,16,21,41
K,17,35,32
K,18,42,43
k,19,28,52
~SLPCIRK,16,19,17,5,6

! 7. Tangents Input
! --------------------------------------------------
K,20,34,27
K,21,34,11
K,22, 0,11
K,23,18,37
~SLPTANK,20,23,22,21,10

! 8. Hydrostatic Pressure
! --------------------------------------------------
~SLPPWP,5, 0,-12,27, 01,27, 16,35, 41,25, 50,25
~SLPPWP,7,10,-12,17, 01,17, 16,25, 41,15, 50,15
~SLPPWP,8,25,-12, 2, 01, 2, 16,10, 41, 0, 50, 0

! 9. Data Check
! --------------------------------------------------
! Data comparison number
  NComp    = 30*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

! 10. Labels, Correct data, obtained data
! --------------------------------------------------
 *DIM,AUXVECT,ARRAY,10
 *DIM,AUXVEC2,ARRAY,10
/POST1
~SLPSOL,0 ! Fellenius
*DO,JJ,1,30
  LABEL(JJ) = 'FEL' %JJ%
  *DO,II,1,10
    ~CFGET,AUXVECT(II),SLOPE,,RES,F,,2,(JJ-1)*10 + II
  *ENDDO
  *VOPER,AUXVEC2,AUXVECT,MULT,AUXVECT
  *VFUN,AUXVEC2,SQRT,AUXVEC2
  *VFUN,AUXVEC2,ASORT,AUXVEC2
  VALUE(JJ,2) = AUXVEC2(1)
*ENDDO

VALUE(  1,1) =  2.592
VALUE(  2,1) =  1.971
VALUE(  3,1) =  1.000
VALUE(  4,1) =  2.504
VALUE(  5,1) =  2.486
VALUE(  6,1) =  3.172
VALUE(  7,1) =  2.187
VALUE(  8,1) =  1.773
VALUE(  9,1) =  1.609
VALUE( 10,1) =  1.634
VALUE( 11,1) =  1.857
VALUE( 12,1) =  2.785
VALUE( 13,1) =  1.992
VALUE( 14,1) =  1.669
VALUE( 15,1) =  1.532
VALUE( 16,1) =  1.585
VALUE( 17,1) =  1.964
VALUE( 18,1) =  2.702
VALUE( 19,1) =  1.868
VALUE( 20,1) =  1.604
VALUE( 21,1) =  1.475
VALUE( 22,1) =  1.624
VALUE( 23,1) =  2.074
VALUE( 24,1) =  3.119
VALUE( 25,1) =  1.781
VALUE( 26,1) =  1.558
VALUE( 27,1) =  1.463
VALUE( 28,1) =  1.711
VALUE( 29,1) =  2.280
VALUE( 30,1) =  4.802

~SLPSOL,1 ! Bishop
*DO,JJ,1,30
  LABEL(JJ+30) = 'BIS' %JJ+30%
  *DO,II,1,10
    ~CFGET,AUXVECT(II),SLOPE,,RES,F,,2,(JJ-1)*10 + II
  *ENDDO
  *VOPER,AUXVEC2,AUXVECT,MULT,AUXVECT
  *VFUN,AUXVEC2,SQRT,AUXVEC2
  *VFUN,AUXVEC2,ASORT,AUXVEC2
  VALUE(JJ+30,2) = AUXVEC2(1)
*ENDDO

VALUE( 31,1) =  2.765
VALUE( 32,1) =  2.174
VALUE( 33,1) =  2.766
VALUE( 34,1) =  2.605
VALUE( 35,1) =  2.570
VALUE( 36,1) =  3.363
VALUE( 37,1) =  2.309
VALUE( 38,1) =  1.888
VALUE( 39,1) =  1.758
VALUE( 40,1) =  1.784
VALUE( 41,1) =  2.056
VALUE( 42,1) =  3.194
VALUE( 43,1) =  2.072
VALUE( 44,1) =  1.745
VALUE( 45,1) =  1.610
VALUE( 46,1) =  1.677
VALUE( 47,1) =  2.160
VALUE( 48,1) =  3.203
VALUE( 49,1) =  1.924
VALUE( 50,1) =  1.658
VALUE( 51,1) =  1.533
VALUE( 52,1) =  1.720
VALUE( 53,1) =  2.313
VALUE( 54,1) =  3.494
VALUE( 55,1) =  1.821
VALUE( 56,1) =  1.599
VALUE( 57,1) =  1.511
VALUE( 58,1) =  1.817
VALUE( 59,1) =  2.486
VALUE( 60,1) =  5.074

~SLPSOL,2 ! Janbu
*DO,JJ,1,30
  LABEL(JJ+60) = 'JAN' %JJ+60%
  *DO,II,1,10
    ~CFGET,AUXVECT(II),SLOPE,,RES,F,,2,(JJ-1)*10 + II
  *ENDDO
  *VOPER,AUXVEC2,AUXVECT,MULT,AUXVECT
  *VFUN,AUXVEC2,SQRT,AUXVEC2
  *VFUN,AUXVEC2,ASORT,AUXVEC2
  VALUE(JJ+60,2) = AUXVEC2(1)
*ENDDO

VALUE( 61,1) =  2.511
VALUE( 62,1) =  1.907
VALUE( 63,1) =  2.662
VALUE( 64,1) =  2.553
VALUE( 65,1) =  2.485
VALUE( 66,1) =  3.081
VALUE( 67,1) =  2.154
VALUE( 68,1) =  1.704
VALUE( 69,1) =  1.500
VALUE( 70,1) =  1.540
VALUE( 71,1) =  1.830
VALUE( 72,1) =  2.642
VALUE( 73,1) =  1.956
VALUE( 74,1) =  1.608
VALUE( 75,1) =  1.458
VALUE( 76,1) =  1.463
VALUE( 77,1) =  1.685
VALUE( 78,1) =  2.571
VALUE( 79,1) =  1.831
VALUE( 80,1) =  1.549
VALUE( 81,1) =  1.413
VALUE( 82,1) =  1.567
VALUE( 83,1) =  1.982
VALUE( 84,1) =  2.945
VALUE( 85,1) =  1.745
VALUE( 86,1) =  1.510
VALUE( 87,1) =  1.409
VALUE( 88,1) =  1.646
VALUE( 89,1) =  2.192
VALUE( 90,1) =  4.505

~SLPSOL,3 ! Modified Janbu
*DO,JJ,1,30
  LABEL(JJ+90) = 'JMD' %JJ+90%
  *DO,II,1,10
    ~CFGET,AUXVECT(II),SLOPE,,RES,F,,2,(JJ-1)*10 + II
  *ENDDO
  *VOPER,AUXVEC2,AUXVECT,MULT,AUXVECT
  *VFUN,AUXVEC2,SQRT,AUXVEC2
  *VFUN,AUXVEC2,ASORT,AUXVEC2
  VALUE(JJ+90,2) = AUXVEC2(1)
*ENDDO

VALUE( 91,1) =  2.746352432
VALUE( 92,1) =  2.113819272
VALUE( 93,1) =  1.863033364
VALUE( 94,1) =  2.771605293
VALUE( 95,1) =  2.695323123
VALUE( 96,1) =  3.379178768
VALUE( 97,1) =  2.32136147
VALUE( 98,1) =  1.856680598
VALUE( 99,1) =  1.696272308
VALUE(100,1) =  1.693979842
VALUE(101,1) =  2.024759364
VALUE(102,1) =  2.776590768
VALUE(103,1) =  2.093720093
VALUE(104,1) =  1.733334959
VALUE(105,1) =  1.574949787
VALUE(106,1) =  1.66013212
VALUE(107,1) =  1.858052621
VALUE(108,1) =  2.82942852
VALUE(109,1) =  1.950316335
VALUE(110,1) =  1.659562513
VALUE(111,1) =  1.511967284
VALUE(112,1) =  1.685219813
VALUE(113,1) =  2.181414864
VALUE(114,1) =  3.187496398
VALUE(115,1) =  1.849349508
VALUE(116,1) =  1.608915474
VALUE(117,1) =  1.500471577
VALUE(118,1) =  1.766556967
VALUE(119,1) =  2.367809689
VALUE(120,1) =  4.841717173

! Warning and error tolerances
  *DO,II,1,NComp
    TOLER(II,1) = VALUE(II,1)*0.05
    TOLER(II,2) = VALUE(II,1)*0.05
  *ENDDO
! Known exceptions
  I=  2 $ TOLER(  I,1) = VALUE(I,1)*0.40  $  TOLER(  I,2) = VALUE(I,1)*0.40
  I=  3 $ TOLER(  I,1) = VALUE(I,1)*0.40  $  TOLER(  I,2) = VALUE(I,1)*0.40
  I=  7 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I=  8 $ TOLER(  I,1) = VALUE(I,1)*0.30  $  TOLER(  I,2) = VALUE(I,1)*0.30
  I=  9 $ TOLER(  I,1) = VALUE(I,1)*0.40  $  TOLER(  I,2) = VALUE(I,1)*0.40
  I= 10 $ TOLER(  I,1) = VALUE(I,1)*0.40  $  TOLER(  I,2) = VALUE(I,1)*0.40
  I= 12 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 13 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 14 $ TOLER(  I,1) = VALUE(I,1)*0.30  $  TOLER(  I,2) = VALUE(I,1)*0.30
  I= 15 $ TOLER(  I,1) = VALUE(I,1)*0.30  $  TOLER(  I,2) = VALUE(I,1)*0.30
  I= 16 $ TOLER(  I,1) = VALUE(I,1)*0.20  $  TOLER(  I,2) = VALUE(I,1)*0.20
  I= 17 $ TOLER(  I,1) = VALUE(I,1)*0.20  $  TOLER(  I,2) = VALUE(I,1)*0.20
  I= 19 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 20 $ TOLER(  I,1) = VALUE(I,1)*0.20  $  TOLER(  I,2) = VALUE(I,1)*0.20
  I= 25 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 32 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 33 $ TOLER(  I,1) = VALUE(I,1)*0.60  $  TOLER(  I,2) = VALUE(I,1)*0.60
  I= 38 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 39 $ TOLER(  I,1) = VALUE(I,1)*0.20  $  TOLER(  I,2) = VALUE(I,1)*0.20
  I= 40 $ TOLER(  I,1) = VALUE(I,1)*0.20  $  TOLER(  I,2) = VALUE(I,1)*0.20
  I= 44 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 45 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 46 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 47 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 50 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 63 $ TOLER(  I,1) = 100  $  TOLER(  I,2) = 100 ! Ignored
  I= 69 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 76 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 92 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 93 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15
  I= 99 $ TOLER(  I,1) = VALUE(I,1)*0.15  $  TOLER(  I,2) = VALUE(I,1)*0.15

!--------------------------------------------------------------------------------------
! 12. Results comparison
!--------------------------------------------------------------------------------------
  COMPARA.MAC
