source: LMDZ4/trunk/libf/phylmd/wake.F @ 961

Last change on this file since 961 was 953, checked in by lmdzadmin, 16 years ago

On supprime variables pbase, ibas qui servent pas ; print sous clef JYG/FH
IM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 30.0 KB
Line 
1      Subroutine WAKE (p,ph,ppi,dtime,sigd_con
2     :                ,te0,qe0,omgb
3     :                ,dtdwn,dqdwn,amdwn,amup,dta,dqa
4     :                ,wdtPBL,wdqPBL,udtPBL,udqPBL
5     o                ,deltatw,deltaqw,dth,hw,sigmaw,wape,fip,gfl
6     o                ,dtls,dqls
7     o                ,ktopw,omgbdth,dp_omgb,wdens
8     o                ,tu,qu
9     o                ,dtKE,dqKE
10     o                ,dtPBL,dqPBL
11     o                ,omg,dp_deltomg,spread
12     o                ,Cstar,d_deltat_gw
13     o                ,d_deltatw2,d_deltaqw2)
14
15***************************************************************
16*                                                             *
17* WAKE                                                        *
18*      retour a un Pupper fixe                                *
19*                                                             *
20* written by   :  GRANDPEIX Jean-Yves   09/03/2000            *
21* modified by :   ROEHRIG Romain        01/29/2007            *
22***************************************************************
23c
24      USE dimphy
25      IMPLICIT none
26c============================================================================
27C
28C
29C   But : Decrire le comportement des poches froides apparaissant dans les
30C        grands systemes convectifs, et fournir l'energie disponible pour
31C        le declenchement de nouvelles colonnes convectives.
32C
33C   Variables d'etat : deltatw    : ecart de temperature wake-undisturbed area
34C                      deltaqw    : ecart d'humidite wake-undisturbed area
35C                      sigmaw     : fraction d'aire occupee par la poche.
36C
37C   Variable de sortie :
38c
39c                        wape : WAke Potential Energy
40c                        fip  : Front Incident Power (W/m2) - ALP
41c                        gfl  : Gust Front Length per unit area (m-1)
42C                        dtls : large scale temperature tendency due to wake
43C                        dqls : large scale humidity tendency due to wake
44C                        hw   : hauteur de la poche
45C                     dp_omgb : vertical gradient of large scale omega
46C                      omgbdth: flux of Delta_Theta transported by LS omega
47C                      dtKE   : differential heating (wake - unpertubed)
48C                      dqKE   : differential moistening (wake - unpertubed)
49C                      omg    : Delta_omg =vertical velocity diff. wake-undist. (Pa/s)
50C                 dp_deltomg  : vertical gradient of omg (s-1)
51C                     spread  : spreading term in dt_wake and dq_wake
52C                 deltatw     : updated temperature difference (T_w-T_u).
53C                 deltaqw     : updated humidity difference (q_w-q_u).
54C                 sigmaw      : updated wake fractional area.
55C                 d_deltat_gw : delta T tendency due to GW
56c
57C   Variables d'entree :
58c
59c                        aire : aire de la maille
60c                        te0  : temperature dans l'environnement  (K)
61C                        qe0  : humidite dans l'environnement     (kg/kg)
62C                        omgb : vitesse verticale moyenne sur la maille (Pa/s)
63C                        dtdwn: source de chaleur due aux descentes (K/s)
64C                        dqdwn: source d'humidite due aux descentes (kg/kg/s)
65C                        dta  : source de chaleur due courants satures et detrain  (K/s)
66C                        dqa  : source d'humidite due aux courants satures et detra (kg/kg/s)
67C                        amdwn: flux de masse total des descentes, par unite de
68C                                surface de la maille (kg/m2/s)
69C                        amup : flux de masse total des ascendances, par unite de
70C                                surface de la maille (kg/m2/s)
71C                        p    : pressions aux milieux des couches (Pa)
72C                        ph   : pressions aux interfaces (Pa)
73C                        ppi  : (p/p_0)**kapa (adim)
74C                        dtime: increment temporel (s)
75c
76C   Variables internes :
77c
78c                        rhow : masse volumique de la poche froide
79C                        rho  : environment density at P levels
80C                        rhoh : environment density at Ph levels
81C                        te   : environment temperature | may change within
82C                        qe   : environment humidity    | sub-time-stepping
83C                        the  : environment potential temperature
84C                        thu  : potential temperature in undisturbed area
85C                        tu   :  temperature  in undisturbed area
86C                        qu   : humidity in undisturbed area
87C                      dp_omgb: vertical gradient og LS omega
88C                      omgbw  : wake average vertical omega
89C                     dp_omgbw: vertical gradient of omgbw
90C                      omgbdq : flux of Delta_q transported by LS omega
91C                        dth  : potential temperature diff. wake-undist.
92C                        th1  : first pot. temp. for vertical advection (=thu)
93C                        th2  : second pot. temp. for vertical advection (=thw)
94C                        q1   : first humidity for vertical advection
95C                        q2   : second humidity for vertical advection
96C                     d_deltatw   : terme de redistribution pour deltatw
97C                     d_deltaqw   : terme de redistribution pour deltaqw
98C                      deltatw0   : deltatw initial
99C                      deltaqw0   : deltaqw initial
100C                      hw0    : hw initial
101C                      sigmaw0: sigmaw initial
102C                      amflux : horizontal mass flux through wake boundary
103C                      wdens  : number of wakes per unit area (3D) or per
104C                               unit length (2D)
105C                      Tgw    : 1 sur la période de onde de gravité
106c                      Cgw    : vitesse de propagation de onde de gravité
107c                      LL     : distance entre 2 poches
108
109c-------------------------------------------------------------------------
110c          Déclaration de variables
111c-------------------------------------------------------------------------
112
113#include "dimensions.h"
114cccc#include "dimphy.h"
115#include "YOMCST.h"
116#include "cvthermo.h"
117#include "iniprint.h"
118
119c Arguments en entree
120c--------------------
121
122      REAL p(klev),ph(klev+1),ppi(klev)
123      REAL dtime
124      REAL te0(klev),qe0(klev)
125      REAL omgb(klev+1)
126      REAL dtdwn(klev), dqdwn(klev)
127      REAL wdtPBL(klev),wdqPBL(klev)
128      REAL udtPBL(klev),udqPBL(klev)
129      REAL amdwn(klev), amup(klev)
130      REAL dta(klev), dqa(klev)
131      REAL sigd_con
132
133c Sorties
134c--------
135
136      REAL deltatw(klev), deltaqw(klev), dth(klev)
137      REAL tu(klev), qu(klev)
138      REAL dtls(klev), dqls(klev)
139      REAL dtKE(klev), dqKE(klev)
140      REAL dtPBL(klev), dqPBL(klev)
141      REAL spread(klev)
142      REAL d_deltatgw(klev)
143      REAL d_deltatw2(klev), d_deltaqw2(klev)
144      REAL omgbdth(klev+1), omg(klev+1)
145      REAL dp_omgb(klev), dp_deltomg(klev)
146      REAL d_deltat_gw(klev)
147      REAL hw, sigmaw, wape, fip, gfl, Cstar
148      INTEGER ktopw
149
150c Variables internes
151c-------------------
152
153c Variables à fixer
154      REAL ALON
155      REAL coefgw
156      REAL wdens0, wdens
157      REAL stark
158      REAL alpk
159      REAL delta_t_min
160      REAL Pupper
161      INTEGER nsub
162      REAL dtimesub
163      REAL sigmad, hwmin
164
165c Variables de sauvegarde
166      REAL deltatw0(klev)
167      REAL deltaqw0(klev)
168      REAL te(klev), qe(klev)
169      REAL sigmaw0, sigmaw1
170
171c Variables pour les GW
172      REAL LL
173      REAL N2(klev)
174      REAL Cgw(klev)
175      REAL Tgw(klev)
176
177c Variables liées au calcul de hw
178      REAL ptop_provis, ptop, ptop_new
179      REAL sum_dth
180      REAL dthmin
181      REAL z, dz, hw0
182      INTEGER ktop, kupper
183
184c Autres variables internes
185      INTEGER isubstep, k
186
187      REAL sum_thu, sum_tu, sum_qu,sum_thvu
188      REAL sum_dq, sum_rho
189      REAL sum_dtdwn, sum_dqdwn
190      REAL av_thu, av_tu, av_qu, av_thvu
191      REAL av_dth, av_dq, av_rho
192      REAL av_dtdwn, av_dqdwn
193
194      REAL rho(klev), rhoh(klev+1), rhow(klev)
195      REAL rhow_moyen(klev)
196      REAL zh(klev), zhh(klev+1)
197      REAL epaisseur1(klev), epaisseur2(klev)
198
199      REAL the(klev), thu(klev)
200
201      REAL d_deltatw(klev), d_deltaqw(klev)
202
203      REAL omgbw(klev+1), omgtop
204      REAL dp_omgbw(klev)
205      REAL ztop, dztop
206      REAL alpha_up(klev)
207     
208      REAL RRe1, RRe2, RRd1, RRd2
209      REAL Th1(klev), Th2(klev), q1(klev), q2(klev)
210      REAL D_Th1(klev), D_Th2(klev), D_dth(klev)
211      REAL D_q1(klev), D_q2(klev), D_dq(klev)
212      REAL omgbdq(klev)
213
214      REAL ff, gg
215      REAL wape2, Cstar2, heff
216
217      REAL Crep(klev)
218      REAL Crep_upper, Crep_sol
219
220C-------------------------------------------------------------------------
221c         Initialisations
222c-------------------------------------------------------------------------
223
224c      print*, 'wake initialisations'
225
226c   Essais d'initialisation avec sigmaw = 0.02 et hw = 10.
227c-------------------------------------------------------------------------
228
229      DATA sigmad, hwmin /.02,10./
230
231C Longueur de maille (en m)
232c-------------------------------------------------------------------------
233
234c      ALON = 3.e5
235      ALON = 1.e6
236
237
238C Configuration de coefgw,stark,wdens (22/02/06 by YU Jingmei)
239c
240c      coefgw : Coefficient pour les ondes de gravité
241c       stark : Coefficient k dans Cstar=k*sqrt(2*WAPE)
242c       wdens : Densité de poche froide par maille
243c-------------------------------------------------------------------------
244
245      coefgw=10
246c      coefgw=1
247c      wdens0 = 1.0/(alon**2)   
248      wdens = 1.0/(alon**2)       
249      stark = 0.50
250cCRtest
251      alpk=0.1
252c      alpk = 1.0
253c      alpk = 0.5
254c      alpk = 0.05
255      Crep_upper=0.9
256      Crep_sol=1.0
257
258
259C Minimum value for |T_wake - T_undist|. Used for wake top definition
260c-------------------------------------------------------------------------
261
262      delta_t_min = 0.2
263
264
265C 1. - Save initial values and initialize tendencies
266C --------------------------------------------------
267
268      DO k=1,klev
269        deltatw0(k) = deltatw(k)
270        deltaqw0(k)= deltaqw(k)
271        te(k) = te0(k)
272        qe(k) = qe0(k)
273        dtls(k) = 0.
274        dqls(k) = 0.
275        d_deltat_gw(k)=0.
276        d_deltatw2(k)=0.
277        d_deltaqw2(k)=0.
278      ENDDO
279c      sigmaw1=sigmaw
280c      IF (sigd_con.GT.sigmaw1) THEN
281c      print*, 'sigmaw,sigd_con', sigmaw, sigd_con
282c      ENDIF
283      sigmaw = max(sigmaw,sigd_con)
284      sigmaw = max(sigmaw,sigmad)
285      sigmaw = min(sigmaw,0.99)
286      sigmaw0 = sigmaw
287c      wdens=wdens0/(10.*sigmaw)
288c      IF (sigd_con.GT.sigmaw1) THEN
289c      print*, 'sigmaw1,sigd1', sigmaw, sigd_con
290c      ENDIF
291
292C 2. - Prognostic part
293C =========================================================
294
295c      print *, 'prognostic wake computation'
296
297
298C 2.1 - Undisturbed area and Wake integrals
299C ---------------------------------------------------------
300
301      z = 0.
302      ktop=0
303      kupper = 0
304      sum_thu = 0.
305      sum_tu = 0.
306      sum_qu = 0.
307      sum_thvu = 0.
308      sum_dth = 0.
309      sum_dq = 0.
310      sum_rho = 0.
311      sum_dtdwn = 0.
312      sum_dqdwn = 0.
313
314      av_thu = 0.
315      av_tu =0.
316      av_qu =0.
317      av_thvu = 0.
318      av_dth = 0.
319      av_dq = 0.
320      av_rho =0.
321      av_dtdwn =0.
322      av_dqdwn = 0.
323
324C Potential temperatures and humidity
325c----------------------------------------------------------
326
327      DO k =1,klev
328        rho(k) = p(k)/(rd*te(k))
329        IF(k .eq. 1) THEN
330          rhoh(k) = ph(k)/(rd*te(k))
331          zhh(k)=0
332        ELSE
333          rhoh(k) = ph(k)*2./(rd*(te(k)+te(k-1)))
334          zhh(k)=(ph(k)-ph(k-1))/(-rhoh(k)*RG)+zhh(k-1)
335        ENDIF
336        the(k) = te(k)/ppi(k)
337        thu(k) = (te(k) - deltatw(k)*sigmaw)/ppi(k)
338        tu(k) = te(k) - deltatw(k)*sigmaw
339        qu(k)  =  qe(k) - deltaqw(k)*sigmaw
340        rhow(k) = p(k)/(rd*(te(k)+deltatw(k)))
341        dth(k) = deltatw(k)/ppi(k)
342        LL = (1-sqrt(sigmaw))/sqrt(wdens)       
343      ENDDO
344       
345      DO k = 1, klev-1
346        IF(k.eq.1) THEN
347          N2(k)=0
348        ELSE
349          N2(k)=max(0.,-RG**2/the(k)*rho(k)*(the(k+1)-the(k-1))
350     $           /(p(k+1)-p(k-1)))
351        ENDIF
352        ZH(k)=(zhh(k)+zhh(k+1))/2
353
354        Cgw(k)=sqrt(N2(k))*ZH(k)
355        Tgw(k)=coefgw*Cgw(k)/LL
356      ENDDO
357         
358      N2(klev)=0
359      ZH(klev)=0
360      Cgw(klev)=0
361      Tgw(klev)=0
362
363c  Calcul de la masse volumique moyenne de la colonne
364c-----------------------------------------------------------------
365
366      DO k=1,klev
367        epaisseur1(k)=0.
368        epaisseur2(k)=0.
369      ENDDO
370
371      epaisseur1(1)= -(Ph(2)-Ph(1))/(rho(1)*rg)+1.
372      epaisseur2(1)= -(Ph(2)-Ph(1))/(rho(1)*rg)+1.
373      rhow_moyen(1) = rhow(1)
374
375      DO k = 2, klev
376        epaisseur1(k)= -(Ph(k+1)-Ph(k))/(rho(k)*rg) +1.
377        epaisseur2(k)=epaisseur2(k-1)+epaisseur1(k)
378        rhow_moyen(k) = (rhow_moyen(k-1)*epaisseur2(k-1)+
379     $                 rhow(k)*epaisseur1(k))/epaisseur2(k)
380      ENDDO
381
382
383C Choose an integration bound well above wake top
384c-----------------------------------------------------------------
385
386c       Pupper = 50000.  ! melting level
387       Pupper = 60000.
388c       Pupper = 70000.
389
390
391C    Determine Wake top pressure (Ptop) from buoyancy integral
392C-----------------------------------------------------------------
393
394c-1/ Pressure of the level where dth becomes less than delta_t_min.
395
396      Ptop_provis=ph(1)
397      DO k= 2,klev
398        IF (dth(k) .GT. -delta_t_min .and.
399     $      dth(k-1).LT. -delta_t_min) THEN
400          Ptop_provis = ((dth(k)+delta_t_min)*p(k-1)
401     $          - (dth(k-1)+delta_t_min)*p(k)) /(dth(k) - dth(k-1))
402          GO TO 25
403        ENDIF
404      ENDDO
40525    CONTINUE
406
407c-2/ dth integral
408
409      sum_dth = 0.
410      dthmin = -delta_t_min
411      z = 0.
412
413      DO k = 1,klev
414        dz = -(max(ph(k+1),Ptop_provis)-Ph(k))/(rho(k)*rg)
415        IF (dz .le. 0) GO TO 40
416        z = z+dz
417        sum_dth = sum_dth + dth(k)*dz
418        dthmin = min(dthmin,dth(k))
419      ENDDO
42040    CONTINUE
421
422c-3/ height of triangle with area= sum_dth and base = dthmin
423
424      hw0 = 2.*sum_dth/min(dthmin,-0.5)
425      hw0 = max(hwmin,hw0)
426
427c-4/ now, get Ptop
428
429      z = 0.
430      ptop = ph(1)
431
432      DO k = 1,klev
433        dz = min(-(ph(k+1)-Ph(k))/(rho(k)*rg),hw0-z)
434        IF (dz .le. 0) GO TO 45
435        z = z+dz
436        Ptop = Ph(k)-rho(k)*rg*dz
437      ENDDO
43845    CONTINUE
439
440
441C-5/ Determination de ktop et kupper
442
443      DO k=klev,1,-1
444        IF (ph(k+1) .lt. ptop) ktop=k
445        IF (ph(k+1) .lt. pupper) kupper=k
446      ENDDO
447
448c-6/ Correct ktop and ptop
449
450      Ptop_new=ptop
451      DO k= ktop,2,-1
452        IF (dth(k) .GT. -delta_t_min .and.
453     $      dth(k-1).LT. -delta_t_min) THEN
454          Ptop_new = ((dth(k)+delta_t_min)*p(k-1)
455     $          - (dth(k-1)+delta_t_min)*p(k)) /(dth(k) - dth(k-1))
456          GO TO 225
457        ENDIF
458      ENDDO
459225   CONTINUE
460
461      ptop = ptop_new
462
463      DO k=klev,1,-1
464        IF (ph(k+1) .lt. ptop) ktop=k
465      ENDDO
466
467c Set deltatw & deltaqw to 0 above kupper
468c-----------------------------------------------------------
469
470      DO k = kupper,klev
471        deltatw(k) = 0.
472        deltaqw(k) = 0.
473      ENDDO
474
475
476C Vertical gradient of LS omega
477C------------------------------------------------------------
478
479      DO k = 1,kupper
480        dp_omgb(k) = (omgb(k+1) - omgb(k))/(ph(k+1)-ph(k))
481      ENDDO
482
483
484C Integrals (and wake top level number)
485C -----------------------------------------------------------
486
487C Initialize sum_thvu to 1st level virt. pot. temp.
488
489      z = 1.
490      dz = 1.
491      sum_thvu =  thu(1)*(1.+eps*qu(1))*dz
492      sum_dth = 0.
493
494      DO k = 1,klev
495        dz = -(max(ph(k+1),Ptop)-Ph(k))/(rho(k)*rg)
496        IF (dz .LE. 0) GO TO 50
497        z = z+dz
498        sum_thu = sum_thu + thu(k)*dz
499        sum_tu = sum_tu + tu(k)*dz
500        sum_qu = sum_qu + qu(k)*dz
501        sum_thvu = sum_thvu + thu(k)*(1.+eps*qu(k))*dz
502        sum_dth = sum_dth + dth(k)*dz
503        sum_dq = sum_dq + deltaqw(k)*dz
504        sum_rho = sum_rho + rhow(k)*dz
505        sum_dtdwn = sum_dtdwn + dtdwn(k)*dz
506        sum_dqdwn = sum_dqdwn + dqdwn(k)*dz
507      ENDDO
50850    CONTINUE
509
510      hw0 = z
511
512C 2.1 - WAPE and mean forcing computation
513C-------------------------------------------------------------
514
515C Means
516
517      av_thu = sum_thu/hw0
518      av_tu = sum_tu/hw0
519      av_qu = sum_qu/hw0
520      av_thvu = sum_thvu/hw0
521c      av_thve = sum_thve/hw0
522      av_dth = sum_dth/hw0
523      av_dq = sum_dq/hw0
524      av_rho = sum_rho/hw0
525      av_dtdwn = sum_dtdwn/hw0
526      av_dqdwn = sum_dqdwn/hw0
527
528      wape = - rg*hw0*(av_dth
529     $     + eps*(av_thu*av_dq+av_dth*av_qu+av_dth*av_dq ))/av_thvu
530
531C 2.2 Prognostic variable update
532C ------------------------------------------------------------
533
534C Filter out bad wakes
535
536      IF ( wape .LT. 0.) THEN
537        if(prt_level.ge.10) print*,'wape<0'
538        wape = 0.
539        hw = hwmin
540        sigmaw = max(sigmad,sigd_con)
541        fip = 0.
542        DO k = 1,klev
543          deltatw(k) = 0.
544          deltaqw(k) = 0.
545          dth(k) = 0.
546        ENDDO
547      ELSE
548        if(prt_level.ge.10) print*,'wape>0'
549        Cstar = stark*sqrt(2.*wape)
550      ENDIF
551
552C------------------------------------------------------------------
553C    Sub-time-stepping
554C------------------------------------------------------------------
555
556c      nsub=36
557      nsub=10
558      dtimesub=dtime/nsub
559
560c------------------------------------------------------------
561      DO isubstep = 1,nsub
562c------------------------------------------------------------
563
564c        print*,'---------------','substep=',isubstep,'-------------'
565
566c  Evolution of sigmaw
567
568
569        gfl = 2.*sqrt(3.14*wdens*sigmaw)           
570
571        sigmaw =sigmaw + gfl*Cstar*dtimesub
572        sigmaw =min(sigmaw,0.99)     !!!!!!!!
573c        wdens = wdens0/(10.*sigmaw)
574c        sigmaw =max(sigmaw,sigd_con)
575c        sigmaw =max(sigmaw,sigmad)
576
577c calcul de la difference de vitesse verticale poche - zone non perturbee
578
579        z= 0.
580        dp_deltomg(1:klev)=0.
581        omg(1:klev+1)=0.
582
583        omg(1) = 0.
584        dp_deltomg(1) = -(gfl*Cstar)/(sigmaw * (1-sigmaw))
585
586        DO k=2,ktop
587          dz = -(Ph(k)-Ph(k-1))/(rho(k-1)*rg)
588          z = z+dz
589          dp_deltomg(k)= dp_deltomg(1)
590          omg(k)= dp_deltomg(1)*z
591        ENDDO
592
593        dztop=-(Ptop-Ph(ktop))/(rho(ktop)*rg)
594        ztop = z+dztop
595        omgtop=dp_deltomg(1)*ztop
596
597
598c Conversion de la vitesse verticale de m/s a Pa/s
599
600        omgtop = -rho(ktop)*rg*omgtop
601        dp_deltomg(1) = omgtop/(ptop-ph(1))
602
603        DO k = 1,ktop
604          omg(k) = - rho(k)*rg*omg(k)
605          dp_deltomg(k) = dp_deltomg(1)
606        ENDDO
607
608c   raccordement lineaire de omg de ptop a pupper
609
610      IF (kupper .GT. ktop) THEN
611        omg(kupper+1) = - Rg*amdwn(kupper+1)/sigmaw
612     $                + Rg*amup(kupper+1)/(1.-sigmaw)
613        dp_deltomg(kupper) = (omgtop-omg(kupper+1))/(Ptop-Pupper)
614        DO k=ktop+1,kupper
615          dp_deltomg(k) = dp_deltomg(kupper)
616          omg(k) = omgtop+(ph(k)-Ptop)*dp_deltomg(kupper)
617        ENDDO
618      ENDIF
619
620c   Compute wake average vertical velocity omgbw
621
622      DO k = 1,klev+1
623        omgbw(k) = omgb(k)+(1.-sigmaw)*omg(k)
624      ENDDO
625
626c  and its vertical gradient dp_omgbw
627
628      DO k = 1,klev
629        dp_omgbw(k) = (omgbw(k+1)-omgbw(k))/(ph(k+1)-ph(k))
630      ENDDO
631
632
633c  Upstream coefficients for omgb velocity
634c--    (alpha_up(k) is the coefficient of the value at level k)
635c--    (1-alpha_up(k) is the coefficient of the value at level k-1)
636
637      DO k = 1,klev
638       alpha_up(k) = 0.
639       IF (omgb(k) .GT. 0.) alpha_up(k) = 1.
640      ENDDO
641
642c  Matrix expressing [The,deltatw] from  [Th1,Th2]
643
644      RRe1 = 1.-sigmaw
645      RRe2 = sigmaw
646      RRd1 = -1.
647      RRd2 = 1.
648
649c Get [Th1,Th2], dth and [q1,q2]
650
651      DO k = 1,kupper+1
652        dth(k) = deltatw(k)/ppi(k)
653        Th1(k) = the(k) - sigmaw     *dth(k)   ! undisturbed area
654        Th2(k) = the(k) + (1.-sigmaw)*dth(k)   ! wake
655        q1(k) = qe(k) - sigmaw     *deltaqw(k) ! undisturbed area
656        q2(k) = qe(k) + (1.-sigmaw)*deltaqw(k) ! wake
657      ENDDO
658
659      D_Th1(1) = 0.
660      D_Th2(1) = 0.
661      D_dth(1) = 0.
662      D_q1(1) = 0.
663      D_q2(1) = 0.
664      D_dq(1) = 0.
665
666      DO k = 2,kupper+1 !   loop on interfaces
667        D_Th1(k) = Th1(k-1)-Th1(k)
668        D_Th2(k) = Th2(k-1)-Th2(k)
669        D_dth(k) = dth(k-1)-dth(k)
670        D_q1(k) = q1(k-1)-q1(k)
671        D_q2(k) = q2(k-1)-q2(k)
672        D_dq(k) = deltaqw(k-1)-deltaqw(k)
673      ENDDO
674
675      omgbdth(1) = 0.
676      omgbdq(1) = 0.
677
678      DO k = 2,kupper+1  !   loop on interfaces
679        omgbdth(k) = omgb(k)*(    dth(k-1) -     dth(k))
680        omgbdq(k)  = omgb(k)*(deltaqw(k-1) - deltaqw(k))
681      ENDDO
682
683
684c-----------------------------------------------------------------
685      DO k=1,kupper-1
686c-----------------------------------------------------------------
687c
688c   Compute redistribution (advective) term
689c
690         d_deltatw(k) =
691     $             dtimesub/(Ph(k)-Ph(k+1))*(
692     $       RRd1*omg(k  )*sigmaw     *D_Th1(k)
693     $      -RRd2*omg(k+1)*(1.-sigmaw)*D_Th2(k+1)
694     $      -(1.-alpha_up(k))*omgbdth(k) - alpha_up(k+1)*omgbdth(k+1)
695     $                      )*ppi(k)
696c         print*,'d_deltatw=',d_deltatw(k)
697c
698         d_deltaqw(k) =
699     $             dtimesub/(Ph(k)-Ph(k+1))*(
700     $       RRd1*omg(k  )*sigmaw     *D_q1(k)
701     $      -RRd2*omg(k+1)*(1.-sigmaw)*D_q2(k+1)
702     $      -(1.-alpha_up(k))*omgbdq(k) - alpha_up(k+1)*omgbdq(k+1)
703     $                      )
704c         print*,'d_deltaqw=',d_deltaqw(k)
705c
706c   and increment large scale tendencies
707c
708         dtls(k) = dtls(k) +
709     $               dtimesub*(
710     $        ( RRe1*omg(k  )*sigmaw     *D_Th1(k)
711     $         -RRe2*omg(k+1)*(1.-sigmaw)*D_Th2(k+1) )
712     $               /(Ph(k)-Ph(k+1))
713     $         -sigmaw*(1.-sigmaw)*dth(k)*dp_deltomg(k)
714     $                      )*ppi(k)
715c         print*,'dtls=',dtls(k)
716c
717         dqls(k) = dqls(k) +
718     $               dtimesub*(
719     $        ( RRe1*omg(k  )*sigmaw     *D_q1(k)
720     $         -RRe2*omg(k+1)*(1.-sigmaw)*D_q2(k+1) )
721     $               /(Ph(k)-Ph(k+1))
722     $         -sigmaw*(1.-sigmaw)*deltaqw(k)*dp_deltomg(k)
723     $                      )
724c         print*,'dqls=',dqls(k)
725
726c-------------------------------------------------------------------
727      ENDDO
728c------------------------------------------------------------------
729
730C   Increment state variables
731
732      DO k = 1,kupper-1
733
734c Coefficient de répartition
735
736        Crep(k)=Crep_sol*(ph(kupper)-ph(k))/(ph(kupper)-ph(1))
737        Crep(k)=Crep(k)+Crep_upper*(ph(1)-ph(k))/(p(1)-ph(kupper))
738       
739
740c Reintroduce compensating subsidence term.
741
742c        dtKE(k)=(dtdwn(k)*Crep(k))/sigmaw
743c        dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k))
744c     .                   /(1-sigmaw)
745c        dqKE(k)=(dqdwn(k)*Crep(k))/sigmaw
746c        dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k))
747c     .                   /(1-sigmaw)
748c
749c        dtKE(k)=(dtdwn(k)*Crep(k)+(1-Crep(k))*dta(k))/sigmaw
750c        dtKE(k)=dtKE(k)-(dtdwn(k)*(1-Crep(k))+dta(k)*Crep(k))
751c     .                   /(1-sigmaw)
752c        dqKE(k)=(dqdwn(k)*Crep(k)+(1-Crep(k))*dqa(k))/sigmaw
753c        dqKE(k)=dqKE(k)-(dqdwn(k)*(1-Crep(k))+dqa(k)*Crep(k))
754c     .                   /(1-sigmaw)
755
756        dtKE(k)=(dtdwn(k)/sigmaw - dta(k)/(1.-sigmaw))
757        dqKE(k)=(dqdwn(k)/sigmaw - dqa(k)/(1.-sigmaw))
758c        print*,'dtKE=',dtKE(k)
759c        print*,'dqKE=',dqKE(k)
760c
761        dtPBL(k)=(wdtPBL(k)/sigmaw - udtPBL(k)/(1.-sigmaw))
762        dqPBL(k)=(wdqPBL(k)/sigmaw - udqPBL(k)/(1.-sigmaw))
763c
764        spread(k) = (1.-sigmaw)*dp_deltomg(k)+gfl*Cstar/sigmaw
765c        print*,'spread=',spread(k)
766
767
768c ajout d'un effet onde de gravité -Tgw(k)*deltatw(k) 03/02/06 YU Jingmei
769
770        d_deltat_gw(k)=d_deltat_gw(k)-Tgw(k)*deltatw(k)* dtimesub
771c        print*,'d_delta_gw=',d_deltat_gw(k)
772        ff=d_deltatw(k)/dtimesub
773
774c Sans GW
775c
776c        deltatw(k)=deltatw(k)+dtimesub*(ff+dtKE(k)-spread(k)*deltatw(k))
777c
778c GW formule 1
779c
780c        deltatw(k) = deltatw(k)+dtimesub*
781c     $         (ff+dtKE(k) - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
782c
783c GW formule 2
784
785        IF (dtimesub*Tgw(k).lt.1.e-10) THEN
786          deltatw(k) = deltatw(k)+dtimesub*
787     $          (ff+dtKE(k)+dtPBL(k)
788     $          - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
789        ELSE
790           deltatw(k) = deltatw(k)+1/Tgw(k)*(1-exp(-dtimesub*Tgw(k)))*
791     $          (ff+dtKE(k)+dtPBL(k)
792     $          - spread(k)*deltatw(k)-Tgw(k)*deltatw(k))
793        ENDIF
794   
795        dth(k) = deltatw(k)/ppi(k)
796
797        gg=d_deltaqw(k)/dtimesub
798
799       deltaqw(k) = deltaqw(k) +
800     $         dtimesub*(gg+ dqKE(k)+dqPBL(k) - spread(k)*deltaqw(k))
801
802       d_deltatw2(k)=d_deltatw2(k)+d_deltatw(k)
803       d_deltaqw2(k)=d_deltaqw2(k)+d_deltaqw(k)
804      ENDDO
805
806C   And update large scale variables
807
808      DO k = 1,kupper
809        te(k) = te0(k) + dtls(k)
810        qe(k) = qe0(k) + dqls(k)
811        the(k) = te(k)/ppi(k)
812      ENDDO
813
814c     Determine Ptop from buoyancy integral
815c----------------------------------------------------------------------
816
817c-1/ Pressure of the level where dth changes sign.
818
819      Ptop_provis=ph(1)
820
821      DO k= 2,klev
822        IF (dth(k) .GT. -delta_t_min .and.
823     $      dth(k-1).LT. -delta_t_min) THEN
824          Ptop_provis = ((dth(k)+delta_t_min)*p(k-1)
825     $          - (dth(k-1)+delta_t_min)*p(k)) /(dth(k) - dth(k-1))
826        GO TO 65
827        ENDIF
828      ENDDO
82965    CONTINUE
830
831c-2/ dth integral
832
833      sum_dth = 0.
834      dthmin = -delta_t_min
835      z = 0.
836
837      DO k = 1,klev
838        dz = -(max(ph(k+1),Ptop_provis)-Ph(k))/(rho(k)*rg)
839        IF (dz .le. 0) GO TO 70
840        z = z+dz
841        sum_dth = sum_dth + dth(k)*dz
842        dthmin = min(dthmin,dth(k))
843      ENDDO
84470    CONTINUE
845
846c-3/ height of triangle with area= sum_dth and base = dthmin
847
848      hw = 2.*sum_dth/min(dthmin,-0.5)
849      hw = max(hwmin,hw)
850
851c-4/ now, get Ptop
852
853      ktop = 0
854      z=0.
855
856      DO k = 1,klev
857        dz = min(-(ph(k+1)-Ph(k))/(rho(k)*rg),hw-z)
858        IF (dz .le. 0) GO TO 75
859        z = z+dz
860        Ptop = Ph(k)-rho(k)*rg*dz
861        ktop = k
862      ENDDO
86375    CONTINUE
864
865c-5/Correct ktop and ptop
866
867      Ptop_new=ptop
868
869      DO k= ktop,2,-1
870        IF (dth(k) .GT. -delta_t_min .and.
871     $      dth(k-1).LT. -delta_t_min) THEN
872          Ptop_new = ((dth(k)+delta_t_min)*p(k-1)
873     $          - (dth(k-1)+delta_t_min)*p(k)) /(dth(k) - dth(k-1))
874          GO TO 275
875        ENDIF
876      ENDDO
877275   CONTINUE
878
879      ptop = ptop_new
880
881      DO k=klev,1,-1
882        IF (ph(k+1) .LT. ptop) ktop=k
883      ENDDO
884
885c-6/ Set deltatw & deltaqw to 0 above kupper
886
887      DO k = kupper,klev
888        deltatw(k) = 0.
889        deltaqw(k) = 0.
890      ENDDO
891
892c------------------------------------------------------------------
893      ENDDO      ! end sub-timestep loop
894C -----------------------------------------------------------------
895
896c   Get back to tendencies per second
897
898      DO k = 1,kupper-1
899        dtls(k) = dtls(k)/dtime
900        dqls(k) = dqls(k)/dtime
901        d_deltatw2(k)=d_deltatw2(k)/dtime
902        d_deltaqw2(k)=d_deltaqw2(k)/dtime
903        d_deltat_gw(k) = d_deltat_gw(k)/dtime
904      ENDDO
905
906C 2.1 - Undisturbed area and Wake integrals
907C ---------------------------------------------------------
908
909      z = 0.
910      sum_thu = 0.
911      sum_tu = 0.
912      sum_qu = 0.
913      sum_thvu = 0.
914      sum_dth = 0.
915      sum_dq = 0.
916      sum_rho = 0.
917      sum_dtdwn = 0.
918      sum_dqdwn = 0.
919
920      av_thu = 0.
921      av_tu =0.
922      av_qu =0.
923      av_thvu = 0.
924      av_dth = 0.
925      av_dq = 0.
926      av_rho =0.
927      av_dtdwn =0.
928      av_dqdwn = 0.
929
930C Potential temperatures and humidity
931c----------------------------------------------------------
932
933      DO k =1,klev
934        rho(k) = p(k)/(rd*te(k))
935        IF(k .eq. 1) THEN
936          rhoh(k) = ph(k)/(rd*te(k))
937          zhh(k)=0
938        ELSE
939          rhoh(k) = ph(k)*2./(rd*(te(k)+te(k-1)))
940          zhh(k)=(ph(k)-ph(k-1))/(-rhoh(k)*RG)+zhh(k-1)
941        ENDIF
942        the(k) = te(k)/ppi(k)
943        thu(k) = (te(k) - deltatw(k)*sigmaw)/ppi(k)
944        tu(k) = te(k) - deltatw(k)*sigmaw
945        qu(k)  =  qe(k) - deltaqw(k)*sigmaw
946        rhow(k) = p(k)/(rd*(te(k)+deltatw(k)))
947        dth(k) = deltatw(k)/ppi(k)
948       
949      ENDDO
950
951C Integrals (and wake top level number)
952C -----------------------------------------------------------
953
954C Initialize sum_thvu to 1st level virt. pot. temp.
955
956      z = 1.
957      dz = 1.
958      sum_thvu =  thu(1)*(1.+eps*qu(1))*dz
959      sum_dth = 0.
960
961      DO k = 1,klev
962        dz = -(max(ph(k+1),Ptop)-Ph(k))/(rho(k)*rg)
963
964        IF (dz .LE. 0) GO TO 51
965        z = z+dz
966        sum_thu = sum_thu + thu(k)*dz
967        sum_tu = sum_tu + tu(k)*dz
968        sum_qu = sum_qu + qu(k)*dz
969        sum_thvu = sum_thvu + thu(k)*(1.+eps*qu(k))*dz
970        sum_dth = sum_dth + dth(k)*dz
971        sum_dq = sum_dq + deltaqw(k)*dz
972        sum_rho = sum_rho + rhow(k)*dz
973        sum_dtdwn = sum_dtdwn + dtdwn(k)*dz
974        sum_dqdwn = sum_dqdwn + dqdwn(k)*dz
975      ENDDO
976 51   CONTINUE
977
978      hw0 = z
979
980C 2.1 - WAPE and mean forcing computation
981C-------------------------------------------------------------
982
983C Means
984
985      av_thu = sum_thu/hw0
986      av_tu = sum_tu/hw0
987      av_qu = sum_qu/hw0
988      av_thvu = sum_thvu/hw0
989      av_dth = sum_dth/hw0
990      av_dq = sum_dq/hw0
991      av_rho = sum_rho/hw0
992      av_dtdwn = sum_dtdwn/hw0
993      av_dqdwn = sum_dqdwn/hw0
994
995      wape2 = - rg*hw0*(av_dth
996     $     + eps*(av_thu*av_dq+av_dth*av_qu+av_dth*av_dq ))/av_thvu
997
998
999C 2.2 Prognostic variable update
1000C ------------------------------------------------------------
1001
1002C Filter out bad wakes
1003
1004      IF ( wape2 .LT. 0.) THEN
1005        if(prt_level.ge.10) print*,'wape2<0'
1006        wape2 = 0.
1007        hw = hwmin
1008        sigmaw = max(sigmad,sigd_con)
1009        fip = 0.
1010        DO k = 1,klev
1011          deltatw(k) = 0.
1012          deltaqw(k) = 0.
1013          dth(k) = 0.
1014        ENDDO
1015      ELSE
1016        if(prt_level.ge.10) print*,'wape2>0'
1017        Cstar2 = stark*sqrt(2.*wape2)
1018
1019      ENDIF
1020
1021      ktopw = ktop
1022
1023      IF (ktopw .gt. 0) then
1024
1025Cjyg1     Utilisation d'un h_efficace constant ( ~ feeding layer)
1026ccc       heff = 600.
1027C      Utilisation de la hauteur hw
1028cc       heff = 0.7*hw
1029       heff = hw
1030
1031       FIP = 0.5*rho(ktopw)*Cstar2**3*heff*2*sqrt(sigmaw*wdens*3.14)
1032       FIP = alpk * FIP
1033Cjyg2
1034       ELSE
1035         FIP = 0.
1036       ENDIF
1037
1038
1039C   Limitation de sigmaw
1040c
1041C   sécurité : si le wake occuppe plus de 90 % de la surface de la maille,
1042C              alors il disparait en se mélangeant à la partie undisturbed
1043
1044      IF ((sigmaw.GT.0.9).or.
1045     .     ((wape.ge.wape2).and.(wape2.le.1.0))) THEN
1046c      IF (sigmaw.GT.0.9) THEN
1047        DO k = 1,klev
1048          dtls(k) = 0.
1049          dqls(k) = 0.
1050          deltatw(k) = 0.
1051          deltaqw(k) = 0.
1052        ENDDO
1053        wape = 0.
1054        hw = hwmin
1055        sigmaw = sigmad
1056        fip = 0.
1057      ENDIF
1058
1059      RETURN
1060      END
1061
1062
1063
Note: See TracBrowser for help on using the repository browser.