SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
inverse_matrix.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 SUBROUTINE inverse_matrix(N,A,P)
6 !--------------------------------------------------------
7 !
8 ! Explicit inversed matrix after Cholesky decomposition
9 !
10 !--------------------------------------------------------
11  USE yomhook ,ONLY : lhook, dr_hook
12  USE parkind1 ,ONLY : jprb
13 !
14  IMPLICIT NONE
15  INTEGER, INTENT(IN) :: n
16  REAL, DIMENSION (N,N), INTENT(INOUT) :: a
17  REAL, DIMENSION (N), INTENT(IN) :: p
18  REAL zsum
19  INTEGER :: i, j, k
20  REAL(KIND=JPRB) :: zhook_handle
21 
22  IF (lhook) CALL dr_hook('INVERSE_MATRIX',0,zhook_handle)
23  DO i=1,n
24  a(i,i)=1./p(i)
25  DO j=i+1,n
26  zsum = 0.
27  DO k=i,j-1
28  zsum = zsum - a(j,k)*a(k,i)
29  ENDDO
30  a(j,i) = zsum/p(j)
31  ENDDO
32  ENDDO
33  DO i=1,n
34  DO j=i+1,n
35  a(i,j) =0.0
36  ENDDO
37  ENDDO
38  a = matmul(transpose(a),a)
39 
40  IF (lhook) CALL dr_hook('INVERSE_MATRIX',1,zhook_handle)
41 
42 END SUBROUTINE inverse_matrix
subroutine inverse_matrix(N, A, P)