The TELEMAC-MASCARET system  trunk
sd_fabsg4.f
Go to the documentation of this file.
1 ! ********************
2  SUBROUTINE sd_fabsg4
3 ! ********************
4 !
5  &(npoin,nseg,dab1,dab2,dab3,dab4,xab1,xab2,xab3,xab4,
6  & npblk,nsegblk,da,xa,typext1,typext2,typext3,typext4)
7 !
8 !***********************************************************************
9 ! BIEF V6P2 08/2012
10 !***********************************************************************
11 !
12 !brief TRANSFORMS A 4-MATRIX SYSTEM INTO A SINGLE BLOCK.
13 !
14 !history E. RAZAFINDRAKOTO (LNHE)
15 !+ 20/11/06
16 !+ V5P7
17 !+
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !
31 !history J. PARISI (LNHE)
32 !+ 09/08/2012
33 !+ V6P2
34 !+ Considers the matrix types (symmetric or not) for each block.
35 !
36 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 !| DA |<--| RESULTING MATRIX DIAGONAL
38 !| DAB1 |-->| MATRIX DIAGONAL IN THE ORIGINAL SYSTEM
39 !| DAB2 |-->| MATRIX DIAGONAL IN THE ORIGINAL SYSTEM
40 !| DAB3 |-->| MATRIX DIAGONAL IN THE ORIGINAL SYSTEM
41 !| DAB4 |-->| MATRIX DIAGONAL IN THE ORIGINAL SYSTEM
42 !| NPBLK |-->| RANK OF FINAL BLOCK MATRIX
43 !| NPOIN |-->| NUMBER OF POINTS
44 !| NSEG |-->| NUMBER OF SEGMENTS
45 !| NSEGBLK |-->| NUMBER OF SEGMENTS IN FINAL BLOCK
46 !| Q |-->| NON-SYMETRIC MATRIX
47 !| S |-->| SYMETRIC MATRIX
48 !| TYPEXT1 |-->| TYPE OF MATRIX STORAGE : BLOCK 1
49 !| TYPEXT2 |-->| TYPE OF MATRIX STORAGE : BLOCK 2
50 !| TYPEXT3 |-->| TYPE OF MATRIX STORAGE : BLOCK 3
51 !| TYPEXT4 |-->| TYPE OF MATRIX STORAGE : BLOCK 4
52 !| XA |<--| RESULTING OFF-DIAGONAL TERMS OF MATRIX
53 !| XAB1 |-->| OFF-DIAGONAL TERMS IN ORIGINAL SYSTEM
54 !| XAB2 |-->| OFF-DIAGONAL TERMS IN ORIGINAL SYSTEM
55 !| XAB3 |-->| OFF-DIAGONAL TERMS IN ORIGINAL SYSTEM
56 !| XAB4 |-->| OFF-DIAGONAL TERMS IN ORIGINAL SYSTEM
57 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58 !
59 ! USE BIEF, EX_SD_FABSG4 => SD_FABSG4
60 !
62  IMPLICIT NONE
63 !
64 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 !
66  INTEGER, INTENT(IN) :: NSEGBLK,NPBLK,NSEG,NPOIN
67  DOUBLE PRECISION, INTENT(IN) :: XAB1(*),XAB2(*)
68  DOUBLE PRECISION, INTENT(IN) :: XAB3(*),XAB4(*)
69  DOUBLE PRECISION, INTENT(IN) :: DAB1(npoin),DAB2(npoin)
70  DOUBLE PRECISION, INTENT(IN) :: DAB3(npoin),DAB4(npoin)
71  DOUBLE PRECISION, INTENT(INOUT) :: XA(2*nsegblk),DA(npblk)
72  CHARACTER(LEN=1), INTENT(IN) :: TYPEXT1,TYPEXT2
73  CHARACTER(LEN=1), INTENT(IN) :: TYPEXT3,TYPEXT4
74 !
75 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
76 !
77  INTEGER I,ISEG,JSEG
78 !
79 !----------------------------------------------
80 ! INFO : NPBLK = NPOIN*NBLOC
81 ! NSEGBLK = NSEG*4 + 2*NPOIN
82 !----------------------------------------------
83 !
84 !
85 !
86 !-------------------
87 ! 1. BLOCK DIAGONAL
88 !-------------------
89 !
90  DO i=1,npoin
91  da(i) = dab1(i)
92  da(i+npoin) = dab4(i)
93  ENDDO
94 !
95 !---------------------------
96 ! 2. EXTRADIAGONAL TERMS
97 !---------------------------
98 !
99 !
100 ! BLOCK 1
101 ! ------
102 !
103  jseg=0
104 !
105  IF(typext1.EQ.'S') THEN
106 !
107  DO iseg=1,nseg
108  jseg=jseg+1
109  xa(jseg) =xab1(iseg)
110  xa(jseg+nsegblk)=xab1(iseg)
111  ENDDO
112 !
113  ELSEIF(typext1.EQ.'Q') THEN
114 !
115  DO iseg=1,nseg
116  jseg=jseg+1
117  xa(jseg) =xab1(iseg)
118  xa(jseg+nsegblk)=xab1(iseg+nseg)
119  ENDDO
120 
121  ELSE
122 !
123  WRITE(lu,*) 'SD_FABSG4: UNEXPECTED CASE'
124  WRITE(lu,*) 'TYPEXT1=',typext1
125  CALL plante(1)
126  stop
127 !
128  ENDIF
129 !
130 ! BLOCKS 2 AND 3 (EXTRA-DIAG)
131 ! ------------------------
132  DO i=1,npoin
133  jseg=jseg+1
134  xa(jseg) =dab2(i)
135  xa(jseg+nsegblk)=dab3(i)
136  ENDDO
137 !
138  IF(typext2.EQ.'S'.AND.typext3.EQ.'S') THEN
139 !
140  DO iseg=1,nseg
141  jseg=jseg+1
142  xa(jseg) =xab2(iseg)
143  xa(jseg+nsegblk)=xab3(iseg)
144  jseg=jseg+1
145  xa(jseg) =xab2(iseg)
146  xa(jseg+nsegblk)=xab3(iseg)
147  ENDDO
148 !
149  ELSEIF(typext2.EQ.'Q'.AND.typext3.EQ.'Q') THEN
150 !
151  DO iseg=1,nseg
152  jseg=jseg+1
153  xa(jseg) =xab2(iseg)
154  xa(jseg+nsegblk)=xab3(iseg+nseg)
155  jseg=jseg+1
156  xa(jseg) =xab2(iseg+nseg)
157  xa(jseg+nsegblk)=xab3(iseg)
158  ENDDO
159 !
160  ELSE
161 !
162  WRITE(lu,*) 'SD_FABSG4: UNEXPECTED CASE'
163  WRITE(lu,*) 'TYPEXT2=',typext2,' TYPEXT3=',typext3
164  CALL plante(1)
165  stop
166 !
167  ENDIF
168 !
169 ! BLOCK 4 (EXTRA)
170 ! --------------
171 !
172  IF(typext4.EQ.'S') THEN
173 !
174  DO iseg=1,nseg
175  jseg=jseg+1
176  xa(jseg) =xab4(iseg)
177  xa(jseg+nsegblk)=xab4(iseg)
178  ENDDO
179 !
180  ELSEIF(typext4.EQ.'Q') THEN
181 !
182  DO iseg=1,nseg
183  jseg=jseg+1
184  xa(jseg) =xab4(iseg)
185  xa(jseg+nsegblk)=xab4(iseg+nseg)
186  ENDDO
187 !
188  ELSE
189 !
190  WRITE(lu,*) 'SD_FABSG4: UNEXPECTED CASE'
191  WRITE(lu,*) 'TYPEXT4=',typext4
192  CALL plante(1)
193  stop
194 !
195  ENDIF
196 !
197 !-----------------------------------------------------------------------
198 !
199  RETURN
200  END
subroutine sd_fabsg4(NPOIN, NSEG, DAB1, DAB2, DAB3, DAB4, XAB1, XAB2, XAB3, XAB4, NPBLK, NSEGBLK, DA, XA, TYPEXT1, TYPEXT2, TYPEXT3, TYPEXT4)
Definition: sd_fabsg4.f:8