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

Annotation of /trunk/phylmd/Orography/lift_noro.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 227 - (hide annotations)
Thu Nov 2 15:47:03 2017 UTC (6 years, 7 months ago) by guez
Original Path: trunk/Sources/phylmd/Orography/lift_noro.f
File size: 3423 byte(s)
Rename phisinit to phis in restart.nc: clearer, same name as Fortran variable.

In aaam_bud, use rlat and rlon from phyetat0_m instead of having these
module variables associated to actual arguments in physiq.

In clmain, too many wind variables make the procedure hard to
understand. Use yu(:knon, 1) and yv(:knon, 1) instead of u1lay(:knon)
and v1lay(:knon). Note that when yu(:knon, 1) and yv(:knon, 1) are
used as actual arguments, they are probably copied to new arrays since
the elements are not contiguous. Rename yu10m to wind10m because this
is the norm of wind vector, not its zonal component. Rename yustar to
ustar. Rename uzon and vmer to u1 and v1 since these are wind
components at first layer and u1 and v1 are the names of corresponding
dummy arguments in stdlevvar.

In clmain, rename yzlev to zlev.

In clmain, screenc, stdlevvar and coefcdrag, remove the code
corresponding to zxli true (not used in LMDZ either).

Subroutine ustarhb becomes a function. Simplifications using the fact
that zx_alf2 = 0 and zx_alf1 = 1 (discarding the possibility to change
this).

In procedure vdif_kcay, remove unused dummy argument plev. Remove
useless computations of sss and sssq.

In clouds_gno, exp(100.) would overflow in single precision. Set
maximum to exp(80.) instead.

In physiq, use u(:, 1) and v(:, 1) as arguments to phytrac instead of
creating ad hoc variables yu1 and yv1.

In stdlevvar, rename dummy argument u_10m to wind10m, following the
corresponding modification in clmain. Simplifications using the fact
that ok_pred = 0 and ok_corr = 1 (discarding the possibility to change
this).

1 guez 227 module lift_noro_m
2 guez 23
3 guez 227 IMPLICIT NONE
4 guez 23
5 guez 227 contains
6 guez 23
7 guez 227 SUBROUTINE lift_noro(dtime, paprs, pplay, pmea, pstd, ppic, ktest, t, u, v, &
8     pulow, pvlow, pustr, pvstr, d_t, d_u, d_v)
9 guez 23
10 guez 227 ! Author: F.Lott (LMD/CNRS) date: 1995/02/01
11     ! Objet: Frottement de la montagne, interface
12 guez 23
13 guez 227 USE dimphy, only: klon, klev
14     use phyetat0_m, only: rlat
15     USE suphec_m, only: rd, rg
16    
17     REAL, INTENT (IN) :: dtime
18     ! dtime---input-R- pas d'integration (s)
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 guez 23
38 guez 227 ! 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 guez 23
45 guez 227 !----------------------------------------------------------------------
46 guez 23
47 guez 227 ! initialiser les variables de sortie (pour securite)
48 guez 23
49 guez 227 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 guez 23
66 guez 227 ! preparer les variables d'entree (attention: l'ordre des niveaux
67     ! verticaux augmente du haut vers le bas)
68 guez 23
69 guez 227 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 guez 23
93 guez 227 ! appeler la routine principale
94 guez 23
95 guez 227 CALL orolift(klon, klev, ktest, dtime, papmh, zgeom, pt, pu, pv, rlat, &
96     pmea, pstd, ppic, pulow, pvlow, pdudt, pdvdt, pdtdt)
97 guez 23
98 guez 227 DO k = 1, klev
99     DO i = 1, klon
100     d_u(i, klev + 1-k) = dtime * pdudt(i, k)
101     d_v(i, klev + 1-k) = dtime * pdvdt(i, k)
102     d_t(i, klev + 1-k) = dtime * 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 guez 23
110 guez 227 END SUBROUTINE lift_noro
111    
112     end module lift_noro_m

  ViewVC Help
Powered by ViewVC 1.1.21