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

Diff of /trunk/Sources/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 143 by guez, Tue Jun 9 14:32:46 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)
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 nr_util, only: pi
27        use numer_rec_95, only: jacobi, eigsrt
28    
29      real dv(iim)      real, intent(out):: dv(:) ! (iim)
30    
31      ! Local:      ! Local:
32      REAL vec(iim, iim), vec1(iim, iim)      REAL vec(iim, iim), vec1(iim, iim)
     REAL dlonu(iim), dlonv(iim)  
33      REAL du(iim)      REAL du(iim)
34      real d(iim)      INTEGER i, j, k, nrot
     REAL pi  
     INTEGER i, j, k, imm1, nrot  
   
     EXTERNAL acc, jacobi  
35    
36      !----------------------------------------------------------------      !----------------------------------------------------------------
37    
38      imm1 = iim - 1      sddv = sqrt(xprimv(:iim))
39      pi = 2.*asin(1.)      sddu = sqrt(xprimu(:iim))
40        unsddu = 1. / sddu
41      DO i = 1, iim      unsddv = 1. / sddv
        dlonu(i) = xprimu(i)  
        dlonv(i) = xprimv(i)  
     END DO  
   
     DO i = 1, iim  
        sddv(i) = sqrt(dlonv(i))  
        sddu(i) = sqrt(dlonu(i))  
        unsddu(i) = 1./sddu(i)  
        unsddv(i) = 1./sddv(i)  
     END DO  
42    
43      DO j = 1, iim      DO j = 1, iim
44         DO i = 1, iim         DO i = 1, iim
# Line 52  contains Line 49  contains
49         END DO         END DO
50      END DO      END DO
51    
52      eignfnv(1, 1) = -1.      eignfnv(1, 1) = - 1.
53      eignfnv(iim, 1) = 1.      eignfnv(iim, 1) = 1.
54      DO i = 1, imm1      DO i = 1, iim - 1
55         eignfnv(i+1, i+1) = -1.         eignfnv(i+1, i+1) = - 1.
56         eignfnv(i, i+1) = 1.         eignfnv(i, i+1) = 1.
57      END DO      END DO
58    
59      DO j = 1, iim      DO j = 1, iim
60         DO i = 1, iim         DO i = 1, iim
61            eignfnv(i, j) = eignfnv(i, j)/(sddu(i)*sddv(j))            eignfnv(i, j) = eignfnv(i, j) / (sddu(i) * sddv(j))
62         END DO         END DO
63      END DO      END DO
64    
65      DO j = 1, iim      DO j = 1, iim
66         DO i = 1, iim         DO i = 1, iim
67            eignfnu(i, j) = -eignfnv(j, i)            eignfnu(i, j) = - eignfnv(j, i)
68         END DO         END DO
69      END DO      END DO
70    
# Line 74  contains Line 73  contains
73            vec(i, j) = 0.0            vec(i, j) = 0.0
74            vec1(i, j) = 0.0            vec1(i, j) = 0.0
75            DO k = 1, iim            DO k = 1, iim
76               vec(i, j) = vec(i, j) + eignfnu(i, k)*eignfnv(k, j)               vec(i, j) = vec(i, j) + eignfnu(i, k) * eignfnv(k, j)
77               vec1(i, j) = vec1(i, j) + eignfnv(i, k)*eignfnu(k, j)               vec1(i, j) = vec1(i, j) + eignfnv(i, k) * eignfnu(k, j)
78            END DO            END DO
79         END DO         END DO
80      END DO      END DO
81    
82      CALL jacobi(vec, iim, iim, dv, eignfnv, nrot)      CALL jacobi(vec, dv, eignfnv, nrot)
83      CALL acc(eignfnv, d, iim)      CALL acc(eignfnv)
84      CALL eigen_sort(dv, eignfnv, iim, iim)      CALL eigsrt(dv, eignfnv)
85    
86      CALL jacobi(vec1, iim, iim, du, eignfnu, nrot)      CALL jacobi(vec1, du, eignfnu, nrot)
87      CALL acc(eignfnu, d, iim)      CALL acc(eignfnu)
88      CALL eigen_sort(du, eignfnu, iim, iim)      CALL eigsrt(du, eignfnu)
89    
90    END SUBROUTINE inifgn    END SUBROUTINE inifgn
91    

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

  ViewVC Help
Powered by ViewVC 1.1.21