The TELEMAC-MASCARET system  trunk
sd_nnsc.f
Go to the documentation of this file.
1 ! ******************
2  SUBROUTINE sd_nnsc
3 ! ******************
4 !
5  &(n,r,c,il,jl,ijl,l,d,iu,ju,iju,u,z,b,tmp)
6 !
7 !***********************************************************************
8 ! BIEF V6P3 21/08/2010
9 !***********************************************************************
10 !
11 !brief NUMERICAL SOLUTION OF SPARSE NONSYMMETRIC SYSTEM OF LINEAR
12 !+ EQUATIONS GIVEN LDU-FACTORIZATION (COMPRESSED POINTER STORAGE)
13 !+
14 !+
15 !+ INPUT VARIABLES.. N, R, C, IL, JL, IJL, L, D, IU, JU, IJU, U, B
16 !+ OUTPUT VARIABLES.. Z
17 !+
18 !+ PARAMETERS USED INTERNALLY..
19 !+ FIA \ TMP - TEMPORARY VECTOR WHICH GETS RESULT OF SOLVING LY = B.
20 !+ \ SIZE = N.
21 !+
22 !note IMPORTANT : INSPIRED FROM PACKAGE CMLIB3 - YALE UNIVERSITE-YSMP
23 !
24 ! DON'T HESITATE TO CHANGE IN/OUTPUT VARIABLES COMMENTS
25 ! FOR CLARITY
26 !
27 !history C. PEYRARD (LNHE)
28 !+ 30/06/13
29 !+ V6P3
30 !+
31 !
32 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33 !| B |-->| RIGHT-HAND SIDE B ;
34 !| C |-->| ORDERING OF THE COLUMNS OF MATRIX
35 !| D |-->| DIAGONAL FACTORIZED OF MATRIX
36 !| IL, JL |-->| STRUCTURE OF LOWER FACTORISED TRIANGULAR MATRIX
37 !| IU, JU |-->| STRUCTURE OF UPPER FACTORISED TRIANGULAR MATRIX
38 !| IJU,IJL |-->| USED TO COMPRESS STORAGE OF JU and JL
39 !| L |-->| LOWER FACTORIZED TRIANGULAR MATRIX
40 !| N |-->| RANK OF MATRIX
41 !| R |-->| ORDERING OF THE ROWS OF MATRIX
42 !| TMP |-->| REAL ONE-DIMENSIONAL WORK ARRAY
43 !| U |-->| UPPER FACTORIZED TRIANGULAR MATRIX
44 !| Z |<--| SOLUTION X
45 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46 !
48  IMPLICIT NONE
49 !
50 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
51 !
52  INTEGER R(*), C(*), IL(*), JL(*), IJL(*), IU(*), JU(*), IJU(*),N
53  DOUBLE PRECISION L(*), D(*), U(*), B(*), Z(*), TMP(*)
54 !
55 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
56 !
57  INTEGER K,JMIN,JMAX,ML,J,MU,I
58  DOUBLE PRECISION TMPK,SOMME
59 !
60 !-----------------------------------------------------------------------
61 !
62 ! SET TMP TO REORDERED B
63 !
64  DO k=1,n
65  tmp(k) = b(r(k))
66  ENDDO
67 !
68 ! SOLVE LY = B BY FORWARD SUBSTITUTION
69 !
70  DO k=1,n
71  jmin = il(k)
72  jmax = il(k+1) - 1
73  tmpk = -d(k) * tmp(k)
74  tmp(k) = -tmpk
75  IF (jmin .GT. jmax) cycle
76  ml = ijl(k) - jmin
77  DO j=jmin,jmax
78  tmp(jl(ml+j)) = tmp(jl(ml+j)) + tmpk * l(j)
79  ENDDO
80  ENDDO ! K
81 !
82 ! SOLVE UX = Y BY BACK SUBSTITUTION
83 !
84  k = n
85  DO i=1,n
86  somme = -tmp(k)
87  jmin = iu(k)
88  jmax = iu(k+1) - 1
89  IF (jmin .GT. jmax) GO TO 5
90  mu = iju(k) - jmin
91  DO j=jmin,jmax
92  somme = somme + u(j) * tmp(ju(mu+j))
93  ENDDO
94  5 tmp(k) = -somme
95  z(c(k)) = -somme
96  k = k - 1
97  ENDDO
98 !
99 !-----------------------------------------------------------------------
100 !
101  RETURN
102  END
subroutine sd_nnsc(N, R, C, IL, JL, IJL, L, D, IU, JU, IJU, U, Z, B, TMP)
Definition: sd_nnsc.f:7