source: trunk/LMDZ.MARS/libf/phymars/orodrag_mod.F @ 2616

Last change on this file since 2616 was 2616, checked in by romain.vande, 3 years ago

LMDZ_MARS RV : Open_MP;
Put all the "save" variables as "!$OMP THREADPRIVATE" in phymars.
The code can now be tested, see README for more info

File size: 8.5 KB
Line 
1      MODULE orodrag_mod
2     
3      IMPLICIT NONE
4     
5      CONTAINS
6     
7      SUBROUTINE ORODRAG( klon,klev
8     I                 , KGWD, KGWDIM, KDX, KTEST
9     R                 , PTSPHY
10     R                 , PAPHM1,PAPM1,PGEOM1,PTM1,PUM1
11     R                 , PVM1, PVAROR, PSIG, PGAMMA, PTHETA
12C OUTPUTS
13     R                 , PULOW,PVLOW
14     R                 , PVOM,PVOL,PTE )
15C
16C
17C**** *ORODRAG* - DOES THE GRAVITY WAVE PARAMETRIZATION.
18C
19C     PURPOSE.
20C     --------
21C
22C          THIS ROUTINE COMPUTES THE PHYSICAL TENDENCIES OF THE
23C          PROGNOSTIC VARIABLES U,V  AND T DUE TO  VERTICAL TRANSPORTS BY
24C          SUBGRIDSCALE OROGRAPHICALLY EXCITED GRAVITY WAVES
25C
26C     EXPLICIT ARGUMENTS :
27C     --------------------
28C
29C     INPUT :
30C
31C     NLON               : NUMBER OF HORIZONTAL GRID POINTS
32C     NLEV               : NUMBER OF LEVELS
33C     KGWD               : NUMBER OF POINTS AT WHICH THE SCHEME IS CALLED
34C     KGWDIM             : NUMBER OF POINTS AT WHICH THE SCHEME IS CALLED
35C     KDX(NLON)          : POINTS AT WHICH TO CALL THE SCHEME
36C     KTEST(NLON)        : MAP OF CALLING POINTS
37C     PTSPHY             : LENGTH OF TIME STEP
38C     PAPHM1(NLON,NLEV+1): PRESSURE AT MIDDLE LEVELS
39C     PAPM1(NLON,NLEV)   : PRESSURE ON MODEL LEVELS
40C     PGEOM1(NLON,NLEV)  : GEOPOTENTIAL HIEGHT OF MODEL LEVELS
41C     PTM1(NLON,NLEV)    : TEMPERATURE
42C     PUM1(NLON,NLEV)    : ZONAL WIND
43C     PVM1(NLON,NLEV)    : MERIDIONAL WIND
44C     PVAROR(NLON)       : SUB-GRID SCALE STANDARD DEVIATION
45C     PSIG(NLON)         : SUB-GRID SCALE SLOPE
46C     PGAMMA(NLON)       : SUB-GRID SCALE ANISOTROPY
47C     PTHETA(NLON)       : SUB-GRID SCALE PRINCIPAL AXES ANGLE
48C
49C     OUTPUT :
50C
51C     PULOW(NLON)        : LOW LEVEL ZONAL WIND
52C     PVLOW(NLON)        : LOW LEVEL MERIDIONAL WIND
53C     PVOM(NLON,NLEV)    : ZONAL WIND TENDENCY
54C     PVOL(NLON,NLEV)    : MERIDIONAL WIND TENDENCY
55C     PTE(NLON,NLEV)     : TEMPERATURE TENDENCY
56C
57C     IMPLICIT ARGUMENTS :
58C     --------------------
59C
60C     comcstfi.h
61C     yoegwd.h
62C
63C     METHOD.
64C     -------
65C
66C     EXTERNALS.
67C     ----------
68C
69C     REFERENCE.
70C     ----------
71C
72C     AUTHOR.
73C     -------
74C     M.MILLER + B.RITTER   E.C.M.W.F.     15/06/86.
75C
76C     F.LOTT + M. MILLER    E.C.M.W.F.     22/11/94
77C-----------------------------------------------------------------------
78      use dimradmars_mod, only: ndlo2
79      USE gwstress_mod, ONLY: gwstress
80      USE gwprofil_mod, ONLY: gwprofil
81      USE comcstfi_h, ONLY: g, cpp
82      implicit none
83C
84C
85      integer klon,klev,kidia
86      parameter(kidia=1)
87      integer, save :: kfdia ! =NDLO2
88     
89!$OMP THREADPRIVATE(kfdia)
90
91      include "yoegwd.h"
92C-----------------------------------------------------------------------
93C
94C*       0.1   ARGUMENTS
95C              ---------
96C
97C
98      REAL  PTE(NDLO2,klev),
99     *      PVOL(NDLO2,klev),
100     *      PVOM(NDLO2,klev),
101     *      PULOW(NDLO2),
102     *      PVLOW(NDLO2)
103      REAL  PUM1(NDLO2,klev),
104     *      PVM1(NDLO2,klev),
105     *      PTM1(NDLO2,klev),
106     *      PVAROR(NDLO2),PSIG(NDLO2),PGAMMA(NDLO2),PTHETA(NDLO2),
107     *      PGEOM1(NDLO2,klev),
108     *      PAPM1(NDLO2,klev),
109     *      PAPHM1(NDLO2,klev+1)
110C
111      integer kgwd,kgwdim
112      real ptsphy
113      INTEGER  KDX(NDLO2),KTEST(NDLO2)
114C-----------------------------------------------------------------------
115C
116C*       0.2   LOCAL ARRAYS
117C              ------------
118      INTEGER  ISECT(NDLO2),
119     *         ICRIT(NDLO2),
120     *         IKCRITH(NDLO2),
121     *         IKenvh(NDLO2),
122     *         IKNU(NDLO2),
123     *         IKNU2(NDLO2),
124     *         IKCRIT(NDLO2),
125     *         IKHLIM(NDLO2)
126      integer ji,jk,jl,klevm1,ilevp1
127C      real gkwake
128      real ztmst,pvar(NDLO2,4),ztauf(NDLO2,klev+1)
129      real zrtmst,zdelp,zb,zc,zbet
130      real zconb,zabsv,zzd1,ratio,zust,zvst,zdis,ztemp
131C
132      REAL   ZTAU(NDLO2,klev+1),
133     *       ZSTAB(NDLO2,klev+1),
134     *       ZVPH(NDLO2,klev+1),
135     *       ZRHO(NDLO2,klev+1),
136     *       ZRI(NDLO2,klev+1),
137     *       ZpsI(NDLO2,klev+1),
138     *       Zzdep(NDLO2,klev)
139      REAL   ZDUDT(NDLO2),
140     *       ZDVDT(NDLO2),
141     *       ZDTDT(NDLO2),
142     *       ZDEDT(NDLO2),
143     *       ZVIDIS(NDLO2),
144     *       ZTFR(NDLO2),
145     *       Znu(NDLO2),
146     *       Zd1(NDLO2),
147     *       Zd2(NDLO2),
148     *       Zdmod(NDLO2)
149C
150C------------------------------------------------------------------
151C
152C*         1.    INITIALIZATION
153C                --------------
154C
155 100  CONTINUE
156C
157C     ------------------------------------------------------------------
158C
159C*         1.1   COMPUTATIONAL CONSTANTS
160C                -----------------------
161C
162 110  CONTINUE
163C
164      kfdia=NDLO2
165     
166c     ZTMST=TWODT
167c     IF(NSTEP.EQ.NSTART) ZTMST=0.5*TWODT
168      KLEVM1=KLEV-1
169      ZTMST=PTSPHY
170      ZRTMST=1./ZTMST
171C     ------------------------------------------------------------------
172C
173 120  CONTINUE
174C
175C     ------------------------------------------------------------------
176C
177C*         1.3   CHECK WHETHER ROW CONTAINS POINT FOR PRINTING
178C                ---------------------------------------------
179C
180 130  CONTINUE
181C
182C     ------------------------------------------------------------------
183C
184C*         2.     PRECOMPUTE BASIC STATE VARIABLES.
185C*                ---------- ----- ----- ----------
186C*                DEFINE LOW LEVEL WIND, PROJECT WINDS IN PLANE OF
187C*                LOW LEVEL WIND, DETERMINE SECTOR IN WHICH TO TAKE
188C*                THE VARIANCE AND SET INDICATOR FOR CRITICAL LEVELS.
189C
190  200 CONTINUE
191C
192C
193C
194      CALL OROSETUP
195     *     ( klon, klev , KTEST
196     *     , IKCRIT, IKCRITH, ICRIT, ISECT, IKHLIM, ikenvh,IKNU,iknu2
197     *     , PAPHM1, PAPM1 , PUM1   , PVM1 , PTM1 , PGEOM1, pvaror
198     *     , ZRHO  , ZRI   , ZSTAB  , ZTAU , ZVPH , zpsi, zzdep
199     *     , PULOW, PVLOW
200     *     , ptheta,pgamma,znu  ,zd1,  zd2,  zdmod                )
201C
202C
203C
204C***********************************************************
205C
206C
207C*         3.      COMPUTE LOW LEVEL STRESSES USING SUBCRITICAL AND
208C*                 SUPERCRITICAL FORMS.COMPUTES ANISOTROPY COEFFICIENT
209C*                 AS MEASURE OF OROGRAPHIC TWODIMENSIONALITY.
210C
211  300 CONTINUE
212C
213      CALL GWSTRESS
214     *    ( klon  , klev
215     *    , IKCRIT, ISECT, IKHLIM, KTEST, IKCRITH, ICRIT, ikenvh, IKNU
216     *    , ZRHO  , ZSTAB, ZVPH  , PVAR , pvaror,  psig
217     *    , ZTFR   , ZTAU
218     *    , pgeom1,pgamma,zd1,zd2,zdmod,znu)
219C
220C*         4.      COMPUTE STRESS PROFILE.
221C*                 ------- ------ --------
222C
223  400 CONTINUE
224C
225C
226      CALL GWPROFIL
227     *       (  klon , klev
228     *       , kgwd   , kdx  , KTEST
229     *       , IKCRIT, IKCRITH, ICRIT  , ikenvh, IKNU
230     *       ,iknu2 , pAPHM1, ZRHO   , ZSTAB , ZTFR   , ZVPH
231     *       , ZRI   , ZTAU   , ztauf
232     *       , zdmod , znu    , psig  , pgamma , pvaror   )
233C
234C
235C*         5.      COMPUTE TENDENCIES.
236C*                 -------------------
237C
238  500 CONTINUE
239C
240C  EXPLICIT SOLUTION AT ALL LEVELS FOR THE GRAVITY WAVE
241C  IMPLICIT SOLUTION FOR THE BLOCKED LEVELS
242
243      DO 510 JL=KIDIA,KFDIA
244      ZVIDIS(JL)=0.0
245      ZDUDT(JL)=0.0
246      ZDVDT(JL)=0.0
247      ZDTDT(JL)=0.0
248  510 CONTINUE
249C
250      ILEVP1=KLEV+1
251C
252C
253      DO 524 JK=1,klev
254C
255CDIR$ IVDEP
256C
257C      GKWAKE=0.5
258C
259C     NOW SET IN SUGWD.F
260C
261      DO 523 JL=1,KGWD
262      JI=KDX(JL)
263      ZDELP=pAPHM1(Ji,JK+1)-pAPHM1(Ji,JK)
264      ZTEMP=-g*(ZTAU(Ji,JK+1)-ZTAU(Ji,JK))/(ZVPH(Ji,ILEVP1)*ZDELP)
265      ZDUDT(JI)=(PULOW(JI)*Zd1(ji)-pvlow(ji)*zd2(ji))*ztemp/zdmod(ji)
266      ZDVDT(JI)=(pvLOW(JI)*Zd1(ji)+pulow(ji)*zd2(ji))*ztemp/zdmod(ji)
267      if(jk.ge.ikenvh(ji)) then
268         zb=1.0-0.18*pgamma(ji)-0.04*pgamma(ji)**2
269         zc=0.48*pgamma(ji)+0.3*pgamma(ji)**2
270         zconb=2.*ztmst*GKWAKE*psig(ji)/(4.*pvaror(ji))
271         zabsv=sqrt(PUM1(JI,JK)**2+PVM1(JI,JK)**2)/2.
272         zzd1=zb*cos(zpsi(ji,jk))**2+zc*sin(zpsi(ji,jk))**2
273         ratio=(cos(zpsi(ji,jk))**2+pgamma(ji)*sin(zpsi(ji,jk))**2)/
274     *   (pgamma(ji)*cos(zpsi(ji,jk))**2+sin(zpsi(ji,jk))**2)
275         zbet=max(0.,2.-1./ratio)*zconb*zzdep(ji,jk)*zzd1*zabsv
276         zdudt(ji)=-pum1(ji,jk)/ztmst
277         zdvdt(ji)=-pvm1(ji,jk)/ztmst
278         zdudt(ji)=zdudt(ji)*(zbet/(1.+zbet))
279         zdvdt(ji)=zdvdt(ji)*(zbet/(1.+zbet))
280      end if
281      PVOM(JI,JK)=ZDUDT(JI)
282      PVOL(JI,JK)=ZDVDT(JI)
283      ZUST=PUM1(JI,JK)+ZTMST*ZDUDT(JI)
284      ZVST=PVM1(JI,JK)+ZTMST*ZDVDT(JI)
285      ZDIS=0.5*(PUM1(JI,JK)**2+PVM1(JI,JK)**2-ZUST**2-ZVST**2)
286      ZDEDT(JI)=ZDIS/ZTMST
287      ZVIDIS(JI)=ZVIDIS(JI)+ZDIS*ZDELP
288      ZDTDT(JI)=ZDEDT(JI)/cpp
289      PTE(JI,JK)=ZDTDT(JI)
290
291  523 CONTINUE
292
293  524 CONTINUE
294C
295C
296
297      END SUBROUTINE ORODRAG
298     
299      END MODULE orodrag_mod
Note: See TracBrowser for help on using the repository browser.