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

Annotation of /trunk/Sources/filtrez/inifgn.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 151 - (hide annotations)
Tue Jun 23 15:14:20 2015 UTC (8 years, 10 months ago) by guez
File size: 2024 byte(s)
In procedure inifilr, only a part of the arrays modfrstu and modfrstv
were defined. Split these into 4 arrays that are fully defined and
used: modfrst[ns][uv].

Clarified the logic for the computation of jfilt[ns][uv]. Changed the
initial value of the search so that the initial values for northern
hemisphere and southern hemisphere cannot be the same.

Clarified the logic for the computation of modfrst[ns][uv]: removed
the cycle and exit instructions.

1 guez 113 module inifgn_m
2 guez 3
3 guez 140 use dimens_m, only: iim
4    
5 guez 113 IMPLICIT NONE
6 guez 3
7 guez 140 private iim
8    
9 guez 151 real sddu(iim), sddv(iim) ! SQRT(dx / di)
10 guez 140 real unsddu(iim), unsddv(iim)
11    
12     real eignfnu(iim, iim), eignfnv(iim, iim)
13 guez 143 ! eigenfunctions of the discrete laplacian
14 guez 140
15 guez 113 contains
16 guez 3
17 guez 113 SUBROUTINE inifgn(dv)
18 guez 3
19 guez 113 ! From LMDZ4/libf/filtrez/inifgn.F, v 1.1.1.1 2004/05/19 12:53:09
20 guez 3
21 guez 143 ! H. Upadyaya, O. Sharma
22 guez 3
23 guez 143 use acc_m, only: acc
24 guez 113 USE dimens_m, ONLY: iim
25 guez 139 USE dynetat0_m, ONLY: xprimu, xprimv
26 guez 140 use nr_util, only: pi
27 guez 143 use numer_rec_95, only: jacobi, eigsrt
28 guez 3
29 guez 151 real, intent(out):: dv(:) ! (iim) eigenvalues sorted in descending order
30 guez 81
31 guez 113 ! Local:
32     REAL vec(iim, iim), vec1(iim, iim)
33     REAL du(iim)
34 guez 140 INTEGER i, j, k, nrot
35 guez 81
36 guez 113 !----------------------------------------------------------------
37 guez 81
38 guez 151 print *, "Call sequence information: inifgn"
39    
40 guez 140 sddv = sqrt(xprimv(:iim))
41     sddu = sqrt(xprimu(:iim))
42     unsddu = 1. / sddu
43     unsddv = 1. / sddv
44 guez 81
45 guez 113 DO j = 1, iim
46     DO i = 1, iim
47     vec(i, j) = 0.
48     vec1(i, j) = 0.
49     eignfnv(i, j) = 0.
50     eignfnu(i, j) = 0.
51     END DO
52     END DO
53 guez 81
54 guez 140 eignfnv(1, 1) = - 1.
55 guez 113 eignfnv(iim, 1) = 1.
56 guez 140 DO i = 1, iim - 1
57     eignfnv(i+1, i+1) = - 1.
58 guez 113 eignfnv(i, i+1) = 1.
59 guez 81 END DO
60 guez 140
61 guez 113 DO j = 1, iim
62     DO i = 1, iim
63 guez 140 eignfnv(i, j) = eignfnv(i, j) / (sddu(i) * sddv(j))
64 guez 113 END DO
65 guez 81 END DO
66 guez 140
67 guez 113 DO j = 1, iim
68     DO i = 1, iim
69 guez 140 eignfnu(i, j) = - eignfnv(j, i)
70 guez 113 END DO
71     END DO
72 guez 81
73 guez 113 DO j = 1, iim
74     DO i = 1, iim
75     vec(i, j) = 0.0
76     vec1(i, j) = 0.0
77     DO k = 1, iim
78 guez 140 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)
80 guez 113 END DO
81     END DO
82 guez 81 END DO
83    
84 guez 132 CALL jacobi(vec, dv, eignfnv, nrot)
85 guez 143 CALL acc(eignfnv)
86     CALL eigsrt(dv, eignfnv)
87 guez 81
88 guez 132 CALL jacobi(vec1, du, eignfnu, nrot)
89 guez 143 CALL acc(eignfnu)
90     CALL eigsrt(du, eignfnu)
91 guez 81
92 guez 113 END SUBROUTINE inifgn
93 guez 81
94 guez 113 end module inifgn_m

  ViewVC Help
Powered by ViewVC 1.1.21