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

Last change on this file since 1242 was 1047, checked in by emillour, 11 years ago

Mars GCM:

  • IMPORTANT CHANGE: Removed all reference/use of ngridmx (dimphys.h) in routines (necessary prerequisite to using parallel dynamics); in most cases this just means adding 'ngrid' as routine argument, and making local saved variables allocatable (and allocated at first call). In the process, had to convert many *.h files to equivalent modules: yomaer.h => yomaer_h.F90 , surfdat.h => surfdat_h.F90 , comsaison.h => comsaison_h.F90 , yomlw.h => yomlw_h.F90 , comdiurn.h => comdiurn_h.F90 , dimradmars.h => dimradmars_mod.F90 , comgeomfi.h => comgeomfi_h.F90, comsoil.h => comsoil_h.F90 , slope.h => slope_mod.F90
  • Also updated EOF routines, everything is now in eofdump_mod.F90
  • Removed unused routine lectfux.F (in dyn3d)

EM

File size: 5.6 KB
Line 
1      SUBROUTINE GWPROFIL
2     *         ( klon, klev
3     *         , kgwd ,kdx  , ktest
4     *         , KKCRIT, KKCRITH, KCRIT ,  kkenvh, kknu,kknu2
5     *         , PAPHM1, PRHO   , PSTAB , PTFR , PVPH , PRI , PTAU
6     *         , ptauf ,pdmod   , pnu   , psig ,pgamma, pvar      )
7
8C**** *GWPROFIL*
9C
10C     PURPOSE.
11C     --------
12C
13C**   INTERFACE.
14C     ----------
15C          FROM *GWDRAG*
16C
17C        EXPLICIT ARGUMENTS :
18C        --------------------
19C     ==== INPUTS ===
20C     ==== OUTPUTS ===
21C
22C        IMPLICIT ARGUMENTS :   NONE
23C        --------------------
24C
25C     METHOD:
26C     -------
27C     THE STRESS PROFILE FOR GRAVITY WAVES IS COMPUTED AS FOLLOWS:
28C     IT IS CONSTANT (NO GWD) AT THE LEVELS BETWEEN THE GROUND
29C     AND THE TOP OF THE BLOCKED LAYER (KKENVH).
30C     IT DECREASES LINEARLY WITH HEIGHTS FROM THE TOP OF THE
31C     BLOCKED LAYER TO 3*VAROR (kKNU), TO SIMULATES LEE WAVES OR
32C     NONLINEAR GRAVITY WAVE BREAKING.
33C     ABOVE IT IS CONSTANT, EXCEPT WHEN THE WAVE ENCOUNTERS A CRITICAL
34C     LEVEL (KCRIT) OR WHEN IT BREAKS.
35C     
36C
37C
38C     EXTERNALS.
39C     ----------
40C
41C
42C     REFERENCE.
43C     ----------
44C
45C        SEE ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE "I.F.S."
46C
47C     AUTHOR.
48C     -------
49C
50C     MODIFICATIONS.
51C     --------------
52C     PASSAGE OF THE NEW GWDRAG TO I.F.S. (F. LOTT, 22/11/93)
53C-----------------------------------------------------------------------
54      use dimradmars_mod, only: ndlo2
55      implicit none
56C
57
58C
59
60#include "dimensions.h"
61#include "dimphys.h"
62!#include "dimradmars.h"
63      integer klon,klev,kidia,kfdia
64#include "yoegwd.h"
65
66C-----------------------------------------------------------------------
67C
68C*       0.1   ARGUMENTS
69C              ---------
70C
71      integer kgwd
72      INTEGER KKCRIT(NDLO2),KKCRITH(NDLO2),KCRIT(NDLO2)
73     *       ,kdx(NDLO2),ktest(NDLO2)
74     *       ,kkenvh(NDLO2),kknu(NDLO2),kknu2(NDLO2)
75C
76      REAL PAPHM1(NDLO2,klev+1), PSTAB(NDLO2,klev+1),
77     *     PRHO  (NDLO2,klev+1), PVPH (NDLO2,klev+1),
78     *     PRI   (NDLO2,klev+1), PTFR (NDLO2), PTAU(NDLO2,klev+1),
79     *     ptauf (NDLO2,klev+1)
80     
81      REAL pdmod (NDLO2) , pnu (NDLO2) , psig(NDLO2),
82     *     pgamma(NDLO2) , pvar(NDLO2)
83     
84C-----------------------------------------------------------------------
85C
86C*       0.2   LOCAL ARRAYS
87C              ------------
88C
89c   declarations pour 'implicit none"
90      real zsqr,zalfa,zriw,zalpha,zb,zdel,zdz2n,zdelp,zdelpt
91
92      integer ji,jk,jl,ilevh
93      REAL ZDZ2 (NDLO2,nlayermx) , ZNORM(NDLO2) , zoro(NDLO2)
94      REAL ZTAU (NDLO2,nlayermx+1)
95C
96C-----------------------------------------------------------------------
97C
98C*         1.    INITIALIZATION
99C                --------------
100
101
102      kidia=1
103      kfdia=klon
104
105 100  CONTINUE
106C
107C
108C*    COMPUTATIONAL CONSTANTS.
109C     ------------- ----------
110C
111      ilevh=KLEV/3
112C
113      DO 400 ji=1,kgwd
114      jl=kdx(ji)
115      Zoro(JL)=Psig(JL)*Pdmod(JL)/4./max(pvar(jl),1.0)
116      ZTAU(JL,KKNU(JL)+1)=PTAU(JL,KKNU(JL)+1)
117      ZTAU(JL,KLEV+1)=PTAU(JL,KLEV+1)
118  400 CONTINUE
119C
120      DO 430 JK=KLEV,2,-1
121C
122C
123C*         4.1    CONSTANT WAVE STRESS UNTIL TOP OF THE
124C                 BLOCKING LAYER.
125  410 CONTINUE
126C
127      DO 411 ji=1,kgwd
128      jl=kdx(ji)
129           IF(JK.GE.KKNU2(JL)) THEN
130           PTAU(JL,JK)=ZTAU(JL,KLEV+1)
131           ENDIF
132 411  CONTINUE             
133C
134C*         4.15   CONSTANT SHEAR STRESS UNTIL THE TOP OF THE
135C                 LOW LEVEL FLOW LAYER.
136 415  CONTINUE
137C       
138C
139C*         4.2    WAVE DISPLACEMENT AT NEXT LEVEL.
140C
141  420 CONTINUE
142C
143      DO 421 ji=1,kgwd
144      jl=kdx(ji)
145      IF(JK.LT.KKNU2(JL)) THEN
146      ZNORM(JL)=gkdrag*PRHO(JL,JK)*SQRT(PSTAB(JL,JK))*PVPH(JL,JK)
147     *                                                    *zoro(jl)
148      ZDZ2(JL,JK)=PTAU(JL,JK+1)/max(ZNORM(JL),gssec)
149      ENDIF
150  421 CONTINUE
151C
152C*         4.3    WAVE RICHARDSON NUMBER, NEW WAVE DISPLACEMENT
153C*                AND STRESS:  BREAKING EVALUATION AND CRITICAL
154C                 LEVEL
155C
156      DO 431 ji=1,kgwd
157      jl=kdx(ji)
158          IF(JK.LT.KKNU2(JL)) THEN
159          IF((PTAU(JL,JK+1).LT.GTSEC).OR.(JK.LE.KCRIT(JL))) THEN
160            PTAU(JL,JK)=0.0
161          ELSE
162               ZSQR=SQRT(PRI(JL,JK))
163               ZALFA=SQRT(PSTAB(JL,JK)*ZDZ2(JL,JK))/PVPH(JL,JK)
164               ZRIW=PRI(JL,JK)*(1.-ZALFA)/(1+ZALFA*ZSQR)**2
165               IF(ZRIW.LT.GRCRIT) THEN
166                 ZDEL=4./ZSQR/GRCRIT+1./GRCRIT**2+4./GRCRIT
167                 ZB=1./GRCRIT+2./ZSQR
168                 ZALPHA=0.5*(-ZB+SQRT(ZDEL))
169                 ZDZ2N=(PVPH(JL,JK)*ZALPHA)**2/PSTAB(JL,JK)
170                 PTAU(JL,JK)=ZNORM(JL)*ZDZ2N
171               ELSE
172                 PTAU(JL,JK)=ZNORM(JL)*ZDZ2(JL,JK)
173               ENDIF
174            PTAU(JL,JK)=MIN(PTAU(JL,JK),PTAU(JL,JK+1))
175          ENDIF
176          ENDIF
177  431 CONTINUE
178 
179  430 CONTINUE
180  440 CONTINUE
181 
182c     write(*,*) 'ptau'
183c     write(*,99) ((ji,ilevh,ptau(ji,ilevh),ji=1,NDLO2),
184c    .                  ilevh=1,nlayermx+1)
185 99   FORMAT(i3,i3,f15.5)
186
187
188C  REORGANISATION OF THE STRESS PROFILE
189C  IF BREAKING OCCURS AT LOW LEVEL:
190
191      DO 530 ji=1,kgwd
192      jl=kdx(ji)
193      ZTAU(JL,KKENVH(JL))=PTAU(JL,KKENVH(JL))
194      ZTAU(JL,KKCRITH(JL))=PTAU(JL,KKCRITH(JL))
195 530  CONTINUE     
196
197      DO 531 JK=1,KLEV
198     
199      DO 532 ji=1,kgwd
200      jl=kdx(ji)
201               
202         IF(JK.GT.KKCRITH(JL).AND.JK.LT.KKENVH(JL))THEN
203
204          ZDELP=PAPHM1(JL,JK)-PAPHM1(JL,KKENVH(JL))
205          ZDELPT=PAPHM1(JL,KKCRITH(JL))-PAPHM1(JL,KKENVH(JL))
206          PTAU(JL,JK)=ZTAU(JL,KKENVH(JL)) +
207     .                (ZTAU(JL,KKCRITH(JL))-ZTAU(JL,KKENVH(JL)) )*
208     .                ZDELP/ZDELPT
209     
210        ENDIF
211           
212 532  CONTINUE   
213 
214 531  CONTINUE       
215
216      RETURN
217      END
Note: See TracBrowser for help on using the repository browser.