The TELEMAC-MASCARET system  trunk
invmtx.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE invmtx
3 ! *****************
4 !
5  &(am,bm,np)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief INVERTS A MATRIX OF NP BY NP.
12 !+
13 !+ BM IS THE INVERSION OF AM.
14 !
15 !note THIS SUBROUTINE CALLS LUDCMP AND LUBKSB, WHICH WERE
16 !+ COPIED FROM "NUMERIC RECIPES" -- A WELL-KNOWN BOOK.
17 !
18 !history CHUN WANG
19 !+ 28/07/2006
20 !+ V5P7
21 !+
22 !
23 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
24 !+ 13/07/2010
25 !+ V6P0
26 !+ Translation of French comments within the FORTRAN sources into
27 !+ English comments
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 21/08/2010
31 !+ V6P0
32 !+ Creation of DOXYGEN tags for automated documentation and
33 !+ cross-referencing of the FORTRAN sources
34 !
35 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36 !| AM |-->| MATRIX TO BE INVERTED
37 !| BM |<--| INVERTED MATRIX
38 !| NP |-->| RANK OF MATRICES AM AND BM.
39 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40 !
42  IMPLICIT NONE
43 !
44 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
45 !
46  INTEGER, INTENT(IN) :: NP
47  DOUBLE PRECISION, INTENT(INOUT) :: AM(np,np),BM(np,np)
48 !
49 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
50 !
51  INTEGER INDX(500),N,I,J
52 !
53 !-----------------------------------------------------------------------
54 !
55  IF(np.GT.500) THEN
56  WRITE(lu,*) 'NP MUST BE LESS THAN 500 IN INVMTX'
57  CALL plante(1)
58  stop
59  ENDIF
60 !
61  n = np
62  DO i=1,n !SET UP IDENTITY MATRIX
63  DO j=1,n
64  bm(i,j)=0.d0
65  ENDDO
66  bm(i,i)=1.d0
67  ENDDO
68 !
69 ! DECOMPOSES THE MATRIX JUST ONCE
70 !
71  CALL ludcmp(am,n,np,indx)
72 !
73 ! FINDS INVERSE BY COLUMNS
74 !
75  DO j=1,n
76  CALL lubksb(am,n,np,indx,bm(1,j))
77  ENDDO
78 !
79 !-----------------------------------------------------------------------
80 !
81  RETURN
82  END
subroutine invmtx(AM, BM, NP)
Definition: invmtx.f:7
subroutine ludcmp(A, N, NP, INDX)
Definition: ludcmp.f:7
subroutine lubksb(A, N, NP, INDX, B)
Definition: lubksb.f:7