/[lmdze]/trunk/phylmd/Orography/lift_noro.f90
ViewVC logotype

Contents of /trunk/phylmd/Orography/lift_noro.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 344 - (show annotations)
Tue Nov 12 15:18:14 2019 UTC (4 years, 6 months ago) by guez
File size: 3408 byte(s)
Replace pi / 180 by `deg_to_rad`

In procedure etat0, rename variable tsoil to ftsoil, which is the
corresponding name in the gcm program.

In `laplacien_gam`, replace call to scopy by array assignment.

Replace pi / 180 by `deg_to_rad` in `start_init_phys`.

Encapsulate diagcld1 and orolift in modules.

Avoid duplicated computation in `interfsurf_hq`.

Promote internal function fz of procedure soil to function of module
`soil_m`.  Use `new_unit` in procedure soil.

1 module lift_noro_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE lift_noro(paprs, pplay, pmea, pstd, ppic, ktest, t, u, v, pulow, &
8 pvlow, pustr, pvstr, d_t, d_u, d_v)
9
10 ! Author: F.Lott (LMD/CNRS) date: 1995/02/01
11 ! Objet: Frottement de la montagne, interface
12
13 use comconst, only: dtphys
14 USE dimphy, only: klon, klev
15 use orolift_m, only: orolift
16 use phyetat0_m, only: rlat
17 USE suphec_m, only: rd, rg
18
19 REAL, INTENT (IN) :: paprs(klon, klev + 1)
20 ! paprs---input-R-pression pour chaque inter-couche (en Pa)
21 REAL, INTENT (IN) :: pplay(klon, klev)
22 ! pplay---input-R-pression pour le mileu de chaque couche (en Pa)
23 REAL pmea(klon)
24 REAL, INTENT (IN):: pstd(klon)
25 REAL ppic(klon)
26 integer ktest(klon)
27 REAL, INTENT (IN):: t(klon, klev)
28 ! t-------input-R-temperature (K)
29 real, INTENT (IN):: u(klon, klev), v(klon, klev)
30 ! u-------input-R-vitesse horizontale (m / s)
31 ! v-------input-R-vitesse horizontale (m / s)
32 REAL pulow(klon), pvlow(klon), pustr(klon), pvstr(klon)
33 REAL d_t(klon, klev), d_u(klon, klev), d_v(klon, klev)
34 ! d_t-----output-R-increment de la temperature
35 ! d_u-----output-R-increment de la vitesse u
36 ! d_v-----output-R-increment de la vitesse v
37
38 ! Local:
39 INTEGER i, k
40 REAL zgeom(klon, klev)
41 REAL pdtdt(klon, klev), pdudt(klon, klev), pdvdt(klon, klev)
42 REAL pt(klon, klev), pu(klon, klev), pv(klon, klev)
43 REAL papmf(klon, klev), papmh(klon, klev + 1)
44
45 !----------------------------------------------------------------------
46
47 ! initialiser les variables de sortie (pour securite)
48
49 DO i = 1, klon
50 pulow(i) = 0.0
51 pvlow(i) = 0.0
52 pustr(i) = 0.0
53 pvstr(i) = 0.0
54 END DO
55 DO k = 1, klev
56 DO i = 1, klon
57 d_t(i, k) = 0.0
58 d_u(i, k) = 0.0
59 d_v(i, k) = 0.0
60 pdudt(i, k) = 0.0
61 pdvdt(i, k) = 0.0
62 pdtdt(i, k) = 0.0
63 END DO
64 END DO
65
66 ! preparer les variables d'entree (attention: l'ordre des niveaux
67 ! verticaux augmente du haut vers le bas)
68
69 DO k = 1, klev
70 DO i = 1, klon
71 pt(i, k) = t(i, klev-k + 1)
72 pu(i, k) = u(i, klev-k + 1)
73 pv(i, k) = v(i, klev-k + 1)
74 papmf(i, k) = pplay(i, klev-k + 1)
75 END DO
76 END DO
77 DO k = 1, klev + 1
78 DO i = 1, klon
79 papmh(i, k) = paprs(i, klev-k + 2)
80 END DO
81 END DO
82 DO i = 1, klon
83 zgeom(i, klev) = rd * pt(i, klev) &
84 * log(papmh(i, klev + 1) / papmf(i, klev))
85 END DO
86 DO k = klev - 1, 1, -1
87 DO i = 1, klon
88 zgeom(i, k) = zgeom(i, k + 1) + rd * (pt(i, k) + pt(i, k + 1)) &
89 / 2. * log(papmf(i, k + 1) / papmf(i, k))
90 END DO
91 END DO
92
93 ! appeler la routine principale
94
95 CALL orolift(klon, klev, ktest, dtphys, papmh, zgeom, pt, pu, pv, rlat, &
96 pmea, pstd, ppic, pulow, pvlow, pdudt, pdvdt, pdtdt)
97
98 DO k = 1, klev
99 DO i = 1, klon
100 d_u(i, klev + 1-k) = dtphys * pdudt(i, k)
101 d_v(i, klev + 1-k) = dtphys * pdvdt(i, k)
102 d_t(i, klev + 1-k) = dtphys * pdtdt(i, k)
103 pustr(i) = pustr(i) &
104 + pdudt(i, k) * (papmh(i, k + 1)-papmh(i, k)) / rg
105 pvstr(i) = pvstr(i) &
106 + pdvdt(i, k) * (papmh(i, k + 1)-papmh(i, k)) / rg
107 END DO
108 END DO
109
110 END SUBROUTINE lift_noro
111
112 end module lift_noro_m

  ViewVC Help
Powered by ViewVC 1.1.21