/[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 121 by guez, Wed Jan 28 16:10:02 2015 UTC trunk/Sources/filtrez/inifgn.f revision 140 by guez, Fri Jun 5 18:58:06 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      ! eignfn eigenfunctions of the discrete laplacian
14    
15  contains  contains
16    
17    SUBROUTINE inifgn(dv)    SUBROUTINE inifgn(dv)
# Line 11  contains Line 21  contains
21      ! H.Upadyaya, O.Sharma      ! H.Upadyaya, O.Sharma
22    
23      USE dimens_m, ONLY: iim      USE dimens_m, ONLY: iim
24      USE comgeom, ONLY: xprimu, xprimv      USE dynetat0_m, ONLY: xprimu, xprimv
25      USE coefils, ONLY: eignfnu, eignfnv, sddu, sddv, unsddu, unsddv      use nr_util, only: pi
26        use numer_rec_95, only: jacobi
27    
28      real dv(iim)      real, intent(out):: dv(iim)
29    
30      ! Local:      ! Local:
31      REAL vec(iim, iim), vec1(iim, iim)      REAL vec(iim, iim), vec1(iim, iim)
32      REAL du(iim)      REAL du(iim)
33      real d(iim)      real d(iim)
34      REAL pi      INTEGER i, j, k, nrot
     INTEGER i, j, k, imm1, nrot  
35    
36      EXTERNAL acc, jacobi      EXTERNAL acc
37    
38      !----------------------------------------------------------------      !----------------------------------------------------------------
39    
40      imm1 = iim - 1      sddv = sqrt(xprimv(:iim))
41      pi = 2.*asin(1.)      sddu = sqrt(xprimu(:iim))
42        unsddu = 1. / sddu
43      DO i = 1, iim      unsddv = 1. / sddv
        sddv(i) = sqrt(xprimv(i))  
        sddu(i) = sqrt(xprimu(i))  
        unsddu(i) = 1./sddu(i)  
        unsddv(i) = 1./sddv(i)  
     END DO  
44    
45      DO j = 1, iim      DO j = 1, iim
46         DO i = 1, iim         DO i = 1, iim
# Line 46  contains Line 51  contains
51         END DO         END DO
52      END DO      END DO
53    
54      eignfnv(1, 1) = -1.      eignfnv(1, 1) = - 1.
55      eignfnv(iim, 1) = 1.      eignfnv(iim, 1) = 1.
56      DO i = 1, imm1      DO i = 1, iim - 1
57         eignfnv(i+1, i+1) = -1.         eignfnv(i+1, i+1) = - 1.
58         eignfnv(i, i+1) = 1.         eignfnv(i, i+1) = 1.
59      END DO      END DO
60    
61      DO j = 1, iim      DO j = 1, iim
62         DO i = 1, iim         DO i = 1, iim
63            eignfnv(i, j) = eignfnv(i, j)/(sddu(i)*sddv(j))            eignfnv(i, j) = eignfnv(i, j) / (sddu(i) * sddv(j))
64         END DO         END DO
65      END DO      END DO
66    
67      DO j = 1, iim      DO j = 1, iim
68         DO i = 1, iim         DO i = 1, iim
69            eignfnu(i, j) = -eignfnv(j, i)            eignfnu(i, j) = - eignfnv(j, i)
70         END DO         END DO
71      END DO      END DO
72    
# Line 68  contains Line 75  contains
75            vec(i, j) = 0.0            vec(i, j) = 0.0
76            vec1(i, j) = 0.0            vec1(i, j) = 0.0
77            DO k = 1, iim            DO k = 1, iim
78               vec(i, j) = vec(i, j) + eignfnu(i, k)*eignfnv(k, j)               vec(i, j) = vec(i, j) + eignfnu(i, k) * eignfnv(k, j)
79               vec1(i, j) = vec1(i, j) + eignfnv(i, k)*eignfnu(k, j)               vec1(i, j) = vec1(i, j) + eignfnv(i, k) * eignfnu(k, j)
80            END DO            END DO
81         END DO         END DO
82      END DO      END DO
83    
84      CALL jacobi(vec, iim, iim, dv, eignfnv, nrot)      CALL jacobi(vec, dv, eignfnv, nrot)
85      CALL acc(eignfnv, d, iim)      CALL acc(eignfnv, d, iim)
86      CALL eigen_sort(dv, eignfnv, iim, iim)      CALL eigen_sort(dv, eignfnv, iim, iim)
87    
88      CALL jacobi(vec1, iim, iim, du, eignfnu, nrot)      CALL jacobi(vec1, du, eignfnu, nrot)
89      CALL acc(eignfnu, d, iim)      CALL acc(eignfnu, d, iim)
90      CALL eigen_sort(du, eignfnu, iim, iim)      CALL eigen_sort(du, eignfnu, iim, iim)
91    

Legend:
Removed from v.121  
changed lines
  Added in v.140

  ViewVC Help
Powered by ViewVC 1.1.21