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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 140 - (show annotations)
Fri Jun 5 18:58:06 2015 UTC (8 years, 11 months ago) by guez
File size: 1973 byte(s)
Changed unit of variables lat_min_guide and lat_max_guide from module
conf_guide_m from degrees to rad. Then we do not have to convert the
whole array rlat from rad to degrees in SUBROUTINE tau2alpha.

Removed some useless computations in inigeom.

Removed module coefils. Moved variables sddv, unsddv, sddu, unsddu,
eignfnu, eignfnv of module coefils to module inifgn_m. Downgraded
variables coefilu, coefilu2, coefilv, coefilv2, modfrstu, modfrstv of
module coefils to local variables of SUBROUTINE inifilr.

Write and read a 3-dimensional variable Tsoil in restartphy.nc and
startphy.nc instead of multiple variables for the different
subs-urfaces and soil layers. This does not allow any longer to
provide only the surface value in startphy.nc and spread it to other
layers. Instead, if necessary, pre-process the file startphy.nc to
spread the surface value.

1 module inifgn_m
2
3 use dimens_m, only: iim
4
5 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
16
17 SUBROUTINE inifgn(dv)
18
19 ! From LMDZ4/libf/filtrez/inifgn.F, v 1.1.1.1 2004/05/19 12:53:09
20
21 ! H.Upadyaya, O.Sharma
22
23 USE dimens_m, ONLY: iim
24 USE dynetat0_m, ONLY: xprimu, xprimv
25 use nr_util, only: pi
26 use numer_rec_95, only: jacobi
27
28 real, intent(out):: dv(iim)
29
30 ! Local:
31 REAL vec(iim, iim), vec1(iim, iim)
32 REAL du(iim)
33 real d(iim)
34 INTEGER i, j, k, nrot
35
36 EXTERNAL acc
37
38 !----------------------------------------------------------------
39
40 sddv = sqrt(xprimv(:iim))
41 sddu = sqrt(xprimu(:iim))
42 unsddu = 1. / sddu
43 unsddv = 1. / sddv
44
45 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
54 eignfnv(1, 1) = - 1.
55 eignfnv(iim, 1) = 1.
56 DO i = 1, iim - 1
57 eignfnv(i+1, i+1) = - 1.
58 eignfnv(i, i+1) = 1.
59 END DO
60
61 DO j = 1, iim
62 DO i = 1, iim
63 eignfnv(i, j) = eignfnv(i, j) / (sddu(i) * sddv(j))
64 END DO
65 END DO
66
67 DO j = 1, iim
68 DO i = 1, iim
69 eignfnu(i, j) = - eignfnv(j, i)
70 END DO
71 END DO
72
73 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 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 END DO
81 END DO
82 END DO
83
84 CALL jacobi(vec, dv, eignfnv, nrot)
85 CALL acc(eignfnv, d, iim)
86 CALL eigen_sort(dv, eignfnv, iim, iim)
87
88 CALL jacobi(vec1, du, eignfnu, nrot)
89 CALL acc(eignfnu, d, iim)
90 CALL eigen_sort(du, eignfnu, iim, iim)
91
92 END SUBROUTINE inifgn
93
94 end module inifgn_m

  ViewVC Help
Powered by ViewVC 1.1.21