The TELEMAC-MASCARET system  trunk
sd_fabcad.f
Go to the documentation of this file.
1 ! ********************
2  SUBROUTINE sd_fabcad
3 ! ********************
4 !
5  &(npblk,nsegblk,in,ip,isegip,
6  & indtri,istri,inx,ipx,actri,xa1,xa2,da,ac)
7 !
8 !***********************************************************************
9 ! BIEF V6P2 21/07/2011
10 !***********************************************************************
11 !
12 !brief BUILDS A COMPACT STORAGE
13 !+ (INX,IPX) STRUCTURE WITH THE DIAGONAL
14 !+ VIA (IN,IP) = (XADJ, ADJNCY) OF EXTRADIAGONAL TERMS
15 !+ AND THE SEGMENT STORAGE (ISEGIP, XA, DA).
16 !
17 !note IMPORTANT : INSPIRED FROM PACKAGE CMLIB3 - YALE UNIVERSITE-YSMP
18 !
19 !
20 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
21 !+ 13/07/2010
22 !+ V6P0
23 !+ Translation of French comments within the FORTRAN sources into
24 !+ English comments
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 21/08/2010
28 !+ V6P0
29 !+ Creation of DOXYGEN tags for automated documentation and
30 !+ cross-referencing of the FORTRAN sources
31 !
32 !history E. RAZAFINDRAKOTO (LNH)
33 !+ 21/11/11
34 !+ V6P1
35 !+
36 !
37 !history J-M HERVOUET (LNHE)
38 !+ 08/06/2012
39 !+ V6P2
40 !+ Dimensions and algorithm slightly changed.
41 !
42 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43 !| AC |<--|COMPACT STORED MATRIX WITH DIAGONAL
44 !| ACTRI |---|REAL WORKING STORAGE
45 !| DA |-->|MATRIX DIAGONAL COEFFICIENTS
46 !| (IN,IP) |-->|STRUCTURE WITHOUT THE DIAGONAL
47 !| INDTRI |---|INTEGER WORKING STORAGE
48 !| (INX,IPX) |<--|STRUCTURE WITH THE DIAGONAL
49 !| ISEGIP |-->|INVERSE TABLE OF CONNECTIVITY: POINT ---> SEGMENT
50 !| ISTRI |---|INTEGER WORKING STORAGE
51 !| NPBLK |-->| SIZE OF MATRIX DIAGONAL
52 !| NSEGBLK |-->| NUMBER OF SEGMENTS IN ORIGINAL MATRIX
53 !| XA1 |-->| OFF-DIAGONAL TERM OF MATRIX A
54 !| XA2 |-->| OFF-DIAGONAL TERM OF MATRIX A
55 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
56 !
57  USE bief, ex_sd_fabcad => sd_fabcad
58 !
60  IMPLICIT NONE
61 !
62 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
63 !
64  INTEGER, INTENT(IN) :: NPBLK,NSEGBLK
65  INTEGER, INTENT(IN) :: IN(npblk+1),IP(nsegblk*2)
66  INTEGER, INTENT(IN) :: ISEGIP(nsegblk*2)
67  INTEGER, INTENT(INOUT) :: INDTRI(npblk)
68  INTEGER, INTENT(INOUT) :: ISTRI(npblk)
69  INTEGER, INTENT(INOUT) :: INX(npblk+1)
70  INTEGER, INTENT(INOUT) :: IPX(nsegblk*2+npblk)
71  DOUBLE PRECISION, INTENT(INOUT) :: ACTRI(npblk)
72  DOUBLE PRECISION, INTENT(IN) :: XA1(nsegblk),XA2(nsegblk)
73  DOUBLE PRECISION, INTENT(IN) :: DA(npblk)
74  DOUBLE PRECISION, INTENT(INOUT) :: AC(nsegblk*2+npblk)
75 !
76 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
77 !
78  INTEGER I,J,J1,J2,JN,ISEG,ND
79 !
80 !-----------------------------------------------------------------------
81 !
82 !---> COMPACT STORAGE WITH THE DIAGONAL ADDED : (XADJ, ADJNCY) = (INX,IPX)
83 !
84  DO i = 1, npblk+1
85  inx(i) = in(i)+i-1
86  ENDDO
87 !
88 ! J2 WILL BE THE ADDRESS IN AC
89  j2=0
90  DO i = 1, npblk
91  ipx(inx(i)) = i
92 ! DIAGONAL AS FIRST COEFFICIENT OF THE LIST
93  j2=j2+1
94 ! NOTE: HERE J2=INX(I)
95  ac(inx(i)) = da(i)
96 ! LOOP ON MATRIX COEFFICIENTS OF POINT I
97 ! EXCLUDING DIAGONAL TERMS AT ADDRESS INX(I)
98  DO j1 = inx(i)+1, inx(i+1)-1
99 ! BACK TO ADDRESS WITHOUT THE DIAGONAL
100  jn = j1-i
101  j = ip(jn)
102  j2=j2+1
103  iseg = isegip(jn)
104  ipx(j2) = j
105  IF(iseg.LT.0) THEN
106  ac(j2) = xa1(-iseg)
107  ELSEIF(iseg.GT.0) THEN
108  ac(j2) = xa2(iseg)
109  ENDIF
110  ENDDO
111  ENDDO
112  DO i = 1, npblk
113  nd = inx(i+1)-inx(i)
114  DO j = 1,nd
115  istri(j) = ipx(inx(i)+j-1)
116  actri(j) = ac(inx(i)+j-1)
117  ENDDO
118  CALL sd_strtri(istri,nd,indtri)
119  DO j = 1,nd
120  j1 = indtri(j)
121  ipx(inx(i)+j-1) = istri(j1)
122  ac(inx(i)+j-1) = actri(j1)
123  ENDDO
124  ENDDO
125 !
126 !-----------------------------------------------------------------------
127 !
128  RETURN
129  END
subroutine sd_strtri(IS, N, IND)
Definition: sd_strtri.f:7
subroutine sd_fabcad(NPBLK, NSEGBLK, IN, IP, ISEGIP, INDTRI, ISTRI, INX, IPX, ACTRI, XA1, XA2, DA, AC)
Definition: sd_fabcad.f:8
Definition: bief.f:3