4 |
|
|
5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE drag_noro(nlon, nlev, dtime, paprs, pplay, pmea, pstd, psig, & |
SUBROUTINE drag_noro(dtime, paprs, pplay, pmea, pstd, psig, pgam, pthe, & |
8 |
pgam, pthe, ppic, pval, ktest, t, u, v, pulow, pvlow, pustr, pvstr, & |
ppic, pval, ktest, t, u, v, pulow, pvlow, pustr, pvstr, d_t, d_u, d_v) |
|
d_t, d_u, d_v) |
|
9 |
|
|
10 |
! From LMDZ4/libf/phylmd/orografi.F, version 1.4 2005/12/01 11:27:29 |
! From LMDZ4/libf/phylmd/orografi.F, version 1.4 2005/12/01 11:27:29 |
11 |
|
|
12 |
USE dimphy, ONLY : klev, klon |
! Author: F. Lott (LMD/CNRS). Date: 1995/02/01. |
13 |
USE suphec_m, ONLY : rd, rg |
! Objet : frottement de la montagne, interface. |
14 |
|
|
15 |
! Auteur(s): F.Lott (LMD/CNRS) date: 19950201 |
USE dimphy, ONLY: klev, klon |
16 |
! Objet: Frottement de la montagne Interface |
use orodrag_m, only: orodrag |
17 |
!====================================================================== |
USE suphec_m, ONLY: rd, rg |
18 |
! Arguments: |
|
19 |
! dtime---input-R- pas d'integration (s) |
REAL, INTENT (IN):: dtime ! pas d'int\'egration (s) |
20 |
! paprs---input-R-pression pour chaque inter-couche (en Pa) |
REAL, INTENT (IN):: paprs(klon, klev+1) ! pression pour chaque |
21 |
! pplay---input-R-pression pour le mileu de chaque couche (en Pa) |
! inter-couche (en Pa) |
22 |
! t-------input-R-temperature (K) |
REAL, INTENT (IN):: pplay(klon, klev) ! pression pour le mileu de |
23 |
! u-------input-R-vitesse horizontale (m/s) |
! chaque couche (en Pa) |
24 |
! v-------input-R-vitesse horizontale (m/s) |
REAL pmea(klon) |
25 |
|
REAL, INTENT (IN):: pstd(klon), psig(klon) |
26 |
! d_t-----output-R-increment de la temperature |
REAL pgam(klon), pthe(klon) |
27 |
! d_u-----output-R-increment de la vitesse u |
REAL ppic(klon), pval(klon) |
28 |
! d_v-----output-R-increment de la vitesse v |
integer ktest(klon) |
29 |
!====================================================================== |
REAL, INTENT (IN):: t(klon, klev) ! temperature (K) |
30 |
|
real, INTENT (IN):: u(klon, klev), v(klon, klev) ! vitesse horizontale (m/s) |
31 |
! ARGUMENTS |
REAL, intent(out):: pulow(klon), pvlow(klon), pustr(klon), pvstr(klon) |
32 |
|
REAL, intent(out):: d_t(klon, klev) ! increment de la temperature |
|
INTEGER nlon, nlev |
|
|
REAL, INTENT (IN) :: dtime |
|
|
REAL, INTENT (IN) :: paprs(klon, klev+1) |
|
|
REAL, INTENT (IN) :: pplay(klon, klev) |
|
|
REAL pmea(nlon) |
|
|
REAL, INTENT (IN):: pstd(nlon), psig(nlon) |
|
|
REAL pgam(nlon), pthe(nlon) |
|
|
REAL ppic(nlon), pval(nlon) |
|
|
REAL pulow(nlon), pvlow(nlon), pustr(nlon), pvstr(nlon) |
|
|
REAL, INTENT (IN):: t(nlon, nlev) |
|
|
real, INTENT (IN):: u(nlon, nlev), v(nlon, nlev) |
|
|
REAL d_t(nlon, nlev), d_u(nlon, nlev), d_v(nlon, nlev) |
|
33 |
|
|
34 |
INTEGER i, k, ktest(nlon) |
REAL, intent(out):: d_u(klon, klev), d_v(klon, klev) ! increment |
35 |
|
! de la vitesse |
|
! Variables locales: |
|
36 |
|
|
37 |
|
! Local: |
38 |
|
INTEGER i, k |
39 |
REAL zgeom(klon, klev) |
REAL zgeom(klon, klev) |
40 |
REAL pdtdt(klon, klev), pdudt(klon, klev), pdvdt(klon, klev) |
REAL pdtdt(klon, klev), pdudt(klon, klev), pdvdt(klon, klev) |
41 |
REAL pt(klon, klev), pu(klon, klev), pv(klon, klev) |
REAL pt(klon, klev), pu(klon, klev), pv(klon, klev) |
42 |
REAL papmf(klon, klev), papmh(klon, klev+1) |
REAL papmf(klon, klev), papmh(klon, klev+1) |
43 |
|
|
44 |
! initialiser les variables de sortie (pour securite) |
!-------------------------------------------------------------------- |
45 |
|
|
46 |
|
! Initialiser les variables de sortie (pour securite) |
47 |
|
|
48 |
DO i = 1, klon |
DO i = 1, klon |
49 |
pulow(i) = 0.0 |
pulow(i) = 0.0 |
62 |
END DO |
END DO |
63 |
END DO |
END DO |
64 |
|
|
65 |
! preparer les variables d'entree (attention: l'ordre des niveaux |
! Preparer les variables d'entree (attention: l'ordre des niveaux |
66 |
! verticaux augmente du haut vers le bas) |
! verticaux augmente du haut vers le bas) |
67 |
|
|
68 |
DO k = 1, klev |
DO k = 1, klev |
88 |
END DO |
END DO |
89 |
END DO |
END DO |
90 |
|
|
91 |
! appeler la routine principale |
! Appeler la routine principale |
92 |
|
|
93 |
CALL orodrag(klon, klev, ktest, dtime, papmh, papmf, zgeom, & |
CALL orodrag(klon, klev, ktest, dtime, papmh, papmf, zgeom, pt, pu, pv, & |
94 |
pt, pu, pv, pmea, pstd, psig, pgam, pthe, ppic, pval, pulow, pvlow, & |
pmea, pstd, psig, pgam, pthe, ppic, pval, pulow, pvlow, pdudt, & |
95 |
pdudt, pdvdt, pdtdt) |
pdvdt, pdtdt) |
96 |
|
|
97 |
DO k = 1, klev |
DO k = 1, klev |
98 |
DO i = 1, klon |
DO i = 1, klon |
99 |
d_u(i, klev+1-k) = dtime*pdudt(i, k) |
d_u(i, klev+1-k) = dtime*pdudt(i, k) |
100 |
d_v(i, klev+1-k) = dtime*pdvdt(i, k) |
d_v(i, klev+1-k) = dtime*pdvdt(i, k) |
101 |
d_t(i, klev+1-k) = dtime*pdtdt(i, k) |
d_t(i, klev+1-k) = dtime*pdtdt(i, k) |
102 |
pustr(i) = pustr(i) & |
pustr(i) = pustr(i) & |
103 |
+ pdudt(i, k)*(papmh(i, k+1)-papmh(i, k))/rg |
+ pdudt(i, k)*(papmh(i, k+1)-papmh(i, k))/rg |
104 |
pvstr(i) = pvstr(i) & |
pvstr(i) = pvstr(i) & |
105 |
+ pdvdt(i, k)*(papmh(i, k+1)-papmh(i, k))/rg |
+ pdvdt(i, k)*(papmh(i, k+1)-papmh(i, k))/rg |
106 |
END DO |
END DO |
107 |
END DO |
END DO |