The TELEMAC-MASCARET system  trunk
sd_nntc.f
Go to the documentation of this file.
1 ! ******************
2  SUBROUTINE sd_nntc
3 ! ******************
4 !
5  &(n,r,c,il,jl,ijl,l,d,iu,ju,iju,u,z,b,tmp)
6 !
7 !***********************************************************************
8 ! BIEF V6P3 30/06/2013
9 !***********************************************************************
10 !
11 !brief NUMERIC SOLUTION OF THE TRANSPOSE OF A SPARSE NONSYMMETRIC SYSTEM
12 !+ OF LINEAR EQUATIONS GIVEN LU-FACTORIZATION (COMPRESSED POINTER
13 !+ STORAGE)
14 !+
15 !code
16 !+ INPUT VARIABLES.. N, R, C, IL, JL, IJL, L, D, IU, JU, IJU, U, B
17 !+ OUTPUT VARIABLES.. Z
18 !+
19 !+ PARAMETERS USED INTERNALLY..
20 !+ FIA \ TMP - TEMPORARY VECTOR WHICH GETS RESULT OF SOLVING UT Y = B
21 !+ \ SIZE = N.
22 !
23 !note IMPORTANT : INSPIRED FROM PACKAGE CMLIB3 - YALE UNIVERSITE-YSMP
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,MU,J,I,ML
58  DOUBLE PRECISION TMPK,SOMME
59 !
60 ! ****** SET TMP TO REORDERED B ************************************
61  DO k=1,n
62  tmp(k) = b(c(k))
63  ENDDO
64 ! ****** SOLVE UT Y = B BY FORWARD SUBSTITUTION *******************
65  DO k=1,n
66  jmin = iu(k)
67  jmax = iu(k+1) - 1
68  tmpk = -tmp(k)
69  IF (jmin .GT. jmax) cycle
70  mu = iju(k) - jmin
71  DO j=jmin,jmax
72  tmp(ju(mu+j)) = tmp(ju(mu+j)) + tmpk * u(j)
73  ENDDO
74  ENDDO
75 ! ****** SOLVE LT X = Y BY BACK SUBSTITUTION **********************
76  k = n
77  DO i=1,n
78  somme = -tmp(k)
79  jmin = il(k)
80  jmax = il(k+1) - 1
81  IF (jmin .LE. jmax) THEN
82  ml = ijl(k) - jmin
83  DO j=jmin,jmax
84  somme = somme + l(j) * tmp(jl(ml+j))
85  ENDDO ! J
86  ENDIF
87  tmp(k) = -somme * d(k)
88  z(r(k)) = tmp(k)
89  k = k - 1
90  ENDDO ! I
91  RETURN
92  END
subroutine sd_nntc(N, R, C, IL, JL, IJL, L, D, IU, JU, IJU, U, Z, B, TMP)
Definition: sd_nntc.f:7