/[lmdze]/trunk/filtrez/inifgn.f
ViewVC logotype

Diff of /trunk/filtrez/inifgn.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 151 by guez, Tue Jun 23 15:14:20 2015 UTC revision 152 by guez, Tue Jun 23 18:18:12 2015 UTC
# Line 23  contains Line 23  contains
23      use acc_m, only: acc      use acc_m, only: acc
24      USE dimens_m, ONLY: iim      USE dimens_m, ONLY: iim
25      USE dynetat0_m, ONLY: xprimu, xprimv      USE dynetat0_m, ONLY: xprimu, xprimv
     use nr_util, only: pi  
26      use numer_rec_95, only: jacobi, eigsrt      use numer_rec_95, only: jacobi, eigsrt
27    
28      real, intent(out):: dv(:) ! (iim) eigenvalues sorted in descending order      real, intent(out):: dv(:) ! (iim) eigenvalues sorted in descending order
29    
30      ! Local:      ! Local:
31      REAL vec(iim, iim), vec1(iim, iim)      REAL, dimension(iim, iim):: a, b, c
32      REAL du(iim)      REAL du(iim)
33      INTEGER i, j, k, nrot      INTEGER i
34    
35      !----------------------------------------------------------------      !----------------------------------------------------------------
36    
# Line 42  contains Line 41  contains
41      unsddu = 1. / sddu      unsddu = 1. / sddu
42      unsddv = 1. / sddv      unsddv = 1. / sddv
43    
44      DO j = 1, iim      b = 0.
45         DO i = 1, iim      b(iim, 1) = 1. / (sddu(iim) * sddv(1))
46            vec(i, j) = 0.      forall (i = 1:iim) b(i, i) = - 1./ (sddu(i) * sddv(i))
47            vec1(i, j) = 0.      forall (i = 1:iim - 1) b(i, i + 1) = 1. / (sddu(i) * sddv(i + 1))
           eignfnv(i, j) = 0.  
           eignfnu(i, j) = 0.  
        END DO  
     END DO  
   
     eignfnv(1, 1) = - 1.  
     eignfnv(iim, 1) = 1.  
     DO i = 1, iim - 1  
        eignfnv(i+1, i+1) = - 1.  
        eignfnv(i, i+1) = 1.  
     END DO  
   
     DO j = 1, iim  
        DO i = 1, iim  
           eignfnv(i, j) = eignfnv(i, j) / (sddu(i) * sddv(j))  
        END DO  
     END DO  
   
     DO j = 1, iim  
        DO i = 1, iim  
           eignfnu(i, j) = - eignfnv(j, i)  
        END DO  
     END DO  
   
     DO j = 1, iim  
        DO i = 1, iim  
           vec(i, j) = 0.0  
           vec1(i, j) = 0.0  
           DO k = 1, iim  
              vec(i, j) = vec(i, j) + eignfnu(i, k) * eignfnv(k, j)  
              vec1(i, j) = vec1(i, j) + eignfnv(i, k) * eignfnu(k, j)  
           END DO  
        END DO  
     END DO  
48    
49      CALL jacobi(vec, dv, eignfnv, nrot)      c = - transpose(b)
50    
51        a = matmul(c, b)
52        CALL jacobi(a, dv, eignfnv)
53      CALL acc(eignfnv)      CALL acc(eignfnv)
54      CALL eigsrt(dv, eignfnv)      CALL eigsrt(dv, eignfnv)
55    
56      CALL jacobi(vec1, du, eignfnu, nrot)      a = matmul(b, c)
57        CALL jacobi(a, du, eignfnu)
58      CALL acc(eignfnu)      CALL acc(eignfnu)
59      CALL eigsrt(du, eignfnu)      CALL eigsrt(du, eignfnu)
60    

Legend:
Removed from v.151  
changed lines
  Added in v.152

  ViewVC Help
Powered by ViewVC 1.1.21