source: trunk/LMDZ.MARS/libf/phymars/orodrag.F @ 1747

Last change on this file since 1747 was 1266, checked in by aslmd, 11 years ago

LMDZ.MARS
IMPORTANT CHANGE

  • Remove all reference/use of nlayermx and dimphys.h
  • Made use of automatic arrays whenever arrays are needed with dimension nlayer
  • Remove lots of obsolete reference to dimensions.h
  • Converted iono.h and param_v4.h into corresponding modules

(with embedded subroutine to allocate arrays)
(no arrays allocated if thermosphere not used)

  • Deleted param.h and put contents into module param_v4_h
  • Adapted testphys1d, newstart, etc...
  • Made DATA arrays in param_read to be initialized by subroutine

fill_data_thermos in module param_v4_h

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