The TELEMAC-MASCARET system  trunk
sd_strssd.f
Go to the documentation of this file.
1 ! ********************
2  SUBROUTINE sd_strssd
3 ! ********************
4 !
5  &(npblk,nsegblk,gloseg1,gloseg2,in,ip,isegip,iw)
6 !
7 !***********************************************************************
8 ! BIEF V6P2 21/08/2010
9 !***********************************************************************
10 !
11 !brief BUILDS COMPACT STORAGE
12 !+ (IN,IP) = (XADJ, ADJNCY)OF EXTRADIAGONAL TERMS
13 !+ VIA SEGMENT STORAGE.
14 !
15 !warning NSEG AND IW ARE THE SAME ARRAY IN THE MEMORY
16 !
17 !history E.RAZAFINDRAKOTO (LNH)
18 !+ 18/02/08
19 !+ V5P9
20 !+
21 !
22 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
23 !+ 13/07/2010
24 !+ V6P0
25 !+ Translation of French comments within the FORTRAN sources into
26 !+ English comments
27 !
28 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
29 !+ 21/08/2010
30 !+ V6P0
31 !+ Creation of DOXYGEN tags for automated documentation and
32 !+ cross-referencing of the FORTRAN sources
33 !
34 !history J-M HERVOUET (LNHE)
35 !+ 08/06/2012
36 !+ V6P2
37 !+ Dimensions changed in declarations and allocation.
38 !
39 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40 !| GLOSEG1 |-->| FIRST POINT OF SEGMENTS
41 !| GLOSEG2 |-->| SECOND POINT OF SEGMENTS
42 !| IN |<--| (IN, IP) COMPACT STORAGE OF EXTRADIAGONAL TERMS
43 !| IP |<--| (IN, IP) COMPACT STORAGE OF EXTRADIAGONAL TERMS
44 !| ISEGIP |<--| INVERSE TABLE OF CONNECTIVITY: POINT-->SEGMENT
45 !| IW |<--| NUMBER OF NEIGHBOURS OF POINTS
46 !| NPBLK |-->| NUMBER OF POINTS
47 !| NSEGBLK |-->| NUMBER OF SEGMENTS
48 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49 !
50  USE bief,ex_sd_strssd => sd_strssd
51 !
53  IMPLICIT NONE
54 !
55 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
56 !
57  INTEGER, INTENT(IN) :: NSEGBLK,NPBLK
58  INTEGER, INTENT(IN) :: GLOSEG1(nsegblk),GLOSEG2(nsegblk)
59  INTEGER, INTENT(INOUT) :: IN(npblk+1),IP(nsegblk*2)
60  INTEGER, INTENT(INOUT) :: ISEGIP(nsegblk*2)
61  INTEGER, INTENT(INOUT) :: IW(npblk)
62 !
63 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 !
65  INTEGER I,J1,J2,ISEG
66 !
67 ! -----------------------
68 !
69 !---> DEGREE OF A POINT: NUMBER OF NEIGHBOURS
70 !
71  DO i=1,npblk
72  iw(i)=0
73  ENDDO
74 !
75 ! IW : NUMBER OF NEIGHBOURS FOR EACH POINT
76 !
77  DO iseg=1,nsegblk
78  j1 = gloseg1(iseg)
79  j2 = gloseg2(iseg)
80  iw(j1) = iw(j1) + 1
81  iw(j2) = iw(j2) + 1
82  ENDDO
83 !
84 !---> COMPACT STORAGE WITHOUT THE DIAGONAL: (XADJ,ADJNCY) = (IN,IP)
85 !
86 ! COEFFICIENTS FOR POINT I: FROM IN(I) TO IN(I+1)-1
87 !
88  in(1)=1
89  DO i=1,npblk
90  in(i+1)=in(i)+iw(i)
91  ENDDO
92 !
93 ! IW IS NO LONGER THE NUMBER OF NEIGHBOURS
94 !
95  DO i=1,npblk
96  iw(i)=in(i)
97  ENDDO
98 !
99  DO iseg=1,nsegblk
100  j1 = gloseg1(iseg)
101  j2 = gloseg2(iseg)
102 !
103 !--> TABLE OF CONNECTIVITY: SEGMENT ---> POINT
104 ! WILL SAY TO WHAT POINT A COEFFICIENT REFERS TO
105 !
106  ip(iw(j1))=j2
107  ip(iw(j2))=j1
108 !
109 !--> INVERSE TABLE OF CONNECTIVITY: POINT ---> SEGMENT
110 ! WILL SAY TO WHAT SEGMENT A COEFFICIENT REFERS TO
111 !
112 ! NOTATION FOR TRIANGULAR SUPERIOR COEFF.
113  isegip(iw(j1))=-iseg
114 ! NOTATION FOR TRIANGULAR INFERIOR COEFF.
115  isegip(iw(j2))= iseg
116 !
117  iw(j1) = iw(j1) + 1
118  iw(j2) = iw(j2) + 1
119  ENDDO
120 !
121 !-----------------------------------------------------------------------
122 !
123  RETURN
124  END
subroutine sd_strssd(NPBLK, NSEGBLK, GLOSEG1, GLOSEG2, IN, IP, ISEGIP, IW)
Definition: sd_strssd.f:7
Definition: bief.f:3