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

Diff of /trunk/filtrez/inifgn.f

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

trunk/filtrez/inifgn.f revision 113 by guez, Thu Sep 18 19:56:46 2014 UTC trunk/Sources/filtrez/inifgn.f revision 152 by guez, Tue Jun 23 18:18:12 2015 UTC
# Line 1  Line 1 
1  module inifgn_m  module inifgn_m
2    
3      use dimens_m, only: iim
4    
5    IMPLICIT NONE    IMPLICIT NONE
6    
7      private iim
8    
9      real sddu(iim), sddv(iim) ! SQRT(dx / di)
10      real unsddu(iim), unsddv(iim)
11    
12      real eignfnu(iim, iim), eignfnv(iim, iim)
13      ! eigenfunctions of the discrete laplacian
14    
15  contains  contains
16    
17    SUBROUTINE inifgn(dv)    SUBROUTINE inifgn(dv)
18    
19      ! From LMDZ4/libf/filtrez/inifgn.F, v 1.1.1.1 2004/05/19 12:53:09      ! From LMDZ4/libf/filtrez/inifgn.F, v 1.1.1.1 2004/05/19 12:53:09
20    
21      ! H.Upadyaya, O.Sharma      ! H. Upadyaya, O. Sharma
22    
23        use acc_m, only: acc
24      USE dimens_m, ONLY: iim      USE dimens_m, ONLY: iim
25      USE comgeom, ONLY: xprimu, xprimv      USE dynetat0_m, ONLY: xprimu, xprimv
26      USE coefils, ONLY: eignfnu, eignfnv, sddu, sddv, unsddu, unsddv      use numer_rec_95, only: jacobi, eigsrt
27    
28      real dv(iim)      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
     REAL dlonu(iim), dlonv(iim)  
32      REAL du(iim)      REAL du(iim)
33      real d(iim)      INTEGER i
     REAL pi  
     INTEGER i, j, k, imm1, nrot  
   
     EXTERNAL acc, jacobi  
34    
35      !----------------------------------------------------------------      !----------------------------------------------------------------
36    
37      imm1 = iim - 1      print *, "Call sequence information: inifgn"
     pi = 2.*asin(1.)  
38    
39      DO i = 1, iim      sddv = sqrt(xprimv(:iim))
40         dlonu(i) = xprimu(i)      sddu = sqrt(xprimu(:iim))
41         dlonv(i) = xprimv(i)      unsddu = 1. / sddu
42      END DO      unsddv = 1. / sddv
43    
44      DO i = 1, iim      b = 0.
45         sddv(i) = sqrt(dlonv(i))      b(iim, 1) = 1. / (sddu(iim) * sddv(1))
46         sddu(i) = sqrt(dlonu(i))      forall (i = 1:iim) b(i, i) = - 1./ (sddu(i) * sddv(i))
47         unsddu(i) = 1./sddu(i)      forall (i = 1:iim - 1) b(i, i + 1) = 1. / (sddu(i) * sddv(i + 1))
48         unsddv(i) = 1./sddv(i)  
49      END DO      c = - transpose(b)
50    
51      DO j = 1, iim      a = matmul(c, b)
52         DO i = 1, iim      CALL jacobi(a, dv, eignfnv)
53            vec(i, j) = 0.      CALL acc(eignfnv)
54            vec1(i, j) = 0.      CALL eigsrt(dv, eignfnv)
55            eignfnv(i, j) = 0.  
56            eignfnu(i, j) = 0.      a = matmul(b, c)
57         END DO      CALL jacobi(a, du, eignfnu)
58      END DO      CALL acc(eignfnu)
59        CALL eigsrt(du, eignfnu)
     eignfnv(1, 1) = -1.  
     eignfnv(iim, 1) = 1.  
     DO i = 1, imm1  
        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  
   
     CALL jacobi(vec, iim, iim, dv, eignfnv, nrot)  
     CALL acc(eignfnv, d, iim)  
     CALL eigen_sort(dv, eignfnv, iim, iim)  
   
     CALL jacobi(vec1, iim, iim, du, eignfnu, nrot)  
     CALL acc(eignfnu, d, iim)  
     CALL eigen_sort(du, eignfnu, iim, iim)  
60    
61    END SUBROUTINE inifgn    END SUBROUTINE inifgn
62    

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

  ViewVC Help
Powered by ViewVC 1.1.21