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
RevLine 
[38]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
[1047]53      use dimradmars_mod, only:  ndlo2
[1226]54      USE comcstfi_h
[38]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======================================================================
[1047]73!#include "dimensions.h"
74!#include "dimphys.h"
75!#include "dimradmars.h"
[38]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
[1047]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)
[38]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.