source: trunk/LMDZ.MARS/libf/phymars/drag_noro.F @ 171

Last change on this file since 171 was 38, checked in by emillour, 14 years ago

Ajout du modè Martien (mon LMDZ.MARS.BETA, du 28/01/2011) dans le rértoire mars, pour pouvoir suivre plus facilement les modifs.
EM

File size: 5.2 KB
Line 
1      SUBROUTINE drag_noro (klon,klev,dtime,pplay,pplev,
2     e                   pvar, psig, pgam, pthe,
3     e                   kgwd,kgwdim,kdx,ktest,
4     e                   t, u, v,
5     s                   pulow, pvlow, pustr, pvstr,
6     s                   d_t, d_u, d_v)
7C**** *DRAG_NORO* INTERFACE FOR SUB-GRID SCALE OROGRAPHIC SCHEME
8C
9C     PURPOSE.
10C     --------
11C           ZEROS TENDENCIES, COMPUTES GEOPOTENTIAL HEIGHT AND UPDATES THE
12C           TENDENCIES AFTER THE SCHEME HAS BEEN CALLED.
13C
14C     EXPLICIT ARGUMENTS :
15C     --------------------
16C
17C     INPUT :
18C
19C     NLON               : NUMBER OF HORIZONTAL GRID POINTS
20C     NLEV               : NUMBER OF LEVELS
21C     DTIME              : LENGTH OF TIME STEP
22C     PPLAY(NLON,NLEV+1) : PRESSURE AT MIDDLE LEVELS
23C     PPLEV(NLON,NLEV)   : PRESSURE ON MODEL LEVELS
24C     PVAR(NLON)         : SUB-GRID SCALE STANDARD DEVIATION
25C     PSIG(NLON)         : SUB-GRID SCALE SLOPE
26C     PGAM(NLON)         : SUB-GRID SCALE ANISOTROPY
27C     PTHE(NLON)         : SUB-GRID SCALE PRINCIPAL AXES ANGLE
28C     KGWD               : NUMBER OF POINTS AT WHICH THE SCHEME IS CALLED
29C     KGWDIM             : NUMBER OF POINTS AT WHICH THE SCHEME IS CALLED
30C     KDX(NLON)          : POINTS AT WHICH TO CALL THE SCHEME
31C     KTEST(NLON)        : MAP OF CALLING POINTS
32C     T(NLON,NLEV)       : TEMPERATURE
33C     U(NLON,NLEV)       : ZONAL WIND
34C     V(NLON,NLEV)       : MERIDIONAL WIND
35C
36C     OUTPUT :
37C
38C     PULOW(NLON)        : LOW LEVEL ZONAL WIND
39C     PVLOW(NLON)        : LOW LEVEL MERIDIONAL WIND
40C     PUSTR(NLON)        : LOW LEVEL ZONAL STRESS
41C     PVSTR(NLON)        : LOW LEVEL MERIDIONAL STRESS
42C     D_T(NLON,NLEV)     : TEMPERATURE TENDENCY
43C     D_U(NLON,NLEV)     : ZONAL WIND TENDENCY
44C     D_V(NLON,NLEV)     : MERIDIONAL WIND TENDENCY
45C
46C     IMPLICIT ARGUMENTS :
47C     --------------------
48C
49C     comcstfi.h
50C     dimphys.h
51C
52c
53      IMPLICIT none
54c======================================================================
55c Auteur(s): Z.X. Li F.Lott (LMD/CNRS) date: 19950201
56c Objet: Frottement de la montagne Interface
57c======================================================================
58c Arguments:
59c dtime---input-R- pas d'integration (s)
60c s-------input-R-la valeur "s" pour chaque couche
61c pplay--input-R- pression au milieu des couches en Pa
62c pplev--input-R-pression au bords des couches en Pa
63c t-------input-R-temperature (K)
64c u-------input-R-vitesse horizontale (m/s)
65c v-------input-R-vitesse horizontale (m/s)
66c
67c d_t-----output-R-increment de la temperature t
68c d_u-----output-R-increment de la vitesse u
69c d_v-----output-R-increment de la vitesse v
70c======================================================================
71#include "dimensions.h"
72#include "dimphys.h"
73#include "dimradmars.h"
74#include "comcstfi.h"
75c
76c ARGUMENTS
77c
78      REAL dtime
79      INTEGER klon,klev
80      real pplay(NDLO2,klev),pplev(NDLO2,klev+1)
81      REAL pvar(NDLO2),psig(NDLO2),pgam(NDLO2),pthe(NDLO2)
82      REAL pulow(NDLO2),pvlow(NDLO2),pustr(NDLO2),pvstr(NDLO2)
83      REAL u(NDLO2,klev), v(NDLO2,klev),t(NDLO2,klev)
84      REAL d_t(NDLO2,klev), d_u(NDLO2,klev), d_v(NDLO2,klev)
85c
86      INTEGER i, k, kgwd, kgwdim, kdx(NDLO2), ktest(NDLO2)
87c
88c Variables locales:
89c
90      REAL paprs(NDLO2,nlayermx+1)
91      REAL paprsf(NDLO2,nlayermx)
92      REAL zgeom(NDLO2,nlayermx)
93      REAL pdtdt(NDLO2,nlayermx)
94      REAL pdudt(NDLO2,nlayermx), pdvdt(NDLO2,nlayermx)
95      REAL pt(NDLO2,nlayermx), pu(NDLO2,nlayermx)
96      REAL pv(NDLO2,nlayermx)
97c
98c initialiser les variables de sortie (pour securite)
99c
100      DO i = 1,klon
101         pulow(i) = 0.0
102         pvlow(i) = 0.0
103         pustr(i) = 0.0
104         pvstr(i) = 0.0
105      ENDDO
106      DO k = 1, klev
107      DO i = 1, klon
108         d_t(i,k) = 0.0
109         d_u(i,k) = 0.0
110         d_v(i,k) = 0.0
111         pdudt(i,k)=0.0
112         pdvdt(i,k)=0.0
113         pdtdt(i,k)=0.0
114      ENDDO
115      ENDDO
116c
117c preparer les variables d'entree (attention: l'ordre des niveaux
118c verticaux augmente du haut vers le bas)
119c
120      DO k = 1, klev
121      DO i = 1, klon
122         pt(i,k) = t(i,klev-k+1)
123         pu(i,k) = u(i,klev-k+1)
124         pv(i,k) = v(i,klev-k+1)
125         paprsf(i,k) = pplay(i,klev-k+1)
126         paprs(i,k) = pplev(i,klev+1-k+1)
127      ENDDO
128      ENDDO
129      DO i = 1, klon
130         paprs(i,klev+1) = pplev(i,1)
131      ENDDO
132      DO i = 1, klon
133         zgeom(i,klev) = r * pt(i,klev)
134     .                  * LOG(paprs(i,klev+1)/paprsf(i,klev))
135      ENDDO
136      DO k = klev-1, 1, -1
137      DO i = 1, klon
138         zgeom(i,k) = zgeom(i,k+1) + r * (pt(i,k)+pt(i,k+1))/2.0
139     .               * LOG(paprsf(i,k+1)/paprsf(i,k))
140      ENDDO
141      ENDDO
142c
143c appeler la routine principale
144c
145
146      CALL ORODRAG(klon,klev,kgwd,kgwdim,kdx,ktest,
147     .            dtime,
148     .            paprs, paprsf, zgeom,
149     .            pt, pu, pv, pvar, psig, pgam, pthe,
150     .            pulow,pvlow,
151     .            pdudt,pdvdt,pdtdt)
152C
153      DO k = 1, klev
154      DO i = 1, klon
155         d_u(i,klev+1-k) = dtime*pdudt(i,k)
156         d_v(i,klev+1-k) = dtime*pdvdt(i,k)
157         d_t(i,klev+1-k) = dtime*pdtdt(i,k)
158         pustr(i)        = pustr(i)
159     .                    +g*pdudt(i,k)*(paprs(i,k+1)-paprs(i,k))
160         pvstr(i)        = pvstr(i)
161     .                    +g*pdvdt(i,k)*(paprs(i,k+1)-paprs(i,k))
162      ENDDO
163      ENDDO
164c
165      RETURN
166      END
Note: See TracBrowser for help on using the repository browser.