/[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 134 by guez, Wed Apr 29 15:47:56 2015 UTC 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 coefils, ONLY: eignfnu, eignfnv, sddu, sddv, unsddu, unsddv      use acc_m, only: acc
     USE comgeom, ONLY: xprimu, xprimv  
24      USE dimens_m, ONLY: iim      USE dimens_m, ONLY: iim
25      use numer_rec_95, only: jacobi      USE dynetat0_m, ONLY: xprimu, xprimv
26        use nr_util, only: pi
27        use numer_rec_95, only: jacobi, eigsrt
28    
29      real, intent(out):: 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)
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  
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
        sddv(i) = sqrt(xprimv(i))  
        sddu(i) = sqrt(xprimu(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 47  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 69  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, 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, 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.134  
changed lines
  Added in v.143

  ViewVC Help
Powered by ViewVC 1.1.21