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

Last change on this file since 1242 was 1226, checked in by aslmd, 11 years ago

LMDZ.MARS : Replaced comcstfi and planete includes by modules.

File size: 5.3 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      use dimradmars_mod, only:  ndlo2
54      USE comcstfi_h
55      IMPLICIT none
56c======================================================================
57c Auteur(s): Z.X. Li F.Lott (LMD/CNRS) date: 19950201
58c Objet: Frottement de la montagne Interface
59c======================================================================
60c Arguments:
61c dtime---input-R- pas d'integration (s)
62c s-------input-R-la valeur "s" pour chaque couche
63c pplay--input-R- pression au milieu des couches en Pa
64c pplev--input-R-pression au bords des couches en Pa
65c t-------input-R-temperature (K)
66c u-------input-R-vitesse horizontale (m/s)
67c v-------input-R-vitesse horizontale (m/s)
68c
69c d_t-----output-R-increment de la temperature t
70c d_u-----output-R-increment de la vitesse u
71c d_v-----output-R-increment de la vitesse v
72c======================================================================
73!#include "dimensions.h"
74!#include "dimphys.h"
75!#include "dimradmars.h"
76c
77c ARGUMENTS
78c
79      REAL dtime
80      INTEGER klon,klev
81      real pplay(NDLO2,klev),pplev(NDLO2,klev+1)
82      REAL pvar(NDLO2),psig(NDLO2),pgam(NDLO2),pthe(NDLO2)
83      REAL pulow(NDLO2),pvlow(NDLO2),pustr(NDLO2),pvstr(NDLO2)
84      REAL u(NDLO2,klev), v(NDLO2,klev),t(NDLO2,klev)
85      REAL d_t(NDLO2,klev), d_u(NDLO2,klev), d_v(NDLO2,klev)
86c
87      INTEGER i, k, kgwd, kgwdim, kdx(NDLO2), ktest(NDLO2)
88c
89c Variables locales:
90c
91      REAL paprs(NDLO2,klev+1)
92      REAL paprsf(NDLO2,klev)
93      REAL zgeom(NDLO2,klev)
94      REAL pdtdt(NDLO2,klev)
95      REAL pdudt(NDLO2,klev), pdvdt(NDLO2,klev)
96      REAL pt(NDLO2,klev), pu(NDLO2,klev)
97      REAL pv(NDLO2,klev)
98c
99c initialiser les variables de sortie (pour securite)
100c
101      DO i = 1,klon
102         pulow(i) = 0.0
103         pvlow(i) = 0.0
104         pustr(i) = 0.0
105         pvstr(i) = 0.0
106      ENDDO
107      DO k = 1, klev
108      DO i = 1, klon
109         d_t(i,k) = 0.0
110         d_u(i,k) = 0.0
111         d_v(i,k) = 0.0
112         pdudt(i,k)=0.0
113         pdvdt(i,k)=0.0
114         pdtdt(i,k)=0.0
115      ENDDO
116      ENDDO
117c
118c preparer les variables d'entree (attention: l'ordre des niveaux
119c verticaux augmente du haut vers le bas)
120c
121      DO k = 1, klev
122      DO i = 1, klon
123         pt(i,k) = t(i,klev-k+1)
124         pu(i,k) = u(i,klev-k+1)
125         pv(i,k) = v(i,klev-k+1)
126         paprsf(i,k) = pplay(i,klev-k+1)
127         paprs(i,k) = pplev(i,klev+1-k+1)
128      ENDDO
129      ENDDO
130      DO i = 1, klon
131         paprs(i,klev+1) = pplev(i,1)
132      ENDDO
133      DO i = 1, klon
134         zgeom(i,klev) = r * pt(i,klev)
135     .                  * LOG(paprs(i,klev+1)/paprsf(i,klev))
136      ENDDO
137      DO k = klev-1, 1, -1
138      DO i = 1, klon
139         zgeom(i,k) = zgeom(i,k+1) + r * (pt(i,k)+pt(i,k+1))/2.0
140     .               * LOG(paprsf(i,k+1)/paprsf(i,k))
141      ENDDO
142      ENDDO
143c
144c appeler la routine principale
145c
146
147      CALL ORODRAG(klon,klev,kgwd,kgwdim,kdx,ktest,
148     .            dtime,
149     .            paprs, paprsf, zgeom,
150     .            pt, pu, pv, pvar, psig, pgam, pthe,
151     .            pulow,pvlow,
152     .            pdudt,pdvdt,pdtdt)
153C
154      DO k = 1, klev
155      DO i = 1, klon
156         d_u(i,klev+1-k) = dtime*pdudt(i,k)
157         d_v(i,klev+1-k) = dtime*pdvdt(i,k)
158         d_t(i,klev+1-k) = dtime*pdtdt(i,k)
159         pustr(i)        = pustr(i)
160     .                    +g*pdudt(i,k)*(paprs(i,k+1)-paprs(i,k))
161         pvstr(i)        = pvstr(i)
162     .                    +g*pdvdt(i,k)*(paprs(i,k+1)-paprs(i,k))
163      ENDDO
164      ENDDO
165c
166      RETURN
167      END
Note: See TracBrowser for help on using the repository browser.